diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 92119bf2c..000000000 --- a/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["env", "flow-vue"], - "plugins": ["syntax-dynamic-import"] -} diff --git a/.bithoundrc b/.bithoundrc new file mode 100644 index 000000000..29f012e54 --- /dev/null +++ b/.bithoundrc @@ -0,0 +1,14 @@ +{ + "ignore": [ + "**/node_modules/**", + "**/build/**", + "**/dist/**", + "**/examples/**", + "**/docs/**", + "**/test/unit/lib/**", + "**/lib/**" + ], + "test": [ + "**/test/**" + ] +} diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 705a68f93..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,81 +0,0 @@ -version: 2 - -defaults: &defaults - working_directory: ~/project/vue-router - docker: - - image: circleci/node:lts-browsers - -jobs: - install: - <<: *defaults - steps: - - checkout - - restore_cache: - keys: - - v1-vue-router-{{ .Branch }}-{{ checksum "yarn.lock" }} - - v1-vue-router-{{ .Branch }}- - - v1-vue-router- - - run: yarn install - - save_cache: - key: v1-vue-router-{{ .Branch }}-{{ checksum "yarn.lock" }} - paths: - - node_modules/ - - persist_to_workspace: - root: ~/project - paths: - - vue-router - - lint-flow-types: - <<: *defaults - steps: - - attach_workspace: - at: ~/project - - run: yarn run lint - - run: yarn run flow - - run: yarn run test:types - - test-unit: - <<: *defaults - steps: - - attach_workspace: - at: ~/project - - run: yarn run test:unit - # add codecov once it is actually ran - # - run: - # name: report coverage stats for non-PRs - # command: | - # if [[ -z $CI_PULL_REQUEST ]]; then - # ./node_modules/.bin/codecov - # fi - - test-e2e: - <<: *defaults - steps: - - attach_workspace: - at: ~/project - - run: yarn run test:e2e - - test-e2e-bs-ie9: - <<: *defaults - steps: - - attach_workspace: - at: ~/project - - run: yarn run test:e2e:ie9 - -workflows: - version: 2 - install-and-parallel-test: - jobs: - - install - - test-unit: - requires: - - install - - lint-flow-types: - requires: - - install - - test-e2e: - requires: - - install - - test-e2e-bs-ie9: - requires: - - install diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 2b88bf081..000000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist -*.ts diff --git a/.eslintrc b/.eslintrc index 97b7461f7..be8961c2e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,10 +1,177 @@ { - "root": true, - "plugins": [ - "flowtype" - ], - "extends": [ - "plugin:vue-libs/recommended", - "plugin:flowtype/recommended" - ] + "env": { + "browser": true, + "node": true + }, + + "ecmaFeatures": { + "arrowFunctions": true, + "destructuring": true, + "classes": true, + "defaultParams": true, + "blockBindings": true, + "modules": true, + "objectLiteralComputedProperties": true, + "objectLiteralShorthandMethods": true, + "objectLiteralShorthandProperties": true, + "restParams": true, + "spread": true, + "templateStrings": true + }, + + "rules": { + "accessor-pairs": 2, + "array-bracket-spacing": 0, + "block-scoped-var": 0, + "brace-style": [2, "1tbs", { "allowSingleLine": true }], + "camelcase": 0, + "comma-dangle": [2, "never"], + "comma-spacing": [2, { "before": false, "after": true }], + "comma-style": [2, "last"], + "complexity": 0, + "computed-property-spacing": 0, + "consistent-return": 0, + "consistent-this": 0, + "constructor-super": 2, + "curly": [2, "multi-line"], + "default-case": 0, + "dot-location": [2, "property"], + "dot-notation": 0, + "eol-last": 2, + "eqeqeq": [2, "allow-null"], + "func-names": 0, + "func-style": 0, + "generator-star-spacing": [2, { "before": true, "after": true }], + "guard-for-in": 0, + "handle-callback-err": [2, "^(err|error)$" ], + "indent": [2, 2, { "SwitchCase": 1 }], + "key-spacing": [2, { "beforeColon": false, "afterColon": true }], + "linebreak-style": 0, + "lines-around-comment": 0, + "max-nested-callbacks": 0, + "new-cap": [2, { "newIsCap": true, "capIsNew": false }], + "new-parens": 2, + "newline-after-var": 0, + "no-alert": 0, + "no-array-constructor": 2, + "no-caller": 2, + "no-catch-shadow": 0, + "no-cond-assign": 2, + "no-console": 0, + "no-constant-condition": 0, + "no-continue": 0, + "no-control-regex": 2, + "no-debugger": 2, + "no-delete-var": 2, + "no-div-regex": 0, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-else-return": 0, + "no-empty": 0, + "no-empty-character-class": 2, + "no-empty-label": 2, + "no-eq-null": 0, + "no-eval": 2, + "no-ex-assign": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": 0, + "no-extra-semi": 0, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-implied-eval": 2, + "no-inline-comments": 0, + "no-inner-declarations": [2, "functions"], + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-iterator": 2, + "no-label-var": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-lonely-if": 0, + "no-loop-func": 0, + "no-mixed-requires": 0, + "no-mixed-spaces-and-tabs": 2, + "no-multi-spaces": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [2, { "max": 1 }], + "no-native-reassign": 2, + "no-negated-in-lhs": 2, + "no-nested-ternary": 0, + "no-new": 2, + "no-new-func": 0, + "no-new-object": 2, + "no-new-require": 2, + "no-new-wrappers": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-octal-escape": 2, + "no-param-reassign": 0, + "no-path-concat": 0, + "no-process-env": 0, + "no-process-exit": 0, + "no-proto": 0, + "no-redeclare": 2, + "no-regex-spaces": 2, + "no-restricted-modules": 0, + "no-return-assign": 2, + "no-script-url": 0, + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow": 0, + "no-shadow-restricted-names": 2, + "no-spaced-func": 2, + "no-sparse-arrays": 2, + "no-sync": 0, + "no-ternary": 0, + "no-this-before-super": 2, + "no-throw-literal": 2, + "no-trailing-spaces": 2, + "no-undef": 2, + "no-undef-init": 2, + "no-undefined": 0, + "no-underscore-dangle": 0, + "no-unexpected-multiline": 2, + "no-unneeded-ternary": 2, + "no-unreachable": 2, + "no-unused-expressions": 0, + "no-unused-vars": [2, { "vars": "all", "args": "none" }], + "no-use-before-define": 0, + "no-var": 0, + "no-void": 0, + "no-warning-comments": 0, + "no-with": 2, + "object-curly-spacing": 0, + "object-shorthand": 0, + "one-var": [2, { "initialized": "never" }], + "operator-assignment": 0, + "operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }], + "padded-blocks": 0, + "prefer-const": 0, + "quote-props": 0, + "quotes": [2, "single", "avoid-escape"], + "radix": 2, + "semi": [2, "never"], + "semi-spacing": 0, + "sort-vars": 0, + "space-after-keywords": [2, "always"], + "space-before-blocks": [2, "always"], + "space-before-function-paren": [2, "always"], + "space-in-parens": [2, "never"], + "space-infix-ops": 2, + "space-return-throw-case": 2, + "space-unary-ops": [2, { "words": true, "nonwords": false }], + "spaced-comment": [2, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!"] }], + "strict": 0, + "use-isnan": 2, + "valid-jsdoc": 0, + "valid-typeof": 2, + "vars-on-top": 0, + "wrap-iife": [2, "any"], + "wrap-regex": 0, + "yoda": [2, "never"] + } } diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index a22d5fe98..000000000 --- a/.flowconfig +++ /dev/null @@ -1,15 +0,0 @@ -[ignore] -.*/node_modules/.* -.*/test/.* -.*/dist/.* -.*/examples/.* -.*/vue/.* - -[include] - -[libs] -flow - -[options] -#unsafe.enable_getters_and_setters=true -suppress_comment= \\(.\\|\n\\)*\\$flow-disable-line diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 355e5a7cc..000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,7 +0,0 @@ -<!-- -IMPORTANT: Please use the following link to create a new issue: - - https://new-issue.vuejs.org/?repo=vuejs/vue-router - -If your issue was not created using the app above, it will be closed immediately. ---> diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 811a6cd4b..000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,4 +0,0 @@ -<!-- -Please make sure to read the Pull Request Guidelines: -https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#pull-request-guidelines ---> diff --git a/.github/funding.yml b/.github/funding.yml deleted file mode 100644 index e4c7570c1..000000000 --- a/.github/funding.yml +++ /dev/null @@ -1,2 +0,0 @@ -github: [posva, yyx990803] -open_collective: vuejs diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml deleted file mode 100644 index 268578f3f..000000000 --- a/.github/workflows/release-tag.yml +++ /dev/null @@ -1,23 +0,0 @@ -on: - push: - tags: - - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 - -name: Create Release - -jobs: - build: - name: Create Release - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@master - - name: Create Release for Tag - id: release_tag - uses: yyx990803/release-tag@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - body: | - Please refer to [CHANGELOG.md](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md) for details. diff --git a/.gitignore b/.gitignore index 7fab9dc67..8d6f37e58 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,9 @@ .DS_Store node_modules -TODOs.md -test/e2e/reports -test/e2e/screenshots -selenium-debug.log -dist/*.gz -dist/*.map +coverage explorations -docs/.vuepress/dist -yarn-error.log -.idea -.vscode/settings.json -.env -selenium-server.log -local.log -browserstack.err +TODOS.md +*.log +docs/_book +dist/vue-router.min.js.gz +dist/vue-router.js.map diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 2c2c282d6..000000000 --- a/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "semi": false, - "singleQuote": true, - "printWidth": 80 -} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 520f3ff13..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,397 +0,0 @@ -## [3.6.5](https://github.com/vuejs/vue-router/compare/v3.6.4...v3.6.5) (2022-09-06) - -### Bug Fixes - -- **types:** Component with 4 generics for Vue 2.6 ([d6064df](https://github.com/vuejs/vue-router/commit/d6064df1112497dac98e4302d81607efdb1a58c6)), closes [#3786](https://github.com/vuejs/vue-router/issues/3786) - -## [3.6.4](https://github.com/vuejs/vue-router/compare/v3.6.3...v3.6.4) (2022-08-25) - -This release fixes some compatibility issues of the new `vue-router/composables` with webpack 4. - -### Features - -- **types:** add composables.d.ts in root ([#3784](https://github.com/vuejs/vue-router/issues/3784)) ([0cf54de](https://github.com/vuejs/vue-router/commit/0cf54de782a0b05692bbe78a7181495b6a35b8d9)) - -## [3.6.3](https://github.com/vuejs/vue-router/compare/v3.6.2...v3.6.3) (2022-08-23) - -### Bug Fixes - -- **build:** export all named exports esm build ([a6647c8](https://github.com/vuejs/vue-router/commit/a6647c8c3d7022f1b702935461c7d234b052ca06)) -- **types:** allow jsx components ([0cb86b3](https://github.com/vuejs/vue-router/commit/0cb86b3865b713201f9db49c7a8d23e9a2876f29)), closes [#3776](https://github.com/vuejs/vue-router/issues/3776) -- **types:** missing NavigationFailureType and isNavigationFailure ([#3777](https://github.com/vuejs/vue-router/issues/3777)) ([9d001dd](https://github.com/vuejs/vue-router/commit/9d001dd0bebdea1e1a8ec2f0c77113b6a2e2b6a3)) - -## [3.6.2](https://github.com/vuejs/vue-router/compare/v3.6.1...v3.6.2) (2022-08-23) - -### Bug Fixes - -- **build:** add mjs build ([b4c3940](https://github.com/vuejs/vue-router/commit/b4c39404eff7ae2f657c405d7b0f939ce20cfdec)) -- **types:** missing start location ([1356acb](https://github.com/vuejs/vue-router/commit/1356acb983c5eccb00c5c0ec3f406218ae49a8c1)) - -## [3.6.1](https://github.com/vuejs/vue-router/compare/v3.6.0...v3.6.1) (2022-08-23) - -### Bug Fixes - -- **build:** ensure install fn before Vue.use ([0126bcb](https://github.com/vuejs/vue-router/commit/0126bcbfb0e3cb824bfce05090ca018faf02ce5e)), closes [#3772](https://github.com/vuejs/vue-router/issues/3772) - -# [3.6.0](https://github.com/vuejs/vue-router/compare/v3.5.4...v3.6.0) (2022-08-22) - -This release of Vue Router introduces composables from Vue Router 4: - -```js -import { useRoute, useRouter, useLink, onBeforeRouteUpdate, onBeforeRouteLeave } from 'vue-router/composables' -``` - -Since these composables **require Vue 2.7**, they are only exposed under `vue-router/composables` submodule, so it shouldn't affect you if you stay on Vue 2.6 (Note there are no new features or fixes besides the composables in this release). Refer to [the Vue Router 4 API documentation](https://router.vuejs.org/api/#onbeforerouteleave) for details on the composables. - -### Features - -- **types:** useLink() ([77bd0e3](https://github.com/vuejs/vue-router/commit/77bd0e317dd5a9aebfca515f0f28f3284c7d8260)) -- useLink() ([50332e5](https://github.com/vuejs/vue-router/commit/50332e5e93e6aa1194a9e68a60937a6f9e8bcecd)) -- **types:** expose RouterLink and RouterView in d.ts ([cad978a](https://github.com/vuejs/vue-router/commit/cad978a832174aac59cad86fe780f8a64a9754d7)) -- add RouterLink and RouterView to esm ([4511f39](https://github.com/vuejs/vue-router/commit/4511f393334247c9702ed378220bf925cdc09add)) -- add vue 2.7 types ([cba9650](https://github.com/vuejs/vue-router/commit/cba9650e5cbf958c1db9cd259a2e7bfbc28bddbe)) -- onBeforeRouteUpdate onBeforeRouteLeave ([9861c55](https://github.com/vuejs/vue-router/commit/9861c553627f5f34a07ad3ac28e2ed02aab99d47)) -- useRoute and useRouter ([ea35594](https://github.com/vuejs/vue-router/commit/ea355943e097914ae55fa54ccb7df929c901e80d)) - -## [3.5.4](https://github.com/vuejs/vue-router/compare/v3.5.3...v3.5.4) (2022-05-16) - -### Bug Fixes - -- remove whitespace between mulitple slashes ([86d7f1f](https://github.com/vuejs/vue-router/commit/86d7f1fdaa36432f6564309925690ec20bb2981e)), closes [#3743](https://github.com/vuejs/vue-router/issues/3743) - -## [3.5.3](https://github.com/vuejs/vue-router/compare/v3.5.2...v3.5.3) (2021-10-26) - -### Bug Fixes - -- clean more than two consecutive slashes ([#3652](https://github.com/vuejs/vue-router/issues/3652)) ([3e3a07e](https://github.com/vuejs/vue-router/commit/3e3a07ee6e7defd6cae75bddcede5a28b0092709)) -- **scrollBehavior:** trigger scroll behavior if same route with hash ([#3592](https://github.com/vuejs/vue-router/issues/3592)) ([57d8042](https://github.com/vuejs/vue-router/commit/57d8042c8b99f92bfe35493b8ae9bba827864bf0)) - -### Features - -- add constructor hint ([#3626](https://github.com/vuejs/vue-router/issues/3626)) ([28b769b](https://github.com/vuejs/vue-router/commit/28b769b2a07e3bf984c0ec20d6d797291a480e81)) - -## [3.5.2](https://github.com/vuejs/vue-router/compare/v3.5.1...v3.5.2) (2021-06-21) - -### Bug Fixes - -- **history:** stricter check of base in HTML5 ([#3556](https://github.com/vuejs/vue-router/issues/3556)) ([11dd184](https://github.com/vuejs/vue-router/commit/11dd184dc6a872c6399977fa4b7c259225ce4834)) -- **types:** added missing router.match ([#3554](https://github.com/vuejs/vue-router/issues/3554)) ([394a3b6](https://github.com/vuejs/vue-router/commit/394a3b6cce5e395ae4ccf3e2efb0c115d492978c)) - -## [3.5.1](https://github.com/vuejs/vue-router/compare/v3.5.0...v3.5.1) (2021-01-26) - -### Bug Fixes - -- **warn:** only warn if "tag" or "event" is used ([#3458](https://github.com/vuejs/vue-router/issues/3458)) ([b7a31b9](https://github.com/vuejs/vue-router/commit/b7a31b9)), closes [#3457](https://github.com/vuejs/vue-router/issues/3457) - -# [3.5.0](https://github.com/vuejs/vue-router/compare/v3.4.9...v3.5.0) (2021-01-25) - -### Features - -- **link:** exact-path prop ([825328e](https://github.com/vuejs/vue-router/commit/825328e)), closes [#2040](https://github.com/vuejs/vue-router/issues/2040) -- **warn:** warn deprecated addRoutes ([2e41445](https://github.com/vuejs/vue-router/commit/2e41445)) -- expose START_LOCATION ([53b68dd](https://github.com/vuejs/vue-router/commit/53b68dd)), closes [#2718](https://github.com/vuejs/vue-router/issues/2718) -- **link:** deprecate v-slot without custom prop ([ceeda4c](https://github.com/vuejs/vue-router/commit/ceeda4c)) -- **link:** warn deprecated props ([d2cb951](https://github.com/vuejs/vue-router/commit/d2cb951)) -- **router:** add getRoutes ([6bc30aa](https://github.com/vuejs/vue-router/commit/6bc30aa)) -- **types:** add types for getRoutes addRoute ([fb9bb60](https://github.com/vuejs/vue-router/commit/fb9bb60)) -- addRoute as nested route ([ca80c44](https://github.com/vuejs/vue-router/commit/ca80c44)), closes [#1156](https://github.com/vuejs/vue-router/issues/1156) - -## [3.4.9](https://github.com/vuejs/vue-router/compare/v3.4.8...v3.4.9) (2020-11-05) - -### Bug Fixes - -- **encoding:** decode params ([#3350](https://github.com/vuejs/vue-router/issues/3350)) ([63c749c](https://github.com/vuejs/vue-router/commit/63c749c)) - -## [3.4.8](https://github.com/vuejs/vue-router/compare/v3.4.7...v3.4.8) (2020-10-26) - -### Features - -- **scroll:** add behavior support on scrollBehavior ([#3351](https://github.com/vuejs/vue-router/issues/3351)) ([4e0b3e0](https://github.com/vuejs/vue-router/commit/4e0b3e0)) - -## [3.4.7](https://github.com/vuejs/vue-router/compare/v3.4.6...v3.4.7) (2020-10-16) - -### Bug Fixes - -- **matcher:** should try catch decode only ([1f32f03](https://github.com/vuejs/vue-router/commit/1f32f03)) -- **query:** check existing keys ([4b926e3](https://github.com/vuejs/vue-router/commit/4b926e3)), closes [#3341](https://github.com/vuejs/vue-router/issues/3341) - -## [3.4.6](https://github.com/vuejs/vue-router/compare/v3.4.5...v3.4.6) (2020-10-07) - -### Bug Fixes - -- **encoding:** try catch decodes ([607ce2d](https://github.com/vuejs/vue-router/commit/607ce2d)) -- **ssr:** memory leak in poll method ([#2875](https://github.com/vuejs/vue-router/issues/2875)) ([7693eb5](https://github.com/vuejs/vue-router/commit/7693eb5)) -- remove duplicated decodeURIComponent ([#3323](https://github.com/vuejs/vue-router/issues/3323)) ([560d11d](https://github.com/vuejs/vue-router/commit/560d11d)) - -## [3.4.5](https://github.com/vuejs/vue-router/compare/v3.4.4...v3.4.5) (2020-09-26) - -### Bug Fixes - -- **history:** do not call onReady on initial redirection ([a1a290e](https://github.com/vuejs/vue-router/commit/a1a290e)), closes [#3331](https://github.com/vuejs/vue-router/issues/3331) - -## [3.4.4](https://github.com/vuejs/vue-router/compare/v3.4.3...v3.4.4) (2020-09-24) - -### Bug Fixes - -- **abstract:** call afterHooks with go ([4da7021](https://github.com/vuejs/vue-router/commit/4da7021)), closes [#3250](https://github.com/vuejs/vue-router/issues/3250) -- **history:** mark redundant navigation as pending ([893d86b](https://github.com/vuejs/vue-router/commit/893d86b)), closes [#3133](https://github.com/vuejs/vue-router/issues/3133) -- **types:** add missing NavigationFailure types ([fda7067](https://github.com/vuejs/vue-router/commit/fda7067)), closes [#3293](https://github.com/vuejs/vue-router/issues/3293) -- **types:** fix VueRouter.NavigationFailureType ([ecc8e27](https://github.com/vuejs/vue-router/commit/ecc8e27)) - -### Features - -- **history:** Reset history.current when all apps are destroyed ([#3298](https://github.com/vuejs/vue-router/issues/3298)) ([c69ff7b](https://github.com/vuejs/vue-router/commit/c69ff7b)) - -## [3.4.3](https://github.com/vuejs/vue-router/compare/v3.4.2...v3.4.3) (2020-08-11) - -- Revert 4fbaa9f7880276e661227442ef5923131a589210: "fix: keep repeated params in query/hash relative locations" Closes #3289 - -## [3.4.2](https://github.com/vuejs/vue-router/compare/v3.4.1...v3.4.2) (2020-08-07) - -### Bug Fixes - -- **query:** leave object as is ([7b3328d](https://github.com/vuejs/vue-router/commit/7b3328d)), closes [#3282](https://github.com/vuejs/vue-router/issues/3282) -- keep repeated params in query/hash relative locations ([4fbaa9f](https://github.com/vuejs/vue-router/commit/4fbaa9f)) - -## [3.4.1](https://github.com/vuejs/vue-router/compare/v3.4.0...v3.4.1) (2020-08-06) - -### Bug Fixes - -- **query:** remove undefined values ([b952573](https://github.com/vuejs/vue-router/commit/b952573)), closes [#3276](https://github.com/vuejs/vue-router/issues/3276) -- **router:** properly check null and undefined in isSameRoute ([d6546d9](https://github.com/vuejs/vue-router/commit/d6546d9)) - -# [3.4.0](https://github.com/vuejs/vue-router/compare/v3.3.4...v3.4.0) (2020-08-05) - -### Bug Fixes - -- **query:** cast query values to strings (fix [#2131](https://github.com/vuejs/vue-router/issues/2131)) ([#3232](https://github.com/vuejs/vue-router/issues/3232)) ([f0d9c2d](https://github.com/vuejs/vue-router/commit/f0d9c2d)) -- **scroll:** run scrollBehavior on initial load (fix [#3196](https://github.com/vuejs/vue-router/issues/3196)) ([#3199](https://github.com/vuejs/vue-router/issues/3199)) ([84398ae](https://github.com/vuejs/vue-router/commit/84398ae)) -- **types:** add missing `options` property type ([#3248](https://github.com/vuejs/vue-router/issues/3248)) ([83920c9](https://github.com/vuejs/vue-router/commit/83920c9)) - -### Features - -- add vetur tags and attributes ([bf1e1bd](https://github.com/vuejs/vue-router/commit/bf1e1bd)) -- **errors:** capture errors thrown in redirect callback in onError ([#3251](https://github.com/vuejs/vue-router/issues/3251)) ([40e4df7](https://github.com/vuejs/vue-router/commit/40e4df7)), closes [#3201](https://github.com/vuejs/vue-router/issues/3201) [#3201](https://github.com/vuejs/vue-router/issues/3201) [#3201](https://github.com/vuejs/vue-router/issues/3201) -- **errors:** expose `isNavigationFailure` ([8d92dc0](https://github.com/vuejs/vue-router/commit/8d92dc0)) -- **errors:** NavigationDuplicated name for backwards compatibility ([b854a20](https://github.com/vuejs/vue-router/commit/b854a20)) - -## [3.3.4](https://github.com/vuejs/vue-router/compare/v3.3.3...v3.3.4) (2020-06-13) - -### Bug Fixes - -- **matcher:** navigate to same as current location ([62598b9](https://github.com/vuejs/vue-router/commit/62598b9)), closes [#3216](https://github.com/vuejs/vue-router/issues/3216) -- **types:** missing children ([c1df447](https://github.com/vuejs/vue-router/commit/c1df447)), closes [#3230](https://github.com/vuejs/vue-router/issues/3230) - -## [3.3.3](https://github.com/vuejs/vue-router/compare/v3.3.2...v3.3.3) (2020-06-12) - -### Bug Fixes - -- **history:** initial redirect call onReady's onSuccess ([4d484bf](https://github.com/vuejs/vue-router/commit/4d484bf)), closes [#3225](https://github.com/vuejs/vue-router/issues/3225) -- update ja docs ([#3214](https://github.com/vuejs/vue-router/issues/3214)) ([c05f741](https://github.com/vuejs/vue-router/commit/c05f741)) - -### Features - -- better wording for navigation redirected failure ([1f3aea6](https://github.com/vuejs/vue-router/commit/1f3aea6)) -- **types:** RouterConfig for multiple components ([#3217](https://github.com/vuejs/vue-router/issues/3217)) ([#3218](https://github.com/vuejs/vue-router/issues/3218)) ([dab86c5](https://github.com/vuejs/vue-router/commit/dab86c5)) - -## [3.3.2](https://github.com/vuejs/vue-router/compare/v3.3.1...v3.3.2) (2020-05-29) - -### Bug Fixes - -- **errors:** NavigationCanceled with async components ([#3211](https://github.com/vuejs/vue-router/issues/3211)) ([be39ca3](https://github.com/vuejs/vue-router/commit/be39ca3)) -- remove error.stack modification ([#3212](https://github.com/vuejs/vue-router/issues/3212)) ([a0075ed](https://github.com/vuejs/vue-router/commit/a0075ed)) - -## [3.3.1](https://github.com/vuejs/vue-router/compare/v3.3.0...v3.3.1) (2020-05-27) - -### Bug Fixes - -- **errors:** avoid unnecessary log of errors ([2c77247](https://github.com/vuejs/vue-router/commit/2c77247)) - -# [3.3.0](https://github.com/vuejs/vue-router/compare/v3.2.0...v3.3.0) (2020-05-27) - -### Features - -- **errors:** create router errors ([#3047](https://github.com/vuejs/vue-router/issues/3047)) ([4c727f9](https://github.com/vuejs/vue-router/commit/4c727f9)) -- **history:** Remove event listeners when all apps are destroyed. ([#3172](https://github.com/vuejs/vue-router/issues/3172)) ([4c81be8](https://github.com/vuejs/vue-router/commit/4c81be8)), closes [#3152](https://github.com/vuejs/vue-router/issues/3152) [#2341](https://github.com/vuejs/vue-router/issues/2341) -- **url:** call afterEach hooks after url is ensured ([#2292](https://github.com/vuejs/vue-router/issues/2292)) ([1575a18](https://github.com/vuejs/vue-router/commit/1575a18)), closes [#2079](https://github.com/vuejs/vue-router/issues/2079) - -# [3.2.0](https://github.com/vuejs/vue-router/compare/v3.1.6...v3.2.0) (2020-05-19) - -### Bug Fixes - -- **html5:** make base case insensitive ([04a2143](https://github.com/vuejs/vue-router/commit/04a2143)), closes [#2154](https://github.com/vuejs/vue-router/issues/2154) -- check for pushState being a function ([bc41f67](https://github.com/vuejs/vue-router/commit/bc41f67)), closes [#3154](https://github.com/vuejs/vue-router/issues/3154) - -### Features - -- **link:** add aria-current to active links (close [#2116](https://github.com/vuejs/vue-router/issues/2116)) ([#3073](https://github.com/vuejs/vue-router/issues/3073)) ([6ec0ee5](https://github.com/vuejs/vue-router/commit/6ec0ee5)) -- **scroll:** use manual scrollRestoration with scrollBehavior ([#1814](https://github.com/vuejs/vue-router/issues/1814)) ([1261363](https://github.com/vuejs/vue-router/commit/1261363)) -- **types:** NavigationGuardNext ([#2497](https://github.com/vuejs/vue-router/issues/2497)) ([d18c497](https://github.com/vuejs/vue-router/commit/d18c497)) - -## [3.1.6](https://github.com/vuejs/vue-router/compare/v3.1.5...v3.1.6) (2020-02-26) - -### Bug Fixes - -- preserve history state when reloading ([a4ec3e2](https://github.com/vuejs/vue-router/commit/a4ec3e2)) -- **ts:** add null to Route.name ([#3117](https://github.com/vuejs/vue-router/issues/3117)) ([8f831f2](https://github.com/vuejs/vue-router/commit/8f831f2)) -- correctly calculate `path` when `pathMatch` is empty string ([#3111](https://github.com/vuejs/vue-router/issues/3111)) ([38e6ccd](https://github.com/vuejs/vue-router/commit/38e6ccd)), closes [#3106](https://github.com/vuejs/vue-router/issues/3106) - -## [3.1.5](https://github.com/vuejs/vue-router/compare/v3.1.4...v3.1.5) (2020-01-15) - -### Bug Fixes - -- **view:** add passing props to inactive component ([#2773](https://github.com/vuejs/vue-router/issues/2773)) ([0fb1343](https://github.com/vuejs/vue-router/commit/0fb1343)), closes [#2301](https://github.com/vuejs/vue-router/issues/2301) -- **view:** fix deeply nested keep-alive router-views displaying ([#2930](https://github.com/vuejs/vue-router/issues/2930)) ([0c2b1aa](https://github.com/vuejs/vue-router/commit/0c2b1aa)), closes [#2923](https://github.com/vuejs/vue-router/issues/2923) - -## [3.1.4](https://github.com/vuejs/vue-router/compare/v3.1.3...v3.1.4) (2020-01-14) - -### Bug Fixes - -- suppress warning if `pathMatch` is empty ([#3081](https://github.com/vuejs/vue-router/issues/3081)) ([ddc6bc7](https://github.com/vuejs/vue-router/commit/ddc6bc7)), closes [#3072](https://github.com/vuejs/vue-router/issues/3072) -- **link:** correctly warn wrong v-slot usage ([a150291](https://github.com/vuejs/vue-router/commit/a150291)), closes [#3091](https://github.com/vuejs/vue-router/issues/3091) -- **location:** add a copy for params with named locations ([#2802](https://github.com/vuejs/vue-router/issues/2802)) ([2b39f5a](https://github.com/vuejs/vue-router/commit/2b39f5a)), closes [#2800](https://github.com/vuejs/vue-router/issues/2800) [#2938](https://github.com/vuejs/vue-router/issues/2938) [#2938](https://github.com/vuejs/vue-router/issues/2938) - -### Features - -- **history:** preserve existing history.state ([c0d3376](https://github.com/vuejs/vue-router/commit/c0d3376)), closes [#3006](https://github.com/vuejs/vue-router/issues/3006) - -## [3.1.3](https://github.com/vuejs/vue-router/compare/v3.1.2...v3.1.3) (2019-08-30) - -### Bug Fixes - -- **link:** merge event listeners when provided in an anchor ([e0d4dc4](https://github.com/vuejs/vue-router/commit/e0d4dc4)), closes [#2890](https://github.com/vuejs/vue-router/issues/2890) - -### Features - -- **errors:** add stack trace to NavigationDuplicated ([5ef5d73](https://github.com/vuejs/vue-router/commit/5ef5d73)), closes [#2881](https://github.com/vuejs/vue-router/issues/2881) -- warn about root paths without a leading slash ([#2591](https://github.com/vuejs/vue-router/issues/2591)) ([7d7e048](https://github.com/vuejs/vue-router/commit/7d7e048)), closes [#2550](https://github.com/vuejs/vue-router/issues/2550) [#2550](https://github.com/vuejs/vue-router/issues/2550) - -## [3.1.2](https://github.com/vuejs/vue-router/compare/v3.1.1...v3.1.2) (2019-08-08) - -### Bug Fixes - -- **types:** prioritize promise based push/replace ([1243e8b](https://github.com/vuejs/vue-router/commit/1243e8b)) - -### Reverts - -- "fix(hash): correctly place query if placed before hash ([#2851](https://github.com/vuejs/vue-router/issues/2851))" ([9b30e4c](https://github.com/vuejs/vue-router/commit/9b30e4c)), closes [#2876](https://github.com/vuejs/vue-router/issues/2876). See more information at https://github.com/vuejs/vue-router/issues/2125#issuecomment-519521424 - -## [3.1.1](https://github.com/vuejs/vue-router/compare/v3.1.0...v3.1.1) (2019-08-06) - -### Bug Fixes - -- **link:** silence back navigations errors ([59b6da3](https://github.com/vuejs/vue-router/commit/59b6da3)) - -# [3.1.0](https://github.com/vuejs/vue-router/compare/v3.0.7...v3.1.0) (2019-08-06) - -### Bug Fixes - -- **abstract history:** allow router.back in abstract mode when 2 consecutive same routes appear in history stack ([#2771](https://github.com/vuejs/vue-router/issues/2771)) ([8910979](https://github.com/vuejs/vue-router/commit/8910979)), closes [#2607](https://github.com/vuejs/vue-router/issues/2607) -- **hash:** correctly place query if placed before hash ([#2851](https://github.com/vuejs/vue-router/issues/2851)) ([b7715dc](https://github.com/vuejs/vue-router/commit/b7715dc)), closes [#2125](https://github.com/vuejs/vue-router/issues/2125) [#2262](https://github.com/vuejs/vue-router/issues/2262) -- **link:** Fix active links when parent link redirects to child ([#2772](https://github.com/vuejs/vue-router/issues/2772)) ([64785a9](https://github.com/vuejs/vue-router/commit/64785a9)), closes [#2724](https://github.com/vuejs/vue-router/issues/2724) -- adapt error to work on IE9 ([527d6d5](https://github.com/vuejs/vue-router/commit/527d6d5)) - -### Features - -- **alias:** warn against redundant aliases ([04a02c0](https://github.com/vuejs/vue-router/commit/04a02c0)), closes [#2461](https://github.com/vuejs/vue-router/issues/2461) [#2462](https://github.com/vuejs/vue-router/issues/2462) -- **scroll:** handle id selectors starting with a number ([799ceca](https://github.com/vuejs/vue-router/commit/799ceca)), closes [#2163](https://github.com/vuejs/vue-router/issues/2163) -- return a promise with push and replace ([#2862](https://github.com/vuejs/vue-router/issues/2862)) ([d907a13](https://github.com/vuejs/vue-router/commit/d907a13)), closes [#1769](https://github.com/vuejs/vue-router/issues/1769) [#1769](https://github.com/vuejs/vue-router/issues/1769) -- scoped slot for link ([e289dde](https://github.com/vuejs/vue-router/commit/e289dde)) -- warn the user for invalid uses of v-slot with Link ([44c63a9](https://github.com/vuejs/vue-router/commit/44c63a9)) - -## [3.0.7](https://github.com/vuejs/vue-router/compare/v3.0.6...v3.0.7) (2019-07-03) - -### Bug Fixes - -- apps loaded from Windows file shares not mapped to network drives ([#2774](https://github.com/vuejs/vue-router/issues/2774)) ([c2c78a3](https://github.com/vuejs/vue-router/commit/c2c78a3)) -- make callback of next in beforeRouterEnter more consistent ([#2738](https://github.com/vuejs/vue-router/issues/2738)) ([8ac478f](https://github.com/vuejs/vue-router/commit/8ac478f)), closes [#2761](https://github.com/vuejs/vue-router/issues/2761) [#2728](https://github.com/vuejs/vue-router/issues/2728) - -## [3.0.6](https://github.com/vuejs/vue-router/compare/v3.0.5...v3.0.6) (2019-04-17) - -### Bug Fixes - -- revert [#2713](https://github.com/vuejs/vue-router/issues/2713) ([#2723](https://github.com/vuejs/vue-router/issues/2723)) ([ec6eab7](https://github.com/vuejs/vue-router/commit/ec6eab7)), closes [#2719](https://github.com/vuejs/vue-router/issues/2719) - -## [3.0.5](https://github.com/vuejs/vue-router/compare/v3.0.4...v3.0.5) (2019-04-15) - -### Bug Fixes - -- push before creating Vue instance ([#2713](https://github.com/vuejs/vue-router/issues/2713)) ([6974a6f](https://github.com/vuejs/vue-router/commit/6974a6f)), closes [#2712](https://github.com/vuejs/vue-router/issues/2712) -- **router-view:** add condition to see whether the tree is inactive (fix [#2552](https://github.com/vuejs/vue-router/issues/2552)) ([#2592](https://github.com/vuejs/vue-router/issues/2592)) ([e6d8fd2](https://github.com/vuejs/vue-router/commit/e6d8fd2)) -- **router-view:** register instance in init hook ([c3abdf6](https://github.com/vuejs/vue-router/commit/c3abdf6)), closes [#2561](https://github.com/vuejs/vue-router/issues/2561) [#2689](https://github.com/vuejs/vue-router/issues/2689) [#2561](https://github.com/vuejs/vue-router/issues/2561) [#2561](https://github.com/vuejs/vue-router/issues/2561) - -## [3.0.4](https://github.com/vuejs/vue-router/compare/v3.0.3...v3.0.4) (2019-04-12) - -### Bug Fixes - -- prevent memory leaks by removing app references ([#2706](https://github.com/vuejs/vue-router/issues/2706)) ([8056105](https://github.com/vuejs/vue-router/commit/8056105)), closes [#2639](https://github.com/vuejs/vue-router/issues/2639) -- **hash:** prevent double decoding ([#2711](https://github.com/vuejs/vue-router/issues/2711)) ([a775fb1](https://github.com/vuejs/vue-router/commit/a775fb1)), closes [#2708](https://github.com/vuejs/vue-router/issues/2708) - -### Features - -- **esm build:** build ES modules for browser ([#2705](https://github.com/vuejs/vue-router/issues/2705)) ([627027f](https://github.com/vuejs/vue-router/commit/627027f)) - -## [3.0.3](https://github.com/vuejs/vue-router/compare/v3.0.2...v3.0.3) (2019-04-08) - -### Bug Fixes - -- removes warning resolving asterisk routes ([e224637](https://github.com/vuejs/vue-router/commit/e224637)), closes [#2505](https://github.com/vuejs/vue-router/issues/2505) [#2505](https://github.com/vuejs/vue-router/issues/2505) -- **normalizeLocation:** create a copy with named locations ([#2286](https://github.com/vuejs/vue-router/issues/2286)) ([53cce99](https://github.com/vuejs/vue-router/commit/53cce99)), closes [#2121](https://github.com/vuejs/vue-router/issues/2121) -- **resolve:** use current location if not provided ([#2390](https://github.com/vuejs/vue-router/issues/2390)) ([7ff4de4](https://github.com/vuejs/vue-router/commit/7ff4de4)), closes [#2385](https://github.com/vuejs/vue-router/issues/2385) -- **types:** allow null/undefined in query params ([ca30a75](https://github.com/vuejs/vue-router/commit/ca30a75)), closes [#2605](https://github.com/vuejs/vue-router/issues/2605) - -## [3.0.2](https://github.com/vuejs/vue-router/compare/v3.0.1...v3.0.2) (2018-11-23) - -### Bug Fixes - -- **errors:** throws with invalid route objects ([#1893](https://github.com/vuejs/vue-router/issues/1893)) ([c837666](https://github.com/vuejs/vue-router/commit/c837666)) -- fix the test in async.spec.js ([#1953](https://github.com/vuejs/vue-router/issues/1953)) ([4e9e66b](https://github.com/vuejs/vue-router/commit/4e9e66b)) -- initial url path for non ascii urls ([#2375](https://github.com/vuejs/vue-router/issues/2375)) ([c3b0a33](https://github.com/vuejs/vue-router/commit/c3b0a33)) -- only setupScroll when support pushState due to possible fallback: false ([#1835](https://github.com/vuejs/vue-router/issues/1835)) ([fac60f6](https://github.com/vuejs/vue-router/commit/fac60f6)), closes [#1834](https://github.com/vuejs/vue-router/issues/1834) -- workaround replaceState bug in Safari ([#2295](https://github.com/vuejs/vue-router/issues/2295)) ([3c7d8ab](https://github.com/vuejs/vue-router/commit/3c7d8ab)), closes [#2195](https://github.com/vuejs/vue-router/issues/2195) -- **hash:** support unicode in initial route ([8369c6b](https://github.com/vuejs/vue-router/commit/8369c6b)) -- **history-mode:** correcting indentation in web.config example ([#1948](https://github.com/vuejs/vue-router/issues/1948)) ([4b071f9](https://github.com/vuejs/vue-router/commit/4b071f9)) -- **match:** use pathMatch for the param of \* routes ([#1995](https://github.com/vuejs/vue-router/issues/1995)) ([ca1fccd](https://github.com/vuejs/vue-router/commit/ca1fccd)), closes [#1994](https://github.com/vuejs/vue-router/issues/1994) - -### Features - -- call scrollBehavior with app context ([#1804](https://github.com/vuejs/vue-router/issues/1804)) ([c93a734](https://github.com/vuejs/vue-router/commit/c93a734)) - -## [3.0.1](https://github.com/vuejs/vue-router/compare/v3.0.0...v3.0.1) (2017-10-13) - -### Bug Fixes - -- fix props-passing regression ([02ff792](https://github.com/vuejs/vue-router/commit/02ff792)), closes [#1800](https://github.com/vuejs/vue-router/issues/1800) - -## [3.0.0](https://github.com/vuejs/vue-router/compare/v2.8.0...v3.0.0) (2017-10-11) - -### Features - -- **typings:** adapt to the new Vue typings ([#1685](https://github.com/vuejs/vue-router/issues/1685)) ([8855e36](https://github.com/vuejs/vue-router/commit/8855e36)) - -### BREAKING CHANGES - -- **typings:** It is no longer compatible with the old Vue typings - -## [2.8.0](https://github.com/vuejs/vue-router/compare/v2.7.0...v2.8.0) (2017-10-11) - -### Bug Fixes - -- allow insllation on extended Vue copies ([f62c5d6](https://github.com/vuejs/vue-router/commit/f62c5d6)) -- avoid first popstate event with async guard together (fix [#1508](https://github.com/vuejs/vue-router/issues/1508)) ([#1661](https://github.com/vuejs/vue-router/issues/1661)) ([3cbc0f3](https://github.com/vuejs/vue-router/commit/3cbc0f3)) -- deep clone query when creating routes ([effb114](https://github.com/vuejs/vue-router/commit/effb114)), closes [#1690](https://github.com/vuejs/vue-router/issues/1690) -- fix scroll when going back to initial route ([#1586](https://github.com/vuejs/vue-router/issues/1586)) ([c166822](https://github.com/vuejs/vue-router/commit/c166822)) -- handle null values when comparing objects ([#1568](https://github.com/vuejs/vue-router/issues/1568)) ([4e95bd8](https://github.com/vuejs/vue-router/commit/4e95bd8)), closes [#1566](https://github.com/vuejs/vue-router/issues/1566) -- resolve native ES modules ([8a28426](https://github.com/vuejs/vue-router/commit/8a28426)) -- send props not defined on the route component in \$attrs. Fixes [#1695](https://github.com/vuejs/vue-router/issues/1695). ([#1702](https://github.com/vuejs/vue-router/issues/1702)) ([a722b6a](https://github.com/vuejs/vue-router/commit/a722b6a)) - -### Features - -- enhance hashHistory to support scrollBehavior ([#1662](https://github.com/vuejs/vue-router/issues/1662)) ([1422eb5](https://github.com/vuejs/vue-router/commit/1422eb5)) -- scrollBehavior accept returning a promise ([#1758](https://github.com/vuejs/vue-router/issues/1758)) ([ce13b55](https://github.com/vuejs/vue-router/commit/ce13b55)) - -# [2.7.0](https://github.com/vuejs/vue-router/compare/v2.6.0...v2.7.0) (2017-06-29) - -### Features - -- auto resolve ES module default when resolving async components ([d539788](https://github.com/vuejs/vue-router/commit/d539788)) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 888e2ccda..000000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2013-present Evan You - -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. diff --git a/README.md b/README.md index 40cba38ce..2a38e576e 100644 --- a/README.md +++ b/README.md @@ -1,123 +1,62 @@ -# vue-router [](https://circleci.com/gh/vuejs/vue-router) - -> This is vue-router 3.0 which works only with Vue 2.0. -> - For the 1.x router see the [1.0 branch](https://github.com/vuejs/vue-router/tree/1.0). -> - For Vue Router 4 (for Vue 3) see [vuejs/router](https://github.com/vuejs/router). - -<h2 align="center">Supporting Vue Router</h2> - -Vue Router is part of the Vue Ecosystem and is an MIT-licensed open source project with its ongoing development made possible entirely by the support of Sponsors. If you would like to become a sponsor, please consider: - -- [Become a Sponsor on GitHub](https://github.com/sponsors/posva) -- [One-time donation via PayPal](https://paypal.me/posva) - -<!--sponsors start--> - -<h4 align="center">Gold Sponsors</h4> -<p align="center"> - <a href="https://vuejobs.com/?utm_source=vuerouter&utm_campaign=sponsor" target="_blank" rel="noopener noreferrer"> - <picture> - <source srcset="https://posva-sponsors.pages.dev/logos/vuejobs.svg" media="(prefers-color-scheme: dark)" height="72px" alt="VueJobs" /> - <img src="https://posva-sponsors.pages.dev/logos/vuejobs.svg" height="72px" alt="VueJobs" /> - </picture> - </a> -</p> - -<h4 align="center">Silver Sponsors</h4> -<p align="center"> - <a href="https://www.vuemastery.com/" target="_blank" rel="noopener noreferrer"> - <picture> - <source srcset="https://posva-sponsors.pages.dev/logos/vuemastery-dark.png" media="(prefers-color-scheme: dark)" height="42px" alt="VueMastery" /> - <img src="https://posva-sponsors.pages.dev/logos/vuemastery-light.svg" height="42px" alt="VueMastery" /> - </picture> - </a> - <a href="https://www.prefect.io/" target="_blank" rel="noopener noreferrer"> - <picture> - <source srcset="https://posva-sponsors.pages.dev/logos/prefectlogo-dark.svg" media="(prefers-color-scheme: dark)" height="42px" alt="Prefect" /> - <img src="https://posva-sponsors.pages.dev/logos/prefectlogo-light.svg" height="42px" alt="Prefect" /> - </picture> - </a> -</p> - -<h4 align="center">Bronze Sponsors</h4> -<p align="center"> - <a href="https://stormier.ninja" target="_blank" rel="noopener noreferrer"> - <picture> - <source srcset="https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4" media="(prefers-color-scheme: dark)" height="26px" alt="Stanislas Ormières" /> - <img src="https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4" height="26px" alt="Stanislas Ormières" /> - </picture> - </a> - <a href="www.vuejs.de" target="_blank" rel="noopener noreferrer"> - <picture> - <source srcset="https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4" media="(prefers-color-scheme: dark)" height="26px" alt="Antony Konstantinidis" /> - <img src="https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4" height="26px" alt="Antony Konstantinidis" /> - </picture> - </a> - <a href="https://storyblok.com" target="_blank" rel="noopener noreferrer"> - <picture> - <source srcset="https://posva-sponsors.pages.dev/logos/storyblok.png" media="(prefers-color-scheme: dark)" height="26px" alt="Storyblok" /> - <img src="https://posva-sponsors.pages.dev/logos/storyblok.png" height="26px" alt="Storyblok" /> - </picture> - </a> - <a href="https://nuxtjs.org" target="_blank" rel="noopener noreferrer"> - <picture> - <source srcset="https://posva-sponsors.pages.dev/logos/nuxt-dark.svg" media="(prefers-color-scheme: dark)" height="26px" alt="NuxtJS" /> - <img src="https://posva-sponsors.pages.dev/logos/nuxt-light.svg" height="26px" alt="NuxtJS" /> - </picture> - </a> -</p> - -<!--sponsors end--> - ---- - -Get started with the [documentation](http://v3.router.vuejs.org), or play with the [examples](https://github.com/vuejs/vue-router/tree/dev/examples) (see how to run them below). +# vue-router [](https://circleci.com/gh/vuejs/vue-router) [](https://www.npmjs.com/package/vue-router) [](https://www.bithound.io/github/vuejs/vue-router) [](http://issuestats.com/github/vuejs/vue-router) + +**Compatibility Note:** `vue-router` requires Vue.js 0.12.10+ and currently does not support Vue.js 2.0. + +### Introduction + +`vue-router` is the official router for [Vue.js](http://vuejs.org). It deeply integrates with Vue.js core to make building Single Page Applications with Vue.js a breeze. Features include: + +- Nested route/view mapping +- Modular, component-based router configuration +- Route params, query, wildcards +- View transition effects powered by Vue.js' transition system +- Fine-grained navigation control +- Links with automatic active CSS classes +- HTML5 history mode or hash mode, with auto-fallback in IE9 +- Restore scroll position when going back in history mode + +Get started with the [documentation](http://vuejs.github.io/vue-router). ### Development Setup -```bash +``` bash # install deps -yarn +npm install # build dist files -yarn build +npm run build -# serve examples at localhost:8080 -yarn dev +# serve example app at localhost:8080 +npm run serve-example -# lint & run all tests -yarn test +# and unit tests at localhost:8081 +npm run dev -# serve docs at localhost:8080 -yarn docs -``` +# lint & run all tests +npm test -## Releasing +# run unit tests only +npm run unit -- `yarn run release` - - Ensure tests are passing `yarn run test` - - Build dist files `VERSION=<the_version> yarn run build` - - Build changelog `yarn run changelog` - - Commit dist files `git add dist CHANGELOG.md && git commit -m "[build $VERSION]"` - - Publish a new version `npm version $VERSION --message "[release] $VERSION" - - Push tags `git push origin refs/tags/v$VERSION && git push` - - Publish to npm `npm publish` +# run e2e tests only +npm run e2e-local +``` ## Questions -For questions and support please use the [Discord chat server](https://chat.vuejs.org) or [the official forum](http://forum.vuejs.org). The issue list of this repo is **exclusively** for bug reports and feature requests. +For questions and support please use the [Gitter chat room](https://gitter.im/vuejs/vue) or [the official forum](http://forum.vuejs.org). The issue list of this repo is **exclusively** for bug reports and feature requests. ## Issues -Please make sure to read the [Issue Reporting Checklist](https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#issue-reporting-guidelines) before opening an issue. Issues not conforming to the guidelines may be closed immediately. +Please make sure to read the [Issue Reporting Checklist](https://github.com/vuejs/vue/blob/dev/CONTRIBUTING.md#issue-reporting-guidelines) before opening an issue. Issues not conforming to the guidelines may be closed immediately. ## Contribution -Please make sure to read the [Contributing Guide](https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md) before making a pull request. +Please make sure to read the [Contributing Guide](https://github.com/vuejs/vue/blob/dev/CONTRIBUTING.md) before making a pull request. ## Changelog -Details changes for each release are documented in the [`CHANGELOG.md file`](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md). +Details changes for each release are documented in the [release notes](https://github.com/vuejs/vue-router/releases). ## Stay In Touch @@ -127,12 +66,6 @@ Details changes for each release are documented in the [`CHANGELOG.md file`](htt [MIT](http://opensource.org/licenses/MIT) -Copyright (c) 2013-present Evan You - -## Special Thanks +Copyright (c) 2013-2016 Evan You -<a href="https://www.browserstack.com"> - <img src="/assets/browserstack-logo-600x315.png" height="80" title="BrowserStack Logo" alt="BrowserStack Logo" /> -</a> -Special thanks to [BrowserStack](https://www.browserstack.com) for letting the maintainers use their service to debug browser specific issues. diff --git a/assets/browserstack-logo-600x315.png b/assets/browserstack-logo-600x315.png deleted file mode 100644 index 5a0cea27a..000000000 Binary files a/assets/browserstack-logo-600x315.png and /dev/null differ diff --git a/bower.json b/bower.json new file mode 100644 index 000000000..9006da007 --- /dev/null +++ b/bower.json @@ -0,0 +1,25 @@ +{ + "name": "vue-router", + "homepage": "https://github.com/vuejs/vue-router", + "authors": [ + "Evan You <yyx990803@gmail.com>" + ], + "description": "router for Vue.js", + "main": "dist/vue-router.js", + "moduleType": ["globals", "node", "amd"], + "keywords": [ + "vue", + "router" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "build", + "docs", + "example", + "src", + "test", + "*.yml", + "*.json" + ] +} diff --git a/build/build.js b/build/build.js index c812b7a6c..e4f30b11a 100644 --- a/build/build.js +++ b/build/build.js @@ -1,83 +1,56 @@ -const fs = require('fs') -const path = require('path') -const zlib = require('zlib') -const terser = require('terser') -const rollup = require('rollup') -const configs = require('./configs') +var fs = require('fs') +var zlib = require('zlib') +var rollup = require('rollup') +var uglify = require('uglify-js') +var babel = require('rollup-plugin-babel') +var version = process.env.VERSION || require('../package.json').version +var banner = + '/*!\n' + + ' * vue-router v' + version + '\n' + + ' * (c) ' + new Date().getFullYear() + ' Evan You\n' + + ' * Released under the MIT License.\n' + + ' */' -if (!fs.existsSync('dist')) { - fs.mkdirSync('dist') -} - -build(configs) - -function build (builds) { - let built = 0 - const total = builds.length - const next = () => { - buildEntry(builds[built]) - .then(() => { - built++ - if (built < total) { - next() - } +rollup.rollup({ + entry: 'src/index.js', + plugins: [ + babel({ + loose: 'all' + }) + ] +}) +.then(function (bundle) { + return write('dist/vue-router.js', bundle.generate({ + format: 'umd', + banner: banner, + moduleName: 'VueRouter' + }).code) +}) +.then(function () { + return write( + 'dist/vue-router.min.js', + banner + '\n' + uglify.minify('dist/vue-router.js').code + ) +}) +.then(function () { + return new Promise(function (resolve, reject) { + fs.readFile('dist/vue-router.min.js', function (err, buf) { + if (err) return reject(err) + zlib.gzip(buf, function (err, buf) { + if (err) return reject(err) + write('dist/vue-router.min.js.gz', buf).then(resolve) }) - .catch(logError) - } - - next() -} - -function buildEntry ({ input, output }) { - const { file, banner } = output - const isProd = /min\.js$/.test(file) - return rollup - .rollup(input) - .then(bundle => bundle.generate(output)) - .then(bundle => { - // console.log(bundle) - const code = bundle.output[0].code - if (isProd) { - const minified = - (banner ? banner + '\n' : '') + - terser.minify(code, { - toplevel: true, - output: { - ascii_only: true - }, - compress: { - pure_funcs: ['makeMap'] - } - }).code - return write(file, minified, true) - } else { - return write(file, code) - } }) -} - -function write (dest, code, zip) { - return new Promise((resolve, reject) => { - function report (extra) { - console.log( - blue(path.relative(process.cwd(), dest)) + - ' ' + - getSize(code) + - (extra || '') - ) - resolve() - } + }) +}) +.catch(logError) - fs.writeFile(dest, code, err => { +function write (dest, code) { + return new Promise(function (resolve, reject) { + fs.writeFile(dest, code, function (err) { if (err) return reject(err) - if (zip) { - zlib.gzip(code, (err, zipped) => { - if (err) return reject(err) - report(' (gzipped: ' + getSize(zipped) + ')') - }) - } else { - report() - } + console.log(blue(dest) + ' ' + getSize(code)) + resolve() }) }) } diff --git a/build/ci.sh b/build/ci.sh new file mode 100644 index 000000000..12d0bcefe --- /dev/null +++ b/build/ci.sh @@ -0,0 +1,15 @@ +set -e +if [ -z "$CI_PULL_REQUEST" ] +then + npm run unit + # start sauce connect + cd sc-*-linux && ./bin/sc -u $SAUCE_USERNAME -k $SAUCE_ACCESS_KEY -f ~/sc_ready & + # Wait for tunnel to be ready + while [ ! -e ~/sc_ready ]; do sleep 1; done + # serve example app + npm run serve-example & + # Run selenium tests + npm run e2e-sauce +else + npm test +fi diff --git a/build/configs.js b/build/configs.js deleted file mode 100644 index 4fbfa6d24..000000000 --- a/build/configs.js +++ /dev/null @@ -1,103 +0,0 @@ -const path = require('path') -const buble = require('rollup-plugin-buble') -const flow = require('rollup-plugin-flow-no-whitespace') -const cjs = require('@rollup/plugin-commonjs') -const node = require('@rollup/plugin-node-resolve').nodeResolve -const replace = require('rollup-plugin-replace') -const version = process.env.VERSION || require('../package.json').version -const banner = `/*! - * vue-router v${version} - * (c) ${new Date().getFullYear()} Evan You - * @license MIT - */` - -const resolve = _path => path.resolve(__dirname, '../', _path) - -module.exports = [ - // browser dev - { - file: resolve('dist/vue-router.js'), - format: 'umd', - env: 'development' - }, - { - file: resolve('dist/vue-router.min.js'), - format: 'umd', - env: 'production' - }, - { - file: resolve('dist/vue-router.common.js'), - format: 'cjs' - }, - { - input: resolve('src/entries/esm.js'), - file: resolve('dist/vue-router.esm.js'), - format: 'es' - }, - { - input: resolve('src/entries/esm.js'), - file: resolve('dist/vue-router.mjs'), - format: 'es' - }, - { - input: resolve('src/entries/esm.js'), - file: resolve('dist/vue-router.esm.browser.js'), - format: 'es', - env: 'development', - transpile: false - }, - { - input: resolve('src/entries/esm.js'), - file: resolve('dist/vue-router.esm.browser.min.js'), - format: 'es', - env: 'production', - transpile: false - }, - { - input: resolve('src/composables/index.js'), - file: resolve('./composables.mjs'), - format: 'es' - }, - { - input: resolve('src/composables/index.js'), - file: resolve('./composables.js'), - format: 'cjs' - } -].map(genConfig) - -function genConfig (opts) { - const config = { - input: { - input: opts.input || resolve('src/index.js'), - plugins: [ - flow(), - node(), - cjs(), - replace({ - __VERSION__: version - }) - ], - external: ['vue'] - }, - output: { - file: opts.file, - format: opts.format, - banner, - name: 'VueRouter' - } - } - - if (opts.env) { - config.input.plugins.unshift( - replace({ - 'process.env.NODE_ENV': JSON.stringify(opts.env) - }) - ) - } - - if (opts.transpile !== false) { - config.input.plugins.push(buble()) - } - - return config -} diff --git a/build/e2e.sh b/build/e2e.sh new file mode 100644 index 000000000..ef5e2d693 --- /dev/null +++ b/build/e2e.sh @@ -0,0 +1,16 @@ +# use a different port to avoid conflicting with npm run serve +PORT=8082 + +# serve example +./node_modules/.bin/webpack-dev-server \ + --quiet --hot --history-api-fallback\ + --config example/advanced/webpack.config.js \ + --content-base example/advanced \ + --host 0.0.0.0 \ + --port $PORT & + +# run e2e tests, make sure to kill the server no matter pass or fail +PORT=$PORT ./node_modules/.bin/nightwatch \ + -c build/nightwatch.local.json \ + -e chrome,firefox \ + && kill $! || (kill $! && exit 1) diff --git a/build/karma.config.js b/build/karma.config.js new file mode 100644 index 000000000..8eecdb1ee --- /dev/null +++ b/build/karma.config.js @@ -0,0 +1,40 @@ +module.exports = function (config) { + config.set({ + browsers: ['PhantomJS'], + reporters: ['spec', 'coverage'], + frameworks: ['jasmine'], + files: ['../test/unit/specs/index.js'], + preprocessors: { + '../test/unit/specs/index.js': ['webpack', 'sourcemap'] + }, + webpack: { + devtool: '#inline-source-map', + module: { + loaders: [ + { + test: /\.js$/, + exclude: /test|node_modules|vue\/dist/, + loader: 'babel?optional[]=runtime&loose=all' + } + ], + postLoaders: [ + { + test: /\.js$/, + exclude: /test|node_modules|vue\/dist|lib\//, + loader: 'istanbul-instrumenter' + } + ] + } + }, + webpackMiddleware: { + noInfo: true + }, + singleRun: true, + coverageReporter: { + reporters: [ + { type: 'lcov', dir: '../coverage', subdir: '.' }, + { type: 'text-summary', dir: '../coverage', subdir: '.' } + ] + } + }) +} diff --git a/build/nightwatch.local.json b/build/nightwatch.local.json new file mode 100644 index 000000000..73d611528 --- /dev/null +++ b/build/nightwatch.local.json @@ -0,0 +1,38 @@ +{ + "src_folders" : ["test/e2e"], + "output_folder": "coverage/e2e", + + "selenium" : { + "start_process" : true, + "server_path" : "node_modules/selenium-server/lib/runner/selenium-server-standalone-2.49.1.jar", + "host" : "127.0.0.1", + "port" : 4444, + "cli_args" : { + "webdriver.chrome.driver" : "node_modules/chromedriver/lib/chromedriver/chromedriver" + } + }, + + "test_settings" : { + "default" : { + "selenium_port": 4444, + "selenium_host": "localhost", + "silent": true + }, + + "firefox": { + "desiredCapabilities": { + "browserName": "firefox", + "javascriptEnabled": true, + "acceptSslCerts": true + } + }, + + "chrome" : { + "desiredCapabilities": { + "browserName": "chrome", + "javascriptEnabled": true, + "acceptSslCerts": true + } + } + } +} diff --git a/build/nightwatch.sauce.json b/build/nightwatch.sauce.json new file mode 100644 index 000000000..bd8075c90 --- /dev/null +++ b/build/nightwatch.sauce.json @@ -0,0 +1,47 @@ +{ + "src_folders" : ["test/e2e"], + + "test_settings" : { + "default" : { + "selenium_port": 80, + "selenium_host": "ondemand.saucelabs.com", + "username": "${SAUCE_USERNAME}", + "access_key": "${SAUCE_ACCESS_KEY}", + "silent": true + }, + + "firefox": { + "desiredCapabilities": { + "browserName": "firefox", + "javascriptEnabled": true, + "acceptSslCerts": true + } + }, + + "chrome" : { + "desiredCapabilities": { + "browserName": "chrome", + "javascriptEnabled": true, + "acceptSslCerts": true + } + }, + + "ie10": { + "desiredCapabilities": { + "browserName": "internet explorer", + "version": 10, + "javascriptEnabled": true, + "acceptSslCerts": true + } + }, + + "ie11": { + "desiredCapabilities": { + "browserName": "internet explorer", + "version": 11, + "javascriptEnabled": true, + "acceptSslCerts": true + } + } + } +} diff --git a/build/release.sh b/build/release.sh new file mode 100644 index 000000000..c86396bda --- /dev/null +++ b/build/release.sh @@ -0,0 +1,26 @@ +set -e +echo "Enter release version: " +read VERSION + +read -p "Releasing $VERSION - are you sure? (y/n)" -n 1 -r +echo # (optional) move to a new line +if [[ $REPLY =~ ^[Yy]$ ]] +then + echo "Releasing $VERSION ..." + + # run tests + npm test 2>/dev/null + + # build + VERSION=$VERSION npm run build + + # # commit + git add -A + git commit -m "[build] $VERSION" + npm version $VERSION --message "[release] $VERSION" + + # # publish + git push origin refs/tags/v$VERSION + git push + npm publish +fi diff --git a/build/rollup.dev.config.js b/build/rollup.dev.config.js deleted file mode 100644 index 996fc2042..000000000 --- a/build/rollup.dev.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const { input, output } = require('./configs')[0] - -module.exports = Object.assign({}, input, { output }) diff --git a/build/update-docs.sh b/build/update-docs.sh new file mode 100644 index 000000000..321ede90e --- /dev/null +++ b/build/update-docs.sh @@ -0,0 +1,10 @@ +cd docs +rm -rf _book +gitbook build +cp assets/circle.yml _book/circle.yml +cp assets/CNAME _book/CNAME +cd _book +git init +git add -A +git commit -m 'update book' +git push -f git@github.com:vuejs/vue-router.git master:gh-pages diff --git a/build/webpack.dev.config.js b/build/webpack.dev.config.js new file mode 100644 index 000000000..cd5f40b73 --- /dev/null +++ b/build/webpack.dev.config.js @@ -0,0 +1,19 @@ +module.exports = { + entry: './src/index.js', + output: { + path: './dist', + filename: 'vue-router.js', + library: 'VueRouter', + libraryTarget: 'umd' + }, + module: { + loaders: [ + { + test: /.js/, + exclude: /node_modules|vue\/dist/, + loader: 'babel?optional[]=runtime&loose=all' + } + ] + }, + devtool: '#source-map' +} diff --git a/circle.yml b/circle.yml new file mode 100644 index 000000000..54bcde5f3 --- /dev/null +++ b/circle.yml @@ -0,0 +1,17 @@ +machine: + node: + version: 5 + +general: + branches: + ignore: + - dev + +dependencies: + post: + - wget https://saucelabs.com/downloads/sc-latest-linux.tar.gz + - tar -xzf sc-latest-linux.tar.gz + +test: + override: + - bash ./build/ci.sh diff --git a/composables.d.ts b/composables.d.ts deleted file mode 100644 index 790fbfba8..000000000 --- a/composables.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './types/composables' diff --git a/composables.js b/composables.js deleted file mode 100644 index 18d96d549..000000000 --- a/composables.js +++ /dev/null @@ -1,257 +0,0 @@ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -'use strict' - -Object.defineProperty(exports, '__esModule', { value: true }) - -var vue = require('vue') - -// dev only warn if no current instance - -function throwNoCurrentInstance (method) { - if (!vue.getCurrentInstance()) { - throw new Error( - ('[vue-router]: Missing current instance. ' + method + '() must be called inside <script setup> or setup().') - ) - } -} - -function useRouter () { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useRouter') - } - - return vue.getCurrentInstance().proxy.$root.$router -} - -function useRoute () { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useRoute') - } - - var root = vue.getCurrentInstance().proxy.$root - if (!root._$route) { - var route = vue.effectScope(true).run(function () { return vue.shallowReactive(Object.assign({}, root.$router.currentRoute)) } - ) - root._$route = route - - root.$router.afterEach(function (to) { - Object.assign(route, to) - }) - } - - return root._$route -} - -function onBeforeRouteUpdate (guard) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('onBeforeRouteUpdate') - } - - return useFilteredGuard(guard, isUpdateNavigation) -} -function isUpdateNavigation (to, from, depth) { - var toMatched = to.matched - var fromMatched = from.matched - return ( - toMatched.length >= depth && - toMatched - .slice(0, depth + 1) - .every(function (record, i) { return record === fromMatched[i] }) - ) -} - -function isLeaveNavigation (to, from, depth) { - var toMatched = to.matched - var fromMatched = from.matched - return toMatched.length < depth || toMatched[depth] !== fromMatched[depth] -} - -function onBeforeRouteLeave (guard) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('onBeforeRouteLeave') - } - - return useFilteredGuard(guard, isLeaveNavigation) -} - -var noop = function () {} -function useFilteredGuard (guard, fn) { - var instance = vue.getCurrentInstance() - var router = useRouter() - - var target = instance.proxy - // find the nearest RouterView to know the depth - while ( - target && - target.$vnode && - target.$vnode.data && - target.$vnode.data.routerViewDepth == null - ) { - target = target.$parent - } - - var depth = - target && target.$vnode && target.$vnode.data - ? target.$vnode.data.routerViewDepth - : null - - if (depth != null) { - var removeGuard = router.beforeEach(function (to, from, next) { - return fn(to, from, depth) ? guard(to, from, next) : next() - }) - - vue.onUnmounted(removeGuard) - return removeGuard - } - - return noop -} - -/* */ - -function guardEvent (e) { - // don't redirect with control keys - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return } - // don't redirect when preventDefault called - if (e.defaultPrevented) { return } - // don't redirect on right click - if (e.button !== undefined && e.button !== 0) { return } - // don't redirect if `target="_blank"` - if (e.currentTarget && e.currentTarget.getAttribute) { - var target = e.currentTarget.getAttribute('target') - if (/\b_blank\b/i.test(target)) { return } - } - // this may be a Weex event which doesn't have this method - if (e.preventDefault) { - e.preventDefault() - } - return true -} - -function includesParams (outer, inner) { - var loop = function (key) { - var innerValue = inner[key] - var outerValue = outer[key] - if (typeof innerValue === 'string') { - if (innerValue !== outerValue) { return { v: false } } - } else { - if ( - !Array.isArray(outerValue) || - outerValue.length !== innerValue.length || - innerValue.some(function (value, i) { return value !== outerValue[i] }) - ) { - return { v: false } - } - } - } - - for (var key in inner) { - var returned = loop(key) - - if (returned) return returned.v - } - - return true -} - -// helpers from vue router 4 - -function isSameRouteLocationParamsValue (a, b) { - return Array.isArray(a) - ? isEquivalentArray(a, b) - : Array.isArray(b) - ? isEquivalentArray(b, a) - : a === b -} - -function isEquivalentArray (a, b) { - return Array.isArray(b) - ? a.length === b.length && a.every(function (value, i) { return value === b[i] }) - : a.length === 1 && a[0] === b -} - -function isSameRouteLocationParams (a, b) { - if (Object.keys(a).length !== Object.keys(b).length) { return false } - - for (var key in a) { - if (!isSameRouteLocationParamsValue(a[key], b[key])) { return false } - } - - return true -} - -function useLink (props) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useLink') - } - - var router = useRouter() - var currentRoute = useRoute() - - var resolvedRoute = vue.computed(function () { return router.resolve(vue.unref(props.to), currentRoute) }) - - var activeRecordIndex = vue.computed(function () { - var route = resolvedRoute.value.route - var matched = route.matched - var length = matched.length - var routeMatched = matched[length - 1] - var currentMatched = currentRoute.matched - if (!routeMatched || !currentMatched.length) { return -1 } - var index = currentMatched.indexOf(routeMatched) - if (index > -1) { return index } - // possible parent record - var parentRecord = currentMatched[currentMatched.length - 2] - - return ( - // we are dealing with nested routes - length > 1 && - // if the parent and matched route have the same path, this link is - // referring to the empty child. Or we currently are on a different - // child of the same parent - parentRecord && parentRecord === routeMatched.parent - ) - }) - - var isActive = vue.computed( - function () { - return activeRecordIndex.value > -1 && - includesParams(currentRoute.params, resolvedRoute.value.route.params) - } - ) - var isExactActive = vue.computed( - function () { - return activeRecordIndex.value > -1 && - activeRecordIndex.value === currentRoute.matched.length - 1 && - isSameRouteLocationParams(currentRoute.params, resolvedRoute.value.route.params) - } - ) - - var navigate = function (e) { - var href = resolvedRoute.value.route - if (guardEvent(e)) { - return props.replace - ? router.replace(href) - : router.push(href) - } - return Promise.resolve() - } - - return { - href: vue.computed(function () { return resolvedRoute.value.href }), - route: vue.computed(function () { return resolvedRoute.value.route }), - isExactActive: isExactActive, - isActive: isActive, - navigate: navigate - } -} - -exports.isSameRouteLocationParams = isSameRouteLocationParams -exports.onBeforeRouteLeave = onBeforeRouteLeave -exports.onBeforeRouteUpdate = onBeforeRouteUpdate -exports.useLink = useLink -exports.useRoute = useRoute -exports.useRouter = useRouter diff --git a/composables.mjs b/composables.mjs deleted file mode 100644 index 9ef271983..000000000 --- a/composables.mjs +++ /dev/null @@ -1,244 +0,0 @@ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -import { getCurrentInstance, effectScope, shallowReactive, onUnmounted, computed, unref } from 'vue'; - -// dev only warn if no current instance - -function throwNoCurrentInstance (method) { - if (!getCurrentInstance()) { - throw new Error( - ("[vue-router]: Missing current instance. " + method + "() must be called inside <script setup> or setup().") - ) - } -} - -function useRouter () { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useRouter'); - } - - return getCurrentInstance().proxy.$root.$router -} - -function useRoute () { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useRoute'); - } - - var root = getCurrentInstance().proxy.$root; - if (!root._$route) { - var route = effectScope(true).run(function () { return shallowReactive(Object.assign({}, root.$router.currentRoute)); } - ); - root._$route = route; - - root.$router.afterEach(function (to) { - Object.assign(route, to); - }); - } - - return root._$route -} - -function onBeforeRouteUpdate (guard) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('onBeforeRouteUpdate'); - } - - return useFilteredGuard(guard, isUpdateNavigation) -} -function isUpdateNavigation (to, from, depth) { - var toMatched = to.matched; - var fromMatched = from.matched; - return ( - toMatched.length >= depth && - toMatched - .slice(0, depth + 1) - .every(function (record, i) { return record === fromMatched[i]; }) - ) -} - -function isLeaveNavigation (to, from, depth) { - var toMatched = to.matched; - var fromMatched = from.matched; - return toMatched.length < depth || toMatched[depth] !== fromMatched[depth] -} - -function onBeforeRouteLeave (guard) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('onBeforeRouteLeave'); - } - - return useFilteredGuard(guard, isLeaveNavigation) -} - -var noop = function () {}; -function useFilteredGuard (guard, fn) { - var instance = getCurrentInstance(); - var router = useRouter(); - - var target = instance.proxy; - // find the nearest RouterView to know the depth - while ( - target && - target.$vnode && - target.$vnode.data && - target.$vnode.data.routerViewDepth == null - ) { - target = target.$parent; - } - - var depth = - target && target.$vnode && target.$vnode.data - ? target.$vnode.data.routerViewDepth - : null; - - if (depth != null) { - var removeGuard = router.beforeEach(function (to, from, next) { - return fn(to, from, depth) ? guard(to, from, next) : next() - }); - - onUnmounted(removeGuard); - return removeGuard - } - - return noop -} - -/* */ - -function guardEvent (e) { - // don't redirect with control keys - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return } - // don't redirect when preventDefault called - if (e.defaultPrevented) { return } - // don't redirect on right click - if (e.button !== undefined && e.button !== 0) { return } - // don't redirect if `target="_blank"` - if (e.currentTarget && e.currentTarget.getAttribute) { - var target = e.currentTarget.getAttribute('target'); - if (/\b_blank\b/i.test(target)) { return } - } - // this may be a Weex event which doesn't have this method - if (e.preventDefault) { - e.preventDefault(); - } - return true -} - -function includesParams (outer, inner) { - var loop = function ( key ) { - var innerValue = inner[key]; - var outerValue = outer[key]; - if (typeof innerValue === 'string') { - if (innerValue !== outerValue) { return { v: false } } - } else { - if ( - !Array.isArray(outerValue) || - outerValue.length !== innerValue.length || - innerValue.some(function (value, i) { return value !== outerValue[i]; }) - ) { - return { v: false } - } - } - }; - - for (var key in inner) { - var returned = loop( key ); - - if ( returned ) return returned.v; - } - - return true -} - -// helpers from vue router 4 - -function isSameRouteLocationParamsValue (a, b) { - return Array.isArray(a) - ? isEquivalentArray(a, b) - : Array.isArray(b) - ? isEquivalentArray(b, a) - : a === b -} - -function isEquivalentArray (a, b) { - return Array.isArray(b) - ? a.length === b.length && a.every(function (value, i) { return value === b[i]; }) - : a.length === 1 && a[0] === b -} - -function isSameRouteLocationParams (a, b) { - if (Object.keys(a).length !== Object.keys(b).length) { return false } - - for (var key in a) { - if (!isSameRouteLocationParamsValue(a[key], b[key])) { return false } - } - - return true -} - -function useLink (props) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useLink'); - } - - var router = useRouter(); - var currentRoute = useRoute(); - - var resolvedRoute = computed(function () { return router.resolve(unref(props.to), currentRoute); }); - - var activeRecordIndex = computed(function () { - var route = resolvedRoute.value.route; - var matched = route.matched; - var length = matched.length; - var routeMatched = matched[length - 1]; - var currentMatched = currentRoute.matched; - if (!routeMatched || !currentMatched.length) { return -1 } - var index = currentMatched.indexOf(routeMatched); - if (index > -1) { return index } - // possible parent record - var parentRecord = currentMatched[currentMatched.length - 2]; - - return ( - // we are dealing with nested routes - length > 1 && - // if the parent and matched route have the same path, this link is - // referring to the empty child. Or we currently are on a different - // child of the same parent - parentRecord && parentRecord === routeMatched.parent - ) - }); - - var isActive = computed( - function () { return activeRecordIndex.value > -1 && - includesParams(currentRoute.params, resolvedRoute.value.route.params); } - ); - var isExactActive = computed( - function () { return activeRecordIndex.value > -1 && - activeRecordIndex.value === currentRoute.matched.length - 1 && - isSameRouteLocationParams(currentRoute.params, resolvedRoute.value.route.params); } - ); - - var navigate = function (e) { - var href = resolvedRoute.value.route; - if (guardEvent(e)) { - return props.replace - ? router.replace(href) - : router.push(href) - } - return Promise.resolve() - }; - - return { - href: computed(function () { return resolvedRoute.value.href; }), - route: computed(function () { return resolvedRoute.value.route; }), - isExactActive: isExactActive, - isActive: isActive, - navigate: navigate - } -} - -export { isSameRouteLocationParams, onBeforeRouteLeave, onBeforeRouteUpdate, useLink, useRoute, useRouter }; diff --git a/dist/vue-router.common.js b/dist/vue-router.common.js deleted file mode 100644 index 7d92dc2e6..000000000 --- a/dist/vue-router.common.js +++ /dev/null @@ -1,3159 +0,0 @@ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -'use strict'; - -/* */ - -function assert (condition, message) { - if (!condition) { - throw new Error(("[vue-router] " + message)) - } -} - -function warn (condition, message) { - if (!condition) { - typeof console !== 'undefined' && console.warn(("[vue-router] " + message)); - } -} - -function extend (a, b) { - for (var key in b) { - a[key] = b[key]; - } - return a -} - -/* */ - -var encodeReserveRE = /[!'()*]/g; -var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); }; -var commaRE = /%2C/g; - -// fixed encodeURIComponent which is more conformant to RFC3986: -// - escapes [!'()*] -// - preserve commas -var encode = function (str) { return encodeURIComponent(str) - .replace(encodeReserveRE, encodeReserveReplacer) - .replace(commaRE, ','); }; - -function decode (str) { - try { - return decodeURIComponent(str) - } catch (err) { - if (process.env.NODE_ENV !== 'production') { - warn(false, ("Error decoding \"" + str + "\". Leaving it intact.")); - } - } - return str -} - -function resolveQuery ( - query, - extraQuery, - _parseQuery -) { - if ( extraQuery === void 0 ) extraQuery = {}; - - var parse = _parseQuery || parseQuery; - var parsedQuery; - try { - parsedQuery = parse(query || ''); - } catch (e) { - process.env.NODE_ENV !== 'production' && warn(false, e.message); - parsedQuery = {}; - } - for (var key in extraQuery) { - var value = extraQuery[key]; - parsedQuery[key] = Array.isArray(value) - ? value.map(castQueryParamValue) - : castQueryParamValue(value); - } - return parsedQuery -} - -var castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); }; - -function parseQuery (query) { - var res = {}; - - query = query.trim().replace(/^(\?|#|&)/, ''); - - if (!query) { - return res - } - - query.split('&').forEach(function (param) { - var parts = param.replace(/\+/g, ' ').split('='); - var key = decode(parts.shift()); - var val = parts.length > 0 ? decode(parts.join('=')) : null; - - if (res[key] === undefined) { - res[key] = val; - } else if (Array.isArray(res[key])) { - res[key].push(val); - } else { - res[key] = [res[key], val]; - } - }); - - return res -} - -function stringifyQuery (obj) { - var res = obj - ? Object.keys(obj) - .map(function (key) { - var val = obj[key]; - - if (val === undefined) { - return '' - } - - if (val === null) { - return encode(key) - } - - if (Array.isArray(val)) { - var result = []; - val.forEach(function (val2) { - if (val2 === undefined) { - return - } - if (val2 === null) { - result.push(encode(key)); - } else { - result.push(encode(key) + '=' + encode(val2)); - } - }); - return result.join('&') - } - - return encode(key) + '=' + encode(val) - }) - .filter(function (x) { return x.length > 0; }) - .join('&') - : null; - return res ? ("?" + res) : '' -} - -/* */ - -var trailingSlashRE = /\/?$/; - -function createRoute ( - record, - location, - redirectedFrom, - router -) { - var stringifyQuery = router && router.options.stringifyQuery; - - var query = location.query || {}; - try { - query = clone(query); - } catch (e) {} - - var route = { - name: location.name || (record && record.name), - meta: (record && record.meta) || {}, - path: location.path || '/', - hash: location.hash || '', - query: query, - params: location.params || {}, - fullPath: getFullPath(location, stringifyQuery), - matched: record ? formatMatch(record) : [] - }; - if (redirectedFrom) { - route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery); - } - return Object.freeze(route) -} - -function clone (value) { - if (Array.isArray(value)) { - return value.map(clone) - } else if (value && typeof value === 'object') { - var res = {}; - for (var key in value) { - res[key] = clone(value[key]); - } - return res - } else { - return value - } -} - -// the starting route that represents the initial state -var START = createRoute(null, { - path: '/' -}); - -function formatMatch (record) { - var res = []; - while (record) { - res.unshift(record); - record = record.parent; - } - return res -} - -function getFullPath ( - ref, - _stringifyQuery -) { - var path = ref.path; - var query = ref.query; if ( query === void 0 ) query = {}; - var hash = ref.hash; if ( hash === void 0 ) hash = ''; - - var stringify = _stringifyQuery || stringifyQuery; - return (path || '/') + stringify(query) + hash -} - -function isSameRoute (a, b, onlyPath) { - if (b === START) { - return a === b - } else if (!b) { - return false - } else if (a.path && b.path) { - return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath || - a.hash === b.hash && - isObjectEqual(a.query, b.query)) - } else if (a.name && b.name) { - return ( - a.name === b.name && - (onlyPath || ( - a.hash === b.hash && - isObjectEqual(a.query, b.query) && - isObjectEqual(a.params, b.params)) - ) - ) - } else { - return false - } -} - -function isObjectEqual (a, b) { - if ( a === void 0 ) a = {}; - if ( b === void 0 ) b = {}; - - // handle null value #1566 - if (!a || !b) { return a === b } - var aKeys = Object.keys(a).sort(); - var bKeys = Object.keys(b).sort(); - if (aKeys.length !== bKeys.length) { - return false - } - return aKeys.every(function (key, i) { - var aVal = a[key]; - var bKey = bKeys[i]; - if (bKey !== key) { return false } - var bVal = b[key]; - // query values can be null and undefined - if (aVal == null || bVal == null) { return aVal === bVal } - // check nested equality - if (typeof aVal === 'object' && typeof bVal === 'object') { - return isObjectEqual(aVal, bVal) - } - return String(aVal) === String(bVal) - }) -} - -function isIncludedRoute (current, target) { - return ( - current.path.replace(trailingSlashRE, '/').indexOf( - target.path.replace(trailingSlashRE, '/') - ) === 0 && - (!target.hash || current.hash === target.hash) && - queryIncludes(current.query, target.query) - ) -} - -function queryIncludes (current, target) { - for (var key in target) { - if (!(key in current)) { - return false - } - } - return true -} - -function handleRouteEntered (route) { - for (var i = 0; i < route.matched.length; i++) { - var record = route.matched[i]; - for (var name in record.instances) { - var instance = record.instances[name]; - var cbs = record.enteredCbs[name]; - if (!instance || !cbs) { continue } - delete record.enteredCbs[name]; - for (var i$1 = 0; i$1 < cbs.length; i$1++) { - if (!instance._isBeingDestroyed) { cbs[i$1](instance); } - } - } - } -} - -var View = { - name: 'RouterView', - functional: true, - props: { - name: { - type: String, - default: 'default' - } - }, - render: function render (_, ref) { - var props = ref.props; - var children = ref.children; - var parent = ref.parent; - var data = ref.data; - - // used by devtools to display a router-view badge - data.routerView = true; - - // directly use parent context's createElement() function - // so that components rendered by router-view can resolve named slots - var h = parent.$createElement; - var name = props.name; - var route = parent.$route; - var cache = parent._routerViewCache || (parent._routerViewCache = {}); - - // determine current view depth, also check to see if the tree - // has been toggled inactive but kept-alive. - var depth = 0; - var inactive = false; - while (parent && parent._routerRoot !== parent) { - var vnodeData = parent.$vnode ? parent.$vnode.data : {}; - if (vnodeData.routerView) { - depth++; - } - if (vnodeData.keepAlive && parent._directInactive && parent._inactive) { - inactive = true; - } - parent = parent.$parent; - } - data.routerViewDepth = depth; - - // render previous view if the tree is inactive and kept-alive - if (inactive) { - var cachedData = cache[name]; - var cachedComponent = cachedData && cachedData.component; - if (cachedComponent) { - // #2301 - // pass props - if (cachedData.configProps) { - fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps); - } - return h(cachedComponent, data, children) - } else { - // render previous empty view - return h() - } - } - - var matched = route.matched[depth]; - var component = matched && matched.components[name]; - - // render empty node if no matched route or no config component - if (!matched || !component) { - cache[name] = null; - return h() - } - - // cache component - cache[name] = { component: component }; - - // attach instance registration hook - // this will be called in the instance's injected lifecycle hooks - data.registerRouteInstance = function (vm, val) { - // val could be undefined for unregistration - var current = matched.instances[name]; - if ( - (val && current !== vm) || - (!val && current === vm) - ) { - matched.instances[name] = val; - } - } - - // also register instance in prepatch hook - // in case the same component instance is reused across different routes - ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) { - matched.instances[name] = vnode.componentInstance; - }; - - // register instance in init hook - // in case kept-alive component be actived when routes changed - data.hook.init = function (vnode) { - if (vnode.data.keepAlive && - vnode.componentInstance && - vnode.componentInstance !== matched.instances[name] - ) { - matched.instances[name] = vnode.componentInstance; - } - - // if the route transition has already been confirmed then we weren't - // able to call the cbs during confirmation as the component was not - // registered yet, so we call it here. - handleRouteEntered(route); - }; - - var configProps = matched.props && matched.props[name]; - // save route and configProps in cache - if (configProps) { - extend(cache[name], { - route: route, - configProps: configProps - }); - fillPropsinData(component, data, route, configProps); - } - - return h(component, data, children) - } -}; - -function fillPropsinData (component, data, route, configProps) { - // resolve props - var propsToPass = data.props = resolveProps(route, configProps); - if (propsToPass) { - // clone to prevent mutation - propsToPass = data.props = extend({}, propsToPass); - // pass non-declared props as attrs - var attrs = data.attrs = data.attrs || {}; - for (var key in propsToPass) { - if (!component.props || !(key in component.props)) { - attrs[key] = propsToPass[key]; - delete propsToPass[key]; - } - } - } -} - -function resolveProps (route, config) { - switch (typeof config) { - case 'undefined': - return - case 'object': - return config - case 'function': - return config(route) - case 'boolean': - return config ? route.params : undefined - default: - if (process.env.NODE_ENV !== 'production') { - warn( - false, - "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " + - "expecting an object, function or boolean." - ); - } - } -} - -/* */ - -function resolvePath ( - relative, - base, - append -) { - var firstChar = relative.charAt(0); - if (firstChar === '/') { - return relative - } - - if (firstChar === '?' || firstChar === '#') { - return base + relative - } - - var stack = base.split('/'); - - // remove trailing segment if: - // - not appending - // - appending to trailing slash (last segment is empty) - if (!append || !stack[stack.length - 1]) { - stack.pop(); - } - - // resolve relative path - var segments = relative.replace(/^\//, '').split('/'); - for (var i = 0; i < segments.length; i++) { - var segment = segments[i]; - if (segment === '..') { - stack.pop(); - } else if (segment !== '.') { - stack.push(segment); - } - } - - // ensure leading slash - if (stack[0] !== '') { - stack.unshift(''); - } - - return stack.join('/') -} - -function parsePath (path) { - var hash = ''; - var query = ''; - - var hashIndex = path.indexOf('#'); - if (hashIndex >= 0) { - hash = path.slice(hashIndex); - path = path.slice(0, hashIndex); - } - - var queryIndex = path.indexOf('?'); - if (queryIndex >= 0) { - query = path.slice(queryIndex + 1); - path = path.slice(0, queryIndex); - } - - return { - path: path, - query: query, - hash: hash - } -} - -function cleanPath (path) { - return path.replace(/\/(?:\s*\/)+/g, '/') -} - -var isarray = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; - -/** - * Expose `pathToRegexp`. - */ -var pathToRegexp_1 = pathToRegexp; -var parse_1 = parse; -var compile_1 = compile; -var tokensToFunction_1 = tokensToFunction; -var tokensToRegExp_1 = tokensToRegExp; - -/** - * The main path matching regexp utility. - * - * @type {RegExp} - */ -var PATH_REGEXP = new RegExp([ - // Match escaped characters that would otherwise appear in future matches. - // This allows the user to escape special characters that won't transform. - '(\\\\.)', - // Match Express-style parameters and un-named parameters with a prefix - // and optional suffixes. Matches appear as: - // - // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] - // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] - // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] - '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' -].join('|'), 'g'); - -/** - * Parse a string for the raw tokens. - * - * @param {string} str - * @param {Object=} options - * @return {!Array} - */ -function parse (str, options) { - var tokens = []; - var key = 0; - var index = 0; - var path = ''; - var defaultDelimiter = options && options.delimiter || '/'; - var res; - - while ((res = PATH_REGEXP.exec(str)) != null) { - var m = res[0]; - var escaped = res[1]; - var offset = res.index; - path += str.slice(index, offset); - index = offset + m.length; - - // Ignore already escaped sequences. - if (escaped) { - path += escaped[1]; - continue - } - - var next = str[index]; - var prefix = res[2]; - var name = res[3]; - var capture = res[4]; - var group = res[5]; - var modifier = res[6]; - var asterisk = res[7]; - - // Push the current path onto the tokens. - if (path) { - tokens.push(path); - path = ''; - } - - var partial = prefix != null && next != null && next !== prefix; - var repeat = modifier === '+' || modifier === '*'; - var optional = modifier === '?' || modifier === '*'; - var delimiter = res[2] || defaultDelimiter; - var pattern = capture || group; - - tokens.push({ - name: name || key++, - prefix: prefix || '', - delimiter: delimiter, - optional: optional, - repeat: repeat, - partial: partial, - asterisk: !!asterisk, - pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') - }); - } - - // Match any characters still remaining. - if (index < str.length) { - path += str.substr(index); - } - - // If the path exists, push it onto the end. - if (path) { - tokens.push(path); - } - - return tokens -} - -/** - * Compile a string to a template function for the path. - * - * @param {string} str - * @param {Object=} options - * @return {!function(Object=, Object=)} - */ -function compile (str, options) { - return tokensToFunction(parse(str, options), options) -} - -/** - * Prettier encoding of URI path segments. - * - * @param {string} - * @return {string} - */ -function encodeURIComponentPretty (str) { - return encodeURI(str).replace(/[\/?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. - * - * @param {string} - * @return {string} - */ -function encodeAsterisk (str) { - return encodeURI(str).replace(/[?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Expose a method for transforming tokens into the path function. - */ -function tokensToFunction (tokens, options) { - // Compile all the tokens into regexps. - var matches = new Array(tokens.length); - - // Compile all the patterns before compilation. - for (var i = 0; i < tokens.length; i++) { - if (typeof tokens[i] === 'object') { - matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)); - } - } - - return function (obj, opts) { - var path = ''; - var data = obj || {}; - var options = opts || {}; - var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent; - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - - if (typeof token === 'string') { - path += token; - - continue - } - - var value = data[token.name]; - var segment; - - if (value == null) { - if (token.optional) { - // Prepend partial segment prefixes. - if (token.partial) { - path += token.prefix; - } - - continue - } else { - throw new TypeError('Expected "' + token.name + '" to be defined') - } - } - - if (isarray(value)) { - if (!token.repeat) { - throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') - } - - if (value.length === 0) { - if (token.optional) { - continue - } else { - throw new TypeError('Expected "' + token.name + '" to not be empty') - } - } - - for (var j = 0; j < value.length; j++) { - segment = encode(value[j]); - - if (!matches[i].test(segment)) { - throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') - } - - path += (j === 0 ? token.prefix : token.delimiter) + segment; - } - - continue - } - - segment = token.asterisk ? encodeAsterisk(value) : encode(value); - - if (!matches[i].test(segment)) { - throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') - } - - path += token.prefix + segment; - } - - return path - } -} - -/** - * Escape a regular expression string. - * - * @param {string} str - * @return {string} - */ -function escapeString (str) { - return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') -} - -/** - * Escape the capturing group by escaping special characters and meaning. - * - * @param {string} group - * @return {string} - */ -function escapeGroup (group) { - return group.replace(/([=!:$\/()])/g, '\\$1') -} - -/** - * Attach the keys as a property of the regexp. - * - * @param {!RegExp} re - * @param {Array} keys - * @return {!RegExp} - */ -function attachKeys (re, keys) { - re.keys = keys; - return re -} - -/** - * Get the flags for a regexp from the options. - * - * @param {Object} options - * @return {string} - */ -function flags (options) { - return options && options.sensitive ? '' : 'i' -} - -/** - * Pull out keys from a regexp. - * - * @param {!RegExp} path - * @param {!Array} keys - * @return {!RegExp} - */ -function regexpToRegexp (path, keys) { - // Use a negative lookahead to match only capturing groups. - var groups = path.source.match(/\((?!\?)/g); - - if (groups) { - for (var i = 0; i < groups.length; i++) { - keys.push({ - name: i, - prefix: null, - delimiter: null, - optional: false, - repeat: false, - partial: false, - asterisk: false, - pattern: null - }); - } - } - - return attachKeys(path, keys) -} - -/** - * Transform an array into a regexp. - * - * @param {!Array} path - * @param {Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function arrayToRegexp (path, keys, options) { - var parts = []; - - for (var i = 0; i < path.length; i++) { - parts.push(pathToRegexp(path[i], keys, options).source); - } - - var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)); - - return attachKeys(regexp, keys) -} - -/** - * Create a path regexp from string input. - * - * @param {string} path - * @param {!Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function stringToRegexp (path, keys, options) { - return tokensToRegExp(parse(path, options), keys, options) -} - -/** - * Expose a function for taking tokens and returning a RegExp. - * - * @param {!Array} tokens - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function tokensToRegExp (tokens, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - - var strict = options.strict; - var end = options.end !== false; - var route = ''; - - // Iterate over the tokens and create our regexp string. - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - - if (typeof token === 'string') { - route += escapeString(token); - } else { - var prefix = escapeString(token.prefix); - var capture = '(?:' + token.pattern + ')'; - - keys.push(token); - - if (token.repeat) { - capture += '(?:' + prefix + capture + ')*'; - } - - if (token.optional) { - if (!token.partial) { - capture = '(?:' + prefix + '(' + capture + '))?'; - } else { - capture = prefix + '(' + capture + ')?'; - } - } else { - capture = prefix + '(' + capture + ')'; - } - - route += capture; - } - } - - var delimiter = escapeString(options.delimiter || '/'); - var endsWithDelimiter = route.slice(-delimiter.length) === delimiter; - - // In non-strict mode we allow a slash at the end of match. If the path to - // match already ends with a slash, we remove it for consistency. The slash - // is valid at the end of a path match, not in the middle. This is important - // in non-ending mode, where "/test/" shouldn't match "/test//route". - if (!strict) { - route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'; - } - - if (end) { - route += '$'; - } else { - // In non-ending mode, we need the capturing groups to match as much as - // possible by using a positive lookahead to the end or next path segment. - route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'; - } - - return attachKeys(new RegExp('^' + route, flags(options)), keys) -} - -/** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. - * - * @param {(string|RegExp|Array)} path - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function pathToRegexp (path, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - - if (path instanceof RegExp) { - return regexpToRegexp(path, /** @type {!Array} */ (keys)) - } - - if (isarray(path)) { - return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) - } - - return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) -} -pathToRegexp_1.parse = parse_1; -pathToRegexp_1.compile = compile_1; -pathToRegexp_1.tokensToFunction = tokensToFunction_1; -pathToRegexp_1.tokensToRegExp = tokensToRegExp_1; - -/* */ - -// $flow-disable-line -var regexpCompileCache = Object.create(null); - -function fillParams ( - path, - params, - routeMsg -) { - params = params || {}; - try { - var filler = - regexpCompileCache[path] || - (regexpCompileCache[path] = pathToRegexp_1.compile(path)); - - // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }} - // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string - if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; } - - return filler(params, { pretty: true }) - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - // Fix #3072 no warn if `pathMatch` is string - warn(typeof params.pathMatch === 'string', ("missing param for " + routeMsg + ": " + (e.message))); - } - return '' - } finally { - // delete the 0 if it was added - delete params[0]; - } -} - -/* */ - -function normalizeLocation ( - raw, - current, - append, - router -) { - var next = typeof raw === 'string' ? { path: raw } : raw; - // named target - if (next._normalized) { - return next - } else if (next.name) { - next = extend({}, raw); - var params = next.params; - if (params && typeof params === 'object') { - next.params = extend({}, params); - } - return next - } - - // relative params - if (!next.path && next.params && current) { - next = extend({}, next); - next._normalized = true; - var params$1 = extend(extend({}, current.params), next.params); - if (current.name) { - next.name = current.name; - next.params = params$1; - } else if (current.matched.length) { - var rawPath = current.matched[current.matched.length - 1].path; - next.path = fillParams(rawPath, params$1, ("path " + (current.path))); - } else if (process.env.NODE_ENV !== 'production') { - warn(false, "relative params navigation requires a current route."); - } - return next - } - - var parsedPath = parsePath(next.path || ''); - var basePath = (current && current.path) || '/'; - var path = parsedPath.path - ? resolvePath(parsedPath.path, basePath, append || next.append) - : basePath; - - var query = resolveQuery( - parsedPath.query, - next.query, - router && router.options.parseQuery - ); - - var hash = next.hash || parsedPath.hash; - if (hash && hash.charAt(0) !== '#') { - hash = "#" + hash; - } - - return { - _normalized: true, - path: path, - query: query, - hash: hash - } -} - -/* */ - -// work around weird flow bug -var toTypes = [String, Object]; -var eventTypes = [String, Array]; - -var noop = function () {}; - -var warnedCustomSlot; -var warnedTagProp; -var warnedEventProp; - -var Link = { - name: 'RouterLink', - props: { - to: { - type: toTypes, - required: true - }, - tag: { - type: String, - default: 'a' - }, - custom: Boolean, - exact: Boolean, - exactPath: Boolean, - append: Boolean, - replace: Boolean, - activeClass: String, - exactActiveClass: String, - ariaCurrentValue: { - type: String, - default: 'page' - }, - event: { - type: eventTypes, - default: 'click' - } - }, - render: function render (h) { - var this$1$1 = this; - - var router = this.$router; - var current = this.$route; - var ref = router.resolve( - this.to, - current, - this.append - ); - var location = ref.location; - var route = ref.route; - var href = ref.href; - - var classes = {}; - var globalActiveClass = router.options.linkActiveClass; - var globalExactActiveClass = router.options.linkExactActiveClass; - // Support global empty active class - var activeClassFallback = - globalActiveClass == null ? 'router-link-active' : globalActiveClass; - var exactActiveClassFallback = - globalExactActiveClass == null - ? 'router-link-exact-active' - : globalExactActiveClass; - var activeClass = - this.activeClass == null ? activeClassFallback : this.activeClass; - var exactActiveClass = - this.exactActiveClass == null - ? exactActiveClassFallback - : this.exactActiveClass; - - var compareTarget = route.redirectedFrom - ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router) - : route; - - classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath); - classes[activeClass] = this.exact || this.exactPath - ? classes[exactActiveClass] - : isIncludedRoute(current, compareTarget); - - var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null; - - var handler = function (e) { - if (guardEvent(e)) { - if (this$1$1.replace) { - router.replace(location, noop); - } else { - router.push(location, noop); - } - } - }; - - var on = { click: guardEvent }; - if (Array.isArray(this.event)) { - this.event.forEach(function (e) { - on[e] = handler; - }); - } else { - on[this.event] = handler; - } - - var data = { class: classes }; - - var scopedSlot = - !this.$scopedSlots.$hasNormal && - this.$scopedSlots.default && - this.$scopedSlots.default({ - href: href, - route: route, - navigate: handler, - isActive: classes[activeClass], - isExactActive: classes[exactActiveClass] - }); - - if (scopedSlot) { - if (process.env.NODE_ENV !== 'production' && !this.custom) { - !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n'); - warnedCustomSlot = true; - } - if (scopedSlot.length === 1) { - return scopedSlot[0] - } else if (scopedSlot.length > 1 || !scopedSlot.length) { - if (process.env.NODE_ENV !== 'production') { - warn( - false, - ("<router-link> with to=\"" + (this.to) + "\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.") - ); - } - return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot) - } - } - - if (process.env.NODE_ENV !== 'production') { - if ('tag' in this.$options.propsData && !warnedTagProp) { - warn( - false, - "<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link." - ); - warnedTagProp = true; - } - if ('event' in this.$options.propsData && !warnedEventProp) { - warn( - false, - "<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link." - ); - warnedEventProp = true; - } - } - - if (this.tag === 'a') { - data.on = on; - data.attrs = { href: href, 'aria-current': ariaCurrentValue }; - } else { - // find the first <a> child and apply listener and href - var a = findAnchor(this.$slots.default); - if (a) { - // in case the <a> is a static node - a.isStatic = false; - var aData = (a.data = extend({}, a.data)); - aData.on = aData.on || {}; - // transform existing events in both objects into arrays so we can push later - for (var event in aData.on) { - var handler$1 = aData.on[event]; - if (event in on) { - aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1]; - } - } - // append new listeners for router-link - for (var event$1 in on) { - if (event$1 in aData.on) { - // on[event] is always a function - aData.on[event$1].push(on[event$1]); - } else { - aData.on[event$1] = handler; - } - } - - var aAttrs = (a.data.attrs = extend({}, a.data.attrs)); - aAttrs.href = href; - aAttrs['aria-current'] = ariaCurrentValue; - } else { - // doesn't have <a> child, apply listener to self - data.on = on; - } - } - - return h(this.tag, data, this.$slots.default) - } -}; - -function guardEvent (e) { - // don't redirect with control keys - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return } - // don't redirect when preventDefault called - if (e.defaultPrevented) { return } - // don't redirect on right click - if (e.button !== undefined && e.button !== 0) { return } - // don't redirect if `target="_blank"` - if (e.currentTarget && e.currentTarget.getAttribute) { - var target = e.currentTarget.getAttribute('target'); - if (/\b_blank\b/i.test(target)) { return } - } - // this may be a Weex event which doesn't have this method - if (e.preventDefault) { - e.preventDefault(); - } - return true -} - -function findAnchor (children) { - if (children) { - var child; - for (var i = 0; i < children.length; i++) { - child = children[i]; - if (child.tag === 'a') { - return child - } - if (child.children && (child = findAnchor(child.children))) { - return child - } - } - } -} - -var _Vue; - -function install (Vue) { - if (install.installed && _Vue === Vue) { return } - install.installed = true; - - _Vue = Vue; - - var isDef = function (v) { return v !== undefined; }; - - var registerInstance = function (vm, callVal) { - var i = vm.$options._parentVnode; - if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) { - i(vm, callVal); - } - }; - - Vue.mixin({ - beforeCreate: function beforeCreate () { - if (isDef(this.$options.router)) { - this._routerRoot = this; - this._router = this.$options.router; - this._router.init(this); - Vue.util.defineReactive(this, '_route', this._router.history.current); - } else { - this._routerRoot = (this.$parent && this.$parent._routerRoot) || this; - } - registerInstance(this, this); - }, - destroyed: function destroyed () { - registerInstance(this); - } - }); - - Object.defineProperty(Vue.prototype, '$router', { - get: function get () { return this._routerRoot._router } - }); - - Object.defineProperty(Vue.prototype, '$route', { - get: function get () { return this._routerRoot._route } - }); - - Vue.component('RouterView', View); - Vue.component('RouterLink', Link); - - var strats = Vue.config.optionMergeStrategies; - // use the same hook merging strategy for route hooks - strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created; -} - -/* */ - -var inBrowser = typeof window !== 'undefined'; - -/* */ - -function createRouteMap ( - routes, - oldPathList, - oldPathMap, - oldNameMap, - parentRoute -) { - // the path list is used to control path matching priority - var pathList = oldPathList || []; - // $flow-disable-line - var pathMap = oldPathMap || Object.create(null); - // $flow-disable-line - var nameMap = oldNameMap || Object.create(null); - - routes.forEach(function (route) { - addRouteRecord(pathList, pathMap, nameMap, route, parentRoute); - }); - - // ensure wildcard routes are always at the end - for (var i = 0, l = pathList.length; i < l; i++) { - if (pathList[i] === '*') { - pathList.push(pathList.splice(i, 1)[0]); - l--; - i--; - } - } - - if (process.env.NODE_ENV === 'development') { - // warn if routes do not include leading slashes - var found = pathList - // check for missing leading slash - .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; }); - - if (found.length > 0) { - var pathNames = found.map(function (path) { return ("- " + path); }).join('\n'); - warn(false, ("Non-nested routes must include a leading slash character. Fix the following routes: \n" + pathNames)); - } - } - - return { - pathList: pathList, - pathMap: pathMap, - nameMap: nameMap - } -} - -function addRouteRecord ( - pathList, - pathMap, - nameMap, - route, - parent, - matchAs -) { - var path = route.path; - var name = route.name; - if (process.env.NODE_ENV !== 'production') { - assert(path != null, "\"path\" is required in a route configuration."); - assert( - typeof route.component !== 'string', - "route config \"component\" for path: " + (String( - path || name - )) + " cannot be a " + "string id. Use an actual component instead." - ); - - warn( - // eslint-disable-next-line no-control-regex - !/[^\u0000-\u007F]+/.test(path), - "Route with path \"" + path + "\" contains unencoded characters, make sure " + - "your path is correctly encoded before passing it to the router. Use " + - "encodeURI to encode static segments of your path." - ); - } - - var pathToRegexpOptions = - route.pathToRegexpOptions || {}; - var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict); - - if (typeof route.caseSensitive === 'boolean') { - pathToRegexpOptions.sensitive = route.caseSensitive; - } - - var record = { - path: normalizedPath, - regex: compileRouteRegex(normalizedPath, pathToRegexpOptions), - components: route.components || { default: route.component }, - alias: route.alias - ? typeof route.alias === 'string' - ? [route.alias] - : route.alias - : [], - instances: {}, - enteredCbs: {}, - name: name, - parent: parent, - matchAs: matchAs, - redirect: route.redirect, - beforeEnter: route.beforeEnter, - meta: route.meta || {}, - props: - route.props == null - ? {} - : route.components - ? route.props - : { default: route.props } - }; - - if (route.children) { - // Warn if route is named, does not redirect and has a default child route. - // If users navigate to this route by name, the default child will - // not be rendered (GH Issue #629) - if (process.env.NODE_ENV !== 'production') { - if ( - route.name && - !route.redirect && - route.children.some(function (child) { return /^\/?$/.test(child.path); }) - ) { - warn( - false, - "Named Route '" + (route.name) + "' has a default child route. " + - "When navigating to this named route (:to=\"{name: '" + (route.name) + "'}\"), " + - "the default child route will not be rendered. Remove the name from " + - "this route and use the name of the default child route for named " + - "links instead." - ); - } - } - route.children.forEach(function (child) { - var childMatchAs = matchAs - ? cleanPath((matchAs + "/" + (child.path))) - : undefined; - addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs); - }); - } - - if (!pathMap[record.path]) { - pathList.push(record.path); - pathMap[record.path] = record; - } - - if (route.alias !== undefined) { - var aliases = Array.isArray(route.alias) ? route.alias : [route.alias]; - for (var i = 0; i < aliases.length; ++i) { - var alias = aliases[i]; - if (process.env.NODE_ENV !== 'production' && alias === path) { - warn( - false, - ("Found an alias with the same value as the path: \"" + path + "\". You have to remove that alias. It will be ignored in development.") - ); - // skip in dev to make it work - continue - } - - var aliasRoute = { - path: alias, - children: route.children - }; - addRouteRecord( - pathList, - pathMap, - nameMap, - aliasRoute, - parent, - record.path || '/' // matchAs - ); - } - } - - if (name) { - if (!nameMap[name]) { - nameMap[name] = record; - } else if (process.env.NODE_ENV !== 'production' && !matchAs) { - warn( - false, - "Duplicate named routes definition: " + - "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }" - ); - } - } -} - -function compileRouteRegex ( - path, - pathToRegexpOptions -) { - var regex = pathToRegexp_1(path, [], pathToRegexpOptions); - if (process.env.NODE_ENV !== 'production') { - var keys = Object.create(null); - regex.keys.forEach(function (key) { - warn( - !keys[key.name], - ("Duplicate param keys in route with path: \"" + path + "\"") - ); - keys[key.name] = true; - }); - } - return regex -} - -function normalizePath ( - path, - parent, - strict -) { - if (!strict) { path = path.replace(/\/$/, ''); } - if (path[0] === '/') { return path } - if (parent == null) { return path } - return cleanPath(((parent.path) + "/" + path)) -} - -/* */ - - - -function createMatcher ( - routes, - router -) { - var ref = createRouteMap(routes); - var pathList = ref.pathList; - var pathMap = ref.pathMap; - var nameMap = ref.nameMap; - - function addRoutes (routes) { - createRouteMap(routes, pathList, pathMap, nameMap); - } - - function addRoute (parentOrRoute, route) { - var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined; - // $flow-disable-line - createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent); - - // add aliases of parent - if (parent && parent.alias.length) { - createRouteMap( - // $flow-disable-line route is defined if parent is - parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }), - pathList, - pathMap, - nameMap, - parent - ); - } - } - - function getRoutes () { - return pathList.map(function (path) { return pathMap[path]; }) - } - - function match ( - raw, - currentRoute, - redirectedFrom - ) { - var location = normalizeLocation(raw, currentRoute, false, router); - var name = location.name; - - if (name) { - var record = nameMap[name]; - if (process.env.NODE_ENV !== 'production') { - warn(record, ("Route with name '" + name + "' does not exist")); - } - if (!record) { return _createRoute(null, location) } - var paramNames = record.regex.keys - .filter(function (key) { return !key.optional; }) - .map(function (key) { return key.name; }); - - if (typeof location.params !== 'object') { - location.params = {}; - } - - if (currentRoute && typeof currentRoute.params === 'object') { - for (var key in currentRoute.params) { - if (!(key in location.params) && paramNames.indexOf(key) > -1) { - location.params[key] = currentRoute.params[key]; - } - } - } - - location.path = fillParams(record.path, location.params, ("named route \"" + name + "\"")); - return _createRoute(record, location, redirectedFrom) - } else if (location.path) { - location.params = {}; - for (var i = 0; i < pathList.length; i++) { - var path = pathList[i]; - var record$1 = pathMap[path]; - if (matchRoute(record$1.regex, location.path, location.params)) { - return _createRoute(record$1, location, redirectedFrom) - } - } - } - // no match - return _createRoute(null, location) - } - - function redirect ( - record, - location - ) { - var originalRedirect = record.redirect; - var redirect = typeof originalRedirect === 'function' - ? originalRedirect(createRoute(record, location, null, router)) - : originalRedirect; - - if (typeof redirect === 'string') { - redirect = { path: redirect }; - } - - if (!redirect || typeof redirect !== 'object') { - if (process.env.NODE_ENV !== 'production') { - warn( - false, ("invalid redirect option: " + (JSON.stringify(redirect))) - ); - } - return _createRoute(null, location) - } - - var re = redirect; - var name = re.name; - var path = re.path; - var query = location.query; - var hash = location.hash; - var params = location.params; - query = re.hasOwnProperty('query') ? re.query : query; - hash = re.hasOwnProperty('hash') ? re.hash : hash; - params = re.hasOwnProperty('params') ? re.params : params; - - if (name) { - // resolved named direct - var targetRecord = nameMap[name]; - if (process.env.NODE_ENV !== 'production') { - assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found.")); - } - return match({ - _normalized: true, - name: name, - query: query, - hash: hash, - params: params - }, undefined, location) - } else if (path) { - // 1. resolve relative redirect - var rawPath = resolveRecordPath(path, record); - // 2. resolve params - var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\"")); - // 3. rematch with existing query and hash - return match({ - _normalized: true, - path: resolvedPath, - query: query, - hash: hash - }, undefined, location) - } else { - if (process.env.NODE_ENV !== 'production') { - warn(false, ("invalid redirect option: " + (JSON.stringify(redirect)))); - } - return _createRoute(null, location) - } - } - - function alias ( - record, - location, - matchAs - ) { - var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\"")); - var aliasedMatch = match({ - _normalized: true, - path: aliasedPath - }); - if (aliasedMatch) { - var matched = aliasedMatch.matched; - var aliasedRecord = matched[matched.length - 1]; - location.params = aliasedMatch.params; - return _createRoute(aliasedRecord, location) - } - return _createRoute(null, location) - } - - function _createRoute ( - record, - location, - redirectedFrom - ) { - if (record && record.redirect) { - return redirect(record, redirectedFrom || location) - } - if (record && record.matchAs) { - return alias(record, location, record.matchAs) - } - return createRoute(record, location, redirectedFrom, router) - } - - return { - match: match, - addRoute: addRoute, - getRoutes: getRoutes, - addRoutes: addRoutes - } -} - -function matchRoute ( - regex, - path, - params -) { - var m = path.match(regex); - - if (!m) { - return false - } else if (!params) { - return true - } - - for (var i = 1, len = m.length; i < len; ++i) { - var key = regex.keys[i - 1]; - if (key) { - // Fix #1994: using * with props: true generates a param named 0 - params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i]; - } - } - - return true -} - -function resolveRecordPath (path, record) { - return resolvePath(path, record.parent ? record.parent.path : '/', true) -} - -/* */ - -// use User Timing api (if present) for more accurate key precision -var Time = - inBrowser && window.performance && window.performance.now - ? window.performance - : Date; - -function genStateKey () { - return Time.now().toFixed(3) -} - -var _key = genStateKey(); - -function getStateKey () { - return _key -} - -function setStateKey (key) { - return (_key = key) -} - -/* */ - -var positionStore = Object.create(null); - -function setupScroll () { - // Prevent browser scroll behavior on History popstate - if ('scrollRestoration' in window.history) { - window.history.scrollRestoration = 'manual'; - } - // Fix for #1585 for Firefox - // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678 - // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with - // window.location.protocol + '//' + window.location.host - // location.host contains the port and location.hostname doesn't - var protocolAndPath = window.location.protocol + '//' + window.location.host; - var absolutePath = window.location.href.replace(protocolAndPath, ''); - // preserve existing history state as it could be overriden by the user - var stateCopy = extend({}, window.history.state); - stateCopy.key = getStateKey(); - window.history.replaceState(stateCopy, '', absolutePath); - window.addEventListener('popstate', handlePopState); - return function () { - window.removeEventListener('popstate', handlePopState); - } -} - -function handleScroll ( - router, - to, - from, - isPop -) { - if (!router.app) { - return - } - - var behavior = router.options.scrollBehavior; - if (!behavior) { - return - } - - if (process.env.NODE_ENV !== 'production') { - assert(typeof behavior === 'function', "scrollBehavior must be a function"); - } - - // wait until re-render finishes before scrolling - router.app.$nextTick(function () { - var position = getScrollPosition(); - var shouldScroll = behavior.call( - router, - to, - from, - isPop ? position : null - ); - - if (!shouldScroll) { - return - } - - if (typeof shouldScroll.then === 'function') { - shouldScroll - .then(function (shouldScroll) { - scrollToPosition((shouldScroll), position); - }) - .catch(function (err) { - if (process.env.NODE_ENV !== 'production') { - assert(false, err.toString()); - } - }); - } else { - scrollToPosition(shouldScroll, position); - } - }); -} - -function saveScrollPosition () { - var key = getStateKey(); - if (key) { - positionStore[key] = { - x: window.pageXOffset, - y: window.pageYOffset - }; - } -} - -function handlePopState (e) { - saveScrollPosition(); - if (e.state && e.state.key) { - setStateKey(e.state.key); - } -} - -function getScrollPosition () { - var key = getStateKey(); - if (key) { - return positionStore[key] - } -} - -function getElementPosition (el, offset) { - var docEl = document.documentElement; - var docRect = docEl.getBoundingClientRect(); - var elRect = el.getBoundingClientRect(); - return { - x: elRect.left - docRect.left - offset.x, - y: elRect.top - docRect.top - offset.y - } -} - -function isValidPosition (obj) { - return isNumber(obj.x) || isNumber(obj.y) -} - -function normalizePosition (obj) { - return { - x: isNumber(obj.x) ? obj.x : window.pageXOffset, - y: isNumber(obj.y) ? obj.y : window.pageYOffset - } -} - -function normalizeOffset (obj) { - return { - x: isNumber(obj.x) ? obj.x : 0, - y: isNumber(obj.y) ? obj.y : 0 - } -} - -function isNumber (v) { - return typeof v === 'number' -} - -var hashStartsWithNumberRE = /^#\d/; - -function scrollToPosition (shouldScroll, position) { - var isObject = typeof shouldScroll === 'object'; - if (isObject && typeof shouldScroll.selector === 'string') { - // getElementById would still fail if the selector contains a more complicated query like #main[data-attr] - // but at the same time, it doesn't make much sense to select an element with an id and an extra selector - var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line - ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line - : document.querySelector(shouldScroll.selector); - - if (el) { - var offset = - shouldScroll.offset && typeof shouldScroll.offset === 'object' - ? shouldScroll.offset - : {}; - offset = normalizeOffset(offset); - position = getElementPosition(el, offset); - } else if (isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - } else if (isObject && isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - - if (position) { - // $flow-disable-line - if ('scrollBehavior' in document.documentElement.style) { - window.scrollTo({ - left: position.x, - top: position.y, - // $flow-disable-line - behavior: shouldScroll.behavior - }); - } else { - window.scrollTo(position.x, position.y); - } - } -} - -/* */ - -var supportsPushState = - inBrowser && - (function () { - var ua = window.navigator.userAgent; - - if ( - (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && - ua.indexOf('Mobile Safari') !== -1 && - ua.indexOf('Chrome') === -1 && - ua.indexOf('Windows Phone') === -1 - ) { - return false - } - - return window.history && typeof window.history.pushState === 'function' - })(); - -function pushState (url, replace) { - saveScrollPosition(); - // try...catch the pushState call to get around Safari - // DOM Exception 18 where it limits to 100 pushState calls - var history = window.history; - try { - if (replace) { - // preserve existing history state as it could be overriden by the user - var stateCopy = extend({}, history.state); - stateCopy.key = getStateKey(); - history.replaceState(stateCopy, '', url); - } else { - history.pushState({ key: setStateKey(genStateKey()) }, '', url); - } - } catch (e) { - window.location[replace ? 'replace' : 'assign'](url); - } -} - -function replaceState (url) { - pushState(url, true); -} - -// When changing thing, also edit router.d.ts -var NavigationFailureType = { - redirected: 2, - aborted: 4, - cancelled: 8, - duplicated: 16 -}; - -function createNavigationRedirectedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.redirected, - ("Redirected when going from \"" + (from.fullPath) + "\" to \"" + (stringifyRoute( - to - )) + "\" via a navigation guard.") - ) -} - -function createNavigationDuplicatedError (from, to) { - var error = createRouterError( - from, - to, - NavigationFailureType.duplicated, - ("Avoided redundant navigation to current location: \"" + (from.fullPath) + "\".") - ); - // backwards compatible with the first introduction of Errors - error.name = 'NavigationDuplicated'; - return error -} - -function createNavigationCancelledError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.cancelled, - ("Navigation cancelled from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" with a new navigation.") - ) -} - -function createNavigationAbortedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.aborted, - ("Navigation aborted from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" via a navigation guard.") - ) -} - -function createRouterError (from, to, type, message) { - var error = new Error(message); - error._isRouter = true; - error.from = from; - error.to = to; - error.type = type; - - return error -} - -var propertiesToLog = ['params', 'query', 'hash']; - -function stringifyRoute (to) { - if (typeof to === 'string') { return to } - if ('path' in to) { return to.path } - var location = {}; - propertiesToLog.forEach(function (key) { - if (key in to) { location[key] = to[key]; } - }); - return JSON.stringify(location, null, 2) -} - -function isError (err) { - return Object.prototype.toString.call(err).indexOf('Error') > -1 -} - -function isNavigationFailure (err, errorType) { - return ( - isError(err) && - err._isRouter && - (errorType == null || err.type === errorType) - ) -} - -/* */ - -function runQueue (queue, fn, cb) { - var step = function (index) { - if (index >= queue.length) { - cb(); - } else { - if (queue[index]) { - fn(queue[index], function () { - step(index + 1); - }); - } else { - step(index + 1); - } - } - }; - step(0); -} - -/* */ - -function resolveAsyncComponents (matched) { - return function (to, from, next) { - var hasAsync = false; - var pending = 0; - var error = null; - - flatMapComponents(matched, function (def, _, match, key) { - // if it's a function and doesn't have cid attached, - // assume it's an async component resolve function. - // we are not using Vue's default async resolving mechanism because - // we want to halt the navigation until the incoming component has been - // resolved. - if (typeof def === 'function' && def.cid === undefined) { - hasAsync = true; - pending++; - - var resolve = once(function (resolvedDef) { - if (isESModule(resolvedDef)) { - resolvedDef = resolvedDef.default; - } - // save resolved on async factory in case it's used elsewhere - def.resolved = typeof resolvedDef === 'function' - ? resolvedDef - : _Vue.extend(resolvedDef); - match.components[key] = resolvedDef; - pending--; - if (pending <= 0) { - next(); - } - }); - - var reject = once(function (reason) { - var msg = "Failed to resolve async component " + key + ": " + reason; - process.env.NODE_ENV !== 'production' && warn(false, msg); - if (!error) { - error = isError(reason) - ? reason - : new Error(msg); - next(error); - } - }); - - var res; - try { - res = def(resolve, reject); - } catch (e) { - reject(e); - } - if (res) { - if (typeof res.then === 'function') { - res.then(resolve, reject); - } else { - // new syntax in Vue 2.3 - var comp = res.component; - if (comp && typeof comp.then === 'function') { - comp.then(resolve, reject); - } - } - } - } - }); - - if (!hasAsync) { next(); } - } -} - -function flatMapComponents ( - matched, - fn -) { - return flatten(matched.map(function (m) { - return Object.keys(m.components).map(function (key) { return fn( - m.components[key], - m.instances[key], - m, key - ); }) - })) -} - -function flatten (arr) { - return Array.prototype.concat.apply([], arr) -} - -var hasSymbol = - typeof Symbol === 'function' && - typeof Symbol.toStringTag === 'symbol'; - -function isESModule (obj) { - return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module') -} - -// in Webpack 2, require.ensure now also returns a Promise -// so the resolve/reject functions may get called an extra time -// if the user uses an arrow function shorthand that happens to -// return that Promise. -function once (fn) { - var called = false; - return function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - if (called) { return } - called = true; - return fn.apply(this, args) - } -} - -/* */ - -var History = function History (router, base) { - this.router = router; - this.base = normalizeBase(base); - // start with a route object that stands for "nowhere" - this.current = START; - this.pending = null; - this.ready = false; - this.readyCbs = []; - this.readyErrorCbs = []; - this.errorCbs = []; - this.listeners = []; -}; - -History.prototype.listen = function listen (cb) { - this.cb = cb; -}; - -History.prototype.onReady = function onReady (cb, errorCb) { - if (this.ready) { - cb(); - } else { - this.readyCbs.push(cb); - if (errorCb) { - this.readyErrorCbs.push(errorCb); - } - } -}; - -History.prototype.onError = function onError (errorCb) { - this.errorCbs.push(errorCb); -}; - -History.prototype.transitionTo = function transitionTo ( - location, - onComplete, - onAbort -) { - var this$1$1 = this; - - var route; - // catch redirect option https://github.com/vuejs/vue-router/issues/3201 - try { - route = this.router.match(location, this.current); - } catch (e) { - this.errorCbs.forEach(function (cb) { - cb(e); - }); - // Exception should still be thrown - throw e - } - var prev = this.current; - this.confirmTransition( - route, - function () { - this$1$1.updateRoute(route); - onComplete && onComplete(route); - this$1$1.ensureURL(); - this$1$1.router.afterHooks.forEach(function (hook) { - hook && hook(route, prev); - }); - - // fire ready cbs once - if (!this$1$1.ready) { - this$1$1.ready = true; - this$1$1.readyCbs.forEach(function (cb) { - cb(route); - }); - } - }, - function (err) { - if (onAbort) { - onAbort(err); - } - if (err && !this$1$1.ready) { - // Initial redirection should not mark the history as ready yet - // because it's triggered by the redirection instead - // https://github.com/vuejs/vue-router/issues/3225 - // https://github.com/vuejs/vue-router/issues/3331 - if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) { - this$1$1.ready = true; - this$1$1.readyErrorCbs.forEach(function (cb) { - cb(err); - }); - } - } - } - ); -}; - -History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) { - var this$1$1 = this; - - var current = this.current; - this.pending = route; - var abort = function (err) { - // changed after adding errors with - // https://github.com/vuejs/vue-router/pull/3047 before that change, - // redirect and aborted navigation would produce an err == null - if (!isNavigationFailure(err) && isError(err)) { - if (this$1$1.errorCbs.length) { - this$1$1.errorCbs.forEach(function (cb) { - cb(err); - }); - } else { - if (process.env.NODE_ENV !== 'production') { - warn(false, 'uncaught error during route navigation:'); - } - console.error(err); - } - } - onAbort && onAbort(err); - }; - var lastRouteIndex = route.matched.length - 1; - var lastCurrentIndex = current.matched.length - 1; - if ( - isSameRoute(route, current) && - // in the case the route map has been dynamically appended to - lastRouteIndex === lastCurrentIndex && - route.matched[lastRouteIndex] === current.matched[lastCurrentIndex] - ) { - this.ensureURL(); - if (route.hash) { - handleScroll(this.router, current, route, false); - } - return abort(createNavigationDuplicatedError(current, route)) - } - - var ref = resolveQueue( - this.current.matched, - route.matched - ); - var updated = ref.updated; - var deactivated = ref.deactivated; - var activated = ref.activated; - - var queue = [].concat( - // in-component leave guards - extractLeaveGuards(deactivated), - // global before hooks - this.router.beforeHooks, - // in-component update hooks - extractUpdateHooks(updated), - // in-config enter guards - activated.map(function (m) { return m.beforeEnter; }), - // async components - resolveAsyncComponents(activated) - ); - - var iterator = function (hook, next) { - if (this$1$1.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - try { - hook(route, current, function (to) { - if (to === false) { - // next(false) -> abort navigation, ensure current URL - this$1$1.ensureURL(true); - abort(createNavigationAbortedError(current, route)); - } else if (isError(to)) { - this$1$1.ensureURL(true); - abort(to); - } else if ( - typeof to === 'string' || - (typeof to === 'object' && - (typeof to.path === 'string' || typeof to.name === 'string')) - ) { - // next('/') or next({ path: '/' }) -> redirect - abort(createNavigationRedirectedError(current, route)); - if (typeof to === 'object' && to.replace) { - this$1$1.replace(to); - } else { - this$1$1.push(to); - } - } else { - // confirm transition and pass on the value - next(to); - } - }); - } catch (e) { - abort(e); - } - }; - - runQueue(queue, iterator, function () { - // wait until async components are resolved before - // extracting in-component enter guards - var enterGuards = extractEnterGuards(activated); - var queue = enterGuards.concat(this$1$1.router.resolveHooks); - runQueue(queue, iterator, function () { - if (this$1$1.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - this$1$1.pending = null; - onComplete(route); - if (this$1$1.router.app) { - this$1$1.router.app.$nextTick(function () { - handleRouteEntered(route); - }); - } - }); - }); -}; - -History.prototype.updateRoute = function updateRoute (route) { - this.current = route; - this.cb && this.cb(route); -}; - -History.prototype.setupListeners = function setupListeners () { - // Default implementation is empty -}; - -History.prototype.teardown = function teardown () { - // clean up event listeners - // https://github.com/vuejs/vue-router/issues/2341 - this.listeners.forEach(function (cleanupListener) { - cleanupListener(); - }); - this.listeners = []; - - // reset current history route - // https://github.com/vuejs/vue-router/issues/3294 - this.current = START; - this.pending = null; -}; - -function normalizeBase (base) { - if (!base) { - if (inBrowser) { - // respect <base> tag - var baseEl = document.querySelector('base'); - base = (baseEl && baseEl.getAttribute('href')) || '/'; - // strip full URL origin - base = base.replace(/^https?:\/\/[^\/]+/, ''); - } else { - base = '/'; - } - } - // make sure there's the starting slash - if (base.charAt(0) !== '/') { - base = '/' + base; - } - // remove trailing slash - return base.replace(/\/$/, '') -} - -function resolveQueue ( - current, - next -) { - var i; - var max = Math.max(current.length, next.length); - for (i = 0; i < max; i++) { - if (current[i] !== next[i]) { - break - } - } - return { - updated: next.slice(0, i), - activated: next.slice(i), - deactivated: current.slice(i) - } -} - -function extractGuards ( - records, - name, - bind, - reverse -) { - var guards = flatMapComponents(records, function (def, instance, match, key) { - var guard = extractGuard(def, name); - if (guard) { - return Array.isArray(guard) - ? guard.map(function (guard) { return bind(guard, instance, match, key); }) - : bind(guard, instance, match, key) - } - }); - return flatten(reverse ? guards.reverse() : guards) -} - -function extractGuard ( - def, - key -) { - if (typeof def !== 'function') { - // extend now so that global mixins are applied. - def = _Vue.extend(def); - } - return def.options[key] -} - -function extractLeaveGuards (deactivated) { - return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true) -} - -function extractUpdateHooks (updated) { - return extractGuards(updated, 'beforeRouteUpdate', bindGuard) -} - -function bindGuard (guard, instance) { - if (instance) { - return function boundRouteGuard () { - return guard.apply(instance, arguments) - } - } -} - -function extractEnterGuards ( - activated -) { - return extractGuards( - activated, - 'beforeRouteEnter', - function (guard, _, match, key) { - return bindEnterGuard(guard, match, key) - } - ) -} - -function bindEnterGuard ( - guard, - match, - key -) { - return function routeEnterGuard (to, from, next) { - return guard(to, from, function (cb) { - if (typeof cb === 'function') { - if (!match.enteredCbs[key]) { - match.enteredCbs[key] = []; - } - match.enteredCbs[key].push(cb); - } - next(cb); - }) - } -} - -/* */ - -var HTML5History = /*@__PURE__*/(function (History) { - function HTML5History (router, base) { - History.call(this, router, base); - - this._startLocation = getLocation(this.base); - } - - if ( History ) HTML5History.__proto__ = History; - HTML5History.prototype = Object.create( History && History.prototype ); - HTML5History.prototype.constructor = HTML5History; - - HTML5History.prototype.setupListeners = function setupListeners () { - var this$1$1 = this; - - if (this.listeners.length > 0) { - return - } - - var router = this.router; - var expectScroll = router.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll) { - this.listeners.push(setupScroll()); - } - - var handleRoutingEvent = function () { - var current = this$1$1.current; - - // Avoiding first `popstate` event dispatched in some browsers but first - // history route not updated since async guard at the same time. - var location = getLocation(this$1$1.base); - if (this$1$1.current === START && location === this$1$1._startLocation) { - return - } - - this$1$1.transitionTo(location, function (route) { - if (supportsScroll) { - handleScroll(router, route, current, true); - } - }); - }; - window.addEventListener('popstate', handleRoutingEvent); - this.listeners.push(function () { - window.removeEventListener('popstate', handleRoutingEvent); - }); - }; - - HTML5History.prototype.go = function go (n) { - window.history.go(n); - }; - - HTML5History.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo(location, function (route) { - pushState(cleanPath(this$1$1.base + route.fullPath)); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - }; - - HTML5History.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo(location, function (route) { - replaceState(cleanPath(this$1$1.base + route.fullPath)); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - }; - - HTML5History.prototype.ensureURL = function ensureURL (push) { - if (getLocation(this.base) !== this.current.fullPath) { - var current = cleanPath(this.base + this.current.fullPath); - push ? pushState(current) : replaceState(current); - } - }; - - HTML5History.prototype.getCurrentLocation = function getCurrentLocation () { - return getLocation(this.base) - }; - - return HTML5History; -}(History)); - -function getLocation (base) { - var path = window.location.pathname; - var pathLowerCase = path.toLowerCase(); - var baseLowerCase = base.toLowerCase(); - // base="/a" shouldn't turn path="/app" into "/a/pp" - // https://github.com/vuejs/vue-router/issues/3555 - // so we ensure the trailing slash in the base - if (base && ((pathLowerCase === baseLowerCase) || - (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) { - path = path.slice(base.length); - } - return (path || '/') + window.location.search + window.location.hash -} - -/* */ - -var HashHistory = /*@__PURE__*/(function (History) { - function HashHistory (router, base, fallback) { - History.call(this, router, base); - // check history fallback deeplinking - if (fallback && checkFallback(this.base)) { - return - } - ensureSlash(); - } - - if ( History ) HashHistory.__proto__ = History; - HashHistory.prototype = Object.create( History && History.prototype ); - HashHistory.prototype.constructor = HashHistory; - - // this is delayed until the app mounts - // to avoid the hashchange listener being fired too early - HashHistory.prototype.setupListeners = function setupListeners () { - var this$1$1 = this; - - if (this.listeners.length > 0) { - return - } - - var router = this.router; - var expectScroll = router.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll) { - this.listeners.push(setupScroll()); - } - - var handleRoutingEvent = function () { - var current = this$1$1.current; - if (!ensureSlash()) { - return - } - this$1$1.transitionTo(getHash(), function (route) { - if (supportsScroll) { - handleScroll(this$1$1.router, route, current, true); - } - if (!supportsPushState) { - replaceHash(route.fullPath); - } - }); - }; - var eventType = supportsPushState ? 'popstate' : 'hashchange'; - window.addEventListener( - eventType, - handleRoutingEvent - ); - this.listeners.push(function () { - window.removeEventListener(eventType, handleRoutingEvent); - }); - }; - - HashHistory.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo( - location, - function (route) { - pushHash(route.fullPath); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - HashHistory.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo( - location, - function (route) { - replaceHash(route.fullPath); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - HashHistory.prototype.go = function go (n) { - window.history.go(n); - }; - - HashHistory.prototype.ensureURL = function ensureURL (push) { - var current = this.current.fullPath; - if (getHash() !== current) { - push ? pushHash(current) : replaceHash(current); - } - }; - - HashHistory.prototype.getCurrentLocation = function getCurrentLocation () { - return getHash() - }; - - return HashHistory; -}(History)); - -function checkFallback (base) { - var location = getLocation(base); - if (!/^\/#/.test(location)) { - window.location.replace(cleanPath(base + '/#' + location)); - return true - } -} - -function ensureSlash () { - var path = getHash(); - if (path.charAt(0) === '/') { - return true - } - replaceHash('/' + path); - return false -} - -function getHash () { - // We can't use window.location.hash here because it's not - // consistent across browsers - Firefox will pre-decode it! - var href = window.location.href; - var index = href.indexOf('#'); - // empty path - if (index < 0) { return '' } - - href = href.slice(index + 1); - - return href -} - -function getUrl (path) { - var href = window.location.href; - var i = href.indexOf('#'); - var base = i >= 0 ? href.slice(0, i) : href; - return (base + "#" + path) -} - -function pushHash (path) { - if (supportsPushState) { - pushState(getUrl(path)); - } else { - window.location.hash = path; - } -} - -function replaceHash (path) { - if (supportsPushState) { - replaceState(getUrl(path)); - } else { - window.location.replace(getUrl(path)); - } -} - -/* */ - -var AbstractHistory = /*@__PURE__*/(function (History) { - function AbstractHistory (router, base) { - History.call(this, router, base); - this.stack = []; - this.index = -1; - } - - if ( History ) AbstractHistory.__proto__ = History; - AbstractHistory.prototype = Object.create( History && History.prototype ); - AbstractHistory.prototype.constructor = AbstractHistory; - - AbstractHistory.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - this.transitionTo( - location, - function (route) { - this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route); - this$1$1.index++; - onComplete && onComplete(route); - }, - onAbort - ); - }; - - AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - this.transitionTo( - location, - function (route) { - this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - AbstractHistory.prototype.go = function go (n) { - var this$1$1 = this; - - var targetIndex = this.index + n; - if (targetIndex < 0 || targetIndex >= this.stack.length) { - return - } - var route = this.stack[targetIndex]; - this.confirmTransition( - route, - function () { - var prev = this$1$1.current; - this$1$1.index = targetIndex; - this$1$1.updateRoute(route); - this$1$1.router.afterHooks.forEach(function (hook) { - hook && hook(route, prev); - }); - }, - function (err) { - if (isNavigationFailure(err, NavigationFailureType.duplicated)) { - this$1$1.index = targetIndex; - } - } - ); - }; - - AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () { - var current = this.stack[this.stack.length - 1]; - return current ? current.fullPath : '/' - }; - - AbstractHistory.prototype.ensureURL = function ensureURL () { - // noop - }; - - return AbstractHistory; -}(History)); - -/* */ - - - -var VueRouter = function VueRouter (options) { - if ( options === void 0 ) options = {}; - - if (process.env.NODE_ENV !== 'production') { - warn(this instanceof VueRouter, "Router must be called with the new operator."); - } - this.app = null; - this.apps = []; - this.options = options; - this.beforeHooks = []; - this.resolveHooks = []; - this.afterHooks = []; - this.matcher = createMatcher(options.routes || [], this); - - var mode = options.mode || 'hash'; - this.fallback = - mode === 'history' && !supportsPushState && options.fallback !== false; - if (this.fallback) { - mode = 'hash'; - } - if (!inBrowser) { - mode = 'abstract'; - } - this.mode = mode; - - switch (mode) { - case 'history': - this.history = new HTML5History(this, options.base); - break - case 'hash': - this.history = new HashHistory(this, options.base, this.fallback); - break - case 'abstract': - this.history = new AbstractHistory(this, options.base); - break - default: - if (process.env.NODE_ENV !== 'production') { - assert(false, ("invalid mode: " + mode)); - } - } -}; - -var prototypeAccessors = { currentRoute: { configurable: true } }; - -VueRouter.prototype.match = function match (raw, current, redirectedFrom) { - return this.matcher.match(raw, current, redirectedFrom) -}; - -prototypeAccessors.currentRoute.get = function () { - return this.history && this.history.current -}; - -VueRouter.prototype.init = function init (app /* Vue component instance */) { - var this$1$1 = this; - - process.env.NODE_ENV !== 'production' && - assert( - install.installed, - "not installed. Make sure to call `Vue.use(VueRouter)` " + - "before creating root instance." - ); - - this.apps.push(app); - - // set up app destroyed handler - // https://github.com/vuejs/vue-router/issues/2639 - app.$once('hook:destroyed', function () { - // clean out app from this.apps array once destroyed - var index = this$1$1.apps.indexOf(app); - if (index > -1) { this$1$1.apps.splice(index, 1); } - // ensure we still have a main app or null if no apps - // we do not release the router so it can be reused - if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; } - - if (!this$1$1.app) { this$1$1.history.teardown(); } - }); - - // main app previously initialized - // return as we don't need to set up new history listener - if (this.app) { - return - } - - this.app = app; - - var history = this.history; - - if (history instanceof HTML5History || history instanceof HashHistory) { - var handleInitialScroll = function (routeOrError) { - var from = history.current; - var expectScroll = this$1$1.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll && 'fullPath' in routeOrError) { - handleScroll(this$1$1, routeOrError, from, false); - } - }; - var setupListeners = function (routeOrError) { - history.setupListeners(); - handleInitialScroll(routeOrError); - }; - history.transitionTo( - history.getCurrentLocation(), - setupListeners, - setupListeners - ); - } - - history.listen(function (route) { - this$1$1.apps.forEach(function (app) { - app._route = route; - }); - }); -}; - -VueRouter.prototype.beforeEach = function beforeEach (fn) { - return registerHook(this.beforeHooks, fn) -}; - -VueRouter.prototype.beforeResolve = function beforeResolve (fn) { - return registerHook(this.resolveHooks, fn) -}; - -VueRouter.prototype.afterEach = function afterEach (fn) { - return registerHook(this.afterHooks, fn) -}; - -VueRouter.prototype.onReady = function onReady (cb, errorCb) { - this.history.onReady(cb, errorCb); -}; - -VueRouter.prototype.onError = function onError (errorCb) { - this.history.onError(errorCb); -}; - -VueRouter.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise(function (resolve, reject) { - this$1$1.history.push(location, resolve, reject); - }) - } else { - this.history.push(location, onComplete, onAbort); - } -}; - -VueRouter.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise(function (resolve, reject) { - this$1$1.history.replace(location, resolve, reject); - }) - } else { - this.history.replace(location, onComplete, onAbort); - } -}; - -VueRouter.prototype.go = function go (n) { - this.history.go(n); -}; - -VueRouter.prototype.back = function back () { - this.go(-1); -}; - -VueRouter.prototype.forward = function forward () { - this.go(1); -}; - -VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) { - var route = to - ? to.matched - ? to - : this.resolve(to).route - : this.currentRoute; - if (!route) { - return [] - } - return [].concat.apply( - [], - route.matched.map(function (m) { - return Object.keys(m.components).map(function (key) { - return m.components[key] - }) - }) - ) -}; - -VueRouter.prototype.resolve = function resolve ( - to, - current, - append -) { - current = current || this.history.current; - var location = normalizeLocation(to, current, append, this); - var route = this.match(location, current); - var fullPath = route.redirectedFrom || route.fullPath; - var base = this.history.base; - var href = createHref(base, fullPath, this.mode); - return { - location: location, - route: route, - href: href, - // for backwards compat - normalizedTo: location, - resolved: route - } -}; - -VueRouter.prototype.getRoutes = function getRoutes () { - return this.matcher.getRoutes() -}; - -VueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) { - this.matcher.addRoute(parentOrRoute, route); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } -}; - -VueRouter.prototype.addRoutes = function addRoutes (routes) { - if (process.env.NODE_ENV !== 'production') { - warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.'); - } - this.matcher.addRoutes(routes); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } -}; - -Object.defineProperties( VueRouter.prototype, prototypeAccessors ); - -var VueRouter$1 = VueRouter; - -function registerHook (list, fn) { - list.push(fn); - return function () { - var i = list.indexOf(fn); - if (i > -1) { list.splice(i, 1); } - } -} - -function createHref (base, fullPath, mode) { - var path = mode === 'hash' ? '#' + fullPath : fullPath; - return base ? cleanPath(base + '/' + path) : path -} - -// We cannot remove this as it would be a breaking change -VueRouter.install = install; -VueRouter.version = '3.6.5'; -VueRouter.isNavigationFailure = isNavigationFailure; -VueRouter.NavigationFailureType = NavigationFailureType; -VueRouter.START_LOCATION = START; - -if (inBrowser && window.Vue) { - window.Vue.use(VueRouter); -} - -module.exports = VueRouter$1; diff --git a/dist/vue-router.esm.browser.js b/dist/vue-router.esm.browser.js deleted file mode 100644 index 2c36a8b8c..000000000 --- a/dist/vue-router.esm.browser.js +++ /dev/null @@ -1,3125 +0,0 @@ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -/* */ - -function assert (condition, message) { - if (!condition) { - throw new Error(`[vue-router] ${message}`) - } -} - -function warn (condition, message) { - if (!condition) { - typeof console !== 'undefined' && console.warn(`[vue-router] ${message}`); - } -} - -function extend (a, b) { - for (const key in b) { - a[key] = b[key]; - } - return a -} - -/* */ - -const encodeReserveRE = /[!'()*]/g; -const encodeReserveReplacer = c => '%' + c.charCodeAt(0).toString(16); -const commaRE = /%2C/g; - -// fixed encodeURIComponent which is more conformant to RFC3986: -// - escapes [!'()*] -// - preserve commas -const encode = str => - encodeURIComponent(str) - .replace(encodeReserveRE, encodeReserveReplacer) - .replace(commaRE, ','); - -function decode (str) { - try { - return decodeURIComponent(str) - } catch (err) { - { - warn(false, `Error decoding "${str}". Leaving it intact.`); - } - } - return str -} - -function resolveQuery ( - query, - extraQuery = {}, - _parseQuery -) { - const parse = _parseQuery || parseQuery; - let parsedQuery; - try { - parsedQuery = parse(query || ''); - } catch (e) { - warn(false, e.message); - parsedQuery = {}; - } - for (const key in extraQuery) { - const value = extraQuery[key]; - parsedQuery[key] = Array.isArray(value) - ? value.map(castQueryParamValue) - : castQueryParamValue(value); - } - return parsedQuery -} - -const castQueryParamValue = value => (value == null || typeof value === 'object' ? value : String(value)); - -function parseQuery (query) { - const res = {}; - - query = query.trim().replace(/^(\?|#|&)/, ''); - - if (!query) { - return res - } - - query.split('&').forEach(param => { - const parts = param.replace(/\+/g, ' ').split('='); - const key = decode(parts.shift()); - const val = parts.length > 0 ? decode(parts.join('=')) : null; - - if (res[key] === undefined) { - res[key] = val; - } else if (Array.isArray(res[key])) { - res[key].push(val); - } else { - res[key] = [res[key], val]; - } - }); - - return res -} - -function stringifyQuery (obj) { - const res = obj - ? Object.keys(obj) - .map(key => { - const val = obj[key]; - - if (val === undefined) { - return '' - } - - if (val === null) { - return encode(key) - } - - if (Array.isArray(val)) { - const result = []; - val.forEach(val2 => { - if (val2 === undefined) { - return - } - if (val2 === null) { - result.push(encode(key)); - } else { - result.push(encode(key) + '=' + encode(val2)); - } - }); - return result.join('&') - } - - return encode(key) + '=' + encode(val) - }) - .filter(x => x.length > 0) - .join('&') - : null; - return res ? `?${res}` : '' -} - -/* */ - -const trailingSlashRE = /\/?$/; - -function createRoute ( - record, - location, - redirectedFrom, - router -) { - const stringifyQuery = router && router.options.stringifyQuery; - - let query = location.query || {}; - try { - query = clone(query); - } catch (e) {} - - const route = { - name: location.name || (record && record.name), - meta: (record && record.meta) || {}, - path: location.path || '/', - hash: location.hash || '', - query, - params: location.params || {}, - fullPath: getFullPath(location, stringifyQuery), - matched: record ? formatMatch(record) : [] - }; - if (redirectedFrom) { - route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery); - } - return Object.freeze(route) -} - -function clone (value) { - if (Array.isArray(value)) { - return value.map(clone) - } else if (value && typeof value === 'object') { - const res = {}; - for (const key in value) { - res[key] = clone(value[key]); - } - return res - } else { - return value - } -} - -// the starting route that represents the initial state -const START = createRoute(null, { - path: '/' -}); - -function formatMatch (record) { - const res = []; - while (record) { - res.unshift(record); - record = record.parent; - } - return res -} - -function getFullPath ( - { path, query = {}, hash = '' }, - _stringifyQuery -) { - const stringify = _stringifyQuery || stringifyQuery; - return (path || '/') + stringify(query) + hash -} - -function isSameRoute (a, b, onlyPath) { - if (b === START) { - return a === b - } else if (!b) { - return false - } else if (a.path && b.path) { - return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath || - a.hash === b.hash && - isObjectEqual(a.query, b.query)) - } else if (a.name && b.name) { - return ( - a.name === b.name && - (onlyPath || ( - a.hash === b.hash && - isObjectEqual(a.query, b.query) && - isObjectEqual(a.params, b.params)) - ) - ) - } else { - return false - } -} - -function isObjectEqual (a = {}, b = {}) { - // handle null value #1566 - if (!a || !b) return a === b - const aKeys = Object.keys(a).sort(); - const bKeys = Object.keys(b).sort(); - if (aKeys.length !== bKeys.length) { - return false - } - return aKeys.every((key, i) => { - const aVal = a[key]; - const bKey = bKeys[i]; - if (bKey !== key) return false - const bVal = b[key]; - // query values can be null and undefined - if (aVal == null || bVal == null) return aVal === bVal - // check nested equality - if (typeof aVal === 'object' && typeof bVal === 'object') { - return isObjectEqual(aVal, bVal) - } - return String(aVal) === String(bVal) - }) -} - -function isIncludedRoute (current, target) { - return ( - current.path.replace(trailingSlashRE, '/').indexOf( - target.path.replace(trailingSlashRE, '/') - ) === 0 && - (!target.hash || current.hash === target.hash) && - queryIncludes(current.query, target.query) - ) -} - -function queryIncludes (current, target) { - for (const key in target) { - if (!(key in current)) { - return false - } - } - return true -} - -function handleRouteEntered (route) { - for (let i = 0; i < route.matched.length; i++) { - const record = route.matched[i]; - for (const name in record.instances) { - const instance = record.instances[name]; - const cbs = record.enteredCbs[name]; - if (!instance || !cbs) continue - delete record.enteredCbs[name]; - for (let i = 0; i < cbs.length; i++) { - if (!instance._isBeingDestroyed) cbs[i](instance); - } - } - } -} - -var View = { - name: 'RouterView', - functional: true, - props: { - name: { - type: String, - default: 'default' - } - }, - render (_, { props, children, parent, data }) { - // used by devtools to display a router-view badge - data.routerView = true; - - // directly use parent context's createElement() function - // so that components rendered by router-view can resolve named slots - const h = parent.$createElement; - const name = props.name; - const route = parent.$route; - const cache = parent._routerViewCache || (parent._routerViewCache = {}); - - // determine current view depth, also check to see if the tree - // has been toggled inactive but kept-alive. - let depth = 0; - let inactive = false; - while (parent && parent._routerRoot !== parent) { - const vnodeData = parent.$vnode ? parent.$vnode.data : {}; - if (vnodeData.routerView) { - depth++; - } - if (vnodeData.keepAlive && parent._directInactive && parent._inactive) { - inactive = true; - } - parent = parent.$parent; - } - data.routerViewDepth = depth; - - // render previous view if the tree is inactive and kept-alive - if (inactive) { - const cachedData = cache[name]; - const cachedComponent = cachedData && cachedData.component; - if (cachedComponent) { - // #2301 - // pass props - if (cachedData.configProps) { - fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps); - } - return h(cachedComponent, data, children) - } else { - // render previous empty view - return h() - } - } - - const matched = route.matched[depth]; - const component = matched && matched.components[name]; - - // render empty node if no matched route or no config component - if (!matched || !component) { - cache[name] = null; - return h() - } - - // cache component - cache[name] = { component }; - - // attach instance registration hook - // this will be called in the instance's injected lifecycle hooks - data.registerRouteInstance = (vm, val) => { - // val could be undefined for unregistration - const current = matched.instances[name]; - if ( - (val && current !== vm) || - (!val && current === vm) - ) { - matched.instances[name] = val; - } - } - - // also register instance in prepatch hook - // in case the same component instance is reused across different routes - ;(data.hook || (data.hook = {})).prepatch = (_, vnode) => { - matched.instances[name] = vnode.componentInstance; - }; - - // register instance in init hook - // in case kept-alive component be actived when routes changed - data.hook.init = (vnode) => { - if (vnode.data.keepAlive && - vnode.componentInstance && - vnode.componentInstance !== matched.instances[name] - ) { - matched.instances[name] = vnode.componentInstance; - } - - // if the route transition has already been confirmed then we weren't - // able to call the cbs during confirmation as the component was not - // registered yet, so we call it here. - handleRouteEntered(route); - }; - - const configProps = matched.props && matched.props[name]; - // save route and configProps in cache - if (configProps) { - extend(cache[name], { - route, - configProps - }); - fillPropsinData(component, data, route, configProps); - } - - return h(component, data, children) - } -}; - -function fillPropsinData (component, data, route, configProps) { - // resolve props - let propsToPass = data.props = resolveProps(route, configProps); - if (propsToPass) { - // clone to prevent mutation - propsToPass = data.props = extend({}, propsToPass); - // pass non-declared props as attrs - const attrs = data.attrs = data.attrs || {}; - for (const key in propsToPass) { - if (!component.props || !(key in component.props)) { - attrs[key] = propsToPass[key]; - delete propsToPass[key]; - } - } - } -} - -function resolveProps (route, config) { - switch (typeof config) { - case 'undefined': - return - case 'object': - return config - case 'function': - return config(route) - case 'boolean': - return config ? route.params : undefined - default: - { - warn( - false, - `props in "${route.path}" is a ${typeof config}, ` + - `expecting an object, function or boolean.` - ); - } - } -} - -/* */ - -function resolvePath ( - relative, - base, - append -) { - const firstChar = relative.charAt(0); - if (firstChar === '/') { - return relative - } - - if (firstChar === '?' || firstChar === '#') { - return base + relative - } - - const stack = base.split('/'); - - // remove trailing segment if: - // - not appending - // - appending to trailing slash (last segment is empty) - if (!append || !stack[stack.length - 1]) { - stack.pop(); - } - - // resolve relative path - const segments = relative.replace(/^\//, '').split('/'); - for (let i = 0; i < segments.length; i++) { - const segment = segments[i]; - if (segment === '..') { - stack.pop(); - } else if (segment !== '.') { - stack.push(segment); - } - } - - // ensure leading slash - if (stack[0] !== '') { - stack.unshift(''); - } - - return stack.join('/') -} - -function parsePath (path) { - let hash = ''; - let query = ''; - - const hashIndex = path.indexOf('#'); - if (hashIndex >= 0) { - hash = path.slice(hashIndex); - path = path.slice(0, hashIndex); - } - - const queryIndex = path.indexOf('?'); - if (queryIndex >= 0) { - query = path.slice(queryIndex + 1); - path = path.slice(0, queryIndex); - } - - return { - path, - query, - hash - } -} - -function cleanPath (path) { - return path.replace(/\/(?:\s*\/)+/g, '/') -} - -var isarray = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; - -/** - * Expose `pathToRegexp`. - */ -var pathToRegexp_1 = pathToRegexp; -var parse_1 = parse; -var compile_1 = compile; -var tokensToFunction_1 = tokensToFunction; -var tokensToRegExp_1 = tokensToRegExp; - -/** - * The main path matching regexp utility. - * - * @type {RegExp} - */ -var PATH_REGEXP = new RegExp([ - // Match escaped characters that would otherwise appear in future matches. - // This allows the user to escape special characters that won't transform. - '(\\\\.)', - // Match Express-style parameters and un-named parameters with a prefix - // and optional suffixes. Matches appear as: - // - // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] - // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] - // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] - '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' -].join('|'), 'g'); - -/** - * Parse a string for the raw tokens. - * - * @param {string} str - * @param {Object=} options - * @return {!Array} - */ -function parse (str, options) { - var tokens = []; - var key = 0; - var index = 0; - var path = ''; - var defaultDelimiter = options && options.delimiter || '/'; - var res; - - while ((res = PATH_REGEXP.exec(str)) != null) { - var m = res[0]; - var escaped = res[1]; - var offset = res.index; - path += str.slice(index, offset); - index = offset + m.length; - - // Ignore already escaped sequences. - if (escaped) { - path += escaped[1]; - continue - } - - var next = str[index]; - var prefix = res[2]; - var name = res[3]; - var capture = res[4]; - var group = res[5]; - var modifier = res[6]; - var asterisk = res[7]; - - // Push the current path onto the tokens. - if (path) { - tokens.push(path); - path = ''; - } - - var partial = prefix != null && next != null && next !== prefix; - var repeat = modifier === '+' || modifier === '*'; - var optional = modifier === '?' || modifier === '*'; - var delimiter = res[2] || defaultDelimiter; - var pattern = capture || group; - - tokens.push({ - name: name || key++, - prefix: prefix || '', - delimiter: delimiter, - optional: optional, - repeat: repeat, - partial: partial, - asterisk: !!asterisk, - pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') - }); - } - - // Match any characters still remaining. - if (index < str.length) { - path += str.substr(index); - } - - // If the path exists, push it onto the end. - if (path) { - tokens.push(path); - } - - return tokens -} - -/** - * Compile a string to a template function for the path. - * - * @param {string} str - * @param {Object=} options - * @return {!function(Object=, Object=)} - */ -function compile (str, options) { - return tokensToFunction(parse(str, options), options) -} - -/** - * Prettier encoding of URI path segments. - * - * @param {string} - * @return {string} - */ -function encodeURIComponentPretty (str) { - return encodeURI(str).replace(/[\/?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. - * - * @param {string} - * @return {string} - */ -function encodeAsterisk (str) { - return encodeURI(str).replace(/[?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Expose a method for transforming tokens into the path function. - */ -function tokensToFunction (tokens, options) { - // Compile all the tokens into regexps. - var matches = new Array(tokens.length); - - // Compile all the patterns before compilation. - for (var i = 0; i < tokens.length; i++) { - if (typeof tokens[i] === 'object') { - matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)); - } - } - - return function (obj, opts) { - var path = ''; - var data = obj || {}; - var options = opts || {}; - var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent; - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - - if (typeof token === 'string') { - path += token; - - continue - } - - var value = data[token.name]; - var segment; - - if (value == null) { - if (token.optional) { - // Prepend partial segment prefixes. - if (token.partial) { - path += token.prefix; - } - - continue - } else { - throw new TypeError('Expected "' + token.name + '" to be defined') - } - } - - if (isarray(value)) { - if (!token.repeat) { - throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') - } - - if (value.length === 0) { - if (token.optional) { - continue - } else { - throw new TypeError('Expected "' + token.name + '" to not be empty') - } - } - - for (var j = 0; j < value.length; j++) { - segment = encode(value[j]); - - if (!matches[i].test(segment)) { - throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') - } - - path += (j === 0 ? token.prefix : token.delimiter) + segment; - } - - continue - } - - segment = token.asterisk ? encodeAsterisk(value) : encode(value); - - if (!matches[i].test(segment)) { - throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') - } - - path += token.prefix + segment; - } - - return path - } -} - -/** - * Escape a regular expression string. - * - * @param {string} str - * @return {string} - */ -function escapeString (str) { - return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') -} - -/** - * Escape the capturing group by escaping special characters and meaning. - * - * @param {string} group - * @return {string} - */ -function escapeGroup (group) { - return group.replace(/([=!:$\/()])/g, '\\$1') -} - -/** - * Attach the keys as a property of the regexp. - * - * @param {!RegExp} re - * @param {Array} keys - * @return {!RegExp} - */ -function attachKeys (re, keys) { - re.keys = keys; - return re -} - -/** - * Get the flags for a regexp from the options. - * - * @param {Object} options - * @return {string} - */ -function flags (options) { - return options && options.sensitive ? '' : 'i' -} - -/** - * Pull out keys from a regexp. - * - * @param {!RegExp} path - * @param {!Array} keys - * @return {!RegExp} - */ -function regexpToRegexp (path, keys) { - // Use a negative lookahead to match only capturing groups. - var groups = path.source.match(/\((?!\?)/g); - - if (groups) { - for (var i = 0; i < groups.length; i++) { - keys.push({ - name: i, - prefix: null, - delimiter: null, - optional: false, - repeat: false, - partial: false, - asterisk: false, - pattern: null - }); - } - } - - return attachKeys(path, keys) -} - -/** - * Transform an array into a regexp. - * - * @param {!Array} path - * @param {Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function arrayToRegexp (path, keys, options) { - var parts = []; - - for (var i = 0; i < path.length; i++) { - parts.push(pathToRegexp(path[i], keys, options).source); - } - - var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)); - - return attachKeys(regexp, keys) -} - -/** - * Create a path regexp from string input. - * - * @param {string} path - * @param {!Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function stringToRegexp (path, keys, options) { - return tokensToRegExp(parse(path, options), keys, options) -} - -/** - * Expose a function for taking tokens and returning a RegExp. - * - * @param {!Array} tokens - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function tokensToRegExp (tokens, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - - var strict = options.strict; - var end = options.end !== false; - var route = ''; - - // Iterate over the tokens and create our regexp string. - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - - if (typeof token === 'string') { - route += escapeString(token); - } else { - var prefix = escapeString(token.prefix); - var capture = '(?:' + token.pattern + ')'; - - keys.push(token); - - if (token.repeat) { - capture += '(?:' + prefix + capture + ')*'; - } - - if (token.optional) { - if (!token.partial) { - capture = '(?:' + prefix + '(' + capture + '))?'; - } else { - capture = prefix + '(' + capture + ')?'; - } - } else { - capture = prefix + '(' + capture + ')'; - } - - route += capture; - } - } - - var delimiter = escapeString(options.delimiter || '/'); - var endsWithDelimiter = route.slice(-delimiter.length) === delimiter; - - // In non-strict mode we allow a slash at the end of match. If the path to - // match already ends with a slash, we remove it for consistency. The slash - // is valid at the end of a path match, not in the middle. This is important - // in non-ending mode, where "/test/" shouldn't match "/test//route". - if (!strict) { - route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'; - } - - if (end) { - route += '$'; - } else { - // In non-ending mode, we need the capturing groups to match as much as - // possible by using a positive lookahead to the end or next path segment. - route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'; - } - - return attachKeys(new RegExp('^' + route, flags(options)), keys) -} - -/** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. - * - * @param {(string|RegExp|Array)} path - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function pathToRegexp (path, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - - if (path instanceof RegExp) { - return regexpToRegexp(path, /** @type {!Array} */ (keys)) - } - - if (isarray(path)) { - return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) - } - - return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) -} -pathToRegexp_1.parse = parse_1; -pathToRegexp_1.compile = compile_1; -pathToRegexp_1.tokensToFunction = tokensToFunction_1; -pathToRegexp_1.tokensToRegExp = tokensToRegExp_1; - -/* */ - -// $flow-disable-line -const regexpCompileCache = Object.create(null); - -function fillParams ( - path, - params, - routeMsg -) { - params = params || {}; - try { - const filler = - regexpCompileCache[path] || - (regexpCompileCache[path] = pathToRegexp_1.compile(path)); - - // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }} - // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string - if (typeof params.pathMatch === 'string') params[0] = params.pathMatch; - - return filler(params, { pretty: true }) - } catch (e) { - { - // Fix #3072 no warn if `pathMatch` is string - warn(typeof params.pathMatch === 'string', `missing param for ${routeMsg}: ${e.message}`); - } - return '' - } finally { - // delete the 0 if it was added - delete params[0]; - } -} - -/* */ - -function normalizeLocation ( - raw, - current, - append, - router -) { - let next = typeof raw === 'string' ? { path: raw } : raw; - // named target - if (next._normalized) { - return next - } else if (next.name) { - next = extend({}, raw); - const params = next.params; - if (params && typeof params === 'object') { - next.params = extend({}, params); - } - return next - } - - // relative params - if (!next.path && next.params && current) { - next = extend({}, next); - next._normalized = true; - const params = extend(extend({}, current.params), next.params); - if (current.name) { - next.name = current.name; - next.params = params; - } else if (current.matched.length) { - const rawPath = current.matched[current.matched.length - 1].path; - next.path = fillParams(rawPath, params, `path ${current.path}`); - } else { - warn(false, `relative params navigation requires a current route.`); - } - return next - } - - const parsedPath = parsePath(next.path || ''); - const basePath = (current && current.path) || '/'; - const path = parsedPath.path - ? resolvePath(parsedPath.path, basePath, append || next.append) - : basePath; - - const query = resolveQuery( - parsedPath.query, - next.query, - router && router.options.parseQuery - ); - - let hash = next.hash || parsedPath.hash; - if (hash && hash.charAt(0) !== '#') { - hash = `#${hash}`; - } - - return { - _normalized: true, - path, - query, - hash - } -} - -/* */ - -// work around weird flow bug -const toTypes = [String, Object]; -const eventTypes = [String, Array]; - -const noop = () => {}; - -let warnedCustomSlot; -let warnedTagProp; -let warnedEventProp; - -var Link = { - name: 'RouterLink', - props: { - to: { - type: toTypes, - required: true - }, - tag: { - type: String, - default: 'a' - }, - custom: Boolean, - exact: Boolean, - exactPath: Boolean, - append: Boolean, - replace: Boolean, - activeClass: String, - exactActiveClass: String, - ariaCurrentValue: { - type: String, - default: 'page' - }, - event: { - type: eventTypes, - default: 'click' - } - }, - render (h) { - const router = this.$router; - const current = this.$route; - const { location, route, href } = router.resolve( - this.to, - current, - this.append - ); - - const classes = {}; - const globalActiveClass = router.options.linkActiveClass; - const globalExactActiveClass = router.options.linkExactActiveClass; - // Support global empty active class - const activeClassFallback = - globalActiveClass == null ? 'router-link-active' : globalActiveClass; - const exactActiveClassFallback = - globalExactActiveClass == null - ? 'router-link-exact-active' - : globalExactActiveClass; - const activeClass = - this.activeClass == null ? activeClassFallback : this.activeClass; - const exactActiveClass = - this.exactActiveClass == null - ? exactActiveClassFallback - : this.exactActiveClass; - - const compareTarget = route.redirectedFrom - ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router) - : route; - - classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath); - classes[activeClass] = this.exact || this.exactPath - ? classes[exactActiveClass] - : isIncludedRoute(current, compareTarget); - - const ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null; - - const handler = e => { - if (guardEvent(e)) { - if (this.replace) { - router.replace(location, noop); - } else { - router.push(location, noop); - } - } - }; - - const on = { click: guardEvent }; - if (Array.isArray(this.event)) { - this.event.forEach(e => { - on[e] = handler; - }); - } else { - on[this.event] = handler; - } - - const data = { class: classes }; - - const scopedSlot = - !this.$scopedSlots.$hasNormal && - this.$scopedSlots.default && - this.$scopedSlots.default({ - href, - route, - navigate: handler, - isActive: classes[activeClass], - isExactActive: classes[exactActiveClass] - }); - - if (scopedSlot) { - if (!this.custom) { - !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n'); - warnedCustomSlot = true; - } - if (scopedSlot.length === 1) { - return scopedSlot[0] - } else if (scopedSlot.length > 1 || !scopedSlot.length) { - { - warn( - false, - `<router-link> with to="${ - this.to - }" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.` - ); - } - return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot) - } - } - - { - if ('tag' in this.$options.propsData && !warnedTagProp) { - warn( - false, - `<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.` - ); - warnedTagProp = true; - } - if ('event' in this.$options.propsData && !warnedEventProp) { - warn( - false, - `<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.` - ); - warnedEventProp = true; - } - } - - if (this.tag === 'a') { - data.on = on; - data.attrs = { href, 'aria-current': ariaCurrentValue }; - } else { - // find the first <a> child and apply listener and href - const a = findAnchor(this.$slots.default); - if (a) { - // in case the <a> is a static node - a.isStatic = false; - const aData = (a.data = extend({}, a.data)); - aData.on = aData.on || {}; - // transform existing events in both objects into arrays so we can push later - for (const event in aData.on) { - const handler = aData.on[event]; - if (event in on) { - aData.on[event] = Array.isArray(handler) ? handler : [handler]; - } - } - // append new listeners for router-link - for (const event in on) { - if (event in aData.on) { - // on[event] is always a function - aData.on[event].push(on[event]); - } else { - aData.on[event] = handler; - } - } - - const aAttrs = (a.data.attrs = extend({}, a.data.attrs)); - aAttrs.href = href; - aAttrs['aria-current'] = ariaCurrentValue; - } else { - // doesn't have <a> child, apply listener to self - data.on = on; - } - } - - return h(this.tag, data, this.$slots.default) - } -}; - -function guardEvent (e) { - // don't redirect with control keys - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return - // don't redirect when preventDefault called - if (e.defaultPrevented) return - // don't redirect on right click - if (e.button !== undefined && e.button !== 0) return - // don't redirect if `target="_blank"` - if (e.currentTarget && e.currentTarget.getAttribute) { - const target = e.currentTarget.getAttribute('target'); - if (/\b_blank\b/i.test(target)) return - } - // this may be a Weex event which doesn't have this method - if (e.preventDefault) { - e.preventDefault(); - } - return true -} - -function findAnchor (children) { - if (children) { - let child; - for (let i = 0; i < children.length; i++) { - child = children[i]; - if (child.tag === 'a') { - return child - } - if (child.children && (child = findAnchor(child.children))) { - return child - } - } - } -} - -let _Vue; - -function install (Vue) { - if (install.installed && _Vue === Vue) return - install.installed = true; - - _Vue = Vue; - - const isDef = v => v !== undefined; - - const registerInstance = (vm, callVal) => { - let i = vm.$options._parentVnode; - if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) { - i(vm, callVal); - } - }; - - Vue.mixin({ - beforeCreate () { - if (isDef(this.$options.router)) { - this._routerRoot = this; - this._router = this.$options.router; - this._router.init(this); - Vue.util.defineReactive(this, '_route', this._router.history.current); - } else { - this._routerRoot = (this.$parent && this.$parent._routerRoot) || this; - } - registerInstance(this, this); - }, - destroyed () { - registerInstance(this); - } - }); - - Object.defineProperty(Vue.prototype, '$router', { - get () { return this._routerRoot._router } - }); - - Object.defineProperty(Vue.prototype, '$route', { - get () { return this._routerRoot._route } - }); - - Vue.component('RouterView', View); - Vue.component('RouterLink', Link); - - const strats = Vue.config.optionMergeStrategies; - // use the same hook merging strategy for route hooks - strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created; -} - -/* */ - -const inBrowser = typeof window !== 'undefined'; - -/* */ - -function createRouteMap ( - routes, - oldPathList, - oldPathMap, - oldNameMap, - parentRoute -) { - // the path list is used to control path matching priority - const pathList = oldPathList || []; - // $flow-disable-line - const pathMap = oldPathMap || Object.create(null); - // $flow-disable-line - const nameMap = oldNameMap || Object.create(null); - - routes.forEach(route => { - addRouteRecord(pathList, pathMap, nameMap, route, parentRoute); - }); - - // ensure wildcard routes are always at the end - for (let i = 0, l = pathList.length; i < l; i++) { - if (pathList[i] === '*') { - pathList.push(pathList.splice(i, 1)[0]); - l--; - i--; - } - } - - { - // warn if routes do not include leading slashes - const found = pathList - // check for missing leading slash - .filter(path => path && path.charAt(0) !== '*' && path.charAt(0) !== '/'); - - if (found.length > 0) { - const pathNames = found.map(path => `- ${path}`).join('\n'); - warn(false, `Non-nested routes must include a leading slash character. Fix the following routes: \n${pathNames}`); - } - } - - return { - pathList, - pathMap, - nameMap - } -} - -function addRouteRecord ( - pathList, - pathMap, - nameMap, - route, - parent, - matchAs -) { - const { path, name } = route; - { - assert(path != null, `"path" is required in a route configuration.`); - assert( - typeof route.component !== 'string', - `route config "component" for path: ${String( - path || name - )} cannot be a ` + `string id. Use an actual component instead.` - ); - - warn( - // eslint-disable-next-line no-control-regex - !/[^\u0000-\u007F]+/.test(path), - `Route with path "${path}" contains unencoded characters, make sure ` + - `your path is correctly encoded before passing it to the router. Use ` + - `encodeURI to encode static segments of your path.` - ); - } - - const pathToRegexpOptions = - route.pathToRegexpOptions || {}; - const normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict); - - if (typeof route.caseSensitive === 'boolean') { - pathToRegexpOptions.sensitive = route.caseSensitive; - } - - const record = { - path: normalizedPath, - regex: compileRouteRegex(normalizedPath, pathToRegexpOptions), - components: route.components || { default: route.component }, - alias: route.alias - ? typeof route.alias === 'string' - ? [route.alias] - : route.alias - : [], - instances: {}, - enteredCbs: {}, - name, - parent, - matchAs, - redirect: route.redirect, - beforeEnter: route.beforeEnter, - meta: route.meta || {}, - props: - route.props == null - ? {} - : route.components - ? route.props - : { default: route.props } - }; - - if (route.children) { - // Warn if route is named, does not redirect and has a default child route. - // If users navigate to this route by name, the default child will - // not be rendered (GH Issue #629) - { - if ( - route.name && - !route.redirect && - route.children.some(child => /^\/?$/.test(child.path)) - ) { - warn( - false, - `Named Route '${route.name}' has a default child route. ` + - `When navigating to this named route (:to="{name: '${ - route.name - }'}"), ` + - `the default child route will not be rendered. Remove the name from ` + - `this route and use the name of the default child route for named ` + - `links instead.` - ); - } - } - route.children.forEach(child => { - const childMatchAs = matchAs - ? cleanPath(`${matchAs}/${child.path}`) - : undefined; - addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs); - }); - } - - if (!pathMap[record.path]) { - pathList.push(record.path); - pathMap[record.path] = record; - } - - if (route.alias !== undefined) { - const aliases = Array.isArray(route.alias) ? route.alias : [route.alias]; - for (let i = 0; i < aliases.length; ++i) { - const alias = aliases[i]; - if (alias === path) { - warn( - false, - `Found an alias with the same value as the path: "${path}". You have to remove that alias. It will be ignored in development.` - ); - // skip in dev to make it work - continue - } - - const aliasRoute = { - path: alias, - children: route.children - }; - addRouteRecord( - pathList, - pathMap, - nameMap, - aliasRoute, - parent, - record.path || '/' // matchAs - ); - } - } - - if (name) { - if (!nameMap[name]) { - nameMap[name] = record; - } else if (!matchAs) { - warn( - false, - `Duplicate named routes definition: ` + - `{ name: "${name}", path: "${record.path}" }` - ); - } - } -} - -function compileRouteRegex ( - path, - pathToRegexpOptions -) { - const regex = pathToRegexp_1(path, [], pathToRegexpOptions); - { - const keys = Object.create(null); - regex.keys.forEach(key => { - warn( - !keys[key.name], - `Duplicate param keys in route with path: "${path}"` - ); - keys[key.name] = true; - }); - } - return regex -} - -function normalizePath ( - path, - parent, - strict -) { - if (!strict) path = path.replace(/\/$/, ''); - if (path[0] === '/') return path - if (parent == null) return path - return cleanPath(`${parent.path}/${path}`) -} - -/* */ - - - -function createMatcher ( - routes, - router -) { - const { pathList, pathMap, nameMap } = createRouteMap(routes); - - function addRoutes (routes) { - createRouteMap(routes, pathList, pathMap, nameMap); - } - - function addRoute (parentOrRoute, route) { - const parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined; - // $flow-disable-line - createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent); - - // add aliases of parent - if (parent && parent.alias.length) { - createRouteMap( - // $flow-disable-line route is defined if parent is - parent.alias.map(alias => ({ path: alias, children: [route] })), - pathList, - pathMap, - nameMap, - parent - ); - } - } - - function getRoutes () { - return pathList.map(path => pathMap[path]) - } - - function match ( - raw, - currentRoute, - redirectedFrom - ) { - const location = normalizeLocation(raw, currentRoute, false, router); - const { name } = location; - - if (name) { - const record = nameMap[name]; - { - warn(record, `Route with name '${name}' does not exist`); - } - if (!record) return _createRoute(null, location) - const paramNames = record.regex.keys - .filter(key => !key.optional) - .map(key => key.name); - - if (typeof location.params !== 'object') { - location.params = {}; - } - - if (currentRoute && typeof currentRoute.params === 'object') { - for (const key in currentRoute.params) { - if (!(key in location.params) && paramNames.indexOf(key) > -1) { - location.params[key] = currentRoute.params[key]; - } - } - } - - location.path = fillParams(record.path, location.params, `named route "${name}"`); - return _createRoute(record, location, redirectedFrom) - } else if (location.path) { - location.params = {}; - for (let i = 0; i < pathList.length; i++) { - const path = pathList[i]; - const record = pathMap[path]; - if (matchRoute(record.regex, location.path, location.params)) { - return _createRoute(record, location, redirectedFrom) - } - } - } - // no match - return _createRoute(null, location) - } - - function redirect ( - record, - location - ) { - const originalRedirect = record.redirect; - let redirect = typeof originalRedirect === 'function' - ? originalRedirect(createRoute(record, location, null, router)) - : originalRedirect; - - if (typeof redirect === 'string') { - redirect = { path: redirect }; - } - - if (!redirect || typeof redirect !== 'object') { - { - warn( - false, `invalid redirect option: ${JSON.stringify(redirect)}` - ); - } - return _createRoute(null, location) - } - - const re = redirect; - const { name, path } = re; - let { query, hash, params } = location; - query = re.hasOwnProperty('query') ? re.query : query; - hash = re.hasOwnProperty('hash') ? re.hash : hash; - params = re.hasOwnProperty('params') ? re.params : params; - - if (name) { - // resolved named direct - const targetRecord = nameMap[name]; - { - assert(targetRecord, `redirect failed: named route "${name}" not found.`); - } - return match({ - _normalized: true, - name, - query, - hash, - params - }, undefined, location) - } else if (path) { - // 1. resolve relative redirect - const rawPath = resolveRecordPath(path, record); - // 2. resolve params - const resolvedPath = fillParams(rawPath, params, `redirect route with path "${rawPath}"`); - // 3. rematch with existing query and hash - return match({ - _normalized: true, - path: resolvedPath, - query, - hash - }, undefined, location) - } else { - { - warn(false, `invalid redirect option: ${JSON.stringify(redirect)}`); - } - return _createRoute(null, location) - } - } - - function alias ( - record, - location, - matchAs - ) { - const aliasedPath = fillParams(matchAs, location.params, `aliased route with path "${matchAs}"`); - const aliasedMatch = match({ - _normalized: true, - path: aliasedPath - }); - if (aliasedMatch) { - const matched = aliasedMatch.matched; - const aliasedRecord = matched[matched.length - 1]; - location.params = aliasedMatch.params; - return _createRoute(aliasedRecord, location) - } - return _createRoute(null, location) - } - - function _createRoute ( - record, - location, - redirectedFrom - ) { - if (record && record.redirect) { - return redirect(record, redirectedFrom || location) - } - if (record && record.matchAs) { - return alias(record, location, record.matchAs) - } - return createRoute(record, location, redirectedFrom, router) - } - - return { - match, - addRoute, - getRoutes, - addRoutes - } -} - -function matchRoute ( - regex, - path, - params -) { - const m = path.match(regex); - - if (!m) { - return false - } else if (!params) { - return true - } - - for (let i = 1, len = m.length; i < len; ++i) { - const key = regex.keys[i - 1]; - if (key) { - // Fix #1994: using * with props: true generates a param named 0 - params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i]; - } - } - - return true -} - -function resolveRecordPath (path, record) { - return resolvePath(path, record.parent ? record.parent.path : '/', true) -} - -/* */ - -// use User Timing api (if present) for more accurate key precision -const Time = - inBrowser && window.performance && window.performance.now - ? window.performance - : Date; - -function genStateKey () { - return Time.now().toFixed(3) -} - -let _key = genStateKey(); - -function getStateKey () { - return _key -} - -function setStateKey (key) { - return (_key = key) -} - -/* */ - -const positionStore = Object.create(null); - -function setupScroll () { - // Prevent browser scroll behavior on History popstate - if ('scrollRestoration' in window.history) { - window.history.scrollRestoration = 'manual'; - } - // Fix for #1585 for Firefox - // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678 - // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with - // window.location.protocol + '//' + window.location.host - // location.host contains the port and location.hostname doesn't - const protocolAndPath = window.location.protocol + '//' + window.location.host; - const absolutePath = window.location.href.replace(protocolAndPath, ''); - // preserve existing history state as it could be overriden by the user - const stateCopy = extend({}, window.history.state); - stateCopy.key = getStateKey(); - window.history.replaceState(stateCopy, '', absolutePath); - window.addEventListener('popstate', handlePopState); - return () => { - window.removeEventListener('popstate', handlePopState); - } -} - -function handleScroll ( - router, - to, - from, - isPop -) { - if (!router.app) { - return - } - - const behavior = router.options.scrollBehavior; - if (!behavior) { - return - } - - { - assert(typeof behavior === 'function', `scrollBehavior must be a function`); - } - - // wait until re-render finishes before scrolling - router.app.$nextTick(() => { - const position = getScrollPosition(); - const shouldScroll = behavior.call( - router, - to, - from, - isPop ? position : null - ); - - if (!shouldScroll) { - return - } - - if (typeof shouldScroll.then === 'function') { - shouldScroll - .then(shouldScroll => { - scrollToPosition((shouldScroll), position); - }) - .catch(err => { - { - assert(false, err.toString()); - } - }); - } else { - scrollToPosition(shouldScroll, position); - } - }); -} - -function saveScrollPosition () { - const key = getStateKey(); - if (key) { - positionStore[key] = { - x: window.pageXOffset, - y: window.pageYOffset - }; - } -} - -function handlePopState (e) { - saveScrollPosition(); - if (e.state && e.state.key) { - setStateKey(e.state.key); - } -} - -function getScrollPosition () { - const key = getStateKey(); - if (key) { - return positionStore[key] - } -} - -function getElementPosition (el, offset) { - const docEl = document.documentElement; - const docRect = docEl.getBoundingClientRect(); - const elRect = el.getBoundingClientRect(); - return { - x: elRect.left - docRect.left - offset.x, - y: elRect.top - docRect.top - offset.y - } -} - -function isValidPosition (obj) { - return isNumber(obj.x) || isNumber(obj.y) -} - -function normalizePosition (obj) { - return { - x: isNumber(obj.x) ? obj.x : window.pageXOffset, - y: isNumber(obj.y) ? obj.y : window.pageYOffset - } -} - -function normalizeOffset (obj) { - return { - x: isNumber(obj.x) ? obj.x : 0, - y: isNumber(obj.y) ? obj.y : 0 - } -} - -function isNumber (v) { - return typeof v === 'number' -} - -const hashStartsWithNumberRE = /^#\d/; - -function scrollToPosition (shouldScroll, position) { - const isObject = typeof shouldScroll === 'object'; - if (isObject && typeof shouldScroll.selector === 'string') { - // getElementById would still fail if the selector contains a more complicated query like #main[data-attr] - // but at the same time, it doesn't make much sense to select an element with an id and an extra selector - const el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line - ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line - : document.querySelector(shouldScroll.selector); - - if (el) { - let offset = - shouldScroll.offset && typeof shouldScroll.offset === 'object' - ? shouldScroll.offset - : {}; - offset = normalizeOffset(offset); - position = getElementPosition(el, offset); - } else if (isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - } else if (isObject && isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - - if (position) { - // $flow-disable-line - if ('scrollBehavior' in document.documentElement.style) { - window.scrollTo({ - left: position.x, - top: position.y, - // $flow-disable-line - behavior: shouldScroll.behavior - }); - } else { - window.scrollTo(position.x, position.y); - } - } -} - -/* */ - -const supportsPushState = - inBrowser && - (function () { - const ua = window.navigator.userAgent; - - if ( - (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && - ua.indexOf('Mobile Safari') !== -1 && - ua.indexOf('Chrome') === -1 && - ua.indexOf('Windows Phone') === -1 - ) { - return false - } - - return window.history && typeof window.history.pushState === 'function' - })(); - -function pushState (url, replace) { - saveScrollPosition(); - // try...catch the pushState call to get around Safari - // DOM Exception 18 where it limits to 100 pushState calls - const history = window.history; - try { - if (replace) { - // preserve existing history state as it could be overriden by the user - const stateCopy = extend({}, history.state); - stateCopy.key = getStateKey(); - history.replaceState(stateCopy, '', url); - } else { - history.pushState({ key: setStateKey(genStateKey()) }, '', url); - } - } catch (e) { - window.location[replace ? 'replace' : 'assign'](url); - } -} - -function replaceState (url) { - pushState(url, true); -} - -// When changing thing, also edit router.d.ts -const NavigationFailureType = { - redirected: 2, - aborted: 4, - cancelled: 8, - duplicated: 16 -}; - -function createNavigationRedirectedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.redirected, - `Redirected when going from "${from.fullPath}" to "${stringifyRoute( - to - )}" via a navigation guard.` - ) -} - -function createNavigationDuplicatedError (from, to) { - const error = createRouterError( - from, - to, - NavigationFailureType.duplicated, - `Avoided redundant navigation to current location: "${from.fullPath}".` - ); - // backwards compatible with the first introduction of Errors - error.name = 'NavigationDuplicated'; - return error -} - -function createNavigationCancelledError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.cancelled, - `Navigation cancelled from "${from.fullPath}" to "${ - to.fullPath - }" with a new navigation.` - ) -} - -function createNavigationAbortedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.aborted, - `Navigation aborted from "${from.fullPath}" to "${ - to.fullPath - }" via a navigation guard.` - ) -} - -function createRouterError (from, to, type, message) { - const error = new Error(message); - error._isRouter = true; - error.from = from; - error.to = to; - error.type = type; - - return error -} - -const propertiesToLog = ['params', 'query', 'hash']; - -function stringifyRoute (to) { - if (typeof to === 'string') return to - if ('path' in to) return to.path - const location = {}; - propertiesToLog.forEach(key => { - if (key in to) location[key] = to[key]; - }); - return JSON.stringify(location, null, 2) -} - -function isError (err) { - return Object.prototype.toString.call(err).indexOf('Error') > -1 -} - -function isNavigationFailure (err, errorType) { - return ( - isError(err) && - err._isRouter && - (errorType == null || err.type === errorType) - ) -} - -/* */ - -function runQueue (queue, fn, cb) { - const step = index => { - if (index >= queue.length) { - cb(); - } else { - if (queue[index]) { - fn(queue[index], () => { - step(index + 1); - }); - } else { - step(index + 1); - } - } - }; - step(0); -} - -/* */ - -function resolveAsyncComponents (matched) { - return (to, from, next) => { - let hasAsync = false; - let pending = 0; - let error = null; - - flatMapComponents(matched, (def, _, match, key) => { - // if it's a function and doesn't have cid attached, - // assume it's an async component resolve function. - // we are not using Vue's default async resolving mechanism because - // we want to halt the navigation until the incoming component has been - // resolved. - if (typeof def === 'function' && def.cid === undefined) { - hasAsync = true; - pending++; - - const resolve = once(resolvedDef => { - if (isESModule(resolvedDef)) { - resolvedDef = resolvedDef.default; - } - // save resolved on async factory in case it's used elsewhere - def.resolved = typeof resolvedDef === 'function' - ? resolvedDef - : _Vue.extend(resolvedDef); - match.components[key] = resolvedDef; - pending--; - if (pending <= 0) { - next(); - } - }); - - const reject = once(reason => { - const msg = `Failed to resolve async component ${key}: ${reason}`; - warn(false, msg); - if (!error) { - error = isError(reason) - ? reason - : new Error(msg); - next(error); - } - }); - - let res; - try { - res = def(resolve, reject); - } catch (e) { - reject(e); - } - if (res) { - if (typeof res.then === 'function') { - res.then(resolve, reject); - } else { - // new syntax in Vue 2.3 - const comp = res.component; - if (comp && typeof comp.then === 'function') { - comp.then(resolve, reject); - } - } - } - } - }); - - if (!hasAsync) next(); - } -} - -function flatMapComponents ( - matched, - fn -) { - return flatten(matched.map(m => { - return Object.keys(m.components).map(key => fn( - m.components[key], - m.instances[key], - m, key - )) - })) -} - -function flatten (arr) { - return Array.prototype.concat.apply([], arr) -} - -const hasSymbol = - typeof Symbol === 'function' && - typeof Symbol.toStringTag === 'symbol'; - -function isESModule (obj) { - return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module') -} - -// in Webpack 2, require.ensure now also returns a Promise -// so the resolve/reject functions may get called an extra time -// if the user uses an arrow function shorthand that happens to -// return that Promise. -function once (fn) { - let called = false; - return function (...args) { - if (called) return - called = true; - return fn.apply(this, args) - } -} - -/* */ - -class History { - - - - - - - - - - - - - // implemented by sub-classes - - - - - - - - constructor (router, base) { - this.router = router; - this.base = normalizeBase(base); - // start with a route object that stands for "nowhere" - this.current = START; - this.pending = null; - this.ready = false; - this.readyCbs = []; - this.readyErrorCbs = []; - this.errorCbs = []; - this.listeners = []; - } - - listen (cb) { - this.cb = cb; - } - - onReady (cb, errorCb) { - if (this.ready) { - cb(); - } else { - this.readyCbs.push(cb); - if (errorCb) { - this.readyErrorCbs.push(errorCb); - } - } - } - - onError (errorCb) { - this.errorCbs.push(errorCb); - } - - transitionTo ( - location, - onComplete, - onAbort - ) { - let route; - // catch redirect option https://github.com/vuejs/vue-router/issues/3201 - try { - route = this.router.match(location, this.current); - } catch (e) { - this.errorCbs.forEach(cb => { - cb(e); - }); - // Exception should still be thrown - throw e - } - const prev = this.current; - this.confirmTransition( - route, - () => { - this.updateRoute(route); - onComplete && onComplete(route); - this.ensureURL(); - this.router.afterHooks.forEach(hook => { - hook && hook(route, prev); - }); - - // fire ready cbs once - if (!this.ready) { - this.ready = true; - this.readyCbs.forEach(cb => { - cb(route); - }); - } - }, - err => { - if (onAbort) { - onAbort(err); - } - if (err && !this.ready) { - // Initial redirection should not mark the history as ready yet - // because it's triggered by the redirection instead - // https://github.com/vuejs/vue-router/issues/3225 - // https://github.com/vuejs/vue-router/issues/3331 - if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) { - this.ready = true; - this.readyErrorCbs.forEach(cb => { - cb(err); - }); - } - } - } - ); - } - - confirmTransition (route, onComplete, onAbort) { - const current = this.current; - this.pending = route; - const abort = err => { - // changed after adding errors with - // https://github.com/vuejs/vue-router/pull/3047 before that change, - // redirect and aborted navigation would produce an err == null - if (!isNavigationFailure(err) && isError(err)) { - if (this.errorCbs.length) { - this.errorCbs.forEach(cb => { - cb(err); - }); - } else { - { - warn(false, 'uncaught error during route navigation:'); - } - console.error(err); - } - } - onAbort && onAbort(err); - }; - const lastRouteIndex = route.matched.length - 1; - const lastCurrentIndex = current.matched.length - 1; - if ( - isSameRoute(route, current) && - // in the case the route map has been dynamically appended to - lastRouteIndex === lastCurrentIndex && - route.matched[lastRouteIndex] === current.matched[lastCurrentIndex] - ) { - this.ensureURL(); - if (route.hash) { - handleScroll(this.router, current, route, false); - } - return abort(createNavigationDuplicatedError(current, route)) - } - - const { updated, deactivated, activated } = resolveQueue( - this.current.matched, - route.matched - ); - - const queue = [].concat( - // in-component leave guards - extractLeaveGuards(deactivated), - // global before hooks - this.router.beforeHooks, - // in-component update hooks - extractUpdateHooks(updated), - // in-config enter guards - activated.map(m => m.beforeEnter), - // async components - resolveAsyncComponents(activated) - ); - - const iterator = (hook, next) => { - if (this.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - try { - hook(route, current, (to) => { - if (to === false) { - // next(false) -> abort navigation, ensure current URL - this.ensureURL(true); - abort(createNavigationAbortedError(current, route)); - } else if (isError(to)) { - this.ensureURL(true); - abort(to); - } else if ( - typeof to === 'string' || - (typeof to === 'object' && - (typeof to.path === 'string' || typeof to.name === 'string')) - ) { - // next('/') or next({ path: '/' }) -> redirect - abort(createNavigationRedirectedError(current, route)); - if (typeof to === 'object' && to.replace) { - this.replace(to); - } else { - this.push(to); - } - } else { - // confirm transition and pass on the value - next(to); - } - }); - } catch (e) { - abort(e); - } - }; - - runQueue(queue, iterator, () => { - // wait until async components are resolved before - // extracting in-component enter guards - const enterGuards = extractEnterGuards(activated); - const queue = enterGuards.concat(this.router.resolveHooks); - runQueue(queue, iterator, () => { - if (this.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - this.pending = null; - onComplete(route); - if (this.router.app) { - this.router.app.$nextTick(() => { - handleRouteEntered(route); - }); - } - }); - }); - } - - updateRoute (route) { - this.current = route; - this.cb && this.cb(route); - } - - setupListeners () { - // Default implementation is empty - } - - teardown () { - // clean up event listeners - // https://github.com/vuejs/vue-router/issues/2341 - this.listeners.forEach(cleanupListener => { - cleanupListener(); - }); - this.listeners = []; - - // reset current history route - // https://github.com/vuejs/vue-router/issues/3294 - this.current = START; - this.pending = null; - } -} - -function normalizeBase (base) { - if (!base) { - if (inBrowser) { - // respect <base> tag - const baseEl = document.querySelector('base'); - base = (baseEl && baseEl.getAttribute('href')) || '/'; - // strip full URL origin - base = base.replace(/^https?:\/\/[^\/]+/, ''); - } else { - base = '/'; - } - } - // make sure there's the starting slash - if (base.charAt(0) !== '/') { - base = '/' + base; - } - // remove trailing slash - return base.replace(/\/$/, '') -} - -function resolveQueue ( - current, - next -) { - let i; - const max = Math.max(current.length, next.length); - for (i = 0; i < max; i++) { - if (current[i] !== next[i]) { - break - } - } - return { - updated: next.slice(0, i), - activated: next.slice(i), - deactivated: current.slice(i) - } -} - -function extractGuards ( - records, - name, - bind, - reverse -) { - const guards = flatMapComponents(records, (def, instance, match, key) => { - const guard = extractGuard(def, name); - if (guard) { - return Array.isArray(guard) - ? guard.map(guard => bind(guard, instance, match, key)) - : bind(guard, instance, match, key) - } - }); - return flatten(reverse ? guards.reverse() : guards) -} - -function extractGuard ( - def, - key -) { - if (typeof def !== 'function') { - // extend now so that global mixins are applied. - def = _Vue.extend(def); - } - return def.options[key] -} - -function extractLeaveGuards (deactivated) { - return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true) -} - -function extractUpdateHooks (updated) { - return extractGuards(updated, 'beforeRouteUpdate', bindGuard) -} - -function bindGuard (guard, instance) { - if (instance) { - return function boundRouteGuard () { - return guard.apply(instance, arguments) - } - } -} - -function extractEnterGuards ( - activated -) { - return extractGuards( - activated, - 'beforeRouteEnter', - (guard, _, match, key) => { - return bindEnterGuard(guard, match, key) - } - ) -} - -function bindEnterGuard ( - guard, - match, - key -) { - return function routeEnterGuard (to, from, next) { - return guard(to, from, cb => { - if (typeof cb === 'function') { - if (!match.enteredCbs[key]) { - match.enteredCbs[key] = []; - } - match.enteredCbs[key].push(cb); - } - next(cb); - }) - } -} - -/* */ - -class HTML5History extends History { - - - constructor (router, base) { - super(router, base); - - this._startLocation = getLocation(this.base); - } - - setupListeners () { - if (this.listeners.length > 0) { - return - } - - const router = this.router; - const expectScroll = router.options.scrollBehavior; - const supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll) { - this.listeners.push(setupScroll()); - } - - const handleRoutingEvent = () => { - const current = this.current; - - // Avoiding first `popstate` event dispatched in some browsers but first - // history route not updated since async guard at the same time. - const location = getLocation(this.base); - if (this.current === START && location === this._startLocation) { - return - } - - this.transitionTo(location, route => { - if (supportsScroll) { - handleScroll(router, route, current, true); - } - }); - }; - window.addEventListener('popstate', handleRoutingEvent); - this.listeners.push(() => { - window.removeEventListener('popstate', handleRoutingEvent); - }); - } - - go (n) { - window.history.go(n); - } - - push (location, onComplete, onAbort) { - const { current: fromRoute } = this; - this.transitionTo(location, route => { - pushState(cleanPath(this.base + route.fullPath)); - handleScroll(this.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - } - - replace (location, onComplete, onAbort) { - const { current: fromRoute } = this; - this.transitionTo(location, route => { - replaceState(cleanPath(this.base + route.fullPath)); - handleScroll(this.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - } - - ensureURL (push) { - if (getLocation(this.base) !== this.current.fullPath) { - const current = cleanPath(this.base + this.current.fullPath); - push ? pushState(current) : replaceState(current); - } - } - - getCurrentLocation () { - return getLocation(this.base) - } -} - -function getLocation (base) { - let path = window.location.pathname; - const pathLowerCase = path.toLowerCase(); - const baseLowerCase = base.toLowerCase(); - // base="/a" shouldn't turn path="/app" into "/a/pp" - // https://github.com/vuejs/vue-router/issues/3555 - // so we ensure the trailing slash in the base - if (base && ((pathLowerCase === baseLowerCase) || - (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) { - path = path.slice(base.length); - } - return (path || '/') + window.location.search + window.location.hash -} - -/* */ - -class HashHistory extends History { - constructor (router, base, fallback) { - super(router, base); - // check history fallback deeplinking - if (fallback && checkFallback(this.base)) { - return - } - ensureSlash(); - } - - // this is delayed until the app mounts - // to avoid the hashchange listener being fired too early - setupListeners () { - if (this.listeners.length > 0) { - return - } - - const router = this.router; - const expectScroll = router.options.scrollBehavior; - const supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll) { - this.listeners.push(setupScroll()); - } - - const handleRoutingEvent = () => { - const current = this.current; - if (!ensureSlash()) { - return - } - this.transitionTo(getHash(), route => { - if (supportsScroll) { - handleScroll(this.router, route, current, true); - } - if (!supportsPushState) { - replaceHash(route.fullPath); - } - }); - }; - const eventType = supportsPushState ? 'popstate' : 'hashchange'; - window.addEventListener( - eventType, - handleRoutingEvent - ); - this.listeners.push(() => { - window.removeEventListener(eventType, handleRoutingEvent); - }); - } - - push (location, onComplete, onAbort) { - const { current: fromRoute } = this; - this.transitionTo( - location, - route => { - pushHash(route.fullPath); - handleScroll(this.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - } - - replace (location, onComplete, onAbort) { - const { current: fromRoute } = this; - this.transitionTo( - location, - route => { - replaceHash(route.fullPath); - handleScroll(this.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - } - - go (n) { - window.history.go(n); - } - - ensureURL (push) { - const current = this.current.fullPath; - if (getHash() !== current) { - push ? pushHash(current) : replaceHash(current); - } - } - - getCurrentLocation () { - return getHash() - } -} - -function checkFallback (base) { - const location = getLocation(base); - if (!/^\/#/.test(location)) { - window.location.replace(cleanPath(base + '/#' + location)); - return true - } -} - -function ensureSlash () { - const path = getHash(); - if (path.charAt(0) === '/') { - return true - } - replaceHash('/' + path); - return false -} - -function getHash () { - // We can't use window.location.hash here because it's not - // consistent across browsers - Firefox will pre-decode it! - let href = window.location.href; - const index = href.indexOf('#'); - // empty path - if (index < 0) return '' - - href = href.slice(index + 1); - - return href -} - -function getUrl (path) { - const href = window.location.href; - const i = href.indexOf('#'); - const base = i >= 0 ? href.slice(0, i) : href; - return `${base}#${path}` -} - -function pushHash (path) { - if (supportsPushState) { - pushState(getUrl(path)); - } else { - window.location.hash = path; - } -} - -function replaceHash (path) { - if (supportsPushState) { - replaceState(getUrl(path)); - } else { - window.location.replace(getUrl(path)); - } -} - -/* */ - -class AbstractHistory extends History { - - - - constructor (router, base) { - super(router, base); - this.stack = []; - this.index = -1; - } - - push (location, onComplete, onAbort) { - this.transitionTo( - location, - route => { - this.stack = this.stack.slice(0, this.index + 1).concat(route); - this.index++; - onComplete && onComplete(route); - }, - onAbort - ); - } - - replace (location, onComplete, onAbort) { - this.transitionTo( - location, - route => { - this.stack = this.stack.slice(0, this.index).concat(route); - onComplete && onComplete(route); - }, - onAbort - ); - } - - go (n) { - const targetIndex = this.index + n; - if (targetIndex < 0 || targetIndex >= this.stack.length) { - return - } - const route = this.stack[targetIndex]; - this.confirmTransition( - route, - () => { - const prev = this.current; - this.index = targetIndex; - this.updateRoute(route); - this.router.afterHooks.forEach(hook => { - hook && hook(route, prev); - }); - }, - err => { - if (isNavigationFailure(err, NavigationFailureType.duplicated)) { - this.index = targetIndex; - } - } - ); - } - - getCurrentLocation () { - const current = this.stack[this.stack.length - 1]; - return current ? current.fullPath : '/' - } - - ensureURL () { - // noop - } -} - -/* */ - - - -class VueRouter { - - - - - - - - - - - - - - - - - - - - constructor (options = {}) { - { - warn(this instanceof VueRouter, `Router must be called with the new operator.`); - } - this.app = null; - this.apps = []; - this.options = options; - this.beforeHooks = []; - this.resolveHooks = []; - this.afterHooks = []; - this.matcher = createMatcher(options.routes || [], this); - - let mode = options.mode || 'hash'; - this.fallback = - mode === 'history' && !supportsPushState && options.fallback !== false; - if (this.fallback) { - mode = 'hash'; - } - if (!inBrowser) { - mode = 'abstract'; - } - this.mode = mode; - - switch (mode) { - case 'history': - this.history = new HTML5History(this, options.base); - break - case 'hash': - this.history = new HashHistory(this, options.base, this.fallback); - break - case 'abstract': - this.history = new AbstractHistory(this, options.base); - break - default: - { - assert(false, `invalid mode: ${mode}`); - } - } - } - - match (raw, current, redirectedFrom) { - return this.matcher.match(raw, current, redirectedFrom) - } - - get currentRoute () { - return this.history && this.history.current - } - - init (app /* Vue component instance */) { - assert( - install.installed, - `not installed. Make sure to call \`Vue.use(VueRouter)\` ` + - `before creating root instance.` - ); - - this.apps.push(app); - - // set up app destroyed handler - // https://github.com/vuejs/vue-router/issues/2639 - app.$once('hook:destroyed', () => { - // clean out app from this.apps array once destroyed - const index = this.apps.indexOf(app); - if (index > -1) this.apps.splice(index, 1); - // ensure we still have a main app or null if no apps - // we do not release the router so it can be reused - if (this.app === app) this.app = this.apps[0] || null; - - if (!this.app) this.history.teardown(); - }); - - // main app previously initialized - // return as we don't need to set up new history listener - if (this.app) { - return - } - - this.app = app; - - const history = this.history; - - if (history instanceof HTML5History || history instanceof HashHistory) { - const handleInitialScroll = routeOrError => { - const from = history.current; - const expectScroll = this.options.scrollBehavior; - const supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll && 'fullPath' in routeOrError) { - handleScroll(this, routeOrError, from, false); - } - }; - const setupListeners = routeOrError => { - history.setupListeners(); - handleInitialScroll(routeOrError); - }; - history.transitionTo( - history.getCurrentLocation(), - setupListeners, - setupListeners - ); - } - - history.listen(route => { - this.apps.forEach(app => { - app._route = route; - }); - }); - } - - beforeEach (fn) { - return registerHook(this.beforeHooks, fn) - } - - beforeResolve (fn) { - return registerHook(this.resolveHooks, fn) - } - - afterEach (fn) { - return registerHook(this.afterHooks, fn) - } - - onReady (cb, errorCb) { - this.history.onReady(cb, errorCb); - } - - onError (errorCb) { - this.history.onError(errorCb); - } - - push (location, onComplete, onAbort) { - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise((resolve, reject) => { - this.history.push(location, resolve, reject); - }) - } else { - this.history.push(location, onComplete, onAbort); - } - } - - replace (location, onComplete, onAbort) { - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise((resolve, reject) => { - this.history.replace(location, resolve, reject); - }) - } else { - this.history.replace(location, onComplete, onAbort); - } - } - - go (n) { - this.history.go(n); - } - - back () { - this.go(-1); - } - - forward () { - this.go(1); - } - - getMatchedComponents (to) { - const route = to - ? to.matched - ? to - : this.resolve(to).route - : this.currentRoute; - if (!route) { - return [] - } - return [].concat.apply( - [], - route.matched.map(m => { - return Object.keys(m.components).map(key => { - return m.components[key] - }) - }) - ) - } - - resolve ( - to, - current, - append - ) { - current = current || this.history.current; - const location = normalizeLocation(to, current, append, this); - const route = this.match(location, current); - const fullPath = route.redirectedFrom || route.fullPath; - const base = this.history.base; - const href = createHref(base, fullPath, this.mode); - return { - location, - route, - href, - // for backwards compat - normalizedTo: location, - resolved: route - } - } - - getRoutes () { - return this.matcher.getRoutes() - } - - addRoute (parentOrRoute, route) { - this.matcher.addRoute(parentOrRoute, route); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } - } - - addRoutes (routes) { - { - warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.'); - } - this.matcher.addRoutes(routes); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } - } -} - -function registerHook (list, fn) { - list.push(fn); - return () => { - const i = list.indexOf(fn); - if (i > -1) list.splice(i, 1); - } -} - -function createHref (base, fullPath, mode) { - var path = mode === 'hash' ? '#' + fullPath : fullPath; - return base ? cleanPath(base + '/' + path) : path -} - -// We cannot remove this as it would be a breaking change -VueRouter.install = install; -VueRouter.version = '3.6.5'; -VueRouter.isNavigationFailure = isNavigationFailure; -VueRouter.NavigationFailureType = NavigationFailureType; -VueRouter.START_LOCATION = START; - -if (inBrowser && window.Vue) { - window.Vue.use(VueRouter); -} - -const version = '3.6.5'; - -export { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter as default, isNavigationFailure, version }; diff --git a/dist/vue-router.esm.browser.min.js b/dist/vue-router.esm.browser.min.js deleted file mode 100644 index a5c9f16fc..000000000 --- a/dist/vue-router.esm.browser.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -function t(t,e){for(const n in e)t[n]=e[n];return t}const e=/[!'()*]/g,n=t=>"%"+t.charCodeAt(0).toString(16),r=/%2C/g,o=t=>encodeURIComponent(t).replace(e,n).replace(r,",");function i(t){try{return decodeURIComponent(t)}catch(t){}return t}const s=t=>null==t||"object"==typeof t?t:String(t);function a(t){const e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(t=>{const n=t.replace(/\+/g," ").split("="),r=i(n.shift()),o=n.length>0?i(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function c(t){const e=t?Object.keys(t).map(e=>{const n=t[e];if(void 0===n)return"";if(null===n)return o(e);if(Array.isArray(n)){const t=[];return n.forEach(n=>{void 0!==n&&(null===n?t.push(o(e)):t.push(o(e)+"="+o(n)))}),t.join("&")}return o(e)+"="+o(n)}).filter(t=>t.length>0).join("&"):null;return e?"?"+e:""}const u=/\/?$/;function h(t,e,n,r){const o=r&&r.options.stringifyQuery;let i=e.query||{};try{i=l(i)}catch(t){}const s={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:d(e,o),matched:t?f(t):[]};return n&&(s.redirectedFrom=d(n,o)),Object.freeze(s)}function l(t){if(Array.isArray(t))return t.map(l);if(t&&"object"==typeof t){const e={};for(const n in t)e[n]=l(t[n]);return e}return t}const p=h(null,{path:"/"});function f(t){const e=[];for(;t;)e.unshift(t),t=t.parent;return e}function d({path:t,query:e={},hash:n=""},r){return(t||"/")+(r||c)(e)+n}function y(t,e,n){return e===p?t===e:!!e&&(t.path&&e.path?t.path.replace(u,"")===e.path.replace(u,"")&&(n||t.hash===e.hash&&m(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&m(t.query,e.query)&&m(t.params,e.params))))}function m(t={},e={}){if(!t||!e)return t===e;const n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((n,o)=>{const i=t[n];if(r[o]!==n)return!1;const s=e[n];return null==i||null==s?i===s:"object"==typeof i&&"object"==typeof s?m(i,s):String(i)===String(s)})}function g(t){for(let e=0;e<t.matched.length;e++){const n=t.matched[e];for(const t in n.instances){const e=n.instances[t],r=n.enteredCbs[t];if(e&&r){delete n.enteredCbs[t];for(let t=0;t<r.length;t++)e._isBeingDestroyed||r[t](e)}}}}var w={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render(e,{props:n,children:r,parent:o,data:i}){i.routerView=!0;const s=o.$createElement,a=n.name,c=o.$route,u=o._routerViewCache||(o._routerViewCache={});let h=0,l=!1;for(;o&&o._routerRoot!==o;){const t=o.$vnode?o.$vnode.data:{};t.routerView&&h++,t.keepAlive&&o._directInactive&&o._inactive&&(l=!0),o=o.$parent}if(i.routerViewDepth=h,l){const t=u[a],e=t&&t.component;return e?(t.configProps&&b(e,i,t.route,t.configProps),s(e,i,r)):s()}const p=c.matched[h],f=p&&p.components[a];if(!p||!f)return u[a]=null,s();u[a]={component:f},i.registerRouteInstance=(t,e)=>{const n=p.instances[a];(e&&n!==t||!e&&n===t)&&(p.instances[a]=e)},(i.hook||(i.hook={})).prepatch=(t,e)=>{p.instances[a]=e.componentInstance},i.hook.init=t=>{t.data.keepAlive&&t.componentInstance&&t.componentInstance!==p.instances[a]&&(p.instances[a]=t.componentInstance),g(c)};const d=p.props&&p.props[a];return d&&(t(u[a],{route:c,configProps:d}),b(f,i,c,d)),s(f,i,r)}};function b(e,n,r,o){let i=n.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}(r,o);if(i){i=n.props=t({},i);const r=n.attrs=n.attrs||{};for(const t in i)e.props&&t in e.props||(r[t]=i[t],delete i[t])}}function v(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const o=e.split("/");n&&o[o.length-1]||o.pop();const i=t.replace(/^\//,"").split("/");for(let t=0;t<i.length;t++){const e=i[t];".."===e?o.pop():"."!==e&&o.push(e)}return""!==o[0]&&o.unshift(""),o.join("/")}function x(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var R=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},k=I,E=T,C=function(t,e){return j(T(t,e),e)},A=j,$=U,O=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function T(t,e){for(var n,r=[],o=0,i=0,s="",a=e&&e.delimiter||"/";null!=(n=O.exec(t));){var c=n[0],u=n[1],h=n.index;if(s+=t.slice(i,h),i=h+c.length,u)s+=u[1];else{var l=t[i],p=n[2],f=n[3],d=n[4],y=n[5],m=n[6],g=n[7];s&&(r.push(s),s="");var w=null!=p&&null!=l&&l!==p,b="+"===m||"*"===m,v="?"===m||"*"===m,x=n[2]||a,R=d||y;r.push({name:f||o++,prefix:p||"",delimiter:x,optional:v,repeat:b,partial:w,asterisk:!!g,pattern:R?P(R):g?".*":"[^"+L(x)+"]+?"})}}return i<t.length&&(s+=t.substr(i)),s&&r.push(s),r}function S(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function j(t,e){for(var n=new Array(t.length),r=0;r<t.length;r++)"object"==typeof t[r]&&(n[r]=new RegExp("^(?:"+t[r].pattern+")$",q(e)));return function(e,r){for(var o="",i=e||{},s=(r||{}).pretty?S:encodeURIComponent,a=0;a<t.length;a++){var c=t[a];if("string"!=typeof c){var u,h=i[c.name];if(null==h){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(R(h)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(h)+"`");if(0===h.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var l=0;l<h.length;l++){if(u=s(h[l]),!n[a].test(u))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(u)+"`");o+=(0===l?c.prefix:c.delimiter)+u}}else{if(u=c.asterisk?encodeURI(h).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):s(h),!n[a].test(u))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+u+'"');o+=c.prefix+u}}else o+=c}return o}}function L(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function P(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function _(t,e){return t.keys=e,t}function q(t){return t&&t.sensitive?"":"i"}function U(t,e,n){R(e)||(n=e||n,e=[]);for(var r=(n=n||{}).strict,o=!1!==n.end,i="",s=0;s<t.length;s++){var a=t[s];if("string"==typeof a)i+=L(a);else{var c=L(a.prefix),u="(?:"+a.pattern+")";e.push(a),a.repeat&&(u+="(?:"+c+u+")*"),i+=u=a.optional?a.partial?c+"("+u+")?":"(?:"+c+"("+u+"))?":c+"("+u+")"}}var h=L(n.delimiter||"/"),l=i.slice(-h.length)===h;return r||(i=(l?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=o?"$":r&&l?"":"(?="+h+"|$)",_(new RegExp("^"+i,q(n)),e)}function I(t,e,n){return R(e)||(n=e||n,e=[]),n=n||{},t instanceof RegExp?function(t,e){var n=t.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)e.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return _(t,e)}(t,e):R(t)?function(t,e,n){for(var r=[],o=0;o<t.length;o++)r.push(I(t[o],e,n).source);return _(new RegExp("(?:"+r.join("|")+")",q(n)),e)}(t,e,n):function(t,e,n){return U(T(t,n),e,n)}(t,e,n)}k.parse=E,k.compile=C,k.tokensToFunction=A,k.tokensToRegExp=$;const B=Object.create(null);function M(t,e,n){e=e||{};try{const n=B[t]||(B[t]=k.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),n(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function V(e,n,r,o){let i="string"==typeof e?{path:e}:e;if(i._normalized)return i;if(i.name){i=t({},e);const n=i.params;return n&&"object"==typeof n&&(i.params=t({},n)),i}if(!i.path&&i.params&&n){i=t({},i),i._normalized=!0;const e=t(t({},n.params),i.params);if(n.name)i.name=n.name,i.params=e;else if(n.matched.length){const t=n.matched[n.matched.length-1].path;i.path=M(t,e,n.path)}return i}const c=function(t){let e="",n="";const r=t.indexOf("#");r>=0&&(e=t.slice(r),t=t.slice(0,r));const o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(i.path||""),u=n&&n.path||"/",h=c.path?v(c.path,u,r||i.append):u,l=function(t,e={},n){const r=n||a;let o;try{o=r(t||"")}catch(t){o={}}for(const t in e){const n=e[t];o[t]=Array.isArray(n)?n.map(s):s(n)}return o}(c.query,i.query,o&&o.options.parseQuery);let p=i.hash||c.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:h,query:l,hash:p}}const N=()=>{};var H={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render(e){const n=this.$router,r=this.$route,{location:o,route:i,href:s}=n.resolve(this.to,r,this.append),a={},c=n.options.linkActiveClass,l=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,f=null==l?"router-link-exact-active":l,d=null==this.activeClass?p:this.activeClass,m=null==this.exactActiveClass?f:this.exactActiveClass,g=i.redirectedFrom?h(null,V(i.redirectedFrom),null,n):i;a[m]=y(r,g,this.exactPath),a[d]=this.exact||this.exactPath?a[m]:function(t,e){return 0===t.path.replace(u,"/").indexOf(e.path.replace(u,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(const n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,g);const w=a[m]?this.ariaCurrentValue:null,b=t=>{F(t)&&(this.replace?n.replace(o,N):n.push(o,N))},v={click:F};Array.isArray(this.event)?this.event.forEach(t=>{v[t]=b}):v[this.event]=b;const x={class:a},R=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:i,navigate:b,isActive:a[d],isExactActive:a[m]});if(R){if(1===R.length)return R[0];if(R.length>1||!R.length)return 0===R.length?e():e("span",{},R)}if("a"===this.tag)x.on=v,x.attrs={href:s,"aria-current":w};else{const e=function t(e){if(e){let n;for(let r=0;r<e.length;r++){if(n=e[r],"a"===n.tag)return n;if(n.children&&(n=t(n.children)))return n}}}(this.$slots.default);if(e){e.isStatic=!1;const n=e.data=t({},e.data);n.on=n.on||{};for(const t in n.on){const e=n.on[t];t in v&&(n.on[t]=Array.isArray(e)?e:[e])}for(const t in v)t in n.on?n.on[t].push(v[t]):n.on[t]=b;const r=e.data.attrs=t({},e.data.attrs);r.href=s,r["aria-current"]=w}else x.on=v}return e(this.tag,x,this.$slots.default)}};function F(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){const e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}let z;const D="undefined"!=typeof window;function K(t,e,n,r,o){const i=e||[],s=n||Object.create(null),a=r||Object.create(null);t.forEach(t=>{!function t(e,n,r,o,i,s){const{path:a,name:c}=o,u=o.pathToRegexpOptions||{},h=function(t,e,n){n||(t=t.replace(/\/$/,""));return"/"===t[0]||null==e?t:x(`${e.path}/${t}`)}(a,i,u.strict);"boolean"==typeof o.caseSensitive&&(u.sensitive=o.caseSensitive);const l={path:h,regex:J(h,u),components:o.components||{default:o.component},alias:o.alias?"string"==typeof o.alias?[o.alias]:o.alias:[],instances:{},enteredCbs:{},name:c,parent:i,matchAs:s,redirect:o.redirect,beforeEnter:o.beforeEnter,meta:o.meta||{},props:null==o.props?{}:o.components?o.props:{default:o.props}};o.children&&o.children.forEach(o=>{const i=s?x(`${s}/${o.path}`):void 0;t(e,n,r,o,l,i)});n[l.path]||(e.push(l.path),n[l.path]=l);if(void 0!==o.alias){const s=Array.isArray(o.alias)?o.alias:[o.alias];for(let a=0;a<s.length;++a){const c={path:s[a],children:o.children};t(e,n,r,c,i,l.path||"/")}}c&&(r[c]||(r[c]=l))}(i,s,a,t,o)});for(let t=0,e=i.length;t<e;t++)"*"===i[t]&&(i.push(i.splice(t,1)[0]),e--,t--);return{pathList:i,pathMap:s,nameMap:a}}function J(t,e){return k(t,[],e)}function Q(t,e){const{pathList:n,pathMap:r,nameMap:o}=K(t);function i(t,i,s){const c=V(t,i,!1,e),{name:u}=c;if(u){const t=o[u];if(!t)return a(null,c);const e=t.regex.keys.filter(t=>!t.optional).map(t=>t.name);if("object"!=typeof c.params&&(c.params={}),i&&"object"==typeof i.params)for(const t in i.params)!(t in c.params)&&e.indexOf(t)>-1&&(c.params[t]=i.params[t]);return c.path=M(t.path,c.params),a(t,c,s)}if(c.path){c.params={};for(let t=0;t<n.length;t++){const e=n[t],o=r[e];if(X(o.regex,c.path,c.params))return a(o,c,s)}}return a(null,c)}function s(t,n){const r=t.redirect;let s="function"==typeof r?r(h(t,n,null,e)):r;if("string"==typeof s&&(s={path:s}),!s||"object"!=typeof s)return a(null,n);const c=s,{name:u,path:l}=c;let{query:p,hash:f,params:d}=n;if(p=c.hasOwnProperty("query")?c.query:p,f=c.hasOwnProperty("hash")?c.hash:f,d=c.hasOwnProperty("params")?c.params:d,u)return o[u],i({_normalized:!0,name:u,query:p,hash:f,params:d},void 0,n);if(l){return i({_normalized:!0,path:M(function(t,e){return v(t,e.parent?e.parent.path:"/",!0)}(l,t),d),query:p,hash:f},void 0,n)}return a(null,n)}function a(t,n,r){return t&&t.redirect?s(t,r||n):t&&t.matchAs?function(t,e,n){const r=i({_normalized:!0,path:M(n,e.params)});if(r){const t=r.matched,n=t[t.length-1];return e.params=r.params,a(n,e)}return a(null,e)}(0,n,t.matchAs):h(t,n,r,e)}return{match:i,addRoute:function(t,e){const i="object"!=typeof t?o[t]:void 0;K([e||t],n,r,o,i),i&&i.alias.length&&K(i.alias.map(t=>({path:t,children:[e]})),n,r,o,i)},getRoutes:function(){return n.map(t=>r[t])},addRoutes:function(t){K(t,n,r,o)}}}function X(t,e,n){const r=e.match(t);if(!r)return!1;if(!n)return!0;for(let e=1,o=r.length;e<o;++e){const o=t.keys[e-1];o&&(n[o.name||"pathMatch"]="string"==typeof r[e]?i(r[e]):r[e])}return!0}const Y=D&&window.performance&&window.performance.now?window.performance:Date;function W(){return Y.now().toFixed(3)}let G=W();function Z(){return G}function tt(t){return G=t}const et=Object.create(null);function nt(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");const e=window.location.protocol+"//"+window.location.host,n=window.location.href.replace(e,""),r=t({},window.history.state);return r.key=Z(),window.history.replaceState(r,"",n),window.addEventListener("popstate",it),()=>{window.removeEventListener("popstate",it)}}function rt(t,e,n,r){if(!t.app)return;const o=t.options.scrollBehavior;o&&t.app.$nextTick(()=>{const i=function(){const t=Z();if(t)return et[t]}(),s=o.call(t,e,n,r?i:null);s&&("function"==typeof s.then?s.then(t=>{ht(t,i)}).catch(t=>{}):ht(s,i))})}function ot(){const t=Z();t&&(et[t]={x:window.pageXOffset,y:window.pageYOffset})}function it(t){ot(),t.state&&t.state.key&&tt(t.state.key)}function st(t){return ct(t.x)||ct(t.y)}function at(t){return{x:ct(t.x)?t.x:window.pageXOffset,y:ct(t.y)?t.y:window.pageYOffset}}function ct(t){return"number"==typeof t}const ut=/^#\d/;function ht(t,e){const n="object"==typeof t;if(n&&"string"==typeof t.selector){const n=ut.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(n){let o=t.offset&&"object"==typeof t.offset?t.offset:{};o={x:ct((r=o).x)?r.x:0,y:ct(r.y)?r.y:0},e=function(t,e){const n=document.documentElement.getBoundingClientRect(),r=t.getBoundingClientRect();return{x:r.left-n.left-e.x,y:r.top-n.top-e.y}}(n,o)}else st(t)&&(e=at(t))}else n&&st(t)&&(e=at(t));var r;e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}const lt=D&&function(){const t=window.navigator.userAgent;return(-1===t.indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&(window.history&&"function"==typeof window.history.pushState)}();function pt(e,n){ot();const r=window.history;try{if(n){const n=t({},r.state);n.key=Z(),r.replaceState(n,"",e)}else r.pushState({key:tt(W())},"",e)}catch(t){window.location[n?"replace":"assign"](e)}}function ft(t){pt(t,!0)}const dt={redirected:2,aborted:4,cancelled:8,duplicated:16};function yt(t,e){return gt(t,e,dt.redirected,`Redirected when going from "${t.fullPath}" to "${function(t){if("string"==typeof t)return t;if("path"in t)return t.path;const e={};return wt.forEach(n=>{n in t&&(e[n]=t[n])}),JSON.stringify(e,null,2)}(e)}" via a navigation guard.`)}function mt(t,e){return gt(t,e,dt.cancelled,`Navigation cancelled from "${t.fullPath}" to "${e.fullPath}" with a new navigation.`)}function gt(t,e,n,r){const o=new Error(r);return o._isRouter=!0,o.from=t,o.to=e,o.type=n,o}const wt=["params","query","hash"];function bt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function vt(t,e){return bt(t)&&t._isRouter&&(null==e||t.type===e)}function xt(t,e,n){const r=o=>{o>=t.length?n():t[o]?e(t[o],()=>{r(o+1)}):r(o+1)};r(0)}function Rt(t){return(e,n,r)=>{let o=!1,i=0,s=null;kt(t,(t,e,n,a)=>{if("function"==typeof t&&void 0===t.cid){o=!0,i++;const e=At(e=>{var o;((o=e).__esModule||Ct&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:z.extend(e),n.components[a]=e,i--,i<=0&&r()}),c=At(t=>{const e=`Failed to resolve async component ${a}: ${t}`;s||(s=bt(t)?t:new Error(e),r(s))});let u;try{u=t(e,c)}catch(t){c(t)}if(u)if("function"==typeof u.then)u.then(e,c);else{const t=u.component;t&&"function"==typeof t.then&&t.then(e,c)}}}),o||r()}}function kt(t,e){return Et(t.map(t=>Object.keys(t.components).map(n=>e(t.components[n],t.instances[n],t,n))))}function Et(t){return Array.prototype.concat.apply([],t)}const Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function At(t){let e=!1;return function(...n){if(!e)return e=!0,t.apply(this,n)}}class $t{constructor(t,e){this.router=t,this.base=function(t){if(!t)if(D){const e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=p,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]}listen(t){this.cb=t}onReady(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))}onError(t){this.errorCbs.push(t)}transitionTo(t,e,n){let r;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach(e=>{e(t)}),t}const o=this.current;this.confirmTransition(r,()=>{this.updateRoute(r),e&&e(r),this.ensureURL(),this.router.afterHooks.forEach(t=>{t&&t(r,o)}),this.ready||(this.ready=!0,this.readyCbs.forEach(t=>{t(r)}))},t=>{n&&n(t),t&&!this.ready&&(vt(t,dt.redirected)&&o===p||(this.ready=!0,this.readyErrorCbs.forEach(e=>{e(t)})))})}confirmTransition(t,e,n){const r=this.current;this.pending=t;const o=t=>{!vt(t)&&bt(t)&&(this.errorCbs.length?this.errorCbs.forEach(e=>{e(t)}):console.error(t)),n&&n(t)},i=t.matched.length-1,s=r.matched.length-1;if(y(t,r)&&i===s&&t.matched[i]===r.matched[s])return this.ensureURL(),t.hash&&rt(this.router,r,t,!1),o(function(t,e){const n=gt(t,e,dt.duplicated,`Avoided redundant navigation to current location: "${t.fullPath}".`);return n.name="NavigationDuplicated",n}(r,t));const{updated:a,deactivated:c,activated:u}=function(t,e){let n;const r=Math.max(t.length,e.length);for(n=0;n<r&&t[n]===e[n];n++);return{updated:e.slice(0,n),activated:e.slice(n),deactivated:t.slice(n)}}(this.current.matched,t.matched),h=[].concat(function(t){return Ot(t,"beforeRouteLeave",Tt,!0)}(c),this.router.beforeHooks,function(t){return Ot(t,"beforeRouteUpdate",Tt)}(a),u.map(t=>t.beforeEnter),Rt(u)),l=(e,n)=>{if(this.pending!==t)return o(mt(r,t));try{e(t,r,e=>{!1===e?(this.ensureURL(!0),o(function(t,e){return gt(t,e,dt.aborted,`Navigation aborted from "${t.fullPath}" to "${e.fullPath}" via a navigation guard.`)}(r,t))):bt(e)?(this.ensureURL(!0),o(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(o(yt(r,t)),"object"==typeof e&&e.replace?this.replace(e):this.push(e)):n(e)})}catch(t){o(t)}};xt(h,l,()=>{xt(function(t){return Ot(t,"beforeRouteEnter",(t,e,n,r)=>function(t,e,n){return function(r,o,i){return t(r,o,t=>{"function"==typeof t&&(e.enteredCbs[n]||(e.enteredCbs[n]=[]),e.enteredCbs[n].push(t)),i(t)})}}(t,n,r))}(u).concat(this.router.resolveHooks),l,()=>{if(this.pending!==t)return o(mt(r,t));this.pending=null,e(t),this.router.app&&this.router.app.$nextTick(()=>{g(t)})})})}updateRoute(t){this.current=t,this.cb&&this.cb(t)}setupListeners(){}teardown(){this.listeners.forEach(t=>{t()}),this.listeners=[],this.current=p,this.pending=null}}function Ot(t,e,n,r){const o=kt(t,(t,r,o,i)=>{const s=function(t,e){"function"!=typeof t&&(t=z.extend(t));return t.options[e]}(t,e);if(s)return Array.isArray(s)?s.map(t=>n(t,r,o,i)):n(s,r,o,i)});return Et(r?o.reverse():o)}function Tt(t,e){if(e)return function(){return t.apply(e,arguments)}}class St extends $t{constructor(t,e){super(t,e),this._startLocation=jt(this.base)}setupListeners(){if(this.listeners.length>0)return;const t=this.router,e=t.options.scrollBehavior,n=lt&&e;n&&this.listeners.push(nt());const r=()=>{const e=this.current,r=jt(this.base);this.current===p&&r===this._startLocation||this.transitionTo(r,r=>{n&&rt(t,r,e,!0)})};window.addEventListener("popstate",r),this.listeners.push(()=>{window.removeEventListener("popstate",r)})}go(t){window.history.go(t)}push(t,e,n){const{current:r}=this;this.transitionTo(t,t=>{pt(x(this.base+t.fullPath)),rt(this.router,t,r,!1),e&&e(t)},n)}replace(t,e,n){const{current:r}=this;this.transitionTo(t,t=>{ft(x(this.base+t.fullPath)),rt(this.router,t,r,!1),e&&e(t)},n)}ensureURL(t){if(jt(this.base)!==this.current.fullPath){const e=x(this.base+this.current.fullPath);t?pt(e):ft(e)}}getCurrentLocation(){return jt(this.base)}}function jt(t){let e=window.location.pathname;const n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(x(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}class Lt extends $t{constructor(t,e,n){super(t,e),n&&function(t){const e=jt(t);if(!/^\/#/.test(e))return window.location.replace(x(t+"/#"+e)),!0}(this.base)||Pt()}setupListeners(){if(this.listeners.length>0)return;const t=this.router.options.scrollBehavior,e=lt&&t;e&&this.listeners.push(nt());const n=()=>{const t=this.current;Pt()&&this.transitionTo(_t(),n=>{e&&rt(this.router,n,t,!0),lt||It(n.fullPath)})},r=lt?"popstate":"hashchange";window.addEventListener(r,n),this.listeners.push(()=>{window.removeEventListener(r,n)})}push(t,e,n){const{current:r}=this;this.transitionTo(t,t=>{Ut(t.fullPath),rt(this.router,t,r,!1),e&&e(t)},n)}replace(t,e,n){const{current:r}=this;this.transitionTo(t,t=>{It(t.fullPath),rt(this.router,t,r,!1),e&&e(t)},n)}go(t){window.history.go(t)}ensureURL(t){const e=this.current.fullPath;_t()!==e&&(t?Ut(e):It(e))}getCurrentLocation(){return _t()}}function Pt(){const t=_t();return"/"===t.charAt(0)||(It("/"+t),!1)}function _t(){let t=window.location.href;const e=t.indexOf("#");return e<0?"":(t=t.slice(e+1),t)}function qt(t){const e=window.location.href,n=e.indexOf("#");return`${n>=0?e.slice(0,n):e}#${t}`}function Ut(t){lt?pt(qt(t)):window.location.hash=t}function It(t){lt?ft(qt(t)):window.location.replace(qt(t))}class Bt extends $t{constructor(t,e){super(t,e),this.stack=[],this.index=-1}push(t,e,n){this.transitionTo(t,t=>{this.stack=this.stack.slice(0,this.index+1).concat(t),this.index++,e&&e(t)},n)}replace(t,e,n){this.transitionTo(t,t=>{this.stack=this.stack.slice(0,this.index).concat(t),e&&e(t)},n)}go(t){const e=this.index+t;if(e<0||e>=this.stack.length)return;const n=this.stack[e];this.confirmTransition(n,()=>{const t=this.current;this.index=e,this.updateRoute(n),this.router.afterHooks.forEach(e=>{e&&e(n,t)})},t=>{vt(t,dt.duplicated)&&(this.index=e)})}getCurrentLocation(){const t=this.stack[this.stack.length-1];return t?t.fullPath:"/"}ensureURL(){}}class Mt{constructor(t={}){this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Q(t.routes||[],this);let e=t.mode||"hash";switch(this.fallback="history"===e&&!lt&&!1!==t.fallback,this.fallback&&(e="hash"),D||(e="abstract"),this.mode=e,e){case"history":this.history=new St(this,t.base);break;case"hash":this.history=new Lt(this,t.base,this.fallback);break;case"abstract":this.history=new Bt(this,t.base)}}match(t,e,n){return this.matcher.match(t,e,n)}get currentRoute(){return this.history&&this.history.current}init(t){if(this.apps.push(t),t.$once("hook:destroyed",()=>{const e=this.apps.indexOf(t);e>-1&&this.apps.splice(e,1),this.app===t&&(this.app=this.apps[0]||null),this.app||this.history.teardown()}),this.app)return;this.app=t;const e=this.history;if(e instanceof St||e instanceof Lt){const t=t=>{const n=e.current,r=this.options.scrollBehavior;lt&&r&&"fullPath"in t&&rt(this,t,n,!1)},n=n=>{e.setupListeners(),t(n)};e.transitionTo(e.getCurrentLocation(),n,n)}e.listen(t=>{this.apps.forEach(e=>{e._route=t})})}beforeEach(t){return Vt(this.beforeHooks,t)}beforeResolve(t){return Vt(this.resolveHooks,t)}afterEach(t){return Vt(this.afterHooks,t)}onReady(t,e){this.history.onReady(t,e)}onError(t){this.history.onError(t)}push(t,e,n){if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((e,n)=>{this.history.push(t,e,n)});this.history.push(t,e,n)}replace(t,e,n){if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((e,n)=>{this.history.replace(t,e,n)});this.history.replace(t,e,n)}go(t){this.history.go(t)}back(){this.go(-1)}forward(){this.go(1)}getMatchedComponents(t){const e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(t=>Object.keys(t.components).map(e=>t.components[e]))):[]}resolve(t,e,n){const r=V(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?x(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}}getRoutes(){return this.matcher.getRoutes()}addRoute(t,e){this.matcher.addRoute(t,e),this.history.current!==p&&this.history.transitionTo(this.history.getCurrentLocation())}addRoutes(t){this.matcher.addRoutes(t),this.history.current!==p&&this.history.transitionTo(this.history.getCurrentLocation())}}function Vt(t,e){return t.push(e),()=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)}}Mt.install=function t(e){if(t.installed&&z===e)return;t.installed=!0,z=e;const n=t=>void 0!==t,r=(t,e)=>{let r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get(){return this._routerRoot._route}}),e.component("RouterView",w),e.component("RouterLink",H);const o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created},Mt.version="3.6.5",Mt.isNavigationFailure=vt,Mt.NavigationFailureType=dt,Mt.START_LOCATION=p,D&&window.Vue&&window.Vue.use(Mt);const Nt="3.6.5";export{dt as NavigationFailureType,H as RouterLink,w as RouterView,p as START_LOCATION,Mt as default,vt as isNavigationFailure,Nt as version}; \ No newline at end of file diff --git a/dist/vue-router.esm.js b/dist/vue-router.esm.js deleted file mode 100644 index 3f123edab..000000000 --- a/dist/vue-router.esm.js +++ /dev/null @@ -1,3159 +0,0 @@ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -/* */ - -function assert (condition, message) { - if (!condition) { - throw new Error(("[vue-router] " + message)) - } -} - -function warn (condition, message) { - if (!condition) { - typeof console !== 'undefined' && console.warn(("[vue-router] " + message)); - } -} - -function extend (a, b) { - for (var key in b) { - a[key] = b[key]; - } - return a -} - -/* */ - -var encodeReserveRE = /[!'()*]/g; -var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); }; -var commaRE = /%2C/g; - -// fixed encodeURIComponent which is more conformant to RFC3986: -// - escapes [!'()*] -// - preserve commas -var encode = function (str) { return encodeURIComponent(str) - .replace(encodeReserveRE, encodeReserveReplacer) - .replace(commaRE, ','); }; - -function decode (str) { - try { - return decodeURIComponent(str) - } catch (err) { - if (process.env.NODE_ENV !== 'production') { - warn(false, ("Error decoding \"" + str + "\". Leaving it intact.")); - } - } - return str -} - -function resolveQuery ( - query, - extraQuery, - _parseQuery -) { - if ( extraQuery === void 0 ) extraQuery = {}; - - var parse = _parseQuery || parseQuery; - var parsedQuery; - try { - parsedQuery = parse(query || ''); - } catch (e) { - process.env.NODE_ENV !== 'production' && warn(false, e.message); - parsedQuery = {}; - } - for (var key in extraQuery) { - var value = extraQuery[key]; - parsedQuery[key] = Array.isArray(value) - ? value.map(castQueryParamValue) - : castQueryParamValue(value); - } - return parsedQuery -} - -var castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); }; - -function parseQuery (query) { - var res = {}; - - query = query.trim().replace(/^(\?|#|&)/, ''); - - if (!query) { - return res - } - - query.split('&').forEach(function (param) { - var parts = param.replace(/\+/g, ' ').split('='); - var key = decode(parts.shift()); - var val = parts.length > 0 ? decode(parts.join('=')) : null; - - if (res[key] === undefined) { - res[key] = val; - } else if (Array.isArray(res[key])) { - res[key].push(val); - } else { - res[key] = [res[key], val]; - } - }); - - return res -} - -function stringifyQuery (obj) { - var res = obj - ? Object.keys(obj) - .map(function (key) { - var val = obj[key]; - - if (val === undefined) { - return '' - } - - if (val === null) { - return encode(key) - } - - if (Array.isArray(val)) { - var result = []; - val.forEach(function (val2) { - if (val2 === undefined) { - return - } - if (val2 === null) { - result.push(encode(key)); - } else { - result.push(encode(key) + '=' + encode(val2)); - } - }); - return result.join('&') - } - - return encode(key) + '=' + encode(val) - }) - .filter(function (x) { return x.length > 0; }) - .join('&') - : null; - return res ? ("?" + res) : '' -} - -/* */ - -var trailingSlashRE = /\/?$/; - -function createRoute ( - record, - location, - redirectedFrom, - router -) { - var stringifyQuery = router && router.options.stringifyQuery; - - var query = location.query || {}; - try { - query = clone(query); - } catch (e) {} - - var route = { - name: location.name || (record && record.name), - meta: (record && record.meta) || {}, - path: location.path || '/', - hash: location.hash || '', - query: query, - params: location.params || {}, - fullPath: getFullPath(location, stringifyQuery), - matched: record ? formatMatch(record) : [] - }; - if (redirectedFrom) { - route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery); - } - return Object.freeze(route) -} - -function clone (value) { - if (Array.isArray(value)) { - return value.map(clone) - } else if (value && typeof value === 'object') { - var res = {}; - for (var key in value) { - res[key] = clone(value[key]); - } - return res - } else { - return value - } -} - -// the starting route that represents the initial state -var START = createRoute(null, { - path: '/' -}); - -function formatMatch (record) { - var res = []; - while (record) { - res.unshift(record); - record = record.parent; - } - return res -} - -function getFullPath ( - ref, - _stringifyQuery -) { - var path = ref.path; - var query = ref.query; if ( query === void 0 ) query = {}; - var hash = ref.hash; if ( hash === void 0 ) hash = ''; - - var stringify = _stringifyQuery || stringifyQuery; - return (path || '/') + stringify(query) + hash -} - -function isSameRoute (a, b, onlyPath) { - if (b === START) { - return a === b - } else if (!b) { - return false - } else if (a.path && b.path) { - return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath || - a.hash === b.hash && - isObjectEqual(a.query, b.query)) - } else if (a.name && b.name) { - return ( - a.name === b.name && - (onlyPath || ( - a.hash === b.hash && - isObjectEqual(a.query, b.query) && - isObjectEqual(a.params, b.params)) - ) - ) - } else { - return false - } -} - -function isObjectEqual (a, b) { - if ( a === void 0 ) a = {}; - if ( b === void 0 ) b = {}; - - // handle null value #1566 - if (!a || !b) { return a === b } - var aKeys = Object.keys(a).sort(); - var bKeys = Object.keys(b).sort(); - if (aKeys.length !== bKeys.length) { - return false - } - return aKeys.every(function (key, i) { - var aVal = a[key]; - var bKey = bKeys[i]; - if (bKey !== key) { return false } - var bVal = b[key]; - // query values can be null and undefined - if (aVal == null || bVal == null) { return aVal === bVal } - // check nested equality - if (typeof aVal === 'object' && typeof bVal === 'object') { - return isObjectEqual(aVal, bVal) - } - return String(aVal) === String(bVal) - }) -} - -function isIncludedRoute (current, target) { - return ( - current.path.replace(trailingSlashRE, '/').indexOf( - target.path.replace(trailingSlashRE, '/') - ) === 0 && - (!target.hash || current.hash === target.hash) && - queryIncludes(current.query, target.query) - ) -} - -function queryIncludes (current, target) { - for (var key in target) { - if (!(key in current)) { - return false - } - } - return true -} - -function handleRouteEntered (route) { - for (var i = 0; i < route.matched.length; i++) { - var record = route.matched[i]; - for (var name in record.instances) { - var instance = record.instances[name]; - var cbs = record.enteredCbs[name]; - if (!instance || !cbs) { continue } - delete record.enteredCbs[name]; - for (var i$1 = 0; i$1 < cbs.length; i$1++) { - if (!instance._isBeingDestroyed) { cbs[i$1](instance); } - } - } - } -} - -var View = { - name: 'RouterView', - functional: true, - props: { - name: { - type: String, - default: 'default' - } - }, - render: function render (_, ref) { - var props = ref.props; - var children = ref.children; - var parent = ref.parent; - var data = ref.data; - - // used by devtools to display a router-view badge - data.routerView = true; - - // directly use parent context's createElement() function - // so that components rendered by router-view can resolve named slots - var h = parent.$createElement; - var name = props.name; - var route = parent.$route; - var cache = parent._routerViewCache || (parent._routerViewCache = {}); - - // determine current view depth, also check to see if the tree - // has been toggled inactive but kept-alive. - var depth = 0; - var inactive = false; - while (parent && parent._routerRoot !== parent) { - var vnodeData = parent.$vnode ? parent.$vnode.data : {}; - if (vnodeData.routerView) { - depth++; - } - if (vnodeData.keepAlive && parent._directInactive && parent._inactive) { - inactive = true; - } - parent = parent.$parent; - } - data.routerViewDepth = depth; - - // render previous view if the tree is inactive and kept-alive - if (inactive) { - var cachedData = cache[name]; - var cachedComponent = cachedData && cachedData.component; - if (cachedComponent) { - // #2301 - // pass props - if (cachedData.configProps) { - fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps); - } - return h(cachedComponent, data, children) - } else { - // render previous empty view - return h() - } - } - - var matched = route.matched[depth]; - var component = matched && matched.components[name]; - - // render empty node if no matched route or no config component - if (!matched || !component) { - cache[name] = null; - return h() - } - - // cache component - cache[name] = { component: component }; - - // attach instance registration hook - // this will be called in the instance's injected lifecycle hooks - data.registerRouteInstance = function (vm, val) { - // val could be undefined for unregistration - var current = matched.instances[name]; - if ( - (val && current !== vm) || - (!val && current === vm) - ) { - matched.instances[name] = val; - } - } - - // also register instance in prepatch hook - // in case the same component instance is reused across different routes - ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) { - matched.instances[name] = vnode.componentInstance; - }; - - // register instance in init hook - // in case kept-alive component be actived when routes changed - data.hook.init = function (vnode) { - if (vnode.data.keepAlive && - vnode.componentInstance && - vnode.componentInstance !== matched.instances[name] - ) { - matched.instances[name] = vnode.componentInstance; - } - - // if the route transition has already been confirmed then we weren't - // able to call the cbs during confirmation as the component was not - // registered yet, so we call it here. - handleRouteEntered(route); - }; - - var configProps = matched.props && matched.props[name]; - // save route and configProps in cache - if (configProps) { - extend(cache[name], { - route: route, - configProps: configProps - }); - fillPropsinData(component, data, route, configProps); - } - - return h(component, data, children) - } -}; - -function fillPropsinData (component, data, route, configProps) { - // resolve props - var propsToPass = data.props = resolveProps(route, configProps); - if (propsToPass) { - // clone to prevent mutation - propsToPass = data.props = extend({}, propsToPass); - // pass non-declared props as attrs - var attrs = data.attrs = data.attrs || {}; - for (var key in propsToPass) { - if (!component.props || !(key in component.props)) { - attrs[key] = propsToPass[key]; - delete propsToPass[key]; - } - } - } -} - -function resolveProps (route, config) { - switch (typeof config) { - case 'undefined': - return - case 'object': - return config - case 'function': - return config(route) - case 'boolean': - return config ? route.params : undefined - default: - if (process.env.NODE_ENV !== 'production') { - warn( - false, - "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " + - "expecting an object, function or boolean." - ); - } - } -} - -/* */ - -function resolvePath ( - relative, - base, - append -) { - var firstChar = relative.charAt(0); - if (firstChar === '/') { - return relative - } - - if (firstChar === '?' || firstChar === '#') { - return base + relative - } - - var stack = base.split('/'); - - // remove trailing segment if: - // - not appending - // - appending to trailing slash (last segment is empty) - if (!append || !stack[stack.length - 1]) { - stack.pop(); - } - - // resolve relative path - var segments = relative.replace(/^\//, '').split('/'); - for (var i = 0; i < segments.length; i++) { - var segment = segments[i]; - if (segment === '..') { - stack.pop(); - } else if (segment !== '.') { - stack.push(segment); - } - } - - // ensure leading slash - if (stack[0] !== '') { - stack.unshift(''); - } - - return stack.join('/') -} - -function parsePath (path) { - var hash = ''; - var query = ''; - - var hashIndex = path.indexOf('#'); - if (hashIndex >= 0) { - hash = path.slice(hashIndex); - path = path.slice(0, hashIndex); - } - - var queryIndex = path.indexOf('?'); - if (queryIndex >= 0) { - query = path.slice(queryIndex + 1); - path = path.slice(0, queryIndex); - } - - return { - path: path, - query: query, - hash: hash - } -} - -function cleanPath (path) { - return path.replace(/\/(?:\s*\/)+/g, '/') -} - -var isarray = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; - -/** - * Expose `pathToRegexp`. - */ -var pathToRegexp_1 = pathToRegexp; -var parse_1 = parse; -var compile_1 = compile; -var tokensToFunction_1 = tokensToFunction; -var tokensToRegExp_1 = tokensToRegExp; - -/** - * The main path matching regexp utility. - * - * @type {RegExp} - */ -var PATH_REGEXP = new RegExp([ - // Match escaped characters that would otherwise appear in future matches. - // This allows the user to escape special characters that won't transform. - '(\\\\.)', - // Match Express-style parameters and un-named parameters with a prefix - // and optional suffixes. Matches appear as: - // - // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] - // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] - // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] - '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' -].join('|'), 'g'); - -/** - * Parse a string for the raw tokens. - * - * @param {string} str - * @param {Object=} options - * @return {!Array} - */ -function parse (str, options) { - var tokens = []; - var key = 0; - var index = 0; - var path = ''; - var defaultDelimiter = options && options.delimiter || '/'; - var res; - - while ((res = PATH_REGEXP.exec(str)) != null) { - var m = res[0]; - var escaped = res[1]; - var offset = res.index; - path += str.slice(index, offset); - index = offset + m.length; - - // Ignore already escaped sequences. - if (escaped) { - path += escaped[1]; - continue - } - - var next = str[index]; - var prefix = res[2]; - var name = res[3]; - var capture = res[4]; - var group = res[5]; - var modifier = res[6]; - var asterisk = res[7]; - - // Push the current path onto the tokens. - if (path) { - tokens.push(path); - path = ''; - } - - var partial = prefix != null && next != null && next !== prefix; - var repeat = modifier === '+' || modifier === '*'; - var optional = modifier === '?' || modifier === '*'; - var delimiter = res[2] || defaultDelimiter; - var pattern = capture || group; - - tokens.push({ - name: name || key++, - prefix: prefix || '', - delimiter: delimiter, - optional: optional, - repeat: repeat, - partial: partial, - asterisk: !!asterisk, - pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') - }); - } - - // Match any characters still remaining. - if (index < str.length) { - path += str.substr(index); - } - - // If the path exists, push it onto the end. - if (path) { - tokens.push(path); - } - - return tokens -} - -/** - * Compile a string to a template function for the path. - * - * @param {string} str - * @param {Object=} options - * @return {!function(Object=, Object=)} - */ -function compile (str, options) { - return tokensToFunction(parse(str, options), options) -} - -/** - * Prettier encoding of URI path segments. - * - * @param {string} - * @return {string} - */ -function encodeURIComponentPretty (str) { - return encodeURI(str).replace(/[\/?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. - * - * @param {string} - * @return {string} - */ -function encodeAsterisk (str) { - return encodeURI(str).replace(/[?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Expose a method for transforming tokens into the path function. - */ -function tokensToFunction (tokens, options) { - // Compile all the tokens into regexps. - var matches = new Array(tokens.length); - - // Compile all the patterns before compilation. - for (var i = 0; i < tokens.length; i++) { - if (typeof tokens[i] === 'object') { - matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)); - } - } - - return function (obj, opts) { - var path = ''; - var data = obj || {}; - var options = opts || {}; - var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent; - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - - if (typeof token === 'string') { - path += token; - - continue - } - - var value = data[token.name]; - var segment; - - if (value == null) { - if (token.optional) { - // Prepend partial segment prefixes. - if (token.partial) { - path += token.prefix; - } - - continue - } else { - throw new TypeError('Expected "' + token.name + '" to be defined') - } - } - - if (isarray(value)) { - if (!token.repeat) { - throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') - } - - if (value.length === 0) { - if (token.optional) { - continue - } else { - throw new TypeError('Expected "' + token.name + '" to not be empty') - } - } - - for (var j = 0; j < value.length; j++) { - segment = encode(value[j]); - - if (!matches[i].test(segment)) { - throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') - } - - path += (j === 0 ? token.prefix : token.delimiter) + segment; - } - - continue - } - - segment = token.asterisk ? encodeAsterisk(value) : encode(value); - - if (!matches[i].test(segment)) { - throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') - } - - path += token.prefix + segment; - } - - return path - } -} - -/** - * Escape a regular expression string. - * - * @param {string} str - * @return {string} - */ -function escapeString (str) { - return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') -} - -/** - * Escape the capturing group by escaping special characters and meaning. - * - * @param {string} group - * @return {string} - */ -function escapeGroup (group) { - return group.replace(/([=!:$\/()])/g, '\\$1') -} - -/** - * Attach the keys as a property of the regexp. - * - * @param {!RegExp} re - * @param {Array} keys - * @return {!RegExp} - */ -function attachKeys (re, keys) { - re.keys = keys; - return re -} - -/** - * Get the flags for a regexp from the options. - * - * @param {Object} options - * @return {string} - */ -function flags (options) { - return options && options.sensitive ? '' : 'i' -} - -/** - * Pull out keys from a regexp. - * - * @param {!RegExp} path - * @param {!Array} keys - * @return {!RegExp} - */ -function regexpToRegexp (path, keys) { - // Use a negative lookahead to match only capturing groups. - var groups = path.source.match(/\((?!\?)/g); - - if (groups) { - for (var i = 0; i < groups.length; i++) { - keys.push({ - name: i, - prefix: null, - delimiter: null, - optional: false, - repeat: false, - partial: false, - asterisk: false, - pattern: null - }); - } - } - - return attachKeys(path, keys) -} - -/** - * Transform an array into a regexp. - * - * @param {!Array} path - * @param {Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function arrayToRegexp (path, keys, options) { - var parts = []; - - for (var i = 0; i < path.length; i++) { - parts.push(pathToRegexp(path[i], keys, options).source); - } - - var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)); - - return attachKeys(regexp, keys) -} - -/** - * Create a path regexp from string input. - * - * @param {string} path - * @param {!Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function stringToRegexp (path, keys, options) { - return tokensToRegExp(parse(path, options), keys, options) -} - -/** - * Expose a function for taking tokens and returning a RegExp. - * - * @param {!Array} tokens - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function tokensToRegExp (tokens, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - - var strict = options.strict; - var end = options.end !== false; - var route = ''; - - // Iterate over the tokens and create our regexp string. - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - - if (typeof token === 'string') { - route += escapeString(token); - } else { - var prefix = escapeString(token.prefix); - var capture = '(?:' + token.pattern + ')'; - - keys.push(token); - - if (token.repeat) { - capture += '(?:' + prefix + capture + ')*'; - } - - if (token.optional) { - if (!token.partial) { - capture = '(?:' + prefix + '(' + capture + '))?'; - } else { - capture = prefix + '(' + capture + ')?'; - } - } else { - capture = prefix + '(' + capture + ')'; - } - - route += capture; - } - } - - var delimiter = escapeString(options.delimiter || '/'); - var endsWithDelimiter = route.slice(-delimiter.length) === delimiter; - - // In non-strict mode we allow a slash at the end of match. If the path to - // match already ends with a slash, we remove it for consistency. The slash - // is valid at the end of a path match, not in the middle. This is important - // in non-ending mode, where "/test/" shouldn't match "/test//route". - if (!strict) { - route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'; - } - - if (end) { - route += '$'; - } else { - // In non-ending mode, we need the capturing groups to match as much as - // possible by using a positive lookahead to the end or next path segment. - route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'; - } - - return attachKeys(new RegExp('^' + route, flags(options)), keys) -} - -/** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. - * - * @param {(string|RegExp|Array)} path - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function pathToRegexp (path, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - - if (path instanceof RegExp) { - return regexpToRegexp(path, /** @type {!Array} */ (keys)) - } - - if (isarray(path)) { - return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) - } - - return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) -} -pathToRegexp_1.parse = parse_1; -pathToRegexp_1.compile = compile_1; -pathToRegexp_1.tokensToFunction = tokensToFunction_1; -pathToRegexp_1.tokensToRegExp = tokensToRegExp_1; - -/* */ - -// $flow-disable-line -var regexpCompileCache = Object.create(null); - -function fillParams ( - path, - params, - routeMsg -) { - params = params || {}; - try { - var filler = - regexpCompileCache[path] || - (regexpCompileCache[path] = pathToRegexp_1.compile(path)); - - // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }} - // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string - if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; } - - return filler(params, { pretty: true }) - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - // Fix #3072 no warn if `pathMatch` is string - warn(typeof params.pathMatch === 'string', ("missing param for " + routeMsg + ": " + (e.message))); - } - return '' - } finally { - // delete the 0 if it was added - delete params[0]; - } -} - -/* */ - -function normalizeLocation ( - raw, - current, - append, - router -) { - var next = typeof raw === 'string' ? { path: raw } : raw; - // named target - if (next._normalized) { - return next - } else if (next.name) { - next = extend({}, raw); - var params = next.params; - if (params && typeof params === 'object') { - next.params = extend({}, params); - } - return next - } - - // relative params - if (!next.path && next.params && current) { - next = extend({}, next); - next._normalized = true; - var params$1 = extend(extend({}, current.params), next.params); - if (current.name) { - next.name = current.name; - next.params = params$1; - } else if (current.matched.length) { - var rawPath = current.matched[current.matched.length - 1].path; - next.path = fillParams(rawPath, params$1, ("path " + (current.path))); - } else if (process.env.NODE_ENV !== 'production') { - warn(false, "relative params navigation requires a current route."); - } - return next - } - - var parsedPath = parsePath(next.path || ''); - var basePath = (current && current.path) || '/'; - var path = parsedPath.path - ? resolvePath(parsedPath.path, basePath, append || next.append) - : basePath; - - var query = resolveQuery( - parsedPath.query, - next.query, - router && router.options.parseQuery - ); - - var hash = next.hash || parsedPath.hash; - if (hash && hash.charAt(0) !== '#') { - hash = "#" + hash; - } - - return { - _normalized: true, - path: path, - query: query, - hash: hash - } -} - -/* */ - -// work around weird flow bug -var toTypes = [String, Object]; -var eventTypes = [String, Array]; - -var noop = function () {}; - -var warnedCustomSlot; -var warnedTagProp; -var warnedEventProp; - -var Link = { - name: 'RouterLink', - props: { - to: { - type: toTypes, - required: true - }, - tag: { - type: String, - default: 'a' - }, - custom: Boolean, - exact: Boolean, - exactPath: Boolean, - append: Boolean, - replace: Boolean, - activeClass: String, - exactActiveClass: String, - ariaCurrentValue: { - type: String, - default: 'page' - }, - event: { - type: eventTypes, - default: 'click' - } - }, - render: function render (h) { - var this$1$1 = this; - - var router = this.$router; - var current = this.$route; - var ref = router.resolve( - this.to, - current, - this.append - ); - var location = ref.location; - var route = ref.route; - var href = ref.href; - - var classes = {}; - var globalActiveClass = router.options.linkActiveClass; - var globalExactActiveClass = router.options.linkExactActiveClass; - // Support global empty active class - var activeClassFallback = - globalActiveClass == null ? 'router-link-active' : globalActiveClass; - var exactActiveClassFallback = - globalExactActiveClass == null - ? 'router-link-exact-active' - : globalExactActiveClass; - var activeClass = - this.activeClass == null ? activeClassFallback : this.activeClass; - var exactActiveClass = - this.exactActiveClass == null - ? exactActiveClassFallback - : this.exactActiveClass; - - var compareTarget = route.redirectedFrom - ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router) - : route; - - classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath); - classes[activeClass] = this.exact || this.exactPath - ? classes[exactActiveClass] - : isIncludedRoute(current, compareTarget); - - var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null; - - var handler = function (e) { - if (guardEvent(e)) { - if (this$1$1.replace) { - router.replace(location, noop); - } else { - router.push(location, noop); - } - } - }; - - var on = { click: guardEvent }; - if (Array.isArray(this.event)) { - this.event.forEach(function (e) { - on[e] = handler; - }); - } else { - on[this.event] = handler; - } - - var data = { class: classes }; - - var scopedSlot = - !this.$scopedSlots.$hasNormal && - this.$scopedSlots.default && - this.$scopedSlots.default({ - href: href, - route: route, - navigate: handler, - isActive: classes[activeClass], - isExactActive: classes[exactActiveClass] - }); - - if (scopedSlot) { - if (process.env.NODE_ENV !== 'production' && !this.custom) { - !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n'); - warnedCustomSlot = true; - } - if (scopedSlot.length === 1) { - return scopedSlot[0] - } else if (scopedSlot.length > 1 || !scopedSlot.length) { - if (process.env.NODE_ENV !== 'production') { - warn( - false, - ("<router-link> with to=\"" + (this.to) + "\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.") - ); - } - return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot) - } - } - - if (process.env.NODE_ENV !== 'production') { - if ('tag' in this.$options.propsData && !warnedTagProp) { - warn( - false, - "<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link." - ); - warnedTagProp = true; - } - if ('event' in this.$options.propsData && !warnedEventProp) { - warn( - false, - "<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link." - ); - warnedEventProp = true; - } - } - - if (this.tag === 'a') { - data.on = on; - data.attrs = { href: href, 'aria-current': ariaCurrentValue }; - } else { - // find the first <a> child and apply listener and href - var a = findAnchor(this.$slots.default); - if (a) { - // in case the <a> is a static node - a.isStatic = false; - var aData = (a.data = extend({}, a.data)); - aData.on = aData.on || {}; - // transform existing events in both objects into arrays so we can push later - for (var event in aData.on) { - var handler$1 = aData.on[event]; - if (event in on) { - aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1]; - } - } - // append new listeners for router-link - for (var event$1 in on) { - if (event$1 in aData.on) { - // on[event] is always a function - aData.on[event$1].push(on[event$1]); - } else { - aData.on[event$1] = handler; - } - } - - var aAttrs = (a.data.attrs = extend({}, a.data.attrs)); - aAttrs.href = href; - aAttrs['aria-current'] = ariaCurrentValue; - } else { - // doesn't have <a> child, apply listener to self - data.on = on; - } - } - - return h(this.tag, data, this.$slots.default) - } -}; - -function guardEvent (e) { - // don't redirect with control keys - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return } - // don't redirect when preventDefault called - if (e.defaultPrevented) { return } - // don't redirect on right click - if (e.button !== undefined && e.button !== 0) { return } - // don't redirect if `target="_blank"` - if (e.currentTarget && e.currentTarget.getAttribute) { - var target = e.currentTarget.getAttribute('target'); - if (/\b_blank\b/i.test(target)) { return } - } - // this may be a Weex event which doesn't have this method - if (e.preventDefault) { - e.preventDefault(); - } - return true -} - -function findAnchor (children) { - if (children) { - var child; - for (var i = 0; i < children.length; i++) { - child = children[i]; - if (child.tag === 'a') { - return child - } - if (child.children && (child = findAnchor(child.children))) { - return child - } - } - } -} - -var _Vue; - -function install (Vue) { - if (install.installed && _Vue === Vue) { return } - install.installed = true; - - _Vue = Vue; - - var isDef = function (v) { return v !== undefined; }; - - var registerInstance = function (vm, callVal) { - var i = vm.$options._parentVnode; - if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) { - i(vm, callVal); - } - }; - - Vue.mixin({ - beforeCreate: function beforeCreate () { - if (isDef(this.$options.router)) { - this._routerRoot = this; - this._router = this.$options.router; - this._router.init(this); - Vue.util.defineReactive(this, '_route', this._router.history.current); - } else { - this._routerRoot = (this.$parent && this.$parent._routerRoot) || this; - } - registerInstance(this, this); - }, - destroyed: function destroyed () { - registerInstance(this); - } - }); - - Object.defineProperty(Vue.prototype, '$router', { - get: function get () { return this._routerRoot._router } - }); - - Object.defineProperty(Vue.prototype, '$route', { - get: function get () { return this._routerRoot._route } - }); - - Vue.component('RouterView', View); - Vue.component('RouterLink', Link); - - var strats = Vue.config.optionMergeStrategies; - // use the same hook merging strategy for route hooks - strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created; -} - -/* */ - -var inBrowser = typeof window !== 'undefined'; - -/* */ - -function createRouteMap ( - routes, - oldPathList, - oldPathMap, - oldNameMap, - parentRoute -) { - // the path list is used to control path matching priority - var pathList = oldPathList || []; - // $flow-disable-line - var pathMap = oldPathMap || Object.create(null); - // $flow-disable-line - var nameMap = oldNameMap || Object.create(null); - - routes.forEach(function (route) { - addRouteRecord(pathList, pathMap, nameMap, route, parentRoute); - }); - - // ensure wildcard routes are always at the end - for (var i = 0, l = pathList.length; i < l; i++) { - if (pathList[i] === '*') { - pathList.push(pathList.splice(i, 1)[0]); - l--; - i--; - } - } - - if (process.env.NODE_ENV === 'development') { - // warn if routes do not include leading slashes - var found = pathList - // check for missing leading slash - .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; }); - - if (found.length > 0) { - var pathNames = found.map(function (path) { return ("- " + path); }).join('\n'); - warn(false, ("Non-nested routes must include a leading slash character. Fix the following routes: \n" + pathNames)); - } - } - - return { - pathList: pathList, - pathMap: pathMap, - nameMap: nameMap - } -} - -function addRouteRecord ( - pathList, - pathMap, - nameMap, - route, - parent, - matchAs -) { - var path = route.path; - var name = route.name; - if (process.env.NODE_ENV !== 'production') { - assert(path != null, "\"path\" is required in a route configuration."); - assert( - typeof route.component !== 'string', - "route config \"component\" for path: " + (String( - path || name - )) + " cannot be a " + "string id. Use an actual component instead." - ); - - warn( - // eslint-disable-next-line no-control-regex - !/[^\u0000-\u007F]+/.test(path), - "Route with path \"" + path + "\" contains unencoded characters, make sure " + - "your path is correctly encoded before passing it to the router. Use " + - "encodeURI to encode static segments of your path." - ); - } - - var pathToRegexpOptions = - route.pathToRegexpOptions || {}; - var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict); - - if (typeof route.caseSensitive === 'boolean') { - pathToRegexpOptions.sensitive = route.caseSensitive; - } - - var record = { - path: normalizedPath, - regex: compileRouteRegex(normalizedPath, pathToRegexpOptions), - components: route.components || { default: route.component }, - alias: route.alias - ? typeof route.alias === 'string' - ? [route.alias] - : route.alias - : [], - instances: {}, - enteredCbs: {}, - name: name, - parent: parent, - matchAs: matchAs, - redirect: route.redirect, - beforeEnter: route.beforeEnter, - meta: route.meta || {}, - props: - route.props == null - ? {} - : route.components - ? route.props - : { default: route.props } - }; - - if (route.children) { - // Warn if route is named, does not redirect and has a default child route. - // If users navigate to this route by name, the default child will - // not be rendered (GH Issue #629) - if (process.env.NODE_ENV !== 'production') { - if ( - route.name && - !route.redirect && - route.children.some(function (child) { return /^\/?$/.test(child.path); }) - ) { - warn( - false, - "Named Route '" + (route.name) + "' has a default child route. " + - "When navigating to this named route (:to=\"{name: '" + (route.name) + "'}\"), " + - "the default child route will not be rendered. Remove the name from " + - "this route and use the name of the default child route for named " + - "links instead." - ); - } - } - route.children.forEach(function (child) { - var childMatchAs = matchAs - ? cleanPath((matchAs + "/" + (child.path))) - : undefined; - addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs); - }); - } - - if (!pathMap[record.path]) { - pathList.push(record.path); - pathMap[record.path] = record; - } - - if (route.alias !== undefined) { - var aliases = Array.isArray(route.alias) ? route.alias : [route.alias]; - for (var i = 0; i < aliases.length; ++i) { - var alias = aliases[i]; - if (process.env.NODE_ENV !== 'production' && alias === path) { - warn( - false, - ("Found an alias with the same value as the path: \"" + path + "\". You have to remove that alias. It will be ignored in development.") - ); - // skip in dev to make it work - continue - } - - var aliasRoute = { - path: alias, - children: route.children - }; - addRouteRecord( - pathList, - pathMap, - nameMap, - aliasRoute, - parent, - record.path || '/' // matchAs - ); - } - } - - if (name) { - if (!nameMap[name]) { - nameMap[name] = record; - } else if (process.env.NODE_ENV !== 'production' && !matchAs) { - warn( - false, - "Duplicate named routes definition: " + - "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }" - ); - } - } -} - -function compileRouteRegex ( - path, - pathToRegexpOptions -) { - var regex = pathToRegexp_1(path, [], pathToRegexpOptions); - if (process.env.NODE_ENV !== 'production') { - var keys = Object.create(null); - regex.keys.forEach(function (key) { - warn( - !keys[key.name], - ("Duplicate param keys in route with path: \"" + path + "\"") - ); - keys[key.name] = true; - }); - } - return regex -} - -function normalizePath ( - path, - parent, - strict -) { - if (!strict) { path = path.replace(/\/$/, ''); } - if (path[0] === '/') { return path } - if (parent == null) { return path } - return cleanPath(((parent.path) + "/" + path)) -} - -/* */ - - - -function createMatcher ( - routes, - router -) { - var ref = createRouteMap(routes); - var pathList = ref.pathList; - var pathMap = ref.pathMap; - var nameMap = ref.nameMap; - - function addRoutes (routes) { - createRouteMap(routes, pathList, pathMap, nameMap); - } - - function addRoute (parentOrRoute, route) { - var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined; - // $flow-disable-line - createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent); - - // add aliases of parent - if (parent && parent.alias.length) { - createRouteMap( - // $flow-disable-line route is defined if parent is - parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }), - pathList, - pathMap, - nameMap, - parent - ); - } - } - - function getRoutes () { - return pathList.map(function (path) { return pathMap[path]; }) - } - - function match ( - raw, - currentRoute, - redirectedFrom - ) { - var location = normalizeLocation(raw, currentRoute, false, router); - var name = location.name; - - if (name) { - var record = nameMap[name]; - if (process.env.NODE_ENV !== 'production') { - warn(record, ("Route with name '" + name + "' does not exist")); - } - if (!record) { return _createRoute(null, location) } - var paramNames = record.regex.keys - .filter(function (key) { return !key.optional; }) - .map(function (key) { return key.name; }); - - if (typeof location.params !== 'object') { - location.params = {}; - } - - if (currentRoute && typeof currentRoute.params === 'object') { - for (var key in currentRoute.params) { - if (!(key in location.params) && paramNames.indexOf(key) > -1) { - location.params[key] = currentRoute.params[key]; - } - } - } - - location.path = fillParams(record.path, location.params, ("named route \"" + name + "\"")); - return _createRoute(record, location, redirectedFrom) - } else if (location.path) { - location.params = {}; - for (var i = 0; i < pathList.length; i++) { - var path = pathList[i]; - var record$1 = pathMap[path]; - if (matchRoute(record$1.regex, location.path, location.params)) { - return _createRoute(record$1, location, redirectedFrom) - } - } - } - // no match - return _createRoute(null, location) - } - - function redirect ( - record, - location - ) { - var originalRedirect = record.redirect; - var redirect = typeof originalRedirect === 'function' - ? originalRedirect(createRoute(record, location, null, router)) - : originalRedirect; - - if (typeof redirect === 'string') { - redirect = { path: redirect }; - } - - if (!redirect || typeof redirect !== 'object') { - if (process.env.NODE_ENV !== 'production') { - warn( - false, ("invalid redirect option: " + (JSON.stringify(redirect))) - ); - } - return _createRoute(null, location) - } - - var re = redirect; - var name = re.name; - var path = re.path; - var query = location.query; - var hash = location.hash; - var params = location.params; - query = re.hasOwnProperty('query') ? re.query : query; - hash = re.hasOwnProperty('hash') ? re.hash : hash; - params = re.hasOwnProperty('params') ? re.params : params; - - if (name) { - // resolved named direct - var targetRecord = nameMap[name]; - if (process.env.NODE_ENV !== 'production') { - assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found.")); - } - return match({ - _normalized: true, - name: name, - query: query, - hash: hash, - params: params - }, undefined, location) - } else if (path) { - // 1. resolve relative redirect - var rawPath = resolveRecordPath(path, record); - // 2. resolve params - var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\"")); - // 3. rematch with existing query and hash - return match({ - _normalized: true, - path: resolvedPath, - query: query, - hash: hash - }, undefined, location) - } else { - if (process.env.NODE_ENV !== 'production') { - warn(false, ("invalid redirect option: " + (JSON.stringify(redirect)))); - } - return _createRoute(null, location) - } - } - - function alias ( - record, - location, - matchAs - ) { - var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\"")); - var aliasedMatch = match({ - _normalized: true, - path: aliasedPath - }); - if (aliasedMatch) { - var matched = aliasedMatch.matched; - var aliasedRecord = matched[matched.length - 1]; - location.params = aliasedMatch.params; - return _createRoute(aliasedRecord, location) - } - return _createRoute(null, location) - } - - function _createRoute ( - record, - location, - redirectedFrom - ) { - if (record && record.redirect) { - return redirect(record, redirectedFrom || location) - } - if (record && record.matchAs) { - return alias(record, location, record.matchAs) - } - return createRoute(record, location, redirectedFrom, router) - } - - return { - match: match, - addRoute: addRoute, - getRoutes: getRoutes, - addRoutes: addRoutes - } -} - -function matchRoute ( - regex, - path, - params -) { - var m = path.match(regex); - - if (!m) { - return false - } else if (!params) { - return true - } - - for (var i = 1, len = m.length; i < len; ++i) { - var key = regex.keys[i - 1]; - if (key) { - // Fix #1994: using * with props: true generates a param named 0 - params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i]; - } - } - - return true -} - -function resolveRecordPath (path, record) { - return resolvePath(path, record.parent ? record.parent.path : '/', true) -} - -/* */ - -// use User Timing api (if present) for more accurate key precision -var Time = - inBrowser && window.performance && window.performance.now - ? window.performance - : Date; - -function genStateKey () { - return Time.now().toFixed(3) -} - -var _key = genStateKey(); - -function getStateKey () { - return _key -} - -function setStateKey (key) { - return (_key = key) -} - -/* */ - -var positionStore = Object.create(null); - -function setupScroll () { - // Prevent browser scroll behavior on History popstate - if ('scrollRestoration' in window.history) { - window.history.scrollRestoration = 'manual'; - } - // Fix for #1585 for Firefox - // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678 - // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with - // window.location.protocol + '//' + window.location.host - // location.host contains the port and location.hostname doesn't - var protocolAndPath = window.location.protocol + '//' + window.location.host; - var absolutePath = window.location.href.replace(protocolAndPath, ''); - // preserve existing history state as it could be overriden by the user - var stateCopy = extend({}, window.history.state); - stateCopy.key = getStateKey(); - window.history.replaceState(stateCopy, '', absolutePath); - window.addEventListener('popstate', handlePopState); - return function () { - window.removeEventListener('popstate', handlePopState); - } -} - -function handleScroll ( - router, - to, - from, - isPop -) { - if (!router.app) { - return - } - - var behavior = router.options.scrollBehavior; - if (!behavior) { - return - } - - if (process.env.NODE_ENV !== 'production') { - assert(typeof behavior === 'function', "scrollBehavior must be a function"); - } - - // wait until re-render finishes before scrolling - router.app.$nextTick(function () { - var position = getScrollPosition(); - var shouldScroll = behavior.call( - router, - to, - from, - isPop ? position : null - ); - - if (!shouldScroll) { - return - } - - if (typeof shouldScroll.then === 'function') { - shouldScroll - .then(function (shouldScroll) { - scrollToPosition((shouldScroll), position); - }) - .catch(function (err) { - if (process.env.NODE_ENV !== 'production') { - assert(false, err.toString()); - } - }); - } else { - scrollToPosition(shouldScroll, position); - } - }); -} - -function saveScrollPosition () { - var key = getStateKey(); - if (key) { - positionStore[key] = { - x: window.pageXOffset, - y: window.pageYOffset - }; - } -} - -function handlePopState (e) { - saveScrollPosition(); - if (e.state && e.state.key) { - setStateKey(e.state.key); - } -} - -function getScrollPosition () { - var key = getStateKey(); - if (key) { - return positionStore[key] - } -} - -function getElementPosition (el, offset) { - var docEl = document.documentElement; - var docRect = docEl.getBoundingClientRect(); - var elRect = el.getBoundingClientRect(); - return { - x: elRect.left - docRect.left - offset.x, - y: elRect.top - docRect.top - offset.y - } -} - -function isValidPosition (obj) { - return isNumber(obj.x) || isNumber(obj.y) -} - -function normalizePosition (obj) { - return { - x: isNumber(obj.x) ? obj.x : window.pageXOffset, - y: isNumber(obj.y) ? obj.y : window.pageYOffset - } -} - -function normalizeOffset (obj) { - return { - x: isNumber(obj.x) ? obj.x : 0, - y: isNumber(obj.y) ? obj.y : 0 - } -} - -function isNumber (v) { - return typeof v === 'number' -} - -var hashStartsWithNumberRE = /^#\d/; - -function scrollToPosition (shouldScroll, position) { - var isObject = typeof shouldScroll === 'object'; - if (isObject && typeof shouldScroll.selector === 'string') { - // getElementById would still fail if the selector contains a more complicated query like #main[data-attr] - // but at the same time, it doesn't make much sense to select an element with an id and an extra selector - var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line - ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line - : document.querySelector(shouldScroll.selector); - - if (el) { - var offset = - shouldScroll.offset && typeof shouldScroll.offset === 'object' - ? shouldScroll.offset - : {}; - offset = normalizeOffset(offset); - position = getElementPosition(el, offset); - } else if (isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - } else if (isObject && isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - - if (position) { - // $flow-disable-line - if ('scrollBehavior' in document.documentElement.style) { - window.scrollTo({ - left: position.x, - top: position.y, - // $flow-disable-line - behavior: shouldScroll.behavior - }); - } else { - window.scrollTo(position.x, position.y); - } - } -} - -/* */ - -var supportsPushState = - inBrowser && - (function () { - var ua = window.navigator.userAgent; - - if ( - (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && - ua.indexOf('Mobile Safari') !== -1 && - ua.indexOf('Chrome') === -1 && - ua.indexOf('Windows Phone') === -1 - ) { - return false - } - - return window.history && typeof window.history.pushState === 'function' - })(); - -function pushState (url, replace) { - saveScrollPosition(); - // try...catch the pushState call to get around Safari - // DOM Exception 18 where it limits to 100 pushState calls - var history = window.history; - try { - if (replace) { - // preserve existing history state as it could be overriden by the user - var stateCopy = extend({}, history.state); - stateCopy.key = getStateKey(); - history.replaceState(stateCopy, '', url); - } else { - history.pushState({ key: setStateKey(genStateKey()) }, '', url); - } - } catch (e) { - window.location[replace ? 'replace' : 'assign'](url); - } -} - -function replaceState (url) { - pushState(url, true); -} - -// When changing thing, also edit router.d.ts -var NavigationFailureType = { - redirected: 2, - aborted: 4, - cancelled: 8, - duplicated: 16 -}; - -function createNavigationRedirectedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.redirected, - ("Redirected when going from \"" + (from.fullPath) + "\" to \"" + (stringifyRoute( - to - )) + "\" via a navigation guard.") - ) -} - -function createNavigationDuplicatedError (from, to) { - var error = createRouterError( - from, - to, - NavigationFailureType.duplicated, - ("Avoided redundant navigation to current location: \"" + (from.fullPath) + "\".") - ); - // backwards compatible with the first introduction of Errors - error.name = 'NavigationDuplicated'; - return error -} - -function createNavigationCancelledError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.cancelled, - ("Navigation cancelled from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" with a new navigation.") - ) -} - -function createNavigationAbortedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.aborted, - ("Navigation aborted from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" via a navigation guard.") - ) -} - -function createRouterError (from, to, type, message) { - var error = new Error(message); - error._isRouter = true; - error.from = from; - error.to = to; - error.type = type; - - return error -} - -var propertiesToLog = ['params', 'query', 'hash']; - -function stringifyRoute (to) { - if (typeof to === 'string') { return to } - if ('path' in to) { return to.path } - var location = {}; - propertiesToLog.forEach(function (key) { - if (key in to) { location[key] = to[key]; } - }); - return JSON.stringify(location, null, 2) -} - -function isError (err) { - return Object.prototype.toString.call(err).indexOf('Error') > -1 -} - -function isNavigationFailure (err, errorType) { - return ( - isError(err) && - err._isRouter && - (errorType == null || err.type === errorType) - ) -} - -/* */ - -function runQueue (queue, fn, cb) { - var step = function (index) { - if (index >= queue.length) { - cb(); - } else { - if (queue[index]) { - fn(queue[index], function () { - step(index + 1); - }); - } else { - step(index + 1); - } - } - }; - step(0); -} - -/* */ - -function resolveAsyncComponents (matched) { - return function (to, from, next) { - var hasAsync = false; - var pending = 0; - var error = null; - - flatMapComponents(matched, function (def, _, match, key) { - // if it's a function and doesn't have cid attached, - // assume it's an async component resolve function. - // we are not using Vue's default async resolving mechanism because - // we want to halt the navigation until the incoming component has been - // resolved. - if (typeof def === 'function' && def.cid === undefined) { - hasAsync = true; - pending++; - - var resolve = once(function (resolvedDef) { - if (isESModule(resolvedDef)) { - resolvedDef = resolvedDef.default; - } - // save resolved on async factory in case it's used elsewhere - def.resolved = typeof resolvedDef === 'function' - ? resolvedDef - : _Vue.extend(resolvedDef); - match.components[key] = resolvedDef; - pending--; - if (pending <= 0) { - next(); - } - }); - - var reject = once(function (reason) { - var msg = "Failed to resolve async component " + key + ": " + reason; - process.env.NODE_ENV !== 'production' && warn(false, msg); - if (!error) { - error = isError(reason) - ? reason - : new Error(msg); - next(error); - } - }); - - var res; - try { - res = def(resolve, reject); - } catch (e) { - reject(e); - } - if (res) { - if (typeof res.then === 'function') { - res.then(resolve, reject); - } else { - // new syntax in Vue 2.3 - var comp = res.component; - if (comp && typeof comp.then === 'function') { - comp.then(resolve, reject); - } - } - } - } - }); - - if (!hasAsync) { next(); } - } -} - -function flatMapComponents ( - matched, - fn -) { - return flatten(matched.map(function (m) { - return Object.keys(m.components).map(function (key) { return fn( - m.components[key], - m.instances[key], - m, key - ); }) - })) -} - -function flatten (arr) { - return Array.prototype.concat.apply([], arr) -} - -var hasSymbol = - typeof Symbol === 'function' && - typeof Symbol.toStringTag === 'symbol'; - -function isESModule (obj) { - return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module') -} - -// in Webpack 2, require.ensure now also returns a Promise -// so the resolve/reject functions may get called an extra time -// if the user uses an arrow function shorthand that happens to -// return that Promise. -function once (fn) { - var called = false; - return function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - if (called) { return } - called = true; - return fn.apply(this, args) - } -} - -/* */ - -var History = function History (router, base) { - this.router = router; - this.base = normalizeBase(base); - // start with a route object that stands for "nowhere" - this.current = START; - this.pending = null; - this.ready = false; - this.readyCbs = []; - this.readyErrorCbs = []; - this.errorCbs = []; - this.listeners = []; -}; - -History.prototype.listen = function listen (cb) { - this.cb = cb; -}; - -History.prototype.onReady = function onReady (cb, errorCb) { - if (this.ready) { - cb(); - } else { - this.readyCbs.push(cb); - if (errorCb) { - this.readyErrorCbs.push(errorCb); - } - } -}; - -History.prototype.onError = function onError (errorCb) { - this.errorCbs.push(errorCb); -}; - -History.prototype.transitionTo = function transitionTo ( - location, - onComplete, - onAbort -) { - var this$1$1 = this; - - var route; - // catch redirect option https://github.com/vuejs/vue-router/issues/3201 - try { - route = this.router.match(location, this.current); - } catch (e) { - this.errorCbs.forEach(function (cb) { - cb(e); - }); - // Exception should still be thrown - throw e - } - var prev = this.current; - this.confirmTransition( - route, - function () { - this$1$1.updateRoute(route); - onComplete && onComplete(route); - this$1$1.ensureURL(); - this$1$1.router.afterHooks.forEach(function (hook) { - hook && hook(route, prev); - }); - - // fire ready cbs once - if (!this$1$1.ready) { - this$1$1.ready = true; - this$1$1.readyCbs.forEach(function (cb) { - cb(route); - }); - } - }, - function (err) { - if (onAbort) { - onAbort(err); - } - if (err && !this$1$1.ready) { - // Initial redirection should not mark the history as ready yet - // because it's triggered by the redirection instead - // https://github.com/vuejs/vue-router/issues/3225 - // https://github.com/vuejs/vue-router/issues/3331 - if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) { - this$1$1.ready = true; - this$1$1.readyErrorCbs.forEach(function (cb) { - cb(err); - }); - } - } - } - ); -}; - -History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) { - var this$1$1 = this; - - var current = this.current; - this.pending = route; - var abort = function (err) { - // changed after adding errors with - // https://github.com/vuejs/vue-router/pull/3047 before that change, - // redirect and aborted navigation would produce an err == null - if (!isNavigationFailure(err) && isError(err)) { - if (this$1$1.errorCbs.length) { - this$1$1.errorCbs.forEach(function (cb) { - cb(err); - }); - } else { - if (process.env.NODE_ENV !== 'production') { - warn(false, 'uncaught error during route navigation:'); - } - console.error(err); - } - } - onAbort && onAbort(err); - }; - var lastRouteIndex = route.matched.length - 1; - var lastCurrentIndex = current.matched.length - 1; - if ( - isSameRoute(route, current) && - // in the case the route map has been dynamically appended to - lastRouteIndex === lastCurrentIndex && - route.matched[lastRouteIndex] === current.matched[lastCurrentIndex] - ) { - this.ensureURL(); - if (route.hash) { - handleScroll(this.router, current, route, false); - } - return abort(createNavigationDuplicatedError(current, route)) - } - - var ref = resolveQueue( - this.current.matched, - route.matched - ); - var updated = ref.updated; - var deactivated = ref.deactivated; - var activated = ref.activated; - - var queue = [].concat( - // in-component leave guards - extractLeaveGuards(deactivated), - // global before hooks - this.router.beforeHooks, - // in-component update hooks - extractUpdateHooks(updated), - // in-config enter guards - activated.map(function (m) { return m.beforeEnter; }), - // async components - resolveAsyncComponents(activated) - ); - - var iterator = function (hook, next) { - if (this$1$1.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - try { - hook(route, current, function (to) { - if (to === false) { - // next(false) -> abort navigation, ensure current URL - this$1$1.ensureURL(true); - abort(createNavigationAbortedError(current, route)); - } else if (isError(to)) { - this$1$1.ensureURL(true); - abort(to); - } else if ( - typeof to === 'string' || - (typeof to === 'object' && - (typeof to.path === 'string' || typeof to.name === 'string')) - ) { - // next('/') or next({ path: '/' }) -> redirect - abort(createNavigationRedirectedError(current, route)); - if (typeof to === 'object' && to.replace) { - this$1$1.replace(to); - } else { - this$1$1.push(to); - } - } else { - // confirm transition and pass on the value - next(to); - } - }); - } catch (e) { - abort(e); - } - }; - - runQueue(queue, iterator, function () { - // wait until async components are resolved before - // extracting in-component enter guards - var enterGuards = extractEnterGuards(activated); - var queue = enterGuards.concat(this$1$1.router.resolveHooks); - runQueue(queue, iterator, function () { - if (this$1$1.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - this$1$1.pending = null; - onComplete(route); - if (this$1$1.router.app) { - this$1$1.router.app.$nextTick(function () { - handleRouteEntered(route); - }); - } - }); - }); -}; - -History.prototype.updateRoute = function updateRoute (route) { - this.current = route; - this.cb && this.cb(route); -}; - -History.prototype.setupListeners = function setupListeners () { - // Default implementation is empty -}; - -History.prototype.teardown = function teardown () { - // clean up event listeners - // https://github.com/vuejs/vue-router/issues/2341 - this.listeners.forEach(function (cleanupListener) { - cleanupListener(); - }); - this.listeners = []; - - // reset current history route - // https://github.com/vuejs/vue-router/issues/3294 - this.current = START; - this.pending = null; -}; - -function normalizeBase (base) { - if (!base) { - if (inBrowser) { - // respect <base> tag - var baseEl = document.querySelector('base'); - base = (baseEl && baseEl.getAttribute('href')) || '/'; - // strip full URL origin - base = base.replace(/^https?:\/\/[^\/]+/, ''); - } else { - base = '/'; - } - } - // make sure there's the starting slash - if (base.charAt(0) !== '/') { - base = '/' + base; - } - // remove trailing slash - return base.replace(/\/$/, '') -} - -function resolveQueue ( - current, - next -) { - var i; - var max = Math.max(current.length, next.length); - for (i = 0; i < max; i++) { - if (current[i] !== next[i]) { - break - } - } - return { - updated: next.slice(0, i), - activated: next.slice(i), - deactivated: current.slice(i) - } -} - -function extractGuards ( - records, - name, - bind, - reverse -) { - var guards = flatMapComponents(records, function (def, instance, match, key) { - var guard = extractGuard(def, name); - if (guard) { - return Array.isArray(guard) - ? guard.map(function (guard) { return bind(guard, instance, match, key); }) - : bind(guard, instance, match, key) - } - }); - return flatten(reverse ? guards.reverse() : guards) -} - -function extractGuard ( - def, - key -) { - if (typeof def !== 'function') { - // extend now so that global mixins are applied. - def = _Vue.extend(def); - } - return def.options[key] -} - -function extractLeaveGuards (deactivated) { - return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true) -} - -function extractUpdateHooks (updated) { - return extractGuards(updated, 'beforeRouteUpdate', bindGuard) -} - -function bindGuard (guard, instance) { - if (instance) { - return function boundRouteGuard () { - return guard.apply(instance, arguments) - } - } -} - -function extractEnterGuards ( - activated -) { - return extractGuards( - activated, - 'beforeRouteEnter', - function (guard, _, match, key) { - return bindEnterGuard(guard, match, key) - } - ) -} - -function bindEnterGuard ( - guard, - match, - key -) { - return function routeEnterGuard (to, from, next) { - return guard(to, from, function (cb) { - if (typeof cb === 'function') { - if (!match.enteredCbs[key]) { - match.enteredCbs[key] = []; - } - match.enteredCbs[key].push(cb); - } - next(cb); - }) - } -} - -/* */ - -var HTML5History = /*@__PURE__*/(function (History) { - function HTML5History (router, base) { - History.call(this, router, base); - - this._startLocation = getLocation(this.base); - } - - if ( History ) HTML5History.__proto__ = History; - HTML5History.prototype = Object.create( History && History.prototype ); - HTML5History.prototype.constructor = HTML5History; - - HTML5History.prototype.setupListeners = function setupListeners () { - var this$1$1 = this; - - if (this.listeners.length > 0) { - return - } - - var router = this.router; - var expectScroll = router.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll) { - this.listeners.push(setupScroll()); - } - - var handleRoutingEvent = function () { - var current = this$1$1.current; - - // Avoiding first `popstate` event dispatched in some browsers but first - // history route not updated since async guard at the same time. - var location = getLocation(this$1$1.base); - if (this$1$1.current === START && location === this$1$1._startLocation) { - return - } - - this$1$1.transitionTo(location, function (route) { - if (supportsScroll) { - handleScroll(router, route, current, true); - } - }); - }; - window.addEventListener('popstate', handleRoutingEvent); - this.listeners.push(function () { - window.removeEventListener('popstate', handleRoutingEvent); - }); - }; - - HTML5History.prototype.go = function go (n) { - window.history.go(n); - }; - - HTML5History.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo(location, function (route) { - pushState(cleanPath(this$1$1.base + route.fullPath)); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - }; - - HTML5History.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo(location, function (route) { - replaceState(cleanPath(this$1$1.base + route.fullPath)); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - }; - - HTML5History.prototype.ensureURL = function ensureURL (push) { - if (getLocation(this.base) !== this.current.fullPath) { - var current = cleanPath(this.base + this.current.fullPath); - push ? pushState(current) : replaceState(current); - } - }; - - HTML5History.prototype.getCurrentLocation = function getCurrentLocation () { - return getLocation(this.base) - }; - - return HTML5History; -}(History)); - -function getLocation (base) { - var path = window.location.pathname; - var pathLowerCase = path.toLowerCase(); - var baseLowerCase = base.toLowerCase(); - // base="/a" shouldn't turn path="/app" into "/a/pp" - // https://github.com/vuejs/vue-router/issues/3555 - // so we ensure the trailing slash in the base - if (base && ((pathLowerCase === baseLowerCase) || - (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) { - path = path.slice(base.length); - } - return (path || '/') + window.location.search + window.location.hash -} - -/* */ - -var HashHistory = /*@__PURE__*/(function (History) { - function HashHistory (router, base, fallback) { - History.call(this, router, base); - // check history fallback deeplinking - if (fallback && checkFallback(this.base)) { - return - } - ensureSlash(); - } - - if ( History ) HashHistory.__proto__ = History; - HashHistory.prototype = Object.create( History && History.prototype ); - HashHistory.prototype.constructor = HashHistory; - - // this is delayed until the app mounts - // to avoid the hashchange listener being fired too early - HashHistory.prototype.setupListeners = function setupListeners () { - var this$1$1 = this; - - if (this.listeners.length > 0) { - return - } - - var router = this.router; - var expectScroll = router.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll) { - this.listeners.push(setupScroll()); - } - - var handleRoutingEvent = function () { - var current = this$1$1.current; - if (!ensureSlash()) { - return - } - this$1$1.transitionTo(getHash(), function (route) { - if (supportsScroll) { - handleScroll(this$1$1.router, route, current, true); - } - if (!supportsPushState) { - replaceHash(route.fullPath); - } - }); - }; - var eventType = supportsPushState ? 'popstate' : 'hashchange'; - window.addEventListener( - eventType, - handleRoutingEvent - ); - this.listeners.push(function () { - window.removeEventListener(eventType, handleRoutingEvent); - }); - }; - - HashHistory.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo( - location, - function (route) { - pushHash(route.fullPath); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - HashHistory.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo( - location, - function (route) { - replaceHash(route.fullPath); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - HashHistory.prototype.go = function go (n) { - window.history.go(n); - }; - - HashHistory.prototype.ensureURL = function ensureURL (push) { - var current = this.current.fullPath; - if (getHash() !== current) { - push ? pushHash(current) : replaceHash(current); - } - }; - - HashHistory.prototype.getCurrentLocation = function getCurrentLocation () { - return getHash() - }; - - return HashHistory; -}(History)); - -function checkFallback (base) { - var location = getLocation(base); - if (!/^\/#/.test(location)) { - window.location.replace(cleanPath(base + '/#' + location)); - return true - } -} - -function ensureSlash () { - var path = getHash(); - if (path.charAt(0) === '/') { - return true - } - replaceHash('/' + path); - return false -} - -function getHash () { - // We can't use window.location.hash here because it's not - // consistent across browsers - Firefox will pre-decode it! - var href = window.location.href; - var index = href.indexOf('#'); - // empty path - if (index < 0) { return '' } - - href = href.slice(index + 1); - - return href -} - -function getUrl (path) { - var href = window.location.href; - var i = href.indexOf('#'); - var base = i >= 0 ? href.slice(0, i) : href; - return (base + "#" + path) -} - -function pushHash (path) { - if (supportsPushState) { - pushState(getUrl(path)); - } else { - window.location.hash = path; - } -} - -function replaceHash (path) { - if (supportsPushState) { - replaceState(getUrl(path)); - } else { - window.location.replace(getUrl(path)); - } -} - -/* */ - -var AbstractHistory = /*@__PURE__*/(function (History) { - function AbstractHistory (router, base) { - History.call(this, router, base); - this.stack = []; - this.index = -1; - } - - if ( History ) AbstractHistory.__proto__ = History; - AbstractHistory.prototype = Object.create( History && History.prototype ); - AbstractHistory.prototype.constructor = AbstractHistory; - - AbstractHistory.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - this.transitionTo( - location, - function (route) { - this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route); - this$1$1.index++; - onComplete && onComplete(route); - }, - onAbort - ); - }; - - AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - this.transitionTo( - location, - function (route) { - this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - AbstractHistory.prototype.go = function go (n) { - var this$1$1 = this; - - var targetIndex = this.index + n; - if (targetIndex < 0 || targetIndex >= this.stack.length) { - return - } - var route = this.stack[targetIndex]; - this.confirmTransition( - route, - function () { - var prev = this$1$1.current; - this$1$1.index = targetIndex; - this$1$1.updateRoute(route); - this$1$1.router.afterHooks.forEach(function (hook) { - hook && hook(route, prev); - }); - }, - function (err) { - if (isNavigationFailure(err, NavigationFailureType.duplicated)) { - this$1$1.index = targetIndex; - } - } - ); - }; - - AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () { - var current = this.stack[this.stack.length - 1]; - return current ? current.fullPath : '/' - }; - - AbstractHistory.prototype.ensureURL = function ensureURL () { - // noop - }; - - return AbstractHistory; -}(History)); - -/* */ - - - -var VueRouter = function VueRouter (options) { - if ( options === void 0 ) options = {}; - - if (process.env.NODE_ENV !== 'production') { - warn(this instanceof VueRouter, "Router must be called with the new operator."); - } - this.app = null; - this.apps = []; - this.options = options; - this.beforeHooks = []; - this.resolveHooks = []; - this.afterHooks = []; - this.matcher = createMatcher(options.routes || [], this); - - var mode = options.mode || 'hash'; - this.fallback = - mode === 'history' && !supportsPushState && options.fallback !== false; - if (this.fallback) { - mode = 'hash'; - } - if (!inBrowser) { - mode = 'abstract'; - } - this.mode = mode; - - switch (mode) { - case 'history': - this.history = new HTML5History(this, options.base); - break - case 'hash': - this.history = new HashHistory(this, options.base, this.fallback); - break - case 'abstract': - this.history = new AbstractHistory(this, options.base); - break - default: - if (process.env.NODE_ENV !== 'production') { - assert(false, ("invalid mode: " + mode)); - } - } -}; - -var prototypeAccessors = { currentRoute: { configurable: true } }; - -VueRouter.prototype.match = function match (raw, current, redirectedFrom) { - return this.matcher.match(raw, current, redirectedFrom) -}; - -prototypeAccessors.currentRoute.get = function () { - return this.history && this.history.current -}; - -VueRouter.prototype.init = function init (app /* Vue component instance */) { - var this$1$1 = this; - - process.env.NODE_ENV !== 'production' && - assert( - install.installed, - "not installed. Make sure to call `Vue.use(VueRouter)` " + - "before creating root instance." - ); - - this.apps.push(app); - - // set up app destroyed handler - // https://github.com/vuejs/vue-router/issues/2639 - app.$once('hook:destroyed', function () { - // clean out app from this.apps array once destroyed - var index = this$1$1.apps.indexOf(app); - if (index > -1) { this$1$1.apps.splice(index, 1); } - // ensure we still have a main app or null if no apps - // we do not release the router so it can be reused - if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; } - - if (!this$1$1.app) { this$1$1.history.teardown(); } - }); - - // main app previously initialized - // return as we don't need to set up new history listener - if (this.app) { - return - } - - this.app = app; - - var history = this.history; - - if (history instanceof HTML5History || history instanceof HashHistory) { - var handleInitialScroll = function (routeOrError) { - var from = history.current; - var expectScroll = this$1$1.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll && 'fullPath' in routeOrError) { - handleScroll(this$1$1, routeOrError, from, false); - } - }; - var setupListeners = function (routeOrError) { - history.setupListeners(); - handleInitialScroll(routeOrError); - }; - history.transitionTo( - history.getCurrentLocation(), - setupListeners, - setupListeners - ); - } - - history.listen(function (route) { - this$1$1.apps.forEach(function (app) { - app._route = route; - }); - }); -}; - -VueRouter.prototype.beforeEach = function beforeEach (fn) { - return registerHook(this.beforeHooks, fn) -}; - -VueRouter.prototype.beforeResolve = function beforeResolve (fn) { - return registerHook(this.resolveHooks, fn) -}; - -VueRouter.prototype.afterEach = function afterEach (fn) { - return registerHook(this.afterHooks, fn) -}; - -VueRouter.prototype.onReady = function onReady (cb, errorCb) { - this.history.onReady(cb, errorCb); -}; - -VueRouter.prototype.onError = function onError (errorCb) { - this.history.onError(errorCb); -}; - -VueRouter.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise(function (resolve, reject) { - this$1$1.history.push(location, resolve, reject); - }) - } else { - this.history.push(location, onComplete, onAbort); - } -}; - -VueRouter.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise(function (resolve, reject) { - this$1$1.history.replace(location, resolve, reject); - }) - } else { - this.history.replace(location, onComplete, onAbort); - } -}; - -VueRouter.prototype.go = function go (n) { - this.history.go(n); -}; - -VueRouter.prototype.back = function back () { - this.go(-1); -}; - -VueRouter.prototype.forward = function forward () { - this.go(1); -}; - -VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) { - var route = to - ? to.matched - ? to - : this.resolve(to).route - : this.currentRoute; - if (!route) { - return [] - } - return [].concat.apply( - [], - route.matched.map(function (m) { - return Object.keys(m.components).map(function (key) { - return m.components[key] - }) - }) - ) -}; - -VueRouter.prototype.resolve = function resolve ( - to, - current, - append -) { - current = current || this.history.current; - var location = normalizeLocation(to, current, append, this); - var route = this.match(location, current); - var fullPath = route.redirectedFrom || route.fullPath; - var base = this.history.base; - var href = createHref(base, fullPath, this.mode); - return { - location: location, - route: route, - href: href, - // for backwards compat - normalizedTo: location, - resolved: route - } -}; - -VueRouter.prototype.getRoutes = function getRoutes () { - return this.matcher.getRoutes() -}; - -VueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) { - this.matcher.addRoute(parentOrRoute, route); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } -}; - -VueRouter.prototype.addRoutes = function addRoutes (routes) { - if (process.env.NODE_ENV !== 'production') { - warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.'); - } - this.matcher.addRoutes(routes); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } -}; - -Object.defineProperties( VueRouter.prototype, prototypeAccessors ); - -var VueRouter$1 = VueRouter; - -function registerHook (list, fn) { - list.push(fn); - return function () { - var i = list.indexOf(fn); - if (i > -1) { list.splice(i, 1); } - } -} - -function createHref (base, fullPath, mode) { - var path = mode === 'hash' ? '#' + fullPath : fullPath; - return base ? cleanPath(base + '/' + path) : path -} - -// We cannot remove this as it would be a breaking change -VueRouter.install = install; -VueRouter.version = '3.6.5'; -VueRouter.isNavigationFailure = isNavigationFailure; -VueRouter.NavigationFailureType = NavigationFailureType; -VueRouter.START_LOCATION = START; - -if (inBrowser && window.Vue) { - window.Vue.use(VueRouter); -} - -var version = '3.6.5'; - -export { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version }; diff --git a/dist/vue-router.js b/dist/vue-router.js index b96c68fae..12bb138b6 100644 --- a/dist/vue-router.js +++ b/dist/vue-router.js @@ -1,3164 +1,2709 @@ /*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ + * vue-router v0.7.13 + * (c) 2016 Evan You + * Released under the MIT License. + */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.VueRouter = factory()); -})(this, (function () { 'use strict'; + global.VueRouter = factory(); +}(this, function () { 'use strict'; - /* */ + var babelHelpers = {}; - function assert (condition, message) { - if (!condition) { - throw new Error(("[vue-router] " + message)) + babelHelpers.classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); } + }; + function Target(path, matcher, delegate) { + this.path = path; + this.matcher = matcher; + this.delegate = delegate; } - function warn (condition, message) { - if (!condition) { - typeof console !== 'undefined' && console.warn(("[vue-router] " + message)); - } - } - - function extend (a, b) { - for (var key in b) { - a[key] = b[key]; - } - return a - } - - /* */ + Target.prototype = { + to: function to(target, callback) { + var delegate = this.delegate; - var encodeReserveRE = /[!'()*]/g; - var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); }; - var commaRE = /%2C/g; + if (delegate && delegate.willAddRoute) { + target = delegate.willAddRoute(this.matcher.target, target); + } - // fixed encodeURIComponent which is more conformant to RFC3986: - // - escapes [!'()*] - // - preserve commas - var encode = function (str) { return encodeURIComponent(str) - .replace(encodeReserveRE, encodeReserveReplacer) - .replace(commaRE, ','); }; + this.matcher.add(this.path, target); - function decode (str) { - try { - return decodeURIComponent(str) - } catch (err) { - { - warn(false, ("Error decoding \"" + str + "\". Leaving it intact.")); + if (callback) { + if (callback.length === 0) { + throw new Error("You must have an argument in the function passed to `to`"); + } + this.matcher.addChild(this.path, target, callback, this.delegate); } + return this; } - return str - } - - function resolveQuery ( - query, - extraQuery, - _parseQuery - ) { - if ( extraQuery === void 0 ) extraQuery = {}; + }; - var parse = _parseQuery || parseQuery; - var parsedQuery; - try { - parsedQuery = parse(query || ''); - } catch (e) { - warn(false, e.message); - parsedQuery = {}; - } - for (var key in extraQuery) { - var value = extraQuery[key]; - parsedQuery[key] = Array.isArray(value) - ? value.map(castQueryParamValue) - : castQueryParamValue(value); - } - return parsedQuery + function Matcher(target) { + this.routes = {}; + this.children = {}; + this.target = target; } - var castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); }; + Matcher.prototype = { + add: function add(path, handler) { + this.routes[path] = handler; + }, + + addChild: function addChild(path, target, callback, delegate) { + var matcher = new Matcher(target); + this.children[path] = matcher; - function parseQuery (query) { - var res = {}; + var match = generateMatch(path, matcher, delegate); - query = query.trim().replace(/^(\?|#|&)/, ''); + if (delegate && delegate.contextEntered) { + delegate.contextEntered(target, match); + } - if (!query) { - return res + callback(match); } + }; - query.split('&').forEach(function (param) { - var parts = param.replace(/\+/g, ' ').split('='); - var key = decode(parts.shift()); - var val = parts.length > 0 ? decode(parts.join('=')) : null; + function generateMatch(startingPath, matcher, delegate) { + return function (path, nestedCallback) { + var fullPath = startingPath + path; - if (res[key] === undefined) { - res[key] = val; - } else if (Array.isArray(res[key])) { - res[key].push(val); + if (nestedCallback) { + nestedCallback(generateMatch(fullPath, matcher, delegate)); } else { - res[key] = [res[key], val]; + return new Target(startingPath + path, matcher, delegate); } - }); + }; + } - return res + function addRoute(routeArray, path, handler) { + var len = 0; + for (var i = 0, l = routeArray.length; i < l; i++) { + len += routeArray[i].path.length; + } + + path = path.substr(len); + var route = { path: path, handler: handler }; + routeArray.push(route); } - function stringifyQuery (obj) { - var res = obj - ? Object.keys(obj) - .map(function (key) { - var val = obj[key]; + function eachRoute(baseRoute, matcher, callback, binding) { + var routes = matcher.routes; - if (val === undefined) { - return '' - } + for (var path in routes) { + if (routes.hasOwnProperty(path)) { + var routeArray = baseRoute.slice(); + addRoute(routeArray, path, routes[path]); - if (val === null) { - return encode(key) - } + if (matcher.children[path]) { + eachRoute(routeArray, matcher.children[path], callback, binding); + } else { + callback.call(binding, routeArray); + } + } + } + } - if (Array.isArray(val)) { - var result = []; - val.forEach(function (val2) { - if (val2 === undefined) { - return - } - if (val2 === null) { - result.push(encode(key)); - } else { - result.push(encode(key) + '=' + encode(val2)); - } - }); - return result.join('&') - } + function map (callback, addRouteCallback) { + var matcher = new Matcher(); + + callback(generateMatch("", matcher, this.delegate)); - return encode(key) + '=' + encode(val) - }) - .filter(function (x) { return x.length > 0; }) - .join('&') - : null; - return res ? ("?" + res) : '' + eachRoute([], matcher, function (route) { + if (addRouteCallback) { + addRouteCallback(this, route); + } else { + this.add(route); + } + }, this); } - /* */ + var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\']; - var trailingSlashRE = /\/?$/; + var escapeRegex = new RegExp('(\\' + specials.join('|\\') + ')', 'g'); - function createRoute ( - record, - location, - redirectedFrom, - router - ) { - var stringifyQuery = router && router.options.stringifyQuery; + var noWarning = false; + function warn(msg) { + if (!noWarning && typeof console !== 'undefined') { + console.error('[vue-router] ' + msg); + } + } - var query = location.query || {}; + function tryDecode(uri, asComponent) { try { - query = clone(query); - } catch (e) {} - - var route = { - name: location.name || (record && record.name), - meta: (record && record.meta) || {}, - path: location.path || '/', - hash: location.hash || '', - query: query, - params: location.params || {}, - fullPath: getFullPath(location, stringifyQuery), - matched: record ? formatMatch(record) : [] - }; - if (redirectedFrom) { - route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery); + return asComponent ? decodeURIComponent(uri) : decodeURI(uri); + } catch (e) { + warn('malformed URI' + (asComponent ? ' component: ' : ': ') + uri); } - return Object.freeze(route) } - function clone (value) { - if (Array.isArray(value)) { - return value.map(clone) - } else if (value && typeof value === 'object') { - var res = {}; - for (var key in value) { - res[key] = clone(value[key]); - } - return res - } else { - return value - } + function isArray(test) { + return Object.prototype.toString.call(test) === "[object Array]"; } - // the starting route that represents the initial state - var START = createRoute(null, { - path: '/' - }); + // A Segment represents a segment in the original route description. + // Each Segment type provides an `eachChar` and `regex` method. + // + // The `eachChar` method invokes the callback with one or more character + // specifications. A character specification consumes one or more input + // characters. + // + // The `regex` method returns a regex fragment for the segment. If the + // segment is a dynamic of star segment, the regex fragment also includes + // a capture. + // + // A character specification contains: + // + // * `validChars`: a String with a list of all valid characters, or + // * `invalidChars`: a String with a list of all invalid characters + // * `repeat`: true if the character specification can repeat - function formatMatch (record) { - var res = []; - while (record) { - res.unshift(record); - record = record.parent; - } - return res + function StaticSegment(string) { + this.string = string; } + StaticSegment.prototype = { + eachChar: function eachChar(callback) { + var string = this.string, + ch; - function getFullPath ( - ref, - _stringifyQuery - ) { - var path = ref.path; - var query = ref.query; if ( query === void 0 ) query = {}; - var hash = ref.hash; if ( hash === void 0 ) hash = ''; + for (var i = 0, l = string.length; i < l; i++) { + ch = string.charAt(i); + callback({ validChars: ch }); + } + }, - var stringify = _stringifyQuery || stringifyQuery; - return (path || '/') + stringify(query) + hash - } + regex: function regex() { + return this.string.replace(escapeRegex, '\\$1'); + }, - function isSameRoute (a, b, onlyPath) { - if (b === START) { - return a === b - } else if (!b) { - return false - } else if (a.path && b.path) { - return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath || - a.hash === b.hash && - isObjectEqual(a.query, b.query)) - } else if (a.name && b.name) { - return ( - a.name === b.name && - (onlyPath || ( - a.hash === b.hash && - isObjectEqual(a.query, b.query) && - isObjectEqual(a.params, b.params)) - ) - ) - } else { - return false + generate: function generate() { + return this.string; } + }; + + function DynamicSegment(name) { + this.name = name; } + DynamicSegment.prototype = { + eachChar: function eachChar(callback) { + callback({ invalidChars: "/", repeat: true }); + }, - function isObjectEqual (a, b) { - if ( a === void 0 ) a = {}; - if ( b === void 0 ) b = {}; + regex: function regex() { + return "([^/]+)"; + }, - // handle null value #1566 - if (!a || !b) { return a === b } - var aKeys = Object.keys(a).sort(); - var bKeys = Object.keys(b).sort(); - if (aKeys.length !== bKeys.length) { - return false + generate: function generate(params) { + var val = params[this.name]; + return val == null ? ":" + this.name : val; } - return aKeys.every(function (key, i) { - var aVal = a[key]; - var bKey = bKeys[i]; - if (bKey !== key) { return false } - var bVal = b[key]; - // query values can be null and undefined - if (aVal == null || bVal == null) { return aVal === bVal } - // check nested equality - if (typeof aVal === 'object' && typeof bVal === 'object') { - return isObjectEqual(aVal, bVal) - } - return String(aVal) === String(bVal) - }) - } + }; - function isIncludedRoute (current, target) { - return ( - current.path.replace(trailingSlashRE, '/').indexOf( - target.path.replace(trailingSlashRE, '/') - ) === 0 && - (!target.hash || current.hash === target.hash) && - queryIncludes(current.query, target.query) - ) + function StarSegment(name) { + this.name = name; } + StarSegment.prototype = { + eachChar: function eachChar(callback) { + callback({ invalidChars: "", repeat: true }); + }, - function queryIncludes (current, target) { - for (var key in target) { - if (!(key in current)) { - return false - } + regex: function regex() { + return "(.+)"; + }, + + generate: function generate(params) { + var val = params[this.name]; + return val == null ? ":" + this.name : val; } - return true - } + }; - function handleRouteEntered (route) { - for (var i = 0; i < route.matched.length; i++) { - var record = route.matched[i]; - for (var name in record.instances) { - var instance = record.instances[name]; - var cbs = record.enteredCbs[name]; - if (!instance || !cbs) { continue } - delete record.enteredCbs[name]; - for (var i$1 = 0; i$1 < cbs.length; i$1++) { - if (!instance._isBeingDestroyed) { cbs[i$1](instance); } - } + function EpsilonSegment() {} + EpsilonSegment.prototype = { + eachChar: function eachChar() {}, + regex: function regex() { + return ""; + }, + generate: function generate() { + return ""; + } + }; + + function parse(route, names, specificity) { + // normalize route as not starting with a "/". Recognition will + // also normalize. + if (route.charAt(0) === "/") { + route = route.substr(1); + } + + var segments = route.split("/"), + results = []; + + // A routes has specificity determined by the order that its different segments + // appear in. This system mirrors how the magnitude of numbers written as strings + // works. + // Consider a number written as: "abc". An example would be "200". Any other number written + // "xyz" will be smaller than "abc" so long as `a > z`. For instance, "199" is smaller + // then "200", even though "y" and "z" (which are both 9) are larger than "0" (the value + // of (`b` and `c`). This is because the leading symbol, "2", is larger than the other + // leading symbol, "1". + // The rule is that symbols to the left carry more weight than symbols to the right + // when a number is written out as a string. In the above strings, the leading digit + // represents how many 100's are in the number, and it carries more weight than the middle + // number which represents how many 10's are in the number. + // This system of number magnitude works well for route specificity, too. A route written as + // `a/b/c` will be more specific than `x/y/z` as long as `a` is more specific than + // `x`, irrespective of the other parts. + // Because of this similarity, we assign each type of segment a number value written as a + // string. We can find the specificity of compound routes by concatenating these strings + // together, from left to right. After we have looped through all of the segments, + // we convert the string to a number. + specificity.val = ''; + + for (var i = 0, l = segments.length; i < l; i++) { + var segment = segments[i], + match; + + if (match = segment.match(/^:([^\/]+)$/)) { + results.push(new DynamicSegment(match[1])); + names.push(match[1]); + specificity.val += '3'; + } else if (match = segment.match(/^\*([^\/]+)$/)) { + results.push(new StarSegment(match[1])); + specificity.val += '2'; + names.push(match[1]); + } else if (segment === "") { + results.push(new EpsilonSegment()); + specificity.val += '1'; + } else { + results.push(new StaticSegment(segment)); + specificity.val += '4'; } } + + specificity.val = +specificity.val; + + return results; } - var View = { - name: 'RouterView', - functional: true, - props: { - name: { - type: String, - default: 'default' - } - }, - render: function render (_, ref) { - var props = ref.props; - var children = ref.children; - var parent = ref.parent; - var data = ref.data; - - // used by devtools to display a router-view badge - data.routerView = true; - - // directly use parent context's createElement() function - // so that components rendered by router-view can resolve named slots - var h = parent.$createElement; - var name = props.name; - var route = parent.$route; - var cache = parent._routerViewCache || (parent._routerViewCache = {}); - - // determine current view depth, also check to see if the tree - // has been toggled inactive but kept-alive. - var depth = 0; - var inactive = false; - while (parent && parent._routerRoot !== parent) { - var vnodeData = parent.$vnode ? parent.$vnode.data : {}; - if (vnodeData.routerView) { - depth++; - } - if (vnodeData.keepAlive && parent._directInactive && parent._inactive) { - inactive = true; - } - parent = parent.$parent; - } - data.routerViewDepth = depth; - - // render previous view if the tree is inactive and kept-alive - if (inactive) { - var cachedData = cache[name]; - var cachedComponent = cachedData && cachedData.component; - if (cachedComponent) { - // #2301 - // pass props - if (cachedData.configProps) { - fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps); - } - return h(cachedComponent, data, children) - } else { - // render previous empty view - return h() + // A State has a character specification and (`charSpec`) and a list of possible + // subsequent states (`nextStates`). + // + // If a State is an accepting state, it will also have several additional + // properties: + // + // * `regex`: A regular expression that is used to extract parameters from paths + // that reached this accepting state. + // * `handlers`: Information on how to convert the list of captures into calls + // to registered handlers with the specified parameters + // * `types`: How many static, dynamic or star segments in this route. Used to + // decide which route to use if multiple registered routes match a path. + // + // Currently, State is implemented naively by looping over `nextStates` and + // comparing a character specification against a character. A more efficient + // implementation would use a hash of keys pointing at one or more next states. + + function State(charSpec) { + this.charSpec = charSpec; + this.nextStates = []; + } + + State.prototype = { + get: function get(charSpec) { + var nextStates = this.nextStates; + + for (var i = 0, l = nextStates.length; i < l; i++) { + var child = nextStates[i]; + + var isEqual = child.charSpec.validChars === charSpec.validChars; + isEqual = isEqual && child.charSpec.invalidChars === charSpec.invalidChars; + + if (isEqual) { + return child; } } + }, - var matched = route.matched[depth]; - var component = matched && matched.components[name]; + put: function put(charSpec) { + var state; - // render empty node if no matched route or no config component - if (!matched || !component) { - cache[name] = null; - return h() + // If the character specification already exists in a child of the current + // state, just return that state. + if (state = this.get(charSpec)) { + return state; } - // cache component - cache[name] = { component: component }; + // Make a new state for the character spec + state = new State(charSpec); - // attach instance registration hook - // this will be called in the instance's injected lifecycle hooks - data.registerRouteInstance = function (vm, val) { - // val could be undefined for unregistration - var current = matched.instances[name]; - if ( - (val && current !== vm) || - (!val && current === vm) - ) { - matched.instances[name] = val; - } + // Insert the new state as a child of the current state + this.nextStates.push(state); + + // If this character specification repeats, insert the new state as a child + // of itself. Note that this will not trigger an infinite loop because each + // transition during recognition consumes a character. + if (charSpec.repeat) { + state.nextStates.push(state); } - // also register instance in prepatch hook - // in case the same component instance is reused across different routes - ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) { - matched.instances[name] = vnode.componentInstance; - }; + // Return the new state + return state; + }, - // register instance in init hook - // in case kept-alive component be actived when routes changed - data.hook.init = function (vnode) { - if (vnode.data.keepAlive && - vnode.componentInstance && - vnode.componentInstance !== matched.instances[name] - ) { - matched.instances[name] = vnode.componentInstance; - } + // Find a list of child states matching the next character + match: function match(ch) { + // DEBUG "Processing `" + ch + "`:" + var nextStates = this.nextStates, + child, + charSpec, + chars; - // if the route transition has already been confirmed then we weren't - // able to call the cbs during confirmation as the component was not - // registered yet, so we call it here. - handleRouteEntered(route); - }; + // DEBUG " " + debugState(this) + var returned = []; - var configProps = matched.props && matched.props[name]; - // save route and configProps in cache - if (configProps) { - extend(cache[name], { - route: route, - configProps: configProps - }); - fillPropsinData(component, data, route, configProps); - } + for (var i = 0, l = nextStates.length; i < l; i++) { + child = nextStates[i]; - return h(component, data, children) - } - }; + charSpec = child.charSpec; - function fillPropsinData (component, data, route, configProps) { - // resolve props - var propsToPass = data.props = resolveProps(route, configProps); - if (propsToPass) { - // clone to prevent mutation - propsToPass = data.props = extend({}, propsToPass); - // pass non-declared props as attrs - var attrs = data.attrs = data.attrs || {}; - for (var key in propsToPass) { - if (!component.props || !(key in component.props)) { - attrs[key] = propsToPass[key]; - delete propsToPass[key]; + if (typeof (chars = charSpec.validChars) !== 'undefined') { + if (chars.indexOf(ch) !== -1) { + returned.push(child); + } + } else if (typeof (chars = charSpec.invalidChars) !== 'undefined') { + if (chars.indexOf(ch) === -1) { + returned.push(child); + } } } + + return returned; } - } - function resolveProps (route, config) { - switch (typeof config) { - case 'undefined': - return - case 'object': - return config - case 'function': - return config(route) - case 'boolean': - return config ? route.params : undefined - default: - { - warn( - false, - "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " + - "expecting an object, function or boolean." - ); - } + /** IF DEBUG + , debug: function() { + var charSpec = this.charSpec, + debug = "[", + chars = charSpec.validChars || charSpec.invalidChars; + if (charSpec.invalidChars) { debug += "^"; } + debug += chars; + debug += "]"; + if (charSpec.repeat) { debug += "+"; } + return debug; } + END IF **/ + }; + + /** IF DEBUG + function debug(log) { + console.log(log); } - /* */ + function debugState(state) { + return state.nextStates.map(function(n) { + if (n.nextStates.length === 0) { return "( " + n.debug() + " [accepting] )"; } + return "( " + n.debug() + " <then> " + n.nextStates.map(function(s) { return s.debug() }).join(" or ") + " )"; + }).join(", ") + } + END IF **/ - function resolvePath ( - relative, - base, - append - ) { - var firstChar = relative.charAt(0); - if (firstChar === '/') { - return relative - } + // Sort the routes by specificity + function sortSolutions(states) { + return states.sort(function (a, b) { + return b.specificity.val - a.specificity.val; + }); + } - if (firstChar === '?' || firstChar === '#') { - return base + relative - } + function recognizeChar(states, ch) { + var nextStates = []; - var stack = base.split('/'); + for (var i = 0, l = states.length; i < l; i++) { + var state = states[i]; - // remove trailing segment if: - // - not appending - // - appending to trailing slash (last segment is empty) - if (!append || !stack[stack.length - 1]) { - stack.pop(); + nextStates = nextStates.concat(state.match(ch)); } - // resolve relative path - var segments = relative.replace(/^\//, '').split('/'); - for (var i = 0; i < segments.length; i++) { - var segment = segments[i]; - if (segment === '..') { - stack.pop(); - } else if (segment !== '.') { - stack.push(segment); - } - } + return nextStates; + } - // ensure leading slash - if (stack[0] !== '') { - stack.unshift(''); - } + var oCreate = Object.create || function (proto) { + function F() {} + F.prototype = proto; + return new F(); + }; - return stack.join('/') + function RecognizeResults(queryParams) { + this.queryParams = queryParams || {}; } + RecognizeResults.prototype = oCreate({ + splice: Array.prototype.splice, + slice: Array.prototype.slice, + push: Array.prototype.push, + length: 0, + queryParams: null + }); - function parsePath (path) { - var hash = ''; - var query = ''; + function findHandler(state, path, queryParams) { + var handlers = state.handlers, + regex = state.regex; + var captures = path.match(regex), + currentCapture = 1; + var result = new RecognizeResults(queryParams); - var hashIndex = path.indexOf('#'); - if (hashIndex >= 0) { - hash = path.slice(hashIndex); - path = path.slice(0, hashIndex); - } + for (var i = 0, l = handlers.length; i < l; i++) { + var handler = handlers[i], + names = handler.names, + params = {}; - var queryIndex = path.indexOf('?'); - if (queryIndex >= 0) { - query = path.slice(queryIndex + 1); - path = path.slice(0, queryIndex); - } + for (var j = 0, m = names.length; j < m; j++) { + params[names[j]] = captures[currentCapture++]; + } - return { - path: path, - query: query, - hash: hash + result.push({ handler: handler.handler, params: params, isDynamic: !!names.length }); } + + return result; + } + + function addSegment(currentState, segment) { + segment.eachChar(function (ch) { + var state; + + currentState = currentState.put(ch); + }); + + return currentState; } - function cleanPath (path) { - return path.replace(/\/(?:\s*\/)+/g, '/') + function decodeQueryParamPart(part) { + // http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1 + part = part.replace(/\+/gm, '%20'); + return tryDecode(part, true); } - var isarray = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; + // The main interface + + var RouteRecognizer = function RouteRecognizer() { + this.rootState = new State(); + this.names = {}; }; - /** - * Expose `pathToRegexp`. - */ - var pathToRegexp_1 = pathToRegexp; - var parse_1 = parse; - var compile_1 = compile; - var tokensToFunction_1 = tokensToFunction; - var tokensToRegExp_1 = tokensToRegExp; + RouteRecognizer.prototype = { + add: function add(routes, options) { + var currentState = this.rootState, + regex = "^", + specificity = {}, + handlers = [], + allSegments = [], + name; - /** - * The main path matching regexp utility. - * - * @type {RegExp} - */ - var PATH_REGEXP = new RegExp([ - // Match escaped characters that would otherwise appear in future matches. - // This allows the user to escape special characters that won't transform. - '(\\\\.)', - // Match Express-style parameters and un-named parameters with a prefix - // and optional suffixes. Matches appear as: - // - // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] - // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] - // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] - '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' - ].join('|'), 'g'); + var isEmpty = true; - /** - * Parse a string for the raw tokens. - * - * @param {string} str - * @param {Object=} options - * @return {!Array} - */ - function parse (str, options) { - var tokens = []; - var key = 0; - var index = 0; - var path = ''; - var defaultDelimiter = options && options.delimiter || '/'; - var res; - - while ((res = PATH_REGEXP.exec(str)) != null) { - var m = res[0]; - var escaped = res[1]; - var offset = res.index; - path += str.slice(index, offset); - index = offset + m.length; - - // Ignore already escaped sequences. - if (escaped) { - path += escaped[1]; - continue - } - - var next = str[index]; - var prefix = res[2]; - var name = res[3]; - var capture = res[4]; - var group = res[5]; - var modifier = res[6]; - var asterisk = res[7]; - - // Push the current path onto the tokens. - if (path) { - tokens.push(path); - path = ''; - } - - var partial = prefix != null && next != null && next !== prefix; - var repeat = modifier === '+' || modifier === '*'; - var optional = modifier === '?' || modifier === '*'; - var delimiter = res[2] || defaultDelimiter; - var pattern = capture || group; - - tokens.push({ - name: name || key++, - prefix: prefix || '', - delimiter: delimiter, - optional: optional, - repeat: repeat, - partial: partial, - asterisk: !!asterisk, - pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') - }); - } + for (var i = 0, l = routes.length; i < l; i++) { + var route = routes[i], + names = []; - // Match any characters still remaining. - if (index < str.length) { - path += str.substr(index); - } + var segments = parse(route.path, names, specificity); - // If the path exists, push it onto the end. - if (path) { - tokens.push(path); - } + allSegments = allSegments.concat(segments); - return tokens - } + for (var j = 0, m = segments.length; j < m; j++) { + var segment = segments[j]; - /** - * Compile a string to a template function for the path. - * - * @param {string} str - * @param {Object=} options - * @return {!function(Object=, Object=)} - */ - function compile (str, options) { - return tokensToFunction(parse(str, options), options) - } + if (segment instanceof EpsilonSegment) { + continue; + } - /** - * Prettier encoding of URI path segments. - * - * @param {string} - * @return {string} - */ - function encodeURIComponentPretty (str) { - return encodeURI(str).replace(/[\/?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) - } + isEmpty = false; - /** - * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. - * - * @param {string} - * @return {string} - */ - function encodeAsterisk (str) { - return encodeURI(str).replace(/[?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) - } + // Add a "/" for the new segment + currentState = currentState.put({ validChars: "/" }); + regex += "/"; - /** - * Expose a method for transforming tokens into the path function. - */ - function tokensToFunction (tokens, options) { - // Compile all the tokens into regexps. - var matches = new Array(tokens.length); + // Add a representation of the segment to the NFA and regex + currentState = addSegment(currentState, segment); + regex += segment.regex(); + } - // Compile all the patterns before compilation. - for (var i = 0; i < tokens.length; i++) { - if (typeof tokens[i] === 'object') { - matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)); + var handler = { handler: route.handler, names: names }; + handlers.push(handler); + } + + if (isEmpty) { + currentState = currentState.put({ validChars: "/" }); + regex += "/"; + } + + currentState.handlers = handlers; + currentState.regex = new RegExp(regex + "$"); + currentState.specificity = specificity; + + if (name = options && options.as) { + this.names[name] = { + segments: allSegments, + handlers: handlers + }; + } + }, + + handlersFor: function handlersFor(name) { + var route = this.names[name], + result = []; + if (!route) { + throw new Error("There is no route named " + name); } - } - return function (obj, opts) { - var path = ''; - var data = obj || {}; - var options = opts || {}; - var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent; + for (var i = 0, l = route.handlers.length; i < l; i++) { + result.push(route.handlers[i]); + } + + return result; + }, + + hasRoute: function hasRoute(name) { + return !!this.names[name]; + }, + + generate: function generate(name, params) { + var route = this.names[name], + output = ""; + if (!route) { + throw new Error("There is no route named " + name); + } - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; + var segments = route.segments; - if (typeof token === 'string') { - path += token; + for (var i = 0, l = segments.length; i < l; i++) { + var segment = segments[i]; - continue + if (segment instanceof EpsilonSegment) { + continue; } - var value = data[token.name]; - var segment; + output += "/"; + output += segment.generate(params); + } + + if (output.charAt(0) !== '/') { + output = '/' + output; + } - if (value == null) { - if (token.optional) { - // Prepend partial segment prefixes. - if (token.partial) { - path += token.prefix; - } + if (params && params.queryParams) { + output += this.generateQueryString(params.queryParams); + } - continue - } else { - throw new TypeError('Expected "' + token.name + '" to be defined') + return output; + }, + + generateQueryString: function generateQueryString(params) { + var pairs = []; + var keys = []; + for (var key in params) { + if (params.hasOwnProperty(key)) { + keys.push(key); + } + } + keys.sort(); + for (var i = 0, len = keys.length; i < len; i++) { + key = keys[i]; + var value = params[key]; + if (value == null) { + continue; + } + var pair = encodeURIComponent(key); + if (isArray(value)) { + for (var j = 0, l = value.length; j < l; j++) { + var arrayPair = key + '[]' + '=' + encodeURIComponent(value[j]); + pairs.push(arrayPair); } + } else { + pair += "=" + encodeURIComponent(value); + pairs.push(pair); } + } - if (isarray(value)) { - if (!token.repeat) { - throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') - } + if (pairs.length === 0) { + return ''; + } - if (value.length === 0) { - if (token.optional) { - continue - } else { - throw new TypeError('Expected "' + token.name + '" to not be empty') + return "?" + pairs.join("&"); + }, + + parseQueryString: function parseQueryString(queryString) { + var pairs = queryString.split("&"), + queryParams = {}; + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i].split('='), + key = decodeQueryParamPart(pair[0]), + keyLength = key.length, + isArray = false, + value; + if (pair.length === 1) { + value = 'true'; + } else { + //Handle arrays + if (keyLength > 2 && key.slice(keyLength - 2) === '[]') { + isArray = true; + key = key.slice(0, keyLength - 2); + if (!queryParams[key]) { + queryParams[key] = []; } } + value = pair[1] ? decodeQueryParamPart(pair[1]) : ''; + } + if (isArray) { + queryParams[key].push(value); + } else { + queryParams[key] = value; + } + } + return queryParams; + }, - for (var j = 0; j < value.length; j++) { - segment = encode(value[j]); + recognize: function recognize(path, silent) { + noWarning = silent; + var states = [this.rootState], + pathLen, + i, + l, + queryStart, + queryParams = {}, + isSlashDropped = false; + + queryStart = path.indexOf('?'); + if (queryStart !== -1) { + var queryString = path.substr(queryStart + 1, path.length); + path = path.substr(0, queryStart); + if (queryString) { + queryParams = this.parseQueryString(queryString); + } + } - if (!matches[i].test(segment)) { - throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') - } + path = tryDecode(path); + if (!path) return; - path += (j === 0 ? token.prefix : token.delimiter) + segment; - } + // DEBUG GROUP path - continue - } + if (path.charAt(0) !== "/") { + path = "/" + path; + } - segment = token.asterisk ? encodeAsterisk(value) : encode(value); + pathLen = path.length; + if (pathLen > 1 && path.charAt(pathLen - 1) === "/") { + path = path.substr(0, pathLen - 1); + isSlashDropped = true; + } - if (!matches[i].test(segment)) { - throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') + for (i = 0, l = path.length; i < l; i++) { + states = recognizeChar(states, path.charAt(i)); + if (!states.length) { + break; } + } + + // END DEBUG GROUP - path += token.prefix + segment; + var solutions = []; + for (i = 0, l = states.length; i < l; i++) { + if (states[i].handlers) { + solutions.push(states[i]); + } } - return path + states = sortSolutions(solutions); + + var state = solutions[0]; + + if (state && state.handlers) { + // if a trailing slash was dropped and a star segment is the last segment + // specified, put the trailing slash back + if (isSlashDropped && state.regex.source.slice(-5) === "(.+)$") { + path = path + "/"; + } + return findHandler(state, path, queryParams); + } } - } + }; + + RouteRecognizer.prototype.map = map; + var genQuery = RouteRecognizer.prototype.generateQueryString; + + // export default for holding the Vue reference + var exports$1 = {}; /** - * Escape a regular expression string. + * Warn stuff. * - * @param {string} str - * @return {string} + * @param {String} msg */ - function escapeString (str) { - return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') + + function warn$1(msg) { + /* istanbul ignore next */ + if (typeof console !== 'undefined') { + console.error('[vue-router] ' + msg); + } } /** - * Escape the capturing group by escaping special characters and meaning. + * Resolve a relative path. * - * @param {string} group - * @return {string} + * @param {String} base + * @param {String} relative + * @param {Boolean} append + * @return {String} */ - function escapeGroup (group) { - return group.replace(/([=!:$\/()])/g, '\\$1') + + function resolvePath(base, relative, append) { + var query = base.match(/(\?.*)$/); + if (query) { + query = query[1]; + base = base.slice(0, -query.length); + } + // a query! + if (relative.charAt(0) === '?') { + return base + relative; + } + var stack = base.split('/'); + // remove trailing segment if: + // - not appending + // - appending to trailing slash (last segment is empty) + if (!append || !stack[stack.length - 1]) { + stack.pop(); + } + // resolve relative path + var segments = relative.replace(/^\//, '').split('/'); + for (var i = 0; i < segments.length; i++) { + var segment = segments[i]; + if (segment === '.') { + continue; + } else if (segment === '..') { + stack.pop(); + } else { + stack.push(segment); + } + } + // ensure leading slash + if (stack[0] !== '') { + stack.unshift(''); + } + return stack.join('/'); } /** - * Attach the keys as a property of the regexp. + * Forgiving check for a promise * - * @param {!RegExp} re - * @param {Array} keys - * @return {!RegExp} + * @param {Object} p + * @return {Boolean} */ - function attachKeys (re, keys) { - re.keys = keys; - return re + + function isPromise(p) { + return p && typeof p.then === 'function'; } /** - * Get the flags for a regexp from the options. + * Retrive a route config field from a component instance + * OR a component contructor. * - * @param {Object} options - * @return {string} + * @param {Function|Vue} component + * @param {String} name + * @return {*} */ - function flags (options) { - return options && options.sensitive ? '' : 'i' + + function getRouteConfig(component, name) { + var options = component && (component.$options || component.options); + return options && options.route && options.route[name]; } /** - * Pull out keys from a regexp. + * Resolve an async component factory. Have to do a dirty + * mock here because of Vue core's internal API depends on + * an ID check. * - * @param {!RegExp} path - * @param {!Array} keys - * @return {!RegExp} + * @param {Object} handler + * @param {Function} cb */ - function regexpToRegexp (path, keys) { - // Use a negative lookahead to match only capturing groups. - var groups = path.source.match(/\((?!\?)/g); - - if (groups) { - for (var i = 0; i < groups.length; i++) { - keys.push({ - name: i, - prefix: null, - delimiter: null, - optional: false, - repeat: false, - partial: false, - asterisk: false, - pattern: null - }); - } - } - return attachKeys(path, keys) + var resolver = undefined; + + function resolveAsyncComponent(handler, cb) { + if (!resolver) { + resolver = { + resolve: exports$1.Vue.prototype._resolveComponent, + $options: { + components: { + _: handler.component + } + } + }; + } else { + resolver.$options.components._ = handler.component; + } + resolver.resolve('_', function (Component) { + handler.component = Component; + cb(Component); + }); } /** - * Transform an array into a regexp. + * Map the dynamic segments in a path to params. * - * @param {!Array} path - * @param {Array} keys - * @param {!Object} options - * @return {!RegExp} + * @param {String} path + * @param {Object} params + * @param {Object} query */ - function arrayToRegexp (path, keys, options) { - var parts = []; - for (var i = 0; i < path.length; i++) { - parts.push(pathToRegexp(path[i], keys, options).source); - } - - var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)); + function mapParams(path, params, query) { + if (params === undefined) params = {}; - return attachKeys(regexp, keys) + path = path.replace(/:([^\/]+)/g, function (_, key) { + var val = params[key]; + /* istanbul ignore if */ + if (!val) { + warn$1('param "' + key + '" not found when generating ' + 'path for "' + path + '" with params ' + JSON.stringify(params)); + } + return val || ''; + }); + if (query) { + path += genQuery(query); + } + return path; } - /** - * Create a path regexp from string input. - * - * @param {string} path - * @param {!Array} keys - * @param {!Object} options - * @return {!RegExp} - */ - function stringToRegexp (path, keys, options) { - return tokensToRegExp(parse(path, options), keys, options) - } + var hashRE = /#.*$/; - /** - * Expose a function for taking tokens and returning a RegExp. - * - * @param {!Array} tokens - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ - function tokensToRegExp (tokens, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; + var HTML5History = (function () { + function HTML5History(_ref) { + var root = _ref.root; + var onChange = _ref.onChange; + babelHelpers.classCallCheck(this, HTML5History); + + if (root && root !== '/') { + // make sure there's the starting slash + if (root.charAt(0) !== '/') { + root = '/' + root; + } + // remove trailing slash + this.root = root.replace(/\/$/, ''); + this.rootRE = new RegExp('^\\' + this.root); + } else { + this.root = null; + } + this.onChange = onChange; + // check base tag + var baseEl = document.querySelector('base'); + this.base = baseEl && baseEl.getAttribute('href'); } - options = options || {}; + HTML5History.prototype.start = function start() { + var _this = this; - var strict = options.strict; - var end = options.end !== false; - var route = ''; + this.listener = function (e) { + var url = location.pathname + location.search; + if (_this.root) { + url = url.replace(_this.rootRE, ''); + } + _this.onChange(url, e && e.state, location.hash); + }; + window.addEventListener('popstate', this.listener); + this.listener(); + }; - // Iterate over the tokens and create our regexp string. - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; + HTML5History.prototype.stop = function stop() { + window.removeEventListener('popstate', this.listener); + }; - if (typeof token === 'string') { - route += escapeString(token); + HTML5History.prototype.go = function go(path, replace, append) { + var url = this.formatPath(path, append); + if (replace) { + history.replaceState({}, '', url); } else { - var prefix = escapeString(token.prefix); - var capture = '(?:' + token.pattern + ')'; + // record scroll position by replacing current state + history.replaceState({ + pos: { + x: window.pageXOffset, + y: window.pageYOffset + } + }, '', location.href); + // then push new state + history.pushState({}, '', url); + } + var hashMatch = path.match(hashRE); + var hash = hashMatch && hashMatch[0]; + path = url + // strip hash so it doesn't mess up params + .replace(hashRE, '') + // remove root before matching + .replace(this.rootRE, ''); + this.onChange(path, null, hash); + }; - keys.push(token); + HTML5History.prototype.formatPath = function formatPath(path, append) { + return path.charAt(0) === '/' + // absolute path + ? this.root ? this.root + '/' + path.replace(/^\//, '') : path : resolvePath(this.base || location.pathname, path, append); + }; - if (token.repeat) { - capture += '(?:' + prefix + capture + ')*'; + return HTML5History; + })(); + + var HashHistory = (function () { + function HashHistory(_ref) { + var hashbang = _ref.hashbang; + var onChange = _ref.onChange; + babelHelpers.classCallCheck(this, HashHistory); + + this.hashbang = hashbang; + this.onChange = onChange; + } + + HashHistory.prototype.start = function start() { + var self = this; + this.listener = function () { + var path = location.hash; + var raw = path.replace(/^#!?/, ''); + // always + if (raw.charAt(0) !== '/') { + raw = '/' + raw; } - - if (token.optional) { - if (!token.partial) { - capture = '(?:' + prefix + '(' + capture + '))?'; - } else { - capture = prefix + '(' + capture + ')?'; - } - } else { - capture = prefix + '(' + capture + ')'; + var formattedPath = self.formatPath(raw); + if (formattedPath !== path) { + location.replace(formattedPath); + return; } + // determine query + // note it's possible to have queries in both the actual URL + // and the hash fragment itself. + var query = location.search && path.indexOf('?') > -1 ? '&' + location.search.slice(1) : location.search; + self.onChange(path.replace(/^#!?/, '') + query); + }; + window.addEventListener('hashchange', this.listener); + this.listener(); + }; + + HashHistory.prototype.stop = function stop() { + window.removeEventListener('hashchange', this.listener); + }; - route += capture; + HashHistory.prototype.go = function go(path, replace, append) { + path = this.formatPath(path, append); + if (replace) { + location.replace(path); + } else { + location.hash = path; } - } + }; - var delimiter = escapeString(options.delimiter || '/'); - var endsWithDelimiter = route.slice(-delimiter.length) === delimiter; + HashHistory.prototype.formatPath = function formatPath(path, append) { + var isAbsoloute = path.charAt(0) === '/'; + var prefix = '#' + (this.hashbang ? '!' : ''); + return isAbsoloute ? prefix + path : prefix + resolvePath(location.hash.replace(/^#!?/, ''), path, append); + }; - // In non-strict mode we allow a slash at the end of match. If the path to - // match already ends with a slash, we remove it for consistency. The slash - // is valid at the end of a path match, not in the middle. This is important - // in non-ending mode, where "/test/" shouldn't match "/test//route". - if (!strict) { - route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'; - } + return HashHistory; + })(); - if (end) { - route += '$'; - } else { - // In non-ending mode, we need the capturing groups to match as much as - // possible by using a positive lookahead to the end or next path segment. - route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'; + var AbstractHistory = (function () { + function AbstractHistory(_ref) { + var onChange = _ref.onChange; + babelHelpers.classCallCheck(this, AbstractHistory); + + this.onChange = onChange; + this.currentPath = '/'; } - return attachKeys(new RegExp('^' + route, flags(options)), keys) - } + AbstractHistory.prototype.start = function start() { + this.onChange('/'); + }; + + AbstractHistory.prototype.stop = function stop() { + // noop + }; + + AbstractHistory.prototype.go = function go(path, replace, append) { + path = this.currentPath = this.formatPath(path, append); + this.onChange(path); + }; + + AbstractHistory.prototype.formatPath = function formatPath(path, append) { + return path.charAt(0) === '/' ? path : resolvePath(this.currentPath, path, append); + }; + + return AbstractHistory; + })(); /** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * Determine the reusability of an existing router view. * - * @param {(string|RegExp|Array)} path - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} + * @param {Directive} view + * @param {Object} handler + * @param {Transition} transition */ - function pathToRegexp (path, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - if (path instanceof RegExp) { - return regexpToRegexp(path, /** @type {!Array} */ (keys)) + function canReuse(view, handler, transition) { + var component = view.childVM; + if (!component || !handler) { + return false; } - - if (isarray(path)) { - return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) + // important: check view.Component here because it may + // have been changed in activate hook + if (view.Component !== handler.component) { + return false; } - - return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) + var canReuseFn = getRouteConfig(component, 'canReuse'); + return typeof canReuseFn === 'boolean' ? canReuseFn : canReuseFn ? canReuseFn.call(component, { + to: transition.to, + from: transition.from + }) : true; // defaults to true } - pathToRegexp_1.parse = parse_1; - pathToRegexp_1.compile = compile_1; - pathToRegexp_1.tokensToFunction = tokensToFunction_1; - pathToRegexp_1.tokensToRegExp = tokensToRegExp_1; - - /* */ - - // $flow-disable-line - var regexpCompileCache = Object.create(null); - - function fillParams ( - path, - params, - routeMsg - ) { - params = params || {}; - try { - var filler = - regexpCompileCache[path] || - (regexpCompileCache[path] = pathToRegexp_1.compile(path)); - // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }} - // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string - if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; } + /** + * Check if a component can deactivate. + * + * @param {Directive} view + * @param {Transition} transition + * @param {Function} next + */ - return filler(params, { pretty: true }) - } catch (e) { - { - // Fix #3072 no warn if `pathMatch` is string - warn(typeof params.pathMatch === 'string', ("missing param for " + routeMsg + ": " + (e.message))); - } - return '' - } finally { - // delete the 0 if it was added - delete params[0]; + function canDeactivate(view, transition, next) { + var fromComponent = view.childVM; + var hook = getRouteConfig(fromComponent, 'canDeactivate'); + if (!hook) { + next(); + } else { + transition.callHook(hook, fromComponent, next, { + expectBoolean: true + }); } } - /* */ - - function normalizeLocation ( - raw, - current, - append, - router - ) { - var next = typeof raw === 'string' ? { path: raw } : raw; - // named target - if (next._normalized) { - return next - } else if (next.name) { - next = extend({}, raw); - var params = next.params; - if (params && typeof params === 'object') { - next.params = extend({}, params); - } - return next - } + /** + * Check if a component can activate. + * + * @param {Object} handler + * @param {Transition} transition + * @param {Function} next + */ - // relative params - if (!next.path && next.params && current) { - next = extend({}, next); - next._normalized = true; - var params$1 = extend(extend({}, current.params), next.params); - if (current.name) { - next.name = current.name; - next.params = params$1; - } else if (current.matched.length) { - var rawPath = current.matched[current.matched.length - 1].path; - next.path = fillParams(rawPath, params$1, ("path " + (current.path))); + function canActivate(handler, transition, next) { + resolveAsyncComponent(handler, function (Component) { + // have to check due to async-ness + if (transition.aborted) { + return; + } + // determine if this component can be activated + var hook = getRouteConfig(Component, 'canActivate'); + if (!hook) { + next(); } else { - warn(false, "relative params navigation requires a current route."); + transition.callHook(hook, null, next, { + expectBoolean: true + }); } - return next - } + }); + } - var parsedPath = parsePath(next.path || ''); - var basePath = (current && current.path) || '/'; - var path = parsedPath.path - ? resolvePath(parsedPath.path, basePath, append || next.append) - : basePath; - - var query = resolveQuery( - parsedPath.query, - next.query, - router && router.options.parseQuery - ); - - var hash = next.hash || parsedPath.hash; - if (hash && hash.charAt(0) !== '#') { - hash = "#" + hash; - } + /** + * Call deactivate hooks for existing router-views. + * + * @param {Directive} view + * @param {Transition} transition + * @param {Function} next + */ - return { - _normalized: true, - path: path, - query: query, - hash: hash + function deactivate(view, transition, next) { + var component = view.childVM; + var hook = getRouteConfig(component, 'deactivate'); + if (!hook) { + next(); + } else { + transition.callHooks(hook, component, next); } } - /* */ + /** + * Activate / switch component for a router-view. + * + * @param {Directive} view + * @param {Transition} transition + * @param {Number} depth + * @param {Function} [cb] + */ - // work around weird flow bug - var toTypes = [String, Object]; - var eventTypes = [String, Array]; + function activate(view, transition, depth, cb, reuse) { + var handler = transition.activateQueue[depth]; + if (!handler) { + saveChildView(view); + if (view._bound) { + view.setComponent(null); + } + cb && cb(); + return; + } - var noop = function () {}; + var Component = view.Component = handler.component; + var activateHook = getRouteConfig(Component, 'activate'); + var dataHook = getRouteConfig(Component, 'data'); + var waitForData = getRouteConfig(Component, 'waitForData'); - var warnedCustomSlot; - var warnedTagProp; - var warnedEventProp; + view.depth = depth; + view.activated = false; - var Link = { - name: 'RouterLink', - props: { - to: { - type: toTypes, - required: true - }, - tag: { - type: String, - default: 'a' - }, - custom: Boolean, - exact: Boolean, - exactPath: Boolean, - append: Boolean, - replace: Boolean, - activeClass: String, - exactActiveClass: String, - ariaCurrentValue: { - type: String, - default: 'page' - }, - event: { - type: eventTypes, - default: 'click' - } - }, - render: function render (h) { - var this$1$1 = this; - - var router = this.$router; - var current = this.$route; - var ref = router.resolve( - this.to, - current, - this.append - ); - var location = ref.location; - var route = ref.route; - var href = ref.href; - - var classes = {}; - var globalActiveClass = router.options.linkActiveClass; - var globalExactActiveClass = router.options.linkExactActiveClass; - // Support global empty active class - var activeClassFallback = - globalActiveClass == null ? 'router-link-active' : globalActiveClass; - var exactActiveClassFallback = - globalExactActiveClass == null - ? 'router-link-exact-active' - : globalExactActiveClass; - var activeClass = - this.activeClass == null ? activeClassFallback : this.activeClass; - var exactActiveClass = - this.exactActiveClass == null - ? exactActiveClassFallback - : this.exactActiveClass; - - var compareTarget = route.redirectedFrom - ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router) - : route; - - classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath); - classes[activeClass] = this.exact || this.exactPath - ? classes[exactActiveClass] - : isIncludedRoute(current, compareTarget); - - var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null; - - var handler = function (e) { - if (guardEvent(e)) { - if (this$1$1.replace) { - router.replace(location, noop); - } else { - router.push(location, noop); - } + var component = undefined; + var loading = !!(dataHook && !waitForData); + + // "reuse" is a flag passed down when the parent view is + // either reused via keep-alive or as a child of a kept-alive view. + // of course we can only reuse if the current kept-alive instance + // is of the correct type. + reuse = reuse && view.childVM && view.childVM.constructor === Component; + + if (reuse) { + // just reuse + component = view.childVM; + component.$loadingRouteData = loading; + } else { + saveChildView(view); + + // unbuild current component. this step also destroys + // and removes all nested child views. + view.unbuild(true); + + // build the new component. this will also create the + // direct child view of the current one. it will register + // itself as view.childView. + component = view.build({ + _meta: { + $loadingRouteData: loading + }, + created: function created() { + this._routerView = view; } - }; + }); - var on = { click: guardEvent }; - if (Array.isArray(this.event)) { - this.event.forEach(function (e) { - on[e] = handler; - }); - } else { - on[this.event] = handler; + // handle keep-alive. + // when a kept-alive child vm is restored, we need to + // add its cached child views into the router's view list, + // and also properly update current view's child view. + if (view.keepAlive) { + component.$loadingRouteData = loading; + var cachedChildView = component._keepAliveRouterView; + if (cachedChildView) { + view.childView = cachedChildView; + component._keepAliveRouterView = null; + } } + } - var data = { class: classes }; - - var scopedSlot = - !this.$scopedSlots.$hasNormal && - this.$scopedSlots.default && - this.$scopedSlots.default({ - href: href, - route: route, - navigate: handler, - isActive: classes[activeClass], - isExactActive: classes[exactActiveClass] - }); + // cleanup the component in case the transition is aborted + // before the component is ever inserted. + var cleanup = function cleanup() { + component.$destroy(); + }; - if (scopedSlot) { - if (!this.custom) { - !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n'); - warnedCustomSlot = true; - } - if (scopedSlot.length === 1) { - return scopedSlot[0] - } else if (scopedSlot.length > 1 || !scopedSlot.length) { - { - warn( - false, - ("<router-link> with to=\"" + (this.to) + "\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.") - ); - } - return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot) + // actually insert the component and trigger transition + var insert = function insert() { + if (reuse) { + cb && cb(); + return; + } + var router = transition.router; + if (router._rendered || router._transitionOnLoad) { + view.transition(component); + } else { + // no transition on first render, manual transition + /* istanbul ignore if */ + if (view.setCurrent) { + // 0.12 compat + view.setCurrent(component); + } else { + // 1.0 + view.childVM = component; } + component.$before(view.anchor, null, false); } + cb && cb(); + }; - { - if ('tag' in this.$options.propsData && !warnedTagProp) { - warn( - false, - "<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link." - ); - warnedTagProp = true; - } - if ('event' in this.$options.propsData && !warnedEventProp) { - warn( - false, - "<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link." - ); - warnedEventProp = true; - } + var afterData = function afterData() { + // activate the child view + if (view.childView) { + activate(view.childView, transition, depth + 1, null, reuse || view.keepAlive); } + insert(); + }; - if (this.tag === 'a') { - data.on = on; - data.attrs = { href: href, 'aria-current': ariaCurrentValue }; + // called after activation hook is resolved + var afterActivate = function afterActivate() { + view.activated = true; + if (dataHook && waitForData) { + // wait until data loaded to insert + loadData(component, transition, dataHook, afterData, cleanup); } else { - // find the first <a> child and apply listener and href - var a = findAnchor(this.$slots.default); - if (a) { - // in case the <a> is a static node - a.isStatic = false; - var aData = (a.data = extend({}, a.data)); - aData.on = aData.on || {}; - // transform existing events in both objects into arrays so we can push later - for (var event in aData.on) { - var handler$1 = aData.on[event]; - if (event in on) { - aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1]; - } - } - // append new listeners for router-link - for (var event$1 in on) { - if (event$1 in aData.on) { - // on[event] is always a function - aData.on[event$1].push(on[event$1]); - } else { - aData.on[event$1] = handler; - } - } - - var aAttrs = (a.data.attrs = extend({}, a.data.attrs)); - aAttrs.href = href; - aAttrs['aria-current'] = ariaCurrentValue; - } else { - // doesn't have <a> child, apply listener to self - data.on = on; + // load data and insert at the same time + if (dataHook) { + loadData(component, transition, dataHook); } + afterData(); } + }; - return h(this.tag, data, this.$slots.default) + if (activateHook) { + transition.callHooks(activateHook, component, afterActivate, { + cleanup: cleanup, + postActivate: true + }); + } else { + afterActivate(); } - }; + } - function guardEvent (e) { - // don't redirect with control keys - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return } - // don't redirect when preventDefault called - if (e.defaultPrevented) { return } - // don't redirect on right click - if (e.button !== undefined && e.button !== 0) { return } - // don't redirect if `target="_blank"` - if (e.currentTarget && e.currentTarget.getAttribute) { - var target = e.currentTarget.getAttribute('target'); - if (/\b_blank\b/i.test(target)) { return } - } - // this may be a Weex event which doesn't have this method - if (e.preventDefault) { - e.preventDefault(); + /** + * Reuse a view, just reload data if necessary. + * + * @param {Directive} view + * @param {Transition} transition + */ + + function reuse(view, transition) { + var component = view.childVM; + var dataHook = getRouteConfig(component, 'data'); + if (dataHook) { + loadData(component, transition, dataHook); } - return true } - function findAnchor (children) { - if (children) { - var child; - for (var i = 0; i < children.length; i++) { - child = children[i]; - if (child.tag === 'a') { - return child + /** + * Asynchronously load and apply data to component. + * + * @param {Vue} component + * @param {Transition} transition + * @param {Function} hook + * @param {Function} cb + * @param {Function} cleanup + */ + + function loadData(component, transition, hook, cb, cleanup) { + component.$loadingRouteData = true; + transition.callHooks(hook, component, function () { + component.$loadingRouteData = false; + component.$emit('route-data-loaded', component); + cb && cb(); + }, { + cleanup: cleanup, + postActivate: true, + processData: function processData(data) { + // handle promise sugar syntax + var promises = []; + if (isPlainObject(data)) { + Object.keys(data).forEach(function (key) { + var val = data[key]; + if (isPromise(val)) { + promises.push(val.then(function (resolvedVal) { + component.$set(key, resolvedVal); + })); + } else { + component.$set(key, val); + } + }); } - if (child.children && (child = findAnchor(child.children))) { - return child + if (promises.length) { + return promises[0].constructor.all(promises); } } - } + }); } - var _Vue; + /** + * Save the child view for a kept-alive view so that + * we can restore it when it is switched back to. + * + * @param {Directive} view + */ + + function saveChildView(view) { + if (view.keepAlive && view.childVM && view.childView) { + view.childVM._keepAliveRouterView = view.childView; + } + view.childView = null; + } - function install (Vue) { - if (install.installed && _Vue === Vue) { return } - install.installed = true; + /** + * Check plain object. + * + * @param {*} val + */ - _Vue = Vue; + function isPlainObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; + } - var isDef = function (v) { return v !== undefined; }; + /** + * A RouteTransition object manages the pipeline of a + * router-view switching process. This is also the object + * passed into user route hooks. + * + * @param {Router} router + * @param {Route} to + * @param {Route} from + */ - var registerInstance = function (vm, callVal) { - var i = vm.$options._parentVnode; - if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) { - i(vm, callVal); + var RouteTransition = (function () { + function RouteTransition(router, to, from) { + babelHelpers.classCallCheck(this, RouteTransition); + + this.router = router; + this.to = to; + this.from = from; + this.next = null; + this.aborted = false; + this.done = false; + } + + /** + * Abort current transition and return to previous location. + */ + + RouteTransition.prototype.abort = function abort() { + if (!this.aborted) { + this.aborted = true; + // if the root path throws an error during validation + // on initial load, it gets caught in an infinite loop. + var abortingOnLoad = !this.from.path && this.to.path === '/'; + if (!abortingOnLoad) { + this.router.replace(this.from.path || '/'); + } } }; - Vue.mixin({ - beforeCreate: function beforeCreate () { - if (isDef(this.$options.router)) { - this._routerRoot = this; - this._router = this.$options.router; - this._router.init(this); - Vue.util.defineReactive(this, '_route', this._router.history.current); + /** + * Abort current transition and redirect to a new location. + * + * @param {String} path + */ + + RouteTransition.prototype.redirect = function redirect(path) { + if (!this.aborted) { + this.aborted = true; + if (typeof path === 'string') { + path = mapParams(path, this.to.params, this.to.query); } else { - this._routerRoot = (this.$parent && this.$parent._routerRoot) || this; + path.params = path.params || this.to.params; + path.query = path.query || this.to.query; } - registerInstance(this, this); - }, - destroyed: function destroyed () { - registerInstance(this); + this.router.replace(path); } - }); - - Object.defineProperty(Vue.prototype, '$router', { - get: function get () { return this._routerRoot._router } - }); - - Object.defineProperty(Vue.prototype, '$route', { - get: function get () { return this._routerRoot._route } - }); - - Vue.component('RouterView', View); - Vue.component('RouterLink', Link); - - var strats = Vue.config.optionMergeStrategies; - // use the same hook merging strategy for route hooks - strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created; - } - - /* */ + }; - var inBrowser = typeof window !== 'undefined'; + /** + * A router view transition's pipeline can be described as + * follows, assuming we are transitioning from an existing + * <router-view> chain [Component A, Component B] to a new + * chain [Component A, Component C]: + * + * A A + * | => | + * B C + * + * 1. Reusablity phase: + * -> canReuse(A, A) + * -> canReuse(B, C) + * -> determine new queues: + * - deactivation: [B] + * - activation: [C] + * + * 2. Validation phase: + * -> canDeactivate(B) + * -> canActivate(C) + * + * 3. Activation phase: + * -> deactivate(B) + * -> activate(C) + * + * Each of these steps can be asynchronous, and any + * step can potentially abort the transition. + * + * @param {Function} cb + */ + + RouteTransition.prototype.start = function start(cb) { + var transition = this; + + // determine the queue of views to deactivate + var deactivateQueue = []; + var view = this.router._rootView; + while (view) { + deactivateQueue.unshift(view); + view = view.childView; + } + var reverseDeactivateQueue = deactivateQueue.slice().reverse(); + + // determine the queue of route handlers to activate + var activateQueue = this.activateQueue = toArray(this.to.matched).map(function (match) { + return match.handler; + }); - /* */ + // 1. Reusability phase + var i = undefined, + reuseQueue = undefined; + for (i = 0; i < reverseDeactivateQueue.length; i++) { + if (!canReuse(reverseDeactivateQueue[i], activateQueue[i], transition)) { + break; + } + } + if (i > 0) { + reuseQueue = reverseDeactivateQueue.slice(0, i); + deactivateQueue = reverseDeactivateQueue.slice(i).reverse(); + activateQueue = activateQueue.slice(i); + } - function createRouteMap ( - routes, - oldPathList, - oldPathMap, - oldNameMap, - parentRoute - ) { - // the path list is used to control path matching priority - var pathList = oldPathList || []; - // $flow-disable-line - var pathMap = oldPathMap || Object.create(null); - // $flow-disable-line - var nameMap = oldNameMap || Object.create(null); + // 2. Validation phase + transition.runQueue(deactivateQueue, canDeactivate, function () { + transition.runQueue(activateQueue, canActivate, function () { + transition.runQueue(deactivateQueue, deactivate, function () { + // 3. Activation phase - routes.forEach(function (route) { - addRouteRecord(pathList, pathMap, nameMap, route, parentRoute); - }); + // Update router current route + transition.router._onTransitionValidated(transition); - // ensure wildcard routes are always at the end - for (var i = 0, l = pathList.length; i < l; i++) { - if (pathList[i] === '*') { - pathList.push(pathList.splice(i, 1)[0]); - l--; - i--; - } - } + // trigger reuse for all reused views + reuseQueue && reuseQueue.forEach(function (view) { + return reuse(view, transition); + }); - { - // warn if routes do not include leading slashes - var found = pathList - // check for missing leading slash - .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; }); + // the root of the chain that needs to be replaced + // is the top-most non-reusable view. + if (deactivateQueue.length) { + var _view = deactivateQueue[deactivateQueue.length - 1]; + var depth = reuseQueue ? reuseQueue.length : 0; + activate(_view, transition, depth, cb); + } else { + cb(); + } + }); + }); + }); + }; - if (found.length > 0) { - var pathNames = found.map(function (path) { return ("- " + path); }).join('\n'); - warn(false, ("Non-nested routes must include a leading slash character. Fix the following routes: \n" + pathNames)); + /** + * Asynchronously and sequentially apply a function to a + * queue. + * + * @param {Array} queue + * @param {Function} fn + * @param {Function} cb + */ + + RouteTransition.prototype.runQueue = function runQueue(queue, fn, cb) { + var transition = this; + step(0); + function step(index) { + if (index >= queue.length) { + cb(); + } else { + fn(queue[index], transition, function () { + step(index + 1); + }); + } } - } + }; - return { - pathList: pathList, - pathMap: pathMap, - nameMap: nameMap - } - } + /** + * Call a user provided route transition hook and handle + * the response (e.g. if the user returns a promise). + * + * If the user neither expects an argument nor returns a + * promise, the hook is assumed to be synchronous. + * + * @param {Function} hook + * @param {*} [context] + * @param {Function} [cb] + * @param {Object} [options] + * - {Boolean} expectBoolean + * - {Boolean} postActive + * - {Function} processData + * - {Function} cleanup + */ + + RouteTransition.prototype.callHook = function callHook(hook, context, cb) { + var _ref = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; + + var _ref$expectBoolean = _ref.expectBoolean; + var expectBoolean = _ref$expectBoolean === undefined ? false : _ref$expectBoolean; + var _ref$postActivate = _ref.postActivate; + var postActivate = _ref$postActivate === undefined ? false : _ref$postActivate; + var processData = _ref.processData; + var cleanup = _ref.cleanup; + + var transition = this; + var nextCalled = false; + + // abort the transition + var abort = function abort() { + cleanup && cleanup(); + transition.abort(); + }; - function addRouteRecord ( - pathList, - pathMap, - nameMap, - route, - parent, - matchAs - ) { - var path = route.path; - var name = route.name; - { - assert(path != null, "\"path\" is required in a route configuration."); - assert( - typeof route.component !== 'string', - "route config \"component\" for path: " + (String( - path || name - )) + " cannot be a " + "string id. Use an actual component instead." - ); - - warn( - // eslint-disable-next-line no-control-regex - !/[^\u0000-\u007F]+/.test(path), - "Route with path \"" + path + "\" contains unencoded characters, make sure " + - "your path is correctly encoded before passing it to the router. Use " + - "encodeURI to encode static segments of your path." - ); - } + // handle errors + var onError = function onError(err) { + postActivate ? next() : abort(); + if (err && !transition.router._suppress) { + warn$1('Uncaught error during transition: '); + throw err instanceof Error ? err : new Error(err); + } + }; - var pathToRegexpOptions = - route.pathToRegexpOptions || {}; - var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict); + // since promise swallows errors, we have to + // throw it in the next tick... + var onPromiseError = function onPromiseError(err) { + try { + onError(err); + } catch (e) { + setTimeout(function () { + throw e; + }, 0); + } + }; - if (typeof route.caseSensitive === 'boolean') { - pathToRegexpOptions.sensitive = route.caseSensitive; - } + // advance the transition to the next step + var next = function next() { + if (nextCalled) { + warn$1('transition.next() should be called only once.'); + return; + } + nextCalled = true; + if (transition.aborted) { + cleanup && cleanup(); + return; + } + cb && cb(); + }; - var record = { - path: normalizedPath, - regex: compileRouteRegex(normalizedPath, pathToRegexpOptions), - components: route.components || { default: route.component }, - alias: route.alias - ? typeof route.alias === 'string' - ? [route.alias] - : route.alias - : [], - instances: {}, - enteredCbs: {}, - name: name, - parent: parent, - matchAs: matchAs, - redirect: route.redirect, - beforeEnter: route.beforeEnter, - meta: route.meta || {}, - props: - route.props == null - ? {} - : route.components - ? route.props - : { default: route.props } - }; + var nextWithBoolean = function nextWithBoolean(res) { + if (typeof res === 'boolean') { + res ? next() : abort(); + } else if (isPromise(res)) { + res.then(function (ok) { + ok ? next() : abort(); + }, onPromiseError); + } else if (!hook.length) { + next(); + } + }; - if (route.children) { - // Warn if route is named, does not redirect and has a default child route. - // If users navigate to this route by name, the default child will - // not be rendered (GH Issue #629) - { - if ( - route.name && - !route.redirect && - route.children.some(function (child) { return /^\/?$/.test(child.path); }) - ) { - warn( - false, - "Named Route '" + (route.name) + "' has a default child route. " + - "When navigating to this named route (:to=\"{name: '" + (route.name) + "'}\"), " + - "the default child route will not be rendered. Remove the name from " + - "this route and use the name of the default child route for named " + - "links instead." - ); - } - } - route.children.forEach(function (child) { - var childMatchAs = matchAs - ? cleanPath((matchAs + "/" + (child.path))) - : undefined; - addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs); - }); - } + var nextWithData = function nextWithData(data) { + var res = undefined; + try { + res = processData(data); + } catch (err) { + return onError(err); + } + if (isPromise(res)) { + res.then(next, onPromiseError); + } else { + next(); + } + }; - if (!pathMap[record.path]) { - pathList.push(record.path); - pathMap[record.path] = record; - } + // expose a clone of the transition object, so that each + // hook gets a clean copy and prevent the user from + // messing with the internals. + var exposed = { + to: transition.to, + from: transition.from, + abort: abort, + next: processData ? nextWithData : next, + redirect: function redirect() { + transition.redirect.apply(transition, arguments); + } + }; - if (route.alias !== undefined) { - var aliases = Array.isArray(route.alias) ? route.alias : [route.alias]; - for (var i = 0; i < aliases.length; ++i) { - var alias = aliases[i]; - if (alias === path) { - warn( - false, - ("Found an alias with the same value as the path: \"" + path + "\". You have to remove that alias. It will be ignored in development.") - ); - // skip in dev to make it work - continue - } - - var aliasRoute = { - path: alias, - children: route.children - }; - addRouteRecord( - pathList, - pathMap, - nameMap, - aliasRoute, - parent, - record.path || '/' // matchAs - ); + // actually call the hook + var res = undefined; + try { + res = hook.call(context, exposed); + } catch (err) { + return onError(err); + } + + if (expectBoolean) { + // boolean hooks + nextWithBoolean(res); + } else if (isPromise(res)) { + // promise + if (processData) { + res.then(nextWithData, onPromiseError); + } else { + res.then(next, onPromiseError); + } + } else if (processData && isPlainOjbect(res)) { + // data promise sugar + nextWithData(res); + } else if (!hook.length) { + next(); } - } + }; - if (name) { - if (!nameMap[name]) { - nameMap[name] = record; - } else if (!matchAs) { - warn( - false, - "Duplicate named routes definition: " + - "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }" - ); + /** + * Call a single hook or an array of async hooks in series. + * + * @param {Array} hooks + * @param {*} context + * @param {Function} cb + * @param {Object} [options] + */ + + RouteTransition.prototype.callHooks = function callHooks(hooks, context, cb, options) { + var _this = this; + + if (Array.isArray(hooks)) { + this.runQueue(hooks, function (hook, _, next) { + if (!_this.aborted) { + _this.callHook(hook, context, next, options); + } + }, cb); + } else { + this.callHook(hooks, context, cb, options); } - } - } + }; - function compileRouteRegex ( - path, - pathToRegexpOptions - ) { - var regex = pathToRegexp_1(path, [], pathToRegexpOptions); - { - var keys = Object.create(null); - regex.keys.forEach(function (key) { - warn( - !keys[key.name], - ("Duplicate param keys in route with path: \"" + path + "\"") - ); - keys[key.name] = true; - }); - } - return regex - } + return RouteTransition; + })(); - function normalizePath ( - path, - parent, - strict - ) { - if (!strict) { path = path.replace(/\/$/, ''); } - if (path[0] === '/') { return path } - if (parent == null) { return path } - return cleanPath(((parent.path) + "/" + path)) + function isPlainOjbect(val) { + return Object.prototype.toString.call(val) === '[object Object]'; } - /* */ - - - - function createMatcher ( - routes, - router - ) { - var ref = createRouteMap(routes); - var pathList = ref.pathList; - var pathMap = ref.pathMap; - var nameMap = ref.nameMap; - - function addRoutes (routes) { - createRouteMap(routes, pathList, pathMap, nameMap); - } - - function addRoute (parentOrRoute, route) { - var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined; - // $flow-disable-line - createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent); - - // add aliases of parent - if (parent && parent.alias.length) { - createRouteMap( - // $flow-disable-line route is defined if parent is - parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }), - pathList, - pathMap, - nameMap, - parent - ); - } - } + function toArray(val) { + return val ? Array.prototype.slice.call(val) : []; + } - function getRoutes () { - return pathList.map(function (path) { return pathMap[path]; }) - } + var internalKeysRE = /^(component|subRoutes|fullPath)$/; - function match ( - raw, - currentRoute, - redirectedFrom - ) { - var location = normalizeLocation(raw, currentRoute, false, router); - var name = location.name; + /** + * Route Context Object + * + * @param {String} path + * @param {Router} router + */ - if (name) { - var record = nameMap[name]; - { - warn(record, ("Route with name '" + name + "' does not exist")); - } - if (!record) { return _createRoute(null, location) } - var paramNames = record.regex.keys - .filter(function (key) { return !key.optional; }) - .map(function (key) { return key.name; }); + var Route = function Route(path, router) { + var _this = this; - if (typeof location.params !== 'object') { - location.params = {}; - } + babelHelpers.classCallCheck(this, Route); - if (currentRoute && typeof currentRoute.params === 'object') { - for (var key in currentRoute.params) { - if (!(key in location.params) && paramNames.indexOf(key) > -1) { - location.params[key] = currentRoute.params[key]; - } + var matched = router._recognizer.recognize(path); + if (matched) { + // copy all custom fields from route configs + [].forEach.call(matched, function (match) { + for (var key in match.handler) { + if (!internalKeysRE.test(key)) { + _this[key] = match.handler[key]; } } - - location.path = fillParams(record.path, location.params, ("named route \"" + name + "\"")); - return _createRoute(record, location, redirectedFrom) - } else if (location.path) { - location.params = {}; - for (var i = 0; i < pathList.length; i++) { - var path = pathList[i]; - var record$1 = pathMap[path]; - if (matchRoute(record$1.regex, location.path, location.params)) { - return _createRoute(record$1, location, redirectedFrom) + }); + // set query and params + this.query = matched.queryParams; + this.params = [].reduce.call(matched, function (prev, cur) { + if (cur.params) { + for (var key in cur.params) { + prev[key] = cur.params[key]; } } - } - // no match - return _createRoute(null, location) - } + return prev; + }, {}); + } + // expose path and router + this.path = path; + // for internal use + this.matched = matched || router._notFoundHandler; + // internal reference to router + Object.defineProperty(this, 'router', { + enumerable: false, + value: router + }); + // Important: freeze self to prevent observation + Object.freeze(this); + }; - function redirect ( - record, - location - ) { - var originalRedirect = record.redirect; - var redirect = typeof originalRedirect === 'function' - ? originalRedirect(createRoute(record, location, null, router)) - : originalRedirect; - - if (typeof redirect === 'string') { - redirect = { path: redirect }; - } - - if (!redirect || typeof redirect !== 'object') { - { - warn( - false, ("invalid redirect option: " + (JSON.stringify(redirect))) - ); - } - return _createRoute(null, location) - } - - var re = redirect; - var name = re.name; - var path = re.path; - var query = location.query; - var hash = location.hash; - var params = location.params; - query = re.hasOwnProperty('query') ? re.query : query; - hash = re.hasOwnProperty('hash') ? re.hash : hash; - params = re.hasOwnProperty('params') ? re.params : params; - - if (name) { - // resolved named direct - var targetRecord = nameMap[name]; - { - assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found.")); - } - return match({ - _normalized: true, - name: name, - query: query, - hash: hash, - params: params - }, undefined, location) - } else if (path) { - // 1. resolve relative redirect - var rawPath = resolveRecordPath(path, record); - // 2. resolve params - var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\"")); - // 3. rematch with existing query and hash - return match({ - _normalized: true, - path: resolvedPath, - query: query, - hash: hash - }, undefined, location) - } else { - { - warn(false, ("invalid redirect option: " + (JSON.stringify(redirect)))); + function applyOverride (Vue) { + var _Vue$util = Vue.util; + var extend = _Vue$util.extend; + var isArray = _Vue$util.isArray; + var defineReactive = _Vue$util.defineReactive; + + // override Vue's init and destroy process to keep track of router instances + var init = Vue.prototype._init; + Vue.prototype._init = function (options) { + options = options || {}; + var root = options._parent || options.parent || this; + var router = root.$router; + var route = root.$route; + if (router) { + // expose router + this.$router = router; + router._children.push(this); + /* istanbul ignore if */ + if (this._defineMeta) { + // 0.12 + this._defineMeta('$route', route); + } else { + // 1.0 + defineReactive(this, '$route', route); } - return _createRoute(null, location) } - } + init.call(this, options); + }; - function alias ( - record, - location, - matchAs - ) { - var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\"")); - var aliasedMatch = match({ - _normalized: true, - path: aliasedPath - }); - if (aliasedMatch) { - var matched = aliasedMatch.matched; - var aliasedRecord = matched[matched.length - 1]; - location.params = aliasedMatch.params; - return _createRoute(aliasedRecord, location) - } - return _createRoute(null, location) - } - - function _createRoute ( - record, - location, - redirectedFrom - ) { - if (record && record.redirect) { - return redirect(record, redirectedFrom || location) + var destroy = Vue.prototype._destroy; + Vue.prototype._destroy = function () { + if (!this._isBeingDestroyed && this.$router) { + this.$router._children.$remove(this); } - if (record && record.matchAs) { - return alias(record, location, record.matchAs) - } - return createRoute(record, location, redirectedFrom, router) - } - - return { - match: match, - addRoute: addRoute, - getRoutes: getRoutes, - addRoutes: addRoutes - } - } - - function matchRoute ( - regex, - path, - params - ) { - var m = path.match(regex); - - if (!m) { - return false - } else if (!params) { - return true - } + destroy.apply(this, arguments); + }; - for (var i = 1, len = m.length; i < len; ++i) { - var key = regex.keys[i - 1]; - if (key) { - // Fix #1994: using * with props: true generates a param named 0 - params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i]; - } + // 1.0 only: enable route mixins + var strats = Vue.config.optionMergeStrategies; + var hooksToMergeRE = /^(data|activate|deactivate)$/; + + if (strats) { + strats.route = function (parentVal, childVal) { + if (!childVal) return parentVal; + if (!parentVal) return childVal; + var ret = {}; + extend(ret, parentVal); + for (var key in childVal) { + var a = ret[key]; + var b = childVal[key]; + // for data, activate and deactivate, we need to merge them into + // arrays similar to lifecycle hooks. + if (a && hooksToMergeRE.test(key)) { + ret[key] = (isArray(a) ? a : [a]).concat(b); + } else { + ret[key] = b; + } + } + return ret; + }; } - - return true - } - - function resolveRecordPath (path, record) { - return resolvePath(path, record.parent ? record.parent.path : '/', true) } - /* */ + function View (Vue) { - // use User Timing api (if present) for more accurate key precision - var Time = - inBrowser && window.performance && window.performance.now - ? window.performance - : Date; + var _ = Vue.util; + var componentDef = + // 0.12 + Vue.directive('_component') || + // 1.0 + Vue.internalDirectives.component; + // <router-view> extends the internal component directive + var viewDef = _.extend({}, componentDef); - function genStateKey () { - return Time.now().toFixed(3) - } - - var _key = genStateKey(); - - function getStateKey () { - return _key - } - - function setStateKey (key) { - return (_key = key) - } + // with some overrides + _.extend(viewDef, { - /* */ + _isRouterView: true, - var positionStore = Object.create(null); - - function setupScroll () { - // Prevent browser scroll behavior on History popstate - if ('scrollRestoration' in window.history) { - window.history.scrollRestoration = 'manual'; - } - // Fix for #1585 for Firefox - // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678 - // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with - // window.location.protocol + '//' + window.location.host - // location.host contains the port and location.hostname doesn't - var protocolAndPath = window.location.protocol + '//' + window.location.host; - var absolutePath = window.location.href.replace(protocolAndPath, ''); - // preserve existing history state as it could be overriden by the user - var stateCopy = extend({}, window.history.state); - stateCopy.key = getStateKey(); - window.history.replaceState(stateCopy, '', absolutePath); - window.addEventListener('popstate', handlePopState); - return function () { - window.removeEventListener('popstate', handlePopState); - } - } - - function handleScroll ( - router, - to, - from, - isPop - ) { - if (!router.app) { - return - } - - var behavior = router.options.scrollBehavior; - if (!behavior) { - return - } + bind: function bind() { + var route = this.vm.$route; + /* istanbul ignore if */ + if (!route) { + warn$1('<router-view> can only be used inside a ' + 'router-enabled app.'); + return; + } + // force dynamic directive so v-component doesn't + // attempt to build right now + this._isDynamicLiteral = true; + // finally, init by delegating to v-component + componentDef.bind.call(this); + + // locate the parent view + var parentView = undefined; + var parent = this.vm; + while (parent) { + if (parent._routerView) { + parentView = parent._routerView; + break; + } + parent = parent.$parent; + } + if (parentView) { + // register self as a child of the parent view, + // instead of activating now. This is so that the + // child's activate hook is called after the + // parent's has resolved. + this.parentView = parentView; + parentView.childView = this; + } else { + // this is the root view! + var router = route.router; + router._rootView = this; + } - { - assert(typeof behavior === 'function', "scrollBehavior must be a function"); - } + // handle late-rendered view + // two possibilities: + // 1. root view rendered after transition has been + // validated; + // 2. child view rendered after parent view has been + // activated. + var transition = route.router._currentTransition; + if (!parentView && transition.done || parentView && parentView.activated) { + var depth = parentView ? parentView.depth + 1 : 0; + activate(this, transition, depth); + } + }, - // wait until re-render finishes before scrolling - router.app.$nextTick(function () { - var position = getScrollPosition(); - var shouldScroll = behavior.call( - router, - to, - from, - isPop ? position : null - ); - - if (!shouldScroll) { - return - } - - if (typeof shouldScroll.then === 'function') { - shouldScroll - .then(function (shouldScroll) { - scrollToPosition((shouldScroll), position); - }) - .catch(function (err) { - { - assert(false, err.toString()); - } - }); - } else { - scrollToPosition(shouldScroll, position); + unbind: function unbind() { + if (this.parentView) { + this.parentView.childView = null; + } + componentDef.unbind.call(this); } }); - } - - function saveScrollPosition () { - var key = getStateKey(); - if (key) { - positionStore[key] = { - x: window.pageXOffset, - y: window.pageYOffset - }; - } - } - function handlePopState (e) { - saveScrollPosition(); - if (e.state && e.state.key) { - setStateKey(e.state.key); - } - } - - function getScrollPosition () { - var key = getStateKey(); - if (key) { - return positionStore[key] - } - } - - function getElementPosition (el, offset) { - var docEl = document.documentElement; - var docRect = docEl.getBoundingClientRect(); - var elRect = el.getBoundingClientRect(); - return { - x: elRect.left - docRect.left - offset.x, - y: elRect.top - docRect.top - offset.y - } - } - - function isValidPosition (obj) { - return isNumber(obj.x) || isNumber(obj.y) - } - - function normalizePosition (obj) { - return { - x: isNumber(obj.x) ? obj.x : window.pageXOffset, - y: isNumber(obj.y) ? obj.y : window.pageYOffset - } - } - - function normalizeOffset (obj) { - return { - x: isNumber(obj.x) ? obj.x : 0, - y: isNumber(obj.y) ? obj.y : 0 - } - } - - function isNumber (v) { - return typeof v === 'number' - } - - var hashStartsWithNumberRE = /^#\d/; - - function scrollToPosition (shouldScroll, position) { - var isObject = typeof shouldScroll === 'object'; - if (isObject && typeof shouldScroll.selector === 'string') { - // getElementById would still fail if the selector contains a more complicated query like #main[data-attr] - // but at the same time, it doesn't make much sense to select an element with an id and an extra selector - var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line - ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line - : document.querySelector(shouldScroll.selector); - - if (el) { - var offset = - shouldScroll.offset && typeof shouldScroll.offset === 'object' - ? shouldScroll.offset - : {}; - offset = normalizeOffset(offset); - position = getElementPosition(el, offset); - } else if (isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - } else if (isObject && isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - - if (position) { - // $flow-disable-line - if ('scrollBehavior' in document.documentElement.style) { - window.scrollTo({ - left: position.x, - top: position.y, - // $flow-disable-line - behavior: shouldScroll.behavior + Vue.elementDirective('router-view', viewDef); + } + + var trailingSlashRE = /\/$/; + var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; + var queryStringRE = /\?.*$/; + + // install v-link, which provides navigation support for + // HTML5 history mode + function Link (Vue) { + var _Vue$util = Vue.util; + var _bind = _Vue$util.bind; + var isObject = _Vue$util.isObject; + var addClass = _Vue$util.addClass; + var removeClass = _Vue$util.removeClass; + + var onPriority = Vue.directive('on').priority; + var LINK_UPDATE = '__vue-router-link-update__'; + + var activeId = 0; + + Vue.directive('link-active', { + priority: 9999, + bind: function bind() { + var _this = this; + + var id = String(activeId++); + // collect v-links contained within this element. + // we need do this here before the parent-child relationship + // gets messed up by terminal directives (if, for, components) + var childLinks = this.el.querySelectorAll('[v-link]'); + for (var i = 0, l = childLinks.length; i < l; i++) { + var link = childLinks[i]; + var existingId = link.getAttribute(LINK_UPDATE); + var value = existingId ? existingId + ',' + id : id; + // leave a mark on the link element which can be persisted + // through fragment clones. + link.setAttribute(LINK_UPDATE, value); + } + this.vm.$on(LINK_UPDATE, this.cb = function (link, path) { + if (link.activeIds.indexOf(id) > -1) { + link.updateClasses(path, _this.el); + } }); - } else { - window.scrollTo(position.x, position.y); - } - } - } - - /* */ - - var supportsPushState = - inBrowser && - (function () { - var ua = window.navigator.userAgent; - - if ( - (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && - ua.indexOf('Mobile Safari') !== -1 && - ua.indexOf('Chrome') === -1 && - ua.indexOf('Windows Phone') === -1 - ) { - return false - } - - return window.history && typeof window.history.pushState === 'function' - })(); - - function pushState (url, replace) { - saveScrollPosition(); - // try...catch the pushState call to get around Safari - // DOM Exception 18 where it limits to 100 pushState calls - var history = window.history; - try { - if (replace) { - // preserve existing history state as it could be overriden by the user - var stateCopy = extend({}, history.state); - stateCopy.key = getStateKey(); - history.replaceState(stateCopy, '', url); - } else { - history.pushState({ key: setStateKey(genStateKey()) }, '', url); + }, + unbind: function unbind() { + this.vm.$off(LINK_UPDATE, this.cb); } - } catch (e) { - window.location[replace ? 'replace' : 'assign'](url); - } - } - - function replaceState (url) { - pushState(url, true); - } - - // When changing thing, also edit router.d.ts - var NavigationFailureType = { - redirected: 2, - aborted: 4, - cancelled: 8, - duplicated: 16 - }; - - function createNavigationRedirectedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.redirected, - ("Redirected when going from \"" + (from.fullPath) + "\" to \"" + (stringifyRoute( - to - )) + "\" via a navigation guard.") - ) - } - - function createNavigationDuplicatedError (from, to) { - var error = createRouterError( - from, - to, - NavigationFailureType.duplicated, - ("Avoided redundant navigation to current location: \"" + (from.fullPath) + "\".") - ); - // backwards compatible with the first introduction of Errors - error.name = 'NavigationDuplicated'; - return error - } - - function createNavigationCancelledError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.cancelled, - ("Navigation cancelled from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" with a new navigation.") - ) - } - - function createNavigationAbortedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.aborted, - ("Navigation aborted from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" via a navigation guard.") - ) - } - - function createRouterError (from, to, type, message) { - var error = new Error(message); - error._isRouter = true; - error.from = from; - error.to = to; - error.type = type; - - return error - } - - var propertiesToLog = ['params', 'query', 'hash']; - - function stringifyRoute (to) { - if (typeof to === 'string') { return to } - if ('path' in to) { return to.path } - var location = {}; - propertiesToLog.forEach(function (key) { - if (key in to) { location[key] = to[key]; } }); - return JSON.stringify(location, null, 2) - } - function isError (err) { - return Object.prototype.toString.call(err).indexOf('Error') > -1 - } + Vue.directive('link', { + priority: onPriority - 2, - function isNavigationFailure (err, errorType) { - return ( - isError(err) && - err._isRouter && - (errorType == null || err.type === errorType) - ) - } - - /* */ - - function runQueue (queue, fn, cb) { - var step = function (index) { - if (index >= queue.length) { - cb(); - } else { - if (queue[index]) { - fn(queue[index], function () { - step(index + 1); - }); - } else { - step(index + 1); + bind: function bind() { + var vm = this.vm; + /* istanbul ignore if */ + if (!vm.$route) { + warn$1('v-link can only be used inside a router-enabled app.'); + return; } - } - }; - step(0); - } - - /* */ - - function resolveAsyncComponents (matched) { - return function (to, from, next) { - var hasAsync = false; - var pending = 0; - var error = null; - - flatMapComponents(matched, function (def, _, match, key) { - // if it's a function and doesn't have cid attached, - // assume it's an async component resolve function. - // we are not using Vue's default async resolving mechanism because - // we want to halt the navigation until the incoming component has been - // resolved. - if (typeof def === 'function' && def.cid === undefined) { - hasAsync = true; - pending++; - - var resolve = once(function (resolvedDef) { - if (isESModule(resolvedDef)) { - resolvedDef = resolvedDef.default; - } - // save resolved on async factory in case it's used elsewhere - def.resolved = typeof resolvedDef === 'function' - ? resolvedDef - : _Vue.extend(resolvedDef); - match.components[key] = resolvedDef; - pending--; - if (pending <= 0) { - next(); - } - }); + this.router = vm.$route.router; + // update things when the route changes + this.unwatch = vm.$watch('$route', _bind(this.onRouteUpdate, this)); + // check v-link-active ids + var activeIds = this.el.getAttribute(LINK_UPDATE); + if (activeIds) { + this.el.removeAttribute(LINK_UPDATE); + this.activeIds = activeIds.split(','); + } + // no need to handle click if link expects to be opened + // in a new window/tab. + /* istanbul ignore if */ + if (this.el.tagName === 'A' && this.el.getAttribute('target') === '_blank') { + return; + } + // handle click + this.handler = _bind(this.onClick, this); + this.el.addEventListener('click', this.handler); + }, - var reject = once(function (reason) { - var msg = "Failed to resolve async component " + key + ": " + reason; - warn(false, msg); - if (!error) { - error = isError(reason) - ? reason - : new Error(msg); - next(error); - } - }); + update: function update(target) { + this.target = target; + if (isObject(target)) { + this.append = target.append; + this.exact = target.exact; + this.prevActiveClass = this.activeClass; + this.activeClass = target.activeClass; + } + this.onRouteUpdate(this.vm.$route); + }, - var res; - try { - res = def(resolve, reject); - } catch (e) { - reject(e); + onClick: function onClick(e) { + // don't redirect with control keys + /* istanbul ignore if */ + if (e.metaKey || e.ctrlKey || e.shiftKey) return; + // don't redirect when preventDefault called + /* istanbul ignore if */ + if (e.defaultPrevented) return; + // don't redirect on right click + /* istanbul ignore if */ + if (e.button !== 0) return; + + var target = this.target; + if (target) { + // v-link with expression, just go + e.preventDefault(); + this.router.go(target); + } else { + // no expression, delegate for an <a> inside + var el = e.target; + while (el.tagName !== 'A' && el !== this.el) { + el = el.parentNode; } - if (res) { - if (typeof res.then === 'function') { - res.then(resolve, reject); - } else { - // new syntax in Vue 2.3 - var comp = res.component; - if (comp && typeof comp.then === 'function') { - comp.then(resolve, reject); - } + if (el.tagName === 'A' && sameOrigin(el)) { + e.preventDefault(); + var path = el.pathname; + if (this.router.history.root) { + path = path.replace(this.router.history.rootRE, ''); } + this.router.go({ + path: path, + replace: target && target.replace, + append: target && target.append + }); } } - }); - - if (!hasAsync) { next(); } - } - } - - function flatMapComponents ( - matched, - fn - ) { - return flatten(matched.map(function (m) { - return Object.keys(m.components).map(function (key) { return fn( - m.components[key], - m.instances[key], - m, key - ); }) - })) - } - - function flatten (arr) { - return Array.prototype.concat.apply([], arr) - } - - var hasSymbol = - typeof Symbol === 'function' && - typeof Symbol.toStringTag === 'symbol'; - - function isESModule (obj) { - return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module') - } - - // in Webpack 2, require.ensure now also returns a Promise - // so the resolve/reject functions may get called an extra time - // if the user uses an arrow function shorthand that happens to - // return that Promise. - function once (fn) { - var called = false; - return function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - if (called) { return } - called = true; - return fn.apply(this, args) - } - } - - /* */ - - var History = function History (router, base) { - this.router = router; - this.base = normalizeBase(base); - // start with a route object that stands for "nowhere" - this.current = START; - this.pending = null; - this.ready = false; - this.readyCbs = []; - this.readyErrorCbs = []; - this.errorCbs = []; - this.listeners = []; - }; - - History.prototype.listen = function listen (cb) { - this.cb = cb; - }; - - History.prototype.onReady = function onReady (cb, errorCb) { - if (this.ready) { - cb(); - } else { - this.readyCbs.push(cb); - if (errorCb) { - this.readyErrorCbs.push(errorCb); - } - } - }; - - History.prototype.onError = function onError (errorCb) { - this.errorCbs.push(errorCb); - }; - - History.prototype.transitionTo = function transitionTo ( - location, - onComplete, - onAbort - ) { - var this$1$1 = this; - - var route; - // catch redirect option https://github.com/vuejs/vue-router/issues/3201 - try { - route = this.router.match(location, this.current); - } catch (e) { - this.errorCbs.forEach(function (cb) { - cb(e); - }); - // Exception should still be thrown - throw e - } - var prev = this.current; - this.confirmTransition( - route, - function () { - this$1$1.updateRoute(route); - onComplete && onComplete(route); - this$1$1.ensureURL(); - this$1$1.router.afterHooks.forEach(function (hook) { - hook && hook(route, prev); - }); + }, - // fire ready cbs once - if (!this$1$1.ready) { - this$1$1.ready = true; - this$1$1.readyCbs.forEach(function (cb) { - cb(route); - }); + onRouteUpdate: function onRouteUpdate(route) { + // router.stringifyPath is dependent on current route + // and needs to be called again whenver route changes. + var newPath = this.router.stringifyPath(this.target); + if (this.path !== newPath) { + this.path = newPath; + this.updateActiveMatch(); + this.updateHref(); } - }, - function (err) { - if (onAbort) { - onAbort(err); - } - if (err && !this$1$1.ready) { - // Initial redirection should not mark the history as ready yet - // because it's triggered by the redirection instead - // https://github.com/vuejs/vue-router/issues/3225 - // https://github.com/vuejs/vue-router/issues/3331 - if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) { - this$1$1.ready = true; - this$1$1.readyErrorCbs.forEach(function (cb) { - cb(err); - }); - } + if (this.activeIds) { + this.vm.$emit(LINK_UPDATE, this, route.path); + } else { + this.updateClasses(route.path, this.el); } - } - ); - }; + }, - History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) { - var this$1$1 = this; - - var current = this.current; - this.pending = route; - var abort = function (err) { - // changed after adding errors with - // https://github.com/vuejs/vue-router/pull/3047 before that change, - // redirect and aborted navigation would produce an err == null - if (!isNavigationFailure(err) && isError(err)) { - if (this$1$1.errorCbs.length) { - this$1$1.errorCbs.forEach(function (cb) { - cb(err); - }); + updateActiveMatch: function updateActiveMatch() { + this.activeRE = this.path && !this.exact ? new RegExp('^' + this.path.replace(/\/$/, '').replace(queryStringRE, '').replace(regexEscapeRE, '\\$&') + '(\\/|$)') : null; + }, + + updateHref: function updateHref() { + if (this.el.tagName !== 'A') { + return; + } + var path = this.path; + var router = this.router; + var isAbsolute = path.charAt(0) === '/'; + // do not format non-hash relative paths + var href = path && (router.mode === 'hash' || isAbsolute) ? router.history.formatPath(path, this.append) : path; + if (href) { + this.el.href = href; } else { - { - warn(false, 'uncaught error during route navigation:'); - } - console.error(err); + this.el.removeAttribute('href'); } - } - onAbort && onAbort(err); - }; - var lastRouteIndex = route.matched.length - 1; - var lastCurrentIndex = current.matched.length - 1; - if ( - isSameRoute(route, current) && - // in the case the route map has been dynamically appended to - lastRouteIndex === lastCurrentIndex && - route.matched[lastRouteIndex] === current.matched[lastCurrentIndex] - ) { - this.ensureURL(); - if (route.hash) { - handleScroll(this.router, current, route, false); - } - return abort(createNavigationDuplicatedError(current, route)) - } + }, - var ref = resolveQueue( - this.current.matched, - route.matched - ); - var updated = ref.updated; - var deactivated = ref.deactivated; - var activated = ref.activated; - - var queue = [].concat( - // in-component leave guards - extractLeaveGuards(deactivated), - // global before hooks - this.router.beforeHooks, - // in-component update hooks - extractUpdateHooks(updated), - // in-config enter guards - activated.map(function (m) { return m.beforeEnter; }), - // async components - resolveAsyncComponents(activated) - ); - - var iterator = function (hook, next) { - if (this$1$1.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - try { - hook(route, current, function (to) { - if (to === false) { - // next(false) -> abort navigation, ensure current URL - this$1$1.ensureURL(true); - abort(createNavigationAbortedError(current, route)); - } else if (isError(to)) { - this$1$1.ensureURL(true); - abort(to); - } else if ( - typeof to === 'string' || - (typeof to === 'object' && - (typeof to.path === 'string' || typeof to.name === 'string')) - ) { - // next('/') or next({ path: '/' }) -> redirect - abort(createNavigationRedirectedError(current, route)); - if (typeof to === 'object' && to.replace) { - this$1$1.replace(to); - } else { - this$1$1.push(to); - } + updateClasses: function updateClasses(path, el) { + var activeClass = this.activeClass || this.router._linkActiveClass; + // clear old class + if (this.prevActiveClass && this.prevActiveClass !== activeClass) { + toggleClasses(el, this.prevActiveClass, removeClass); + } + // remove query string before matching + var dest = this.path.replace(queryStringRE, ''); + path = path.replace(queryStringRE, ''); + // add new class + if (this.exact) { + if (dest === path || + // also allow additional trailing slash + dest.charAt(dest.length - 1) !== '/' && dest === path.replace(trailingSlashRE, '')) { + toggleClasses(el, activeClass, addClass); } else { - // confirm transition and pass on the value - next(to); + toggleClasses(el, activeClass, removeClass); + } + } else { + if (this.activeRE && this.activeRE.test(path)) { + toggleClasses(el, activeClass, addClass); + } else { + toggleClasses(el, activeClass, removeClass); } - }); - } catch (e) { - abort(e); - } - }; - - runQueue(queue, iterator, function () { - // wait until async components are resolved before - // extracting in-component enter guards - var enterGuards = extractEnterGuards(activated); - var queue = enterGuards.concat(this$1$1.router.resolveHooks); - runQueue(queue, iterator, function () { - if (this$1$1.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - this$1$1.pending = null; - onComplete(route); - if (this$1$1.router.app) { - this$1$1.router.app.$nextTick(function () { - handleRouteEntered(route); - }); } - }); - }); - }; - - History.prototype.updateRoute = function updateRoute (route) { - this.current = route; - this.cb && this.cb(route); - }; - - History.prototype.setupListeners = function setupListeners () { - // Default implementation is empty - }; + }, - History.prototype.teardown = function teardown () { - // clean up event listeners - // https://github.com/vuejs/vue-router/issues/2341 - this.listeners.forEach(function (cleanupListener) { - cleanupListener(); + unbind: function unbind() { + this.el.removeEventListener('click', this.handler); + this.unwatch && this.unwatch(); + } }); - this.listeners = []; - - // reset current history route - // https://github.com/vuejs/vue-router/issues/3294 - this.current = START; - this.pending = null; - }; - function normalizeBase (base) { - if (!base) { - if (inBrowser) { - // respect <base> tag - var baseEl = document.querySelector('base'); - base = (baseEl && baseEl.getAttribute('href')) || '/'; - // strip full URL origin - base = base.replace(/^https?:\/\/[^\/]+/, ''); - } else { - base = '/'; - } + function sameOrigin(link) { + return link.protocol === location.protocol && link.hostname === location.hostname && link.port === location.port; } - // make sure there's the starting slash - if (base.charAt(0) !== '/') { - base = '/' + base; - } - // remove trailing slash - return base.replace(/\/$/, '') - } - function resolveQueue ( - current, - next - ) { - var i; - var max = Math.max(current.length, next.length); - for (i = 0; i < max; i++) { - if (current[i] !== next[i]) { - break + // this function is copied from v-bind:class implementation until + // we properly expose it... + function toggleClasses(el, key, fn) { + key = key.trim(); + if (key.indexOf(' ') === -1) { + fn(el, key); + return; } - } - return { - updated: next.slice(0, i), - activated: next.slice(i), - deactivated: current.slice(i) - } - } - - function extractGuards ( - records, - name, - bind, - reverse - ) { - var guards = flatMapComponents(records, function (def, instance, match, key) { - var guard = extractGuard(def, name); - if (guard) { - return Array.isArray(guard) - ? guard.map(function (guard) { return bind(guard, instance, match, key); }) - : bind(guard, instance, match, key) + var keys = key.split(/\s+/); + for (var i = 0, l = keys.length; i < l; i++) { + fn(el, keys[i]); } - }); - return flatten(reverse ? guards.reverse() : guards) - } - - function extractGuard ( - def, - key - ) { - if (typeof def !== 'function') { - // extend now so that global mixins are applied. - def = _Vue.extend(def); } - return def.options[key] } - function extractLeaveGuards (deactivated) { - return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true) - } - - function extractUpdateHooks (updated) { - return extractGuards(updated, 'beforeRouteUpdate', bindGuard) - } + var historyBackends = { + abstract: AbstractHistory, + hash: HashHistory, + html5: HTML5History + }; - function bindGuard (guard, instance) { - if (instance) { - return function boundRouteGuard () { - return guard.apply(instance, arguments) - } - } - } + // late bind during install + var Vue = undefined; - function extractEnterGuards ( - activated - ) { - return extractGuards( - activated, - 'beforeRouteEnter', - function (guard, _, match, key) { - return bindEnterGuard(guard, match, key) - } - ) - } + /** + * Router constructor + * + * @param {Object} [options] + */ - function bindEnterGuard ( - guard, - match, - key - ) { - return function routeEnterGuard (to, from, next) { - return guard(to, from, function (cb) { - if (typeof cb === 'function') { - if (!match.enteredCbs[key]) { - match.enteredCbs[key] = []; - } - match.enteredCbs[key].push(cb); + var Router = (function () { + function Router() { + var _this = this; + + var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + var _ref$hashbang = _ref.hashbang; + var hashbang = _ref$hashbang === undefined ? true : _ref$hashbang; + var _ref$abstract = _ref.abstract; + var abstract = _ref$abstract === undefined ? false : _ref$abstract; + var _ref$history = _ref.history; + var history = _ref$history === undefined ? false : _ref$history; + var _ref$saveScrollPosition = _ref.saveScrollPosition; + var saveScrollPosition = _ref$saveScrollPosition === undefined ? false : _ref$saveScrollPosition; + var _ref$transitionOnLoad = _ref.transitionOnLoad; + var transitionOnLoad = _ref$transitionOnLoad === undefined ? false : _ref$transitionOnLoad; + var _ref$suppressTransitionError = _ref.suppressTransitionError; + var suppressTransitionError = _ref$suppressTransitionError === undefined ? false : _ref$suppressTransitionError; + var _ref$root = _ref.root; + var root = _ref$root === undefined ? null : _ref$root; + var _ref$linkActiveClass = _ref.linkActiveClass; + var linkActiveClass = _ref$linkActiveClass === undefined ? 'v-link-active' : _ref$linkActiveClass; + babelHelpers.classCallCheck(this, Router); + + /* istanbul ignore if */ + if (!Router.installed) { + throw new Error('Please install the Router with Vue.use() before ' + 'creating an instance.'); + } + + // Vue instances + this.app = null; + this._children = []; + + // route recognizer + this._recognizer = new RouteRecognizer(); + this._guardRecognizer = new RouteRecognizer(); + + // state + this._started = false; + this._startCb = null; + this._currentRoute = {}; + this._currentTransition = null; + this._previousTransition = null; + this._notFoundHandler = null; + this._notFoundRedirect = null; + this._beforeEachHooks = []; + this._afterEachHooks = []; + + // trigger transition on initial render? + this._rendered = false; + this._transitionOnLoad = transitionOnLoad; + + // history mode + this._root = root; + this._abstract = abstract; + this._hashbang = hashbang; + + // check if HTML5 history is available + var hasPushState = typeof window !== 'undefined' && window.history && window.history.pushState; + this._history = history && hasPushState; + this._historyFallback = history && !hasPushState; + + // create history object + var inBrowser = Vue.util.inBrowser; + this.mode = !inBrowser || this._abstract ? 'abstract' : this._history ? 'html5' : 'hash'; + + var History = historyBackends[this.mode]; + this.history = new History({ + root: root, + hashbang: this._hashbang, + onChange: function onChange(path, state, anchor) { + _this._match(path, state, anchor); } - next(cb); - }) - } - } - - /* */ - - var HTML5History = /*@__PURE__*/(function (History) { - function HTML5History (router, base) { - History.call(this, router, base); + }); - this._startLocation = getLocation(this.base); + // other options + this._saveScrollPosition = saveScrollPosition; + this._linkActiveClass = linkActiveClass; + this._suppress = suppressTransitionError; } - if ( History ) HTML5History.__proto__ = History; - HTML5History.prototype = Object.create( History && History.prototype ); - HTML5History.prototype.constructor = HTML5History; + /** + * Allow directly passing components to a route + * definition. + * + * @param {String} path + * @param {Object} handler + */ - HTML5History.prototype.setupListeners = function setupListeners () { - var this$1$1 = this; - - if (this.listeners.length > 0) { - return - } + // API =================================================== - var router = this.router; - var expectScroll = router.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; + /** + * Register a map of top-level paths. + * + * @param {Object} map + */ - if (supportsScroll) { - this.listeners.push(setupScroll()); + Router.prototype.map = function map(_map) { + for (var route in _map) { + this.on(route, _map[route]); } - - var handleRoutingEvent = function () { - var current = this$1$1.current; - - // Avoiding first `popstate` event dispatched in some browsers but first - // history route not updated since async guard at the same time. - var location = getLocation(this$1$1.base); - if (this$1$1.current === START && location === this$1$1._startLocation) { - return - } - - this$1$1.transitionTo(location, function (route) { - if (supportsScroll) { - handleScroll(router, route, current, true); - } - }); - }; - window.addEventListener('popstate', handleRoutingEvent); - this.listeners.push(function () { - window.removeEventListener('popstate', handleRoutingEvent); - }); + return this; }; - HTML5History.prototype.go = function go (n) { - window.history.go(n); + /** + * Register a single root-level path + * + * @param {String} rootPath + * @param {Object} handler + * - {String} component + * - {Object} [subRoutes] + * - {Boolean} [forceRefresh] + * - {Function} [before] + * - {Function} [after] + */ + + Router.prototype.on = function on(rootPath, handler) { + if (rootPath === '*') { + this._notFound(handler); + } else { + this._addRoute(rootPath, handler, []); + } + return this; }; - HTML5History.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; + /** + * Set redirects. + * + * @param {Object} map + */ - var ref = this; - var fromRoute = ref.current; - this.transitionTo(location, function (route) { - pushState(cleanPath(this$1$1.base + route.fullPath)); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); + Router.prototype.redirect = function redirect(map) { + for (var path in map) { + this._addRedirect(path, map[path]); + } + return this; }; - HTML5History.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo(location, function (route) { - replaceState(cleanPath(this$1$1.base + route.fullPath)); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - }; + /** + * Set aliases. + * + * @param {Object} map + */ - HTML5History.prototype.ensureURL = function ensureURL (push) { - if (getLocation(this.base) !== this.current.fullPath) { - var current = cleanPath(this.base + this.current.fullPath); - push ? pushState(current) : replaceState(current); + Router.prototype.alias = function alias(map) { + for (var path in map) { + this._addAlias(path, map[path]); } + return this; }; - HTML5History.prototype.getCurrentLocation = function getCurrentLocation () { - return getLocation(this.base) - }; + /** + * Set global before hook. + * + * @param {Function} fn + */ - return HTML5History; - }(History)); - - function getLocation (base) { - var path = window.location.pathname; - var pathLowerCase = path.toLowerCase(); - var baseLowerCase = base.toLowerCase(); - // base="/a" shouldn't turn path="/app" into "/a/pp" - // https://github.com/vuejs/vue-router/issues/3555 - // so we ensure the trailing slash in the base - if (base && ((pathLowerCase === baseLowerCase) || - (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) { - path = path.slice(base.length); - } - return (path || '/') + window.location.search + window.location.hash - } - - /* */ - - var HashHistory = /*@__PURE__*/(function (History) { - function HashHistory (router, base, fallback) { - History.call(this, router, base); - // check history fallback deeplinking - if (fallback && checkFallback(this.base)) { - return - } - ensureSlash(); - } + Router.prototype.beforeEach = function beforeEach(fn) { + this._beforeEachHooks.push(fn); + return this; + }; - if ( History ) HashHistory.__proto__ = History; - HashHistory.prototype = Object.create( History && History.prototype ); - HashHistory.prototype.constructor = HashHistory; + /** + * Set global after hook. + * + * @param {Function} fn + */ - // this is delayed until the app mounts - // to avoid the hashchange listener being fired too early - HashHistory.prototype.setupListeners = function setupListeners () { - var this$1$1 = this; + Router.prototype.afterEach = function afterEach(fn) { + this._afterEachHooks.push(fn); + return this; + }; - if (this.listeners.length > 0) { - return + /** + * Navigate to a given path. + * The path can be an object describing a named path in + * the format of { name: '...', params: {}, query: {}} + * The path is assumed to be already decoded, and will + * be resolved against root (if provided) + * + * @param {String|Object} path + * @param {Boolean} [replace] + */ + + Router.prototype.go = function go(path) { + var replace = false; + var append = false; + if (Vue.util.isObject(path)) { + replace = path.replace; + append = path.append; + } + path = this.stringifyPath(path); + if (path) { + this.history.go(path, replace, append); } + }; - var router = this.router; - var expectScroll = router.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; + /** + * Short hand for replacing current path + * + * @param {String} path + */ - if (supportsScroll) { - this.listeners.push(setupScroll()); + Router.prototype.replace = function replace(path) { + if (typeof path === 'string') { + path = { path: path }; } + path.replace = true; + this.go(path); + }; - var handleRoutingEvent = function () { - var current = this$1$1.current; - if (!ensureSlash()) { - return + /** + * Start the router. + * + * @param {VueConstructor} App + * @param {String|Element} container + * @param {Function} [cb] + */ + + Router.prototype.start = function start(App, container, cb) { + /* istanbul ignore if */ + if (this._started) { + warn$1('already started.'); + return; + } + this._started = true; + this._startCb = cb; + if (!this.app) { + /* istanbul ignore if */ + if (!App || !container) { + throw new Error('Must start vue-router with a component and a ' + 'root container.'); } - this$1$1.transitionTo(getHash(), function (route) { - if (supportsScroll) { - handleScroll(this$1$1.router, route, current, true); - } - if (!supportsPushState) { - replaceHash(route.fullPath); - } - }); - }; - var eventType = supportsPushState ? 'popstate' : 'hashchange'; - window.addEventListener( - eventType, - handleRoutingEvent - ); - this.listeners.push(function () { - window.removeEventListener(eventType, handleRoutingEvent); - }); - }; + /* istanbul ignore if */ + if (App instanceof Vue) { + throw new Error('Must start vue-router with a component, not a ' + 'Vue instance.'); + } + this._appContainer = container; + var Ctor = this._appConstructor = typeof App === 'function' ? App : Vue.extend(App); + // give it a name for better debugging + Ctor.options.name = Ctor.options.name || 'RouterApp'; + } + + // handle history fallback in browsers that do not + // support HTML5 history API + if (this._historyFallback) { + var _location = window.location; + var _history = new HTML5History({ root: this._root }); + var path = _history.root ? _location.pathname.replace(_history.rootRE, '') : _location.pathname; + if (path && path !== '/') { + _location.assign((_history.root || '') + '/' + this.history.formatPath(path) + _location.search); + return; + } + } - HashHistory.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo( - location, - function (route) { - pushHash(route.fullPath); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); + this.history.start(); }; - HashHistory.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo( - location, - function (route) { - replaceHash(route.fullPath); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - }; + /** + * Stop listening to route changes. + */ - HashHistory.prototype.go = function go (n) { - window.history.go(n); + Router.prototype.stop = function stop() { + this.history.stop(); + this._started = false; }; - HashHistory.prototype.ensureURL = function ensureURL (push) { - var current = this.current.fullPath; - if (getHash() !== current) { - push ? pushHash(current) : replaceHash(current); + /** + * Normalize named route object / string paths into + * a string. + * + * @param {Object|String|Number} path + * @return {String} + */ + + Router.prototype.stringifyPath = function stringifyPath(path) { + var generatedPath = ''; + if (path && typeof path === 'object') { + if (path.name) { + var extend = Vue.util.extend; + var currentParams = this._currentTransition && this._currentTransition.to.params; + var targetParams = path.params || {}; + var params = currentParams ? extend(extend({}, currentParams), targetParams) : targetParams; + generatedPath = encodeURI(this._recognizer.generate(path.name, params)); + } else if (path.path) { + generatedPath = encodeURI(path.path); + } + if (path.query) { + // note: the generated query string is pre-URL-encoded by the recognizer + var query = this._recognizer.generateQueryString(path.query); + if (generatedPath.indexOf('?') > -1) { + generatedPath += '&' + query.slice(1); + } else { + generatedPath += query; + } + } + } else { + generatedPath = encodeURI(path ? path + '' : ''); } + return generatedPath; }; - HashHistory.prototype.getCurrentLocation = function getCurrentLocation () { - return getHash() + // Internal methods ====================================== + + /** + * Add a route containing a list of segments to the internal + * route recognizer. Will be called recursively to add all + * possible sub-routes. + * + * @param {String} path + * @param {Object} handler + * @param {Array} segments + */ + + Router.prototype._addRoute = function _addRoute(path, handler, segments) { + guardComponent(path, handler); + handler.path = path; + handler.fullPath = (segments.reduce(function (path, segment) { + return path + segment.path; + }, '') + path).replace('//', '/'); + segments.push({ + path: path, + handler: handler + }); + this._recognizer.add(segments, { + as: handler.name + }); + // add sub routes + if (handler.subRoutes) { + for (var subPath in handler.subRoutes) { + // recursively walk all sub routes + this._addRoute(subPath, handler.subRoutes[subPath], + // pass a copy in recursion to avoid mutating + // across branches + segments.slice()); + } + } }; - return HashHistory; - }(History)); - - function checkFallback (base) { - var location = getLocation(base); - if (!/^\/#/.test(location)) { - window.location.replace(cleanPath(base + '/#' + location)); - return true - } - } - - function ensureSlash () { - var path = getHash(); - if (path.charAt(0) === '/') { - return true - } - replaceHash('/' + path); - return false - } - - function getHash () { - // We can't use window.location.hash here because it's not - // consistent across browsers - Firefox will pre-decode it! - var href = window.location.href; - var index = href.indexOf('#'); - // empty path - if (index < 0) { return '' } - - href = href.slice(index + 1); - - return href - } - - function getUrl (path) { - var href = window.location.href; - var i = href.indexOf('#'); - var base = i >= 0 ? href.slice(0, i) : href; - return (base + "#" + path) - } - - function pushHash (path) { - if (supportsPushState) { - pushState(getUrl(path)); - } else { - window.location.hash = path; - } - } - - function replaceHash (path) { - if (supportsPushState) { - replaceState(getUrl(path)); - } else { - window.location.replace(getUrl(path)); - } - } + /** + * Set the notFound route handler. + * + * @param {Object} handler + */ - /* */ - - var AbstractHistory = /*@__PURE__*/(function (History) { - function AbstractHistory (router, base) { - History.call(this, router, base); - this.stack = []; - this.index = -1; - } - - if ( History ) AbstractHistory.__proto__ = History; - AbstractHistory.prototype = Object.create( History && History.prototype ); - AbstractHistory.prototype.constructor = AbstractHistory; + Router.prototype._notFound = function _notFound(handler) { + guardComponent('*', handler); + this._notFoundHandler = [{ handler: handler }]; + }; - AbstractHistory.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; + /** + * Add a redirect record. + * + * @param {String} path + * @param {String} redirectPath + */ - this.transitionTo( - location, - function (route) { - this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route); - this$1$1.index++; - onComplete && onComplete(route); - }, - onAbort - ); + Router.prototype._addRedirect = function _addRedirect(path, redirectPath) { + if (path === '*') { + this._notFoundRedirect = redirectPath; + } else { + this._addGuard(path, redirectPath, this.replace); + } }; - AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; + /** + * Add an alias record. + * + * @param {String} path + * @param {String} aliasPath + */ - this.transitionTo( - location, - function (route) { - this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route); - onComplete && onComplete(route); - }, - onAbort - ); + Router.prototype._addAlias = function _addAlias(path, aliasPath) { + this._addGuard(path, aliasPath, this._match); }; - AbstractHistory.prototype.go = function go (n) { - var this$1$1 = this; - - var targetIndex = this.index + n; - if (targetIndex < 0 || targetIndex >= this.stack.length) { - return - } - var route = this.stack[targetIndex]; - this.confirmTransition( - route, - function () { - var prev = this$1$1.current; - this$1$1.index = targetIndex; - this$1$1.updateRoute(route); - this$1$1.router.afterHooks.forEach(function (hook) { - hook && hook(route, prev); - }); - }, - function (err) { - if (isNavigationFailure(err, NavigationFailureType.duplicated)) { - this$1$1.index = targetIndex; - } + /** + * Add a path guard. + * + * @param {String} path + * @param {String} mappedPath + * @param {Function} handler + */ + + Router.prototype._addGuard = function _addGuard(path, mappedPath, _handler) { + var _this2 = this; + + this._guardRecognizer.add([{ + path: path, + handler: function handler(match, query) { + var realPath = mapParams(mappedPath, match.params, query); + _handler.call(_this2, realPath); } - ); - }; - - AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () { - var current = this.stack[this.stack.length - 1]; - return current ? current.fullPath : '/' + }]); }; - AbstractHistory.prototype.ensureURL = function ensureURL () { - // noop + /** + * Check if a path matches any redirect records. + * + * @param {String} path + * @return {Boolean} - if true, will skip normal match. + */ + + Router.prototype._checkGuard = function _checkGuard(path) { + var matched = this._guardRecognizer.recognize(path, true); + if (matched) { + matched[0].handler(matched[0], matched.queryParams); + return true; + } else if (this._notFoundRedirect) { + matched = this._recognizer.recognize(path); + if (!matched) { + this.replace(this._notFoundRedirect); + return true; + } + } }; - return AbstractHistory; - }(History)); - - /* */ - - - - var VueRouter = function VueRouter (options) { - if ( options === void 0 ) options = {}; - - { - warn(this instanceof VueRouter, "Router must be called with the new operator."); - } - this.app = null; - this.apps = []; - this.options = options; - this.beforeHooks = []; - this.resolveHooks = []; - this.afterHooks = []; - this.matcher = createMatcher(options.routes || [], this); - - var mode = options.mode || 'hash'; - this.fallback = - mode === 'history' && !supportsPushState && options.fallback !== false; - if (this.fallback) { - mode = 'hash'; - } - if (!inBrowser) { - mode = 'abstract'; - } - this.mode = mode; - - switch (mode) { - case 'history': - this.history = new HTML5History(this, options.base); - break - case 'hash': - this.history = new HashHistory(this, options.base, this.fallback); - break - case 'abstract': - this.history = new AbstractHistory(this, options.base); - break - default: - { - assert(false, ("invalid mode: " + mode)); + /** + * Match a URL path and set the route context on vm, + * triggering view updates. + * + * @param {String} path + * @param {Object} [state] + * @param {String} [anchor] + */ + + Router.prototype._match = function _match(path, state, anchor) { + var _this3 = this; + + if (this._checkGuard(path)) { + return; + } + + var currentRoute = this._currentRoute; + var currentTransition = this._currentTransition; + + if (currentTransition) { + if (currentTransition.to.path === path) { + // do nothing if we have an active transition going to the same path + return; + } else if (currentRoute.path === path) { + // We are going to the same path, but we also have an ongoing but + // not-yet-validated transition. Abort that transition and reset to + // prev transition. + currentTransition.aborted = true; + this._currentTransition = this._prevTransition; + return; + } else { + // going to a totally different path. abort ongoing transition. + currentTransition.aborted = true; } - } - }; - - var prototypeAccessors = { currentRoute: { configurable: true } }; - - VueRouter.prototype.match = function match (raw, current, redirectedFrom) { - return this.matcher.match(raw, current, redirectedFrom) - }; - - prototypeAccessors.currentRoute.get = function () { - return this.history && this.history.current - }; - - VueRouter.prototype.init = function init (app /* Vue component instance */) { - var this$1$1 = this; - - assert( - install.installed, - "not installed. Make sure to call `Vue.use(VueRouter)` " + - "before creating root instance." - ); - - this.apps.push(app); - - // set up app destroyed handler - // https://github.com/vuejs/vue-router/issues/2639 - app.$once('hook:destroyed', function () { - // clean out app from this.apps array once destroyed - var index = this$1$1.apps.indexOf(app); - if (index > -1) { this$1$1.apps.splice(index, 1); } - // ensure we still have a main app or null if no apps - // we do not release the router so it can be reused - if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; } - - if (!this$1$1.app) { this$1$1.history.teardown(); } - }); - - // main app previously initialized - // return as we don't need to set up new history listener - if (this.app) { - return - } - - this.app = app; - - var history = this.history; + } - if (history instanceof HTML5History || history instanceof HashHistory) { - var handleInitialScroll = function (routeOrError) { - var from = history.current; - var expectScroll = this$1$1.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; + // construct new route and transition context + var route = new Route(path, this); + var transition = new RouteTransition(this, route, currentRoute); + + // current transition is updated right now. + // however, current route will only be updated after the transition has + // been validated. + this._prevTransition = currentTransition; + this._currentTransition = transition; + + if (!this.app) { + (function () { + // initial render + var router = _this3; + _this3.app = new _this3._appConstructor({ + el: _this3._appContainer, + created: function created() { + this.$router = router; + }, + _meta: { + $route: route + } + }); + })(); + } - if (supportsScroll && 'fullPath' in routeOrError) { - handleScroll(this$1$1, routeOrError, from, false); - } - }; - var setupListeners = function (routeOrError) { - history.setupListeners(); - handleInitialScroll(routeOrError); + // check global before hook + var beforeHooks = this._beforeEachHooks; + var startTransition = function startTransition() { + transition.start(function () { + _this3._postTransition(route, state, anchor); + }); }; - history.transitionTo( - history.getCurrentLocation(), - setupListeners, - setupListeners - ); - } - - history.listen(function (route) { - this$1$1.apps.forEach(function (app) { - app._route = route; - }); - }); - }; - - VueRouter.prototype.beforeEach = function beforeEach (fn) { - return registerHook(this.beforeHooks, fn) - }; - - VueRouter.prototype.beforeResolve = function beforeResolve (fn) { - return registerHook(this.resolveHooks, fn) - }; - VueRouter.prototype.afterEach = function afterEach (fn) { - return registerHook(this.afterHooks, fn) - }; + if (beforeHooks.length) { + transition.runQueue(beforeHooks, function (hook, _, next) { + if (transition === _this3._currentTransition) { + transition.callHook(hook, null, next, { + expectBoolean: true + }); + } + }, startTransition); + } else { + startTransition(); + } - VueRouter.prototype.onReady = function onReady (cb, errorCb) { - this.history.onReady(cb, errorCb); - }; + if (!this._rendered && this._startCb) { + this._startCb.call(null); + } - VueRouter.prototype.onError = function onError (errorCb) { - this.history.onError(errorCb); - }; + // HACK: + // set rendered to true after the transition start, so + // that components that are acitvated synchronously know + // whether it is the initial render. + this._rendered = true; + }; - VueRouter.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; + /** + * Set current to the new transition. + * This is called by the transition object when the + * validation of a route has succeeded. + * + * @param {Transition} transition + */ + + Router.prototype._onTransitionValidated = function _onTransitionValidated(transition) { + // set current route + var route = this._currentRoute = transition.to; + // update route context for all children + if (this.app.$route !== route) { + this.app.$route = route; + this._children.forEach(function (child) { + child.$route = route; + }); + } + // call global after hook + if (this._afterEachHooks.length) { + this._afterEachHooks.forEach(function (hook) { + return hook.call(null, { + to: transition.to, + from: transition.from + }); + }); + } + this._currentTransition.done = true; + }; - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise(function (resolve, reject) { - this$1$1.history.push(location, resolve, reject); - }) - } else { - this.history.push(location, onComplete, onAbort); - } - }; + /** + * Handle stuff after the transition. + * + * @param {Route} route + * @param {Object} [state] + * @param {String} [anchor] + */ + + Router.prototype._postTransition = function _postTransition(route, state, anchor) { + // handle scroll positions + // saved scroll positions take priority + // then we check if the path has an anchor + var pos = state && state.pos; + if (pos && this._saveScrollPosition) { + Vue.nextTick(function () { + window.scrollTo(pos.x, pos.y); + }); + } else if (anchor) { + Vue.nextTick(function () { + var el = document.getElementById(anchor.slice(1)); + if (el) { + window.scrollTo(window.scrollX, el.offsetTop); + } + }); + } + }; - VueRouter.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; + return Router; + })(); - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise(function (resolve, reject) { - this$1$1.history.replace(location, resolve, reject); - }) - } else { - this.history.replace(location, onComplete, onAbort); + function guardComponent(path, handler) { + var comp = handler.component; + if (Vue.util.isPlainObject(comp)) { + comp = handler.component = Vue.extend(comp); } - }; - - VueRouter.prototype.go = function go (n) { - this.history.go(n); - }; - - VueRouter.prototype.back = function back () { - this.go(-1); - }; - - VueRouter.prototype.forward = function forward () { - this.go(1); - }; - - VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) { - var route = to - ? to.matched - ? to - : this.resolve(to).route - : this.currentRoute; - if (!route) { - return [] + /* istanbul ignore if */ + if (typeof comp !== 'function') { + handler.component = null; + warn$1('invalid component for route "' + path + '".'); } - return [].concat.apply( - [], - route.matched.map(function (m) { - return Object.keys(m.components).map(function (key) { - return m.components[key] - }) - }) - ) - }; + } - VueRouter.prototype.resolve = function resolve ( - to, - current, - append - ) { - current = current || this.history.current; - var location = normalizeLocation(to, current, append, this); - var route = this.match(location, current); - var fullPath = route.redirectedFrom || route.fullPath; - var base = this.history.base; - var href = createHref(base, fullPath, this.mode); - return { - location: location, - route: route, - href: href, - // for backwards compat - normalizedTo: location, - resolved: route - } - }; + /* Installation */ - VueRouter.prototype.getRoutes = function getRoutes () { - return this.matcher.getRoutes() - }; + Router.installed = false; - VueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) { - this.matcher.addRoute(parentOrRoute, route); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } - }; + /** + * Installation interface. + * Install the necessary directives. + */ - VueRouter.prototype.addRoutes = function addRoutes (routes) { - { - warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.'); - } - this.matcher.addRoutes(routes); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } + Router.install = function (externalVue) { + /* istanbul ignore if */ + if (Router.installed) { + warn$1('already installed.'); + return; + } + Vue = externalVue; + applyOverride(Vue); + View(Vue); + Link(Vue); + exports$1.Vue = Vue; + Router.installed = true; }; - Object.defineProperties( VueRouter.prototype, prototypeAccessors ); - - var VueRouter$1 = VueRouter; - - function registerHook (list, fn) { - list.push(fn); - return function () { - var i = list.indexOf(fn); - if (i > -1) { list.splice(i, 1); } - } - } - - function createHref (base, fullPath, mode) { - var path = mode === 'hash' ? '#' + fullPath : fullPath; - return base ? cleanPath(base + '/' + path) : path - } - - // We cannot remove this as it would be a breaking change - VueRouter.install = install; - VueRouter.version = '3.6.5'; - VueRouter.isNavigationFailure = isNavigationFailure; - VueRouter.NavigationFailureType = NavigationFailureType; - VueRouter.START_LOCATION = START; - - if (inBrowser && window.Vue) { - window.Vue.use(VueRouter); + // auto install + /* istanbul ignore if */ + if (typeof window !== 'undefined' && window.Vue) { + window.Vue.use(Router); } - return VueRouter$1; + return Router; -})); +})); \ No newline at end of file diff --git a/dist/vue-router.min.js b/dist/vue-router.min.js index 993e25aae..13bff86bf 100644 --- a/dist/vue-router.min.js +++ b/dist/vue-router.min.js @@ -1,11 +1,6 @@ /*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -var t,e;t=this,e=function(){"use strict";function t(t,e){for(var r in e)t[r]=e[r];return t}var e=/[!'()*]/g,r=function(t){return"%"+t.charCodeAt(0).toString(16)},n=/%2C/g,o=function(t){return encodeURIComponent(t).replace(e,r).replace(n,",")};function i(t){try{return decodeURIComponent(t)}catch(t){}return t}var a=function(t){return null==t||"object"==typeof t?t:String(t)};function s(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var r=t.replace(/\+/g," ").split("="),n=i(r.shift()),o=r.length>0?i(r.join("=")):null;void 0===e[n]?e[n]=o:Array.isArray(e[n])?e[n].push(o):e[n]=[e[n],o]})),e):e}function u(t){var e=t?Object.keys(t).map((function(e){var r=t[e];if(void 0===r)return"";if(null===r)return o(e);if(Array.isArray(r)){var n=[];return r.forEach((function(t){void 0!==t&&(null===t?n.push(o(e)):n.push(o(e)+"="+o(t)))})),n.join("&")}return o(e)+"="+o(r)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var c=/\/?$/;function p(t,e,r,n){var o=n&&n.options.stringifyQuery,i=e.query||{};try{i=f(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:d(e,o),matched:t?l(t):[]};return r&&(a.redirectedFrom=d(r,o)),Object.freeze(a)}function f(t){if(Array.isArray(t))return t.map(f);if(t&&"object"==typeof t){var e={};for(var r in t)e[r]=f(t[r]);return e}return t}var h=p(null,{path:"/"});function l(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function d(t,e){var r=t.path,n=t.query;void 0===n&&(n={});var o=t.hash;return void 0===o&&(o=""),(r||"/")+(e||u)(n)+o}function v(t,e,r){return e===h?t===e:!!e&&(t.path&&e.path?t.path.replace(c,"")===e.path.replace(c,"")&&(r||t.hash===e.hash&&y(t.query,e.query)):!(!t.name||!e.name)&&t.name===e.name&&(r||t.hash===e.hash&&y(t.query,e.query)&&y(t.params,e.params)))}function y(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var r=Object.keys(t).sort(),n=Object.keys(e).sort();return r.length===n.length&&r.every((function(r,o){var i=t[r];if(n[o]!==r)return!1;var a=e[r];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?y(i,a):String(i)===String(a)}))}function m(t){for(var e=0;e<t.matched.length;e++){var r=t.matched[e];for(var n in r.instances){var o=r.instances[n],i=r.enteredCbs[n];if(o&&i){delete r.enteredCbs[n];for(var a=0;a<i.length;a++)o._isBeingDestroyed||i[a](o)}}}}var g={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(e,r){var n=r.props,o=r.children,i=r.parent,a=r.data;a.routerView=!0;for(var s=i.$createElement,u=n.name,c=i.$route,p=i._routerViewCache||(i._routerViewCache={}),f=0,h=!1;i&&i._routerRoot!==i;){var l=i.$vnode?i.$vnode.data:{};l.routerView&&f++,l.keepAlive&&i._directInactive&&i._inactive&&(h=!0),i=i.$parent}if(a.routerViewDepth=f,h){var d=p[u],v=d&&d.component;return v?(d.configProps&&w(v,a,d.route,d.configProps),s(v,a,o)):s()}var y=c.matched[f],g=y&&y.components[u];if(!y||!g)return p[u]=null,s();p[u]={component:g},a.registerRouteInstance=function(t,e){var r=y.instances[u];(e&&r!==t||!e&&r===t)&&(y.instances[u]=e)},(a.hook||(a.hook={})).prepatch=function(t,e){y.instances[u]=e.componentInstance},a.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==y.instances[u]&&(y.instances[u]=t.componentInstance),m(c)};var b=y.props&&y.props[u];return b&&(t(p[u],{route:c,configProps:b}),w(g,a,c,b)),s(g,a,o)}};function w(e,r,n,o){var i=r.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}(n,o);if(i){i=r.props=t({},i);var a=r.attrs=r.attrs||{};for(var s in i)e.props&&s in e.props||(a[s]=i[s],delete i[s])}}function b(t,e,r){var n=t.charAt(0);if("/"===n)return t;if("?"===n||"#"===n)return e+t;var o=e.split("/");r&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),a=0;a<i.length;a++){var s=i[a];".."===s?o.pop():"."!==s&&o.push(s)}return""!==o[0]&&o.unshift(""),o.join("/")}function x(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var R=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},k=B,E=j,C=function(t,e){return S(j(t,e),e)},A=S,O=U,_=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function j(t,e){for(var r,n=[],o=0,i=0,a="",s=e&&e.delimiter||"/";null!=(r=_.exec(t));){var u=r[0],c=r[1],p=r.index;if(a+=t.slice(i,p),i=p+u.length,c)a+=c[1];else{var f=t[i],h=r[2],l=r[3],d=r[4],v=r[5],y=r[6],m=r[7];a&&(n.push(a),a="");var g=null!=h&&null!=f&&f!==h,w="+"===y||"*"===y,b="?"===y||"*"===y,x=r[2]||s,R=d||v;n.push({name:l||o++,prefix:h||"",delimiter:x,optional:b,repeat:w,partial:g,asterisk:!!m,pattern:R?L(R):m?".*":"[^"+P(x)+"]+?"})}}return i<t.length&&(a+=t.substr(i)),a&&n.push(a),n}function T(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function S(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)"object"==typeof t[n]&&(r[n]=new RegExp("^(?:"+t[n].pattern+")$",q(e)));return function(e,n){for(var o="",i=e||{},a=(n||{}).pretty?T:encodeURIComponent,s=0;s<t.length;s++){var u=t[s];if("string"!=typeof u){var c,p=i[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(R(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(c=a(p[f]),!r[s].test(c))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(c)+"`");o+=(0===f?u.prefix:u.delimiter)+c}}else{if(c=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):a(p),!r[s].test(c))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+c+'"');o+=u.prefix+c}}else o+=u}return o}}function P(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function L(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function $(t,e){return t.keys=e,t}function q(t){return t&&t.sensitive?"":"i"}function U(t,e,r){R(e)||(r=e||r,e=[]);for(var n=(r=r||{}).strict,o=!1!==r.end,i="",a=0;a<t.length;a++){var s=t[a];if("string"==typeof s)i+=P(s);else{var u=P(s.prefix),c="(?:"+s.pattern+")";e.push(s),s.repeat&&(c+="(?:"+u+c+")*"),i+=c=s.optional?s.partial?u+"("+c+")?":"(?:"+u+"("+c+"))?":u+"("+c+")"}}var p=P(r.delimiter||"/"),f=i.slice(-p.length)===p;return n||(i=(f?i.slice(0,-p.length):i)+"(?:"+p+"(?=$))?"),i+=o?"$":n&&f?"":"(?="+p+"|$)",$(new RegExp("^"+i,q(r)),e)}function B(t,e,r){return R(e)||(r=e||r,e=[]),r=r||{},t instanceof RegExp?function(t,e){var r=t.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)e.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return $(t,e)}(t,e):R(t)?function(t,e,r){for(var n=[],o=0;o<t.length;o++)n.push(B(t[o],e,r).source);return $(new RegExp("(?:"+n.join("|")+")",q(r)),e)}(t,e,r):function(t,e,r){return U(j(t,r),e,r)}(t,e,r)}k.parse=E,k.compile=C,k.tokensToFunction=A,k.tokensToRegExp=O;var I=Object.create(null);function M(t,e,r){e=e||{};try{var n=I[t]||(I[t]=k.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),n(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function V(e,r,n,o){var i="string"==typeof e?{path:e}:e;if(i._normalized)return i;if(i.name){var u=(i=t({},e)).params;return u&&"object"==typeof u&&(i.params=t({},u)),i}if(!i.path&&i.params&&r){(i=t({},i))._normalized=!0;var c=t(t({},r.params),i.params);if(r.name)i.name=r.name,i.params=c;else if(r.matched.length){var p=r.matched[r.matched.length-1].path;i.path=M(p,c,r.path)}return i}var f=function(t){var e="",r="",n=t.indexOf("#");n>=0&&(e=t.slice(n),t=t.slice(0,n));var o=t.indexOf("?");return o>=0&&(r=t.slice(o+1),t=t.slice(0,o)),{path:t,query:r,hash:e}}(i.path||""),h=r&&r.path||"/",l=f.path?b(f.path,h,n||i.append):h,d=function(t,e,r){void 0===e&&(e={});var n,o=r||s;try{n=o(t||"")}catch(t){n={}}for(var i in e){var u=e[i];n[i]=Array.isArray(u)?u.map(a):a(u)}return n}(f.query,i.query,o&&o.options.parseQuery),v=i.hash||f.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:l,query:d,hash:v}}var H,N=function(){},F={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(e){var r=this,n=this.$router,o=this.$route,i=n.resolve(this.to,o,this.append),a=i.location,s=i.route,u=i.href,f={},h=n.options.linkActiveClass,l=n.options.linkExactActiveClass,d=null==h?"router-link-active":h,y=null==l?"router-link-exact-active":l,m=null==this.activeClass?d:this.activeClass,g=null==this.exactActiveClass?y:this.exactActiveClass,w=s.redirectedFrom?p(null,V(s.redirectedFrom),null,n):s;f[g]=v(o,w,this.exactPath),f[m]=this.exact||this.exactPath?f[g]:function(t,e){return 0===t.path.replace(c,"/").indexOf(e.path.replace(c,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var r in e)if(!(r in t))return!1;return!0}(t.query,e.query)}(o,w);var b=f[g]?this.ariaCurrentValue:null,x=function(t){z(t)&&(r.replace?n.replace(a,N):n.push(a,N))},R={click:z};Array.isArray(this.event)?this.event.forEach((function(t){R[t]=x})):R[this.event]=x;var k={class:f},E=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:s,navigate:x,isActive:f[m],isExactActive:f[g]});if(E){if(1===E.length)return E[0];if(E.length>1||!E.length)return 0===E.length?e():e("span",{},E)}if("a"===this.tag)k.on=R,k.attrs={href:u,"aria-current":b};else{var C=function t(e){var r;if(e)for(var n=0;n<e.length;n++){if("a"===(r=e[n]).tag)return r;if(r.children&&(r=t(r.children)))return r}}(this.$slots.default);if(C){C.isStatic=!1;var A=C.data=t({},C.data);for(var O in A.on=A.on||{},A.on){var _=A.on[O];O in R&&(A.on[O]=Array.isArray(_)?_:[_])}for(var j in R)j in A.on?A.on[j].push(R[j]):A.on[j]=x;var T=C.data.attrs=t({},C.data.attrs);T.href=u,T["aria-current"]=b}else k.on=R}return e(this.tag,k,this.$slots.default)}};function z(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}var D="undefined"!=typeof window;function K(t,e,r,n,o){var i=e||[],a=r||Object.create(null),s=n||Object.create(null);t.forEach((function(t){!function t(e,r,n,o,i,a){var s=o.path,u=o.name,c=o.pathToRegexpOptions||{},p=function(t,e,r){return r||(t=t.replace(/\/$/,"")),"/"===t[0]||null==e?t:x(e.path+"/"+t)}(s,i,c.strict);"boolean"==typeof o.caseSensitive&&(c.sensitive=o.caseSensitive);var f={path:p,regex:J(p,c),components:o.components||{default:o.component},alias:o.alias?"string"==typeof o.alias?[o.alias]:o.alias:[],instances:{},enteredCbs:{},name:u,parent:i,matchAs:a,redirect:o.redirect,beforeEnter:o.beforeEnter,meta:o.meta||{},props:null==o.props?{}:o.components?o.props:{default:o.props}};if(o.children&&o.children.forEach((function(o){var i=a?x(a+"/"+o.path):void 0;t(e,r,n,o,f,i)})),r[f.path]||(e.push(f.path),r[f.path]=f),void 0!==o.alias)for(var h=Array.isArray(o.alias)?o.alias:[o.alias],l=0;l<h.length;++l){var d={path:h[l],children:o.children};t(e,r,n,d,i,f.path||"/")}u&&(n[u]||(n[u]=f))}(i,a,s,t,o)}));for(var u=0,c=i.length;u<c;u++)"*"===i[u]&&(i.push(i.splice(u,1)[0]),c--,u--);return{pathList:i,pathMap:a,nameMap:s}}function J(t,e){return k(t,[],e)}function Q(t,e){var r=K(t),n=r.pathList,o=r.pathMap,i=r.nameMap;function a(t,r,a){var s=V(t,r,!1,e),c=s.name;if(c){var p=i[c];if(!p)return u(null,s);var f=p.regex.keys.filter((function(t){return!t.optional})).map((function(t){return t.name}));if("object"!=typeof s.params&&(s.params={}),r&&"object"==typeof r.params)for(var h in r.params)!(h in s.params)&&f.indexOf(h)>-1&&(s.params[h]=r.params[h]);return s.path=M(p.path,s.params),u(p,s,a)}if(s.path){s.params={};for(var l=0;l<n.length;l++){var d=n[l],v=o[d];if(X(v.regex,s.path,s.params))return u(v,s,a)}}return u(null,s)}function s(t,r){var n=t.redirect,o="function"==typeof n?n(p(t,r,null,e)):n;if("string"==typeof o&&(o={path:o}),!o||"object"!=typeof o)return u(null,r);var s=o,c=s.name,f=s.path,h=r.query,l=r.hash,d=r.params;return h=s.hasOwnProperty("query")?s.query:h,l=s.hasOwnProperty("hash")?s.hash:l,d=s.hasOwnProperty("params")?s.params:d,c?(i[c],a({_normalized:!0,name:c,query:h,hash:l,params:d},void 0,r)):f?a({_normalized:!0,path:M(function(t,e){return b(t,e.parent?e.parent.path:"/",!0)}(f,t),d),query:h,hash:l},void 0,r):u(null,r)}function u(t,r,n){return t&&t.redirect?s(t,n||r):t&&t.matchAs?function(t,e,r){var n=a({_normalized:!0,path:M(r,e.params)});if(n){var o=n.matched,i=o[o.length-1];return e.params=n.params,u(i,e)}return u(null,e)}(0,r,t.matchAs):p(t,r,n,e)}return{match:a,addRoute:function(t,e){var r="object"!=typeof t?i[t]:void 0;K([e||t],n,o,i,r),r&&r.alias.length&&K(r.alias.map((function(t){return{path:t,children:[e]}})),n,o,i,r)},getRoutes:function(){return n.map((function(t){return o[t]}))},addRoutes:function(t){K(t,n,o,i)}}}function X(t,e,r){var n=e.match(t);if(!n)return!1;if(!r)return!0;for(var o=1,a=n.length;o<a;++o){var s=t.keys[o-1];s&&(r[s.name||"pathMatch"]="string"==typeof n[o]?i(n[o]):n[o])}return!0}var Y=D&&window.performance&&window.performance.now?window.performance:Date;function W(){return Y.now().toFixed(3)}var G=W();function Z(){return G}function tt(t){return G=t}var et=Object.create(null);function rt(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var e=window.location.protocol+"//"+window.location.host,r=window.location.href.replace(e,""),n=t({},window.history.state);return n.key=Z(),window.history.replaceState(n,"",r),window.addEventListener("popstate",it),function(){window.removeEventListener("popstate",it)}}function nt(t,e,r,n){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick((function(){var i=function(){var t=Z();if(t)return et[t]}(),a=o.call(t,e,r,n?i:null);a&&("function"==typeof a.then?a.then((function(t){pt(t,i)})).catch((function(t){})):pt(a,i))}))}}function ot(){var t=Z();t&&(et[t]={x:window.pageXOffset,y:window.pageYOffset})}function it(t){ot(),t.state&&t.state.key&&tt(t.state.key)}function at(t){return ut(t.x)||ut(t.y)}function st(t){return{x:ut(t.x)?t.x:window.pageXOffset,y:ut(t.y)?t.y:window.pageYOffset}}function ut(t){return"number"==typeof t}var ct=/^#\d/;function pt(t,e){var r,n="object"==typeof t;if(n&&"string"==typeof t.selector){var o=ct.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(o){var i=t.offset&&"object"==typeof t.offset?t.offset:{};e=function(t,e){var r=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-r.left-e.x,y:n.top-r.top-e.y}}(o,i={x:ut((r=i).x)?r.x:0,y:ut(r.y)?r.y:0})}else at(t)&&(e=st(t))}else n&&at(t)&&(e=st(t));e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}var ft,ht=D&&(-1===(ft=window.navigator.userAgent).indexOf("Android 2.")&&-1===ft.indexOf("Android 4.0")||-1===ft.indexOf("Mobile Safari")||-1!==ft.indexOf("Chrome")||-1!==ft.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState;function lt(e,r){ot();var n=window.history;try{if(r){var o=t({},n.state);o.key=Z(),n.replaceState(o,"",e)}else n.pushState({key:tt(W())},"",e)}catch(t){window.location[r?"replace":"assign"](e)}}function dt(t){lt(t,!0)}var vt={redirected:2,aborted:4,cancelled:8,duplicated:16};function yt(t,e){return gt(t,e,vt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return wt.forEach((function(r){r in t&&(e[r]=t[r])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function mt(t,e){return gt(t,e,vt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function gt(t,e,r,n){var o=new Error(n);return o._isRouter=!0,o.from=t,o.to=e,o.type=r,o}var wt=["params","query","hash"];function bt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function xt(t,e){return bt(t)&&t._isRouter&&(null==e||t.type===e)}function Rt(t,e,r){var n=function(o){o>=t.length?r():t[o]?e(t[o],(function(){n(o+1)})):n(o+1)};n(0)}function kt(t){return function(e,r,n){var o=!1,i=0,a=null;Et(t,(function(t,e,r,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=Ot((function(e){var o;((o=e).__esModule||At&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:H.extend(e),r.components[s]=e,--i<=0&&n()})),p=Ot((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=bt(t)?t:new Error(e),n(a))}));try{u=t(c,p)}catch(t){p(t)}if(u)if("function"==typeof u.then)u.then(c,p);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,p)}}})),o||n()}}function Et(t,e){return Ct(t.map((function(t){return Object.keys(t.components).map((function(r){return e(t.components[r],t.instances[r],t,r)}))})))}function Ct(t){return Array.prototype.concat.apply([],t)}var At="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ot(t){var e=!1;return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];if(!e)return e=!0,t.apply(this,r)}}var _t=function(t,e){this.router=t,this.base=function(t){if(!t)if(D){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}(e),this.current=h,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function jt(t,e,r,n){var o=Et(t,(function(t,n,o,i){var a=function(t,e){return"function"!=typeof t&&(t=H.extend(t)),t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return r(t,n,o,i)})):r(a,n,o,i)}));return Ct(n?o.reverse():o)}function Tt(t,e){if(e)return function(){return t.apply(e,arguments)}}_t.prototype.listen=function(t){this.cb=t},_t.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},_t.prototype.onError=function(t){this.errorCbs.push(t)},_t.prototype.transitionTo=function(t,e,r){var n,o=this;try{n=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(n,(function(){o.updateRoute(n),e&&e(n),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(n,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(n)})))}),(function(t){r&&r(t),t&&!o.ready&&(xt(t,vt.redirected)&&i===h||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},_t.prototype.confirmTransition=function(t,e,r){var n=this,o=this.current;this.pending=t;var i,a,s=function(t){!xt(t)&&bt(t)&&(n.errorCbs.length?n.errorCbs.forEach((function(e){e(t)})):console.error(t)),r&&r(t)},u=t.matched.length-1,c=o.matched.length-1;if(v(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),t.hash&&nt(this.router,o,t,!1),s(((a=gt(i=o,t,vt.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var p=function(t,e){var r,n=Math.max(t.length,e.length);for(r=0;r<n&&t[r]===e[r];r++);return{updated:e.slice(0,r),activated:e.slice(r),deactivated:t.slice(r)}}(this.current.matched,t.matched),f=p.updated,h=p.deactivated,l=p.activated,d=[].concat(function(t){return jt(t,"beforeRouteLeave",Tt,!0)}(h),this.router.beforeHooks,function(t){return jt(t,"beforeRouteUpdate",Tt)}(f),l.map((function(t){return t.beforeEnter})),kt(l)),y=function(e,r){if(n.pending!==t)return s(mt(o,t));try{e(t,o,(function(e){!1===e?(n.ensureURL(!0),s(function(t,e){return gt(t,e,vt.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}(o,t))):bt(e)?(n.ensureURL(!0),s(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(s(yt(o,t)),"object"==typeof e&&e.replace?n.replace(e):n.push(e)):r(e)}))}catch(t){s(t)}};Rt(d,y,(function(){Rt(function(t){return jt(t,"beforeRouteEnter",(function(t,e,r,n){return function(t,e,r){return function(n,o,i){return t(n,o,(function(t){"function"==typeof t&&(e.enteredCbs[r]||(e.enteredCbs[r]=[]),e.enteredCbs[r].push(t)),i(t)}))}}(t,r,n)}))}(l).concat(n.router.resolveHooks),y,(function(){if(n.pending!==t)return s(mt(o,t));n.pending=null,e(t),n.router.app&&n.router.app.$nextTick((function(){m(t)}))}))}))},_t.prototype.updateRoute=function(t){this.current=t,this.cb&&this.cb(t)},_t.prototype.setupListeners=function(){},_t.prototype.teardown=function(){this.listeners.forEach((function(t){t()})),this.listeners=[],this.current=h,this.pending=null};var St=function(t){function e(e,r){t.call(this,e,r),this._startLocation=Pt(this.base)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,r=e.options.scrollBehavior,n=ht&&r;n&&this.listeners.push(rt());var o=function(){var r=t.current,o=Pt(t.base);t.current===h&&o===t._startLocation||t.transitionTo(o,(function(t){n&&nt(e,t,r,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){lt(x(n.base+t.fullPath)),nt(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){dt(x(n.base+t.fullPath)),nt(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.ensureURL=function(t){if(Pt(this.base)!==this.current.fullPath){var e=x(this.base+this.current.fullPath);t?lt(e):dt(e)}},e.prototype.getCurrentLocation=function(){return Pt(this.base)},e}(_t);function Pt(t){var e=window.location.pathname,r=e.toLowerCase(),n=t.toLowerCase();return!t||r!==n&&0!==r.indexOf(x(n+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Lt=function(t){function e(e,r,n){t.call(this,e,r),n&&function(t){var e=Pt(t);if(!/^\/#/.test(e))return window.location.replace(x(t+"/#"+e)),!0}(this.base)||$t()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,r=ht&&e;r&&this.listeners.push(rt());var n=function(){var e=t.current;$t()&&t.transitionTo(qt(),(function(n){r&&nt(t.router,n,e,!0),ht||It(n.fullPath)}))},o=ht?"popstate":"hashchange";window.addEventListener(o,n),this.listeners.push((function(){window.removeEventListener(o,n)}))}},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),nt(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){It(t.fullPath),nt(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;qt()!==e&&(t?Bt(e):It(e))},e.prototype.getCurrentLocation=function(){return qt()},e}(_t);function $t(){var t=qt();return"/"===t.charAt(0)||(It("/"+t),!1)}function qt(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ut(t){var e=window.location.href,r=e.indexOf("#");return(r>=0?e.slice(0,r):e)+"#"+t}function Bt(t){ht?lt(Ut(t)):window.location.hash=t}function It(t){ht?dt(Ut(t)):window.location.replace(Ut(t))}var Mt=function(t){function e(e,r){t.call(this,e,r),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index+1).concat(t),n.index++,e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index).concat(t),e&&e(t)}),r)},e.prototype.go=function(t){var e=this,r=this.index+t;if(!(r<0||r>=this.stack.length)){var n=this.stack[r];this.confirmTransition(n,(function(){var t=e.current;e.index=r,e.updateRoute(n),e.router.afterHooks.forEach((function(e){e&&e(n,t)}))}),(function(t){xt(t,vt.duplicated)&&(e.index=r)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(_t),Vt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Q(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ht&&!1!==t.fallback,this.fallback&&(e="hash"),D||(e="abstract"),this.mode=e,e){case"history":this.history=new St(this,t.base);break;case"hash":this.history=new Lt(this,t.base,this.fallback);break;case"abstract":this.history=new Mt(this,t.base)}},Ht={currentRoute:{configurable:!0}};Vt.prototype.match=function(t,e,r){return this.matcher.match(t,e,r)},Ht.currentRoute.get=function(){return this.history&&this.history.current},Vt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var r=e.apps.indexOf(t);r>-1&&e.apps.splice(r,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var r=this.history;if(r instanceof St||r instanceof Lt){var n=function(t){r.setupListeners(),function(t){var n=r.current,o=e.options.scrollBehavior;ht&&o&&"fullPath"in t&&nt(e,t,n,!1)}(t)};r.transitionTo(r.getCurrentLocation(),n,n)}r.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Vt.prototype.beforeEach=function(t){return Ft(this.beforeHooks,t)},Vt.prototype.beforeResolve=function(t){return Ft(this.resolveHooks,t)},Vt.prototype.afterEach=function(t){return Ft(this.afterHooks,t)},Vt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Vt.prototype.onError=function(t){this.history.onError(t)},Vt.prototype.push=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.push(t,e,r)}));this.history.push(t,e,r)},Vt.prototype.replace=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.replace(t,e,r)}));this.history.replace(t,e,r)},Vt.prototype.go=function(t){this.history.go(t)},Vt.prototype.back=function(){this.go(-1)},Vt.prototype.forward=function(){this.go(1)},Vt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Vt.prototype.resolve=function(t,e,r){var n=V(t,e=e||this.history.current,r,this),o=this.match(n,e),i=o.redirectedFrom||o.fullPath;return{location:n,route:o,href:function(t,e,r){var n="hash"===r?"#"+e:e;return t?x(t+"/"+n):n}(this.history.base,i,this.mode),normalizedTo:n,resolved:o}},Vt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Vt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==h&&this.history.transitionTo(this.history.getCurrentLocation())},Vt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==h&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Vt.prototype,Ht);var Nt=Vt;function Ft(t,e){return t.push(e),function(){var r=t.indexOf(e);r>-1&&t.splice(r,1)}}return Vt.install=function t(e){if(!t.installed||H!==e){t.installed=!0,H=e;var r=function(t){return void 0!==t},n=function(t,e){var n=t.$options._parentVnode;r(n)&&r(n=n.data)&&r(n=n.registerRouteInstance)&&n(t,e)};e.mixin({beforeCreate:function(){r(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,n(this,this)},destroyed:function(){n(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",g),e.component("RouterLink",F);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Vt.version="3.6.5",Vt.isNavigationFailure=xt,Vt.NavigationFailureType=vt,Vt.START_LOCATION=h,D&&window.Vue&&window.Vue.use(Vt),Nt},"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).VueRouter=e(); \ No newline at end of file + * vue-router v0.7.13 + * (c) 2016 Evan You + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueRouter=e()}(this,function(){"use strict";function t(t,e,n){this.path=t,this.matcher=e,this.delegate=n}function e(t){this.routes={},this.children={},this.target=t}function n(e,r,i){return function(o,a){var s=e+o;return a?void a(n(s,r,i)):new t(e+o,r,i)}}function r(t,e,n){for(var r=0,i=0,o=t.length;o>i;i++)r+=t[i].path.length;e=e.substr(r);var a={path:e,handler:n};t.push(a)}function i(t,e,n,o){var a=e.routes;for(var s in a)if(a.hasOwnProperty(s)){var h=t.slice();r(h,s,a[s]),e.children[s]?i(h,e.children[s],n,o):n.call(o,h)}}function o(t,r){var o=new e;t(n("",o,this.delegate)),i([],o,function(t){r?r(this,t):this.add(t)},this)}function a(t){B||"undefined"==typeof console||console.error("[vue-router] "+t)}function s(t,e){try{return e?decodeURIComponent(t):decodeURI(t)}catch(n){a("malformed URI"+(e?" component: ":": ")+t)}}function h(t){return"[object Array]"===Object.prototype.toString.call(t)}function c(t){this.string=t}function u(t){this.name=t}function l(t){this.name=t}function p(){}function f(t,e,n){"/"===t.charAt(0)&&(t=t.substr(1));var r=t.split("/"),i=[];n.val="";for(var o=0,a=r.length;a>o;o++){var s,h=r[o];(s=h.match(/^:([^\/]+)$/))?(i.push(new u(s[1])),e.push(s[1]),n.val+="3"):(s=h.match(/^\*([^\/]+)$/))?(i.push(new l(s[1])),n.val+="2",e.push(s[1])):""===h?(i.push(new p),n.val+="1"):(i.push(new c(h)),n.val+="4")}return n.val=+n.val,i}function d(t){this.charSpec=t,this.nextStates=[]}function v(t){return t.sort(function(t,e){return e.specificity.val-t.specificity.val})}function g(t,e){for(var n=[],r=0,i=t.length;i>r;r++){var o=t[r];n=n.concat(o.match(e))}return n}function y(t){this.queryParams=t||{}}function m(t,e,n){for(var r=t.handlers,i=t.regex,o=e.match(i),a=1,s=new y(n),h=0,c=r.length;c>h;h++){for(var u=r[h],l=u.names,p={},f=0,d=l.length;d>f;f++)p[l[f]]=o[a++];s.push({handler:u.handler,params:p,isDynamic:!!l.length})}return s}function _(t,e){return e.eachChar(function(e){t=t.put(e)}),t}function w(t){return t=t.replace(/\+/gm,"%20"),s(t,!0)}function b(t){"undefined"!=typeof console&&console.error("[vue-router] "+t)}function C(t,e,n){var r=t.match(/(\?.*)$/);if(r&&(r=r[1],t=t.slice(0,-r.length)),"?"===e.charAt(0))return t+e;var i=t.split("/");n&&i[i.length-1]||i.pop();for(var o=e.replace(/^\//,"").split("/"),a=0;a<o.length;a++){var s=o[a];"."!==s&&(".."===s?i.pop():i.push(s))}return""!==i[0]&&i.unshift(""),i.join("/")}function R(t){return t&&"function"==typeof t.then}function A(t,e){var n=t&&(t.$options||t.options);return n&&n.route&&n.route[e]}function k(t,e){Y?Y.$options.components._=t.component:Y={resolve:X.Vue.prototype._resolveComponent,$options:{components:{_:t.component}}},Y.resolve("_",function(n){t.component=n,e(n)})}function $(t,e,n){return void 0===e&&(e={}),t=t.replace(/:([^\/]+)/g,function(n,r){var i=e[r];return i||b('param "'+r+'" not found when generating path for "'+t+'" with params '+JSON.stringify(e)),i||""}),n&&(t+=K(n)),t}function x(t,e,n){var r=t.childVM;if(!r||!e)return!1;if(t.Component!==e.component)return!1;var i=A(r,"canReuse");return"boolean"==typeof i?i:i?i.call(r,{to:n.to,from:n.from}):!0}function E(t,e,n){var r=t.childVM,i=A(r,"canDeactivate");i?e.callHook(i,r,n,{expectBoolean:!0}):n()}function V(t,e,n){k(t,function(t){if(!e.aborted){var r=A(t,"canActivate");r?e.callHook(r,null,n,{expectBoolean:!0}):n()}})}function S(t,e,n){var r=t.childVM,i=A(r,"deactivate");i?e.callHooks(i,r,n):n()}function P(t,e,n,r,i){var o=e.activateQueue[n];if(!o)return H(t),t._bound&&t.setComponent(null),void(r&&r());var a=t.Component=o.component,s=A(a,"activate"),h=A(a,"data"),c=A(a,"waitForData");t.depth=n,t.activated=!1;var u=void 0,l=!(!h||c);if(i=i&&t.childVM&&t.childVM.constructor===a)u=t.childVM,u.$loadingRouteData=l;else if(H(t),t.unbuild(!0),u=t.build({_meta:{$loadingRouteData:l},created:function(){this._routerView=t}}),t.keepAlive){u.$loadingRouteData=l;var p=u._keepAliveRouterView;p&&(t.childView=p,u._keepAliveRouterView=null)}var f=function(){u.$destroy()},d=function(){if(i)return void(r&&r());var n=e.router;n._rendered||n._transitionOnLoad?t.transition(u):(t.setCurrent?t.setCurrent(u):t.childVM=u,u.$before(t.anchor,null,!1)),r&&r()},v=function(){t.childView&&P(t.childView,e,n+1,null,i||t.keepAlive),d()},g=function(){t.activated=!0,h&&c?T(u,e,h,v,f):(h&&T(u,e,h),v())};s?e.callHooks(s,u,g,{cleanup:f,postActivate:!0}):g()}function O(t,e){var n=t.childVM,r=A(n,"data");r&&T(n,e,r)}function T(t,e,n,r,i){t.$loadingRouteData=!0,e.callHooks(n,t,function(){t.$loadingRouteData=!1,t.$emit("route-data-loaded",t),r&&r()},{cleanup:i,postActivate:!0,processData:function(e){var n=[];return j(e)&&Object.keys(e).forEach(function(r){var i=e[r];R(i)?n.push(i.then(function(e){t.$set(r,e)})):t.$set(r,i)}),n.length?n[0].constructor.all(n):void 0}})}function H(t){t.keepAlive&&t.childVM&&t.childView&&(t.childVM._keepAliveRouterView=t.childView),t.childView=null}function j(t){return"[object Object]"===Object.prototype.toString.call(t)}function M(t){return"[object Object]"===Object.prototype.toString.call(t)}function D(t){return t?Array.prototype.slice.call(t):[]}function q(t){var e=t.util,n=e.extend,r=e.isArray,i=e.defineReactive,o=t.prototype._init;t.prototype._init=function(t){t=t||{};var e=t._parent||t.parent||this,n=e.$router,r=e.$route;n&&(this.$router=n,n._children.push(this),this._defineMeta?this._defineMeta("$route",r):i(this,"$route",r)),o.call(this,t)};var a=t.prototype._destroy;t.prototype._destroy=function(){!this._isBeingDestroyed&&this.$router&&this.$router._children.$remove(this),a.apply(this,arguments)};var s=t.config.optionMergeStrategies,h=/^(data|activate|deactivate)$/;s&&(s.route=function(t,e){if(!e)return t;if(!t)return e;var i={};n(i,t);for(var o in e){var a=i[o],s=e[o];a&&h.test(o)?i[o]=(r(a)?a:[a]).concat(s):i[o]=s}return i})}function z(t){var e=t.util,n=t.directive("_component")||t.internalDirectives.component,r=e.extend({},n);e.extend(r,{_isRouterView:!0,bind:function(){var t=this.vm.$route;if(!t)return void b("<router-view> can only be used inside a router-enabled app.");this._isDynamicLiteral=!0,n.bind.call(this);for(var e=void 0,r=this.vm;r;){if(r._routerView){e=r._routerView;break}r=r.$parent}if(e)this.parentView=e,e.childView=this;else{var i=t.router;i._rootView=this}var o=t.router._currentTransition;if(!e&&o.done||e&&e.activated){var a=e?e.depth+1:0;P(this,o,a)}},unbind:function(){this.parentView&&(this.parentView.childView=null),n.unbind.call(this)}}),t.elementDirective("router-view",r)}function Q(t){function e(t){return t.protocol===location.protocol&&t.hostname===location.hostname&&t.port===location.port}function n(t,e,n){if(e=e.trim(),-1===e.indexOf(" "))return void n(t,e);for(var r=e.split(/\s+/),i=0,o=r.length;o>i;i++)n(t,r[i])}var r=t.util,i=r.bind,o=r.isObject,a=r.addClass,s=r.removeClass,h=t.directive("on").priority,c="__vue-router-link-update__",u=0;t.directive("link-active",{priority:9999,bind:function(){for(var t=this,e=String(u++),n=this.el.querySelectorAll("[v-link]"),r=0,i=n.length;i>r;r++){var o=n[r],a=o.getAttribute(c),s=a?a+","+e:e;o.setAttribute(c,s)}this.vm.$on(c,this.cb=function(n,r){n.activeIds.indexOf(e)>-1&&n.updateClasses(r,t.el)})},unbind:function(){this.vm.$off(c,this.cb)}}),t.directive("link",{priority:h-2,bind:function(){var t=this.vm;if(!t.$route)return void b("v-link can only be used inside a router-enabled app.");this.router=t.$route.router,this.unwatch=t.$watch("$route",i(this.onRouteUpdate,this));var e=this.el.getAttribute(c);e&&(this.el.removeAttribute(c),this.activeIds=e.split(",")),"A"===this.el.tagName&&"_blank"===this.el.getAttribute("target")||(this.handler=i(this.onClick,this),this.el.addEventListener("click",this.handler))},update:function(t){this.target=t,o(t)&&(this.append=t.append,this.exact=t.exact,this.prevActiveClass=this.activeClass,this.activeClass=t.activeClass),this.onRouteUpdate(this.vm.$route)},onClick:function(t){if(!(t.metaKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||0!==t.button)){var n=this.target;if(n)t.preventDefault(),this.router.go(n);else{for(var r=t.target;"A"!==r.tagName&&r!==this.el;)r=r.parentNode;if("A"===r.tagName&&e(r)){t.preventDefault();var i=r.pathname;this.router.history.root&&(i=i.replace(this.router.history.rootRE,"")),this.router.go({path:i,replace:n&&n.replace,append:n&&n.append})}}}},onRouteUpdate:function(t){var e=this.router.stringifyPath(this.target);this.path!==e&&(this.path=e,this.updateActiveMatch(),this.updateHref()),this.activeIds?this.vm.$emit(c,this,t.path):this.updateClasses(t.path,this.el)},updateActiveMatch:function(){this.activeRE=this.path&&!this.exact?new RegExp("^"+this.path.replace(/\/$/,"").replace(at,"").replace(ot,"\\$&")+"(\\/|$)"):null},updateHref:function(){if("A"===this.el.tagName){var t=this.path,e=this.router,n="/"===t.charAt(0),r=t&&("hash"===e.mode||n)?e.history.formatPath(t,this.append):t;r?this.el.href=r:this.el.removeAttribute("href")}},updateClasses:function(t,e){var r=this.activeClass||this.router._linkActiveClass;this.prevActiveClass&&this.prevActiveClass!==r&&n(e,this.prevActiveClass,s);var i=this.path.replace(at,"");t=t.replace(at,""),this.exact?i===t||"/"!==i.charAt(i.length-1)&&i===t.replace(it,"")?n(e,r,a):n(e,r,s):this.activeRE&&this.activeRE.test(t)?n(e,r,a):n(e,r,s)},unbind:function(){this.el.removeEventListener("click",this.handler),this.unwatch&&this.unwatch()}})}function F(t,e){var n=e.component;ht.util.isPlainObject(n)&&(n=e.component=ht.extend(n)),"function"!=typeof n&&(e.component=null,b('invalid component for route "'+t+'".'))}var I={};I.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.prototype={to:function(t,e){var n=this.delegate;if(n&&n.willAddRoute&&(t=n.willAddRoute(this.matcher.target,t)),this.matcher.add(this.path,t),e){if(0===e.length)throw new Error("You must have an argument in the function passed to `to`");this.matcher.addChild(this.path,t,e,this.delegate)}return this}},e.prototype={add:function(t,e){this.routes[t]=e},addChild:function(t,r,i,o){var a=new e(r);this.children[t]=a;var s=n(t,a,o);o&&o.contextEntered&&o.contextEntered(r,s),i(s)}};var U=["/",".","*","+","?","|","(",")","[","]","{","}","\\"],L=new RegExp("(\\"+U.join("|\\")+")","g"),B=!1;c.prototype={eachChar:function(t){for(var e,n=this.string,r=0,i=n.length;i>r;r++)e=n.charAt(r),t({validChars:e})},regex:function(){return this.string.replace(L,"\\$1")},generate:function(){return this.string}},u.prototype={eachChar:function(t){t({invalidChars:"/",repeat:!0})},regex:function(){return"([^/]+)"},generate:function(t){var e=t[this.name];return null==e?":"+this.name:e}},l.prototype={eachChar:function(t){t({invalidChars:"",repeat:!0})},regex:function(){return"(.+)"},generate:function(t){var e=t[this.name];return null==e?":"+this.name:e}},p.prototype={eachChar:function(){},regex:function(){return""},generate:function(){return""}},d.prototype={get:function(t){for(var e=this.nextStates,n=0,r=e.length;r>n;n++){var i=e[n],o=i.charSpec.validChars===t.validChars;if(o=o&&i.charSpec.invalidChars===t.invalidChars)return i}},put:function(t){var e;return(e=this.get(t))?e:(e=new d(t),this.nextStates.push(e),t.repeat&&e.nextStates.push(e),e)},match:function(t){for(var e,n,r,i=this.nextStates,o=[],a=0,s=i.length;s>a;a++)e=i[a],n=e.charSpec,"undefined"!=typeof(r=n.validChars)?-1!==r.indexOf(t)&&o.push(e):"undefined"!=typeof(r=n.invalidChars)&&-1===r.indexOf(t)&&o.push(e);return o}};var N=Object.create||function(t){function e(){}return e.prototype=t,new e};y.prototype=N({splice:Array.prototype.splice,slice:Array.prototype.slice,push:Array.prototype.push,length:0,queryParams:null});var G=function(){this.rootState=new d,this.names={}};G.prototype={add:function(t,e){for(var n,r=this.rootState,i="^",o={},a=[],s=[],h=!0,c=0,u=t.length;u>c;c++){var l=t[c],d=[],v=f(l.path,d,o);s=s.concat(v);for(var g=0,y=v.length;y>g;g++){var m=v[g];m instanceof p||(h=!1,r=r.put({validChars:"/"}),i+="/",r=_(r,m),i+=m.regex())}var w={handler:l.handler,names:d};a.push(w)}h&&(r=r.put({validChars:"/"}),i+="/"),r.handlers=a,r.regex=new RegExp(i+"$"),r.specificity=o,(n=e&&e.as)&&(this.names[n]={segments:s,handlers:a})},handlersFor:function(t){var e=this.names[t],n=[];if(!e)throw new Error("There is no route named "+t);for(var r=0,i=e.handlers.length;i>r;r++)n.push(e.handlers[r]);return n},hasRoute:function(t){return!!this.names[t]},generate:function(t,e){var n=this.names[t],r="";if(!n)throw new Error("There is no route named "+t);for(var i=n.segments,o=0,a=i.length;a>o;o++){var s=i[o];s instanceof p||(r+="/",r+=s.generate(e))}return"/"!==r.charAt(0)&&(r="/"+r),e&&e.queryParams&&(r+=this.generateQueryString(e.queryParams)),r},generateQueryString:function(t){var e=[],n=[];for(var r in t)t.hasOwnProperty(r)&&n.push(r);n.sort();for(var i=0,o=n.length;o>i;i++){r=n[i];var a=t[r];if(null!=a){var s=encodeURIComponent(r);if(h(a))for(var c=0,u=a.length;u>c;c++){var l=r+"[]="+encodeURIComponent(a[c]);e.push(l)}else s+="="+encodeURIComponent(a),e.push(s)}}return 0===e.length?"":"?"+e.join("&")},parseQueryString:function(t){for(var e=t.split("&"),n={},r=0;r<e.length;r++){var i,o=e[r].split("="),a=w(o[0]),s=a.length,h=!1;1===o.length?i="true":(s>2&&"[]"===a.slice(s-2)&&(h=!0,a=a.slice(0,s-2),n[a]||(n[a]=[])),i=o[1]?w(o[1]):""),h?n[a].push(i):n[a]=i}return n},recognize:function(t,e){B=e;var n,r,i,o,a=[this.rootState],h={},c=!1;if(o=t.indexOf("?"),-1!==o){var u=t.substr(o+1,t.length);t=t.substr(0,o),u&&(h=this.parseQueryString(u))}if(t=s(t)){for("/"!==t.charAt(0)&&(t="/"+t),n=t.length,n>1&&"/"===t.charAt(n-1)&&(t=t.substr(0,n-1),c=!0),r=0,i=t.length;i>r&&(a=g(a,t.charAt(r)),a.length);r++);var l=[];for(r=0,i=a.length;i>r;r++)a[r].handlers&&l.push(a[r]);a=v(l);var p=l[0];return p&&p.handlers?(c&&"(.+)$"===p.regex.source.slice(-5)&&(t+="/"),m(p,t,h)):void 0}}},G.prototype.map=o;var K=G.prototype.generateQueryString,X={},Y=void 0,J=/#.*$/,W=function(){function t(e){var n=e.root,r=e.onChange;I.classCallCheck(this,t),n&&"/"!==n?("/"!==n.charAt(0)&&(n="/"+n),this.root=n.replace(/\/$/,""),this.rootRE=new RegExp("^\\"+this.root)):this.root=null,this.onChange=r;var i=document.querySelector("base");this.base=i&&i.getAttribute("href")}return t.prototype.start=function(){var t=this;this.listener=function(e){var n=location.pathname+location.search;t.root&&(n=n.replace(t.rootRE,"")),t.onChange(n,e&&e.state,location.hash)},window.addEventListener("popstate",this.listener),this.listener()},t.prototype.stop=function(){window.removeEventListener("popstate",this.listener)},t.prototype.go=function(t,e,n){var r=this.formatPath(t,n);e?history.replaceState({},"",r):(history.replaceState({pos:{x:window.pageXOffset,y:window.pageYOffset}},"",location.href),history.pushState({},"",r));var i=t.match(J),o=i&&i[0];t=r.replace(J,"").replace(this.rootRE,""),this.onChange(t,null,o)},t.prototype.formatPath=function(t,e){return"/"===t.charAt(0)?this.root?this.root+"/"+t.replace(/^\//,""):t:C(this.base||location.pathname,t,e)},t}(),Z=function(){function t(e){var n=e.hashbang,r=e.onChange;I.classCallCheck(this,t),this.hashbang=n,this.onChange=r}return t.prototype.start=function(){var t=this;this.listener=function(){var e=location.hash,n=e.replace(/^#!?/,"");"/"!==n.charAt(0)&&(n="/"+n);var r=t.formatPath(n);if(r!==e)return void location.replace(r);var i=location.search&&e.indexOf("?")>-1?"&"+location.search.slice(1):location.search;t.onChange(e.replace(/^#!?/,"")+i)},window.addEventListener("hashchange",this.listener),this.listener()},t.prototype.stop=function(){window.removeEventListener("hashchange",this.listener)},t.prototype.go=function(t,e,n){t=this.formatPath(t,n),e?location.replace(t):location.hash=t},t.prototype.formatPath=function(t,e){var n="/"===t.charAt(0),r="#"+(this.hashbang?"!":"");return n?r+t:r+C(location.hash.replace(/^#!?/,""),t,e)},t}(),tt=function(){function t(e){var n=e.onChange;I.classCallCheck(this,t),this.onChange=n,this.currentPath="/"}return t.prototype.start=function(){this.onChange("/")},t.prototype.stop=function(){},t.prototype.go=function(t,e,n){t=this.currentPath=this.formatPath(t,n),this.onChange(t)},t.prototype.formatPath=function(t,e){return"/"===t.charAt(0)?t:C(this.currentPath,t,e)},t}(),et=function(){function t(e,n,r){I.classCallCheck(this,t),this.router=e,this.to=n,this.from=r,this.next=null,this.aborted=!1,this.done=!1}return t.prototype.abort=function(){if(!this.aborted){this.aborted=!0;var t=!this.from.path&&"/"===this.to.path;t||this.router.replace(this.from.path||"/")}},t.prototype.redirect=function(t){this.aborted||(this.aborted=!0,"string"==typeof t?t=$(t,this.to.params,this.to.query):(t.params=t.params||this.to.params,t.query=t.query||this.to.query),this.router.replace(t))},t.prototype.start=function(t){for(var e=this,n=[],r=this.router._rootView;r;)n.unshift(r),r=r.childView;var i=n.slice().reverse(),o=this.activateQueue=D(this.to.matched).map(function(t){return t.handler}),a=void 0,s=void 0;for(a=0;a<i.length&&x(i[a],o[a],e);a++);a>0&&(s=i.slice(0,a),n=i.slice(a).reverse(),o=o.slice(a)),e.runQueue(n,E,function(){e.runQueue(o,V,function(){e.runQueue(n,S,function(){if(e.router._onTransitionValidated(e),s&&s.forEach(function(t){return O(t,e)}),n.length){var r=n[n.length-1],i=s?s.length:0;P(r,e,i,t)}else t()})})})},t.prototype.runQueue=function(t,e,n){function r(o){o>=t.length?n():e(t[o],i,function(){r(o+1)})}var i=this;r(0)},t.prototype.callHook=function(t,e,n){var r=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],i=r.expectBoolean,o=void 0===i?!1:i,a=r.postActivate,s=void 0===a?!1:a,h=r.processData,c=r.cleanup,u=this,l=!1,p=function(){c&&c(),u.abort()},f=function(t){if(s?v():p(),t&&!u.router._suppress)throw b("Uncaught error during transition: "),t instanceof Error?t:new Error(t)},d=function(t){try{f(t)}catch(e){setTimeout(function(){throw e},0)}},v=function(){return l?void b("transition.next() should be called only once."):(l=!0,u.aborted?void(c&&c()):void(n&&n()))},g=function(e){"boolean"==typeof e?e?v():p():R(e)?e.then(function(t){t?v():p()},d):t.length||v()},y=function(t){var e=void 0;try{e=h(t)}catch(n){return f(n)}R(e)?e.then(v,d):v()},m={to:u.to,from:u.from,abort:p,next:h?y:v,redirect:function(){u.redirect.apply(u,arguments)}},_=void 0;try{_=t.call(e,m)}catch(w){return f(w)}o?g(_):R(_)?h?_.then(y,d):_.then(v,d):h&&M(_)?y(_):t.length||v()},t.prototype.callHooks=function(t,e,n,r){var i=this;Array.isArray(t)?this.runQueue(t,function(t,n,o){i.aborted||i.callHook(t,e,o,r)},n):this.callHook(t,e,n,r)},t}(),nt=/^(component|subRoutes|fullPath)$/,rt=function ut(t,e){var n=this;I.classCallCheck(this,ut);var r=e._recognizer.recognize(t);r&&([].forEach.call(r,function(t){for(var e in t.handler)nt.test(e)||(n[e]=t.handler[e])}),this.query=r.queryParams,this.params=[].reduce.call(r,function(t,e){if(e.params)for(var n in e.params)t[n]=e.params[n];return t},{})),this.path=t,this.matched=r||e._notFoundHandler,Object.defineProperty(this,"router",{enumerable:!1,value:e}),Object.freeze(this)},it=/\/$/,ot=/[-.*+?^${}()|[\]\/\\]/g,at=/\?.*$/,st={"abstract":tt,hash:Z,html5:W},ht=void 0,ct=function(){function t(){var e=this,n=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],r=n.hashbang,i=void 0===r?!0:r,o=n["abstract"],a=void 0===o?!1:o,s=n.history,h=void 0===s?!1:s,c=n.saveScrollPosition,u=void 0===c?!1:c,l=n.transitionOnLoad,p=void 0===l?!1:l,f=n.suppressTransitionError,d=void 0===f?!1:f,v=n.root,g=void 0===v?null:v,y=n.linkActiveClass,m=void 0===y?"v-link-active":y;if(I.classCallCheck(this,t),!t.installed)throw new Error("Please install the Router with Vue.use() before creating an instance.");this.app=null,this._children=[],this._recognizer=new G,this._guardRecognizer=new G,this._started=!1,this._startCb=null,this._currentRoute={},this._currentTransition=null,this._previousTransition=null,this._notFoundHandler=null,this._notFoundRedirect=null,this._beforeEachHooks=[],this._afterEachHooks=[],this._rendered=!1,this._transitionOnLoad=p,this._root=g,this._abstract=a,this._hashbang=i;var _="undefined"!=typeof window&&window.history&&window.history.pushState;this._history=h&&_,this._historyFallback=h&&!_;var w=ht.util.inBrowser;this.mode=!w||this._abstract?"abstract":this._history?"html5":"hash";var b=st[this.mode];this.history=new b({root:g,hashbang:this._hashbang,onChange:function(t,n,r){e._match(t,n,r)}}),this._saveScrollPosition=u,this._linkActiveClass=m,this._suppress=d}return t.prototype.map=function(t){for(var e in t)this.on(e,t[e]);return this},t.prototype.on=function(t,e){return"*"===t?this._notFound(e):this._addRoute(t,e,[]),this},t.prototype.redirect=function(t){for(var e in t)this._addRedirect(e,t[e]);return this},t.prototype.alias=function(t){for(var e in t)this._addAlias(e,t[e]);return this},t.prototype.beforeEach=function(t){return this._beforeEachHooks.push(t),this},t.prototype.afterEach=function(t){return this._afterEachHooks.push(t),this},t.prototype.go=function(t){var e=!1,n=!1;ht.util.isObject(t)&&(e=t.replace,n=t.append),t=this.stringifyPath(t),t&&this.history.go(t,e,n)},t.prototype.replace=function(t){"string"==typeof t&&(t={path:t}),t.replace=!0,this.go(t)},t.prototype.start=function(t,e,n){if(this._started)return void b("already started.");if(this._started=!0,this._startCb=n,!this.app){if(!t||!e)throw new Error("Must start vue-router with a component and a root container.");if(t instanceof ht)throw new Error("Must start vue-router with a component, not a Vue instance.");this._appContainer=e;var r=this._appConstructor="function"==typeof t?t:ht.extend(t);r.options.name=r.options.name||"RouterApp"}if(this._historyFallback){var i=window.location,o=new W({root:this._root}),a=o.root?i.pathname.replace(o.rootRE,""):i.pathname;if(a&&"/"!==a)return void i.assign((o.root||"")+"/"+this.history.formatPath(a)+i.search)}this.history.start()},t.prototype.stop=function(){this.history.stop(),this._started=!1},t.prototype.stringifyPath=function(t){var e="";if(t&&"object"==typeof t){if(t.name){var n=ht.util.extend,r=this._currentTransition&&this._currentTransition.to.params,i=t.params||{},o=r?n(n({},r),i):i;e=encodeURI(this._recognizer.generate(t.name,o))}else t.path&&(e=encodeURI(t.path));if(t.query){var a=this._recognizer.generateQueryString(t.query);e+=e.indexOf("?")>-1?"&"+a.slice(1):a}}else e=encodeURI(t?t+"":"");return e},t.prototype._addRoute=function(t,e,n){if(F(t,e),e.path=t,e.fullPath=(n.reduce(function(t,e){return t+e.path},"")+t).replace("//","/"),n.push({path:t,handler:e}),this._recognizer.add(n,{as:e.name}),e.subRoutes)for(var r in e.subRoutes)this._addRoute(r,e.subRoutes[r],n.slice())},t.prototype._notFound=function(t){F("*",t),this._notFoundHandler=[{handler:t}]},t.prototype._addRedirect=function(t,e){"*"===t?this._notFoundRedirect=e:this._addGuard(t,e,this.replace)},t.prototype._addAlias=function(t,e){this._addGuard(t,e,this._match)},t.prototype._addGuard=function(t,e,n){var r=this;this._guardRecognizer.add([{path:t,handler:function(t,i){var o=$(e,t.params,i);n.call(r,o)}}])},t.prototype._checkGuard=function(t){var e=this._guardRecognizer.recognize(t,!0);return e?(e[0].handler(e[0],e.queryParams),!0):this._notFoundRedirect&&(e=this._recognizer.recognize(t),!e)?(this.replace(this._notFoundRedirect),!0):void 0},t.prototype._match=function(t,e,n){var r=this;if(!this._checkGuard(t)){var i=this._currentRoute,o=this._currentTransition;if(o){if(o.to.path===t)return;if(i.path===t)return o.aborted=!0,void(this._currentTransition=this._prevTransition);o.aborted=!0}var a=new rt(t,this),s=new et(this,a,i);this._prevTransition=o,this._currentTransition=s,this.app||!function(){var t=r;r.app=new r._appConstructor({el:r._appContainer,created:function(){this.$router=t},_meta:{$route:a}})}();var h=this._beforeEachHooks,c=function(){s.start(function(){r._postTransition(a,e,n)})};h.length?s.runQueue(h,function(t,e,n){s===r._currentTransition&&s.callHook(t,null,n,{expectBoolean:!0})},c):c(),!this._rendered&&this._startCb&&this._startCb.call(null),this._rendered=!0}},t.prototype._onTransitionValidated=function(t){var e=this._currentRoute=t.to;this.app.$route!==e&&(this.app.$route=e,this._children.forEach(function(t){t.$route=e})),this._afterEachHooks.length&&this._afterEachHooks.forEach(function(e){return e.call(null,{to:t.to,from:t.from})}),this._currentTransition.done=!0},t.prototype._postTransition=function(t,e,n){var r=e&&e.pos;r&&this._saveScrollPosition?ht.nextTick(function(){window.scrollTo(r.x,r.y)}):n&&ht.nextTick(function(){var t=document.getElementById(n.slice(1));t&&window.scrollTo(window.scrollX,t.offsetTop)})},t}();return ct.installed=!1,ct.install=function(t){return ct.installed?void b("already installed."):(ht=t,q(ht),z(ht),Q(ht),X.Vue=ht,void(ct.installed=!0))},"undefined"!=typeof window&&window.Vue&&window.Vue.use(ct),ct}); \ No newline at end of file diff --git a/dist/vue-router.mjs b/dist/vue-router.mjs deleted file mode 100644 index 3f123edab..000000000 --- a/dist/vue-router.mjs +++ /dev/null @@ -1,3159 +0,0 @@ -/*! - * vue-router v3.6.5 - * (c) 2022 Evan You - * @license MIT - */ -/* */ - -function assert (condition, message) { - if (!condition) { - throw new Error(("[vue-router] " + message)) - } -} - -function warn (condition, message) { - if (!condition) { - typeof console !== 'undefined' && console.warn(("[vue-router] " + message)); - } -} - -function extend (a, b) { - for (var key in b) { - a[key] = b[key]; - } - return a -} - -/* */ - -var encodeReserveRE = /[!'()*]/g; -var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); }; -var commaRE = /%2C/g; - -// fixed encodeURIComponent which is more conformant to RFC3986: -// - escapes [!'()*] -// - preserve commas -var encode = function (str) { return encodeURIComponent(str) - .replace(encodeReserveRE, encodeReserveReplacer) - .replace(commaRE, ','); }; - -function decode (str) { - try { - return decodeURIComponent(str) - } catch (err) { - if (process.env.NODE_ENV !== 'production') { - warn(false, ("Error decoding \"" + str + "\". Leaving it intact.")); - } - } - return str -} - -function resolveQuery ( - query, - extraQuery, - _parseQuery -) { - if ( extraQuery === void 0 ) extraQuery = {}; - - var parse = _parseQuery || parseQuery; - var parsedQuery; - try { - parsedQuery = parse(query || ''); - } catch (e) { - process.env.NODE_ENV !== 'production' && warn(false, e.message); - parsedQuery = {}; - } - for (var key in extraQuery) { - var value = extraQuery[key]; - parsedQuery[key] = Array.isArray(value) - ? value.map(castQueryParamValue) - : castQueryParamValue(value); - } - return parsedQuery -} - -var castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); }; - -function parseQuery (query) { - var res = {}; - - query = query.trim().replace(/^(\?|#|&)/, ''); - - if (!query) { - return res - } - - query.split('&').forEach(function (param) { - var parts = param.replace(/\+/g, ' ').split('='); - var key = decode(parts.shift()); - var val = parts.length > 0 ? decode(parts.join('=')) : null; - - if (res[key] === undefined) { - res[key] = val; - } else if (Array.isArray(res[key])) { - res[key].push(val); - } else { - res[key] = [res[key], val]; - } - }); - - return res -} - -function stringifyQuery (obj) { - var res = obj - ? Object.keys(obj) - .map(function (key) { - var val = obj[key]; - - if (val === undefined) { - return '' - } - - if (val === null) { - return encode(key) - } - - if (Array.isArray(val)) { - var result = []; - val.forEach(function (val2) { - if (val2 === undefined) { - return - } - if (val2 === null) { - result.push(encode(key)); - } else { - result.push(encode(key) + '=' + encode(val2)); - } - }); - return result.join('&') - } - - return encode(key) + '=' + encode(val) - }) - .filter(function (x) { return x.length > 0; }) - .join('&') - : null; - return res ? ("?" + res) : '' -} - -/* */ - -var trailingSlashRE = /\/?$/; - -function createRoute ( - record, - location, - redirectedFrom, - router -) { - var stringifyQuery = router && router.options.stringifyQuery; - - var query = location.query || {}; - try { - query = clone(query); - } catch (e) {} - - var route = { - name: location.name || (record && record.name), - meta: (record && record.meta) || {}, - path: location.path || '/', - hash: location.hash || '', - query: query, - params: location.params || {}, - fullPath: getFullPath(location, stringifyQuery), - matched: record ? formatMatch(record) : [] - }; - if (redirectedFrom) { - route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery); - } - return Object.freeze(route) -} - -function clone (value) { - if (Array.isArray(value)) { - return value.map(clone) - } else if (value && typeof value === 'object') { - var res = {}; - for (var key in value) { - res[key] = clone(value[key]); - } - return res - } else { - return value - } -} - -// the starting route that represents the initial state -var START = createRoute(null, { - path: '/' -}); - -function formatMatch (record) { - var res = []; - while (record) { - res.unshift(record); - record = record.parent; - } - return res -} - -function getFullPath ( - ref, - _stringifyQuery -) { - var path = ref.path; - var query = ref.query; if ( query === void 0 ) query = {}; - var hash = ref.hash; if ( hash === void 0 ) hash = ''; - - var stringify = _stringifyQuery || stringifyQuery; - return (path || '/') + stringify(query) + hash -} - -function isSameRoute (a, b, onlyPath) { - if (b === START) { - return a === b - } else if (!b) { - return false - } else if (a.path && b.path) { - return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath || - a.hash === b.hash && - isObjectEqual(a.query, b.query)) - } else if (a.name && b.name) { - return ( - a.name === b.name && - (onlyPath || ( - a.hash === b.hash && - isObjectEqual(a.query, b.query) && - isObjectEqual(a.params, b.params)) - ) - ) - } else { - return false - } -} - -function isObjectEqual (a, b) { - if ( a === void 0 ) a = {}; - if ( b === void 0 ) b = {}; - - // handle null value #1566 - if (!a || !b) { return a === b } - var aKeys = Object.keys(a).sort(); - var bKeys = Object.keys(b).sort(); - if (aKeys.length !== bKeys.length) { - return false - } - return aKeys.every(function (key, i) { - var aVal = a[key]; - var bKey = bKeys[i]; - if (bKey !== key) { return false } - var bVal = b[key]; - // query values can be null and undefined - if (aVal == null || bVal == null) { return aVal === bVal } - // check nested equality - if (typeof aVal === 'object' && typeof bVal === 'object') { - return isObjectEqual(aVal, bVal) - } - return String(aVal) === String(bVal) - }) -} - -function isIncludedRoute (current, target) { - return ( - current.path.replace(trailingSlashRE, '/').indexOf( - target.path.replace(trailingSlashRE, '/') - ) === 0 && - (!target.hash || current.hash === target.hash) && - queryIncludes(current.query, target.query) - ) -} - -function queryIncludes (current, target) { - for (var key in target) { - if (!(key in current)) { - return false - } - } - return true -} - -function handleRouteEntered (route) { - for (var i = 0; i < route.matched.length; i++) { - var record = route.matched[i]; - for (var name in record.instances) { - var instance = record.instances[name]; - var cbs = record.enteredCbs[name]; - if (!instance || !cbs) { continue } - delete record.enteredCbs[name]; - for (var i$1 = 0; i$1 < cbs.length; i$1++) { - if (!instance._isBeingDestroyed) { cbs[i$1](instance); } - } - } - } -} - -var View = { - name: 'RouterView', - functional: true, - props: { - name: { - type: String, - default: 'default' - } - }, - render: function render (_, ref) { - var props = ref.props; - var children = ref.children; - var parent = ref.parent; - var data = ref.data; - - // used by devtools to display a router-view badge - data.routerView = true; - - // directly use parent context's createElement() function - // so that components rendered by router-view can resolve named slots - var h = parent.$createElement; - var name = props.name; - var route = parent.$route; - var cache = parent._routerViewCache || (parent._routerViewCache = {}); - - // determine current view depth, also check to see if the tree - // has been toggled inactive but kept-alive. - var depth = 0; - var inactive = false; - while (parent && parent._routerRoot !== parent) { - var vnodeData = parent.$vnode ? parent.$vnode.data : {}; - if (vnodeData.routerView) { - depth++; - } - if (vnodeData.keepAlive && parent._directInactive && parent._inactive) { - inactive = true; - } - parent = parent.$parent; - } - data.routerViewDepth = depth; - - // render previous view if the tree is inactive and kept-alive - if (inactive) { - var cachedData = cache[name]; - var cachedComponent = cachedData && cachedData.component; - if (cachedComponent) { - // #2301 - // pass props - if (cachedData.configProps) { - fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps); - } - return h(cachedComponent, data, children) - } else { - // render previous empty view - return h() - } - } - - var matched = route.matched[depth]; - var component = matched && matched.components[name]; - - // render empty node if no matched route or no config component - if (!matched || !component) { - cache[name] = null; - return h() - } - - // cache component - cache[name] = { component: component }; - - // attach instance registration hook - // this will be called in the instance's injected lifecycle hooks - data.registerRouteInstance = function (vm, val) { - // val could be undefined for unregistration - var current = matched.instances[name]; - if ( - (val && current !== vm) || - (!val && current === vm) - ) { - matched.instances[name] = val; - } - } - - // also register instance in prepatch hook - // in case the same component instance is reused across different routes - ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) { - matched.instances[name] = vnode.componentInstance; - }; - - // register instance in init hook - // in case kept-alive component be actived when routes changed - data.hook.init = function (vnode) { - if (vnode.data.keepAlive && - vnode.componentInstance && - vnode.componentInstance !== matched.instances[name] - ) { - matched.instances[name] = vnode.componentInstance; - } - - // if the route transition has already been confirmed then we weren't - // able to call the cbs during confirmation as the component was not - // registered yet, so we call it here. - handleRouteEntered(route); - }; - - var configProps = matched.props && matched.props[name]; - // save route and configProps in cache - if (configProps) { - extend(cache[name], { - route: route, - configProps: configProps - }); - fillPropsinData(component, data, route, configProps); - } - - return h(component, data, children) - } -}; - -function fillPropsinData (component, data, route, configProps) { - // resolve props - var propsToPass = data.props = resolveProps(route, configProps); - if (propsToPass) { - // clone to prevent mutation - propsToPass = data.props = extend({}, propsToPass); - // pass non-declared props as attrs - var attrs = data.attrs = data.attrs || {}; - for (var key in propsToPass) { - if (!component.props || !(key in component.props)) { - attrs[key] = propsToPass[key]; - delete propsToPass[key]; - } - } - } -} - -function resolveProps (route, config) { - switch (typeof config) { - case 'undefined': - return - case 'object': - return config - case 'function': - return config(route) - case 'boolean': - return config ? route.params : undefined - default: - if (process.env.NODE_ENV !== 'production') { - warn( - false, - "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " + - "expecting an object, function or boolean." - ); - } - } -} - -/* */ - -function resolvePath ( - relative, - base, - append -) { - var firstChar = relative.charAt(0); - if (firstChar === '/') { - return relative - } - - if (firstChar === '?' || firstChar === '#') { - return base + relative - } - - var stack = base.split('/'); - - // remove trailing segment if: - // - not appending - // - appending to trailing slash (last segment is empty) - if (!append || !stack[stack.length - 1]) { - stack.pop(); - } - - // resolve relative path - var segments = relative.replace(/^\//, '').split('/'); - for (var i = 0; i < segments.length; i++) { - var segment = segments[i]; - if (segment === '..') { - stack.pop(); - } else if (segment !== '.') { - stack.push(segment); - } - } - - // ensure leading slash - if (stack[0] !== '') { - stack.unshift(''); - } - - return stack.join('/') -} - -function parsePath (path) { - var hash = ''; - var query = ''; - - var hashIndex = path.indexOf('#'); - if (hashIndex >= 0) { - hash = path.slice(hashIndex); - path = path.slice(0, hashIndex); - } - - var queryIndex = path.indexOf('?'); - if (queryIndex >= 0) { - query = path.slice(queryIndex + 1); - path = path.slice(0, queryIndex); - } - - return { - path: path, - query: query, - hash: hash - } -} - -function cleanPath (path) { - return path.replace(/\/(?:\s*\/)+/g, '/') -} - -var isarray = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; - -/** - * Expose `pathToRegexp`. - */ -var pathToRegexp_1 = pathToRegexp; -var parse_1 = parse; -var compile_1 = compile; -var tokensToFunction_1 = tokensToFunction; -var tokensToRegExp_1 = tokensToRegExp; - -/** - * The main path matching regexp utility. - * - * @type {RegExp} - */ -var PATH_REGEXP = new RegExp([ - // Match escaped characters that would otherwise appear in future matches. - // This allows the user to escape special characters that won't transform. - '(\\\\.)', - // Match Express-style parameters and un-named parameters with a prefix - // and optional suffixes. Matches appear as: - // - // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] - // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] - // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] - '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' -].join('|'), 'g'); - -/** - * Parse a string for the raw tokens. - * - * @param {string} str - * @param {Object=} options - * @return {!Array} - */ -function parse (str, options) { - var tokens = []; - var key = 0; - var index = 0; - var path = ''; - var defaultDelimiter = options && options.delimiter || '/'; - var res; - - while ((res = PATH_REGEXP.exec(str)) != null) { - var m = res[0]; - var escaped = res[1]; - var offset = res.index; - path += str.slice(index, offset); - index = offset + m.length; - - // Ignore already escaped sequences. - if (escaped) { - path += escaped[1]; - continue - } - - var next = str[index]; - var prefix = res[2]; - var name = res[3]; - var capture = res[4]; - var group = res[5]; - var modifier = res[6]; - var asterisk = res[7]; - - // Push the current path onto the tokens. - if (path) { - tokens.push(path); - path = ''; - } - - var partial = prefix != null && next != null && next !== prefix; - var repeat = modifier === '+' || modifier === '*'; - var optional = modifier === '?' || modifier === '*'; - var delimiter = res[2] || defaultDelimiter; - var pattern = capture || group; - - tokens.push({ - name: name || key++, - prefix: prefix || '', - delimiter: delimiter, - optional: optional, - repeat: repeat, - partial: partial, - asterisk: !!asterisk, - pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') - }); - } - - // Match any characters still remaining. - if (index < str.length) { - path += str.substr(index); - } - - // If the path exists, push it onto the end. - if (path) { - tokens.push(path); - } - - return tokens -} - -/** - * Compile a string to a template function for the path. - * - * @param {string} str - * @param {Object=} options - * @return {!function(Object=, Object=)} - */ -function compile (str, options) { - return tokensToFunction(parse(str, options), options) -} - -/** - * Prettier encoding of URI path segments. - * - * @param {string} - * @return {string} - */ -function encodeURIComponentPretty (str) { - return encodeURI(str).replace(/[\/?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. - * - * @param {string} - * @return {string} - */ -function encodeAsterisk (str) { - return encodeURI(str).replace(/[?#]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -/** - * Expose a method for transforming tokens into the path function. - */ -function tokensToFunction (tokens, options) { - // Compile all the tokens into regexps. - var matches = new Array(tokens.length); - - // Compile all the patterns before compilation. - for (var i = 0; i < tokens.length; i++) { - if (typeof tokens[i] === 'object') { - matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)); - } - } - - return function (obj, opts) { - var path = ''; - var data = obj || {}; - var options = opts || {}; - var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent; - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - - if (typeof token === 'string') { - path += token; - - continue - } - - var value = data[token.name]; - var segment; - - if (value == null) { - if (token.optional) { - // Prepend partial segment prefixes. - if (token.partial) { - path += token.prefix; - } - - continue - } else { - throw new TypeError('Expected "' + token.name + '" to be defined') - } - } - - if (isarray(value)) { - if (!token.repeat) { - throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') - } - - if (value.length === 0) { - if (token.optional) { - continue - } else { - throw new TypeError('Expected "' + token.name + '" to not be empty') - } - } - - for (var j = 0; j < value.length; j++) { - segment = encode(value[j]); - - if (!matches[i].test(segment)) { - throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') - } - - path += (j === 0 ? token.prefix : token.delimiter) + segment; - } - - continue - } - - segment = token.asterisk ? encodeAsterisk(value) : encode(value); - - if (!matches[i].test(segment)) { - throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') - } - - path += token.prefix + segment; - } - - return path - } -} - -/** - * Escape a regular expression string. - * - * @param {string} str - * @return {string} - */ -function escapeString (str) { - return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') -} - -/** - * Escape the capturing group by escaping special characters and meaning. - * - * @param {string} group - * @return {string} - */ -function escapeGroup (group) { - return group.replace(/([=!:$\/()])/g, '\\$1') -} - -/** - * Attach the keys as a property of the regexp. - * - * @param {!RegExp} re - * @param {Array} keys - * @return {!RegExp} - */ -function attachKeys (re, keys) { - re.keys = keys; - return re -} - -/** - * Get the flags for a regexp from the options. - * - * @param {Object} options - * @return {string} - */ -function flags (options) { - return options && options.sensitive ? '' : 'i' -} - -/** - * Pull out keys from a regexp. - * - * @param {!RegExp} path - * @param {!Array} keys - * @return {!RegExp} - */ -function regexpToRegexp (path, keys) { - // Use a negative lookahead to match only capturing groups. - var groups = path.source.match(/\((?!\?)/g); - - if (groups) { - for (var i = 0; i < groups.length; i++) { - keys.push({ - name: i, - prefix: null, - delimiter: null, - optional: false, - repeat: false, - partial: false, - asterisk: false, - pattern: null - }); - } - } - - return attachKeys(path, keys) -} - -/** - * Transform an array into a regexp. - * - * @param {!Array} path - * @param {Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function arrayToRegexp (path, keys, options) { - var parts = []; - - for (var i = 0; i < path.length; i++) { - parts.push(pathToRegexp(path[i], keys, options).source); - } - - var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)); - - return attachKeys(regexp, keys) -} - -/** - * Create a path regexp from string input. - * - * @param {string} path - * @param {!Array} keys - * @param {!Object} options - * @return {!RegExp} - */ -function stringToRegexp (path, keys, options) { - return tokensToRegExp(parse(path, options), keys, options) -} - -/** - * Expose a function for taking tokens and returning a RegExp. - * - * @param {!Array} tokens - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function tokensToRegExp (tokens, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - - var strict = options.strict; - var end = options.end !== false; - var route = ''; - - // Iterate over the tokens and create our regexp string. - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - - if (typeof token === 'string') { - route += escapeString(token); - } else { - var prefix = escapeString(token.prefix); - var capture = '(?:' + token.pattern + ')'; - - keys.push(token); - - if (token.repeat) { - capture += '(?:' + prefix + capture + ')*'; - } - - if (token.optional) { - if (!token.partial) { - capture = '(?:' + prefix + '(' + capture + '))?'; - } else { - capture = prefix + '(' + capture + ')?'; - } - } else { - capture = prefix + '(' + capture + ')'; - } - - route += capture; - } - } - - var delimiter = escapeString(options.delimiter || '/'); - var endsWithDelimiter = route.slice(-delimiter.length) === delimiter; - - // In non-strict mode we allow a slash at the end of match. If the path to - // match already ends with a slash, we remove it for consistency. The slash - // is valid at the end of a path match, not in the middle. This is important - // in non-ending mode, where "/test/" shouldn't match "/test//route". - if (!strict) { - route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'; - } - - if (end) { - route += '$'; - } else { - // In non-ending mode, we need the capturing groups to match as much as - // possible by using a positive lookahead to the end or next path segment. - route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'; - } - - return attachKeys(new RegExp('^' + route, flags(options)), keys) -} - -/** - * Normalize the given path string, returning a regular expression. - * - * An empty array can be passed in for the keys, which will hold the - * placeholder key descriptions. For example, using `/user/:id`, `keys` will - * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. - * - * @param {(string|RegExp|Array)} path - * @param {(Array|Object)=} keys - * @param {Object=} options - * @return {!RegExp} - */ -function pathToRegexp (path, keys, options) { - if (!isarray(keys)) { - options = /** @type {!Object} */ (keys || options); - keys = []; - } - - options = options || {}; - - if (path instanceof RegExp) { - return regexpToRegexp(path, /** @type {!Array} */ (keys)) - } - - if (isarray(path)) { - return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) - } - - return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) -} -pathToRegexp_1.parse = parse_1; -pathToRegexp_1.compile = compile_1; -pathToRegexp_1.tokensToFunction = tokensToFunction_1; -pathToRegexp_1.tokensToRegExp = tokensToRegExp_1; - -/* */ - -// $flow-disable-line -var regexpCompileCache = Object.create(null); - -function fillParams ( - path, - params, - routeMsg -) { - params = params || {}; - try { - var filler = - regexpCompileCache[path] || - (regexpCompileCache[path] = pathToRegexp_1.compile(path)); - - // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }} - // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string - if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; } - - return filler(params, { pretty: true }) - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - // Fix #3072 no warn if `pathMatch` is string - warn(typeof params.pathMatch === 'string', ("missing param for " + routeMsg + ": " + (e.message))); - } - return '' - } finally { - // delete the 0 if it was added - delete params[0]; - } -} - -/* */ - -function normalizeLocation ( - raw, - current, - append, - router -) { - var next = typeof raw === 'string' ? { path: raw } : raw; - // named target - if (next._normalized) { - return next - } else if (next.name) { - next = extend({}, raw); - var params = next.params; - if (params && typeof params === 'object') { - next.params = extend({}, params); - } - return next - } - - // relative params - if (!next.path && next.params && current) { - next = extend({}, next); - next._normalized = true; - var params$1 = extend(extend({}, current.params), next.params); - if (current.name) { - next.name = current.name; - next.params = params$1; - } else if (current.matched.length) { - var rawPath = current.matched[current.matched.length - 1].path; - next.path = fillParams(rawPath, params$1, ("path " + (current.path))); - } else if (process.env.NODE_ENV !== 'production') { - warn(false, "relative params navigation requires a current route."); - } - return next - } - - var parsedPath = parsePath(next.path || ''); - var basePath = (current && current.path) || '/'; - var path = parsedPath.path - ? resolvePath(parsedPath.path, basePath, append || next.append) - : basePath; - - var query = resolveQuery( - parsedPath.query, - next.query, - router && router.options.parseQuery - ); - - var hash = next.hash || parsedPath.hash; - if (hash && hash.charAt(0) !== '#') { - hash = "#" + hash; - } - - return { - _normalized: true, - path: path, - query: query, - hash: hash - } -} - -/* */ - -// work around weird flow bug -var toTypes = [String, Object]; -var eventTypes = [String, Array]; - -var noop = function () {}; - -var warnedCustomSlot; -var warnedTagProp; -var warnedEventProp; - -var Link = { - name: 'RouterLink', - props: { - to: { - type: toTypes, - required: true - }, - tag: { - type: String, - default: 'a' - }, - custom: Boolean, - exact: Boolean, - exactPath: Boolean, - append: Boolean, - replace: Boolean, - activeClass: String, - exactActiveClass: String, - ariaCurrentValue: { - type: String, - default: 'page' - }, - event: { - type: eventTypes, - default: 'click' - } - }, - render: function render (h) { - var this$1$1 = this; - - var router = this.$router; - var current = this.$route; - var ref = router.resolve( - this.to, - current, - this.append - ); - var location = ref.location; - var route = ref.route; - var href = ref.href; - - var classes = {}; - var globalActiveClass = router.options.linkActiveClass; - var globalExactActiveClass = router.options.linkExactActiveClass; - // Support global empty active class - var activeClassFallback = - globalActiveClass == null ? 'router-link-active' : globalActiveClass; - var exactActiveClassFallback = - globalExactActiveClass == null - ? 'router-link-exact-active' - : globalExactActiveClass; - var activeClass = - this.activeClass == null ? activeClassFallback : this.activeClass; - var exactActiveClass = - this.exactActiveClass == null - ? exactActiveClassFallback - : this.exactActiveClass; - - var compareTarget = route.redirectedFrom - ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router) - : route; - - classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath); - classes[activeClass] = this.exact || this.exactPath - ? classes[exactActiveClass] - : isIncludedRoute(current, compareTarget); - - var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null; - - var handler = function (e) { - if (guardEvent(e)) { - if (this$1$1.replace) { - router.replace(location, noop); - } else { - router.push(location, noop); - } - } - }; - - var on = { click: guardEvent }; - if (Array.isArray(this.event)) { - this.event.forEach(function (e) { - on[e] = handler; - }); - } else { - on[this.event] = handler; - } - - var data = { class: classes }; - - var scopedSlot = - !this.$scopedSlots.$hasNormal && - this.$scopedSlots.default && - this.$scopedSlots.default({ - href: href, - route: route, - navigate: handler, - isActive: classes[activeClass], - isExactActive: classes[exactActiveClass] - }); - - if (scopedSlot) { - if (process.env.NODE_ENV !== 'production' && !this.custom) { - !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n'); - warnedCustomSlot = true; - } - if (scopedSlot.length === 1) { - return scopedSlot[0] - } else if (scopedSlot.length > 1 || !scopedSlot.length) { - if (process.env.NODE_ENV !== 'production') { - warn( - false, - ("<router-link> with to=\"" + (this.to) + "\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.") - ); - } - return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot) - } - } - - if (process.env.NODE_ENV !== 'production') { - if ('tag' in this.$options.propsData && !warnedTagProp) { - warn( - false, - "<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link." - ); - warnedTagProp = true; - } - if ('event' in this.$options.propsData && !warnedEventProp) { - warn( - false, - "<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link." - ); - warnedEventProp = true; - } - } - - if (this.tag === 'a') { - data.on = on; - data.attrs = { href: href, 'aria-current': ariaCurrentValue }; - } else { - // find the first <a> child and apply listener and href - var a = findAnchor(this.$slots.default); - if (a) { - // in case the <a> is a static node - a.isStatic = false; - var aData = (a.data = extend({}, a.data)); - aData.on = aData.on || {}; - // transform existing events in both objects into arrays so we can push later - for (var event in aData.on) { - var handler$1 = aData.on[event]; - if (event in on) { - aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1]; - } - } - // append new listeners for router-link - for (var event$1 in on) { - if (event$1 in aData.on) { - // on[event] is always a function - aData.on[event$1].push(on[event$1]); - } else { - aData.on[event$1] = handler; - } - } - - var aAttrs = (a.data.attrs = extend({}, a.data.attrs)); - aAttrs.href = href; - aAttrs['aria-current'] = ariaCurrentValue; - } else { - // doesn't have <a> child, apply listener to self - data.on = on; - } - } - - return h(this.tag, data, this.$slots.default) - } -}; - -function guardEvent (e) { - // don't redirect with control keys - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return } - // don't redirect when preventDefault called - if (e.defaultPrevented) { return } - // don't redirect on right click - if (e.button !== undefined && e.button !== 0) { return } - // don't redirect if `target="_blank"` - if (e.currentTarget && e.currentTarget.getAttribute) { - var target = e.currentTarget.getAttribute('target'); - if (/\b_blank\b/i.test(target)) { return } - } - // this may be a Weex event which doesn't have this method - if (e.preventDefault) { - e.preventDefault(); - } - return true -} - -function findAnchor (children) { - if (children) { - var child; - for (var i = 0; i < children.length; i++) { - child = children[i]; - if (child.tag === 'a') { - return child - } - if (child.children && (child = findAnchor(child.children))) { - return child - } - } - } -} - -var _Vue; - -function install (Vue) { - if (install.installed && _Vue === Vue) { return } - install.installed = true; - - _Vue = Vue; - - var isDef = function (v) { return v !== undefined; }; - - var registerInstance = function (vm, callVal) { - var i = vm.$options._parentVnode; - if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) { - i(vm, callVal); - } - }; - - Vue.mixin({ - beforeCreate: function beforeCreate () { - if (isDef(this.$options.router)) { - this._routerRoot = this; - this._router = this.$options.router; - this._router.init(this); - Vue.util.defineReactive(this, '_route', this._router.history.current); - } else { - this._routerRoot = (this.$parent && this.$parent._routerRoot) || this; - } - registerInstance(this, this); - }, - destroyed: function destroyed () { - registerInstance(this); - } - }); - - Object.defineProperty(Vue.prototype, '$router', { - get: function get () { return this._routerRoot._router } - }); - - Object.defineProperty(Vue.prototype, '$route', { - get: function get () { return this._routerRoot._route } - }); - - Vue.component('RouterView', View); - Vue.component('RouterLink', Link); - - var strats = Vue.config.optionMergeStrategies; - // use the same hook merging strategy for route hooks - strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created; -} - -/* */ - -var inBrowser = typeof window !== 'undefined'; - -/* */ - -function createRouteMap ( - routes, - oldPathList, - oldPathMap, - oldNameMap, - parentRoute -) { - // the path list is used to control path matching priority - var pathList = oldPathList || []; - // $flow-disable-line - var pathMap = oldPathMap || Object.create(null); - // $flow-disable-line - var nameMap = oldNameMap || Object.create(null); - - routes.forEach(function (route) { - addRouteRecord(pathList, pathMap, nameMap, route, parentRoute); - }); - - // ensure wildcard routes are always at the end - for (var i = 0, l = pathList.length; i < l; i++) { - if (pathList[i] === '*') { - pathList.push(pathList.splice(i, 1)[0]); - l--; - i--; - } - } - - if (process.env.NODE_ENV === 'development') { - // warn if routes do not include leading slashes - var found = pathList - // check for missing leading slash - .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; }); - - if (found.length > 0) { - var pathNames = found.map(function (path) { return ("- " + path); }).join('\n'); - warn(false, ("Non-nested routes must include a leading slash character. Fix the following routes: \n" + pathNames)); - } - } - - return { - pathList: pathList, - pathMap: pathMap, - nameMap: nameMap - } -} - -function addRouteRecord ( - pathList, - pathMap, - nameMap, - route, - parent, - matchAs -) { - var path = route.path; - var name = route.name; - if (process.env.NODE_ENV !== 'production') { - assert(path != null, "\"path\" is required in a route configuration."); - assert( - typeof route.component !== 'string', - "route config \"component\" for path: " + (String( - path || name - )) + " cannot be a " + "string id. Use an actual component instead." - ); - - warn( - // eslint-disable-next-line no-control-regex - !/[^\u0000-\u007F]+/.test(path), - "Route with path \"" + path + "\" contains unencoded characters, make sure " + - "your path is correctly encoded before passing it to the router. Use " + - "encodeURI to encode static segments of your path." - ); - } - - var pathToRegexpOptions = - route.pathToRegexpOptions || {}; - var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict); - - if (typeof route.caseSensitive === 'boolean') { - pathToRegexpOptions.sensitive = route.caseSensitive; - } - - var record = { - path: normalizedPath, - regex: compileRouteRegex(normalizedPath, pathToRegexpOptions), - components: route.components || { default: route.component }, - alias: route.alias - ? typeof route.alias === 'string' - ? [route.alias] - : route.alias - : [], - instances: {}, - enteredCbs: {}, - name: name, - parent: parent, - matchAs: matchAs, - redirect: route.redirect, - beforeEnter: route.beforeEnter, - meta: route.meta || {}, - props: - route.props == null - ? {} - : route.components - ? route.props - : { default: route.props } - }; - - if (route.children) { - // Warn if route is named, does not redirect and has a default child route. - // If users navigate to this route by name, the default child will - // not be rendered (GH Issue #629) - if (process.env.NODE_ENV !== 'production') { - if ( - route.name && - !route.redirect && - route.children.some(function (child) { return /^\/?$/.test(child.path); }) - ) { - warn( - false, - "Named Route '" + (route.name) + "' has a default child route. " + - "When navigating to this named route (:to=\"{name: '" + (route.name) + "'}\"), " + - "the default child route will not be rendered. Remove the name from " + - "this route and use the name of the default child route for named " + - "links instead." - ); - } - } - route.children.forEach(function (child) { - var childMatchAs = matchAs - ? cleanPath((matchAs + "/" + (child.path))) - : undefined; - addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs); - }); - } - - if (!pathMap[record.path]) { - pathList.push(record.path); - pathMap[record.path] = record; - } - - if (route.alias !== undefined) { - var aliases = Array.isArray(route.alias) ? route.alias : [route.alias]; - for (var i = 0; i < aliases.length; ++i) { - var alias = aliases[i]; - if (process.env.NODE_ENV !== 'production' && alias === path) { - warn( - false, - ("Found an alias with the same value as the path: \"" + path + "\". You have to remove that alias. It will be ignored in development.") - ); - // skip in dev to make it work - continue - } - - var aliasRoute = { - path: alias, - children: route.children - }; - addRouteRecord( - pathList, - pathMap, - nameMap, - aliasRoute, - parent, - record.path || '/' // matchAs - ); - } - } - - if (name) { - if (!nameMap[name]) { - nameMap[name] = record; - } else if (process.env.NODE_ENV !== 'production' && !matchAs) { - warn( - false, - "Duplicate named routes definition: " + - "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }" - ); - } - } -} - -function compileRouteRegex ( - path, - pathToRegexpOptions -) { - var regex = pathToRegexp_1(path, [], pathToRegexpOptions); - if (process.env.NODE_ENV !== 'production') { - var keys = Object.create(null); - regex.keys.forEach(function (key) { - warn( - !keys[key.name], - ("Duplicate param keys in route with path: \"" + path + "\"") - ); - keys[key.name] = true; - }); - } - return regex -} - -function normalizePath ( - path, - parent, - strict -) { - if (!strict) { path = path.replace(/\/$/, ''); } - if (path[0] === '/') { return path } - if (parent == null) { return path } - return cleanPath(((parent.path) + "/" + path)) -} - -/* */ - - - -function createMatcher ( - routes, - router -) { - var ref = createRouteMap(routes); - var pathList = ref.pathList; - var pathMap = ref.pathMap; - var nameMap = ref.nameMap; - - function addRoutes (routes) { - createRouteMap(routes, pathList, pathMap, nameMap); - } - - function addRoute (parentOrRoute, route) { - var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined; - // $flow-disable-line - createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent); - - // add aliases of parent - if (parent && parent.alias.length) { - createRouteMap( - // $flow-disable-line route is defined if parent is - parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }), - pathList, - pathMap, - nameMap, - parent - ); - } - } - - function getRoutes () { - return pathList.map(function (path) { return pathMap[path]; }) - } - - function match ( - raw, - currentRoute, - redirectedFrom - ) { - var location = normalizeLocation(raw, currentRoute, false, router); - var name = location.name; - - if (name) { - var record = nameMap[name]; - if (process.env.NODE_ENV !== 'production') { - warn(record, ("Route with name '" + name + "' does not exist")); - } - if (!record) { return _createRoute(null, location) } - var paramNames = record.regex.keys - .filter(function (key) { return !key.optional; }) - .map(function (key) { return key.name; }); - - if (typeof location.params !== 'object') { - location.params = {}; - } - - if (currentRoute && typeof currentRoute.params === 'object') { - for (var key in currentRoute.params) { - if (!(key in location.params) && paramNames.indexOf(key) > -1) { - location.params[key] = currentRoute.params[key]; - } - } - } - - location.path = fillParams(record.path, location.params, ("named route \"" + name + "\"")); - return _createRoute(record, location, redirectedFrom) - } else if (location.path) { - location.params = {}; - for (var i = 0; i < pathList.length; i++) { - var path = pathList[i]; - var record$1 = pathMap[path]; - if (matchRoute(record$1.regex, location.path, location.params)) { - return _createRoute(record$1, location, redirectedFrom) - } - } - } - // no match - return _createRoute(null, location) - } - - function redirect ( - record, - location - ) { - var originalRedirect = record.redirect; - var redirect = typeof originalRedirect === 'function' - ? originalRedirect(createRoute(record, location, null, router)) - : originalRedirect; - - if (typeof redirect === 'string') { - redirect = { path: redirect }; - } - - if (!redirect || typeof redirect !== 'object') { - if (process.env.NODE_ENV !== 'production') { - warn( - false, ("invalid redirect option: " + (JSON.stringify(redirect))) - ); - } - return _createRoute(null, location) - } - - var re = redirect; - var name = re.name; - var path = re.path; - var query = location.query; - var hash = location.hash; - var params = location.params; - query = re.hasOwnProperty('query') ? re.query : query; - hash = re.hasOwnProperty('hash') ? re.hash : hash; - params = re.hasOwnProperty('params') ? re.params : params; - - if (name) { - // resolved named direct - var targetRecord = nameMap[name]; - if (process.env.NODE_ENV !== 'production') { - assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found.")); - } - return match({ - _normalized: true, - name: name, - query: query, - hash: hash, - params: params - }, undefined, location) - } else if (path) { - // 1. resolve relative redirect - var rawPath = resolveRecordPath(path, record); - // 2. resolve params - var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\"")); - // 3. rematch with existing query and hash - return match({ - _normalized: true, - path: resolvedPath, - query: query, - hash: hash - }, undefined, location) - } else { - if (process.env.NODE_ENV !== 'production') { - warn(false, ("invalid redirect option: " + (JSON.stringify(redirect)))); - } - return _createRoute(null, location) - } - } - - function alias ( - record, - location, - matchAs - ) { - var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\"")); - var aliasedMatch = match({ - _normalized: true, - path: aliasedPath - }); - if (aliasedMatch) { - var matched = aliasedMatch.matched; - var aliasedRecord = matched[matched.length - 1]; - location.params = aliasedMatch.params; - return _createRoute(aliasedRecord, location) - } - return _createRoute(null, location) - } - - function _createRoute ( - record, - location, - redirectedFrom - ) { - if (record && record.redirect) { - return redirect(record, redirectedFrom || location) - } - if (record && record.matchAs) { - return alias(record, location, record.matchAs) - } - return createRoute(record, location, redirectedFrom, router) - } - - return { - match: match, - addRoute: addRoute, - getRoutes: getRoutes, - addRoutes: addRoutes - } -} - -function matchRoute ( - regex, - path, - params -) { - var m = path.match(regex); - - if (!m) { - return false - } else if (!params) { - return true - } - - for (var i = 1, len = m.length; i < len; ++i) { - var key = regex.keys[i - 1]; - if (key) { - // Fix #1994: using * with props: true generates a param named 0 - params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i]; - } - } - - return true -} - -function resolveRecordPath (path, record) { - return resolvePath(path, record.parent ? record.parent.path : '/', true) -} - -/* */ - -// use User Timing api (if present) for more accurate key precision -var Time = - inBrowser && window.performance && window.performance.now - ? window.performance - : Date; - -function genStateKey () { - return Time.now().toFixed(3) -} - -var _key = genStateKey(); - -function getStateKey () { - return _key -} - -function setStateKey (key) { - return (_key = key) -} - -/* */ - -var positionStore = Object.create(null); - -function setupScroll () { - // Prevent browser scroll behavior on History popstate - if ('scrollRestoration' in window.history) { - window.history.scrollRestoration = 'manual'; - } - // Fix for #1585 for Firefox - // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678 - // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with - // window.location.protocol + '//' + window.location.host - // location.host contains the port and location.hostname doesn't - var protocolAndPath = window.location.protocol + '//' + window.location.host; - var absolutePath = window.location.href.replace(protocolAndPath, ''); - // preserve existing history state as it could be overriden by the user - var stateCopy = extend({}, window.history.state); - stateCopy.key = getStateKey(); - window.history.replaceState(stateCopy, '', absolutePath); - window.addEventListener('popstate', handlePopState); - return function () { - window.removeEventListener('popstate', handlePopState); - } -} - -function handleScroll ( - router, - to, - from, - isPop -) { - if (!router.app) { - return - } - - var behavior = router.options.scrollBehavior; - if (!behavior) { - return - } - - if (process.env.NODE_ENV !== 'production') { - assert(typeof behavior === 'function', "scrollBehavior must be a function"); - } - - // wait until re-render finishes before scrolling - router.app.$nextTick(function () { - var position = getScrollPosition(); - var shouldScroll = behavior.call( - router, - to, - from, - isPop ? position : null - ); - - if (!shouldScroll) { - return - } - - if (typeof shouldScroll.then === 'function') { - shouldScroll - .then(function (shouldScroll) { - scrollToPosition((shouldScroll), position); - }) - .catch(function (err) { - if (process.env.NODE_ENV !== 'production') { - assert(false, err.toString()); - } - }); - } else { - scrollToPosition(shouldScroll, position); - } - }); -} - -function saveScrollPosition () { - var key = getStateKey(); - if (key) { - positionStore[key] = { - x: window.pageXOffset, - y: window.pageYOffset - }; - } -} - -function handlePopState (e) { - saveScrollPosition(); - if (e.state && e.state.key) { - setStateKey(e.state.key); - } -} - -function getScrollPosition () { - var key = getStateKey(); - if (key) { - return positionStore[key] - } -} - -function getElementPosition (el, offset) { - var docEl = document.documentElement; - var docRect = docEl.getBoundingClientRect(); - var elRect = el.getBoundingClientRect(); - return { - x: elRect.left - docRect.left - offset.x, - y: elRect.top - docRect.top - offset.y - } -} - -function isValidPosition (obj) { - return isNumber(obj.x) || isNumber(obj.y) -} - -function normalizePosition (obj) { - return { - x: isNumber(obj.x) ? obj.x : window.pageXOffset, - y: isNumber(obj.y) ? obj.y : window.pageYOffset - } -} - -function normalizeOffset (obj) { - return { - x: isNumber(obj.x) ? obj.x : 0, - y: isNumber(obj.y) ? obj.y : 0 - } -} - -function isNumber (v) { - return typeof v === 'number' -} - -var hashStartsWithNumberRE = /^#\d/; - -function scrollToPosition (shouldScroll, position) { - var isObject = typeof shouldScroll === 'object'; - if (isObject && typeof shouldScroll.selector === 'string') { - // getElementById would still fail if the selector contains a more complicated query like #main[data-attr] - // but at the same time, it doesn't make much sense to select an element with an id and an extra selector - var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line - ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line - : document.querySelector(shouldScroll.selector); - - if (el) { - var offset = - shouldScroll.offset && typeof shouldScroll.offset === 'object' - ? shouldScroll.offset - : {}; - offset = normalizeOffset(offset); - position = getElementPosition(el, offset); - } else if (isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - } else if (isObject && isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll); - } - - if (position) { - // $flow-disable-line - if ('scrollBehavior' in document.documentElement.style) { - window.scrollTo({ - left: position.x, - top: position.y, - // $flow-disable-line - behavior: shouldScroll.behavior - }); - } else { - window.scrollTo(position.x, position.y); - } - } -} - -/* */ - -var supportsPushState = - inBrowser && - (function () { - var ua = window.navigator.userAgent; - - if ( - (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && - ua.indexOf('Mobile Safari') !== -1 && - ua.indexOf('Chrome') === -1 && - ua.indexOf('Windows Phone') === -1 - ) { - return false - } - - return window.history && typeof window.history.pushState === 'function' - })(); - -function pushState (url, replace) { - saveScrollPosition(); - // try...catch the pushState call to get around Safari - // DOM Exception 18 where it limits to 100 pushState calls - var history = window.history; - try { - if (replace) { - // preserve existing history state as it could be overriden by the user - var stateCopy = extend({}, history.state); - stateCopy.key = getStateKey(); - history.replaceState(stateCopy, '', url); - } else { - history.pushState({ key: setStateKey(genStateKey()) }, '', url); - } - } catch (e) { - window.location[replace ? 'replace' : 'assign'](url); - } -} - -function replaceState (url) { - pushState(url, true); -} - -// When changing thing, also edit router.d.ts -var NavigationFailureType = { - redirected: 2, - aborted: 4, - cancelled: 8, - duplicated: 16 -}; - -function createNavigationRedirectedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.redirected, - ("Redirected when going from \"" + (from.fullPath) + "\" to \"" + (stringifyRoute( - to - )) + "\" via a navigation guard.") - ) -} - -function createNavigationDuplicatedError (from, to) { - var error = createRouterError( - from, - to, - NavigationFailureType.duplicated, - ("Avoided redundant navigation to current location: \"" + (from.fullPath) + "\".") - ); - // backwards compatible with the first introduction of Errors - error.name = 'NavigationDuplicated'; - return error -} - -function createNavigationCancelledError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.cancelled, - ("Navigation cancelled from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" with a new navigation.") - ) -} - -function createNavigationAbortedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.aborted, - ("Navigation aborted from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" via a navigation guard.") - ) -} - -function createRouterError (from, to, type, message) { - var error = new Error(message); - error._isRouter = true; - error.from = from; - error.to = to; - error.type = type; - - return error -} - -var propertiesToLog = ['params', 'query', 'hash']; - -function stringifyRoute (to) { - if (typeof to === 'string') { return to } - if ('path' in to) { return to.path } - var location = {}; - propertiesToLog.forEach(function (key) { - if (key in to) { location[key] = to[key]; } - }); - return JSON.stringify(location, null, 2) -} - -function isError (err) { - return Object.prototype.toString.call(err).indexOf('Error') > -1 -} - -function isNavigationFailure (err, errorType) { - return ( - isError(err) && - err._isRouter && - (errorType == null || err.type === errorType) - ) -} - -/* */ - -function runQueue (queue, fn, cb) { - var step = function (index) { - if (index >= queue.length) { - cb(); - } else { - if (queue[index]) { - fn(queue[index], function () { - step(index + 1); - }); - } else { - step(index + 1); - } - } - }; - step(0); -} - -/* */ - -function resolveAsyncComponents (matched) { - return function (to, from, next) { - var hasAsync = false; - var pending = 0; - var error = null; - - flatMapComponents(matched, function (def, _, match, key) { - // if it's a function and doesn't have cid attached, - // assume it's an async component resolve function. - // we are not using Vue's default async resolving mechanism because - // we want to halt the navigation until the incoming component has been - // resolved. - if (typeof def === 'function' && def.cid === undefined) { - hasAsync = true; - pending++; - - var resolve = once(function (resolvedDef) { - if (isESModule(resolvedDef)) { - resolvedDef = resolvedDef.default; - } - // save resolved on async factory in case it's used elsewhere - def.resolved = typeof resolvedDef === 'function' - ? resolvedDef - : _Vue.extend(resolvedDef); - match.components[key] = resolvedDef; - pending--; - if (pending <= 0) { - next(); - } - }); - - var reject = once(function (reason) { - var msg = "Failed to resolve async component " + key + ": " + reason; - process.env.NODE_ENV !== 'production' && warn(false, msg); - if (!error) { - error = isError(reason) - ? reason - : new Error(msg); - next(error); - } - }); - - var res; - try { - res = def(resolve, reject); - } catch (e) { - reject(e); - } - if (res) { - if (typeof res.then === 'function') { - res.then(resolve, reject); - } else { - // new syntax in Vue 2.3 - var comp = res.component; - if (comp && typeof comp.then === 'function') { - comp.then(resolve, reject); - } - } - } - } - }); - - if (!hasAsync) { next(); } - } -} - -function flatMapComponents ( - matched, - fn -) { - return flatten(matched.map(function (m) { - return Object.keys(m.components).map(function (key) { return fn( - m.components[key], - m.instances[key], - m, key - ); }) - })) -} - -function flatten (arr) { - return Array.prototype.concat.apply([], arr) -} - -var hasSymbol = - typeof Symbol === 'function' && - typeof Symbol.toStringTag === 'symbol'; - -function isESModule (obj) { - return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module') -} - -// in Webpack 2, require.ensure now also returns a Promise -// so the resolve/reject functions may get called an extra time -// if the user uses an arrow function shorthand that happens to -// return that Promise. -function once (fn) { - var called = false; - return function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - if (called) { return } - called = true; - return fn.apply(this, args) - } -} - -/* */ - -var History = function History (router, base) { - this.router = router; - this.base = normalizeBase(base); - // start with a route object that stands for "nowhere" - this.current = START; - this.pending = null; - this.ready = false; - this.readyCbs = []; - this.readyErrorCbs = []; - this.errorCbs = []; - this.listeners = []; -}; - -History.prototype.listen = function listen (cb) { - this.cb = cb; -}; - -History.prototype.onReady = function onReady (cb, errorCb) { - if (this.ready) { - cb(); - } else { - this.readyCbs.push(cb); - if (errorCb) { - this.readyErrorCbs.push(errorCb); - } - } -}; - -History.prototype.onError = function onError (errorCb) { - this.errorCbs.push(errorCb); -}; - -History.prototype.transitionTo = function transitionTo ( - location, - onComplete, - onAbort -) { - var this$1$1 = this; - - var route; - // catch redirect option https://github.com/vuejs/vue-router/issues/3201 - try { - route = this.router.match(location, this.current); - } catch (e) { - this.errorCbs.forEach(function (cb) { - cb(e); - }); - // Exception should still be thrown - throw e - } - var prev = this.current; - this.confirmTransition( - route, - function () { - this$1$1.updateRoute(route); - onComplete && onComplete(route); - this$1$1.ensureURL(); - this$1$1.router.afterHooks.forEach(function (hook) { - hook && hook(route, prev); - }); - - // fire ready cbs once - if (!this$1$1.ready) { - this$1$1.ready = true; - this$1$1.readyCbs.forEach(function (cb) { - cb(route); - }); - } - }, - function (err) { - if (onAbort) { - onAbort(err); - } - if (err && !this$1$1.ready) { - // Initial redirection should not mark the history as ready yet - // because it's triggered by the redirection instead - // https://github.com/vuejs/vue-router/issues/3225 - // https://github.com/vuejs/vue-router/issues/3331 - if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) { - this$1$1.ready = true; - this$1$1.readyErrorCbs.forEach(function (cb) { - cb(err); - }); - } - } - } - ); -}; - -History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) { - var this$1$1 = this; - - var current = this.current; - this.pending = route; - var abort = function (err) { - // changed after adding errors with - // https://github.com/vuejs/vue-router/pull/3047 before that change, - // redirect and aborted navigation would produce an err == null - if (!isNavigationFailure(err) && isError(err)) { - if (this$1$1.errorCbs.length) { - this$1$1.errorCbs.forEach(function (cb) { - cb(err); - }); - } else { - if (process.env.NODE_ENV !== 'production') { - warn(false, 'uncaught error during route navigation:'); - } - console.error(err); - } - } - onAbort && onAbort(err); - }; - var lastRouteIndex = route.matched.length - 1; - var lastCurrentIndex = current.matched.length - 1; - if ( - isSameRoute(route, current) && - // in the case the route map has been dynamically appended to - lastRouteIndex === lastCurrentIndex && - route.matched[lastRouteIndex] === current.matched[lastCurrentIndex] - ) { - this.ensureURL(); - if (route.hash) { - handleScroll(this.router, current, route, false); - } - return abort(createNavigationDuplicatedError(current, route)) - } - - var ref = resolveQueue( - this.current.matched, - route.matched - ); - var updated = ref.updated; - var deactivated = ref.deactivated; - var activated = ref.activated; - - var queue = [].concat( - // in-component leave guards - extractLeaveGuards(deactivated), - // global before hooks - this.router.beforeHooks, - // in-component update hooks - extractUpdateHooks(updated), - // in-config enter guards - activated.map(function (m) { return m.beforeEnter; }), - // async components - resolveAsyncComponents(activated) - ); - - var iterator = function (hook, next) { - if (this$1$1.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - try { - hook(route, current, function (to) { - if (to === false) { - // next(false) -> abort navigation, ensure current URL - this$1$1.ensureURL(true); - abort(createNavigationAbortedError(current, route)); - } else if (isError(to)) { - this$1$1.ensureURL(true); - abort(to); - } else if ( - typeof to === 'string' || - (typeof to === 'object' && - (typeof to.path === 'string' || typeof to.name === 'string')) - ) { - // next('/') or next({ path: '/' }) -> redirect - abort(createNavigationRedirectedError(current, route)); - if (typeof to === 'object' && to.replace) { - this$1$1.replace(to); - } else { - this$1$1.push(to); - } - } else { - // confirm transition and pass on the value - next(to); - } - }); - } catch (e) { - abort(e); - } - }; - - runQueue(queue, iterator, function () { - // wait until async components are resolved before - // extracting in-component enter guards - var enterGuards = extractEnterGuards(activated); - var queue = enterGuards.concat(this$1$1.router.resolveHooks); - runQueue(queue, iterator, function () { - if (this$1$1.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - this$1$1.pending = null; - onComplete(route); - if (this$1$1.router.app) { - this$1$1.router.app.$nextTick(function () { - handleRouteEntered(route); - }); - } - }); - }); -}; - -History.prototype.updateRoute = function updateRoute (route) { - this.current = route; - this.cb && this.cb(route); -}; - -History.prototype.setupListeners = function setupListeners () { - // Default implementation is empty -}; - -History.prototype.teardown = function teardown () { - // clean up event listeners - // https://github.com/vuejs/vue-router/issues/2341 - this.listeners.forEach(function (cleanupListener) { - cleanupListener(); - }); - this.listeners = []; - - // reset current history route - // https://github.com/vuejs/vue-router/issues/3294 - this.current = START; - this.pending = null; -}; - -function normalizeBase (base) { - if (!base) { - if (inBrowser) { - // respect <base> tag - var baseEl = document.querySelector('base'); - base = (baseEl && baseEl.getAttribute('href')) || '/'; - // strip full URL origin - base = base.replace(/^https?:\/\/[^\/]+/, ''); - } else { - base = '/'; - } - } - // make sure there's the starting slash - if (base.charAt(0) !== '/') { - base = '/' + base; - } - // remove trailing slash - return base.replace(/\/$/, '') -} - -function resolveQueue ( - current, - next -) { - var i; - var max = Math.max(current.length, next.length); - for (i = 0; i < max; i++) { - if (current[i] !== next[i]) { - break - } - } - return { - updated: next.slice(0, i), - activated: next.slice(i), - deactivated: current.slice(i) - } -} - -function extractGuards ( - records, - name, - bind, - reverse -) { - var guards = flatMapComponents(records, function (def, instance, match, key) { - var guard = extractGuard(def, name); - if (guard) { - return Array.isArray(guard) - ? guard.map(function (guard) { return bind(guard, instance, match, key); }) - : bind(guard, instance, match, key) - } - }); - return flatten(reverse ? guards.reverse() : guards) -} - -function extractGuard ( - def, - key -) { - if (typeof def !== 'function') { - // extend now so that global mixins are applied. - def = _Vue.extend(def); - } - return def.options[key] -} - -function extractLeaveGuards (deactivated) { - return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true) -} - -function extractUpdateHooks (updated) { - return extractGuards(updated, 'beforeRouteUpdate', bindGuard) -} - -function bindGuard (guard, instance) { - if (instance) { - return function boundRouteGuard () { - return guard.apply(instance, arguments) - } - } -} - -function extractEnterGuards ( - activated -) { - return extractGuards( - activated, - 'beforeRouteEnter', - function (guard, _, match, key) { - return bindEnterGuard(guard, match, key) - } - ) -} - -function bindEnterGuard ( - guard, - match, - key -) { - return function routeEnterGuard (to, from, next) { - return guard(to, from, function (cb) { - if (typeof cb === 'function') { - if (!match.enteredCbs[key]) { - match.enteredCbs[key] = []; - } - match.enteredCbs[key].push(cb); - } - next(cb); - }) - } -} - -/* */ - -var HTML5History = /*@__PURE__*/(function (History) { - function HTML5History (router, base) { - History.call(this, router, base); - - this._startLocation = getLocation(this.base); - } - - if ( History ) HTML5History.__proto__ = History; - HTML5History.prototype = Object.create( History && History.prototype ); - HTML5History.prototype.constructor = HTML5History; - - HTML5History.prototype.setupListeners = function setupListeners () { - var this$1$1 = this; - - if (this.listeners.length > 0) { - return - } - - var router = this.router; - var expectScroll = router.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll) { - this.listeners.push(setupScroll()); - } - - var handleRoutingEvent = function () { - var current = this$1$1.current; - - // Avoiding first `popstate` event dispatched in some browsers but first - // history route not updated since async guard at the same time. - var location = getLocation(this$1$1.base); - if (this$1$1.current === START && location === this$1$1._startLocation) { - return - } - - this$1$1.transitionTo(location, function (route) { - if (supportsScroll) { - handleScroll(router, route, current, true); - } - }); - }; - window.addEventListener('popstate', handleRoutingEvent); - this.listeners.push(function () { - window.removeEventListener('popstate', handleRoutingEvent); - }); - }; - - HTML5History.prototype.go = function go (n) { - window.history.go(n); - }; - - HTML5History.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo(location, function (route) { - pushState(cleanPath(this$1$1.base + route.fullPath)); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - }; - - HTML5History.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo(location, function (route) { - replaceState(cleanPath(this$1$1.base + route.fullPath)); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, onAbort); - }; - - HTML5History.prototype.ensureURL = function ensureURL (push) { - if (getLocation(this.base) !== this.current.fullPath) { - var current = cleanPath(this.base + this.current.fullPath); - push ? pushState(current) : replaceState(current); - } - }; - - HTML5History.prototype.getCurrentLocation = function getCurrentLocation () { - return getLocation(this.base) - }; - - return HTML5History; -}(History)); - -function getLocation (base) { - var path = window.location.pathname; - var pathLowerCase = path.toLowerCase(); - var baseLowerCase = base.toLowerCase(); - // base="/a" shouldn't turn path="/app" into "/a/pp" - // https://github.com/vuejs/vue-router/issues/3555 - // so we ensure the trailing slash in the base - if (base && ((pathLowerCase === baseLowerCase) || - (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) { - path = path.slice(base.length); - } - return (path || '/') + window.location.search + window.location.hash -} - -/* */ - -var HashHistory = /*@__PURE__*/(function (History) { - function HashHistory (router, base, fallback) { - History.call(this, router, base); - // check history fallback deeplinking - if (fallback && checkFallback(this.base)) { - return - } - ensureSlash(); - } - - if ( History ) HashHistory.__proto__ = History; - HashHistory.prototype = Object.create( History && History.prototype ); - HashHistory.prototype.constructor = HashHistory; - - // this is delayed until the app mounts - // to avoid the hashchange listener being fired too early - HashHistory.prototype.setupListeners = function setupListeners () { - var this$1$1 = this; - - if (this.listeners.length > 0) { - return - } - - var router = this.router; - var expectScroll = router.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll) { - this.listeners.push(setupScroll()); - } - - var handleRoutingEvent = function () { - var current = this$1$1.current; - if (!ensureSlash()) { - return - } - this$1$1.transitionTo(getHash(), function (route) { - if (supportsScroll) { - handleScroll(this$1$1.router, route, current, true); - } - if (!supportsPushState) { - replaceHash(route.fullPath); - } - }); - }; - var eventType = supportsPushState ? 'popstate' : 'hashchange'; - window.addEventListener( - eventType, - handleRoutingEvent - ); - this.listeners.push(function () { - window.removeEventListener(eventType, handleRoutingEvent); - }); - }; - - HashHistory.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo( - location, - function (route) { - pushHash(route.fullPath); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - HashHistory.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - var ref = this; - var fromRoute = ref.current; - this.transitionTo( - location, - function (route) { - replaceHash(route.fullPath); - handleScroll(this$1$1.router, route, fromRoute, false); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - HashHistory.prototype.go = function go (n) { - window.history.go(n); - }; - - HashHistory.prototype.ensureURL = function ensureURL (push) { - var current = this.current.fullPath; - if (getHash() !== current) { - push ? pushHash(current) : replaceHash(current); - } - }; - - HashHistory.prototype.getCurrentLocation = function getCurrentLocation () { - return getHash() - }; - - return HashHistory; -}(History)); - -function checkFallback (base) { - var location = getLocation(base); - if (!/^\/#/.test(location)) { - window.location.replace(cleanPath(base + '/#' + location)); - return true - } -} - -function ensureSlash () { - var path = getHash(); - if (path.charAt(0) === '/') { - return true - } - replaceHash('/' + path); - return false -} - -function getHash () { - // We can't use window.location.hash here because it's not - // consistent across browsers - Firefox will pre-decode it! - var href = window.location.href; - var index = href.indexOf('#'); - // empty path - if (index < 0) { return '' } - - href = href.slice(index + 1); - - return href -} - -function getUrl (path) { - var href = window.location.href; - var i = href.indexOf('#'); - var base = i >= 0 ? href.slice(0, i) : href; - return (base + "#" + path) -} - -function pushHash (path) { - if (supportsPushState) { - pushState(getUrl(path)); - } else { - window.location.hash = path; - } -} - -function replaceHash (path) { - if (supportsPushState) { - replaceState(getUrl(path)); - } else { - window.location.replace(getUrl(path)); - } -} - -/* */ - -var AbstractHistory = /*@__PURE__*/(function (History) { - function AbstractHistory (router, base) { - History.call(this, router, base); - this.stack = []; - this.index = -1; - } - - if ( History ) AbstractHistory.__proto__ = History; - AbstractHistory.prototype = Object.create( History && History.prototype ); - AbstractHistory.prototype.constructor = AbstractHistory; - - AbstractHistory.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - this.transitionTo( - location, - function (route) { - this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route); - this$1$1.index++; - onComplete && onComplete(route); - }, - onAbort - ); - }; - - AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - this.transitionTo( - location, - function (route) { - this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route); - onComplete && onComplete(route); - }, - onAbort - ); - }; - - AbstractHistory.prototype.go = function go (n) { - var this$1$1 = this; - - var targetIndex = this.index + n; - if (targetIndex < 0 || targetIndex >= this.stack.length) { - return - } - var route = this.stack[targetIndex]; - this.confirmTransition( - route, - function () { - var prev = this$1$1.current; - this$1$1.index = targetIndex; - this$1$1.updateRoute(route); - this$1$1.router.afterHooks.forEach(function (hook) { - hook && hook(route, prev); - }); - }, - function (err) { - if (isNavigationFailure(err, NavigationFailureType.duplicated)) { - this$1$1.index = targetIndex; - } - } - ); - }; - - AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () { - var current = this.stack[this.stack.length - 1]; - return current ? current.fullPath : '/' - }; - - AbstractHistory.prototype.ensureURL = function ensureURL () { - // noop - }; - - return AbstractHistory; -}(History)); - -/* */ - - - -var VueRouter = function VueRouter (options) { - if ( options === void 0 ) options = {}; - - if (process.env.NODE_ENV !== 'production') { - warn(this instanceof VueRouter, "Router must be called with the new operator."); - } - this.app = null; - this.apps = []; - this.options = options; - this.beforeHooks = []; - this.resolveHooks = []; - this.afterHooks = []; - this.matcher = createMatcher(options.routes || [], this); - - var mode = options.mode || 'hash'; - this.fallback = - mode === 'history' && !supportsPushState && options.fallback !== false; - if (this.fallback) { - mode = 'hash'; - } - if (!inBrowser) { - mode = 'abstract'; - } - this.mode = mode; - - switch (mode) { - case 'history': - this.history = new HTML5History(this, options.base); - break - case 'hash': - this.history = new HashHistory(this, options.base, this.fallback); - break - case 'abstract': - this.history = new AbstractHistory(this, options.base); - break - default: - if (process.env.NODE_ENV !== 'production') { - assert(false, ("invalid mode: " + mode)); - } - } -}; - -var prototypeAccessors = { currentRoute: { configurable: true } }; - -VueRouter.prototype.match = function match (raw, current, redirectedFrom) { - return this.matcher.match(raw, current, redirectedFrom) -}; - -prototypeAccessors.currentRoute.get = function () { - return this.history && this.history.current -}; - -VueRouter.prototype.init = function init (app /* Vue component instance */) { - var this$1$1 = this; - - process.env.NODE_ENV !== 'production' && - assert( - install.installed, - "not installed. Make sure to call `Vue.use(VueRouter)` " + - "before creating root instance." - ); - - this.apps.push(app); - - // set up app destroyed handler - // https://github.com/vuejs/vue-router/issues/2639 - app.$once('hook:destroyed', function () { - // clean out app from this.apps array once destroyed - var index = this$1$1.apps.indexOf(app); - if (index > -1) { this$1$1.apps.splice(index, 1); } - // ensure we still have a main app or null if no apps - // we do not release the router so it can be reused - if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; } - - if (!this$1$1.app) { this$1$1.history.teardown(); } - }); - - // main app previously initialized - // return as we don't need to set up new history listener - if (this.app) { - return - } - - this.app = app; - - var history = this.history; - - if (history instanceof HTML5History || history instanceof HashHistory) { - var handleInitialScroll = function (routeOrError) { - var from = history.current; - var expectScroll = this$1$1.options.scrollBehavior; - var supportsScroll = supportsPushState && expectScroll; - - if (supportsScroll && 'fullPath' in routeOrError) { - handleScroll(this$1$1, routeOrError, from, false); - } - }; - var setupListeners = function (routeOrError) { - history.setupListeners(); - handleInitialScroll(routeOrError); - }; - history.transitionTo( - history.getCurrentLocation(), - setupListeners, - setupListeners - ); - } - - history.listen(function (route) { - this$1$1.apps.forEach(function (app) { - app._route = route; - }); - }); -}; - -VueRouter.prototype.beforeEach = function beforeEach (fn) { - return registerHook(this.beforeHooks, fn) -}; - -VueRouter.prototype.beforeResolve = function beforeResolve (fn) { - return registerHook(this.resolveHooks, fn) -}; - -VueRouter.prototype.afterEach = function afterEach (fn) { - return registerHook(this.afterHooks, fn) -}; - -VueRouter.prototype.onReady = function onReady (cb, errorCb) { - this.history.onReady(cb, errorCb); -}; - -VueRouter.prototype.onError = function onError (errorCb) { - this.history.onError(errorCb); -}; - -VueRouter.prototype.push = function push (location, onComplete, onAbort) { - var this$1$1 = this; - - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise(function (resolve, reject) { - this$1$1.history.push(location, resolve, reject); - }) - } else { - this.history.push(location, onComplete, onAbort); - } -}; - -VueRouter.prototype.replace = function replace (location, onComplete, onAbort) { - var this$1$1 = this; - - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise(function (resolve, reject) { - this$1$1.history.replace(location, resolve, reject); - }) - } else { - this.history.replace(location, onComplete, onAbort); - } -}; - -VueRouter.prototype.go = function go (n) { - this.history.go(n); -}; - -VueRouter.prototype.back = function back () { - this.go(-1); -}; - -VueRouter.prototype.forward = function forward () { - this.go(1); -}; - -VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) { - var route = to - ? to.matched - ? to - : this.resolve(to).route - : this.currentRoute; - if (!route) { - return [] - } - return [].concat.apply( - [], - route.matched.map(function (m) { - return Object.keys(m.components).map(function (key) { - return m.components[key] - }) - }) - ) -}; - -VueRouter.prototype.resolve = function resolve ( - to, - current, - append -) { - current = current || this.history.current; - var location = normalizeLocation(to, current, append, this); - var route = this.match(location, current); - var fullPath = route.redirectedFrom || route.fullPath; - var base = this.history.base; - var href = createHref(base, fullPath, this.mode); - return { - location: location, - route: route, - href: href, - // for backwards compat - normalizedTo: location, - resolved: route - } -}; - -VueRouter.prototype.getRoutes = function getRoutes () { - return this.matcher.getRoutes() -}; - -VueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) { - this.matcher.addRoute(parentOrRoute, route); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } -}; - -VueRouter.prototype.addRoutes = function addRoutes (routes) { - if (process.env.NODE_ENV !== 'production') { - warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.'); - } - this.matcher.addRoutes(routes); - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()); - } -}; - -Object.defineProperties( VueRouter.prototype, prototypeAccessors ); - -var VueRouter$1 = VueRouter; - -function registerHook (list, fn) { - list.push(fn); - return function () { - var i = list.indexOf(fn); - if (i > -1) { list.splice(i, 1); } - } -} - -function createHref (base, fullPath, mode) { - var path = mode === 'hash' ? '#' + fullPath : fullPath; - return base ? cleanPath(base + '/' + path) : path -} - -// We cannot remove this as it would be a breaking change -VueRouter.install = install; -VueRouter.version = '3.6.5'; -VueRouter.isNavigationFailure = isNavigationFailure; -VueRouter.NavigationFailureType = NavigationFailureType; -VueRouter.START_LOCATION = START; - -if (inBrowser && window.Vue) { - window.Vue.use(VueRouter); -} - -var version = '3.6.5'; - -export { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version }; diff --git a/docs-gitbook/LANGS.md b/docs-gitbook/LANGS.md deleted file mode 100644 index 2c30e8eec..000000000 --- a/docs-gitbook/LANGS.md +++ /dev/null @@ -1,9 +0,0 @@ -* [English](en/) -* [French](fr/) -* [Japanese](ja/) -* [中文](zh-cn/) -* [German](de/) -* [Русский](ru/) -* [한국어(Korean)](kr/) -* [Español](es/) -* [0.7 Docs](old/) diff --git a/docs-gitbook/de/SUMMARY.md b/docs-gitbook/de/SUMMARY.md deleted file mode 100644 index c305a4705..000000000 --- a/docs-gitbook/de/SUMMARY.md +++ /dev/null @@ -1,32 +0,0 @@ -# vue-router - -<!--email_off--> -> Merke: vue-router@2.x ist nur mit Vue 2.x kompatibel. Dokumentation für 0.7.x ist [hier (englisch)](https://github.com/vuejs/vue-router/tree/1.0/docs/en) -<!--/email_off--> - -**[Versionshinweise (englisch)](https://github.com/vuejs/vue-router/releases)** - -- [Installation](installation.md) -- Grundlegendes - - [Erste Schritte](essentials/getting-started.md) - - [Dynamisches Route-Matching](essentials/dynamic-matching.md) - - [Verschachtelte Routes](essentials/nested-routes.md) - - [Programmatische Navigation](essentials/navigation.md) - - [Benannte Routes](essentials/named-routes.md) - - [Benannte Views](essentials/named-views.md) - - [Redirect und Alias](essentials/redirect-and-alias.md) - - [HTML5-Verlaufsmodus](essentials/history-mode.md) -- Fortgeschritten - - [Navigations-Guards](advanced/navigation-guards.md) - - [Route Meta-Felder](advanced/meta.md) - - [Transitions (Übergänge)](advanced/transitions.md) - - [Daten laden](advanced/data-fetching.md) - - [Scroll-Verhalten](advanced/scroll-behavior.md) - - [Lazy Loading](advanced/lazy-loading.md) -- API-Referenz - - [router-link](api/router-link.md) - - [router-view](api/router-view.md) - - [Das Route-Objekt](api/route-object.md) - - [Router-Option](api/options.md) - - [Router-Instanz](api/router-instance.md) - - [Injection von Komponenten](api/component-injections.md) diff --git a/docs-gitbook/de/advanced/data-fetching.md b/docs-gitbook/de/advanced/data-fetching.md deleted file mode 100644 index fe0c5800b..000000000 --- a/docs-gitbook/de/advanced/data-fetching.md +++ /dev/null @@ -1,113 +0,0 @@ -# Daten laden - -Oftmals müssen wir Daten von einem Server laden, sobald eine Route aktiviert wird. Zum Beispiel müssen die Daten des Users vom Server geladen werden, bevor das Userprofil angezeigt werden kann. Dies kann auf zwei Arten erreicht werden: - -- **Laden nach der Navigation**: Der Router schließt zuerst die Navigation ab und wir laden die Daten anschließend in der neuen Komponente. Während der Übertragung kann ein Ladebalken oder ähnliches in der Komponente angezeigt werden. - -- **Laden der Navigation**: Wir laden Daten bevor die Navigation der Route durchgeführt wird und navigieren danach erst zur neuen Route. - -Technisch gesehen sind beide Optionen gleich "gut" - letztendlich hängt es davon ab, welche Benutzererfahrung man erreichen möchte. - -## Laden nach der Navigation - -In diesem Fall navigieren und rendern wir die neue Komponente direkt und laden die Daten im `created`-Hook der Komponente. Das ermöglicht es uns dem Nutzer in der neuen Komponente einen Ladebalken oder ähnliches anzuzeigen während der Content vom Server geladen wird. Außerdem können wir so den Ladevorgang in jeder Komponente individuell gestalten. - -Im folgenden Beispiel haben wir eine `Post`-Komponente, welche Daten für einen Blog-Post basierend auf `$route.params.id` einholt: - -``` html -<template> - <div class="post"> - <div class="loading" v-if="loading"> - Lade.. - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // Lade die Daten, wenn die Komponente erstellt wurde und die - // Daten bereits observed ("beobachtet") werden. - this.fetchData() - }, - watch: { - // Rufe die Methode erneut auf, wenn sich die Route ändert. - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // Ersetze 'getPost' mit einem beliebigen AJAX-tool / API-Wrapper - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## Laden vor der Navigation - -In diesem Fall werden die Daten geladen, bevor wir in die neue Route navigieren. Die Inhalte werden in dem `beforeRouteEnter`-Guard der neuen Komponente geladen. Die `next`-Funktion wird erst aufgerufen, wenn der Vorgang abgeschlossen ist: - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - if (err) { - // Zeige eine globale Fehlermeldung. - next(false) - } else { - next(vm => { - vm.post = post - }) - } - }) - }, - // Wenn die Route geändert und die Komponente bereits gerendert wurde, - // ist der Aufbau etwas anders: - watch: { - $route () { - this.post = null - getPost(this.$route.params.id, (err, post) => { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -Der Nutzer bleibt im aktuellen View, während die Daten für den neuen View geladen werden. Daher ist es während des Ladevorgangs empfehlenswert, innerhalb der App einen Ladebalken oder ähnliches anzuzeigen. Wenn der Ladevorgang fehlschlägt, ist es außerdem wichtig, eine Fehlermeldung auszugeben. diff --git a/docs-gitbook/de/advanced/lazy-loading.md b/docs-gitbook/de/advanced/lazy-loading.md deleted file mode 100644 index b00d20779..000000000 --- a/docs-gitbook/de/advanced/lazy-loading.md +++ /dev/null @@ -1,44 +0,0 @@ -# Lazy Loading - -Wenn Apps mit einem Bundler erstellt werden, kann das erzeugte "Bundle" recht groß werden und so die Seitenladezeit beeinträchtigen. Es wäre effizienter, wenn man das Bundle in die einzelnen Router-Komponenten aufteilen könnte und sie nur dann lädt, wenn die Route besucht wird. - -Mit der Kombination von Vue's Feature für [asynchrone Komponenten](http://vuejs.org/guide/components.html#Async-Components) und Webpack's Feature ["Code-Splitting"](https://webpack.js.org/guides/code-splitting-require/) (engl. _to split_: _teilen_) ist es einfach, dieses "Lazy Loading" genannte Verhalten für Route-Komponenten zu erreichen. - -Dazu müssen wir nur unsere Route-Komponenten als asynchrone Komponente definieren: - -``` js -const Foo = resolve => { - // require.ensure ist Webpacks speziale Syntax für Code-Splitting. - require.ensure(['./Foo.vue'], () => { - resolve(require('./Foo.vue')) - }) -} -``` - -Es gibt auch eine alternative Code-Splitting Syntax mit `require` im AMD-Stil, mit der das ganze folgendermaßen vereinfacht werden kann: - -``` js -const Foo = resolve => require(['./Foo.vue'], resolve) -``` - -In der Route-Konfiguration muss nichts genändert werden - wir nutzen `Foo` wie gewohnt: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/foo', component: Foo } - ] -}) -``` - -### Gruppierung von Komponenten im selben Chunk - -Manchmal wollen wir alle Komponenten unter derselben Route in den selben ansynchronen Chunk gruppieren. Dafür benutzern wir das ["named Chunks" (englisch)](https://webpack.js.org/guides/code-splitting-require/#chunkname) Feature, indem wir einen Chunk-Namen als drittes Argument für `require.ensure` hinzufügen. - -``` js -const Foo = r => require.ensure([], () => r(require('./Foo.vue')), 'group-foo') -const Bar = r => require.ensure([], () => r(require('./Bar.vue')), 'group-foo') -const Baz = r => require.ensure([], () => r(require('./Baz.vue')), 'group-foo') -``` - -Webpack bündelt alle asynchronen Module mit dem gleichen Chunk-Namen in denselben asynchronen Chunk. Das bedeutet auch, dass keine Dependencies mehr für `require.ensure` explizit aufgelistet werden müssen - daher das leere Array als Argument. diff --git a/docs-gitbook/de/advanced/meta.md b/docs-gitbook/de/advanced/meta.md deleted file mode 100644 index 7bb104841..000000000 --- a/docs-gitbook/de/advanced/meta.md +++ /dev/null @@ -1,52 +0,0 @@ -# Route Meta-Felder - -In der Route-Definition kann man ein Meta-Feld definieren: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // ein Metafeld - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -Und wie greifen wir auf das `meta`-Feld zu? - -Zunächst einmal: Wir nennen jedes Route-Objekt in der `routes`-Konfiguration **Route-Record**. Route-Records können verschachtelt sein, weshalb eine URL potentiell zu mehreren Route-Records passen kann. - -Zum Beispiel werden mit der obigen Konfiguration und der URL `/foo/bar` beide - Parent-Record und Child-Record - gematched. - -Alle Route-Records, die auf eine URL zutreffen, sind im `$route`-Objekt und in den Route-Objekten in Navigation-Guards im `$route.matched`-Array zu finden. Deswegen müssen wir mit einer Schleife das `$route.matched` Array durchlaufen, um alle Route-Records auf Metafelder zu prüfen. - -Ein Anwendungsfall ist die Prüfung nach einem Metafeld im globalen Before-Guard: - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // Diese Route benötigt Authentifizierung und prüft, - // ob man eingeloggt ist. - // Wenn nicht, Redirect zur Login-Seite. - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // Rufe immer next() auf. - } -}) -``` diff --git a/docs-gitbook/de/advanced/navigation-guards.md b/docs-gitbook/de/advanced/navigation-guards.md deleted file mode 100644 index 4c3559258..000000000 --- a/docs-gitbook/de/advanced/navigation-guards.md +++ /dev/null @@ -1,96 +0,0 @@ -# Navigation Guards ("Navigations-Wächter") - -Wie der Name schon andeutet, werden "navigation guards" `vue-router` primär genutzt, um Navigationen zu "bewachen", indem diese bei Bedarf redirected oder abgebrochen werden. Es gibt dabei verschiedene Möglichkeiten, sich in den Navigationsprozess einzuklinken: global, in der Route Definition oder direkt in der Komponente. - -Hinweis: Guards werden nicht ausgelöst, wenn Params oder Querys geändert werden. Beobachte in diesen Fällen einfach [das `$route`-Objekt](../essentials/dynamic-matching.md#reacting-to-params-changes), um auf Änderungen zu reagieren. - -### Globale Guards - -Man kann globale Before-Guards ("davor-guards") mit `router.beforeEach` registrieren: - -``` js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -Globale Before-Guards werden in der Reihenfolge aufgerufen, in der sie registriert wurden, wann immer eine Navigation ausgelöst wird. Der guard kann auch auch asynchron beendet werden - die Navigation ist solange im Status **pending**, bis alle bearbeitet wurden. - -Jede Guard Funktion erhält drei Argumente: - -- **`to: Route`**: das [Route-Objekt](../api/route-object.md), zu dem navigiert wird - -- **`from: Route`**: die aktuelle Route, von der wegnavigiert wird - -- **`next: Function`**: Diese Funktion muss aufgerufen werden, um den guard zu beenden. Die daraus resultierende Aktion hängt von den Argumenten in `next` ab: - - - **`next()`**: Gehe zum nächsten guard in der Reihe. Wenn keine mehr vorhanden sind, ist die Navigation **bestätigt**. - - - **`next(false)`**: Brich die aktuelle Navigation ab. Wurde die URL geändert (entweder manuell durch den Nutzer oder über den Zurück-Button), wird sie zurückgesetzt auf die der `from`-Route. - - - **`next('/')` or `next({ path: '/' })`**: Umleitung zu einer anderen Route. Die aktuelle Navigation wird abgebrochen und eine neue gestartet. - -**Die `next`-Funktion muss immer aufgerufen werden, sonst kann der Guard nicht aufgelöst werden.** - -Man kann auch globale After-Guards ("Danach-Guards") registrieren, allerdings erhalten diese keine `next`-Funktion wie der Navigationsschutz und beeinflussen nicht die Navigation selbst: - -``` js -router.afterEach((to, from) => { - // ... -}) -``` - -### Guards in der Route - -Man kann den `beforeEnter`-Guard direkt in der Router-Konfiguration definieren: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -Diese Guards haben die exakt gleiche Signatur wie globale Before-Guards. - -### Guards in Komponenten - -Zu guter Letzt kann man Guards auch direkt in den Route-Komponenten (die, die der Router-Konfiguration hinzugefügt werden) mit `beforeRouteEnter` und `beforeRouteLeave` definieren: - -``` js -const Foo = { - template: `...`, - beforeRouteEnter (to, from, next) { - // Wird aufgerufen bevor die Route bestätigt wird, die diese Komponenten rendert. - // Hat keinen Zugriff auf den `this`-Kontext der Komponenteninstanz, - // da diese noch nicht erstellt wurde, wenn die Guard-Funktion aufgerufen wird. - }, - beforeRouteLeave (to, from, next) { - // Wird aufgerufen, wenn von der Route, die diese Komponente rendert, wegnavigiert wird. - // Hat Zugriff zum `this`-Kontext. - } -} -``` - -Der `beforeRouteEnter`-Guard hat keinen Zugriff auf den `this`-Kontext, weil der Guard aufgerufen wird, bevor die Navigation bestätigt wurde, weshalb die Komponente noch gar nicht erzeugt wurde. - -Allerdings bekommt man Zugriff auf die Instanz, indem man einen Callback an `next` übergibt. Der Callback wird ausgeführt wenn die Navigation bestätigt wurde. Die Komponente wird im Callback als Argument übergeben: - -``` js -beforeRouteEnter (to, from, next) { - next(vm => { - // Zugriff auf Komponenteninstanz via 'vm' - }) -} -``` - -In `beforeRouteLeave`-Guards kann man den `this`-Kontext aufrufen. Dieser Guard wird normalerweise verwendet um zu verhindern, dass ein Benutzer die Route versehentlich verlässt ohne ungesicherten Arbeit zu speichern. Die Navigation kann mit `next(false)` abgebrochen werden. diff --git a/docs-gitbook/de/advanced/scroll-behavior.md b/docs-gitbook/de/advanced/scroll-behavior.md deleted file mode 100644 index 1154ecc56..000000000 --- a/docs-gitbook/de/advanced/scroll-behavior.md +++ /dev/null @@ -1,59 +0,0 @@ -# Scroll-Verhalten - -Oft wollen wir, dass die Seite nach oben scrollt, wenn zu einer neuen Route navigiert wird, oder dass die Scroll-Position von Verlaufseinträgen wie beim Neuladen einer Seite beibehalten wird. `vue-router` ermöglichst das und noch mehr - wir können das Scroll-Verhalten komplett individualisieren. - -> Merke: Dies funktioniert nur im HTML5-Verlaufsmodus ("history mode"). - -Beim Erzeugen der Router-Instanz fügt man die `scrollBehavior`-Funktion hinzu: - -``` js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // zurückgeben der gewünschten Position - } -}) -``` - -Die `scrollBehavior`-Funktion erhält die Route-Objeke `to` und `from` als Argumente. Das dritte Argument `savedPosition` steht nur zur Verfügung, wenn es sich um eine `popstate`-Navigation handelt (d.h. der Vor-/Zurück-Button des Browsers hat die Navigation ausgelöst). - -Die Funktion sollte ein Objekt zurückgeben, dass die Scroll-Position beschreibt. Das Objekt kann folgendermaßen aussehen: - -- `{ x: number, y: number }` -- `{ selector: string }` - -Wenn ein falscher (falsy) Wert oder ein leeres Objekt zurückgegeben wird, wird nicht gescrollt. - -Im folgenden Beispiel scrollt die Seite komplett nach oben: -``` js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - - -Wenn die Funktion das `savedPosition`-Object zurückgibt, verhält sich die Seite wie ein Browser, innerhalb dessen mit den Vor-/Zurück Buttons navigiert wird. - -``` js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -Simulation des "Scrolle zum Anchor"-Verhaltens: - -``` js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - } - } -} -``` - -Du kannst außerdem die [Route Meta-Felder](meta.md) für eine noch genauere Kontrolle des Scroll-Verhaltens nutzen. [Hier](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js) findest du ein Beispiel. diff --git a/docs-gitbook/de/advanced/transitions.md b/docs-gitbook/de/advanced/transitions.md deleted file mode 100644 index d2c366775..000000000 --- a/docs-gitbook/de/advanced/transitions.md +++ /dev/null @@ -1,58 +0,0 @@ -# Transitions (Übergänge) - -Da `<router-view>` im Grunde eine dynamische Komponente ist, kann man Übergangs-Effekte mit der `<transition>`-Komponente hinzufügen: - -``` html -<transition> - <router-view></router-view> -</transition> -``` - -[Alle Features von `<transition>`](http://vuejs.org/guide/transitions.html) funktionieren hier genauso. - -### Übergang für einzelne Routes - -Das obige Beispiel nutzt den gleichen Übergangseffekt für alle Routes. Wenn unterschiedliche Übergänge je Route gewollt sind, kann man `<transition>` stattdessen *in* der Route-Komponente mit jeweils anderen Namen verwenden: - -``` js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -### Route-basierter dynamischer Übergang - -Es ist auch möglich, den Übergang dynamisch anhand der Beziehung zwischen Ziel- und aktueller Route festzulegen: - -``` html -<!-- nutze einen dynamischen Übergangsnamen --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -``` js -// überwache $route in der Parent-Komponente, -// um den Übergang festzulegen -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -Komplettes Beispiel [hier](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js) ansehen. diff --git a/docs-gitbook/de/api/component-injections.md b/docs-gitbook/de/api/component-injections.md deleted file mode 100644 index e33403a76..000000000 --- a/docs-gitbook/de/api/component-injections.md +++ /dev/null @@ -1,20 +0,0 @@ -# Injektion von Komponenten - -### Injizierte Eigenschaften - -Die folgenden Eigenschaften werden in jede Child-Komponente injiziert, wenn man die Router-Instanz in die Root-Instanz der App als `router:`-Option übergibt. - -- #### $router - - Die Router-Instanz. - -- #### $route - - Die aktuell aktive [Route](route-object.md). Diese Eigenschaft ist schreibgeschützt und ihre Eigenschaften sind unveränderbar - aber sie kann überwacht werden. - -### Aktivierte Optionen - -- **beforeRouteEnter** -- **beforeRouteLeave** - - Siehe [Guards in Komponenten Komponentenschutz](../advanced/navigation-guards.md#guards-in-komponenten). diff --git a/docs-gitbook/de/api/options.md b/docs-gitbook/de/api/options.md deleted file mode 100644 index 7e96f93da..000000000 --- a/docs-gitbook/de/api/options.md +++ /dev/null @@ -1,69 +0,0 @@ -# Optionen des Router-Konstruktors - -### routes - -- Typ: `Array<RouteConfig>` - - Typendeklaration für `RouteConfig`: - - ``` js - declare type RouteConfig = { - path: string; - component?: Component; - name?: string; // für benannte Routes - components?: { [name: string]: Component }; // für benannte Views - redirect?: string | Location | Function; - alias?: string | Array<string>; - children?: Array<RouteConfig>; // für Verschachtelte Routes - beforeEnter?: (to: Route, from: Route, next: Function) => void; - meta?: any; - } - ``` - -### mode - -- Typ: `string` - -- Default: `"hash" (in browser) | "abstract" (in Node.js)` - -- verfügbare Werte: `"hash" | "history" | "abstract"` - - Bestimmt den Router-Mode. - - - `hash`: Nutzt den URL-Hash für das Routing. Funktioniert in allen Vue-unterstützten Browsern, inklusive derer, die die HTML5 Verlaufs-API nicht unterstützen. - - - `history`: Benötigt die HTML5 Verlaufs-API und Serverkonfiguration. Siehe [HTML5 Verlaufsmodus](../essentials/history-mode.md). - - - `abstract`: Funktioniert in jeder JavaScript-Umgebung, zB. serverseitig mit Node.js. **Der Router wird automatisch in diesen Modus gezwungen, wenn keine Browser-API vorhanden ist.** - -### base - -- Typ: `string` - -- Default: `"/"` - - Die Basis-URL der App. Läuft zum Beispiel die gesamte Single-Page-Applikation unter `/app`, sollte `base` den Wert `"/app"` haben. - -### linkActiveClass - -- Typ: `string` - -- Default: `"router-link-active"` - - Definiert global den Namen der "active" Klasse für `<router-link>`. Siehe auch [router-link](router-link.md). - -### scrollBehavior - -- Typ: `Function` - - Signatur: - - ``` - ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => { x: number, y: number } | { selector: string } | ?{} - ``` - - Für mehr Details siehe [Scroll-Verhalten](../advanced/scroll-behavior.md). diff --git a/docs-gitbook/de/api/route-object.md b/docs-gitbook/de/api/route-object.md deleted file mode 100644 index 9bc6652cf..000000000 --- a/docs-gitbook/de/api/route-object.md +++ /dev/null @@ -1,89 +0,0 @@ -# Das Route-Objekt - -Das **Route-Objekt** repräsentiert den Zustand der aktuell aktiven Route. Es enthält geparste Informationen zur aktuellen URL und den Route-Einträgen, die mit der URL gematched wurden. - -Das Route-Objekt ist 'immutable' (unveränderbar). Jede erfolgreiche Navigation resultiert in einem neuen Route-Objekt. - -Das Route-Objekt kann an mehreren Orten gefunden werden: - -- in Komponenten als `this.$route` - -- in `$route`-Watcher-Callbacks. - -- als Rückgabewert von `router.match(location)` - -- in Navigation-Guards als die ersten beiden Argumente: - - ``` js - router.beforeEach((to, from, next) => { - // 'to' und 'from' sind Router-Objekte - }) - ``` - -- in der `scrollBehavior`-Funktion als die ersten beiden Argumente: - - ``` js - const router = new VueRouter({ - scrollBehavior (to, from, savedPosition) { - // 'to' und 'from' sind Router-Objekte - } - }) - ``` - -### Eigenschaften des Router-Objekts - -- **$route.path** - - - Typ: `string` - - Ein String, der gleich dem Pfad der aktuellen Route ist immer als absoluter Pfad ausgegeben wird, zB. `"/foo/bar"`. - -- **$route.params** - - - Typ: `Object` - - Ein Objekt, welches Schlüssel/Wert-Paare von Stern- und dynamischen Segmenten enthält. Gibt es keine Parameter, ist der Wert ein leeres Objekt. - -- **$route.query** - - - Typ: `Object` - - Ein Objekt, welches Schlüssel/Wert-Paare des Query-Strings enthält. Für den Pfad `/foo?user=1` erhält man zum Beispiel `$route.query.user == 1`. Gibt es kein Query, ist der Wert ein leeres Objekt. - -- **$route.hash** - - - Typ: `string` - - Der Hash der aktuellen Route (mit `#`). Gibt es keinen Hash, ist dessen Wert ein leerer String. - -- **$route.fullPath** - - - Typ: `string` - - Die voll umgewandelte URL inklusive Abfrage und Hash. - -- **$route.matched** - - - Typ: `Array<RouteRecord>` - - Ein Array von **Route-Einträgen** für alle verschachtelten Pfadsegmente der aktuellen Route. Route-Einträge sind Kopien der Objekte im Array der `routes`-Konfiguration (und deren `children`-Arrays): - - ``` js - const router = new VueRouter({ - routes: [ - // das folgende Objekt in ein Route-Eintrag - { path: '/foo', component: Foo, - children: [ - // das ist auch ein Route-Eintrag - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - Wenn die URL `/foo/bar` ist, ist `$route.matched` ein Array, welches beide geklonten Objekte von Parent nach Child sortiert enthält. - -- **$route.name** - - Der Name der aktuellen Route, sofern vorhanden. Siehe [Benannte Routes](../essentials/named-routes.md). diff --git a/docs-gitbook/de/api/router-instance.md b/docs-gitbook/de/api/router-instance.md deleted file mode 100644 index 5cc0e46fe..000000000 --- a/docs-gitbook/de/api/router-instance.md +++ /dev/null @@ -1,68 +0,0 @@ -# Router-Instanz - -### Eigenschaften - -#### router.app - -- Typ: `Vue instance` - - Die grundlegende Vue-Instanz, in die `router` injiziert wurde. - -#### router.mode - -- Typ: `string` - - Der [Modus](options.md#mode), den der Router nutzt. - - -#### router.currentRoute - -- Typ: `Route` - - Die akuelle Route, widergespiegelt als [Route-Objekt](route-object.md). - -### Methoden - -- **router.beforeEach(guard)** -- **router.afterEach(hook)** - - Füge globalen Navigationsschutz hinzu. Siehe [Navigations-Guards](../advanced/navigation-guards.md). - - -- **router.push(location)** -- **router.replace(location)** -- **router.go(n)** -- **router.back()** -- **router.forward()** - - Navigiere programmatisch zu einer neuen URL. Siehe [Programmatische Navigation](../essentials/navigation.md). - -- **router.getMatchedComponents(location?)** - - Gibt ein Array von Komponenten (Definition/Konstruktor, nicht Instanz) zurück, die für den gegebenen Ort oder die aktuelle Route gematched wurden. Wird meist bei serverseitigem Rendern genutzt, um ein Vorladen von Daten zu ermöglichen. - -- **router.resolve(location, current?, append?)** - - Umgekehrte URL-Erkennung. Wenn man ein Ziel in gleicher Form wie in `<router-link>` übergibt, gibt die Funktion ein Objekt mit den folgenden Eigenschaften zurück: - -``` js -{ - location: Location; - route: Route; - href: string; -} -``` - -- **router.addRoutes(routes)** - - > 2.2.0+ - - Füge dynamisch weitere Routen zum Router hinzu. Das Argument muss ein Array mit demselben Format wie die `routes` Konstruktor-Option sein. - -- **router.onReady(callback)** - - > 2.2.0+ - - Diese Methode queued eine Callback-Funktion, welche aufgerufen wird, sobald der Router die initiale Navigation beendet hat - das heißt, dass alle asynchronen Komponenten und enter-hooks, die zu der aktuellen Route gehören, geladen und ausgeführt wurden. - - Damit lässt sich im serverseitigen Rendern sicherstellen, dass auf dem Server und im Client der gleiche Output gerendert wird. diff --git a/docs-gitbook/de/api/router-link.md b/docs-gitbook/de/api/router-link.md deleted file mode 100644 index b1dbc3534..000000000 --- a/docs-gitbook/de/api/router-link.md +++ /dev/null @@ -1,131 +0,0 @@ -# `<router-link>` - -`<router-link>` ist eine Komponente zum Auslösen von Nutzernavigationen. Die Ziel-Route wird mit der `to`-Prop angegeben. Sie wird standardmäßig als `<a>` mit korrektem `href` Attribut gerendert, das Element kann jedoch mit dem `tag`-Prop geändert werden. Darüber hinaus erhält der Link automatisch die "active" CSS-Klasse, wenn die Ziel-Route gerade aktiv ist. - -`<router-link>` ist aus folgenden Gründen gegenüber fest definierten `<a href="">` links zu bevorzugen: - -- Funktioniert in allen Router-Modi (history, hash, abstract) gleich. Daher muss man nichts ändern, wenn man den Modus jemals wechslen sollte oder er automatisch in den Hash-Modus für IE9 zurückfällt. - -- Im HTML5-Verlaufsmodus fängt `router-link` das `click`-Event ab, sodass der Browser nicht versucht, das Fenster neu zu laden. - -- Wenn die `base`-Option im HTML5-Verlaufsmodus genutzt wird, muss man die Base-URL nicht immer wieder in `to` mit angeben. - -### Props - -- **to** - - - Typ: `string | Location` - - - Pflichtfeld - - Kennzeichnet die Ziel-Route des Links. Wenn die Komponente geklickt wird, wird der Wert von `to` intern an `router.push()` übergeben - der Wert kann also entweder ein String oder ein Objekt sein kann. - - - ``` html - <!-- literaler String --> - <router-link to="home">Home</router-link> - <!-- gerendert zu --> - <a href="home">Home</a> - - <!-- JavaScript-Expression mit v-bind --> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- Auslassen von v-bind ist okay wie bei jedem anderen Prop --> - <router-link :to="'home'">Home</router-link> - - <!-- entspricht dem obigen Link --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- benannte Route --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- mit Query, resultiert in /register?plan=private --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link> - ``` - -- **replace** - - - Typ: `boolean` - - - Default: `false` - - Das Setzen von `replace` aktiviert `router.replace()` anstelle von `router.push()`. Die Navigation hinterlässt also keinen Verlaufseintrag. - - ``` html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -- **append** - - - Typ: `boolean` - - - Default: `false` - - Das Setzen von `append` hängt immer den relativen Pfad an den aktuellen an. Angenommen, man navigiert von `/a` zu einem relativen Pfad `b` - ohne `append` gelangt man zu `/b`, mit `append` jedoch wird daraus `/a/b`. - - ``` html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -- **tag** - - - Typ: `string` - - - Default: `"a"` - - Manchmal soll `<router-link>` einen anderen Tag rendern, zB. `<li>`. Mit Hilfe des `tag`-Props kann man definieren, welcher Tag gerendert werden soll. Der Tag reagiert nach wie vor auf Klick-Events für die Navigation. - - ``` html - <router-link to="/foo" tag="li">foo</router-link> - <!-- gerendert als --> - <li>foo</li> - ``` - -- **active-class** - - - Typ: `string` - - - Default: `"router-link-active"` - - Festlegen der aktiven CSS-Klasse die zugewiesen wird, wenn der Link aktiv ist. - Der Standardwert kann ebenfalls mit der `linkActiveClass`-Option des Router-Konstruktors global konfiguriert werden. - -- **exact** - - - Typ: `boolean` - - - Default: `false` - - Das standardmäßige Matching-Verfahren der aktiven Klasse ist ein **inklusives Match**. Zum Beispiel erhält `<router-link to="/a">` die Klasse, solange der aktuelle Pfad mit `/a` beginnt. - - Eine Konsequenz daraus ist, dass `<router-link to=/>` für jede Route aktiv ist! Um den "exakten Match-Modus" zu aktivieren, nutzt man die `exact`-Prop: - - ``` html - <!-- dieser Link wird nur bei '/' aktiv --> - <router-link to="/" exact> - ``` - - Siehe weitere Beispiele zur aktiven Linkklasse [hier](http://jsfiddle.net/fnlCtrl/dokbyypq/). - -- **event** - - > 2.1.0+ - - - Typ: `string | Array<string>` - - - Default: `'click'` - - Lege das Event fest, das die Navigation auslöst. - - -### "active" Klasse auf ein äußeres Element anwenden - -Machmal soll die aktive Klasse an einem äußeren Element anstelle das `<a>` gesetzt werden. In diesem Fall kann man das äußere Element als `<router-link>` rendern und damit den `<a>`-Tag umschließen: - -``` html -<router-link tag="li" to="/foo"> - <a>/foo</a> -</router-link> -``` - -In diesem Fall ist `<a>` der eigentliche Link und erhält das korrekte `href` attribut, aber die aktive Klasse wird auf das äußere `<li>` gesetzt. diff --git a/docs-gitbook/de/api/router-view.md b/docs-gitbook/de/api/router-view.md deleted file mode 100644 index d3cb755d1..000000000 --- a/docs-gitbook/de/api/router-view.md +++ /dev/null @@ -1,27 +0,0 @@ -# `<router-view>` - -Die `<router-view>`-Komponente ist eine 'functional' Komponente, die die gematchte Komponente zum gegebenen Pfad rendert. Komponenten, die in `router-view` gerendert werden, können auch eigene `<router-view>`s enthalten, welche dann Komponenten für verschachtelte Pfade rendern. - -### Props - -- **name** - - - Typ: `string` - - - Default: `"default"` - - Wenn `<router-view>` einen Namen trägt, rendert es die Komponente mit dem zugehörigen Namen in der `components`-Option in dem gematchten Route-Eintrag. Siehe [Benannte Views](../essentials/named-views.md). - -### Verhalten - -Alle anderen Props werden an die gerenderte Komponente weitergeleitet, allerdings sind die relevanten Daten je Route meistens in den Route-Parametern vorhanden. - -Da `<router-view>` auch nur eine normale Komponente ist, funktioniert sie mit `<transition>` und `<keep-alive>`. Wenn zusammen genutzt, achte darauf dass `<keep-alive>` innerhalb der `<transition>` ist: - -``` html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` diff --git a/docs-gitbook/de/essentials/dynamic-matching.md b/docs-gitbook/de/essentials/dynamic-matching.md deleted file mode 100644 index d98a84ce9..000000000 --- a/docs-gitbook/de/essentials/dynamic-matching.md +++ /dev/null @@ -1,64 +0,0 @@ -# Dynamisches Route-Matching - -Häufig müssen wir URLs, die einem bestimmten Muster entsprechen, einer Route bzw. Komponente zuordnen. Zum Beispiel haben wir eine `User`-Komponente, welche für alle User mit unterschiedlichen IDs gerendert werden soll. In `vue-router` können wir hierfür ein dynamisches Segment im Pfad nutzen: - -``` js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // dynamische Segmente beginnen mit Doppelpunkt - { path: '/user/:id', component: User } - ] -}) -``` - -Nun werden URLs wie `/user/foo` und `/user/bar` der gleichen Route und damit der gleichen Komponente zugeordnet. - -Ein dynamisches Segment wird mit einem Doppelpunkt `:` gekennzeichnet. Wenn eine Route mit einem dynamischen Segment erkannt wird, kann man über `this.$route.params` in jeder Komponente auf die Werte der dynamischen Segmente zugreifen. So können wir zum Beispiel die aktuelle User-ID rendern, indem wir das `User`-Template folgendermaßen erweitern: - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -``` - -Ein interactives Beispiel ist [hier](http://jsfiddle.net/yyx990803/4xfa2f19/) zu finden. - -Mehrere dynamische Segmente in der gleichen Route sind möglich und werden den entsprechenden Feldern in `$route.params` zugeordnet. Beispiele: - -| Muster | passender Pfad | $route.params | -|---------|------|--------| -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -Neben `$route.params` bietet das `$route`-Objekt Zugriff auf weitere nützliche Informationen wie `$route.query` (sofern eine Query in der URL vorhanden ist). Du findest alle Details dazu in der [API Referenz](../api/route-object.md). - - -### Reagieren auf Änderungen von "Params" - -Bei der Nutzung von Parametern in Routes ist zu beachten, dass **die selbe Komponenteninstanz genutzt wird,** wenn der Nutzer von `/user/foo` nach `/user/bar` navigiert. Da beide Routes die gleiche Komponente rendern, ist das effizienter als die alte zu zerstören und eine neue zu erstellen. **Allerdings bedeutet das auch, dass die "lifecycle hooks" der Komponente nicht aufgerufen werden.** - -Um nun auf Änderungen der Params in der gleichen Komponente zu reagieren, kann man einfach das `$route`-Objekt mit einer watch-function beobachten: - -``` js -const User = { - template: '...', - watch: { - '$route' (to, from) { - // reagiere auf @Route-Änderungen - } - } -} -``` - -### Erweiterte Matchingsmuster - -`vue-router` nutzt [path-to-regexp](https://github.com/pillarjs/path-to-regexp) für das Matching der URL-Pfade, und unterstützt damit viele erweiterte Matching-Muster wie optionale dynamische Segmente, "null oder mehr" / "ein oder mehr" Bedingungen und sogar benutzerdefinierte RegEx-Muster. -An dieser Stelle sei für weitere Informationen zur Nutzung dieser Features auf die [Dokumentation für erweiterte Muster](https://github.com/pillarjs/path-to-regexp#parameters) und [dieses Beispiel](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) verwiesen. - -### Matching Priorität - -Manchmal passt die URL zu mehr als einer Route. In diesem Fall ist die Priorität durch die Anordnung der Routes definiert: **Je früher eine Route definiert ist, desto höher ihre Priorität.** diff --git a/docs-gitbook/de/essentials/getting-started.md b/docs-gitbook/de/essentials/getting-started.md deleted file mode 100644 index b56e8feff..000000000 --- a/docs-gitbook/de/essentials/getting-started.md +++ /dev/null @@ -1,69 +0,0 @@ -# Erste Schritte - -> Hinweis: Wir benutzen [ES2015](https://github.com/lukehoban/es6features) in den Code-Beispielen. - -Eine Single-Page-Applikation mit Vue.js und vue-router zu erstellen ist wirklich simpel. Mit Vue.js stellen wir unsere App ja bereits aus Komponenten zusammen. Wenn wir nun vue-router ins Spiel bringen, müssen wir lediglich unsere Komponenten den "Routes" zuordnen und vue-router mitteilen, wo diese Komponenten gerendert werden sollen. Hier ein einfaches Beispiel: - -> Alle Beispiele nutzen die Standalone-Version von Vue, um Template-Parsing nutzen zu können. Mehr Details [hier (englisch)](http://vuejs.org/guide/installation.html#Standalone-vs-Runtime-only-Build) - -### HTML - -``` html -<script src="https://unpkg.com/vue/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- nutze <router-link> zur Navigation --> - <!-- gib den Link mit der `to`-Prop an --> - <!-- <router-link> wird standardmäßig als <a> gerendert--> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- Route-Outlet (zu deutsch soviel wie: "Ausgang") --> - <!-- die der Route zugeordnete Komponente wird hier gerendert--> - <router-view></router-view> -</div> -``` - -### JavaScript - -``` js -// 0. Wenn du ein Modul-System wie Webpack oder Browserify benutzt (z. B. via vue-cli), importiere Vue sowie VueRouter und rufe Vue.use(VueRouter) auf. - -// 1. Definiere die Route-Komponenten -// Diese können auch aus anderen Dateien importiert werden. -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. Definiere ein paar Routes -// Jede Route sollte mit einer Komponente verbunden sein. -// Die Komponenente kann entweder eine tatsächliche Komponente sein, die via Vue.extend() erstellt wird -// oder lediglich ein Optionsobjekt der Komponenente. -// Hinweis: Verschachtelte (engl: "nested") Routes werden später in dieser Anleitung behandelt. - -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. Erstelle die Router-Instanz und füge ihr die `routes`-Option hinzu. -// Es gibt ntürlich noch mehr Optionen, aber hier halten wir es erstmal einfach. - -const router = new VueRouter({ - routes // kurz für 'routes: routes' -}) - -// 4. Erstelle und mounte die Root-Instanz. -// Stelle sicher, dass der Router mit der `router` option an die Root Instanz übergeben wird, damit er später überall in deiner App zur Verfügung steht. - -const app = new Vue({ - router -}).$mount('#app') - -// Die App ist nun gestartet. -``` -Das ganze gibt es natürlich auch als [Live-Beispiel](http://jsfiddle.net/yyx990803/xgrjzsup/). - -Hinweis: `<router-link>` erhält automatisch die CSS-Klasse `.router-link-active`, wenn die aktuelle Route im Browser der des router-link entspricht. Mehr Infos dazu in der [API-Referenz](../api/router-link.md). diff --git a/docs-gitbook/de/essentials/history-mode.md b/docs-gitbook/de/essentials/history-mode.md deleted file mode 100644 index 4f4c7c681..000000000 --- a/docs-gitbook/de/essentials/history-mode.md +++ /dev/null @@ -1,60 +0,0 @@ -# HTML5-Verlaufsmodus ("History Mode") - -Der Standardmodus für `vue-router` ist der _Hash-Modus_. Er nutzt den URL-Hash, um eine komplette URL zu simulieren, damit die Seite nicht neu geladen wird, wenn sich die URL ändert. - -Um ohne Hash zu arbeiten, nutzt man den **Verlaufsmodus**, welcher die `history.pushState`-API von HTML5 nutzt, um URL-Navigation ohne Reload zu erreichen: - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -Bei Nutzung des Verlaufsmodus sieht die URL "normal" aus, zB. `http://meine-seite.de/benutzer/id` - Wunderschön! - -Es gibt jedoch ein Problem: Da unsere App eine so genannte "Single Page Application (SPA)" ist, die komplett im Browser läuft, erhält der Nutzer einen 404-Fehler, wenn er `http://meine-seite.de/benutzer/id` direkt aufruft - denn unter diesem Pfad wird dein Webserver nichts finden. - -Aber keine Sorge: Um dieses Problem zu beheben, musst du nur eine einzige "catch-all"-Route in deiner Serverkonfiguration ergänzen. Wenn die URL zu keiner statischen Datei gehört, sollte diese Route immer die `index.html` an den Browser senden, in der deine App läuft ist. - -## Beispiel einer Serverkonfiguration - -#### Apache - -```apache -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Node.js (Express) - -Für Node.js/Express benutz du am besten [connect-history-api-fallback middleware](https://github.com/bripkens/connect-history-api-fallback). - -## Warnung - -Es gibt einen kleinen Nachteil: Der Server wird keine 404-Fehler mehr melden, da alle nicht gefundenen Pfade zur `index.html` führen. Um das zu beheben, solltest du eine Sammel-Route in der Vue-App für die 404-Seite definieren. - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [ - { path: '*', component: NotFoundComponent } - ] -}) -``` - -Alternativ kann man bei einem Node.js-Server den Fallback nutzen, indem man das serverseitige Router-System den 404-Fehler ausgeben lässt, sollte die URL auf keine Route treffen, die deine Vue-App kennt. diff --git a/docs-gitbook/de/essentials/named-routes.md b/docs-gitbook/de/essentials/named-routes.md deleted file mode 100644 index d78cc1d9f..000000000 --- a/docs-gitbook/de/essentials/named-routes.md +++ /dev/null @@ -1,32 +0,0 @@ -# Benannte Routes - -Manchmal ist es einfacher, eine Route mit einem Namen anzusprechen. Besonders bei Links zu einer Route oder dem Ausführen von Navigationen. Den Namen vergibt man beim Erzeugen der Router-Instanz in den `routes`-Optionen: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -Um mit `router-link` zu einer benannten Route zu verlinken, gibt man ein Objekt in die `to`-Prop ein: - -``` html -<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> -``` - -Das exakt gleiche Objekt kann auch programmatisch in `router.push()` genutzt werden. - - -``` js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -In beiden Fällen wird der Router zum Pfad `/user/123` navigieren. - -Vollständiges Beispiel [hier](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js). diff --git a/docs-gitbook/de/essentials/named-views.md b/docs-gitbook/de/essentials/named-views.md deleted file mode 100644 index fe8cfd350..000000000 --- a/docs-gitbook/de/essentials/named-views.md +++ /dev/null @@ -1,29 +0,0 @@ -# Benannte Views - -Manchmal muss man mehrere Views zur selben Zeit darstellen, anstatt sie zu verschachteln. Zum Beispiel bei einem Layout mit Hauptteil und Seitenleiste. Hier sind benannte Views nützlich. Anstelle eines einzigen Outlets für die View-Darstellung gibt es mehrere, die Namen tragen können. Ein `router-view` ohne Namen heißt standardmäßig `default`. - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -Ein View wird durch eine Komponente gerendert, deswegen benötigen mehrere Views auch mehrere Komponenten für dieselbe Route. Dabei ist es wichtig, `components` (Plural) in den Optionen zu verwenden: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -Eine Demo zu diesem Beispiel ist -[hier](https://jsfiddle.net/posva/6du90epg/) zu finden. diff --git a/docs-gitbook/de/essentials/navigation.md b/docs-gitbook/de/essentials/navigation.md deleted file mode 100644 index 4880f9021..000000000 --- a/docs-gitbook/de/essentials/navigation.md +++ /dev/null @@ -1,70 +0,0 @@ -# Programmatische Navigation - -Neben `router-link` für deklarative Links in Templates, können wir mit Hilfe der Methoden der Router-Instanz programmatisch navigieren. - -#### `router.push(location, onComplete?, onAbort?)` - -Um zu einer anderen URL zu navigieren, nutzt man `router.push`. Diese Methode "pusht" einen neuen Eintrag in den Browser-Verlauf, sodass der Nutzer, wenn er die Zurück-Schaltfläche des Browsers betätigt, zur vorherigen URL zurückkehrt. - -Das ist dieselbe Methode, die intern aufgerufen wird, wenn wir auf einen `<router-link>` klicken. Das Anlicken von `<router-link :to="...">` ist also das Äquivalent zu `router.push(...)`. - -| Deklarativ | Programmatisch | -|-------------|--------------| -| `<router-link :to="...">` | `router.push(...)` | - -Das Argument kann ein Pfad als String oder eine Beschreibung des Ziels (der "location") als Objekt sein. - -``` js -// String -router.push('home') - -// Objekt -router.push({ path: 'home' }) - -// benannte ("named") Route -router.push({ name: 'user', params: { userId: 123 }}) - -// mit Query, resultiert in /register?plan=private -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -In Version 2.2.0 können wir optional `onComplete` und `onAbort` Callbacks als zweites und drittes Argument angeben. Diese Callbacks werden jeweilse aufgerufen, wenn die Navigation entweder erfolgreich abgeschlossen wurde (nachdem alle asynchronen hooks durchlaufen wurden), oder wenn sie abgerochen wurde (weil eine neue Navigation zu derselben oder einer anderen Route gestartet wurde, z.B. durch einen Klick, bevor die aktuelle Navigation beendet werden konnte). - -#### `router.replace(location, onComplete?, onAbort?)` - -Dise methode verhält sich wie `router.push`, allerdings erstellt sie keinen neuen Eintrag im Browser-Verlauf. Sie ersetzt lediglich den aktuellen Eintrag. - -| Deklarativ | Programmatisch | -|-------------|--------------| -| `<router-link :to="..." replace>` | `router.replace(...)` | - - -#### `router.go(n)` - -Diese Methode akzeptiert einen einfachen Integer als Parameter, der angibt, wie viele Schritte im Browser-Verlauf vor- oder rückwärts zu gehen sind - ähnlich wie `window.history.go(n)`. - -Beispiele - -``` js -// gehe einen Eintrag vorwärts - wie history.forward() -router.go(1) - -// gehe einen Eintrag zurück - wie history.back() -router.go(-1) - -// gehe drei Einträge vor -router.go(3) - -// scheitert ohne Nachricht, wenn nicht genügend Einträge vorhanden sind -router.go(-100) -router.go(100) -``` - -#### Manipulation des Verlaufs - -Vielleicht ist dir aufgefallen, dass `router.push`, `router.replace` und `router.go` Gegenstücke von [`window.history.pushState`, `window.history.replaceState` und `window.history.go`](https://developer.mozilla.org/de/docs/Web/API/History) sind und sie die `window.history`-API imitieren. - -Das macht es einfach, den Verlauf zu manipulieren, wenn man sich mit den [Browser-Verlauf-APIs](https://developer.mozilla.org/de/docs/Web/Guide/DOM/Manipulating_the_browser_history) -auskennt. - -Erwähnenswert ist, dass Navigationsmethoden von `vue-router` (`push`, `replace`, `go`) in allen router modes (`history`, `hash`, `abstract`) genau gleich funktionieren. diff --git a/docs-gitbook/de/essentials/nested-routes.md b/docs-gitbook/de/essentials/nested-routes.md deleted file mode 100644 index 19a21e2ae..000000000 --- a/docs-gitbook/de/essentials/nested-routes.md +++ /dev/null @@ -1,102 +0,0 @@ -# Verschachtelte Routes - -Echte App-UIs bestehen normalerweise aus Komponenten, die mehrere Ebenen tief verschachtelt sind. Und es ist durchaus üblich, dass die Segmente der URL die Struktur der Verschachtelung wiederspiegeln, zum Beispiel so: - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -Mit `vue-router` können wir derartige Beziehungen sehr leicht mit einer verschachtelten (englisch: "nested") Route-Konfiguration abbilden. - -Wir bauen auf der App auf, die im letzten Kapitel erstellt wurde: - -``` html -<div id="app"> - <router-view></router-view> -</div> -``` - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -Die `router-view` Komponente ist das Outlet der obersten Ebene. Sie rendert die Komponenten, welche zu Routes der obersten Ebene gehören. Eine dort gerenderte Komponente kann selbst wiederum eine `router-view` Komponente enthalten. Wenn wir zum Beispiel eine `router-view` Komponente im Template der User-Komponente platzieren, sieht das so aus: - -``` js -const User = { - template: ` - <div class="user"> - <h2>User {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -Um Komponenten in diesem verschachtelten Outlet zu rendern, müssen wir die `children`-Option in der Konfiguration des `VueRouter`-Konstruktors verwenden. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, - children: [ - { - // UserProfile wird innerhalb der - // <router-view> von User gerendert, - // wenn '/user/:id/profile' gematched wird. - path: 'profile', - component: UserProfile - }, - { - // UserPosts wird innerhalb der - // <router-view> von User gerendert, - // wenn '/user/:id/posts' gematched wird. - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**Hinweis: Verschachtelte Pfade, die mit `/` starten, werden als "root-path" (zu deutsch: "Wurzel-Pfad") behandelt. Damit kann man eine verschachtelte Route mit einem direkten Pfad erreichen, ohne dass die verschachtelten Pfadsegmente der übergeordneten Routes enthalten sein müssen.** - -Wie du sieht, ist die `children`-Option nur eine weiteres Array mit Route-Konfigurationsobjekten - wie das `routes`-Array selbst. Daher können wir Views so oft ineinander verschachteln, wie wir möchten. - -Wenn du nun aber mit mit der aktuellen Konfiguration `/user/foo` aufrufst, wird nichts im `router-view` Outlet von `User` gerendert, da keine Sub-Route gematched wurde. Wollen wir in dem Fall dennoch eine Komponente rendern, erreichen wir das ganz einfach mit einer Route im `children`-Array, die einen leeren String als Pfad hat: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', component: User, - children: [ - // UserHome wird in <router-view> - // von User gerendert, - // wenn /user/:id zutrifft. - { path: '', component: UserHome }, - - // ...weitere Sub-Routes - ] - } - ] -}) -``` - -Eine Demo dazu findest du [hier](http://jsfiddle.net/yyx990803/L7hscd8h/) diff --git a/docs-gitbook/de/essentials/redirect-and-alias.md b/docs-gitbook/de/essentials/redirect-and-alias.md deleted file mode 100644 index 02e210b96..000000000 --- a/docs-gitbook/de/essentials/redirect-and-alias.md +++ /dev/null @@ -1,59 +0,0 @@ -# Redirect und Alias - -### Redirect (Umleitung) - -Ein Redirect bedeutet, dass, wenn der Nutzer `/a` besucht, die URL mit `/b` ersetzt wird und auch die Komponente der Route zu `/b` rendert. Das kann in der `routes`-Konfiguration folgendermaßen eingestellt werden: - - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -Der Redirect kann auch auf eine benannten Route angewandt werden: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -Oder auch mit einer Funktion für dynamische Redirects: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // Die Funktion erhält die Ziel-Route als Argument - // und gibt den Umleitungsort/-pfad hier aus. - }} - ] -}) -``` - -Für erweiterte Anwendungsmöglichkeiten siehe auch dieses [Beispiel](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js). - -### Alias - -Ein Redirect bedeutet: Wenn wir die URL `/a` besuchen, wird die URL mit `/b` ersetzt und dann mit der Route für `/b` gematched. Aber was ist dann ein *Alias*? - -Ein Alias von `/a` als `/b` bedeutet, dass die URL `/b` bleibt, wenn diese besucht wird, jedoch die Komponente von `/a` gerendert wird. - -Dieses kann man in der Router-Konfiguration folgendermaßen definieren: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -Ein Alias biete die Möglichkeit, eine bestimmte UI-Struktur einer beliebigen URL zuzuordnen, anstatt von der verschachtelten Struktur der Konfiguration eingeschränkt zu werden. - -Für die erweiterte Anwendung siehe folgendes [Beispiel](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js). diff --git a/docs-gitbook/de/installation.md b/docs-gitbook/de/installation.md deleted file mode 100644 index dec299411..000000000 --- a/docs-gitbook/de/installation.md +++ /dev/null @@ -1,45 +0,0 @@ -# Installation - -### Direkter Download / CDN - -[https://unpkg.com/vue-router](https://unpkg.com/vue-router) - -<!--email_off--> -[Unpkg.com](https://unpkg.com) bietet NPM-basierte CDN-Links an. Der obige Link führt immer zur aktuellsten Version auf NPM. Eine genaue Version kann via URL genutzt werden: `https://unpkg.com/vue-router@2.0.0`. -<!--/email_off--> - -Füge `vue-router` nach Vue ein und es installiert sich automatisch selbst: - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -### NPM - -``` bash -npm install vue-router -``` - -Wenn ein Module-System genutzt wird (z.B. Webpack, Browserify), muss der Router explizit via `Vue.use()` installiert werden: - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -Wenn globale Skript-Tags genutzt werden ist das nicht notwendig. - -### Dev Build (Entwicklungs-Version) - -Wenn die aktuelle Dev-Version genutzt werden soll, muss das Repository direkt von GitHub geklont und die aktuelle `vue-router`-Build selbst erstellt werden, . - - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs-gitbook/es/README.md b/docs-gitbook/es/README.md deleted file mode 100644 index f8a898044..000000000 --- a/docs-gitbook/es/README.md +++ /dev/null @@ -1 +0,0 @@ -{% include "./SUMMARY.md" %} diff --git a/docs-gitbook/es/SUMMARY.md b/docs-gitbook/es/SUMMARY.md deleted file mode 100644 index 0974c1796..000000000 --- a/docs-gitbook/es/SUMMARY.md +++ /dev/null @@ -1,41 +0,0 @@ -# vue-router -<!--email_off--> -> Notas: vue-router@2.x funciona solamente con Vue 2.x. La documentación para la versión 0.7.x está [aquí (en inglés)](https://github.com/vuejs/vue-router/tree/1.0/docs/en). -<!--/email_off--> -**[Notas de lanzamiento](https://github.com/vuejs/vue-router/releases)** - -- [Instalación](installation.md) -- Esenciales - - [Primeros pasos](essentials/getting-started.md) - - [Matching dinámico de rutas](essentials/dynamic-matching.md) - - [Sub-rutas](essentials/nested-routes.md) - - [Navegación mediante código](essentials/navigation.md) - - [Rutas con nombre](essentials/named-routes.md) - - [Vistas con nombre](essentials/named-views.md) - - [Redireccionamiento y alias](essentials/redirect-and-alias.md) - - [Pasando propiedades a componentes de ruteo](essentials/passing-props.md) - - [Modo historial HTML5](essentials/history-mode.md) -- Avanzado - - [Guardias de navegación](advanced/navigation-guards.md) - - [Campos Meta en las rutas](advanced/meta.md) - - [Transiciones](advanced/transitions.md) - - [Obtención de datos](advanced/data-fetching.md) - - [Comportamiento del scroll](advanced/scroll-behavior.md) - - [Lazy loading](advanced/lazy-loading.md) -- API - - [Opciones del constructor de Router](api/options.md) - - [rutas](api/options.md#routes) - - [modo](api/options.md#mode) - - [base](api/options.md#base) - - [linkActiveClass](api/options.md#linkactiveclass) - - [linkExactActiveClass](api/options.md#linkexactactiveclass) - - [scrollBehavior](api/options.md#scrollbehavior) - - [parseQuery / stringifyQuery](api/options.md#parsequery--stringifyquery) - - [fallback](api/options.md#fallback) - - [La instancia de Router](api/router-instance.md) - - [Propiedades](api/router-instance.md#properties) - - [Métodos](api/router-instance.md#methods) - - [El objeto Route](api/route-object.md) - - [Inyección en componentes](api/component-injections.md) - - [router-link](api/router-link.md) - - [router-view](api/router-view.md) diff --git a/docs-gitbook/es/advanced/data-fetching.md b/docs-gitbook/es/advanced/data-fetching.md deleted file mode 100644 index 7d34b0d7f..000000000 --- a/docs-gitbook/es/advanced/data-fetching.md +++ /dev/null @@ -1,110 +0,0 @@ -# Obtención de datos - -A veces es necesario obtener datos del servidor cuando una ruta es activada. Por ejemplo, antes de renderizar un perfil de usuario, puedes obtener la información de ese usuario desde el servidor. Podemos lograr esto de dos maneras diferentes: - -- **Obtener la información después de la navegación**: realiza la navegación primero y luego obtén los datos en un _hook_ del ciclo de vida del componente entrante. Puedes mostrar un indicador de carga mientras se obtienen los datos. - -- **Obtener la información antes de la navegación**: Obtén los datos antes de la navegación en la guardia de entrada de la ruta, y realiza la navegación una vez estos obtenidos. - -Técnicamente, ambas opciones son válidas - todo depende de la experiencia de usuario a la que apuntes. - -## Obtener la información después de la navegación - -Cuando utilizamos este enfoque, navegamos y renderizamos el componente entrante inmediatamente, y obtenemos los datos en el _hook_ `created` del componente. Esto nos permite mostrar un indicador de estado de carga mientras se obtiene la información desde un servidor remoto, y también manejar la carga de datos según la ruta. - -Asumamos que tenemos un componente `Post` que necesita obtener datos de un _post_ basándose en `$route.params.id`: - -``` html -<template> - <div class="post"> - <div class="loading" v-if="loading"> - Loading... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // obtén los datos cuando la vista es creada y _data_ ya - // está siendo observada - this.fetchData() - }, - watch: { - // ejecuta nuevamente el método si la ruta cambia - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // reemplaza getPost con lo que corresponda - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## Obtener la información antes de la navegación - -Con este enfoque, obtenemos la información antes de navegar a la nueva ruta. Podemos obtener los datos en el guardia `beforeRouteEnter` del componente entrante, y solo ejecutar `next` cuando se haya completado: - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // cuando la ruta cambie y este componente ya haya sido renderizado, - // la lógica será ligeramente diferente - beforeRouteUpdate (to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData (err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -El usuario permanecerá en la vista anterior mientras se esté obteniendo el recurso para la vista entrante. Por lo tanto, es recomendable mostrar algún tipo de indicador o barra de progreso. Si la obtención de datos falla, es necesario mostrar algún tipo de advertencia global. diff --git a/docs-gitbook/es/advanced/lazy-loading.md b/docs-gitbook/es/advanced/lazy-loading.md deleted file mode 100644 index 69c0b4a1b..000000000 --- a/docs-gitbook/es/advanced/lazy-loading.md +++ /dev/null @@ -1,44 +0,0 @@ -# Lazy loading - -Cuando se construyen aplicaciones con un sistema de empaquetamiento de módulos, el archivo JavaScript resultante puede terminar siendo muy grande, afectando los tiempos de carga de la página. Sería más eficiente si pudiesemos dividir los componentes de cada ruta en porciones separadas y cargarlas solo cuando esa ruta es visitada. - -Combinando [las características asíncronas de componentes de Vue](http://vuejs.org/guide/components.html#Async-Components) y las características de división de código de [Webpack](https://webpack.js.org/guides/code-splitting-require/), es trivial el _lazy loading_ de componentes de ruta. - -Todo lo que necesitamos es definir nuestros componentes de rutas como asíncronos: - -``` js -const Foo = resolve => { - // require.ensure es la sintaxis especial de Webpack para indicar un punto de división de código. - require.ensure(['./Foo.vue'], () => { - resolve(require('./Foo.vue')) - }) -} -``` - -Hay una alternativa a la sintaxis de división de código utilizando _require_ como lo hace AMD, por lo que puede simplificarse como: - -``` js -const Foo = resolve => require(['./Foo.vue'], resolve) -``` - -Nada debe cambiarse en la configuración del _router_, solo utiliza `Foo` como lo harías normalmente: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/foo', component: Foo } - ] -}) -``` - -### Agrupando componentes en la misma porción - -A veces deseamos agrupar todos los componentes bajo la misma ruta en la misma porción asíncrona. Para lograr esto, necesitamos usar [porciones con nombre](https://webpack.js.org/guides/code-splitting-require/#chunkname) proveyendo un nombre de porción a `require.ensure` como el tercer argumento: - -``` js -const Foo = r => require.ensure([], () => r(require('./Foo.vue')), 'group-foo') -const Bar = r => require.ensure([], () => r(require('./Bar.vue')), 'group-foo') -const Baz = r => require.ensure([], () => r(require('./Baz.vue')), 'group-foo') -``` - -Webpack agrupará los módulos asíncronos con el mismo nombre dentro de la misma porción asíncrona - esto también significa que no necesitamos más listar explícitamente las dependencias de `require.ensure` (por lo tanto pasamos un array vacío). diff --git a/docs-gitbook/es/advanced/meta.md b/docs-gitbook/es/advanced/meta.md deleted file mode 100644 index feed2f7d1..000000000 --- a/docs-gitbook/es/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# Campos Meta en las rutas - -Puedes incluir un campo `meta` cuando definas una ruta: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // campo meta - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -Entonces, ¿como accedemos al campo `meta`? - -Primero, cada objeto route en la configuración de `routes` se llama **registro de ruta**. Los registros de ruta pueden estar anidados. Por lo tanto, cuando una ruta coincida, existe la posibilidad que lo haga con más de un registro de ruta. - -Por ejemplo, con la configuración anterior, la URL `/foo/bar` coincidirá tanto con el registro de ruta padre como con el hijo. - -Todos los registros de rutas que hayan coincidido son expuestos en el objeto `$route` (y también a los objetos route en las guardias de navegación) como el array `$route.matched`. Por ende, necesitaremos iterar sobre `$route.matched` para verificar campos meta en los registros de rutas. - -Un caso de uso de ejemplo es verificar la existencia de campos metas en los guardias de navegación global: - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // esta ruta requiere autenticación, verificamos que haya iniciado sesión - // sino, redirigimos a la página de inicio de sesión. - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // ¡Asegúrate de ejecutar next siempre! - } -}) -``` diff --git a/docs-gitbook/es/advanced/navigation-guards.md b/docs-gitbook/es/advanced/navigation-guards.md deleted file mode 100644 index 4f6dbf416..000000000 --- a/docs-gitbook/es/advanced/navigation-guards.md +++ /dev/null @@ -1,134 +0,0 @@ -# Guardias de navegación - -Como el nombre sugiere, las guardias de navegación provistas por `vue-router` son básicamente utilizadas para proteger rutas de navegación ya sea redireccionando o cancelándolas. Hay varias maneras de engancharse en el proceso de navegación de rutas: globalmente, por ruta o dentro de los componentes. - -Recuerda: **Los cambios en los parámetros o las _queries_ no harán que se ejecuten los guardias de navegación**. Simplemente [observa el objeto `$route`](../essentials/dynamic-matching.md#reacting-to-params-changes) para poder reaccionar frente a esos cambios o utiliza el guardia `beforeRouteUpdate` en el componente. - -### Guardias globales - -Puedes registrar guardias _before_ globales utilizando `router.beforeEach`: - -``` js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -Las guardias _before_ globales son llamadas por orden de creación, cuando una navegación comienza. Las guardias pueden ejecutarse asincrónicamente, y la navegación se considera **pendiente** hasta que todos los _hooks_ sean resueltos. - -Cada función guardia recibe tres argumentos: - -- **`to: Route`**: el [Objeto Route](../api/route-object.md) hacia donde se navega. - -- **`from: Route`**: la ruta actual desde la cual se navega. - -- **`next: Function`**: esta función debe ser ejecutada para **resolver** el _hook_. La acción a realizar depende de los argumentos provistos a `next`: - - - **`next()`**: moverse al siguiente _hook_ en la cadena. Si no queda ninguno, la navegación se **confirma**. - - - **`next(false)`**: cancelar la navegación actual. Si la URL en el navegador cambió (ya sea manualmente o a través del botón _atrás_), será reseteada al valor de la ruta `from`. - - - **`next('/')` o `next({ path: '/' })`**: redirecciona a una ruta diferente. La navegación actual será abortada y una nueva será iniciada. - - - **`next(error)`**: (2.4.0+) si el argumento pasado a `next` es una instancia de `Error`, la navegación se abortará y el error será pasado a las _funciones callback_ registradas a través de `router.onError()`. - -**Asegúrese de llamar siempre a la función `next`, sino el _hook_ nunca será resuelto.** - -### Guardias de resolución globales - -> Nuevo en 2.5.0 - -A partir de la versión 2.5.0 puedes registrar un guardia global con `router.beforeResolve`. Esto es similar a `router.beforeEach`, con la diferencia que los guardias de resolución serán llamados justo antes de que la navegación sea confirmada, **después que todos los guardias en el componente y los componentes de rutas asíncronos sean resueltos**. - -### Post _hooks_ globales - -También puedes registrar _hooks_ globales que se ejecutarán después de que la navegación sea confirmada. Sin embargo, a diferencia de los guardias, estos _hooks_ no reciben una función `next` y no pueden afectar la navegación: - -``` js -router.afterEach((to, from) => { - // ... -}) -``` - -### Guardias por ruta - -Puedes definir guardias `beforeEnter` directamente en el objeto de configuración de una ruta: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -Estos guardias tienen exactamente la misma firma que los guardias _before_ globales. - -### Guardias en componentes - -Por último, puedes directamente definir guardias de navegación dentro de los componentes de ruta (los que son pasados a la configuración del `router`) con las siguientes opciones: - -- `beforeRouteEnter` -- `beforeRouteUpdate` (agregado en la versión 2.2) -- `beforeRouteLeave` - -``` js -const Foo = { - template: `...`, - beforeRouteEnter (to, from, next) { - // se llama antes que la ruta que renderiza este componente sea confirmada. - // NO tiene acceso a la instancia del componente `this`, - // ¡porque no ha sido creada todavía cuando este guardia es ejecutado! - }, - beforeRouteUpdate (to, from, next) { - // se llama cuando la ruta que renderiza este componente ha cambiado, - // pero este componente es reusado en la nueva ruta. - // Por ejemplo, para una ruta con parámetros dinámicos /foo/:id, cuando - // navegamos desde /foo/1 havia /foo/2, la misma instancia del componente Foo - // será reusada, y este _hook_ será llamado cuando eso suceda. - // Tiene acceso a la instancia del componente `this` - }, - beforeRouteLeave (to, from, next) { - // se llama cuando la ruta que renderiza el componente está por ser - // abandonada. - // Tiene acceso a la instancia del componente `this` - } -} -``` - -La guardia `beforeRouteEnter` **NO** tiene acceso a `this`, porque es ejecutada antes que la navegación sea confirmada, por lo tanto el componente destino todavía no ha sido creado. - -Sin embargo, puedes acceder a la instancia pasando una _función callback_ a `next`. La _función callback_ se ejecutará cuando la navegación sea confirmada, y la instancia del componente será pasada como argumento: - -``` js -beforeRouteEnter (to, from, next) { - next(vm => { - // accede a la instancia del componente a través de `vm` - }) -} -``` - -Puedes acceder directamente a `this` dentro de `beforeRouteLeave`. La guardia _leave_ se utiliza normalmente para prevenir al usuario cuando intenta abandonar la ruta accidentalmente sin guardar cambios. La navegación puede ser cancelada ejecutando `next(false)`. - -### El flujo de resolución de navegación completo - -1. Se dispara la navegación. -2. Se llaman a los guardias _leave_ en los componentes desactivados. -3. Se llaman a los guardias `beforeEach` globales. -4. Se llaman a los guardias `beforeRouteUpdate` en los componentes reutilizados (2.2+). -5. Se llama a `beforeEnter` en las configuraciones de rutas. -6. Se resuelven componentes de rutas asíncronos. -7. Se llama a `beforeRouteEnter` en los componentes activados. -8. Se llama a los guardias globales `beforeResolve` (2.5+). -9. Se confirma la navegación. -10. Se llaman a los _hook_ globales`afterEach`. -11. Se disparan las actualizaciones del DOM. -12. Se llaman a las _funciones callback_ pasadas a `next` en los guardias `beforeRouteEnter` con las instancias creadas. diff --git a/docs-gitbook/es/advanced/scroll-behavior.md b/docs-gitbook/es/advanced/scroll-behavior.md deleted file mode 100644 index a5c2c3668..000000000 --- a/docs-gitbook/es/advanced/scroll-behavior.md +++ /dev/null @@ -1,62 +0,0 @@ -# Comportamiento del scroll - -Cuando se utiliza enrutamiento del lado cliente, podemos querer hacer `scroll` hacia el inicio de la página cuando naveguemos a una nueva ruta, o preservar la posición actual, tal cual lo hace una recarga de la página. `vue-router` te permite lograr esto e incluso más: permite personalizar completamente el comportamiento del `scroll` durante la navegación. - -**Nota: esta característica solo funciona en el modo historial de HTML5.** - -Cuando crees una instancia del `router`, puedes incluir la función `scrollBehavior`: - -``` js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // devolver la posición deseada - } -}) -``` - -La función `scrollBehavior` recibe los objetos de ruta `to` y `from`. El tercer parámetro, `savedPosition`, solo está disponible si estamos en una navegación `popstate` (cuando se utilizan los botones _atrás_ o _adelante_ en el navegador). - -La función puede devolver un objeto de posición de `scroll`. El objeto puede ser de la forma: - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset solo soportado a partir de la versión 2.6.0+) - -Si se devuelve un valor *falso* o un objeto vacio, no ocurrirá ningún desplazamiento. - -Por ejemplo: - -``` js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -Esto hará que la página se desplace hacia el inicio para todas las navegaciones a la ruta. - -Devolver `savedPosition` hará que el comportamiento cuando se utilicen los botones _atrás_ o _adelante_ sea el nativo: - -``` js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -Si deseas simular el `scroll` hacia anclas: - -``` js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -También podemos utilizar [campos meta](meta.md) para implementar un control de `scroll` fino. Un ejemplo completo [aquí](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js). diff --git a/docs-gitbook/es/advanced/transitions.md b/docs-gitbook/es/advanced/transitions.md deleted file mode 100644 index 17af3ff45..000000000 --- a/docs-gitbook/es/advanced/transitions.md +++ /dev/null @@ -1,58 +0,0 @@ -# Transiciones - -Dado que `<router-view>` es esencialmente un componente dinámico, podemos aplicarle efectos de transición utilizando el componente `<transition>`: - -``` html -<transition> - <router-view></router-view> -</transition> -``` - -[Todo acerca de `<transition>`](http://vuejs.org/guide/transitions.html) también funciona aquí. - -### Transiciones por ruta - -El ejemplo anterior aplicará la misma transición a todas las rutas. Si deseas que cada componente de ruta tenga diferentes transiciones, puedes utilizar `<transition>` con diferentes nombres dentro de cada componente de ruta: - -``` js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -### Transiciones dinámicas basadas en componentes - -También es posible determinar dinámicamente la transición a utilizar basado en las relaciones entre la ruta destino y la ruta actual: - -``` html -<!-- utiliza un nombre de transición dinámico --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -``` js -// luego, en el componente padre, -// observa $route para determinar que transición utilizar -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -Tienes un ejemplo completo [aquí](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js). diff --git a/docs-gitbook/es/api/component-injections.md b/docs-gitbook/es/api/component-injections.md deleted file mode 100644 index 686ddf716..000000000 --- a/docs-gitbook/es/api/component-injections.md +++ /dev/null @@ -1,21 +0,0 @@ -# Inyección en componentes - -### Propiedades inyectadas - -Estas propiedades son inyectadas dentro de cada componente hijo pasando la instancia del `router` a la instancia principal como la opción `router`. - -- #### $router - - La instancia del `router`. - -- #### $route - - El objeto [Route activo](route-object.md). Esta propiedad es de solo lectura y sus propiedades son inmutables, pero puede ser observada. - -### Opciones habilitadas - -- **beforeRouteEnter** -- **beforeRouteUpdate** (agregado en 2.2) -- **beforeRouteLeave** - - Más información en [guardias en componentes](../advanced/navigation-guards.md#incomponent-guards). diff --git a/docs-gitbook/es/api/options.md b/docs-gitbook/es/api/options.md deleted file mode 100644 index 36cfa4f71..000000000 --- a/docs-gitbook/es/api/options.md +++ /dev/null @@ -1,102 +0,0 @@ -# Opciones del constructor de Router - -### routes - -- tipo: `Array<RouteConfig>` - - Declaración de tipos para `RouteConfig`: - - ``` js - declare type RouteConfig = { - path: string; - component?: Component; - name?: string; // para rutas con nombre - components?: { [name: string]: Component }; // para vistas con nombre - redirect?: string | Location | Function; - props?: boolean | string | Function; - alias?: string | Array<string>; - children?: Array<RouteConfig>; // para sub-rutas - beforeEnter?: (to: Route, from: Route, next: Function) => void; - meta?: any; - - // 2.6.0+ - caseSensitive?: boolean; // utilizar o no matcheo case sensitive (valor por defecto: false) - pathToRegexpOptions?: Object; // Opciones path-to-regexp para compilar expresiones regulares - } - ``` - -### mode - -- tipo: `string` - -- valor por defecto: `"hash" (en navegadores) | "abstract" (en Node.js)` - -- valores disponibles: `"hash" | "history" | "abstract"` - - Configura el modo del `router`. - - - `hash`: utiliza el _hash_ en la URL para el enrutamiento. Funciona en todos los navegadores que soportan Vue, incluidos aquellos que no soportan la API de historial de HTML5 . - - - `history`: requiere la API de historial de HTML y configuración del lado servidor. [Modo historial HTML5](../essentials/history-mode.md). - - - `abstract`: funciona en todos los ambientes de JavaScript, por ejemplo, del lado servidor con Node.js. **Se forzará este modo de trabajo en el router si no se detecta la API de navegador.** - -### base - -- tipo: `string` - -- valor por defecto: `"/"` - - La URL base para la aplicación. Por ejemplo, si toda la aplicación se encuentra dentro de `/app/`, entonces `base` debería llevar ese valor. - -### linkActiveClass - -- tipo: `string` - -- valor por defecto: `"router-link-active"` - - Configura globalmente la clase activa por defecto de `<router-link>`. Más información en [router-link](router-link.md). - -### linkExactActiveClass - -> 2.5.0+ - -- tipo: `string` - -- valor por defecto: `"router-link-exact-active"` - - Configura globalmente la clase activa de `<router-link>` para coincidencias de rutas exactas. Más información en [router-link](router-link.md). - -### scrollBehavior - -- tipo: `Function` - - Firma: - - ``` - ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => { x: number, y: number } | { selector: string } | ?{} - ``` - - Para más detalles, [comportamiento del scroll](../advanced/scroll-behavior.md). - -### parseQuery / stringifyQuery - -> 2.4.0+ - -- tipo: `Function` - - Provee funciones parse / stringify para _query string_ personalizadas. Sobreescribe la función por defecto. - -### fallback - -> 2.6.0+ - -- tipo: `boolean` - - Controla si el router debe o no utilizar el modo `hash` cuando el navegador no soporte `history.pushState`. El valor por defecto es `true`. - - Configurar esto como `false` hace que cada navegación a través de `router-link` sea una recarga completa de la página en IE9. Esto es útil cuando la aplicación es renderizada en el servidor y necesita funcionar en IE9, porque las URL en modo hash no funcionan con SSR. diff --git a/docs-gitbook/es/api/route-object.md b/docs-gitbook/es/api/route-object.md deleted file mode 100644 index 4aaae4fc0..000000000 --- a/docs-gitbook/es/api/route-object.md +++ /dev/null @@ -1,89 +0,0 @@ -# El objeto Route - -Un **objeto Route** representa el estado de la ruta activa actualmente. Contiene información analizada de la URL actual y los **registros de rutas** que coinciden con ella. - -El objeto `Route` es inmutable. Cada navegación exitosa resultará en un nuevo objeto `Route`. - -El objeto `Route` puede encontrarse en diferentes lugares. - -- Dentro de los componentes, como `this.$route` - -- Dentro de las _funciones callbacks_ de observación de `$route` - -- Como valor de retorno de la función `router.match(location)` - -- Dentro de las guardias de navegación como los primeros dos argumentos: - - ``` js - router.beforeEach((to, from, next) => { - // to y from son objetos de ruta - }) - ``` - -- Dentro de la función `scrollBehavior`como los primeros dos argumentos: - - ``` js - const router = new VueRouter({ - scrollBehavior (to, from, savedPosition) { - // to y from son objetos de ruta - } - }) - ``` - -### Propiedades del objeto Route - -- **$route.path** - - - tipo: `string` - - Una cadena de texto equivalente a la ruta actual, siempre resuelta como una ruta absoluta. Por ejemplo`"/foo/bar"`. - -- **$route.params** - - - tipo: `Object` - - Un objeto que contiene pares llave/valor de segmentos dinámicos y segmentos estrella. Si no hay parametros, el valor será un objeto vacio. - -- **$route.query** - - - tipo: `Object` - - Un objeto que contiene pares llave/valor del _query string_. Por ejemplo, para la ruta `/foo?user=1`, obtendremos `$route.query.user == 1`. Si no hay _query string_ el valor será un objeto vacio. - -- **$route.hash** - - - tipo: `string` - - El _hash_ de la ruta actual (con la `#`), si posee. Si no hay un _hash_ el valor será una cadena de texto vacia. - -- **$route.fullPath** - - - tipo: `string` - - La URL completa incluyendo _query_ y _hash_. - -- **$route.matched** - - - tipo: `Array<RouteRecord>` - - Un array que contiene **registros de ruta** para todos los segmentos anidados de la ruta actual. Los registros de ruta son copias de los objetos en el array de configuración `routes` (y en los arrays `children`): - - ``` js - const router = new VueRouter({ - routes: [ - // el siguiente objeto es un registro de ruta - { path: '/foo', component: Foo, - children: [ - // este también es un registro de ruta - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - Cuando la URL es `/foo/bar`, `$route.matched` será un array que contendrá ambos objetos (clonados), en orden descendente de padre a hijo. - -- **$route.name** - - El nombre de la ruta acutal, si tiene. (Más información en [rutas con nombre](../essentials/named-routes.md)) diff --git a/docs-gitbook/es/api/router-instance.md b/docs-gitbook/es/api/router-instance.md deleted file mode 100644 index 9f9675cbf..000000000 --- a/docs-gitbook/es/api/router-instance.md +++ /dev/null @@ -1,85 +0,0 @@ -# La instancia de Router - -### Propiedades - -#### router.app - -- tipo: `Vue instance` - - La instancia principal de Vue donde `router` fue inyectado. - -#### router.mode - -- tipo: `string` - - El [modo](options.md#mode) que `router` está utilizando. - -#### router.currentRoute - -- tipo: `Route` - - La ruta actual representada como un [objeto Route](route-object.md). - -### Métodos - -- **router.beforeEach(guard)** -- **router.beforeResolve(guard)** (2.5.0+) -- **router.afterEach(hook)** - - Agrega guardias de navegación globales. Info: [guardias de navegación](../advanced/navigation-guards.md). - - A partir de la versión 2.5.0 los tres métodos devuelven una función que elimina el guardia/hook registrado. - -- **router.push(location, onComplete?, onAbort?)** -- **router.replace(location, onComplete?, onAbort?)** -- **router.go(n)** -- **router.back()** -- **router.forward()** - - Navega mediante código a una nueva URL. Info: [navegación mediante código](../essentials/navigation.md). - -- **router.getMatchedComponents(location?)** - - Devuelve un array de componentes (definiciones/constructores, no instancias) que coincidan con la ubicación provista o la ruta actual. Se utiliza principalmente durante el renderizado del lado servidor para realizar precarga de datos. - -- **router.resolve(location, current?, append?)** - - > 2.1.0+ - - Resolución inversa de URL. Dada una ubicación de la misma forma que las usadas en `<router-link/>`, devuelve un objeto con las siguiente propiedades: - - ``` js - { - location: Location; - route: Route; - href: string; - } - ``` - -- **router.addRoutes(routes)** - - > 2.2.0+ - - Agrega dinámicamente más rutas al `router`. El argumento debe ser un array utilizando el mismo formato de configuración que las opciones del constructor de `routes`. - -- **router.onReady(callback, [errorCallback])** - - > 2.2.0+ - - Este método pone una _función callback_ en espera a ser llamada cuando el `router` haya completado la navegación inicial, lo cual significa que ya ha resuelto todos los _hooks_ de entrada asíncronos y los componentes asíncronos asociados con la ruta inicial. - - Esto es útil en el renderizado del lado servidor para asegurar un resultado consistente tanto en el servidor como en el cliente. - - El segundo argumento, `errorCallback`, solo es soportado a partir de la versión 2.4. Será llamado cuando la resolución de ruta inicial devuelva un error (por ejemplo, cuando falla la resolución de un componente asíncrono). - -- **router.onError(callback)** - - > 2.4.0+ - - Registra una _función callback_ la cual será llamada cuando un error es capturado durante la navegación. Ten en cuenta que sucederá solo en las siguientes situaciones: - - - El error es lanzado sincrónicamente dentro de una función de guardia de ruta; - - - El error es capturado y manejado asíncronamente llamando a `next(err)` dentro de una función de guardia de ruta; - - - El error ocurre cuando se intenta resolver un componente asíncrono que es necesario para renderizar una ruta. diff --git a/docs-gitbook/es/api/router-link.md b/docs-gitbook/es/api/router-link.md deleted file mode 100644 index 009fe01e3..000000000 --- a/docs-gitbook/es/api/router-link.md +++ /dev/null @@ -1,138 +0,0 @@ -# `<router-link>` - -`<router-link>` es el componente para posibilitar la navegación de los usuarios en una aplicación con el `router` habilitado. La ubicación destino se especifica con la propiedad `to`. Por defecto, renderiza una etiqueta `<a>` con el atributo `href` correspondiente, pero puede configurarse mediante la propiedad `tag`. Además, el enlace obtiene una clase CSS cuando la ruta a la que apunta es activada. - -Es preferible utilizar `<router-link>` en lugar de escribir directamente `<a href="...">` por las siguientes razones: - -- Funciona de la misma manera tanto en el modo _hash_ como en el modo historial de HTML5, por lo que si decides intercambiar modos, o cuando el `router` utiliza el modo _hash_ en IE9, no deberás modificar nada. - -- En el modo historial de HTML5, `router-link` interceptará el evento _click_ para que el navegador no intente recargar la página. - -- Cuando estés utilizando la opción `base` en el modo historial de HTML5, no necesitas incluirla en la URL de la propiedad `to`. - -### Propiedades - -- **to** - - - tipo: `string | Location` - - - requerida - - Identifica la ruta destino del enlace. Cuando es accedida, el valor de la propiedad `to` será pasado a `router.push()` internamente, por lo que el valor puede ser tanto una cadena de texto como un objeto descriptor de ubicación. - - ``` html - <!-- cadena de texto --> - <router-link to="home">Home</router-link> - <!-- renders to --> - <a href="home">Home</a> - - <!-- expresión javascript utilizando v-bind --> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- omitir v-bind es correcto, tal cual se hace con cualquier otra propiedad --> - <router-link :to="'home'">Home</router-link> - - <!-- lo mismo que el ejemplo anterior --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- rutas con nombre --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- con query, resultando en /register?plan=private --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link> - ``` - -- **replace** - - - tipo: `boolean` - - - valor por defecto: `false` - - Establecer la propiedad `replace` ejecutará `router.replace()` en lugar de `router.push()` cuando se acceda, por lo que la navegación no dejará un registro en el historial. - - ``` html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -- **append** - - - tipo: `boolean` - - - valor por defecto: `false` - - Establecer la propiedad `append` hará que se agregue la ruta relativa a la ruta actual. Por ejemplo, asumiendo que estamos navegando desde `/a` a un enlace relativo `b`, sin `append` accederemos a `/b`, pero con `append` accederemos a `/a/b`. - - ``` html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -- **tag** - - - tipo: `string` - - - valor por defecto: `"a"` - - A veces puede que quieras que `<router-link>` se renderice como otra etiqueta, por ejemplo `<li>`. Puedes utilizar la propiedad `tag` para especificar que etiqueta renderizar, y seguirá escuchando eventos _click_ para la navegación. - - ``` html - <router-link to="/foo" tag="li">foo</router-link> - <!-- se renderiza como --> - <li>foo</li> - ``` - -- **active-class** - - - tipo: `string` - - - valor por defecto: `"router-link-active"` - - Configura la clase CSS que se aplicará al enlace cuando este activo. Nota que el valor por defecto puede ser configurado de manera global a través de la opción `linkActiveClass` del constructor del `router`. - -- **exact** - - - tipo: `boolean` - - - valor por defecto: `false` - - El comportamiento por defecto para la aplicación de la clase CSS activa en matching dinámico de rutas es **inclusivo**. Por ejemplo, `<router-link to="/a">` obtendrá la clase CSS mientras la ruta actual comience con `/a/` o sea `/a`. - - Una consecuencia de esto es que `<router-link to="/">` ¡permanecerá activa para todas las rutas! Para forzar un matching exacto, utiliza la propiedad `exact`: - - ``` html - <!-- este enlace estará activo solamente para la ruta / --> - <router-link to="/" exact> - ``` - - Más ejemplos explicando la clase activa [aquí](https://jsfiddle.net/8xrk1n9f/). - -- **event** - - > 2.1.0+ - - - tipo: `string | Array<string>` - - - valor por defecto: `'click'` - - Son los eventos que permiten lanzar la navegacion. - -- **exact-active-class** - - > 2.5.0+ - - - tipo: `string` - - - valor por defecto: `"router-link-exact-active"` - - Configura la clase CSS activa que será aplicada cuando el enlace esté activo con una coincidencia de ruta exacta. Ten en cuenta que el valor por defecto también puede configurarse globalmente a través de la opción `linkExactActiveClass` del constructor del router. - -### Aplicar la clase activa al elemento envolvente. - -A veces puede que queramos que la clase activa se aplique al elemento envolvente en lugar de aplicarla directamente a la etiqueta `<a>`. En ese caso, puedes renderizar el elemento envolvente utilizando `<router-link>` y luego una etiqueta `<a>` dentro: - -``` html -<router-link tag="li" to="/foo"> - <a>/foo</a> -</router-link> -``` - -En este caso, la etiqueta `<a>` será el enlace (y obtendrá el atributo `href` correcto), pero la clase activa será aplicada al elemento envolvente `<li>`. diff --git a/docs-gitbook/es/api/router-view.md b/docs-gitbook/es/api/router-view.md deleted file mode 100644 index fb5b63ecd..000000000 --- a/docs-gitbook/es/api/router-view.md +++ /dev/null @@ -1,27 +0,0 @@ -# `<router-view>` - -El componente `<router-view>` es un componente funcional que renderiza a otro en base a la ruta seleccionada. Los componentes renderizados en `<router-view>` pueden contener su propio `<router-view>`, el cual renderizará componentes para sub-rutas. - -### Propiedades - -- **name** - - - tipo: `string` - - - valor por defecto: `"default"` - - Cuando un componente `<router-view>` tiene un nombre, renderizará el componente con el nombre correspondiente en la opción `components` del registro de ruta que coincida. Accede a [vistas con nombre](../essentials/named-views.md) para más información. - -### Comportamiento - -Cualquier propiedad diferente a `name` será pasada al componente renderizado. De cualquier manera, la mayor parte del tiempo los datos de la ruta están contenidos dentro de los parámetros de la ruta. - -Dado que es simplemente un componente, funciona con `<transition>` y `<keep-alive>`. Cuando utilices ambos en conjunto, asegúrate de usar `<keep-alive>` dentro de `<transition>`: - -``` html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` diff --git a/docs-gitbook/es/essentials/dynamic-matching.md b/docs-gitbook/es/essentials/dynamic-matching.md deleted file mode 100644 index a7593d314..000000000 --- a/docs-gitbook/es/essentials/dynamic-matching.md +++ /dev/null @@ -1,74 +0,0 @@ -# Matching dinámico de rutas - -Es bastante común tener que mapear rutas con un patrón determinado al mismo componente. Por ejemplo, puede que tengamos un componente `User` el cual debería ser renderizado para todos los usuarios, pero con diferente ID. En `vue-router` podemos usar un segmento dinámico en el _path_ para lograrlo: - -``` js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // los segmentos dinámicos comienzan con dos puntos - { path: '/user/:id', component: User } - ] -}) -``` - -Ahora, las URL como `/user/foo` y `/user/bar` mapearán a la misma ruta. - -Un segmento dinámico se representa mediante dos puntos `:`. Cuando se encuentra una coincidencia en la ruta, el valor del segmento dinámico se expondrá como `this.$route.params` en cada componente. Por lo tanto, podremos renderizar el ID del usuario actual modificando el template de `User`de la siguiente manera: - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -``` - -Puedes consultar el siguiente [ejemplo](http://jsfiddle.net/yyx990803/4xfa2f19/). - -Se pueden tener múltiples segmentos dinámicos en la misma ruta, y todos serán mapeados a los correspondientes campos en `$route.params`. Por ejemplo: - -| patrón | matching de ruta | $route.params | -|---------|------|--------| -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -Además de `$route.params`, el objeto `$route` expone más información útil, como `$route.query` (si hay alguna _query_ en la URL), `$route.hash`, etc. Puedes verificar todos los detalles en la documentación de la [API](../api/route-object.md). - -### Reaccionando ante cambios de los parámetros - -Una cosa a tener en cuenta cuando se usan rutas con parámetros es que cuando el usuario navega de `/user/foo` a `/user/bar`, **la misma instancia del componente será reutilizada**. Dado que ambas rutas renderizan el mismo componente, esto es más eficiente que destruir la instancia anterior y crear una nueva. **Sin embargo, esto significa que los hooks del ciclo de vida del componentes no serán emitidos**. - -Para detectar cambios en los parámetros en el mismo componente, puedes observar el objeto `$route`: - -``` js -const User = { - template: '...', - watch: { - '$route' (to, from) { - // Código que responde al cambio - } - } -} -``` - -O utiliza el guardia de navegación `beforeRouteUpdate` introducido en la versión 2.2: - -``` js -const User = { - template: '...', - beforeRouteUpdate (to, from, next) { - // Código que responde al cambio - // no olvides ejecutar next() - } -} -``` - -### Patrones de matching avanzados - -`vue-router` usa [path-to-regexp](https://github.com/pillarjs/path-to-regexp) como su motor de búsqueda de patrones, por lo que soporta varios patrones de matching avanzados tales como segmentos dinámicos opcionales, requerimientos del tipo cero o más / uno o más, e incluso patrones _regex_ personalizados. Verifica la [documentación](https://github.com/pillarjs/path-to-regexp#parameters) para estos patrones avanzados, y [este ejemplo](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) de como usarlos con `vue-router`. - -### Prioridad en el matching de patrones - -A veces la misma URL puede coincidir con múltiples rutas. En ese caso, la prioridad se determina por el orden de la definición de las rutas: la primera ruta definida será la que tenga mayor prioridad. diff --git a/docs-gitbook/es/essentials/getting-started.md b/docs-gitbook/es/essentials/getting-started.md deleted file mode 100644 index e146d44f4..000000000 --- a/docs-gitbook/es/essentials/getting-started.md +++ /dev/null @@ -1,68 +0,0 @@ -# Primeros pasos - -> Utilizaremos [ES2015](https://github.com/lukehoban/es6features) en el código de los ejemplos en esta guía. - -Crear una aplicación de una sola página (SPA por sus siglas en inglés) con Vue.js + vue-router es muy sencillo. Con Vue.js, ya estamos estructurando nuestra aplicación con componentes. Cuando agregamos vue-router, todo lo que debemos hacer es mapear nuestros componentes a las rutas e informar a vue-router donde renderizarlas. Aquí hay un ejemplo básico: - -> Todos los ejemplos utilizarán la versión independiente de Vue para hacer posible el análisis de plantillas. Más detalles [aquí](https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only). - -### HTML - -``` html -<script src="https://unpkg.com/vue/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- Utiliza el componente router-link para la navegación. --> - <!-- especifica el enlace pasando la propiedad `to`. --> - <!-- <router-link> será renderizado por defecto como una etiqueta `<a>` --> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- El componente que coincida con la ruta será renderizado aquí --> - <router-view></router-view> -</div> -``` - -### JavaScript - -``` js -// 0. Si utilizas un sistema de empaquetamiento de módulos (por ejemplo, a través de vue-cli), importa Vue y VueRouter y luego ejecuta Vue.use(VueRouter). - -// 1. Define componentes de enrutamiento. -// Estos pueden ser importados desde otros archivos -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. Define algunas rutas -// Cada ruta debe mapear a un componente. El "componente" puede -// ser un constructor de componente creado a través de -// Vue.extend(), o simplemente un objeto de opciones de componente. -// Más tarde hablaremos acerca de las sub-rutas. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. Crea una instancia del _router_ y pasa la opción `routes` -// Puedes pasar opciones adicionales aquí, -// pero mantengámoslo simple por el momento. -const router = new VueRouter({ - routes // forma corta para routes: routes -}) - -// 4. Crea y monta la instancia principal. -// Asegúrate de inyectar el _router_ con la opcion router para -// garantizar que toda la aplicación tenga acceso al mismo. -const app = new Vue({ - router -}).$mount('#app') - -// ¡Ahora la aplicación está ejecutándose! -``` - -Puedes consultar este [ejemplo](http://jsfiddle.net/yyx990803/xgrjzsup/). - -Nota que `<router-link>` obtiene automáticamente la clase `.router-link-active` cuando la ruta a la que apunta es accedida. Puedes leer más acerca de eso en la documentación de la [API](../api/router-link.md). diff --git a/docs-gitbook/es/essentials/history-mode.md b/docs-gitbook/es/essentials/history-mode.md deleted file mode 100644 index f89b473ae..000000000 --- a/docs-gitbook/es/essentials/history-mode.md +++ /dev/null @@ -1,60 +0,0 @@ -# Modo historia HTML5 - -El modo por defecto para `vue-router` es _hash mode_ - el cual utiliza una almohadilla para simular la URL completa para que la página no sea recargada cuando la URL cambia. - -Para eliminar la almohadilla, podemos seleccionar el **modo historia** del `router`, el cual utiliza el método `history.pushState` de la API para conseguir una navegación sin recarga de página: - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -Cuando utilices el modo historial, la URL lucirá "normal", por ejemplo: `http://oursite.com/user/id`. ¡Hermoso! - -Sin embargo, hay un problema: dado que nuestra aplicación es de una sola página del lado cliente, sin una configuración apropiada del lado servidor los usuarios van a obtener errores 404 si intentan acceder directamente a `http://oursite.com/user/id` en sus navegadores. Eso es horrible. - -No hay problema: para solucionar el error, todo lo que debes hacer es agregar un redireccionamiento en tu servidor. Si la URL no coincide con ningún recurso estático, debes apuntar a la misma página `index.html` donde se encuentra tu aplicación. De nuevo, ¡Hermoso! - -## Ejemplos de configuraciones de servidores - -#### Apache - -```apache -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Node.js (Express) - -Para Node.js/Express, considera utilizar el middleware [connect-history-api-fallback](https://github.com/bripkens/connect-history-api-fallback). - -## Deventajas - -Hay una deventaja para esto: tu servidor ya no reportará errores 404 dado que todas las rutas no encontradas serán redireccionadas al archivo `index.html`. Para solucionar este problema debes implementar dentro de la aplicación Vue una ruta por defecto para mostrar una página de error 404: - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [ - { path: '*', component: NotFoundComponent } - ] -}) -``` - -Otra solución, si utilizas un servidor Node.js, es utilizar el `router` del lado del servidor para analizar las URL ingresadas y responder con un error 404 si ninguna ruta coincide. diff --git a/docs-gitbook/es/essentials/named-routes.md b/docs-gitbook/es/essentials/named-routes.md deleted file mode 100644 index 222e953eb..000000000 --- a/docs-gitbook/es/essentials/named-routes.md +++ /dev/null @@ -1,31 +0,0 @@ -# Rutas con nombre - - A veces es conveniente identificar una ruta con un nombre, especialmente cuando enlazamos a esa ruta o navegamos mediante código. Puedes darle un nombre a una ruta en las opciones de `routes` cuando se crea la instancia de Router: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -Para enlazar a una ruta con nombre, puedes pasar un objeto a la propiedad `to` del componente `router-link`: - -``` html -<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> -``` - -Este es exactamente el mismo objeto utilizado mediante código con `router.push()`: - -``` js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -En ambos casos, el _router_ navegará a la ruta `/user/123`. - -Revisa un ejemplo completo [aquí](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js). diff --git a/docs-gitbook/es/essentials/named-views.md b/docs-gitbook/es/essentials/named-views.md deleted file mode 100644 index e82a34e1d..000000000 --- a/docs-gitbook/es/essentials/named-views.md +++ /dev/null @@ -1,28 +0,0 @@ -# Vistas con nombre - -A veces es necesario mostrar múltiples vistas al mismo tiempo en lugar de anidarlas. Por ejemplo, cuando se crea una plantilla con una vista `sidebar` y una vista `main`. Aquí es cuando las vistas con nombre se vuelven útiles. En lugar de tener un solo _outlet_ en tu vista, puedes tener varios y darle a cada uno un nombre diferente. Por defecto, un `router-view` sin nombre se llamará `default`. - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -Una vista se renderiza utilizando un componente, por lo tanto, múltiples vistas requerirán múltiples componentes para la misma ruta. Asegúrate de utilizar la opción `components` (con una _s_ al final): - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -Puedes ver una demostración de este ejemplo [aquí](https://jsfiddle.net/posva/6du90epg/). diff --git a/docs-gitbook/es/essentials/navigation.md b/docs-gitbook/es/essentials/navigation.md deleted file mode 100644 index 70f2e4a41..000000000 --- a/docs-gitbook/es/essentials/navigation.md +++ /dev/null @@ -1,71 +0,0 @@ -# Navegación mediante código - -Además de utilizar `<router-link>` para crear etiquetas `a` para una navegación declarativa, podemos hacer lo mismo a través de código usando los métodos de la instancia del enrutador. - -#### `router.push(location, onComplete?, onAbort?)` - -**Nota: Dentro de una instancia de Vue, tienes acceso a la instancia del router a través de `$router`. Por lo tanto puedes llamar a `this.$router.push`.** - -Para navegar a una URL diferente, utiliza `router.push`. Este método agrega una nueva entrada a la pila del historial, por lo que cuando el usuario presione el botón _volver_ del navegador, será llevado a la URL anterior. - -Este método es el que se llama internamente cuando se hace clic en un componente `<router-link>`, por lo que`<router-link :to="...">` es el equivalente a ejecutar `router.push(...)`. - -| Declarativo | Mediante código | -|-------------|--------------| -| `<router-link :to="...">` | `router.push(...)` | - -El argumento puede ser una cadena de texto o un objeto descriptor. Por ejemplo: - -``` js -// cadena de texto literal -router.push('home') - -// Objeto -router.push({ path: 'home' }) - -// Ruta con nombre -router.push({ name: 'user', params: { userId: 123 }}) - -// Con _query_, con lo que se obtiene /register?plan=private -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -A partir de la version 2.2.0+, puedes opcionalmente pasar _funciones callbacks_ `onComplete` y `onAbort` a `router.push` o `router.replace` como segundo y tercer argumento. Estas _funciones callbacks_ serán ejecutadas cuando la navegación sea completada exitosamente (luego que todos los _hooks_ asíncronos sean resueltos), o abortada (navegando a la misma ruta, o a una ruta diferente antes que la navegación actual haya finalizado), respectivamente. - -#### `router.replace(location, onComplete?, onAbort?)` - -Actúa como `router.push`, la única diferencia es que navega sin agregar una nueva entrada al historial, como su nombre sugiere - reemplaza la entrada actual. - -| Declarativo | Mediante código | -|-------------|--------------| -| `<router-link :to="..." replace>` | `router.replace(...)` | - - -#### `router.go(n)` - -Este método toma un entero como parámetro que indica cuantos pasos avanzar o retroceder en el historial, similar a `window.history.go(n)`. - -Ejemplos - -``` js -// Ir hacia adelante un paso, similar a history.forward() -router.go(1) - -// Ir hacia atrás un paso, similar a history.back() -router.go(-1) - -// Ir 3 pasos hacia adelante -router.go(3) - -// Falla silenciosamente si no existe esa cantidad de registros en el historial -router.go(-100) -router.go(100) -``` - -#### Manipulación del historial - -Seguramente notaste que `router.push`, `router.replace` y `router.go` son contra partes de [`window.history.pushState`, `window.history.replaceState` y `window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History), y que imitan a las API de `window.history`. - -Por lo tanto, si estás familiarizado con las [API del historial del navegador](https://developer.mozilla.org/en-US/docs/Web/API/History_API), manipularlo será muy sencillo con vue-router. - -Vale la pena mencionar que los métodos de navegacion de vue-router (`push`, `replace`, `go`) funcionan consistentemente en todos los modos de trabajo del `router` (`history`, `hash` y `abstract`). diff --git a/docs-gitbook/es/essentials/nested-routes.md b/docs-gitbook/es/essentials/nested-routes.md deleted file mode 100644 index 0a57ce116..000000000 --- a/docs-gitbook/es/essentials/nested-routes.md +++ /dev/null @@ -1,99 +0,0 @@ -# Sub-rutas - -Las interfaces de usuario (UI por sus siglas en inglés) de aplicaciones reales normalmente están compuestas por componentes que están anidados varios niveles. Es también muy común que los segmentos de una URL correspondan a cierta estructura de componentes anidados, por ejemplo: - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -Con `vue-router` es muy sencillo expresar esta relación usando configuraciones de sub-rutas. - -Dada la aplicación que creamos en el capítulo anterior: - -``` html -<div id="app"> - <router-view></router-view> -</div> -``` - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -Aquí, `<router-view>` es un contenedor de nivel superior. Renderiza el componente que coincida con una ruta de nivel superior. Así, un componente renderizado puede contener su propio `<router-view>` anidado. Por ejemplo, si agregamos uno dentro de la plantilla del componente `User`: - -``` js -const User = { - template: ` - <div class="user"> - <h2>User {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -Para renderizar componentes dentro de este contenedor anidado, necesitamos usar la opción `children` en la configuración del constructor de `VueRouter`: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, - children: [ - { - // UserProfile será renderizado en el <router-view> dentro de User - // cuando /user/:id/profile coincida - path: 'profile', - component: UserProfile - }, - { - // UserPosts será renderizado en el <router-view> dentro de User - // cuando /user/:id/posts coincida - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**Nota que las sub-rutas que empiecen con `/` serán tratadas como absolutas. Esto permite aprovechar el anidamiento de componentes sin tener que usar URL anidadas.** - -Como puedes ver, la opción `children` es simplemente otro array de objetos de configuración de rutas, como `routes`. Por lo tanto, puedes anidar tantas vistas como necesites. - -En este punto, con la configuración anterior, cuando visites `/user/foo`, nada será renderizado dentro del contenedor de `User` porque ninguna sub ruta coincidió. Tal vez quieras renderizar algo ahí. En ese caso, puedes pasar una sub ruta vacía: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', component: User, - children: [ - // UserHome será renderizado en el <router-view> dentro de User - // cuando /user/:id coincida - { path: '', component: UserHome }, - - // ...otras sub rutas - ] - } - ] -}) -``` - -Puedes encontrar una demostración de este ejemplo [aquí](http://jsfiddle.net/yyx990803/L7hscd8h/). diff --git a/docs-gitbook/es/essentials/passing-props.md b/docs-gitbook/es/essentials/passing-props.md deleted file mode 100644 index 1b9ae3484..000000000 --- a/docs-gitbook/es/essentials/passing-props.md +++ /dev/null @@ -1,79 +0,0 @@ -# Pasando propiedades a componentes de ruteo - -Usar `$route` en tu componente genera un acoplamiento estrecho con la ruta, lo cual limita la flexibilidad del componente dado que solo puede utilizarse en ciertas URL. - -Para desacoplar el componente del enrutador utiliza _props_: - -** Acoplado a $route** - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -** Desacoplado con props** - -``` js -const User = { - props: ['id'], - template: '<div>User {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - - // utilizando vistas con nombre, tienes que definir la opción prop para cada una de ellas: - { - path: '/user/:id', - components: { default: User, sidebar: Sidebar }, - props: { default: true, sidebar: false } - } - ] -}) -``` - -Esto te permite utilizar el componente en cualquier lugar, lo cual hace al mismo reutilizable y más sencillo de testear. - -### Modo boolean - -Cuando _props_ tiene asignado el valor true, `route.params` serán asignados como las _props_ del componente. - -### Modo objeto - -Cuando _props_ es un objeto, este será asignado tal cual como las _props_ del componente. -Útil para cuando las _props_ son estáticas. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } - ] -}) -``` - -### Modo función - -Puedes crear una función que retorne _props_. -Esto te permite convertir los parámetros a otro tipo, combinar valores estáticos con valores basados en rutas, etc. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) } - ] -}) -``` - -La URL: `/search?q=vue` pasaría `{query: "vue"}` como _props_ al componente SearchUser. - -Intenta crear funciones _props_ sin estado, dado que solo se evalúan cuando ocurren cambios de ruta. -Utiliza un componente envolvente si necesitas estado para definir las _props_, de esa manera Vue puede reaccionar a cambios de estado. - - -Para un uso avanzado, aquí hay un [ejemplo](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js). diff --git a/docs-gitbook/es/essentials/redirect-and-alias.md b/docs-gitbook/es/essentials/redirect-and-alias.md deleted file mode 100644 index cce4a8c49..000000000 --- a/docs-gitbook/es/essentials/redirect-and-alias.md +++ /dev/null @@ -1,58 +0,0 @@ -# Redireccionamiento y alias - -### Redireccionamiento - -El redireccionamiento también se realiza en la configuración de `routes`. Para redireccionar desde `/a` hasta `/b`: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -EL redireccionamiento también puede apuntar a una ruta con nombre: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -O incluso puedes utilizar una función para un redireccionamiento dinámico: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // la función recibe la ruta destino como argumento - // retorna aquí la ruta de redirección. - }} - ] -}) -``` - -Para otros usos avanzados, tienes el siguiente [ejemplo](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js). - -### Alias - -Una redirección significa que el usuario visita `/a`, y la URL será reemplazada por `/b`, para luego ejecutar el código correspondiente a `/b`. Pero, ¿qué es un alias? - -**Un alias de `/a` como `/b` significa que cuando el usuario visita `/b`, la URL se mantiene como `/b`, pero el código ejecutado corresponderá al mismo que si el usuario visitase `/a`.** - -Lo anterior puede ser expresado en la configuración de enrutamiento como: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -Un alias te da la libertad de mapear una estructura de _UI_ a una URL arbitraria, en lugar de estar restringido por la estructura anidada de la configuración. - -Para otros usos avanzados, aquí tienes un [ejemplo](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js). diff --git a/docs-gitbook/es/installation.md b/docs-gitbook/es/installation.md deleted file mode 100644 index 36084d3d3..000000000 --- a/docs-gitbook/es/installation.md +++ /dev/null @@ -1,44 +0,0 @@ -# Instalación - -### Descarga directa / CDN - -[https://unpkg.com/vue-router/dist/vue-router.js](https://unpkg.com/vue-router/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com) provee enlaces a CDN basadas en NPM. El enlace anterior siempre apuntará a la última versión en NPM. También puedes usar una versión/etiqueta específica a través de URLs como`https://unpkg.com/vue-router@2.0.0/dist/vue-router.js`. -<!--/email_off--> - -Incluye `vue-router` luego de Vue y se instalará automáticamente: - -``` html -<script src="/ruta/a/vue.js"></script> -<script src="/ruta/a/vue-router.js"></script> -``` - -### NPM - -``` bash -npm install vue-router -``` - -Cuando lo utilices con un sistema de empaquetamiento de módulos, debes instalarlo explícitamente a través de `Vue.use()`: - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -No necesitas hacer esto cuando utilices etiquetas _script_ globales. - -### Versión de desarrollo - -Debes clonar el repositorio directamente desde GitHub y construir `vue-router` tu mismo si quieres utilizar la última versión de desarrollo. - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs-gitbook/fr/README.md b/docs-gitbook/fr/README.md deleted file mode 100644 index f8a898044..000000000 --- a/docs-gitbook/fr/README.md +++ /dev/null @@ -1 +0,0 @@ -{% include "./SUMMARY.md" %} diff --git a/docs-gitbook/fr/SUMMARY.md b/docs-gitbook/fr/SUMMARY.md deleted file mode 100644 index 3fa9be3f1..000000000 --- a/docs-gitbook/fr/SUMMARY.md +++ /dev/null @@ -1,41 +0,0 @@ -# vue-router - -> Note aux utilisateurs de TypeScript : vue-router@3.0+ nécessite vue@2.5+, et inverssement. - -**[Notes de version](https://github.com/vuejs/vue-router/releases)** - -- [Installation](installation.md) -- Essentiel - - [Pour commencer](essentials/getting-started.md) - - [Concordance dynamique de route](essentials/dynamic-matching.md) - - [Navigation programmatique](essentials/navigation.md) - - [Routes imbriquées](essentials/nested-routes.md) - - [Routes nommées](essentials/named-routes.md) - - [Vues nommées](essentials/named-views.md) - - [Redirection et alias](essentials/redirect-and-alias.md) - - [Passage de props aux composants de route](essentials/passing-props.md) - - [Mode historique de HTML5](essentials/history-mode.md) -- Avancé - - [Intercepteurs de navigation](advanced/navigation-guards.md) - - [Champs meta de route](advanced/meta.md) - - [Transitions](advanced/transitions.md) - - [Récupération de données](advanced/data-fetching.md) - - [Comportement du défilement](advanced/scroll-behavior.md) - - [Chargement à la volée](advanced/lazy-loading.md) -- Référence de l'API - - [Options de construction du routeur](api/options.md) - - [routes](api/options.md#routes) - - [mode](api/options.md#mode) - - [base](api/options.md#base) - - [linkActiveClass](api/options.md#linkactiveclass) - - [linkExactActiveClass](api/options.md#linkexactactiveclass) - - [scrollBehavior](api/options.md#scrollbehavior) - - [parseQuery / stringifyQuery](api/options.md#parsequery--stringifyquery) - - [fallback](api/options.md#fallback) - - [L'instance du routeur](api/router-instance.md) - - [Propriétés](api/router-instance.md#propriétés) - - [Méthodes](api/router-instance.md#méthodes) - - [L'objet Route](api/route-object.md) - - [Injections de composant](api/component-injections.md) - - [router-link](api/router-link.md) - - [router-view](api/router-view.md) diff --git a/docs-gitbook/fr/advanced/data-fetching.md b/docs-gitbook/fr/advanced/data-fetching.md deleted file mode 100644 index e34f83535..000000000 --- a/docs-gitbook/fr/advanced/data-fetching.md +++ /dev/null @@ -1,110 +0,0 @@ -# Récupération de données - -Parfois vous avez besoin de récupérer des données depuis le serveur lorsqu'une route est activée. Par exemple, avant de faire le rendu d'un profil utilisateur, vous avez besoin de récupérer les données de l'utilisateur depuis le serveur. Nous pouvons y parvenir de deux façons différentes : - -- **Récupération de données après la navigation** : effectue la navigation en premier, et récupère les données dans le hook entrant du cycle de vie d'un composant. Affiche un état de chargement pendant que les données sont en train d'être récupérées. - -- **Récupération de données avant la navigation** : récupère les données avant la navigation dans la fonction d'interception d'entrée de la route, et effectue la navigation après que les données aient été récupérées. - -Techniquement, les deux choix sont valides. Cela dépend de l'expérience utilisateur que vous souhaitez apporter. - -## Récupération de données après la navigation - -En utilisant cette approche, nous naviguons et faisons immédiatement le rendu du composant et récupérons les données via le hook `created` du composant. Cela nous donne l'opportunité d'afficher un état de chargement pendant que les données sont récupérées à travers le réseau, et nous pouvons aussi gérer le chargement différemment pour chaque vue. - -Assumons que nous ayons un composant `Post` qui a besoin de récupérer des données pour un billet identifié par `$route.params.id` : - -``` html -<template> - <div class="post"> - <div class="loading" v-if="loading"> - Chargement... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // récupérer les données lorsque la vue est créée et - // que les données sont déjà observées - this.fetchData() - }, - watch: { - // appeler encore la méthode si la route change - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // remplacer `getPost` par une fonction de récupération de données - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## Récupération de données avant la navigation - -Avec cette approche, nous récupèrerons les données avant de naviguer vers la nouvelle route. Nous pouvons effectuer la récupération de données dans la fonction d'interception `beforeRouteEnter` du composant à venir, et seulement appeler `next` lorsque la récupération est terminée : - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // quand la route change et que ce composant est déjà rendu, - // la logique est un peu différente - beforeRouteUpdate (to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData (err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -L'utilisateur va rester sur la vue précédente pendant que la ressource est en train d'être récupérée pour la vue à venir. Il est cependant recommandé d'afficher une barre de progression ou un autre type d'indicateur pendant que les données sont en train d'être récupérées. Si la récupération échoue, il est aussi recommandé d'afficher une sorte de message d'erreur global. diff --git a/docs-gitbook/fr/advanced/lazy-loading.md b/docs-gitbook/fr/advanced/lazy-loading.md deleted file mode 100644 index 99582d2d9..000000000 --- a/docs-gitbook/fr/advanced/lazy-loading.md +++ /dev/null @@ -1,47 +0,0 @@ -# Chargement à la volée - -Pendant la construction d'applications avec un empaqueteur (« bundler »), le paquetage JavaScript peut devenir un peu lourd, et donc cela peut affecter le temps de chargement de la page. Il serait plus efficace si l'on pouvait séparer chaque composant de route dans des fragments séparés, et de les charger uniquement lorsque la route est visitée. - -En combinant la [fonctionnalité de composant asynchrone](https://fr.vuejs.org/v2/guide/components.html#Composants-asynchrones) de Vue et la [fonctionnalité de scission de code](https://webpack.js.org/guides/code-splitting-async/) de webpack, il est très facile de charger à la volée les composants de route. - -Premièrement, un composant asynchrone peut définir une fonction fabrique qui retourne une Promesse (qui devrait résoudre le composant lui-même) : - -``` js -const Foo = () => Promise.resolve({ /* définition du composant */ }) -``` - -Deuxièmement, avec webpack 2, nous pouvons utiliser la syntaxe d'[import dynamique](https://github.com/tc39/proposal-dynamic-import) pour indiquer un point de scission de code : - -``` js -import('./Foo.vue') // returns a Promise -``` - -> Note: si vous utilisez Babel, vous aurez besoin d'ajouter le plugin [syntax-dynamic-import](http://babeljs.io/docs/plugins/syntax-dynamic-import/) de façon à ce que Babel puisse analyser correctement la syntaxe. - -En combinant les deux, on définit un composant asynchrone qui sera automatiquement scindé par webpack : - -``` js -const Foo = () => import('./Foo.vue') -``` - -Rien n'a besoin d'être modifié dans la configuration de la route, utilisez `Foo` comme d'habitude. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/foo', component: Foo } - ] -}) -``` - -### Grouper des composants dans le même fragment - -Parfois on aimerait grouper tous les composants imbriqués sous la même route, dans un seul et même fragment asynchrone. Pour arriver à cela, nous avons besoin d'utiliser les [fragments nommés](https://webpack.js.org/guides/code-splitting-async/#chunk-names) en donnant un nom au fragment en utilisant une syntaxe de commentaire spéciale (requires webpack > 2.4) : - -``` js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -webpack groupera tous les modules asynchrones avec le même nom de fragment dans le même fragment asynchrone. diff --git a/docs-gitbook/fr/advanced/meta.md b/docs-gitbook/fr/advanced/meta.md deleted file mode 100644 index 24dc5ccd0..000000000 --- a/docs-gitbook/fr/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# Champs meta de route - -Vous pouvez inclure un champ `meta` quand vous définissez une route : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // un champ `meta` - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -Comment maintenant accéder à ce champ `meta` ? - -Tout d'abord, chaque objet route dans la configuration de `routes` est appelé un **registre de route**. Les registres de route peuvent être imbriqués. Par conséquent, quand une route concorde, elle peut potentiellement concorder avec plus d'un registre de route. - -Par exemple, avec la configuration de route ci-dessous, l'URL `/foo/bar` va concorder avec le registre parent et le registre enfant. - -Tous les registres concordants avec une route sont exposés dans l'objet `$route` (ainsi que les objets de route dans les sécurisations de navigation) dans le tableau `$route.matched`. Donc, nous devons itérer à travers `$route.matched` pour vérifier les champs meta dans les registres de route. - -Un exemple concret est la vérification d'un champ meta dans une interception de navigation globale : - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // cette route demande une autorisation, vérifions si l'utilisateur est logué. - // sinon, redirigeons le sur la page de login. - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // assurez vous de toujours appeler `next()` ! - } -}) -``` diff --git a/docs-gitbook/fr/advanced/navigation-guards.md b/docs-gitbook/fr/advanced/navigation-guards.md deleted file mode 100644 index 1b686c0e8..000000000 --- a/docs-gitbook/fr/advanced/navigation-guards.md +++ /dev/null @@ -1,155 +0,0 @@ -# Intercepteurs de navigation - -Comme le nom le suggère, l'interception de navigation fournie par `vue-router` est principalement utilisée pour intercepter la navigation avec des redirections ou des annulations d'accès. Il y a plusieurs hooks disponibles lors du processus de navigation : globaux, par route ou par composant. - -Souvenez-vous de cela : **le changement de paramètre ou de query ne va pas lancer d'interception d'entrée ou de sortie de navigation**. Vous pouvez toujours [observer l'objet `$route`](../essentials/dynamic-matching.md#reacting-to-params-changes) pour réagir à ces changements, ou utiliser la fonction `beforeRouteUpdate` d'une interception par composant. - -### Interception globale - -Vous pouvez abonner une interception d'entrée en utilisant `router.beforeEach` : - -``` js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -Les interceptions d'entrées globales sont appelées lors de l'ordre de création, chaque fois qu'une navigation est déclenchée. Les interceptions peuvent être résolues de manière asynchrone, et la navigation est considérée comme **en attente** avant que tous les hooks ne soient résolus. - -Chaque fonction d'interception reçoit trois arguments : - -- **`to: Route`**: L'[objet `Route`](../api/route-object.md) cible vers lequel on navigue. - -- **`from: Route`**: la route courante depuis laquelle nous venons de naviguer. - -- **`next: Function`**: cette fonction doit être appelée pour **résoudre** le hook. L'action dépend des arguments fournis à `next`: - - - **`next()`**: se déplacer jusqu'au prochain hook du workflow. S'il ne reste aucun hook, la navigation est **confirmée**. - - - **`next(false)`**: annuler la navigation courante. Si l'URL du navigateur avait changé (manuellement par l'utilisateur ou via le bouton retour du navigateur), il sera remis à sa valeur de route de `from`. - - - **`next('/')` ou `next({ path: '/' })`**: redirige vers le nouvel URL. La navigation courante va être arrêtée et une nouvelle va se lancer. Vous pouvez passer n'importe quel objet à `next`, vous permettant ainsi de spécifier des options comme `replace: true`, `name: 'home'` et n'importe quelles options dans [la prop `to` du `router-link`](../api/router-link.md) ou [`router.push`](../api/router-instance#méthodes). - - - **`next(error)`**: (2.4.0+) si l'argument passé à `next` est une instance de `Error`, la navigation va s'arrêter et l'erreur sera passée aux fonctions de rappel enregistrées via [`router.onError()`](../api/router-instance.html#methods). - -**Assurez-vous de toujours appeler la fonction `next`, sinon le hook ne sera jamais résolu.** - -### Résolutions des interceptions globales - -> Nouveau dans la 2.5.0 - -Dans la 2.5.0+ vous pouvez abonner une interception globale avec `router.beforeResolve`. Ceci est similaire a `router.beforeEach`, mais la différence est qu'elle sera appelée juste après que la navigation soit confirmée, **après que toutes les interceptions par composants et les composants de route asynchrone ait été résolu**. - -### Hooks de sortie globaux - -Vous pouvez également abonner des hooks de sortie, cependant, à la différence des interceptions, ces hooks ne fournissent pas de fonction `next` et n'affecte pas la navigation : - -``` js -router.afterEach((to, from) => { - // ... -}) -``` - -### Interception par route - -Vous pouvez définir l'interception `beforeEnter` directement sur l'objet de configuration d'une route : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -Ces interceptions ont exactement le même effet que les interceptions globales d'entrée. - -### Interception par composant - -Enfin, vous pouvez directement définir une interception de navigation a l'intérieur du composant lui-même (celui passer à la configuration du routeur) avec les options suivantes : - -- `beforeRouteEnter` -- `beforeRouteUpdate` (ajouté dans la 2.2+) -- `beforeRouteLeave` - -``` js -const Foo = { - template: `...`, - beforeRouteEnter (to, from, next) { - // appelée avant que la route vers le composant soit confirmée. - // cette fonction n'a pas accès à l'instance du composant avec `this`, - // car le composant n'a pas encore été créé quand cette interception est appelée ! - }, - beforeRouteUpdate (to, from, next) { - // appelée quand la route qui fait le rendu de ce composant change, - // mais que ce composant est utilisé de nouveau dans la nouvelle route. - // Par exemple, pour une route avec le paramètre dynamique `/foo/:id`, quand nous - // naviguons entre `/foo/1` et `/foo/2`, la même instance du composant `Foo` - // va être réutilisée, et ce hook va être appelé quand cela arrivera. - // ce hook a accès à l'instance de ce composant via `this`. - }, - beforeRouteLeave (to, from, next) { - // appelée quand la route qui fait le rendu de ce composant est sur le point - // d'être laissée en faveur de la prochaine route. - // elle a accès à l'instance de ce composant via `this`. - } -} -``` - -L'interception `beforeRouteEnter` **n'**a **PAS** accès à `this`, car l'interception est appelée avant que la navigation soit confirmée, et le nouveau composant entrant n'a même pas encore été créé. - -Cependant, vous pouvez accéder à l'instance en passant dans la fonction de rappel `next`. Cette fonction de rappel va être appelée quand la navigation sera confirmée, et l'instance du composant sera passée à la fonction de rappel en tant qu'argument : - -``` js -beforeRouteEnter (to, from, next) { - next(vm => { - // accès à l'instance du composant via `vm` - }) -} -``` - -Notez que `beforeRouteEnter` est la seule interception qui supporte une fonction de rappelle dans `next`. Pour `beforeRouteUpdate` et `beforeRouteLeave`, `this` est déjà disponible. Le passage d'une fonction de rappel n'étant pas nécessaire, il n'est donc pas *supporté* : - -```js -beforeRouteUpdate (to, from, next) { - // utiliser juste `this` - this.name = to.params.name - next() -} -``` - -L'**interception de sortie** est habituellement utilisée pour empécher l'utilisateur de quitter la route sans avoir sauvegardé ses changements. La navigation peut être annulée en appelant `next(false)`. - -```js -beforeRouteLeave (to, from , next) { - const answer = window.confirm('Voulez-vous vraiment quitter cette page ? Vos changements seront perdus.') - if (answer) { - next() - } else { - next(false) - } -} -``` - -### Le flux de résolution de navigation complet - -1. La navigation est demandée. -2. Appel de l'interception de sortie des composants désactivés (ceux que l'on va quitter). -3. Appel des interceptions globales `beforeEach`. -4. Appel des interceptions `beforeRouteUpdate` pour les composants réutilisés (2.2+). -5. Appel de `beforeEnter` dans la configuration de route. -6. Résolution des composants de route asynchrones. -7. Appel de `beforeRouteEnter` dans les composants activés (ceux où l'on va arriver). -8. Appel des interceptions `beforeResolve` (2.5+). -9. Confirmation de la navigation. -10. Appel des hooks globaux `afterEach`. -11. Modification du DOM demandée. -12. Appel des fonctions de rappel passées à `next` dans l'interception `beforeRouteEnter` avec l'instance instanciée. diff --git a/docs-gitbook/fr/advanced/scroll-behavior.md b/docs-gitbook/fr/advanced/scroll-behavior.md deleted file mode 100644 index 546c51619..000000000 --- a/docs-gitbook/fr/advanced/scroll-behavior.md +++ /dev/null @@ -1,80 +0,0 @@ -# Comportement du défilement - -En utilisant le routage côté client, nous pourrions vouloir faire défiler la page jusqu'en haut lorsqu'on navigue vers une nouvelle route, ou alors préserver la position du défilement des entrées de l'historique comme le ferait une page réelle. `vue-router` vous permet de faire cela et, encore mieux, vous permet de changer le comportement du défilement pendant la navigation. - -**Note : cette fonctionnalité ne fonctionne que si le navigateur supporte `history.pushState`.** - -Pendant la création de l'instance du routeur, vous pouvez renseigner la fonction `scrollBehavior` : - -``` js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // retourner la position désirée - } -}) -``` - -La fonction `scrollBehavior` reçoit les objets de route `to` et `from`. Le troisième argument, `savedPosition`, est disponible uniquement si c'est une navigation `popstate` (déclenchée par les boutons précédent/suivant du navigateur). - -La fonction peut retourner un objet décrivant la position du défilement. L'objet peut être de la forme : - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset seulement supporté pour les versions 2.6.0+) - -Si une valeur équivalente à `false` ou un objet vide est retourné, aucun défilement ne sera produit. - -Par exemple : - -``` js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -Cela permettra de défiler au haut de page à chaque navigation à travers les routes. - -Retourner l'objet `savedPosition` résultera en un comportement quasi natif en naviguant avec les boutons précédents/suivants : - -``` js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -Si vous voulez simuler le comportement « aller à l'ancre » : - -``` js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -On peut aussi utiliser les [champs meta de route](meta.md) pour implémenter un contrôle bien précis pour le comportement du défilement. Allez voir un exemple complet [ici](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js). - -### Défilement asynchrone - -> Nouveau dans la 2.8.0+ - -Vous pouvez également retourner une promesse pour résoudre la description de position souhaitée : - -``` js -scrollBehavior (to, from, savedPosition) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ x: 0, y: 0 }) - }, 500) - }) -} -``` - -Il est possible de relier les événements d'un composant de transition au niveau de la page pour que le comportement de défilement soit bien adapté à vos transitions de pages. Cependant, en raison de la variance et de la complexité des cas d'utilisation, nous fournissons simplement ce code primitif pour permettre aux utilisateurs de faire les implémentations spécifiques. diff --git a/docs-gitbook/fr/advanced/transitions.md b/docs-gitbook/fr/advanced/transitions.md deleted file mode 100644 index 2bb63c47c..000000000 --- a/docs-gitbook/fr/advanced/transitions.md +++ /dev/null @@ -1,58 +0,0 @@ -# Transitions - -Vu que `<router-view>` est essentiellement un composant dynamique, on peut lui appliquer certains effets de transitions en utilisant le composant `<transition>` : - -``` html -<transition> - <router-view></router-view> -</transition> -``` - -[Tout à propos de `<transition>`](https://fr.vuejs.org/v2/guide/transitions.html) fonctionne également ici de la même manière. - -### Transition par route - -L'utilisation du dessus applique la même transition pour chaque route. Si vous voulez que les composants de route aient des transitions différentes, vous pouvez utiliser à la place `<transition>` avec des noms différents à l'intérieur de chaque composant de route : - -``` js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -# Transition dynamique basée sur la route - -Il est aussi possible de déterminer la transition à utiliser en se basant sur la relation entre la route cible et la route actuelle : - -``` html -<!-- utiliser un nom de transition dynamique --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -``` js -// et dans le composant parent, -// observer la `$route` pour déterminer la transition à utiliser -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -Voir un exemple complet [ici](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js). diff --git a/docs-gitbook/fr/api/component-injections.md b/docs-gitbook/fr/api/component-injections.md deleted file mode 100644 index c9f020a8b..000000000 --- a/docs-gitbook/fr/api/component-injections.md +++ /dev/null @@ -1,21 +0,0 @@ -# Injections de composant - -### Propriétés injectées - -Ces propriétés sont injectées dans chacun des composants enfants, en passant l'instance du routeur à l'application racine de Vue en tant qu'option `router`. - -- #### $router - - L'instance du routeur. - -- #### $route - - La [Route](route-object.md) actuellement active. C'est une propriété en lecture seule et ses propriétés sont immutables, mais elles restent malgré tout observables. - -### Options activées - -- **beforeRouteEnter** -- **beforeRouteUpdate** (ajouté en 2.2) -- **beforeRouteLeave** - - Voir l'[interception par composant](../advanced/navigation-guards.md#securisation-par-composant). diff --git a/docs-gitbook/fr/api/options.md b/docs-gitbook/fr/api/options.md deleted file mode 100644 index ef61bf779..000000000 --- a/docs-gitbook/fr/api/options.md +++ /dev/null @@ -1,107 +0,0 @@ -# Options de construction du routeur - -### routes - -- type: `Array<RouteConfig>` - - Déclaration de type pour `RouteConfig` : - - ``` js - declare type RouteConfig = { - path: string; - component?: Component; - name?: string; // pour les routes nommées - components?: { [name: string]: Component }; // pour les vues nommées - redirect?: string | Location | Function; - props?: boolean | string | Function; - alias?: string | Array<string>; - children?: Array<RouteConfig>; // pour les routes imbriquées - beforeEnter?: (to: Route, from: Route, next: Function) => void; - meta?: any; - - // 2.6.0+ - caseSensitive?: boolean; // use case sensitive match? (default: false) - pathToRegexpOptions?: Object; // path-to-regexp options for compiling regex - } - ``` - -### mode - -- type : `string` - -- défaut : `"hash" (dans le navigateur) | "abstract" (en Node.js)` - -- valeurs disponibles : `"hash" | "history" | "abstract"` - - Configure le mode du routeur. - - - `hash` : utilise le hash de l'URL pour le routage. Fonctionne dans tous les navigateurs supportés par Vue, ainsi que ceux qui ne supportent pas l'API History d'HTML5. - - - `history` : nécessite l'API History d'HTML 5 et la configuration du serveur. Voir [Mode historique de HTML5](../essentials/history-mode.md). - - - `abstract` : fonctionne dans tous les environnements JavaScript, ex. côté serveur avec Node.js. **Le routeur sera automatiquement forcé d'utiliser ce mode si aucune API navigateur n'est présente.** - -### base - -- type : `string` - -- défaut : `"/"` - - L'URL de base de l'application. Par exemple, si l'application monopage entière est distribuée sous `/app/`, alors `base` doit utiliser la valeur `"/app/"`. - -### linkActiveClass - -- type : `string` - -- défaut : `"router-link-active"` - - Configure de manière globale la classe active par défaut de `<router-link>`. Voir aussi [router-link](router-link.md). - -### linkExactActiveClass - -> 2.5.0+ - -- type : `string` - -- default : `"router-link-exact-active"` - - Configure de manière globale la classe active par défaut de `<router-link>` lors d'une correspondance exacte. Voir aussi [router-link](router-link.md). - -### scrollBehavior - -- type : `Function` - - Signature : - - ``` - type PositionDescriptor = - { x: number, y: number } | - { selector: string } | - ?{} - - type scrollBehaviorHandler = ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => PositionDescriptor | Promise<PositionDescriptor> - ``` - - Pour plus de détails, voir [Comportement du Scroll](../advanced/scroll-behavior.md). - -### parseQuery / stringifyQuery - -> 2.4.0+ - -- type : `Function` - - Permettent de spécifier des fonctions personnalisées pour formater en objet ou en chaîne de caractères la requête. Surcharge les fonctions par défaut. - -### fallback - -> 2.6.0+ - -- type : `boolean` - - Contrôle comment le routeur devrait passer en mode `hash` quand le navigateur ne supporte pas `history.pushState`. Par défaut à `true`. - - Passer cette valeur à `false` va essentiellement faire que la navigation via `router-link` va réclamer un rechargement de page dans IE9. Ceci est utile quand l'application est rendue côté serveur et à besoin de fonctionner dans IE9, car le mode hash ne fonctionne pas avec du SSR. diff --git a/docs-gitbook/fr/api/route-object.md b/docs-gitbook/fr/api/route-object.md deleted file mode 100644 index bdf566514..000000000 --- a/docs-gitbook/fr/api/route-object.md +++ /dev/null @@ -1,93 +0,0 @@ -# L'objet `Route` - -Un **objet `Route`** représente l'état actuel de la route active. Il contient des informations analysées à propos de l'URL courant et **les itinéraires de route** appariés par l'URL. - -L'objet `Route` est immutable. Chaque navigation qui se déroule avec succès résultera en un nouvel objet `Route`. - -L'objet `Route` peut être trouvé à plusieurs endroits : - -- À l'intérieur des composants en tant que `this.$route` - -- À l'intérieur des fonctions de rappel des observateurs de `$route` - -- Comme valeur de retour après l'appel de `router.match(location)` - -- À l'intérieur des fonctions d'interception de la navigation, dans les deux premiers paramètres de la fonction : - - ``` js - router.beforeEach((to, from, next) => { - // `to` et `from` sont tous les deux des objets Route - }) - ``` - -- À l'intérieur de la fonction `scrollBehavior` dans les deux premiers arguments : - - ``` js - const router = new VueRouter({ - scrollBehavior (to, from, savedPosition) { - // `to` et `from` sont tous les deux des objets Route - } - }) - ``` - -### Propriétés de l'objet `Route` - -- **$route.path** - - - type : `string` - - Une chaine de caractères représentant le chemin de la route en cours, toujours résolue en tant que chemin absolu, ex : `"/foo/bar"`. - -- **$route.params** - - - type : `Object` - - Un objet qui contient des pairs clé/valeur de segments dynamiques et segments *star*. S'il n'y a pas de paramètres, alors la valeur sera un objet vide. - -- **$route.query** - - - type : `Object` - - Un objet qui contient des pairs clé/valeur de la requête au format d'une chaine de caractères. Par exemple, pour un chemin `/foo?user=1`, on aura `$route.query.user == 1`. S'il n'y a pas de requête, alors la valeur sera un objet vide. - -- **$route.hash** - - - type : `string` - - Le hash de la route courante (avec le `#`), s'il y en a un. S'il n'y a pas de hash, alors la valeur sera une chaine de caractères vide. - -- **$route.fullPath** - - - type : `string` - - L'URL entièrement résolu, incluant la requête et le hash. - -- **$route.matched** - - - type : `Array<RouteRecord>` - - Un `Array` contenant les **les itinéraires de la route** pour chaque segment de chemin imbriqué de la route courante. Les itinéraires de la route sont des copies des objets dans le tableau de configuration `routes` (et dans les tableaux `children`). - - ``` js - const router = new VueRouter({ - routes: [ - // l'objet qui suit est un itinéraire de route - { path: '/foo', component: Foo, - children: [ - // c'est aussi un itinéraire - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - Lorsque l'URL sera `/foo/bar`, `$route.matched` sera un `Array` contenant les deux objets (clonés), dans l'ordre parent à l'enfant. - -- **$route.name** - - Le nom de la route courante, si elle en a un. (Voir [Routes nommées](../essentials/named-routes.md)). - -- **$route.redirectedFrom** - - Le nom de la route d'où la page a été redirigée, si elle en a un. (Voir [Redirection et alias](../essentials/redirect-and-alias.md)). diff --git a/docs-gitbook/fr/api/router-instance.md b/docs-gitbook/fr/api/router-instance.md deleted file mode 100644 index 43498fc98..000000000 --- a/docs-gitbook/fr/api/router-instance.md +++ /dev/null @@ -1,88 +0,0 @@ -# L'instance du routeur - -### Propriétés - -#### router.app - -- type: `instance de Vue` - - L'instance racine de Vue dans laquelle l'instance de `routeur` a été injectée. - -#### router.mode - -- type: `string` - - Le [mode](options.md#mode) que le routeur utilise. - -#### router.currentRoute - -- type: `Route` - - La route actuelle représentée en tant qu'un [objet route](route-object.md). - -### Méthodes - -- **router.beforeEach(guard)** -- **router.beforeResolve(guard)** (2.5.0+) -- **router.afterEach(hook)** - - Ajout des interceptions globales de navigation. Voir les [Intercepteurs de navigation](../advanced/navigation-guards.md). - - Dans la version 2.5.0+, ces trois méthodes retournent une fonction qui enlève les fonctions d'interception et hooks enregistrés. - -- **router.push(location, onComplete?, onAbort?)** -- **router.replace(location, onComplete?, onAbort?)** -- **router.go(n)** -- **router.back()** -- **router.forward()** - - Navigue à une nouvelle URL de façon programmée. Voir [Navigation de façon programmée](../essentials/navigation.md). - -- **router.getMatchedComponents(location?)** - - Retourne un tableau de composants (définition/constructeur et non les instances) correspondant à la `location` passée en paramètre, ou alors de la route actuelle. Cette fonction est principalement utilisée pendant le rendu côté serveur afin d'effectuer une prérécupération des données. - -- **router.resolve(location, current?, append?)** - - > 2.1.0+ - - Inverse la résolution d'URL. La `location` doit avoir la même forme qu'utilisée dans `<router-link>`, retourne un objet avec les propriétés suivantes : - - ``` js - { - location: Location; - route: Route; - href: string; - } - ``` - - - `current` is the current Route by default (most of the time you don't need to change this) - - `append` allows you to append the path to the `current` route (as with [`router-link`](router-link.md#props)) - -- **router.addRoutes(routes)** - - > 2.2.0+ - - Permet d'ajouter dynamiquement des routes au routeur. L'argument doit être un tableau utilisant le même format de configuration que l'option `routes` du constructeur. - -- **router.onReady(callback, [errorCallback])** - - > 2.2.0+ - - Cette méthode met en file d'attente une fonction de rappel qui sera appelée lorsque le routeur aura complété la navigation initiale, ce qui signifie qu'il a résolu tous les hooks d'entrées asynchrones et composants asynchrones qui sont associés à la route initiale. - - C'est utile pendant un rendu côté serveur pour assurer une sortie consistance sur le serveur et le client. - - Le deuxième argument `errorCallback` est uniquement supporté à partir de la version 2.4. Il sera appelé lorsque la résolution de la route initiale résultera en une erreur (ex. : la résolution d'un composant asynchrone qui a échoué). - -- **router.onError(callback)** - - > 2.4.0+ - - Enregistre une fonction de rappel qui sera appelée lorsqu'une erreur sera capturée pendant la navigation vers une route. Notez que pour qu'une erreur soit appelée, cela doit correspondre à l'un des scénarios suivants : - - - L'erreur est lancée de manière synchrone à l'intérieur d'une fonction d'interception de route ; - - - L'erreur est capturée et traitée de manière asynchrone en appelant `next(err)` à l'intérieur d'une fonction d'interception de route ; - - - Une erreur est survenue pendant la résolution d'un composant asynchrone qui est requis pour faire le rendu d'une route. diff --git a/docs-gitbook/fr/api/router-link.md b/docs-gitbook/fr/api/router-link.md deleted file mode 100644 index e1b7a47d5..000000000 --- a/docs-gitbook/fr/api/router-link.md +++ /dev/null @@ -1,142 +0,0 @@ -# `<router-link>` - -`<router-link>` est le composant pour activer la navigation utilisateur dans une application où le routeur est activé. La localisation cible est spécifiée grâce à la prop `to`. Il est rendu en tant que balise `<a>` avec le `href` correct par défaut, mais peut être configuré grâce à la prop `tag`. De plus, le lien se verra attribuer une classe CSS active lorsque la route cible est active. - -`<router-link>` est préféré par rapport au `<a href="...">` en dur dans le code pour les raisons suivantes : - -- Cela fonctionne de la même manière qu'on soit dans le mode historique HTML5 ou le mode hash, donc si vous avez décidé de changer de mode, ou alors que le routeur se replie sur le mode hash pour IE9, rien n'a besoin d'être changé. - -- Dans le mode historique HTML5, `router-link` interceptera l'évènement du clic, comme ça le navigateur n'essaiera pas de rafraichir la page. - -- En utilisant l'option `base` dans le mode historique HTML5, vous n'avez pas besoin de l'inclure dans les props `to` des URL. - -### Props - -- **to** - - - type : `string | Location` - - - requis - - Désigne la route cible du lien. Lorsqu'il est cliqué, la valeur de la prop `to` va être passée de manière interne à `router.push`, donc la valeur peut soit être une chaine de caractères, ou alors un objet décrivant une localisation. - - ``` html - <!-- chaine littérale --> - <router-link to="home">Accueil</router-link> - <!-- rend --> - <a href="home">Accueil</a> - - <!-- expression JavaScript en utilisant `v-bind` --> - <router-link v-bind:to="'home'">Accueil</router-link> - - <!-- Omettre `v-bind` est OK, tout comme une autre prop --> - <router-link :to="'home'">Accueil</router-link> - - <!-- pareil qu'au-dessus --> - <router-link :to="{ path: 'home' }">Accueil</router-link> - - <!-- route nommée --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">Utilisateur</router-link> - - <!-- avec une requête, résulte en `/register?plan=private` --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}">S'enregistrer</router-link> - ``` - - -- **replace** - - - type : `boolean` - - - défaut : `false` - - Configurer la prop `replace` appellera `router.replace()` au lieu de `router.push()` lors du clic, comme ça, la navigation ne laissera pas un enregistrement dans l'historique. - - ``` html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - - -- **append** - - - type : `boolean` - - - défaut : `false` - - Configurer la propriété `append` suffixe toujours le chemin relatif au chemin courant. Par exemple, assumons que nous naviguons de `/a` à un lien relatif `b`, sans `append` on finira sur `/b`, mais avec `append` on finira sur `/a/b`. - - ``` html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - - -- **tag** - - - type : `string` - - - défaut : `"a"` - - Parfois, on veut que `<router-link>` soit rendu avec une balise différente, ex : `<li>`. On peut alors utiliser la prop `tag` pour modifier la balise qui sera rendue, et elle écoutera toujours les évènements de clic pour la navigation. - - ``` html - <router-link to="/foo" tag="li">foo</router-link> - <!-- rend --> - <li>foo</li> - ``` - - -- **active-class** - - - type : `string` - - - défaut : `"router-link-active"` - - Configure la classe CSS active qui sera appliquée lorsque le lien sera actif. Notez que la valeur par défaut peut aussi être configurée de manière globale via l'option `linkActiveClass` du constructeur du routeur. - -- **exact** - - - type : `boolean` - - - défaut : `false` - - Le comportement par défaut de la correspondance de classe active est une **correspondance inclusive**. Par exemple, `<router-link to="/a">` verra cette classe appliquée tant que le chemin courant commencera par `/a/` ou `/a`. - - Une conséquence de cela est que `<router-link to="/">` sera actif pour toutes les routes ! Pour forcer le lien dans un « mode correspondance exacte », utilisez la prop `exact`. - - ``` html - <!-- ce lien sera uniquement actif à `/` --> - <router-link to="/" exact> - ``` - - Allez voir les exemples expliquant la classe active pour les liens [ici](https://jsfiddle.net/8xrk1n9f/). - -- **event** - - > 2.1.0+ - - - type : `string | Array<string>` - - - défaut : `'click'` - - Spécifie les évènement(s) que peu(ven)t lancer la navigation de lien. - -- **exact-active-class** - - > 2.5.0+ - - - type : `string` - - - défaut : `"router-link-exact-active"` - - Configure la classe CSS active qui sera appliquée lorsqu'un lien sera actif avec une correspondance exacte. Notez que la valeur par défaut peut aussi être configurée de manière globale via l'option `linkExactActiveClass` du constructeur du routeur. - -### Appliquer la classe active à l'élément extérieur - -Parfois, on voudrait que la classe active soit appliquée à un élément extérieur au lieu de l'élément `<a>` lui-même, dans ce cas, vous pouvez faire le rendu de cet élément extérieur en utilisant `<router-link>` et en entourant le tag `<a>` : - -``` html -<router-link tag="li" to="/foo"> - <a>/foo</a> -</router-link> -``` - -Dans ce cas, `<a>` sera le lien actuel (et récupèrera le bon `href`), mais la classe active sera appliquée à l'élément extérieur `<li>`. diff --git a/docs-gitbook/fr/api/router-view.md b/docs-gitbook/fr/api/router-view.md deleted file mode 100644 index 619a2f8db..000000000 --- a/docs-gitbook/fr/api/router-view.md +++ /dev/null @@ -1,27 +0,0 @@ -# `<router-view>` - -Le composant `<router-view>` est un composant fonctionnel qui fait le rendu du composant correspondant au chemin donné. Les composants rendus dans `<router-view>` peuvent aussi contenir leur propre `<router-view>`, qui fera le rendu des composants pour les chemins imbriqués. - -### Props - -- **name** - - - type : `string` - - - défaut : `"default"` - - Lorsqu'un `<router-view>` a un nom, il fera le rendu du composant correspondant à ce nom dans les itinéraires de route correspondant à l'option `components`. Voir les [Routes nommées](../essentials/named-views.md) pour un exemple. - -### Comportement - -Les propriétés sans nom seront passées le long du composant rendu, toutefois la plupart du temps, les données par route seront contenues dans les paramètres de la route. - -Car c'est juste un composant, il fonctionne avec `<transition>` et `<keep-alive>`. Lorsque vous utilisez les deux ensemble, soyez sûr d'utiliser `<keep-alive> à l'intérieur : - -``` html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` diff --git a/docs-gitbook/fr/essentials/dynamic-matching.md b/docs-gitbook/fr/essentials/dynamic-matching.md deleted file mode 100644 index 56990e97c..000000000 --- a/docs-gitbook/fr/essentials/dynamic-matching.md +++ /dev/null @@ -1,74 +0,0 @@ -# Concordance dynamique de route - -Vous allez très souvent associer des routes avec un motif donné à un même composant. Par exemple nous pourrions avoir le composant `User` qui devrait être rendu pour tous les utilisateurs mais avec différents identifiants. Avec `vue-router` nous pouvons utiliser des segments dynamiques dans le chemin de la route pour réaliser cela : - -``` js -const User = { - template: '<div>Utilisateur</div>' -} - -const router = new VueRouter({ - routes: [ - // Les segments dynamiques commencent avec la ponctuation deux-points - { path: '/utilisateur/:id', component: User } - ] -}) -``` - -Maintenant des URL comme `/utilisateur/foo` et `/utilisateur/bar` seront chacun associé à la même route. - -Un segment dynamique se repère avec les deux-points `:`. Quand une route concorde, la valeur du segment dynamique est exposée via `this.$route.params` dans tous les composants. Et donc, nous pouvons faire le rendu de l'identifiant de l'utilisateur courant en mettant à jour le template de `User` ainsi : - -``` js -const User = { - template: '<div>Utilisateur {{ $route.params.id }}</div>' -} -``` - -Vous pouvez regarder un exemple en ligne [ici](https://jsfiddle.net/yyx990803/4xfa2f19/). - -Vous pouvez avoir plusieurs segments dynamiques pour une même route, et ils seront associés aux champs associés dans `$route.params`. Des exemples : - -| motif | chemin concordant | $route.params | -|---------|------|--------| -| /utilisateur/:username | /utilisateur/evan | `{ username: 'evan' }` | -| /utilisateur/:username/billet/:post_id | /utilisateur/evan/billet/123 | `{ username: 'evan', post_id: '123' }` | - -En plus de `$route.params`, l'objet `$route` expose également d'autres informations utiles comme la `$route.query` (s'il y a une requête dans l'URL), `$route.hash`, etc. Vous pouvez accéder à tous les détails de cela dans la [référence de l'API](../api/route-object.md). - -### Réactivité aux changements de paramètres - -Une chose à noter quand vous utilisez des routes avec des paramètres (segments), c'est que lors de la navigation de l'utilisateur de `/utilisateur/foo` vers `/utilisateur/bar`, **la même instance de composant va être réutilisée**. Puisque les deux routes font le rendu du même composant, cela est plus performant que de détruire l'ancienne instance et d'en créer une nouvelle. **Cependant, cela signifie également que les hooks de cycle de vie ne seront pas appelés**. - -Pour réagir aux changements de paramètres dans le même composant, vous pouvez simplement observer l'objet `$route` : - -``` js -const User = { - template: '...', - watch: { - '$route' (to, from) { - // réagir au changement de route... - } - } -} -``` - -Ou utiliser la fonction d'interception `beforeRouteUpdate` introduite avec la 2.2 : - -``` js -const User = { - template: '...', - beforeRouteUpdate (to, from, next) { - // réagir au changement de route... - // n'oubliez pas d'appeler `next()` - } -} -``` - -### Motifs de concordance avancés - -`vue-router` utilise [path-to-regexp](https://github.com/pillarjs/path-to-regexp) comme moteur de concordance de chemin, il supporte donc plusieurs motifs de concordance avancés tels que la présence optionnelle de segments dynamiques, aucun ou plusieurs motifs, plus d'options par motifs, et même des motifs d'expressions régulières personnalisés. Consultez cette [documentation](https://github.com/pillarjs/path-to-regexp#parameters) pour utiliser ces motifs avancés et [cet exemple](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) pour les utiliser avec `vue-router`. - -### Priorité de concordance - -Parfois la même URL peut être adressé par de multiples routes. Dans ce cas, la priorité de concordance est déterminée par l'ordre de la définition des routes : plus la route est définie tôt, plus sa priorité est élevée. diff --git a/docs-gitbook/fr/essentials/getting-started.md b/docs-gitbook/fr/essentials/getting-started.md deleted file mode 100644 index efa2f78de..000000000 --- a/docs-gitbook/fr/essentials/getting-started.md +++ /dev/null @@ -1,92 +0,0 @@ -# Pour commencer - -> Nous utiliserons [ES2015](https://github.com/lukehoban/es6features) dans les exemples de code dans ce guide. - -Créer une application monopage avec Vue + Vue Router est vraiment simple. Avec Vue.js, nous concevons déjà notre application avec des composants. En ajoutant vue-router dans notre application, tout ce qu'il nous reste à faire est de relier nos composants aux routes, et de laisser vue-router faire le rendu. Voici un exemple de base : - -> Tous les exemples utiliseront la version complète de Vue pour rendre l'analyse de template possible. Plus de détails [ici](https://fr.vuejs.org/guide/installation.html#Runtime-Compiler-vs-Runtime-seul). - -### HTML - -``` html -<script src="https://unpkg.com/vue/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> - -<div id="app"> - <h1>Bonjour l'application !</h1> - <p> - <!-- utilisez le composant router-link pour la navigation. --> - <!-- spécifiez le lien en le passant à la prop `to` --> - <!-- `<router-link>` sera rendu en tag `<a>` par défaut --> - <router-link to="/foo">Aller à Foo</router-link> - <router-link to="/bar">Aller à Bar</router-link> - </p> - <!-- balise pour le composant router-view --> - <!-- le composant correspondant à la route sera rendu ici --> - <router-view></router-view> -</div> -``` - -### JavaScript - -``` js -// 0. Si vous utilisez un système de module (par ex. via vue-cli), il faut importer Vue et Vue Router et ensuite appeler `Vue.use(VueRouter)`. - -// 1. Définissez les composants de route. -// Ces derniers peuvent être importés depuis d'autre fichier -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. Définissez des routes. -// Chaque route doit correspondre à un composant. Le « composant » peut -// soit être un véritable composant créé via `Vue.extend()`, ou juste un -// objet d'options. -// Nous parlerons plus tard des routes imbriquées. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. Créez l'instance du routeur et passez l'option `routes`. -// Vous pouvez également passer des options supplémentaires, -// mais nous allons faire simple pour l'instant. -const router = new VueRouter({ - routes // raccourci pour `routes: routes` -}) - -// 5. Créez et montez l'instance de Vue. -// Soyez sûr d'injecter le routeur avec l'option `router` pour -// permettre à l'application tout entière d'être à l'écoute du routeur. -const app = new Vue({ - router -}).$mount('#app') - -// L'application est maintenant en marche ! -``` - -En injectant le routeur, nous y avons accès à travers `this.$router`. Nous avons également accès à la route courante derrière `this.$route` depuis n'importe quel composant : - -```js -// Home.vue -export default { - computed: { - username () { - // Nous verrons ce que représente `params` dans un instant. - return this.$route.params.username - } - }, - methods: { - goBack () { - window.history.length > 1 - ? this.$router.go(-1) - : this.$router.push('/') - } - } -} -``` - -Dans les documentations, nous allons souvent utiliser l'instance `router`. Gardez à l'esprit que l'utilisation de `this.$router` est exactement la même chose que celle de `router`. La raison pour laquelle nous utilisons `this.$router` est la possibilité ainsi offerte de ne pas avoir à importer le routeur dans chaque fichier de composant ayant besoin d'accéder au routage. - -Vous pouvez aussi regarder cet [exemple](https://jsfiddle.net/yyx990803/xgrjzsup/). - -Notez qu'un `<router-link>` obtiendra automatiquement la classe `.router-link-active` lorsque sa route cible correspond à la route actuelle. Vous pouvez en apprendre plus à propos de cela dans sa [documentation d'API](../api/router-link.md). diff --git a/docs-gitbook/fr/essentials/history-mode.md b/docs-gitbook/fr/essentials/history-mode.md deleted file mode 100644 index 1d803e14b..000000000 --- a/docs-gitbook/fr/essentials/history-mode.md +++ /dev/null @@ -1,136 +0,0 @@ -# Mode historique de HTML5 - -Le mode par défaut de `vue-router` est le _mode hash_. Il utilise la partie hash de l'URL pour simuler un URL complet et ainsi ne pas recharger la page quand l'URL change. - -Pour nous passer du hash, nous pouvons utiliser le **mode historique** qui utilisera l'API `history.pushState` afin de permettre une navigation sans rechargement de page : - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -Quand vous utilisez le mode historique, l'URL ressemblera à n'importe quel URL normal. Par ex. `http://oursite.com/user/id`. Magnifique ! - -Cependant, un problème apparait si votre application est une application monopage cliente. Sans une configuration serveur adaptée, les utilisateurs tomberont sur une page d'erreur 404 en tentant d'accéder à `http://oursite.com/user/id` directement dans leur navigateur. Maintenant ça craint. - -Ne vous inquiétez pas. Pour résoudre ce problème, il vous suffit d'ajouter une route à votre serveur prenant en compte toutes les adresses demandées. Si l'URL demandée ne concorde avec aucun fichier statique, alors il doit toujours renvoyer la page `index.html` qui contient le code de votre application. De nouveau magnifique ! - -## Exemple de configurations serveur - -#### Apache - -```apache -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Node.js natif - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http.createServer((req, res) => { - fs.readFile('index.htm', 'utf-8', (err, content) => { - if (err) { - console.log(`Impossible d'ouvrir le fichier "index.htm"`) - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) -}).listen(httpPort, () => { - console.log('Le serveur écoute à : http://localhost:%s', httpPort) -}) -``` - -#### Node.js avec Express - -Pour Node.js avec Express, vous pouvez utiliser le [middleware connect-history-api-fallback](https://github.com/bripkens/connect-history-api-fallback). - -#### Internet Information Services (IIS) - -1. Instaler [IIS UrlRewrite](https://www.iis.net/downloads/microsoft/url-rewrite) -2. Créer un fichier `web.config` dans le répertoire racine de votre site avec le contenu suivant : - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="/" /> - </rule> - </rules> - </rewrite> - </system.webServer> -</configuration> -``` - -#### Caddy - -``` -rewrite { - regexp .* - to {path} / -} -``` - -#### Hébergement Firebase - -Ajouter ceci à votre fichier `firebase.json` : - -``` -{ - "hosting": { - "public": "dist", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} -``` - -## Limitation - -Il y a une limitation a tout ceci. Votre serveur ne renverra plus les erreurs 404 des chemins qui ne sont pas trouvés puisqu'il va servir à présent le fichier `index.html`. Pour contourner ce problème, vous pouvez implémenter une route concordant avec toutes les adresses en 404 dans votre application Vue : - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [ - { path: '*', component: NotFoundComponent } - ] -}) -``` - -Une alternative possible, si vous utilisez un serveur Node.js, est d'implémenter ce mécanisme de substitution en utilisant le routeur côté serveur pour vérifier la concordance des demandes d'URL entrant. Si la route ne concorde avec rien, la page est inexistante. Consultez l'[utilisation de Vue côté serveur](https://ssr.vuejs.org/fr/) pour plus d'informations. diff --git a/docs-gitbook/fr/essentials/named-routes.md b/docs-gitbook/fr/essentials/named-routes.md deleted file mode 100644 index 0dc5e668e..000000000 --- a/docs-gitbook/fr/essentials/named-routes.md +++ /dev/null @@ -1,31 +0,0 @@ -# Routes nommées - -Parfois il est plus pratique d'identifier une route avec un nom, tout particulièrement quand on souhaite attacher cette route ou exécuter des actions de navigation. Vous pouvez donner un nom à une route dans les options `routes` pendant la création de l'instance du routeur : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/utilisateur/:userId', - name: 'user', - component: User - } - ] -}) -``` - -Pour attacher une route nommée, vous pouvez passer un objet à la prop `to` du composant `router-link` : - -``` html -<router-link :to="{ name: 'user', params: { userId: 123 }}">Utilisateur</router-link> -``` - -C'est exactement le même objet à utiliser programmatiquement avec `router.push()` : - -``` js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -Dans les deux cas, le routeur va naviguer vers le chemin `/utilisateur/123`. - -Un exemple complet se trouve [ici](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js). diff --git a/docs-gitbook/fr/essentials/named-views.md b/docs-gitbook/fr/essentials/named-views.md deleted file mode 100644 index 4a3c1578f..000000000 --- a/docs-gitbook/fr/essentials/named-views.md +++ /dev/null @@ -1,86 +0,0 @@ -# Vues nommées - -Parfois vous avez besoin d'afficher différentes vues en même temps plutôt que de les imbriquer, c.-à-d. créer un affichage avec une vue `sidebar` et une vue `main` par exemple. C'est ici que les routes nommées entrent en jeu. Au lieu d'avoir une seule balise de vue, vous pouvez en avoir une multitude et donner à chacune d'entre elles un nom. Un `router-view` sans nom aura comme nom par défaut : `default`. - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -Une vue est rendue en utilisant un composant, donc de multiples vues nécessitent de multiples composants pour une même route. Assurez-vous d'utiliser l'option `components` (avec un s) : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -Une démo de cet exemple peut-être trouvée [ici](https://jsfiddle.net/posva/6du90epg/). - -## Vues nommées imbriquées - -Il est possible de créer des dispositions complexes en utilisant les vues nommées avec les vues imbriquées. Quand vous le faites, vous devez nommer les composants imbriqués de `router-view` utilisés. Voyons cela avec un panneau de configuration exemple : - -``` -/parametres/emails /parametres/profile -+-----------------------------------+ +------------------------------+ -| UserSettings | | UserSettings | -| +-----+-------------------------+ | | +-----+--------------------+ | -| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | -| | +-------------------------+ | | | +--------------------+ | -| | | | | | | | UserProfilePreview | | -| +-----+-------------------------+ | | +-----+--------------------+ | -+-----------------------------------+ +------------------------------+ -``` - -- `Nav` est juste un composant standard. -- `UserSettings` est un composant de vue. -- `UserEmailsSubscriptions`, `UserProfile`, `UserProfilePreview` sont des composants de vue imbriqués. - -**Note** : _mettons de côté la partie HTML / CSS de cette disposition et concentrons nous sur le composant utilisé en lui-même._ - -La section `<template>` pour le composant `UserSettings` de la disposition ci-dessus devrait ressembler à quelque chose comme cela : - -```html -<!-- UserSettings.vue --> -<div> - <h1>Paramètres utilisateurs</h1> - <NavBar/> - <router-view/> - <router-view name="helper"/> -</div> -``` - -_Le composant de vue imbriqué est omis ici mais vous pouvez le trouver dans le code source complet de l'exemple ci-dessus [ici](https://jsfiddle.net/posva/22wgksa3/)._ - -Puis vous pouvez achever la disposition ci-dessus avec la configuration de route : - -```js -{ - path: '/parametres', - // Vous pouvez également avoir des vues nommées à la racine - component: UserSettings, - children: [{ - path: 'emails', - component: UserEmailsSubscriptions - }, { - path: 'profile', - components: { - default: UserProfile, - helper: UserProfilePreview - } - }] -} -``` - -Une démo de cet exemple peut-être trouvée [ici](https://jsfiddle.net/posva/22wgksa3/). diff --git a/docs-gitbook/fr/essentials/navigation.md b/docs-gitbook/fr/essentials/navigation.md deleted file mode 100644 index aa482f37e..000000000 --- a/docs-gitbook/fr/essentials/navigation.md +++ /dev/null @@ -1,85 +0,0 @@ -# Navigation programmatique - -En complément du l'utilisation de `<router-link>` pour créer des balises ancres pour la navigation déclarative, nous pouvons le faire de manière programmatique en utilisant les méthodes de l'instance du routeur. - -#### `router.push(location, onComplete?, onAbort?)` - -** Note : Dans une instance Vue, vous pouvez accéder à l'instance du routeur via `$router`. Vous pouvez donc appeler `this.$router.push`.** - -Pour naviguer vers un URL différent, utilisez `router.push`. Cette méthode ajoute une nouvelle entrée dans la pile de l'historique. Ainsi quand un utilisateur clique sur le bouton retour de son navigateur, il retournera à l'URL précédent. - -Cette méthode est appelée en interne quand vous cliquez sur `<router-link>`, donc cliquer sur `<router-link :to="...">` est équivalent à appeler `router.push(...)`. - -| Déclarative | Programmatique | -|-------------|--------------| -| `<router-link :to="...">` | `router.push(...)` | - -L'argument peut être une chaine de caractère représentant un chemin, ou un objet de description de destination. Des exemples : - -``` js -// chaine de caractère représentant un chemin -router.push('home') - -// objet -router.push({ path: 'home' }) - -// route nommée -router.push({ name: 'user', params: { userId: 123 }}) - -// avec une requête « query » résultant de `/register?plan=private` -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -**Note :** `params` est ignoré si `path` est fourni, ce qui n'est pas le cas pour `query`, comme démontré dans l'exemple ci-dessous. À la place, vous devez fournir le `name` de la route ou manuellement spécifier le `path` complet avec tous les paramètres : - -```js -const userId = 123 -router.push({ name: 'user', params: { userId }}) // -> /user/123 -router.push({ path: `/user/${userId}` }) // -> /user/123 -// Ceci ne va PAS fonctionner -router.push({ path: '/user', params: { userId }}) // -> /user -``` - -Les mêmes règles s'appliquent pour la propriété `to` du composant `router-link`. - -Dans la version 2.2.0+, vous pouvez optionnellement fournir les fonctions de rappel `onComplete` et `onAbort` à `router.push` ou `router.replace` en tant que deuxième et troisième arguments. Ces fonctions de rappel seront appelées quand la navigation sera respectivement ; complétée avec succès (après la résolution de tous les hooks asynchrones), ou arrêtée (navigation vers la même route ou vers une route différente avant que la navigation courante ne soit achevée). - -**Note :** si la destination est la même que la route courante et que seuls les paramètres ont changés (par ex. naviguer d'un profil à l'autre `/utilisateurs/1` -> `/utilisateurs/2`), vous devrez utiliser [`beforeRouteUpdate`](./dynamic-matching.html#réactivité-aux-changements-de-paramètres) pour réagir aux changements (par ex. récupérer les informations de l'utilisateur). - -#### `router.replace(location, onComplete?, onAbort?)` - -Il agit comme `router.push`. La seule différence est que la navigation se fait sans ajouter de nouvelle entrée dans la pile de l'historique. Comme son nom l'indique, il remplace l'entrée courante. - -| Déclarative | Programmatique | -|-------------|--------------| -| `<router-link :to="..." replace>` | `router.replace(...)` | - - -#### `router.go(n)` - -Cette méthode prend un seul nombre en tant que paramètre. Celui-ci indique de combien d'entrées vers l'avant ou vers l'arrière il faut naviguer dans la pile de l'historique, de la même manière qu'avec `window.history.go(n)`. - -Des exemples - -``` js -// avancer d'une entrée, identique à `history.forward()` -router.go(1) - -// retourner d'une entrée en arrière, identique à `history.back()` -router.go(-1) - -// avancer de trois entrées -router.go(3) - -// échoue silencieusement s'il n'y a pas assez d'entrées. -router.go(-100) -router.go(100) -``` - -#### Manipulation de l'historique - -Vous avez peut être remarqué que `router.push`, `router.replace` et `router.go` sont des équivalents de [`window.history.pushState`, `window.history.replaceState` et `window.history.go`](https://developer.mozilla.org/fr-FR/docs/Web/API/History), et qu'ils imitent les APIs de `window.history`. - -Donc, si vous utilisez déjà l'[API History des navigateurs](https://developer.mozilla.org/fr-FR/docs/Web/API/History_API), manipuler l'historique sera très simple avec vue-router. - -Il n'est pas nécessaire de préciser que les méthodes de navigation (`push`, `replace`, `go`) fonctionnent de la même manière dans tous les modes de routage (`history`, `hash` and `abstract`). diff --git a/docs-gitbook/fr/essentials/nested-routes.md b/docs-gitbook/fr/essentials/nested-routes.md deleted file mode 100644 index be0fc9cfb..000000000 --- a/docs-gitbook/fr/essentials/nested-routes.md +++ /dev/null @@ -1,99 +0,0 @@ -# Routes imbriquées - -Les vraies interfaces utilisateurs d'application sont faites de composants imbriqués à de multiples niveaux de profondeur. Il est aussi très commun que les segments d'URL correspondent à une certaine structure de composants imbriqués, par exemple : - -``` -/utilisateur/foo/profil /utilisateur/foo/billets -+---------------------+ +--------------------+ -| User | | User | -| +-----------------+ | | +----------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +-----------------+ | | +----------------+ | -+---------------------+ +--------------------+ -``` - -Avec `vue-router`, il est vraiment très simple d'exprimer cette relation en utilisant des configurations de route imbriquées. - -Reprenons l'application créée au chapitre précédent : - -``` html -<div id="app"> - <router-view></router-view> -</div> -``` - -``` js -const User = { - template: '<div>Utilisateur {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/utilisateur/:id', component: User } - ] -}) -``` - -Ici le `<router-view>` est une balise de premier niveau. Il fait le rendu des composants qui concordent avec une route de premier niveau. De la même façon, un composant de rendu peut contenir également sa propre balise `<router-view>` imbriquée. Par exemple, ajoutons en une à l'intérieur du template du composant `User` : - -``` js -const User = { - template: ` - <div class="user"> - <h2>Utilisateur {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -Pour faire le rendu de composants à l'intérieur des balises imbriquées, nous avons besoin d'utiliser l'option `children` dans la configuration du constructeur de `VueRouter` : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/utilisateur/:id', component: User, - children: [ - { - // `UserProfile` va être rendu à l'intérieur du `<router-view>` de `User` - // quand `/utilisateur/:id/profil` concorde - path: 'profile', - component: UserProfile - }, - { - // `UserPosts` va être rendu à l'intérieur du `<router-view>` de `User` - // quand `/utilisateur/:id/billets` concorde - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**Notez que les chemins imbriqués commençants par `/` vont être traités comme des chemins partant de la racine. Cela vous permet d'adresser des composants imbriqués sans avoir à utiliser un URL imbriqué.** - -Comme vous pouvez le voir, l'option `children` n'est qu'un autre tableau d'objet de configuration de route comme dans `routes`. Et donc, vous pouvez garder les vues imbriquées au plus près de vos besoins. - -À ce niveau, avec la configuration ci-dessus, quand vous visitez `/utilisateur/foo`, rien ne sera rendu dans la partie `User`, car aucune sous route ne concorde. Peut-être voudriez-vous afficher quelque chose ici. Dans ce cas, vous pouvez fournir une sous route vide : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/utilisateur/:id', component: User, - children: [ - // `UserProfile` va être rendu à l'intérieur du `<router-view>` de `User` - // quand `/utilisateur/:id` concorde - { path: '', component: UserHome }, - - // ...autres sous routes - ] - } - ] -}) -``` - -Une démo de fonctionnement de cet exemple peut-être trouvée [ici](https://jsfiddle.net/yyx990803/L7hscd8h/). diff --git a/docs-gitbook/fr/essentials/passing-props.md b/docs-gitbook/fr/essentials/passing-props.md deleted file mode 100644 index e1a27486f..000000000 --- a/docs-gitbook/fr/essentials/passing-props.md +++ /dev/null @@ -1,75 +0,0 @@ -# Passage de props aux composants de route - -Utiliser `$route` dans vos composants crée un couplage fort à la route qui va limiter la flexibilité du composant qui ne pourra être utilisé que par certains URL. - -Pour découpler un composant de son routeur, utilisez les props : - -**Plutôt que de coupler avec `$route`** - -``` js -const User = { - template: '<div>Utilisateur {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/utilisateur/:id', component: User } - ] -}) -``` - -**Découplez avec les `props`** - -``` js -const User = { - props: ['id'], - template: '<div>Utilisateur {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/utilisateur/:id', component: User, props: true }, - - // pour les routes avec vues nommées, vous devez définir l'option `props` pour chaque vue nommée : - { - path: '/utilisateur/:id', - components: { default: User, sidebar: Sidebar }, - props: { default: true, sidebar: false } - } - ] -}) -``` - -Cela vous permet d'utiliser le composant n'importe où, ce qui le rend plus facile à réutiliser et à tester. - -### Mode booléen - -Quand `props` est mis à `true`, le `route.params` est remplis en tant que props du composant. - -### Mode objet - -Quand `props` est un objet, cela alimente les props de celui-ci. Utile quand les props sont statiques. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } - ] -}) -``` - -### Mode fonction - -Vous pouvez créer une fonction qui va retourner les props. Cela vous permet de caster des paramètres dans un autre type, de combiner les valeurs statiques avec les valeurs des routes, etc. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) } - ] -}) -``` - -L'URL `/search?q=vue` passerait `{query: 'vue'}` comme `props` au composant `SearchUser`. - -Essayez de garder la fonction de `props` sans état, car il n'est évalué que sur les changements de route. Utilisez un composant englobant si vous avez besoin d'état pour définir les props, ainsi la vue pourra réagir au changement d'état. - -Pour une utilisation avancée, jetez un œil à cet [exemple](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js). diff --git a/docs-gitbook/fr/essentials/redirect-and-alias.md b/docs-gitbook/fr/essentials/redirect-and-alias.md deleted file mode 100644 index 712f1e048..000000000 --- a/docs-gitbook/fr/essentials/redirect-and-alias.md +++ /dev/null @@ -1,60 +0,0 @@ -# Redirection et alias - -### Redirection - -Les redirections peuvent aussi être faites depuis la configuration de `routes`. Pour rediriger `/a` vers `/b` : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -La redirection peut également être effectuée en ciblant une route nommée : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -Ou on peut même utiliser une fonction pour les redirections dynamiques : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // la fonction reçoit la route cible en tant qu'argument - // retournez le chemin vers la nouvelle route ici. - }} - ] -}) -``` - -Notez que les [intercepteurs de navigation](../advanced/navigation-guards.md) ne sont pas appliqués sur les routes d'où à lieu la redirection mais uniquement sur les routes cibles. Dans l'exemple ci-dessous, ajouter une interception `beforeEnter` ou `beforeLeave` à la route `/a` n'aura aucun effet. - -Pour d'autres utilisations avancées, jetez un œil à cet [exemple](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js). - -### Alias - -Une redirection signifie que si l'utilisateur visite `/a`, l'URL va être remplacé par `/b` et concordé avec `/b`. Mais qu'est-ce qu'un alias ? - -** Un alias de `/a` en tant que `/b` signifie que lorsque l'utilisateur va visiter `/b`, l'URL va rester `/b`, mais la concordance va se faire comme si l'utilisateur visitait `/a`.** - -La phase du dessus peut être exprimée dans la configuration de la route de la manière suivante : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -Un alias vous donne la liberté d'associer une structure d'interface utilisateur à un URL arbitraire, au lieu d'être contraint par une configuration de structure. - -Pour d'autres utilisations avancées, jetez un œil à cet [exemple](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js). diff --git a/docs-gitbook/fr/installation.md b/docs-gitbook/fr/installation.md deleted file mode 100644 index 21ead6cbe..000000000 --- a/docs-gitbook/fr/installation.md +++ /dev/null @@ -1,44 +0,0 @@ -# Installation - -### Téléchargement direct / CDN - -[https://unpkg.com/vue-router/dist/vue-router.js](https://unpkg.com/vue-router/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com) fournit des liens CDN basés sur npm. Le lien ci-dessus pointera toujours vers la dernière version sur npm. Vous pouvez aussi utiliser un tag ou une version spécifique via un URL comme `https://unpkg.com/vue-router@2.0.0/dist/vue-router.js`. -<!--/email_off--> - -Incluez `vue-router` après Vue et l'installation sera automatique : - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -### npm - -``` bash -npm install vue-router -``` - -Lorsqu'il est utilisé avec un système de module, vous devez explicitement installer le router via `Vue.use()` : - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -Vous n'avez pas besoin de faire cela lors de l'utilisation des balises de script globales (`<script>`). - -### Build de développement - -Vous aurez besoin de cloner directement `vue-router` depuis GitHub et le compiler vous-même si vous souhaitez utiliser le dernier build de développement. - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs-gitbook/gitbook/images/favicon.ico b/docs-gitbook/gitbook/images/favicon.ico deleted file mode 100644 index e481e5dda..000000000 Binary files a/docs-gitbook/gitbook/images/favicon.ico and /dev/null differ diff --git a/docs-gitbook/ja/README.md b/docs-gitbook/ja/README.md deleted file mode 100644 index f8a898044..000000000 --- a/docs-gitbook/ja/README.md +++ /dev/null @@ -1 +0,0 @@ -{% include "./SUMMARY.md" %} diff --git a/docs-gitbook/ja/SUMMARY.md b/docs-gitbook/ja/SUMMARY.md deleted file mode 100644 index 82a5aa7a7..000000000 --- a/docs-gitbook/ja/SUMMARY.md +++ /dev/null @@ -1,41 +0,0 @@ -# vue-router - -> 注意: TypeScript ユーザ向けは、vue-router@3.0+ と vue@2.5+ が必須、逆もまた同様です。 - -**[リリースノート](https://github.com/vuejs/vue-router/releases)** - -- [インストール](installation.md) -- 基本的な使い方 - - [はじめに](essentials/getting-started.md) - - [動的ルートマッチング](essentials/dynamic-matching.md) - - [ネストされたルート](essentials/nested-routes.md) - - [プログラムによるナビゲーション](essentials/navigation.md) - - [名前付きルート](essentials/named-routes.md) - - [名前付きビュー](essentials/named-views.md) - - [リダイレクトとエイリアス](essentials/redirect-and-alias.md) - - [ルートコンポーネントにプロパティを渡す](essentials/passing-props.md) - - [HTML5 History モード](essentials/history-mode.md) -- 高度な使い方 - - [ナビゲーションガード](advanced/navigation-guards.md) - - [ルートメタフィールド](advanced/meta.md) - - [トランジション](advanced/transitions.md) - - [データの取得](advanced/data-fetching.md) - - [スクロールの振る舞い](advanced/scroll-behavior.md) - - [遅延ローディング](advanced/lazy-loading.md) -- API リファレンス - - [ルーターコンストラクタオプション](api/options.md) - - [routes](api/options.md#routes) - - [mode](api/options.md#mode) - - [base](api/options.md#base) - - [linkActiveClass](api/options.md#linkactiveclass) - - [linkExactActiveClass](api/options.md#linkexactactiveclass) - - [scrollBehavior](api/options.md#scrollbehavior) - - [parseQuery / stringifyQuery](api/options.md#parsequery--stringifyquery) - - [fallback](api/options.md#fallback) - - [ルーターインスタンス](api/router-instance.md) - - [Properties](api/router-instance.md#properties) - - [Methods](api/router-instance.md#methods) - - [ルートオブジェクト](api/route-object.md) - - [コンポーネント注入](api/component-injections.md) - - [router-link](api/router-link.md) - - [router-view](api/router-view.md) diff --git a/docs-gitbook/ja/advanced/data-fetching.md b/docs-gitbook/ja/advanced/data-fetching.md deleted file mode 100644 index 22244af65..000000000 --- a/docs-gitbook/ja/advanced/data-fetching.md +++ /dev/null @@ -1,110 +0,0 @@ -# データ取得 - -ルートが有効化された時にサーバーからデータを取得する必要がしばしばあります。例えば、ユーザープロフィールを描画する前に、サーバーからユーザーデータを取得する必要があります。これを実現するためには 2 種類の方法があります。 - -- **ナビゲーション後の取得**: ナビゲーションを先に実行し、その後次に入ってくるコンポーネントのライフサイクルフック内でデータを取得します。データ取得中にローディングを表示します。 - -- **ナビゲーション前の取得**: ルートに入るガード内でナビゲーション前にデータ取得をします。そして、データ取得後にナビゲーションを実行します。 - -技術的にはどちらも正当な選択肢です。究極的にはあなたが目指しているユーザーエクスペリエンスに依存します。 - -## ナビゲーション後の取得 - -このアプローチを取る時は次に来るコンポーネントが即座にナビゲーションされ、描画されます。そして、コンポーネントの `created` フックの中でデータを取得します。この方法ではネットワーク越しにデータを取得している間にローディング状態を表示する機会があります。また、各 view に対して、異なるローディングの対応をすることもできます。 - -`$route.params.id` を元にポストのデータを取得する必要がある `Post` コンポーネントを想定してみましょう。 - -``` html -<template> - <div class="post"> - <div class="loading" v-if="loading"> - Loading... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // view が作られた時にデータを取得し、 - // そのデータは既に監視されています - this.fetchData() - }, - watch: { - // ルートが変更されたらこのメソッドを再び呼び出します - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // `getPost` をあなたのデータ取得用 util や API ラッパーに置き換えてください - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## ナビゲーション前の取得 - -こちらのアプローチでは新しいルートへ実際にナビゲーションする前にデータを取得します。次に入ってくるコンポーネント内の `beforeRouteEnter` ガードでデータ取得を実行できます。データ取得が完了したら `next` を呼ぶだけです。 - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (route, redirect, next) { - getPost(route.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // コンポーネントが既に描画されている際のルート変更時は - // ロジックが少し異なります - beforeRouteUpdate (to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData (err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -次に入ってくる view へのリソースを取得している間、ユーザーは前の view に滞在します。したがって、データ取得中にプログレスバーや何らかの指標を表示することをオススメします。また、もしデータ取得が失敗した場合、何かグローバルな警告メッセージのようなものを表示する必要があります。 diff --git a/docs-gitbook/ja/advanced/lazy-loading.md b/docs-gitbook/ja/advanced/lazy-loading.md deleted file mode 100644 index 7f0b17bc1..000000000 --- a/docs-gitbook/ja/advanced/lazy-loading.md +++ /dev/null @@ -1,37 +0,0 @@ -# 遅延ローディングルート - -バンドラーを使ってアプリケーションを構築している時、バンドルされる JavaScript が非常に大きいものになり得ます。結果的にページのロード時間に影響を与えてしまいます。もし各ルートコンポーネントごとに別々のチャンクにして、訪れたルートの時だけロードできればより効率的でしょう。 - -Vue の [非同期コンポーネント機能](http://jp.vuejs.org/guide/components.html#非同期コンポーネント) と webpack の [コード分割機能](https://webpack.js.org/guides/code-splitting-async/) を組み合わせることでとても簡単に遅延ロードするルートコンポーネントができます。 - -最初に、非同期コンポーネントは Promise (コンポーネント自身解決する必要がある) を返すファクトリ関数として定義できます: - -``` js -const Foo = () => Promise.resolve({ /* component definition */ }) -``` - -次に、webpack 2 において [動的 import](https://github.com/tc39/proposal-dynamic-import) 構文を使用して、コード分割ポイントを示すことができます: - -``` js -import('./Foo.vue') // returns a Promise -``` - -> Note: Babel を使用している場合、Babel が構文を正しく解析するために [syntax-dynamic-import](https://babeljs.io/docs/plugins/syntax-dynamic-import/) プラグインを追加する必要があります。 - -2 つを組み合わせることで、これは、webpack によって自動的にコード分割される非同期コンポーネントを定義する方法です: - -``` js -const Foo = () => import('./Foo.vue') -``` - -### 同じチャンク内でのコンポーネントグループ化 - -しばしば同じ非同期のチャンクに、そのルート配下のネストされた全てのコンポーネントをグループ化したいと思うかもしれません。それを実現するためには、 特別なコメント構文 (webpack > 2.4 必須)を使用してチャンクの名前を提供する [名前付きチャンク](https://webpack.js.org/guides/code-splitting-async/#chunk-names) を使う必要があります。 - -``` js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -webpack は同じチャンク名のどんな非同期のモジュールも同じ非同期のチャンクにグループします。 diff --git a/docs-gitbook/ja/advanced/meta.md b/docs-gitbook/ja/advanced/meta.md deleted file mode 100644 index b7f876e65..000000000 --- a/docs-gitbook/ja/advanced/meta.md +++ /dev/null @@ -1,52 +0,0 @@ -# ルートメタフィールド - -ルートの定義をする際に `meta` フィールドを含めることができます。 - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // メタフィールド - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -ではどのように `meta` フィールドにアクセスしましょう? - -まず、 `routes` 設定の中の各ルートオブジェクトは**ルートレコード**と呼ばれます。ルートレコードはネストされているかもしれません。したがって、ルートがマッチした時に、潜在的には 1 つ以上のルートレコードがマッチされる可能性があります。 - -例えば上記のルート設定で、 `/foo/bar` という URL は親のルートレコードにも子のルートレコードにもマッチします。 - -ルートにマッチした全てのルートレコードは `$route.matched` 配列として `$route` オブジェクト上で (また、ナビゲーションガード上のルートオブジェクトでも) アクセス可能になります。 - -メタフィールドをグローバルナビゲーションガードで確認するユースケースの例: - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // このルートはログインされているかどうか認証が必要です。 - // もしされていないならば、ログインページにリダイレクトします。 - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // next() を常に呼び出すようにしてください! - } -}) - -``` diff --git a/docs-gitbook/ja/advanced/navigation-guards.md b/docs-gitbook/ja/advanced/navigation-guards.md deleted file mode 100644 index 9b815b86f..000000000 --- a/docs-gitbook/ja/advanced/navigation-guards.md +++ /dev/null @@ -1,153 +0,0 @@ -# ナビゲーションガード - -この名前が示すように、 `vue-router` によって提供されるナビゲーションガードは、リダイレクトもしくはキャンセルによって遷移をガードするために主に使用されます。ルートナビゲーション処理 (グローバル、ルート単位、コンポーネント内) をフックする多くの方法があります。 - -**パラメータまたはクエリの変更は enter/leave ナビゲーションガードをトリガーしない** ということを覚えておいてください。それらの変更に対応するために [`$route` オブジェクトを監視する](../essentials/dynamic-matching.md#reacting-to-params-changes)、またはコンポーネント内ガード `beforeRouteUpdate` を使用するかの、どちらかができます。 - -### グローバルガード - -`router.beforeEach` を使ってグローバル before ガードを登録できます。 - -``` js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -いつナビゲーションがトリガーされようとも、グローバル before ガードは作られた順番で呼び出されます。ガードは非同期に解決されるかもしれません。そしてそのナビゲーションは全てのフックが解決されるまで **未解決状態** として扱われます。 - -全てのガード関数は 3 つの引数を受け取ります。 - - - **`to: Route`**: 次にナビゲーションされる対象の [ルートオブジェクト](../api/route-object.md)。 - - - **`from: Route`**: ナビゲーションされる前の現在のルートです。 - - - **`next: Function`**: フックを **解決** するためにこの関数を呼ぶ必要があります。この振る舞いは `next` に渡される引数に依存します: - - - **`next()`**: パイプラインの次のフックに移動します。もしフックが残っていない場合は、このナビゲーションは **確立** されます。 - - - **`next(false)`**: 現在のナビゲーションを中止します。もしブラウザのURLが変化した場合は(ユーザーが手動で変更した場合でも、戻るボタンの場合でも)、 `from` ルートのURLにリセットされます。 - - - **`next('/')` または `next({ path: '/' })`**: 異なる場所へリダイレクトします。現在のナビゲーションは中止され、あたらしいナビゲーションが始まります。任意のロケーションオブジェクトを `next` に渡すことができます。この `next` には、`replace: true`、 `name: 'home'` のようなオプション、そして [`router-link`、`to` プロパティ](../api/router-link.md)または [`router.push`](../api/router-instance.md#methods)で使用される任意のオプションを指定することができます。 - - - **`next(error)`**: (2.4.0+) `next` に渡された引数が `Error` インスタンスである場合、ナビゲーションは中止され、エラーは `router.onError()` を介して登録されたコールバックに渡されます。 - - **常に `next` 関数を呼び出すようにしてください。そうでなければ、フックは決して解決されません。** - -### グローバル解決ガード - -> New in 2.5.0 - -2.5.0 以降では、`router.beforeResolve` によってグローバルガードを登録できます。これは `router.beforeEach` に似ていますが、**すべてのコンポーネント内ガードと非同期ルートコンポーネントが解決された後**、ナビゲーションが解決される直前に解決ガードが呼び出されるという違いがあります。 - -### グローバルな After フック - -グローバル after フックを登録することもできます。しかしながら、ガードとは異なり、これらのフックは `next` 関数を受け取らず、ナビゲーションに影響しません。 - -``` js -router.afterEach((to, from) => { - // ... -}) -``` - -### ルート単位ガード - -直接ルート設定オブジェクトの `beforeEnter` ガードを定義することができます。 - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -これらのガードはグローバル before ガードと全く同じシグネチャを持ちます。 - -### コンポーネント内ガード - -最後に、 以下のオプションでルートコンポーネント(ルータ設定に渡されるもの)の内側でルートナビゲーションガードを直接定義することができます。 - -- `beforeRouteEnter` -- `beforeRouteUpdate` (2.2 で追加) -- `beforeRouteLeave` - -``` js -const Foo = { - template: `...`, - beforeRouteEnter (to, from, next) { - // このコンポーネントを描画するルートが確立する前に呼ばれます。 - // `this` でのこのコンポーネントへのアクセスはできません。 - // なぜならばこのガードが呼び出される時にまだ作られていないからです! - }, - beforeRouteUpdate (to, from, next) { - // このコンポーネントを描画するルートが変更されたときに呼び出されますが、 - // このコンポーネントは新しいルートで再利用されます。 - // たとえば、動的な引数 `/foo/:id` を持つルートの場合、`/foo/1` と `/foo/2` の間を移動すると、 - // 同じ `Foo` コンポーネントインスタンスが再利用され、そのときにこのフックが呼び出されます。 - // `this` でコンポーネントインスタンスにアクセスできます。 - }, - beforeRouteLeave (to, from, next) { - // このコンポーネントを描画するルートが間もなく - // ナビゲーションから離れていく時に呼ばれます。 - // `this` でのコンポーネントインスタンスへのアクセスができます。 - } -} -``` - -この `beforeRouteEnter` ガードは `this` へのアクセスは**できない**です。なぜならば、ナビゲーションが確立する前にガードが呼び出されるからです。したがって、新しく入ってくるコンポーネントはまだ作られていないです。 - -しかしながら、 `next` にコールバックを渡すことでインスタンスにアクセスすることができます。このコールバックはナビゲーションが確立した時に呼ばれ、コンポーネントインスタンスはそのコールバックの引数として渡されます。 - -``` js -beforeRouteEnter (to, from, next) { - next(vm => { - // `vm` を通じてコンポーネントインスタンスにアクセス - }) -} -``` - -コールバックを `next` に渡すことをサポートするのは、`beforeRouteEnter` ガードだけであるということに注意してください。`beforeRouteUpdate` と `beforeRouteLeave` の場合、 `this` は既に利用可能です。したがって、コールバックを渡す必要はないので、*サポートされません*: - -```js -beforeRouteUpdate (to, from, next) { - // `this` を使用 - this.name = to.params.name - next() -} -``` - -**leave ガード**は、通常、ユーザが保存されていない編集内容で誤って経路を離れるのを防ぐために使用されます。ナビゲーションは `next(false)` を呼び出すことで取り消すことができます。 - -```js -beforeRouteLeave (to, from , next) { - const answer = window.confirm('Do you really want to leave? you have unsaved changes!') - if (answer) { - next() - } else { - next(false) - } -} -``` - -### 完全なナビゲーション解決フロー -1. ナビゲーションがトリガされる -2. 非アクティブ化されたコンポーネントで leave ガードを呼ぶ -3. グローバル `beforeEach` ガードを呼ぶ -4. 再利用されるコンポーネントで `beforeRouteUpdate` ガードを呼ぶ (2.2 以降) -5. ルート設定内の `beforeEnter` を呼ぶ -6. 非同期ルートコンポーネントを解決する -7. アクティブ化されたコンポーネントで `beforeRouteEnter` を呼ぶ -8. グローバル `beforeResolve` ガードを呼ぶ (2.5 以降) -9. ナビゲーションが確定される -10. グローバル `afterEach` フックを呼ぶ -11. DOM 更新がトリガされる -12. インスタンス化されたインスンタンスによって `beforeRouteEnter` ガードで `next` に渡されたコールバックを呼ぶ diff --git a/docs-gitbook/ja/advanced/scroll-behavior.md b/docs-gitbook/ja/advanced/scroll-behavior.md deleted file mode 100644 index ffb475573..000000000 --- a/docs-gitbook/ja/advanced/scroll-behavior.md +++ /dev/null @@ -1,81 +0,0 @@ -# スクロールの振る舞い - -クライアントサイドのルーティングを使っている時に、新しいルートに対してスクロールをトップへ移動させたいかもしれません、もしくは実際のページリロードがしているように history 要素のスクロールポジションを保持したいこともあるかもしれません。 `vue-router` ではこれらをさらによく実現できます。ルートナビゲーションにおけるスクロールの挙動を完全にカスタマイズすることができます。 - -**注意: この機能は ブラウザが `history.pushState` をサポートしている場合のみ動作します。** - -ルーターインスタンスを作る時に、 `scrollBehavior` 関数を提供できます。 - -``` js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // 望みのポジションを返す - } -}) -``` - -`scrollBehavior` 関数は `to` と `from` のルートオブジェクトを受け取ります。第 3 引数の `savedPosition` は `popstate` ナビゲーション (ブラウザの戻る/進むボタンがトリガーされた) 時のみ利用可能です。 - -この関数はスクロールポジションオブジェクトを返すことができます。そのオブジェクトは以下のような形式です。 - -- `{ x: number, y: number }` -- `{ selector: string }` -- `{ selector: string, offset? : { x: number, y: number }}` (2.6.0 以降においてだけ offset はサポート) - -もし falsy な値や空のオブジェクトが返った場合、何もスクロールは起きません。 - -例: - -``` js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -これは単純に全てのルートナビゲーションに対してページスクロールをトップにします。 - -`savedPosition` を返すことは結果的に戻る/進むボタンを押してナビゲーションした時にネイティブのような挙動になります。 - -``` js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -もし"アンカーへスクロール"の振る舞いをシミュレートしたい場合は以下のようにしてください。 - -``` js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -きめの細かいスクロールの挙動コントロールを実装するために [ルートメタフィールド](meta.md) も利用可能です。詳細な例は [こちら](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js) をご参照ください。 - -### 非同期なスクローリング - -> 2.8.0 で新規 - -期待する位置記述子 (position descriptor) に解決されるプロミスを返すこともできます: - -``` js -scrollBehavior (to, from, savedPosition) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ x: 0, y: 0 }) - }, 500) - }) -} -``` - -スクロールの振る舞いをページの遷移とうまく合わせるために、ページレベルのトランジションコンポーネントからのイベントにフックすることは可能ですが、ユースケースにおいて可能性のある食い違いと複雑さのために、単純に特定のユーザランド実装を可能にするために、このプリミティブな機能を提供します。 diff --git a/docs-gitbook/ja/advanced/transitions.md b/docs-gitbook/ja/advanced/transitions.md deleted file mode 100644 index 75e9d5b5e..000000000 --- a/docs-gitbook/ja/advanced/transitions.md +++ /dev/null @@ -1,58 +0,0 @@ -# トランジション - -基本的に `<router-view>` は動的コンポーネントなので、 `<transition>` コンポーネントを使うのと同じ方法でトランジションを適用することができます。 - -``` html -<transition> - <router-view></router-view> -</transition> -``` - -[`<transition>` についての全て](http://jp.vuejs.org/guide/transitions.html) はここでも動作します。 - -### ルート単位のトランジション - -上記の使い方では全てのトランジションが全てのルートに対して適用されます。もし各ルートコンポーネントにそれぞれ違うトランジションを持たせたい場合は、代わりにルーターコンポーネント内で異なる名前で `<transition>` を使うことができます。 - -``` js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -### ルートベースの動的トランジション - -対象のルートと現在のルートの関係を元に動的にトランジションを決定することも可能です。 - -``` html -<!-- 動的なトランジション名の使用 --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -``` js -// そして親コンポーネントの中で、 -// `$route` を watch して使用するトランジションを決定します -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -完全な例は [こちら](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js) をご参照ください。 diff --git a/docs-gitbook/ja/api/component-injections.md b/docs-gitbook/ja/api/component-injections.md deleted file mode 100644 index b15482024..000000000 --- a/docs-gitbook/ja/api/component-injections.md +++ /dev/null @@ -1,21 +0,0 @@ -# コンポーネント注入 - -### 注入されるプロパティ - -ルーターインスタンスを root インスタンスに `router` オプションとして渡すことによって、全ての子コンポーネントに以下のプロパティが注入されます。 - -- #### $router - - ルーターインスタンス - -- #### $route - - 現在のアクティブな [ルート](route-object.md) 。このプロパティは読み出しのみ可能かつ変更不可ですが、watch は可能です。 - -### 有効になるオプション - -- **beforeRouteEnter** -- **beforeRouteUpdate** (2.2 で追加) -- **beforeRouteLeave** - - [コンポーネント内ガード](../advanced/navigation-guards.md#incomponent-guards) をご参照ください。 diff --git a/docs-gitbook/ja/api/options.md b/docs-gitbook/ja/api/options.md deleted file mode 100644 index 0012cf81a..000000000 --- a/docs-gitbook/ja/api/options.md +++ /dev/null @@ -1,107 +0,0 @@ -# ルーターコンストラクタオプション - -### routes - -- 型: `Array<RouteConfig>` - - `RouteConfig` の型宣言: - - ``` js - declare type RouteConfig = { - path: string; - component?: Component; - name?: string; // 名前付きルート用 - components?: { [name: string]: Component }; // 名前付き view 用 - redirect?: string | Location | Function; - props?: boolean | string | Function; - alias?: string | Array<string>; - children?: Array<RouteConfig>; // ネストされたルート用 - beforeEnter?: (to: Route, from: Route, next: Function) => void; - meta?: any; - - // 2.6.0+ - caseSensitive?: boolean; // センシティブマッチをケースとして使用するかどうか? (デフォルト: false) - pathToRegexpOptions?: Object; // 正規表現のコンパイルとして path-to-regexp オプション - } - ``` - -### mode - -- 型: `string` - -- デフォルト: `"hash" (in browser) | "abstract" (in Node.js)` - -- 利用可能な値: `"hash" | "history" | "abstract"` - - ルーターモードの設定。 - - - `hash`: ルーティングに URL hash を使います。HTML5 History API をサポートしていないブラウザ含めて、全ての Vue がサポートしているブラウザで動作します。 - - - `history`: HTML5 History API とサーバーの設定が必要です。[HTML5 History モード](../essentials/history-mode.md) を参照してください。 - - - `abstract`: 全ての JavaScript の環境で動作します。 e.g. Node.js を使ったサーバーサイド。 **もしブラウザの API が存在しない場合、ルーターは自動的にこのモードに強制されます。** - -### base - -- 型: `string` - -- デフォルト: `"/"` - - アプリケーションのベース URL です。例えば、 `/app/` 配下で完全なシングルページアプリケーションを提供する場合、 `base` は `"/app/"` の値が使われるべきです。 - -### linkActiveClass - -- 型: `string` - -- デフォルト: `"router-link-active"` - - グローバルに設定される `<router-link>` のデフォルトのアクティブクラスです。こちらの [router-link](router-link.md) も参照してください。 - -### linkExactActiveClass - -> 2.5.0+ - -- 型: `string` - -- デフォルト: `"router-link-exact-active"` - - 完全一致に対してグローバルな `<router-link>` デフォルトアクティブクラスを設定します。[router-link](router-link.md) も参照してください。 - -### scrollBehavior - -- 型: `Function` - - シグネチャ: - - ``` - type PositionDescriptor = - { x: number, y: number } | - { selector: string } | - ?{} - - type scrollBehaviorHandler = ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => PositionDescriptor | Promise<PositionDescriptor> - ``` - - より詳細については [スクロールの振る舞い](../advanced/scroll-behavior.md) を参照してください。 - -### parseQuery / stringifyQuery - -> 2.4.0+ - -- 型: `Function` - - カスタムクエリ構文解析関数 / 文字列化関数を提供します。デフォルトを上書きします。 - -### fallback - -> 2.6.0+ - -- 型: `boolean` - - ブラウザが `history.pushState` をサポートしないとき、 ルーターが `hash` モードにフォールバックかどうか制御します。デフォルトは `true` - - これを `false` に設定すると、本質的に全ての `router-link` ナビゲーションが IE9 においてフルページリフレッシュになります。これは、サーバサイドレンダリングでハッシュモードの URL が機能しないため、IE9 で動作する必要がある場合に便利です。 diff --git a/docs-gitbook/ja/api/route-object.md b/docs-gitbook/ja/api/route-object.md deleted file mode 100644 index 143ba6a75..000000000 --- a/docs-gitbook/ja/api/route-object.md +++ /dev/null @@ -1,91 +0,0 @@ -# ルートオブジェクト - -**ルートオブジェクト**は現在のアクティブなルートの状態を表現しています。現在の URL をパースした情報と、その URL とマッチした**ルートレコード**を保持しています。 - -ルートオブジェクトは変更不可です。成功した全てのナビゲーションは結果的に新たなルートオブジェクトになります。 - -ルートオブジェクトは複数の場所に存在します。 - -- コンポーネント内での `this.$route`、また、 `$route` watcher コールバック内部。 - -- `router.match(location)` を呼び出した時の返り値。 - -- ナビゲーションガード内での第 1 引数、第 2 引数として: - - ``` js - router.beforeEach((route, redirect, next) => { - // `to` と `from` は両方ともルートオブジェクト - }) - ``` - -- `scrollBehavior` 関数内の第 1 引数、第 2 引数として: - - ``` js - const router = new VueRouter({ - scrollBehavior (to, from, savedPosition) { - // `to` と `from` は両方ともルートオブジェクト - } - }) - ``` - -### ルートオブジェクトプロパティ - -- **$route.path** - - - 型: `string` - - 現在のルートのパスに等しい文字列。常に絶対パスとして解釈されます。e.g. `"/foo/bar"` - -- **$route.params** - - - 型: `Object` - - 動的セグメントとスターセグメントの key/value ペアを保持するオブジェクト。もしパラメーターがない場合、この値は空オブジェクトになります。 - -- **$route.query** - - - 型: `Object` - - クエリ文字列の key/value ペアを保持するオブジェクト。例えば `/foo?user=1` というパスの場合、`$route.query.user == 1` となります。もしクエリがない場合は、この値は空オブジェクトになります。 - -- **$route.hash** - - - 型: `string` - - hash がある時の現在のルートの hash (# 有り) です。もし hash がない場合、この値は空オブジェクトになります。 - -- **$route.fullPath** - - - 型: `string` - - クエリや hash を含む完全に解決された URL です。 - -- **$route.matched** - - - 型: `Array<RouteRecord>` - - 現在のルートのネストされた全パスセグメントに対しての**ルートレコード** を保持している配列です。ルートレコードは `routes` 設定の配列 (と `children` 配列) 内のオブジェクトのコピーです。 - - ``` js - const router = new VueRouter({ - routes: [ - // 以下のオブジェクトがルートレコード - { path: '/foo', component: Foo, - children: [ - // こちらもルートレコード - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - URL が `/foo/bar` である時、 `$route.matched` は親から子の順番で両方の (クローンされた) オブジェクトを含む配列になります。 - -- **$route.name** - - 名前がある場合の現在のルートの名前です。(詳しくは [名前付きルート](../essentials/named-routes.md) をご参照ください) - -- **$route.redirectedFrom** - - もしあれば、リダイレクト元の名前。(参照[リダイレクトとエイリアス](../essentials/redirect-and-alias.md)) diff --git a/docs-gitbook/ja/api/router-instance.md b/docs-gitbook/ja/api/router-instance.md deleted file mode 100644 index 233265068..000000000 --- a/docs-gitbook/ja/api/router-instance.md +++ /dev/null @@ -1,88 +0,0 @@ -# ルーターインスタンス - -### プロパティ - -#### router.app - -- 型: `Vue インスタンス` - - `router` が注入される root の Vue インスタンス - -#### router.mode - -- 型: `string` - - ルーターが使う [モード](options.md#mode) 。 - -#### router.currentRoute - -- 型: `Route` - - [ルーターオブジェクト](route-object.md) として表される現在のルート。 - -### メソッド - -- **router.beforeEach(guard)** -- **router.beforeResolve(guard)** (2.5.0+) -- **router.afterEach(hook)** - - グローバルなナビゲーションガードの追加。[ナビゲーションガード](../advanced/navigation-guards.md) をご参照ください。 - - 2.5.0 以降では、3 つのメソッドすべてが、登録されたガード/フックを削除する関数を返します。 - -- **router.push(location, onComplete?, onAbort?)** -- **router.replace(location, onComplete?, onAbort?)** -- **router.go(n)** -- **router.back()** -- **router.forward()** - - プログラムによる新しい URL へのナビゲーション。 [プログラムによるナビゲーション](../essentials/navigation.md) をご参照ください。 - -- **router.getMatchedComponents(location?)** - - 現在のルートまたは提供されたロケーションにマッチしているコンポーネント (インスタンスではなく定義 / コンストラクタ) の配列を返します。これは大抵の場合データ取得を行うサーバーサイドレンダリングで使用されます。 - -- **router.resolve(location, current?, append?)** - - > 2.1.0+ - - 逆 URL 解決します。`<router-link/>` で使われているものと同じ形式の location が与えられた場合は、以下の解決されたプロパティを返します。 - - ``` js - { - location: Location; - route: Route; - href: string; - } - ``` - - - `current` はデフォルトによる現在のルートです(ほとんどの場合、これを変更する必要はありません) - - `append` は `current` ルートにパスを追加できます([`router-link`](https://router.vuejs.org/en/api/router-link.html#props)と同様に) - -- **router.addRoutes(routes)** - - > 2.2.0+ - - 動的にルートをルーターに追加します。引数は `routes` コンストラクタオプションで同じルート設定形式を使用する配列でなければなりません。 - -- **router.onReady(callback, [errorCallback])** - - > 2.2.0+ - - このメソッドは、ルーターが初期ナビゲーションを完了したときに呼び出されるコールバックをキューに入れます。つまり、初期ルートに関連付けられているすべての非同期 enter フックと非同期コンポーネントを解決したことを意味します。 - - これは、サーバーとクライアントの両方で一貫した出力を保証するために、サーバーサイドレンダリングに役立ちます。 - - 第 2 引数 `errorCallback` は 2.4 以降でのみサポートされます。初期ルート解決がエラーの時に、呼び出されます (例: 非同期コンポーネントの解決が失敗)。 - -- **router.onError(callback)** - - > 2.4.0+ - - ルートナビゲーション中にエラーが検出されたときに呼び出されるコールバックを登録します。エラーを呼び出すには、次のいずれかのシナリオが必要であることに注意してください: - - - エラーがルートガード関数内で同期的に投げられる; - - - エラーが補足され、ルートガード関数内で `next(err)` を呼び出すことによって非同期に処理される; - - - ルートを描画するために必須な非同期コンポーネントを解決しようとする時に発生したエラー; diff --git a/docs-gitbook/ja/api/router-link.md b/docs-gitbook/ja/api/router-link.md deleted file mode 100644 index aa1590447..000000000 --- a/docs-gitbook/ja/api/router-link.md +++ /dev/null @@ -1,138 +0,0 @@ -# `<router-link>` - -`<router-link>` はルーターが使用可能になっているアプリケーションでユーザーのナビゲーションを有効にするためのコンポーネントです。対象とする location は `to` プロパティを使って指定します。デフォルトでは正しい `href` と共に `<a>` タグとして描画しますが、 `tag` プロパティを設定することも可能です。さらに、対象のルートがアクティブの時に、そのリンクは自動的にアクティブな CSS クラスが当てられます。 - -下記の理由により `<router-link>` はハードコードする `<a href="...">` よりも好ましいです。 - -- HTML5 history モードでも hash モードでも同じ方法で動作します。もしあなたがモードを切り替えたりする場合や、IE9 で hash モードにフォールバックする場合に、何も変更する必要はありません。 - -- HTML5 history モードにおいて、ブラウザがページのリロードをしないように `router-link` はクリックイベントに割り込みます。 - -- HTML5 history モードで `base` オプションを使っている時に、 `to` プロパティの URL にそれを含める必要がありません。 - -### プロパティ - -- **to** - - - 型: `string | Location` - - - 必須 - - リンクする対象のルートを表します。クリックされた時に `to` プロパティの値が内部的に `router.push()` に渡されます。つまり、この値は文字列でも location を記述するオブジェクトでも構いません。 - - ``` html - <!-- 文字列 --> - <router-link to="home">Home</router-link> - <!-- 次のように描画される --> - <a href="home">Home</a> - - <!-- `v-bind` を使った javascript 式--> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- 他のプロパティのバインディングのような `v-bind` の省略表現 --> - <router-link :to="'home'">Home</router-link> - - <!-- 上記と同じ --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- 名前付きルート --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- 結果的に `/register?plan=private` になるクエリ--> - <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link> - ``` - -- **replace** - - - 型: `boolean` - - - デフォルト: `false` - - `replace` プロパティを設定するとクリックされた時に `router.push()` の代わりに `router.replace()` が呼ばれます。したがって、ナビゲーションは history レコードに残りません。 - - ``` html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -- **append** - - - 型: `boolean` - - - デフォルト: `false` - - `append` プロパティを設定すると現在のパスに対して常に相対パスを追加します。例えば、 `/a` から相対リンクの `b` へ遷移するのを想定した時に、 `append` がない場合は `/b` に、`append` がある場合は `/a/b` になります。 - - ``` html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -- **tag** - - - 型: `string` - - - デフォルト: `"a"` - - しばしば `<router-link>` を `<li>` などの他のタグとして描画したい時があるでしょう。そこで、どのタグとして描画するかを指定するために `tag` プロパティを使うことができます。そして、依然ナビゲーションのためのクリックイベントを listen します。 - - ``` html - <router-link to="/foo" tag="li">foo</router-link> - <!-- 以下のように描画されます --> - <li>foo</li> - ``` - -- **active-class** - - - 型: `string` - - - デフォルト: `"router-link-active"` - - リンクがアクティブな時に適用されるアクティブ CSS クラスの設定です。デフォルト値はルーターコンストラクタオプションの `linkActiveClass` でグローバルに設定可能です。 - -- **exact** - - - 型: `boolean` - - - デフォルト: `false` - - デフォルトのアクティブクラスのマッチングの振る舞いは **包含的なマッチ** です。 例えば、現在のパスが `/a/` または `/a` から始まる限りは、`<router-link to="/a">` にアクティブクラスが適用されます。 - - この結果として `<router-link to="/">` は全てのルートに対してアクティブになります! リンクに対して "正確なマッチモード" を強制するために、 `exact` プロパティを使ってください。 - - ``` html - <!-- このリンクは `/` だけにアクティブになります --> - <router-link to="/" exact> - ``` - - アクティブリンククラスをより説明している例としてこちらの [動作](https://jsfiddle.net/8xrk1n9f/) を確認してください。 - -- **event** - - > 2.1.0+ - - - 型: `string | Array<string>` - - - デフォルト: `'click'` - - リンクナビゲーションをトリガーできるイベントを指定します。 - -- **exact-active-class** - - > 2.5.0+ - - - 型 `string` - - - デフォルト: `"router-link-exact-active"` - - 完全一致によってリンクがアクティブになっているときに適用されるアクティブな CSS クラスを設定します。デフォルト値は `linkExactActiveClass` ルーターコンストラクタのオプション経由でグローバルに設定することもできます。 - -### 外側の要素へのアクティブクラスの適用 - -アクティブクラスを `<a>` タグ自身よりも、外側の要素に対して適用したいことがあるでしょう。その場合、 `<router-link>` を使って外側の要素を描画して、その内側に生の `<a>` タグをラップすることができます。 - -``` html -<router-link tag="li" to="/foo"> - <a>/foo</a> -</router-link> -``` - -この時、 `<a>` は実際のリンクになります (そして正しい `href` が得られます)。しかし、アクティブクラスは外側の `<li>` に適用されます。 diff --git a/docs-gitbook/ja/api/router-view.md b/docs-gitbook/ja/api/router-view.md deleted file mode 100644 index 14dcd1395..000000000 --- a/docs-gitbook/ja/api/router-view.md +++ /dev/null @@ -1,27 +0,0 @@ -# `<router-view>` - -`<router-view>` コンポーネントは与えられたパスに対してマッチしたコンポーネントを描画する関数型コンポーネントです。`<router-view>` の中で描画されるコンポーネント自身もまた、ネストされたパスに対してコンポーネントを描画するための `<router-view>` を持つことができます。 - -### プロパティ - -- **name** - - - 型: `string` - - - デフォルト: `"default"` - - `<router-view>` が名前を持つ時、マッチしたルートレコードの `components` オプション内で対応する名前のコンポーネントを描画します。例は [名前付きビュー](../essentials/named-views.md) をご参照ください。 - -### 振る舞い - -name ではないプロパティも描画されるコンポーネントに渡されますが、ほとんどの場合ルート単位のデータはルートのパラメーターに含まれています。 - -これは普通のコンポーネントなので、 `<transition>` と `<keep-alive>` と共に動作します。両方を同時に使用する場合は `<keep-alive>` を内側にするようにしてください。 - -``` html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` diff --git a/docs-gitbook/ja/essentials/dynamic-matching.md b/docs-gitbook/ja/essentials/dynamic-matching.md deleted file mode 100644 index a7e55c6a0..000000000 --- a/docs-gitbook/ja/essentials/dynamic-matching.md +++ /dev/null @@ -1,74 +0,0 @@ -# 動的ルートマッチング - -パターンを使って同じコンポーネントにルートをマップする必要がしばしばあるでしょう。例えば、 `User` コンポーネントは全てのユーザーに対して描画されるべきであるが、それぞれ異なるユーザー ID を持つ場合などです。`vue-router` ではパスの中の動的なセグメントを使用して実現できます。 - -``` js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // コロンで始まる動的セグメント - { path: '/user/:id', component: User } - ] -}) -``` - -これで `/user/foo` や `/user/bar` などの URL 両方とも同じルートにマッチします。 - -動的セグメントはコロン `:` を使って表されます。ルートがマッチした時、この動的セグメントの値は全てのコンポーネント内で `this.$route.params` として利用可能になります。したがって、現在の `User` のテンプレートを次のように更新することで現在のユーザー ID を表示することができます。 - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -``` - -[こちら](https://jsfiddle.net/yyx990803/4xfa2f19/) のデモの例も確認してみてください。 - -1 つのルートが複数の動的なセグメントを持つこともできます。そして、それらは `$route.params` の一致したフィールドとマップされます。例: - -| パターン | マッチしたパス | $route.params | -|---------|------|--------| -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -`$route.params` に加えて、`$route` オブジェクトでは `$route.query` (もし URL 上にクエリがあるなら) や `$route.hash` など便利な情報も利用可能です。それらの詳細については [API リファレンス](../api/route-object.md) でご確認ください。 - -### パラメーター変更の検知 - -ルートのパラメーターを使う際に特筆すべき点は、ユーザーが `/user/foo` から `/user/bar` へ遷移するときに**同じコンポーネントインスタンスが再利用される**ということです。 両方のルートが同じコンポーネントを描画するため、古いインスタンスを破棄して新しいものを生成するよりも効率的です。**しかしながら、これはコンポーネントのライフサイクルフックが呼ばれないことを意味しています。** - -同じコンポーネントでパラメーター変更を検知するためには、 `$route` オブジェクトを watch するだけです。 - -``` js -const User = { - template: '...', - watch: { - '$route' (to, from) { - // ルートの変更の検知... - } - } -} -``` - -または、2.2 で導入された `beforeRouteUpdate` ガードを使用します: - -``` js -const User = { - template: '...', - beforeRouteUpdate (to, from, next) { - // ルート変更に反応する... - // next() を呼び出すのを忘れないでください - } -} -``` - -### 高度なマッチングパターン - -`vue-router` はパスのマッチングエンジンとして [path-to-regexp](https://github.com/pillarjs/path-to-regexp) を使っています。これは Optional による動的なセグメント、Zero or more / One or more に対する要求、また、カスタム正規表現パターンまでもサポートしています。 これらの高度なパターンについてはこちらの [ドキュメンテーション](https://github.com/pillarjs/path-to-regexp#parameters) または、 `vue-router` の中でそれらを使っている [こちらの例](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) をご参照ください。 - -### マッチングの優先度 - -しばしば同じURLで複数のルートがマッチすることがあります。そのようなケースではマッチングの優先度はルートの定義された順番によって決定されます。先に定義されたルートほど優先度が高くなります。 diff --git a/docs-gitbook/ja/essentials/getting-started.md b/docs-gitbook/ja/essentials/getting-started.md deleted file mode 100644 index f6abe57ff..000000000 --- a/docs-gitbook/ja/essentials/getting-started.md +++ /dev/null @@ -1,93 +0,0 @@ -# はじめに - -> ガイド内のコードのサンプルは [ES2015](https://github.com/lukehoban/es6features) を使っています。 - -Vue.js と vue-router を使ったシングルページアプリケーションの構築は驚くほど簡単です。Vue.js のコンポーネントを使ってアプリケーションを既に構成しています。vue-router を混ぜ込むには、コンポーネントとルートをマッピングさせて vue-router にどこで描画するかを知らせるだけです。以下が基本的な例です。 - -> すべての example では、vue の完全バージョンを使用してテンプレートを解析可能にしています。詳細は[こちら](https://jp.vuejs.org/v2/guide/installation.html#ランタイム-コンパイラとランタイム限定の違い)を参照してください。 - -### HTML - -``` html -<script src="https://unpkg.com/vue/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- ナビゲーションに router-link コンポーネントを使う --> - <!-- リンク先を `to` プロパティに指定します --> - <!-- デフォルトで `<router-link>` は `<a>` タグとして描画されます --> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- ルートアウトレット --> - <!-- ルートとマッチしたコンポーネントがここへ描画されます --> - <router-view></router-view> -</div> -``` - -### JavaScript - -``` js -// 0. モジュールシステムを使っている場合 (例: vue-cli 経由で)、Vue と VueRouter をインポートし、`Vue.use(VueRouter)` を呼び出します。 - -// 1. ルートコンポーネントを定義します -// 他のファイルからインポートすることもできます -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. ルートをいくつか定義します -// 各ルートは 1 つのコンポーネントとマッピングされる必要があります。 -// このコンポーネントは実際の `Vue.extend()`、 -// またはコンポーネントオプションのオブジェクトでも構いません。 -// ネストされたルートに関しては後で説明します -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. ルーターインスタンスを作成して、ルートオプションを渡します -// 追加のオプションをここで指定できますが、 -// この例ではシンプルにしましょう -const router = new VueRouter({ - routes // `routes: routes` の短縮表記 -}) - -// 4. root となるインスタンスを作成してマウントします -// アプリケーション全体がルーターを認知できるように、 -// ルーターをインジェクトすることを忘れないでください。 -const app = new Vue({ - router -}).$mount('#app') - -// これで開始です! -``` - -ルーターを注入することによって、`this.$router` と同様、任意のコンポーネント内部で現在のルートを `this.$route` としてアクセスすることができます: - -```js -// Home.vue -export default { - computed: { - username () { - // `params` が表示される - return this.$route.params.username - } - }, - methods: { - goBack () { - window.history.length > 1 - ? this.$router.go(-1) - : this.$router.push('/') - } - } -} -``` - -ドキュメントを通して、しばしば `router` インスタンスを使用することがよくあります。`this.$router` は `router` を使用するのと全く同じです。`this.$router` を使用する理由は、ルーティング操作する必要がある全てのコンポーネントにルーターをインポートしたくないからです。 - -[動作](https://jsfiddle.net/yyx990803/xgrjzsup/) の例も確認してみてください. - -`<router-link>` は対象のルートがマッチした時に自動的に `.router-link-active` が付与されるのにお気づきでしょうか。 -より詳細については [API リファレンス](../api/router-link.md) をご参照ください。 diff --git a/docs-gitbook/ja/essentials/history-mode.md b/docs-gitbook/ja/essentials/history-mode.md deleted file mode 100644 index 26081d159..000000000 --- a/docs-gitbook/ja/essentials/history-mode.md +++ /dev/null @@ -1,138 +0,0 @@ -# HTML5 History モード - -`vue-router` のデフォルトは _hash モード_ です - 完全な URL を hash を使ってシミュレートし、 URL が変更された時にページのリロードが起きません。 - -その hash を取り除くために、ページのリロード無しに URL 遷移を実現する `history.pushState` API を利用したルーターの **history モード** を使うことができます。 - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -history モードを使用する時は、URL は "普通" に見えます e.g. `http://oursite.com/user/id`。美しいですね! - -しかしながら一点問題があります。シングルページのクライアントサイドアプリケーションなので、適切なサーバーの設定をしないと、ユーザーがブラウザで直接 `http://oursite.com/user/id` にアクセスした場合に 404 エラーが発生します。 - -心配する必要はありません。この問題を直すためには、単純な catch-all フォールバックのためのルートをサーバー側で追加するだけです。もし URL がどの静的なアセットにもマッチしなかった時はあなたのアプリケーションが動作しているのと同じ `index.html` ページで受け付けましょう。これも美しいですね! - -## サーバーの設定例 - -#### Apache - -```apache -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -`mod_rewrite`の代わりに、[`FallbackResource`](https://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource) も使用することができます。 - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Native Node.js - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http.createServer((req, res) => { - fs.readFile('index.htm', 'utf-8', (err, content) => { - if (err) { - console.log('We cannot open "index.htm" file.') - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) -}).listen(httpPort, () => { - console.log('Server listening on: http://localhost:%s', httpPort) -}) -``` - -#### Node.js (Express) - -Node.js/Express では [connect-history-api-fallback middleware](https://github.com/bripkens/connect-history-api-fallback) の利用を検討してください。 - -#### Internet Information Services (IIS) - -1. [IIS UrlRewrite](https://www.iis.net/downloads/microsoft/url-rewrite) をインストール -2. 以下によるサイトのルートディレクトリに `web.config` ファイルを作成 - -``` xml -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="/" /> - </rule> - </rules> - </rewrite> - </system.webServer> -</configuration> -``` - -#### Caddy - -``` -rewrite { - regexp .* - to {path} / -} -``` - -#### Firebase のホスティング - -以下を `firebase.json` に追加します: - -``` -{ - "hosting": { - "public": "dist", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} -``` - -## 注意 - -この点に関して注意があります。全ての not-found パスが `index.html` を提供するため、もはや 404 エラーをサーバーがレポートしなくなります。回避策として、Vue アプリケーション内で 404 ページを表示するために catch-all ルートを実装すべきです。 - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [ - { path: '*', component: NotFoundComponent } - ] -}) -``` - -他の方法として、もしあなたが Node.js サーバーを使っている場合、入ってきた URL とマッチさせて、マッチしなかった場合に 404 を返答するサーバーサイドのルーターを使って fallback を実装することもできます。詳細については [Vue サーバサイドレンダリングのドキュメント](https://ssr.vuejs.org/ja/) を参照してください。 diff --git a/docs-gitbook/ja/essentials/named-routes.md b/docs-gitbook/ja/essentials/named-routes.md deleted file mode 100644 index 24946a609..000000000 --- a/docs-gitbook/ja/essentials/named-routes.md +++ /dev/null @@ -1,31 +0,0 @@ -# 名前付きルート - -しばしば、名前を使ってルートを特定できるとより便利です。特にルートにリンクするときやナビゲーションを実行するときなどです。Router インスタンスを作成するときに `routes` オプションの中でルートに名前を付けることができます。 - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -名前を付けたルートにリンクするには、 `router-link` コンポーネントの `to` プロパティにオブジェクトを渡します。 - -``` html -<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> -``` - -これはプログラムで `router.push()` を呼び出すときに使われるオブジェクトと全く同じです。 - -``` js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -どちらのケースもルーターは `/user/123` のパスにナビゲーションします。 - -完全な例は [こちら](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js) です。 diff --git a/docs-gitbook/ja/essentials/named-views.md b/docs-gitbook/ja/essentials/named-views.md deleted file mode 100644 index 7cc117cab..000000000 --- a/docs-gitbook/ja/essentials/named-views.md +++ /dev/null @@ -1,86 +0,0 @@ -# 名前付きビュー - -しばしば、ネストをさせずに同時に複数の view を表示する必要があるでしょう。例えば、`sidebar` view と `main` view を使ったレイアウトを作成する時です。そんな時に名前付きビューは便利です。あなたの view に 1 つのアウトレットを持つのではなく、複数のそれぞれが名前付きの view を持つことができます。名前を持たない `router-view` はその名前として `default` が付与されます。 - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -1 つの view は 1 つのコンポーネントを使って描画されます。したがって、同じルートに対する複数の view には複数のコンポーネントが必須になります。この `components` (s が付いている) オプションに注意してください。 - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -この例の動作しているデモは -[こちら](https://jsfiddle.net/posva/6du90epg/) です。 - -## ネストされた名前付きビュー - -ネストされたビューを持つ名前付きビューを使用して複雑なレイアウトを作成することができます。そうする際に、ネストされた `router-view` コンポーネントを使用するために名前をつける必要があります。設定パネルの例を見てみましょう: - -``` -/settings/emails /settings/profile -+-----------------------------------+ +------------------------------+ -| UserSettings | | UserSettings | -| +-----+-------------------------+ | | +-----+--------------------+ | -| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | -| | +-------------------------+ | | | +--------------------+ | -| | | | | | | | UserProfilePreview | | -| +-----+-------------------------+ | | +-----+--------------------+ | -+-----------------------------------+ +------------------------------+ -``` - -- `Nav` は普通のコンポーネントです -- `UserSettings` はビューコンポーネントです -- `UserEmailsSubscriptions` 、`UserProfile` 、`UserProfilePreview` はネストされたビューコンポーネントです - -**Note**: _そのようなレイアウトに HTML/CSS がどのように表示されるのか、そして使用されるコンポーネントに焦点を当てる方法については、ここでは忘れましょう_ - -上記レイアウトでの `UserSettings` コンポーネントの `<template>` セクションは次のようになります: - -```html -<!-- UserSettings.vue --> -<div> - <h1>User Settings</h1> - <NavBar/> - <router-view/> - <router-view name="helper"/> -</div> -``` - -_ここではネストされたビューコンポーネントは省略されていますが、上記例の完全なソースコードを[ここ](https://jsfiddle.net/posva/22wgksa3/)で見ることができます_ - -それから、以下のルート設定で上記のレイアウトを表現することができます: - -```js -{ path: '/settings', - // トップで名前付きビューを持つこともできます - component: UserSettings, - children: [{ - path: 'emails', - component: UserEmailsSubscriptions - }, { - path: 'profile', - components: { - default: UserProfile, - helper: UserProfilePreview - } - }] -} -``` - -この例の動作するデモは、[ここ](https://jsfiddle.net/posva/22wgksa3/)に見ることができます。 diff --git a/docs-gitbook/ja/essentials/navigation.md b/docs-gitbook/ja/essentials/navigation.md deleted file mode 100644 index e1c9a69a5..000000000 --- a/docs-gitbook/ja/essentials/navigation.md +++ /dev/null @@ -1,87 +0,0 @@ -# プログラムによるナビゲーション - -宣言的なナビゲーションとしてアンカータグを作成する `<router-link>` がありますが、ルーターのインスタンスメソッドを使ったプログラムによる方法でもそれは可能です。 - -#### `router.push(location, onComplete?, onAbort?)` - -**注意: Vue インスタンスの内部では、`$router` としてルーターインスタンスにアクセスできます。従って、`this.$router.push` で呼ぶことができます。** - -異なる URL へ遷移するときに `router.push` が使えます。このメソッドは history スタックに新しいエントリを追加します。それによってユーザーがブラウザの戻るボタンをクリックした時に前の URL に戻れるようになります。 - - -このメソッドは `<router-link>` をクリックした時に内部的に呼ばれています。つまり `<router-link :to="...">` をクリックすることは `router.push(...)` を呼ぶことと等価です。 - -| 宣言的 | プログラム的 | -|-------------|--------------| -| `<router-link :to="...">` | `router.push(...)` | - -引数は文字列のパス、もしくは、location を記述するオブジェクトが使えます。例: - -``` js -// 文字列パス -router.push('home') - -// オブジェクト -router.push({ path: 'home' }) - -// 名前付きルート -router.push({ name: 'user', params: { userId: 123 }}) - -// 結果的に /register?plan=private になる query -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -**注意**: `params` は、上記例に示すように、`path` が提供されている場合は無視されます。これは `query` に対するケースとは異なります。 -代わりに、ルートの `name` か任意のパラメータを付与した `path` 全体を手動で指定する必要があります: - -```js -const userId = 123 -router.push({ name: 'user', params: { userId }}) // -> /user/123 -router.push({ path: `/user/${userId}` }) // -> /user/123 -// これは動作"しません" -router.push({ path: '/user', params: { userId }}) // -> /user -``` - -同じルールが、`router-link` コンポーネントの `to` プロパティに対して適用されます。 - -2.2.0 以降では、必要に応じて、第 2 引数と第 3 引数として `router.push` または `router.replace` に `onComplete` と `onAbort` コールバックを指定します。これらのコールバックは、ナビゲーションが正常に完了したとき(すべての非同期フックが解決された後)に呼び出されるか、またはそれぞれ中止されます(現在のナビゲーションが終了する前に同じルートまたは別のルートにナビゲートされた) - -**注意:** ルートの行き先が現在のルートと同じで、かつパラメータのみが変更されている場合(例: `/users/1` -> `/users/2` のようにあるプロファイルから他へ)、変更(例: ユーザー情報の取得など)に反応するために[beforeRouteUpdate](./dynamic-matching.html#パラメーター変更の検知) を使用しなければなりません。 - -#### `router.replace(location, onComplete?, onAbort?)` - -これは `router.push` のように動作しますが、異なる点は新しい history エントリを追加しないで遷移することです。この名前から推定されるように、現在のエントリを置換します。 - -| 宣言的 | プログラム的 | -|-------------|--------------| -| `<router-link :to="..." replace>` | `router.replace(...)` | - - -#### `router.go(n)` - -このメソッドは、history スタックの中でどのくらいステップを進めるか、もしくは戻るのか、を表す 1 つの integer をパラメーターとして受け取ります。`window.history.go(n)` と類似しています。 - -例 - -``` js -// 1 つレコードを進める。history.forward() と同じ -router.go(1) - -// 1 つレコードを戻す。history.back() と同じ -router.go(-1) - -// 3 つレコードを進める -router.go(3) - -// もし多くのレコードが存在しない場合、サイレントに失敗します -router.go(-100) -router.go(100) -``` - -#### History 操作 - -もしかすると `router.push`、`router.replace`、`router.go` は [`window.history.pushState`、`window.history.replaceState`、`window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History) と対応することにお気づきかもしれません。これらは `window.history` API を模倣しています。 - -したがって、もしあなたが既に [Browser History APIs](https://developer.mozilla.org/en-US/docs/Web/API/History_API) について詳しい場合は、vue-router による History 操作はとても簡単です。 - -vue-router のナビゲーションメソッド (`push`、`replace`、`go`) は全てのモード (`history`、`hash`、`abstract`) で一貫して動作することは特筆すべき点です。 diff --git a/docs-gitbook/ja/essentials/nested-routes.md b/docs-gitbook/ja/essentials/nested-routes.md deleted file mode 100644 index da153569a..000000000 --- a/docs-gitbook/ja/essentials/nested-routes.md +++ /dev/null @@ -1,98 +0,0 @@ -# ネストされたルート - -実際のアプリケーションの UI では通常複数のレベルの階層的にネストしたコンポーネントで構成されます。ネストされたコンポーネントの特定の構造に対して URL のセグメントを対応させることはよくあります。例: - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -`vue-router` を使えば、これらのネストされたルートの設定を使って関連付けをシンプルに表現することができます。 - -前の章で作ったアプリケーションを考えてみましょう。 - -``` html -<div id="app"> - <router-view></router-view> -</div> -``` - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -ここでの `<router-view>` はトップレベルのアウトレットです。トップレベルのルートによってマッチしたコンポーネントが描画されます。同様に描画されたコンポーネントもまた自身のネストされた `<router-view>` を持つことができます。`User` コンポーネントのテンプレート内部に 1 つ追加する例です。 - -``` js -const User = { - template: ` - <div class="user"> - <h2>User {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -このネストされたアウトレットに対してコンポーネントを描画するためには、 `VueRouter` のコンストラクタの設定で `children` オプションを使用する必要があります。 - -``` js -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, - children: [ - { - // /user/:id/profile がマッチした時に - // UserProfile は User の <router-view> 内部で描画されます - path: 'profile', - component: UserProfile - }, - { - // /user/:id/posts がマッチした時に - // UserPosts は User の <router-view> 内部で描画されます - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` -**`/` から始まるネストされたパスは root パスとして扱われることに注意してください。これによってネストされた URL を指定しなくてもコンポーネントをネストすることができます。** - -`children` オプションを見るとわかる通り、これは `routes` 自身と同じようなルート設定オブジェクトの配列です。したがって、ネストしている view を必要なだけ保持することができます。 - -ここまでの点では、上記の設定で `/user/foo` に訪れた時に `User` アウトレット内部で何も描画されません。なぜならば、サブルートにマッチしていないからです。そこに何か描画したい場合は、空のサブルートパスを設定できます。 - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', component: User, - children: [ - // /user/:id がマッチした時に - // UserHome は User の <router-view> 内部で描画されます - { path: '', component: UserHome }, - - // 他のサブルートも同様に... - ] - } - ] -}) -``` - -この例の動作デモは [こちら](https://jsfiddle.net/yyx990803/L7hscd8h/) です。 diff --git a/docs-gitbook/ja/essentials/passing-props.md b/docs-gitbook/ja/essentials/passing-props.md deleted file mode 100644 index 2de0caad4..000000000 --- a/docs-gitbook/ja/essentials/passing-props.md +++ /dev/null @@ -1,75 +0,0 @@ -# ルートコンポーネントにプロパティを渡す - -コンポーネントで `$route` を使うとコンポーネントとルートの間に密結合が生まれ、コンポーネントが特定のURLでしか使用できないなど柔軟性が制限されます。 - -コンポーネントをルーターから分離するために `props` オプションを使います: - -** `$route` に結合** - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -** `props` による分離** - -``` js -const User = { - props: ['id'], - template: '<div>User {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - - // 名前付きビューによるルートに対しては、名前付きビューごとに `props` オプションを定義しなければなりません: - { - path: '/user/:id', - components: { default: User, sidebar: Sidebar }, - props: { default: true, sidebar: false } - } - ] -}) -``` - -これにより、コンポーネントをどこからでも使用できるようになり、コンポーネントの再利用とテストが容易になります。 - -### Boolean モード - -`props` を `true` に設定すると、`route.params` がコンポーネントのプロパティとして設定されます。 - -### Object モード - -`props` がオブジェクトの場合、これはコンポーネントプロパティとしてそのまま設定されます。プロパティが静的なときに便利です。 - -``` js -const router = new VueRouter({ - routes: [ - { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } - ] -}) -``` - -### Function モード - -プロパティを返す関数を作成することができます。これにより、パラメータを他のタイプにキャストし、静的な値をルートベースの値などと組み合わせることができます。 - -``` js -const router = new VueRouter({ - routes: [ - { path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) } - ] -}) -``` - -URL `/search?q=vue` は `{query: 'vue'}` をプロパティとして `SearchUser` コンポーネントに渡します。 - -ルート変更時にのみ評価されるため、`props` 関数はステートレスにしてください。プロパティを定義するために状態を必要とする場合はラッパーコンポーネントを使用してください。その方法で vue は状態変更に対応することができます。 - -高度な使い方については、[example](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js)を参照してください。 diff --git a/docs-gitbook/ja/essentials/redirect-and-alias.md b/docs-gitbook/ja/essentials/redirect-and-alias.md deleted file mode 100644 index cd182a776..000000000 --- a/docs-gitbook/ja/essentials/redirect-and-alias.md +++ /dev/null @@ -1,60 +0,0 @@ -# リダイレクトとエイリアス - -### リダイレクト - -`routes` 設定でリダイレクトが可能です。`/a` から `/b` へリダイレクトする例: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -名前付きルートに対してリダイレクトすることもできます。 - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -また、function を使った動的なリダイレクトもできます。 - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // この function は対象のルートを引数として受け取ります - // ここではリダイレクト先の path もしくは location を返します - }} - ] -}) -``` - -[ナビゲーションガード](../advanced/navigation-guards.md)はリダイレクトするルートに提供されず、ターゲット上のみに適用されるということに注意してください。例では、`beforeEnter` または `beforeLeave` ガードを `/a` ルートに追加しても効果がありません。 - -その他の高度な使い方として、[例](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js) をご参照ください。 - -### エイリアス - -リダイレクトが意図するところは、ユーザーが `/a` に訪問した時に URL を `/b` に置換し、そして `/b` にマッチさせます。ではエイリアスは何でしょうか? - -**`/b` として扱う `/a` のエイリアスは、ユーザーが `/b` に訪問した時に URL は `/b` のままになります。しかし、それはまるでユーザーが `/a` に訪問したかのようにマッチされます。** - -上記はルートの設定で以下のように表現されます。 - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -設定のネスト構造による制約とは異なり、エイリアスは UI 構造に任意の URL をマップするための自由さがあります。 - -高度な使い方に関しては、 [例](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js) をご参照ください。 diff --git a/docs-gitbook/ja/installation.md b/docs-gitbook/ja/installation.md deleted file mode 100644 index 2db7585bd..000000000 --- a/docs-gitbook/ja/installation.md +++ /dev/null @@ -1,44 +0,0 @@ -# インストール - -### 直接ダウンロード / CDN - -[https://unpkg.com/vue-router/dist/vue-router.js](https://unpkg.com/vue-router/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com) は npm ベースの CDN リンクです。 上記のリンクは常に NPM 上の最新のリリースを指します。 `https://unpkg.com/vue-router@2.0.0/dist/vue-router.js` のような URL を利用することで特定のバージョンやタグを指定することもできます。 -<!--/email_off--> - -Vue の後に `vue-router` を含めると自動的にインストールされます。 - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -### npm - -``` bash -npm install vue-router -``` - -モジュールシステムを使う場合、`Vue.use()` を使って明示的にルーターをインストールする必要があります。 - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -グローバルな script タグを使っている場合は必要ありません。 - -### 開発用ビルド - -もし最新の開発用ビルドを使用したい場合は、GitHub から直接クローンして `vue-router` をご自身でビルドしてください。 - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs-gitbook/kr/README.md b/docs-gitbook/kr/README.md deleted file mode 100644 index f8a898044..000000000 --- a/docs-gitbook/kr/README.md +++ /dev/null @@ -1 +0,0 @@ -{% include "./SUMMARY.md" %} diff --git a/docs-gitbook/kr/SUMMARY.md b/docs-gitbook/kr/SUMMARY.md deleted file mode 100644 index 15e1fbdff..000000000 --- a/docs-gitbook/kr/SUMMARY.md +++ /dev/null @@ -1,41 +0,0 @@ -# vue-router -<!--email_off--> -> 참고 : vue-router@2.x는 Vue 2.x에서만 작동합니다. 0.7.x용 문서는 [이 곳](https://github.com/vuejs/vue-router/tree/1.0/docs/en)입니다. -<!--/email_off--> -**[릴리즈 노트](https://github.com/vuejs/vue-router/releases)** - -- [설치](installation.md) -- 필수 사항 - - [시작하기](essentials/getting-started.md) - - [동적 라우트 매칭](essentials/dynamic-matching.md) - - [중첩된 라우트](essentials/nested-routes.md) - - [프로그래밍 방식 네비게이션](essentials/navigation.md) - - [이름을 가진 라우트](essentials/named-routes.md) - - [이름을 가진 뷰](essentials/named-views.md) - - [리다이렉트와 별칭](essentials/redirect-and-alias.md) - - [라우트 컴포넌트에 속성 전달](essentials/passing-props.md) - - [HTML5 History 모드](essentials/history-mode.md) -- 고급 - - [네비게이션 가드](advanced/navigation-guards.md) - - [라우트 메타 필드](advanced/meta.md) - - [전환](advanced/transitions.md) - - [데이터 가져오기](advanced/data-fetching.md) - - [스크롤 동작](advanced/scroll-behavior.md) - - [지연된 로딩](advanced/lazy-loading.md) -- API 레퍼런스 - - [라우터 생성자 옵션](api/options.md) - - [routes](api/options.md#routes) - - [mode](api/options.md#mode) - - [base](api/options.md#base) - - [linkActiveClass](api/options.md#linkactiveclass) - - [linkExactActiveClass](api/options.md#linkexactactiveclass) - - [scrollBehavior](api/options.md#scrollbehavior) - - [parseQuery / stringifyQuery](api/options.md#parsequery--stringifyquery) - - [fallback](api/options.md#fallback) - - [라우터 인스턴스](api/router-instance.md) - - [Properties](api/router-instance.md#properties) - - [Methods](api/router-instance.md#methods) - - [라우트 객체](api/route-object.md) - - [컴포넌트 주입](api/component-injections.md) - - [router-link](api/router-link.md) - - [router-view](api/router-view.md) diff --git a/docs-gitbook/kr/advanced/data-fetching.md b/docs-gitbook/kr/advanced/data-fetching.md deleted file mode 100644 index e58ab8bd1..000000000 --- a/docs-gitbook/kr/advanced/data-fetching.md +++ /dev/null @@ -1,112 +0,0 @@ -# 데이터 가져오기 - -때로는 라우트가 활성화될 때 서버에서 데이터를 가져와야 합니다. 예를 들어, 사용자 프로필을 렌더링하기 전에 서버에서 사용자의 데이터를 가져와야 합니다. 우리는 두 가지 방법을 사용할 수 있습니다. - -- **탐색 후 가져오기**: 먼저 탐색하고 들어오는 컴포넌트의 라이프 사이클 훅에서 데이터를 가져옵니다. 데이터를 가져오는 동안 로드 상태를 표시합니다. - -- **탐색하기 전에 가져오기**: 라우트 가드에서 경로를 탐색하기 전에 데이터를 가져오고 그 후에 탐색을 수행합니다. - -엄밀히 말하면 두 가지 모두 유효한 선택입니다. 궁극적인 목표는 사용자 경험에 달려 있습니다. - -## 탐색 후 가져오기 - -이 방법을 사용하면 들어오는 컴포넌트를 즉시 탐색하고 렌더링하며 컴포넌트의 `created` 훅에서 데이터를 가져옵니다. 네트워크를 통해 데이터를 가져 오는 동안 로드 상태를 표시 할 수 있는 기회를 제공하며 각 뷰 마다 로드를 다르게 처리 할 수도 있습니다. - -`$route.params.id`를 기반으로 한 게시물의 데이터를 가져와야하는 `Post` 컴포넌트가 있다고 가정 해 봅시다 : - -``` html -<template> - <div class="post"> - <div class="loading" v-if="loading"> - Loading... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // 뷰가 생성되고 데이터가 이미 감시 되고 있을 때 데이터를 가져온다. - this.fetchData() - }, - watch: { - // 라우트가 변경되면 메소드를 다시 호출됩니다. - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // `getPost`를 데이터 가져오기 위한 유틸리티/API 래퍼로 변경합니다. - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## 탐색하기 전에 가져오기 - -이 접근 방식을 사용하면 실제로 새 경로로 이동하기 전에 데이터를 가져옵니다. -들어오는 컴포넌트에서 `beforeRouteEnter` 가드에서 데이터를 가져올 수 있으며 페치가 완료되면 `next`만 호출 할 수 있습니다. - - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - watch: { - // 라우트가 변경되면 메소드를 다시 호출합니다 - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // `getPost`를 데이터 페치 유틸리티/API 래퍼로 바꿉니다. - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -다음 뷰에 대한 리소스를 가져 오는 동안 사용자는 현재 뷰를 유지합니다. 따라서 데이터를 가져 오는 동안 진행률 표시줄이나 일종의 표시기를 표시하는 것을 추천합니다. 데이터 가져오기가 실패하면 일종의 전역 경고 메시지를 표시해야합니다. diff --git a/docs-gitbook/kr/advanced/lazy-loading.md b/docs-gitbook/kr/advanced/lazy-loading.md deleted file mode 100644 index dba772649..000000000 --- a/docs-gitbook/kr/advanced/lazy-loading.md +++ /dev/null @@ -1,47 +0,0 @@ -# 지연된 로딩 - -번들러를 이용하여 앱을 제작할 때 JavaScript 번들이 상당히 커져 페이지로드 시간에 영향을 줄 수 있습니다. 각 라우트의 컴포넌트를 별도의 단위로 분할하고 경로를 방문할 때 로드하는 것이 효율적일 것입니다. - -Vue의 [비동기 컴포넌트](http://vuejs.org/guide/components.html#Async-Components)와 Webpack의 [코드 분할](https://webpack.js.org/guides/code-splitting-async/)을 결합합니다. 라우트 컴포넌트를 쉽게 불러올 수 있습니다. - -첫째, 비동기 컴포넌트는 Promise를 반환하는 팩토리 함수로 정의할 수 있습니다 (컴포넌트가 resolve 되어야함). - -``` js -const Foo = () => Promise.resolve({ /* 컴포넌트 정의 */ }) -``` - -둘째, Webpack 2에서 [dynamic import](https://github.com/tc39/proposal-dynamic-import)를 사용하여 코드 분할 포인트를 지정할 수 있습니다. - -``` js -import('./Foo.vue') // returns a Promise - ``` - - > 참고: Babel을 사용하고 있는 경우 올바른 구문 분석을 위해 [syntax-dynamic-import](http://babeljs.io/docs/plugins/syntax-dynamic-import/) 플러그인을 추가해야합니다. - - 이 두 가지를 결합하여 Webpack에 의해 자동으로 코드 분할될 비동기 컴포넌트를 정의하는 방법입니다. - - ``` js - const Foo = () => import('./Foo.vue') -``` - -라우트 설정에서 아무것도 바꿀 필요가 없습니다. `Foo`만 사용하면 됩니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/foo', component: Foo } - ] -}) -``` - -### 같은 묶음으로 컴포넌트 그룹화하기 - -때로는 동일한 라우트 아래에 중첩된 모든 컴포넌트를 동일한 비동기 묶음으로 그룹화 할 수 있습니다. 이를 위해 특수 주석 문법을 사용하는 이름(Webpack 2.4 이상 지원)을 제공하여 [이름을 가진 묶음](https://webpack.js.org/guides/code-splitting-async/#chunk-names)을 사용해야합니다. - -``` js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -Webpack은 동일한 이름의 묶음을 가진 비동기 모듈을 동일한 비동기 묶음으로 그룹화합니다. diff --git a/docs-gitbook/kr/advanced/meta.md b/docs-gitbook/kr/advanced/meta.md deleted file mode 100644 index 9135fb25b..000000000 --- a/docs-gitbook/kr/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# 라우트 메타 필드 - -라우트를 정의 할 때 `meta` 필드를 포함시킬 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // 메타 필드 - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -그렇다면 이 `메타`필드에 어떻게 접근할까요? - -첫째,`routes` 설정의 각 라우트 객체를 **라우트 레코드** 라고합니다. 라우트 레코드는 중첩 될 수 있습니다. 따라서 라우트가 일치하면 둘 이상의 라우트 레코드와 잠재적으로 일치 할 수 있습니다. - -예를 들어, 위의 라우트 구성에서 URL `/foo/bar`는 상위 라우트 레코드와 하위 라우트 레코드 모두와 일치합니다. - -라우트와 일치하는 모든 라우트 레코드는 `$route` 객체(그리고 네비게이션 가드의 라우트 객체)에 `$route.matched` 배열로 노출됩니다. 그러므로 우리는 `$route.matched`를 반복하여 라우트 레코드의 메타 필드를 검사 할 필요가 있습니다. - -예제 사용 사례는 글로벌 네비게이션 가드에서 메타 필드를 확인하는 것입니다. - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // 이 라우트는 인증이 필요하며 로그인 한 경우 확인하십시오. - // 그렇지 않은 경우 로그인 페이지로 리디렉션하십시오. - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // 반드시 next()를 호출하십시오! - } -}) -``` diff --git a/docs-gitbook/kr/advanced/navigation-guards.md b/docs-gitbook/kr/advanced/navigation-guards.md deleted file mode 100644 index 1ae69f5ba..000000000 --- a/docs-gitbook/kr/advanced/navigation-guards.md +++ /dev/null @@ -1,126 +0,0 @@ -# 네비게이션 가드 - -이름에서 알 수 있듯이 `vue-router`가 제공하는 네비게이션 가드는 주로 리디렉션하거나 취소하여 네비게이션을 보호하는 데 사용됩니다. 라우트 탐색 프로세스에 연결하는 방법에는 전역, 라우트별 또는 컴포넌트가 있습니다. - -**Params 또는 쿼리를 변경하면 네비게이션 가드가 실행되지 않습니다**. 단순히 [`$route` 객체를 감시](../essentials/dynamic-matching.md#reacting-to-params-changes)하고 그 변화에 반응하십시오. 또는 컴포넌트 가드의 `beforeRouteUpdate`를 사용하십시오 - -### 전역 가드 - -`router.beforeEach`를 사용하여 보호하기 이전에 전역 등록을 할 수 있습니다. - -``` js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -네비게이션이 트리거될 때마다 가드가 작성 순서에 따라 호출되기 전의 모든 경우에 발생합니다. 가드는 비동기식으로 실행 될 수 있으며 네비게이션은 모든 훅이 해결되기 전까지 **보류 중** 으로 간주됩니다. - -모든 가드 기능은 세 가지 전달인자를 받습니다. - -- **`to: 라우트`**: 대상 [Route 객체](../api/route-object.md) 로 이동합니다. - -- **`from: 라우트`**: 현재 라우트로 오기전 라우트 입니다. - -- **`next: 함수`**: 이 함수는 **훅을 해결하기 위해** 호출 되어야 합니다. 액션은 `next`에 제공된 전달인자에 달려 있습니다. - - - **`next()`**: 파이프라인의 다음 훅으로 이동하십시오. 훅이 없는 경우 네비게이션은 **승인**됩니다. - - - **`next(false)`**: 현재 네비게이션을 중단합니다. 브라우저 URL이 변경되면(사용자 또는 뒤로 버튼을 통해 수동으로 변경됨) `from`경로의 URL로 재설정됩니다. - - - **`next('/')` 또는 `next({ path: '/' })`**: 다른 위치로 리디렉션합니다. 현재 네비게이션이 중단되고 새 네비게이션이 시작됩니다. - - - **`next(error)`**: (2.4.0 이후 추가) `next`에 전달된 인자가 `Error` 의 인스턴스이면 탐색이 중단되고 `router.onError()`를 이용해 등록 된 콜백에 에러가 전달됩니다. - - -**항상 `next` 함수를 호출하십시오. 그렇지 않으면 훅이 절대 불러지지 않습니다.** - -### Global Resolve Guards - -> 2.5.0에서 추가됨 - -2.5.0 이후로 `router.beforeResolve`를 사용하여 글로벌 가드를 등록 할 수 있습니다. 이는 `router.beforeEach`와 유사합니다. 모든 컴포넌트 가드와 비동기 라우트 컴포넌트를 불러온 후 네비게이션 가드를 확인하기 전에 호출된다는 차이가 있습니다 - -### Global After Hooks - -전역 훅을 등록 할 수도 있지만, 가드와 달리 이 훅은 `next` 함수를 얻지 못하며 네비게이션에 영향을 줄 수 없습니다. - -``` js -router.afterEach((to, from) => { - // ... -}) -``` - -### 라우트 별 가드 - -`beforeEnter` 가드를 라우트의 설정 객체에 직접 정의 할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -이러한 가드는 전역 이전 가드와 동일한 서명을 가집니다. - -### 컴포넌트 내부 가드 - -마지막으로 `beforeRouteEnter` 와 `beforeRouteLeave`를 사용하여 라우트 컴포넌트(라우터 설정으로 전달되는 컴포넌트) 안에 라우트 네비게이션 가드를 직접 정의 할 수 있습니다. - -- `beforeRouteEnter` -- `beforeRouteUpdate` (2.2 버전에 추가) -- `beforeRouteLeave` - -``` js -const Foo = { - template: `...`, - beforeRouteEnter (to, from, next) { - // 이 컴포넌트를 렌더링하는 라우트 앞에 호출됩니다. - // 이 가드가 호출 될 때 아직 생성되지 않았기 때문에 - // `this` 컴포넌트 인스턴스에 접근 할 수 없습니다! - }, - beforeRouteLeave (to, from, next) { - // 이 컴포넌트를 렌더링하는 라우트가 이전으로 네비게이션 될 때 호출됩니다. - // `this` 컴포넌트 인스턴스에 접근 할 수 있습니다. - } -} -``` - -`beforeRouteEnter` 가드는 네비게이션이 확인되기 전에 가드가 호출되어서 새로운 엔트리 컴포넌트가 아직 생성되지 않았기 때문에 `this`에 접근하지 **못합니다.** - -그러나 콜백을 `next`에 전달하여 인스턴스에 액세스 할 수 있습니다. 네비게이션이 확인되고 컴포넌트 인스턴스가 콜백에 전달인자로 전달 될 때 콜백이 호출됩니다. - -``` js -beforeRouteEnter (to, from, next) { - next(vm => { - // `vm`을 통한 컴포넌트 인스턴스 접근 - }) -} -``` - -`beforeRouteLeave` 안에서 `this`에 직접 접근 할 수 있습니다. leave 가드는 일반적으로 사용자가 저장하지 않은 편집 내용을 두고 실수로 라우트를 떠나는 것을 방지하는데 사용됩니다. 탐색은 `next(false)`를 호출하여 취소할 수 있습니다. - -### 전체 네비게이션 시나리오 - -1. 네비게이션이 트리거됨. -2. 비활성화될 컴포넌트에서 가드를 호출. -3. 전역 `beforeEach` 가드 호출. -4. 재사용되는 컴포넌트에서 `beforeRouteUpdate` 가드 호출. (2.2 이상) -5. 라우트 설정에서 `beforeEnter` 호출. -6. 비동기 라우트 컴포넌트 해결. -7. 활성화된 컴포넌트에서 `beforeRouteEnter` 호출. -8. 전역 `beforeResolve` 가드 호출. (2.5이상) -9. 네비게이션 완료. -10. 전역 `afterEach` 훅 호출. -11. DOM 갱신 트리거 됨. -12. 인스턴스화 된 인스턴스들의 `beforeRouteEnter`가드에서 `next`에 전달 된 콜백을 호출합니다. diff --git a/docs-gitbook/kr/advanced/scroll-behavior.md b/docs-gitbook/kr/advanced/scroll-behavior.md deleted file mode 100644 index d95420673..000000000 --- a/docs-gitbook/kr/advanced/scroll-behavior.md +++ /dev/null @@ -1,62 +0,0 @@ -# 스크롤 동작 - -클라이언트 측 라우팅을 사용할 때 새로운 경로로 이동할 때 맨 위로 스크롤하거나 실제 페이지를 다시 로드하는 것처럼 컨텐츠 항목의 스크롤 위치를 유지할 수 있습니다. `vue-router`는 이러한 것들을 할 수 있으며, 라우트 탐색에서 스크롤 동작을 완전히 사용자 정의할 수 있게합니다. - -**참고: 이 기능은 HTML5 히스토리 모드에서만 작동합니다.** - -라우터 인스턴스를 생성 할 때 `scrollBehavior` 함수를 제공 할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // 원하는 위치로 돌아가기 - } -}) -``` - -`scrollBehavior` 함수는 `to`와 `from` 라우트 객체를받습니다. 세 번째 전달인자인 `savedPosition`은 브라우저의 뒤로/앞으로 버튼으로 트리거되는 `popstate` 네비게이션인 경우에만 사용할 수 있습니다. - -이 함수는 스크롤 위치 객체를 반환 할 수 있습니다. 객체는 다음과 같은 형태 일 수 있습니다. - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset은 2.6.0 이상만 지원) - -잘못된 값이나 빈 객체가 반환되면 스크롤이 발생하지 않습니다. - -예제: - -``` js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -그러면 모든 라우트 네비게이션에 대해 페이지가 맨 위로 스크롤됩니다. - -`savedPosition`을 반환하면 뒤로/앞으로 버튼으로 탐색할 때 네이티브와 같은 동작이 발생합니다. - -``` js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -"anchor로 스크롤" 동작을 시뮬레이트하려면 다음을 수행하십시오. - -``` js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -또한 [라우트 메타 필드](meta.md)를 사용하여 세밀한 스크롤 동작 제어를 구현할 수 있습니다. 전체 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js)를 확인하십시오. diff --git a/docs-gitbook/kr/advanced/transitions.md b/docs-gitbook/kr/advanced/transitions.md deleted file mode 100644 index c09e46fcf..000000000 --- a/docs-gitbook/kr/advanced/transitions.md +++ /dev/null @@ -1,57 +0,0 @@ -# 전환 - -`<router-view>`는 본질적으로 동적인 컴포넌트이기 때문에 `<transition>` 컴포넌트를 사용하는 것과 같은 방식으로 전환 효과를 적용할 수 있습니다. - -``` html -<transition> - <router-view></router-view> -</transition> -``` - -[`<transition>`에 대한 모든 것](http://vuejs.org/guide/transitions.html) 을 확인하십시오. - -### 라우트 별 전환 - -위의 사용법은 모든 라우트에 대해 동일한 전환을 적용합니다. 각 라우트의 컴포넌트가 서로 다른 전환을 갖도록 하려면 각 라우트 컴포넌트 내에서 다른 이름으로 `<transition>`을 사용할 수 있습니다. - -``` js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -### 라우트 기반 동적 전환 - -또한 대상 라우트와 현재 라우트 간의 관계를 기반으로 동적으로 사용할 전환을 결정할 수도 있습니다. - -``` html -<!-- 동적 전환을 위한 name을 지정합니다. --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -``` js -// 그런 다음 부모 구성 요소에서 `$route`를 보고 사용할 전환을 결정합니다 -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -전체 예제는 [여기](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js)에 있습니다. diff --git a/docs-gitbook/kr/api/component-injections.md b/docs-gitbook/kr/api/component-injections.md deleted file mode 100644 index d2eb3125b..000000000 --- a/docs-gitbook/kr/api/component-injections.md +++ /dev/null @@ -1,21 +0,0 @@ -# 컴포넌트 주입 - -### 주입된 속성 - -이러한 프로퍼티는 라우터 인스턴스를 루트 인스턴스에 `router` 옵션으로 전달함으로써 모든 자식 컴포넌트에 주입됩니다. - -- #### $router - - 라우터 인스턴스 - -- #### $route - - 현재 활성화 된 [Route](route-object.md)입니다. 이 속성은 읽기 전용이며 해당 속성은 변경할 수는 없지만 감시 할 수 있습니다. - -### 활성화된 옵션 - -- **beforeRouteEnter** -- **beforeRouteUpdate** (2.2에서 추가됨) -- **beforeRouteLeave** - - [컴포넌트 내부 가드](../advanced/navigation-guards.md#incomponent-guards)를 확인하세요. diff --git a/docs-gitbook/kr/api/options.md b/docs-gitbook/kr/api/options.md deleted file mode 100644 index 88ae08607..000000000 --- a/docs-gitbook/kr/api/options.md +++ /dev/null @@ -1,101 +0,0 @@ -# 라우터 생성자 옵션 - -### routes - -- 자료형: `Array<RouteConfig>` - - `RouteConfig`에 대한 자료형 선언: - - ``` js - declare type RouteConfig = { - path: string; - component?: Component; - name?: string; // 이름을 가진 라우트를 위함 - components?: { [name: string]: Component }; // 이름을 가진 뷰를 위함 - redirect?: string | Location | Function; - alias?: string | Array<string>; - children?: Array<RouteConfig>; // 중첩된 라우트를 위함 routes - beforeEnter?: (to: Route, from: Route, next: Function) => void; - meta?: any; - } - - // 2.6.0+ - caseSensitive?: boolean; // 대소문자를 구분합니까? (default: false) - pathToRegexpOptions?: Object; // path-to-regexp 옵션은 정규 표현식을 컴파일합니다. - ``` - -### mode - -- 자료형: `string` - -- 기본값: `"hash" (in browser) | "abstract" (in Node.js)` - -- 유효 값: `"hash" | "history" | "abstract"` - - 라우터 모드에 대한 설정입니다. - - - `hash`: 라우팅에 URL 해시를 사용합니다. HTML5 기록 API를 지원하지 않는 브라우저를 포함하여 모든 Vue 지원 브라우저에서 작동합니다. - - - `history`: HTML5 히스토리 API 및 서버 설정이 필요합니다. [HTML5 History 모드](../essentials/history-mode.md)를 확인하세요. - - - `abstract`: 모든 자바 스크립트 환경에서 작동합니다 (예: Node.js가 있는 서버 측 **브라우저 API가없는 경우 라우터가 자동으로이 모드로 강제 전환됩니다.** - -### base - -- 자료형: `string` - -- 기본값: `"/"` - - 앱의 기본 URL입니다. 예를 들어, 전체 단일 페이지 응용 프로그램이 `/app/`하에 제공된다면`base`는 `"/app/"` 값을 사용해야합니다. - -### linkActiveClass - -- 자료형: `string` - -- 기본값: `"router-link-active"` - - 전역의 `<router-link>` 기본 active 클래스를 설정하십시오. [router-link](router-link.md)를 확인하세요. - -### linkExactActiveClass - -> 2.5.0+ - -- 자료형: `string` - -- 기본값: `"router-link-exact-active"` - - 전역으로 `<router-link>`에서 사용할 정확하게 일치하는 경우의 클래스를 설정할 수 있습니다. [router-link](router-link.md)를 확인하세요. - -### scrollBehavior - -- 자료형: `Function` - - 서명: - - ``` - ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => { x: number, y: number } | { selector: string } | ?{} - ``` - - [Scroll 동작](../advanced/scroll-behavior.md)를 확인하세요. - -### parseQuery / stringifyQuery - -> 2.4.0+ - -- 자료형: `Function` - - 사용자 지정 쿼리 문자열 구문 분석/문자열화 함수를 사용할 수 있습니다. 기본 값을 오버라이드합니다. - -### fallback - - > 2.6.0+ - - - 자료형: `boolean` - - 브라우저가 `history.pushState`를 지원하지 않을 때 라우터가 `hash`모드로 변경되어야 할지 설정합니다. 기본값은 `true`입니다. - - 이를 `false`로 설정하면 IE9에서 모든 `router-link`를 탐색 할 수 있습니다. 이것은 해시모드 URL이 SSR에서 작동하지 않기 때문에 앱이 서버에서 렌더링되어 IE9에서 작동해야하는 경우에 유용합니다. diff --git a/docs-gitbook/kr/api/route-object.md b/docs-gitbook/kr/api/route-object.md deleted file mode 100644 index 111bd9d05..000000000 --- a/docs-gitbook/kr/api/route-object.md +++ /dev/null @@ -1,89 +0,0 @@ -# 라우트 객체 - -**라우트 객체** 는 현재 활성 경로의 상태를 나타냅니다. 여기에는 현재 URL의 구문 분석 된 정보와 URL에서 일치하는 **라우트 기록** 이 포함됩니다. - -route 객체는 변경할 수 없습니다. 모든 성공적인 네비게이션은 새로운 라우트 객체를 생성합니다. - -라우트 객체는 여러 위치에서 찾을 수 있습니다. - -- 컴포넌트 내부에서 `this.$route`를 사용합니다. - -- 감시자 콜백에서 `$route`를 사용합니다. - -- `router.match(location)` 호출의 반환 값으로 사용합니다. - -- 처음 두 개의 전달인자로 내비게이션 가드에서 사용할 수 있습니다. - - ``` js - router.beforeEach((to, from, next) => { - // to와 from은 둘 다 라우트 객체입니다. - }) - ``` - -- `scrollBehavior`함수 안에서 처음 두 개의 전달인자로 사용합니다. - - ``` js - const router = new VueRouter({ - scrollBehavior (to, from, savedPosition) { - // to와 from은 둘 다 라우트 객체입니다. - } - }) - ``` - -### 라우트 객체 속성 - -- **$route.path** - - - 자료형: `string` - - 현재 경로의 경로와 동일한 문자열로 항상 절대 경로로 해석됩니다. 예 : `"/foo/bar"`를 사용하십시오. - -- **$route.params** - - - 자료형: `Object` - - 동적 세그먼트와 별 세그먼트의 키/값 쌍을 포함하는 객체입니다. 매개 변수가 없는 경우 값은 빈 객체가됩니다. - -- **$route.query** - - - 자료형: `Object` - - 쿼리 문자열의 키/값 쌍을 포함하는 객체입니다. 예를 들어 `/foo?user=1` 경로의 경우 `$route.query.user == 1`을 얻습니다. 쿼리가 없으면 값은 빈 객체가됩니다. - -- **$route.hash** - - - 자료형: `string` - - 현재 경로의 해시(`#`가 없는 경우).해시가 존재하지 않으면 값은 빈 문자열이됩니다. - -- **$route.fullPath** - - - 자료형: `string` - - 쿼리 및 해시를 포함한 전체 URL입니다. - -- **$route.matched** - - - 자료형: `Array<RouteRecord>` - - 현재 라우트의 모든 중첩 된 라우트 세그먼트에 대해 **라우트 레코드** 가 포함 된 배열입니다. 라우트 레코드는 `routes` 배열(그리고 `children` 배열)에 있는 객체의 복사본입니다. - - ``` js - const router = new VueRouter({ - routes: [ - // 다음 객체는 라우트 레코드입니다. - { path: '/foo', component: Foo, - children: [ - // 이 또한 라우트 레코드입니다. - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - URL이 `/foo/bar` 인 경우, `$route.matched`는 두 객체(복제 된 객체)를 자식 배열에 포함하는 배열입니다. - -- **$route.name** - - 현재 라우트의 이름입니다.(가지고 있는 경우). [이름을 가진](../essentials/named-routes.md)를 확인하세요 diff --git a/docs-gitbook/kr/api/router-instance.md b/docs-gitbook/kr/api/router-instance.md deleted file mode 100644 index 3a4f9dbb3..000000000 --- a/docs-gitbook/kr/api/router-instance.md +++ /dev/null @@ -1,85 +0,0 @@ -# 라우터 인스턴스 - -### 속성 - -#### router.app - -- 자료형: `Vue instance` - - `router`가 주입 된 루트 Vue 인스턴스. - -#### router.mode - -- 자료형: `string` - - 라우터가 사용하는 [mode](options.md#mode). - -#### router.currentRoute - -- 자료형: `Route` - - [라우트 객체](route-object.md)로 표시된 현재 라우트. - -### Methods - -- **router.beforeEach(guard)** -- **router.beforeResolve(guard)** (2.5.0+) -- **router.afterEach(hook)** - -전역 네비게이션 가드 추가. [네비게이션 가드](../advanced/navigation-guards.md)를 보십시오. - -2.5.0이상에서 세 가지 메소드 모두 등록된 guard / hook을 제거하는 함수를 반환합니다. - -- **router.push(location, onComplete?, onAbort?)** -- **router.replace(location, onComplete?, onAbort?)** -- **router.go(n)** -- **router.back()** -- **router.forward()** - - 프로그래밍 방식으로 새 URL로 이동합니다. [프로그래밍 방식 네비게이션](../essentials/navigation.md)을 참조하십시오. - -- **router.getMatchedComponents(location?)** - - 지정된 위치 또는 현재의 라우트에 일치하는 컴퍼넌트(인스턴스는 아니고 정의/생성자)의 배열을 반환합니다. 이는 주로 데이터를 프리페치(prefetching)하기 위해 서버 측 렌더링 동안 사용됩니다. - -- **router.resolve(location, current?, append?)** - - > 2.1.0+ - - 역방향 URL 해석. `<router-link/>`에서 사용된 것과 같은 형식의 위치가 주어지면 다음과 같이 처리된 속성을 가진 객체를 반환합니다. - - ``` js - { - location: Location; - route: Route; - href: string; - } - ``` - -- `current` 현재 라우트를 나타냅니다. (대부분의 경우에 변경할 일이 없습니다.) - -- `append`는 `current` 라우트에 추가할 수 있도록 합니다 ([`router-link`](router-link.md#props)처럼) - -- **router.addRoutes(routes)** - - > 2.2.0+ - - 라우터에 동적으로 더 많은 라우트를 추가할 수 있습니다. 전달인자는 `routes` 생성자 옵션과 동일한 경로 설정 포맷을 사용하는 배열이어야 합니다. - -- **router.onReady(callback, [errorCallback])** - - > 2.2.0+ - - 이 메소드는 라우터가 초기 탐색을 완료할 때 호출하는 콜백을 대기시킵니다. 즉, 초기 라우트와 연결된 모든 비동기 입력 훅 및 비동기 컴포넌트를 해결합니다. - - 이는 서버와 클라이언트 모두 일관된 출력을 보장하기 위해 서버측 렌더링을 사용할 때 유용합니다. - -- **router.onError(callback)** - - > 2.4.0+ - -라우트 탐색 중에 에러가 발견되면 호출 될 콜백을 등록하십시오. 호출 할 에러에 유의하십시오. 에러는 다음 시나리오 중 하나이어야합니다. - - - 에러는 라우트 가드 기능 내에서 동기적으로 발생한 경우. - - 에러는 라우트 가드 함수 내에서 `next(err)`를 호출하여 캐치한 경우 - - 라우트를 렌더링하는데 필요한 비동기 컴포넌트를 처리하려고 할 때 에러가 발생한 경우. diff --git a/docs-gitbook/kr/api/router-link.md b/docs-gitbook/kr/api/router-link.md deleted file mode 100644 index a3d769cfc..000000000 --- a/docs-gitbook/kr/api/router-link.md +++ /dev/null @@ -1,137 +0,0 @@ -# `<router-link>` - -`<router-link>`는 라우터 지원 앱에서 사용자 네비게이션을 가능하게하는 컴포넌트입니다. 목표 위치는 `to` prop로 지정됩니다. 기본적으로 올바른 `href`를 갖는 `<a>`태그로 렌더링 되지만 `tag` prop로 구성 될 수 있습니다. 또한 대상 라우트가 활성화되어 있으면 링크가 자동으로 active CSS 클래스를 가져옵니다. - -`<router-link>`는 다음과 같은 이유로 하드 코드 된 `<a href="...">`보다 선호됩니다. - -- HTML5 히스토리 모드와 해시 모드에서 모두 동일한 방식으로 작동하므로 모드를 전환하기로 결정하거나 라우터가 IE9에서 해시 모드로 전환 한 경우 변경할 필요가 없습니다. - -- HTML5 히스토리 모드에서, `router-link`는 클릭 이벤트를 차단하여 브라우저가 페이지를 다시 로드하지 않도록합니다. - -- HTML5 히스토리 모드에서 `base` 옵션을 사용할 때 `to` prop의 URL에 이를 포함 할 필요가 없습니다. - -### Props - -- **to** - - - 자료형: `string | Location` - - - 필수 - - 링크의 대상 라우트를 나타냅니다. 클릭하면, `to` prop의 값은 내부적으로 `router.push()`에 전달 될 것이므로 값은 문자열이나 위치 디스크립터 객체가 될 수 있습니다. - - ``` html - <!-- 리터럴 string --> - <router-link to="home">Home</router-link> - <!-- 이렇게 렌더링 됩니다. --> - <a href="home">Home</a> - - <!-- `v-bind`를 이용한 표현식 --> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- `v-bind`를 생략하면 다른 prop를 바인딩 하는 것과 같습니다. --> - <router-link :to="'home'">Home</router-link> - - <!-- 위와 같습니다. --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- 이름을 가지는 라우트 --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- 쿼리가 있으면, `/register?plan=private` 이 됩니다. --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link> - ``` - -- **replace** - - - 자료형: `boolean` - - - 기본값: `false` - - `replace` prop를 설정하면 클릭할 때 `router.push()` 대신 `router.replace()`를 호출할 것이므로 내비게이션은 히스토리 레코드를 남기지 않을 것입니다. - - ``` html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -- **append** - - - 자료형: `boolean` - - - 기본값: `false` - - `append` prop를 설정하면 항상 상대 경로가 현재 경로에 추가됩니다. 예를 들어`/a`에서 상대 링크 `b`로 이동한다고 가정하면 `append`없이 `/b`에서 끝나지만 `append`로 `/a/b`에서 끝납니다 . - - ``` html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -- **tag** - - - 자료형: `string` - - - 기본값: `"a"` - - 때때로 우리는 `<router-link>`를 `<li>`과 같은 다른 태그로 렌더링되길 바랍니다. 그런 다음 `tag` prop를 사용하여 렌더링할 태그를 지정할 수 있으며 탐색을 위해 클릭 이벤트를 계속 수신합니다. - - ``` html - <router-link to="/foo" tag="li">foo</router-link> - <!-- 이렇게 렌더링됩니다 --> - <li>foo</li> - ``` - -- **active-class** - - - 자료형: `string` - - - 기본값: `"router-link-active"` - - 링크가 활성화 되어 있을 때 적용된 active CSS 클래스를 구성합니다. 기본값은 `linkActiveClass` 라우터 생성자 옵션을 통해 전역적으로 설정될 수 있습니다. - -- **exact** - - - 자료형: `boolean` - - - 기본값: `false` - - 기본 활성 클래스 매치 동작은 **포괄적인 매칭** 입니다. 예를 들어, `<router-link to="/a">`는 현재 경로가 `/a` 또는 `/a/`로 시작하는 한 이 클래스를 적용합니다. - - 이것의 결과는 `<router-link to="/">`가 모든 라우터에 대해 활성화 될 것입니다! 링크를 "완전 일치 모드"로 강제하려면 `exact` prop를 사용하십시오. - - ``` html - <!-- 이 링크는 `/` 에서만 active 됩니다 --> - <router-link to="/" exact> - ``` - - active 링크 클래스를 설명하는 추가 [예제](https://jsfiddle.net/8xrk1n9f/)를 확인 하십시오. - -- **event** - - > 2.1.0+ - - - 자료형: `string | Array<string>` - - - 기본값: `'click'` - - 링크 네비게이션을 트리거 할 수있는 이벤트를 지정합니다. - -- **exact-active-class** - - > 2.5.0+ - - 자료형: `string` - - 기본값: `"router-link-exact-active"` - - 정확하게 일치하는 링크가 활성된 상태일 때 적용되는 CSS 클래스를 지정합니다. 기본값은`linkExactActiveClass` 라우터 생성자 옵션을 통해 전역으로 설정 될 수 있습니다. - - -### 외부 엘리먼트에 active 클래스 적용하기 - -때로 우리는 active 클래스가 `<a>` 태그 자체가 아닌 외부 엘리먼트에 적용되는 것을 원할 수 있습니다. 이 경우 `<router-link>` 를 사용하여 외부 엘리먼트를 렌더링하고 원시 `<a>`는 내부에 작성합니다. - -``` html -<router-link tag="li" to="/foo"> - <a>/foo</a> -</router-link> -``` - -이 경우 `<a>`는 실제 링크가 될 것이고(올바른 `href`를 얻습니다.), 활성 클래스는 바깥 쪽 `<li>`에 적용됩니다. diff --git a/docs-gitbook/kr/api/router-view.md b/docs-gitbook/kr/api/router-view.md deleted file mode 100644 index 8c4f17c48..000000000 --- a/docs-gitbook/kr/api/router-view.md +++ /dev/null @@ -1,27 +0,0 @@ -# `<router-view>` - -`<router-view>` 컴포넌트는 주어진 라우트에 대해 일치하는 컴포넌트를 렌더링하는 함수형 컴포넌트입니다. `<router-view>`에서 렌더링된 컴포넌트는 자체 `<router-view>`를 포함 할 수 있으며, 이는 중첩 된 라우트를 위해 컴포넌트를 렌더링합니다. - -### Props - -- **name** - - - 자료형: `string` - - - 기본값: `"default"` - - `<router-view>`가 이름을 가지고있을 때, 그것은 일치된 라우트 레코드의 `components` 옵션에서 해당 이름으로 컴포넌트를 렌더링 할 것입니다. 예제는 [이름을 가지는 뷰](../essentials/named-views.md)를 참조하십시오. - -### 동작 - -이름이없는 모든 props는 렌더링된 컴포넌트로 전달되지만 대부분의 경우 라우트 별 데이터는 라우트 매개 변수에 포함됩니다. - -이것은 단지 컴포넌트이므로 `<transition>` 및 `<keep-alive>`와 함께 작동합니다. 양쪽 모두를 사용할 때는 `<keep-alive>`를 다음과 같이 사용하십시오. - -``` html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` diff --git a/docs-gitbook/kr/essentials/dynamic-matching.md b/docs-gitbook/kr/essentials/dynamic-matching.md deleted file mode 100644 index 8e4960ac4..000000000 --- a/docs-gitbook/kr/essentials/dynamic-matching.md +++ /dev/null @@ -1,75 +0,0 @@ -# 동적 라우트 매칭 - -주어진 패턴을 가진 라우트를 동일한 컴포넌트에 매핑해야하는 경우가 자주 있습니다. 예를 들어 모든 사용자에 대해 동일한 레이아웃을 가지지만 하지만 다른 사용자 ID로 렌더링되어야하는 `User` 컴포넌트가 있을 수 있습니다. `vue-router`에서 우리는 경로에서 동적 세그먼트를 사용하여 다음을 할 수 있습니다. - -``` js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // 동적 세그먼트는 콜론으로 시작합니다. - { path: '/user/:id', component: User } - ] -}) -``` - -이제 `/user/foo`와 `/user/bar` 같은 URL은 모두 같은 경로에 매핑됩니다. - -동적 세그먼트는 콜론 `:`으로 표시됩니다. 라우트가 일치하면 동적 세그먼트의 값은 모든 컴포넌트에서 `this.$route.params`로 표시됩니다. 그러므로 `User`의 템플릿을 다음과 같이 갱신하여 현재 사용자 ID를 표현할 수 있습니다 : - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -``` - -실제 예제는 [여기](http://jsfiddle.net/yyx990803/4xfa2f19/)에 있습니다. - -동일한 라우트에 여러 동적 세그먼트를 가질 수 있으며, `$route.params`의 해당 필드에 매핑됩니다. - -예: - -| 패턴 | 일치하는 패스 | $route.params | -|---------|------|--------| -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -`$route.params` 외에도 `$route` 객체는 `$route.query` (URL에 쿼리가 있는 경우), `$route.hash` 등의 유용한 정보를 제공합니다. [API 레퍼런스](../api/route-object.md)에서 전체 세부 정보를 확인할 수 있습니다. - -### Params 변경 사항에 반응하기 - -매개 변수와 함께 라우트를 사용할 때 주의 해야할 점은 사용자가 `/user/foo`에서 `/user/bar`로 이동할 때 **동일한 컴포넌트 인스턴스가 재사용된다는 것입니다.** 두 라우트 모두 동일한 컴포넌트를 렌더링하므로 이전 인스턴스를 삭제 한 다음 새 인스턴스를 만드는 것보다 효율적입니다. **그러나 이는 또한 컴포넌트의 라이프 사이클 훅이 호출되지 않음을 의미합니다.** - -동일한 컴포넌트의 params 변경 사항에 반응하려면 `$route` 객체를 보면됩니다. - -``` js -const User = { - template: '...', - watch: { - '$route' (to, from) { - // 경로 변경에 반응하여... - } - } -} -``` - -또는 2.2에서 소개된 `beforeRouteUpdate` 가드를 사용하십시오. -```js -const User = { - template: '...', - beforeRouteUpdate (to, from, next) { - // react to route changes... - // don't forget to call next() - } -} -``` - -### 고급 매칭 패턴 - -`vue-router`는 라우트 매칭 엔진으로 [path-to-regexp](https://github.com/pillarjs/path-to-regexp)를 사용하기 때문에 선택적 동적 세그먼트, 0개 이상/하나 이상의 요구 사항, 심지어 커스텀 정규식 패턴과 같은 많은 고급 매칭 패턴을 지원합니다. 이 고급 패턴들과 `vue-router`에서 사용하는 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js)에 대한 [문서](https://github.com/pillarjs/path-to-regexp#parameters)를 확인하십시오. - -### 매칭 우선순위 - -동일한 URL이 여러 라우트와 일치하는 경우가 있습니다. 이 경우 일치하는 우선 순위는 라우트 정의의 순서에 따라 결정됩니다. 즉, 경로가 더 먼저 정의 될수록 우선 순위가 높아집니다. diff --git a/docs-gitbook/kr/essentials/getting-started.md b/docs-gitbook/kr/essentials/getting-started.md deleted file mode 100644 index 4e6ca1d61..000000000 --- a/docs-gitbook/kr/essentials/getting-started.md +++ /dev/null @@ -1,68 +0,0 @@ -# 시작하기 - -> 가이드의 샘플 코드는[ES2015](https://github.com/lukehoban/es6features)를 사용합니다. - -Vue.js와 vue-router로 단일 페이지 애플리케이션을 만드는 것은 간단합니다. Vue.js를 통해 우리는 이미 컴포넌트로 애플리케이션을 구성하고 있습니다. vue-router를 추가 할 때, 우리가해야 할 일은 우리의 컴포넌트를 route에 매핑하고 vue-router가 어디서 렌더링할 지 지정하는 것입니다. 다음은 기본적인 예입니다. - -> 모든 예제는 Vue의 전체 버전을 사용하여 템플릿 구문 분석을 가능하게합니다. 자세한 내용은 [여기](https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only) 있습니다. - -### HTML - -``` html -<script src="https://unpkg.com/vue/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- 탐색을 위해 라우터 링크 구성 요소를 사용하십시오. --> - <!-- `to` prop를 전달하여 링크를 지정하십시오. --> - <!-- `<router-link>`는 기본적으로`<a>`태그로 렌더링 될 것입니다 --> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- route outlet --> - <!-- 라우트와 일치하는 컴포넌트가 여기 렌더링됩니다. --> - <router-view></router-view> -</div> -``` - -### JavaScript - -``` js -// 0. 모듈 시스템을 사용하는 경우 (예: vue-cli를 이용해서), Vue 및 VueRouter를 가져온 다음 `Vue.use(VueRouter)`를 호출하십시오. - -// 1. 라우트 컴포넌트를 정의하십시오. -// 다른 파일에서 가져올 수 있습니다. -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. 라우트를 정의합니다. -// 일부 라우트 정의 각 라우트는 컴포넌트에 맵핑되어야합니다. -// "컴포넌트"는 `Vue.extend()`를 통해 생성된 -// 실제 컴포넌트 생성자이거나 컴포넌트 옵션 객체 일 수 있습니다. -// 나중에 중첩 된 라우트에 대해 이야기하겠습니다. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. 라우터 인스턴스를 생성하고 `routes` 옵션을 전달하십시오. -// 여기에 추가 옵션을 전달할 수 있지만, 지금은 간단하게 하겠습니다. -const router = new VueRouter({ - routes // routes: routes 의 약어 -}) - -// 4. 루트 인스턴스를 만들고 마운트하십시오. -// 라우터 옵션을 라우터에 삽입하여 -// 전체 응용 프로그램을 라우터가 인식하도록 하십시오. -const app = new Vue({ - router -}).$mount('#app') - -// 이제 앱을 시작 해보세요! -``` - -이 [예제](http://jsfiddle.net/yyx990803/xgrjzsup/)를 확인하십시오. - -`<router-link>`는 가리키는 라우트가 일치 할 때 자동으로 `.router-link-active` 클래스를 얻습니다. API 레퍼런스에서 더 많은 것을 배울 수 있습니다. diff --git a/docs-gitbook/kr/essentials/history-mode.md b/docs-gitbook/kr/essentials/history-mode.md deleted file mode 100644 index 8645c45e1..000000000 --- a/docs-gitbook/kr/essentials/history-mode.md +++ /dev/null @@ -1,116 +0,0 @@ -# HTML5 히스토리 모드 - -`vue-router`의 기본 모드는 _hash mode_ 입니다. URL 해시를 사용하여 전체 URL을 시뮬레이트하므로 URL이 변경될 때 페이지가 다시 로드 되지 않습니다. - -해시를 제거하기 위해 라우터의 **history 모드** 를 사용할 수 있습니다. `history.pushState` API를 활용하여 페이지를 다시 로드하지 않고도 URL 탐색을 할 수 있습니다. - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -히스토리 모드를 사용하면 URL이 "정상"으로 보입니다. `http://oursite.com/user/id`. 멋집니다! - -그러나 문제는 다음과 같습니다. 우리의 앱이 적절한 서버 설정이 없는 단일 페이지 클라이언트 앱이기 때문에 사용자가 직접 `http://oursite.com/user/id` 에 접속하면 404 오류가 발생합니다. - -걱정하지 않아도됩니다. 문제를 해결하려면 서버에 간단하게 포괄적인 대체 경로를 추가하기만 하면됩니다. URL이 정적 에셋과 일치하지 않으면 앱이 있는 동일한 `index.html`페이지를 제공해야 합니다. - -## 서버 설정 예제 - -#### Apache - -```apache -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Native Node.js - -```js -const http = require("http") -const fs = require("fs") -const httpPort = 80 - -http.createServer((req, res) => { - fs.readFile("index.htm", "utf-8", (err, content) => { - if (err) { - console.log('We cannot open "index.htm" file.') - } - - res.writeHead(200, { - "Content-Type": "text/html; charset=utf-8" - }) - - res.end(content) - }) -}).listen(httpPort, () => { - console.log("Server listening on: http://localhost:%s", httpPort) -}) -``` - - -#### Express와 Node.js - -Node.js/Express의 경우 [connect-history-api-fallback 미들웨어](https://github.com/bripkens/connect-history-api-fallback)를 고려해보세요. - -#### Internet Information Services (IIS) - -``` -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="index.html" /> - </rule> - </rules> - </rewrite> - <httpErrors> - <remove statusCode="404" subStatusCode="-1" /> - <remove statusCode="500" subStatusCode="-1" /> - <error statusCode="404" path="/survey/notfound" responseMode="ExecuteURL" /> - <error statusCode="500" path="/survey/error" responseMode="ExecuteURL" /> - </httpErrors> - <modules runAllManagedModulesForAllRequests="true"/> - </system.webServer> -</configuration> -``` - - -## 주의 사항 - -주의 사항이 있습니다. 여러분의 서버는 404 에러를 보고하지 않을 것입니다. 왜냐하면 모든 발견되지 않은 경로가 이제 `index.html` 파일을 제공하기 때문입니다. 이 문제를 해결하려면 Vue 앱에서 catch-all 라우트를 구현하여 404 페이지를 표시해야합니다. - - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [ - { path: '*', component: NotFoundComponent } - ] -}) -``` - -또는 Node.js 서버를 사용하는 경우 서버 측의 라우터를 사용하여 들어오는 URL을 일치시키고 라우트가 일치하지 않으면 404로 응답하여 폴백을 구현할 수 있습니다. 더 자세한 설명은 [Vue 서버사이드 렌더링 문서](https://ssr.vuejs.org/en/)을 읽어보세요 diff --git a/docs-gitbook/kr/essentials/named-routes.md b/docs-gitbook/kr/essentials/named-routes.md deleted file mode 100644 index bab81564c..000000000 --- a/docs-gitbook/kr/essentials/named-routes.md +++ /dev/null @@ -1,31 +0,0 @@ -# 이름을 가지는 라우트 - -때로는 라우트에 연결하거나 탐색을 수행 할 때 이름이 있는 라우트를 사용하는 것이 더 편리합니다. Router 인스턴스를 생성하는 동안 `routes` 옵션에 라우트를 지정할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -이름을 가진 라우트에 링크하려면, 객체를 `router-link`, 컴포넌트의 `to` prop로 전달할 수 있습니다. - -``` html -<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> -``` - -이것은 `router.push()`와 프로그램적으로 사용되는 것과 정확히 같은 객체입니다. - -```js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -두 경우 모두 라우터는 `/user/123` 경로로 이동합니다. - -전체 예제는 [여기](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js)에 있습니다. diff --git a/docs-gitbook/kr/essentials/named-views.md b/docs-gitbook/kr/essentials/named-views.md deleted file mode 100644 index 0bd6ddfc1..000000000 --- a/docs-gitbook/kr/essentials/named-views.md +++ /dev/null @@ -1,28 +0,0 @@ -# 이름을 가지는 뷰 - -때로는 여러 개의 뷰를 중첩하지 않고 동시에 표시해야 하는 경우가 있습니다. `sidebar` 뷰와 `main` 뷰로 레이아웃을 생성합니다. 이름이 지정된 뷰가 편리한 경우 입니다. 뷰에 하나의 outlet이 있는 대신 여러 개를 사용하여 각 outlet에 이름을 지정할 수 있습니다. 이름이 없는 `router-view`는 이름으로 `default`가 주어집니다. - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -뷰는 컴포넌트를 사용하여 렌더링 되므로 여러 뷰에는 동일한 라우트에 대해 여러 컴포넌트가 필요합니다. `components`(s를 붙입니다) 옵션을 사용해야합니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -이 예제는 [여기](https://jsfiddle.net/posva/6du90epg/)에서 확인할 수 있습니다. diff --git a/docs-gitbook/kr/essentials/navigation.md b/docs-gitbook/kr/essentials/navigation.md deleted file mode 100644 index a1e9d083d..000000000 --- a/docs-gitbook/kr/essentials/navigation.md +++ /dev/null @@ -1,74 +0,0 @@ -# 프로그래밍 방식 네비게이션 - -`<router-link>`를 사용하여 선언적 네비게이션용 anchor 태그를 만드는 것 외에도 라우터의 인스턴스 메소드를 사용하여 프로그래밍으로 이를 수행 할 수 있습니다. - -#### `router.push(location, onComplete?, onAbort?)` - -**참고: Vue 인스턴스 내부에서 라우터 인스턴스에 `$router`로 액세스 할 수 있습니다. 그러므로`this.$router.push`를 사용 할 수 있습니다.** - -다른 URL로 이동하려면 `router.push`를 사용하십시오. 이 메소드는 새로운 항목을 히스토리 스택에 넣기 때문에 사용자가 브라우저의 뒤로 가기 버튼을 클릭하면 이전 URL로 이동하게된다. - -이것은 `<router-link>`를 클릭 할 때 내부적으로 호출되는 메소드이므로 `<router-link :to="...">`를 클릭하면 `router.push(...)`를 호출하는 것과 같습니다. - -| 선언적 방식 | 프로그래밍 방식 | -|-------------|--------------| -| `<router-link :to="...">` | `router.push(...)` | - -전달인자는 문자열 경로 또는 로케이션 디스크립터 객체가 될 수 있습니다. - -예: - -``` js -// 리터럴 string -router.push('home') - -// object -router.push({ path: 'home' }) - -// 이름을 가지는 라우트 -router.push({ name: 'user', params: { userId: 123 }}) - -// 쿼리와 함께 사용, 결과는 /register?plan=private 입니다. -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -2.2.0 버전이후로 선택적으로 `router.push` 또는 `router.replace`에 두번째와 세번째 전달인자로 `onComplete`와 `onAbort` 콜백을 제공합니다. -이 콜백은 탐색이 성공적으로 완료되거나(모든 비동기 훅이 해결된 후) 또는 중단(현재 탐색이 완료되기 전에 동일한 경로로 이동하거나 다른 경로 이동)될 때 호출 됩니다. - -#### `router.replace(location)` - -`router.push`와 같은 역할을 하지만 유일한 차이는 새로운 히스토리 항목에 추가하지 않고 탐색한다는 것입니다. 이름에서 알 수 있듯이 현재 항목을 대체합니다. - -| 선언적 방식 | 프로그래밍 방식 | -|-------------|--------------| -| `<router-link :to="..." replace>` | `router.replace(...)` | - - -#### `router.go(n)` - -이 메소드는 `window.history.go(n)`와 비슷하게 히스토리 스택에서 앞으로 또는 뒤로 이동하는 단계를 나타내는 하나의 정수를 매개 변수로 사용합니다. - -예제 - -``` js -// 한 단계 앞으로 갑니다. history.forward()와 같습니다. history.forward()와 같습니다. -router.go(1) - -// 한 단계 뒤로 갑니다. history.back()와 같습니다. -router.go(-1) - -// 3 단계 앞으로 갑니다. -router.go(3) - -// 지정한 만큼의 기록이 없으면 자동으로 실패 합니다. -router.go(-100) -router.go(100) -``` - -#### History 조작 - -`router.push`, `router.replace` 및 `router.go`는 [`window.history.pushState`,`window.history.replaceState` 및 `window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History)와 상응합니다. 그들은 `window.history` API를 모방합니다. - -따라서 [브라우저 히스토리 API](https://developer.mozilla.org/en-US/docs/Web/API/History_API)에 이미 익숙하다면 vue-router를 사용하여 히스토리를 손쉽게 조작 할 수 있습니다. - -vue-router 네비게이션 메소드(`push`,`replace`,`go`)는 모든 라우터 모드(`history`,`hash` 및`abstract`)에서 일관되게 작동합니다. diff --git a/docs-gitbook/kr/essentials/nested-routes.md b/docs-gitbook/kr/essentials/nested-routes.md deleted file mode 100644 index 651474522..000000000 --- a/docs-gitbook/kr/essentials/nested-routes.md +++ /dev/null @@ -1,100 +0,0 @@ -# 중첩된 라우트 - -실제 앱 UI는 일반적으로 여러 단계로 중첩 된 컴포넌트로 이루어져 있습니다. URL의 세그먼트가 중첩 된 컴포넌트의 특정 구조와 일치한다는 것은 매우 일반적입니다. 예를 들면 다음과 같습니다. - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -`vue-router`를 사용하면 중첩 된 라우트 구성을 사용하여 관계를 표현하는 것이 매우 간단합니다. - -이전 장에서 만든 앱을 생각해보십시오. - -``` html -<div id="app"> - <router-view></router-view> -</div> -``` - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -여기에있는 `<router-view>`는 최상위 outlet입니다. 최상위 경로와 일치하는 컴포넌트를 렌더링합니다. 비슷하게 렌더링 된 컴포넌트는 자신의 중첩 된 `<router-view>`를 포함 할 수도 있습니다. 다음은 `User` 컴포넌트의 템플릿 안에 하나를 추가하는 예 입니다. - -``` js -const User = { - template: ` - <div class="user"> - <h2>User {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -이 중첩 outlet에 컴포넌트를 렌더링하려면 `children`을 사용해야합니다. -`VueRouter` 생성자의 옵션 config: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, - children: [ - { - // /user/:id/profile 과 일치 할 때 - // UserProfile은 User의 <router-view> 내에 렌더링 됩니다. - path: 'profile', - component: UserProfile - }, - { - // /user/:id/posts 과 일치 할 때 - // UserPosts가 User의 <router-view> 내에 렌더링 됩니다. - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**`/`로 시작하는 중첩 된 라우트는 루트 경로로 취급됩니다. 이렇게하면 중첩 된 URL을 사용하지 않고도 컴포넌트 중첩을 활용할 수 있습니다.** - -여러분이 볼 수 있듯이 `children` 옵션은 `routes`와 같은 라우트 설정 객체의 또 다른 배열입니다. 따라서 필요한만큼 중첩 된 뷰를 유지할 수 있습니다. - -이 시점에서, 위의 설정으로, `/user/foo`를 방문했을 때 하위 라우트가 매치되지 않았기 때문에 `User`의 outlet에 아무것도 출력되지 않습니다. 어쩌면 거기에 무언가를 렌더링하고 싶을지도 모릅니다. 이 경우 빈 서브 루트 경로를 제공 할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', component: User, - children: [ - // UserHome은 /user/:id 가 일치 할 때 - // User의 <router-view> 안에 렌더링됩니다. - { path: '', component: UserHome }, - - // ...또 다른 서브 라우트 - ] - } - ] -}) -``` - -이 예제의 작업 데모는 [이 곳](http://jsfiddle.net/yyx990803/L7hscd8h/)에서 찾을 수 있습니다. diff --git a/docs-gitbook/kr/essentials/passing-props.md b/docs-gitbook/kr/essentials/passing-props.md deleted file mode 100644 index f4c8379ee..000000000 --- a/docs-gitbook/kr/essentials/passing-props.md +++ /dev/null @@ -1,70 +0,0 @@ -# 라우트 컴포넌트에 속성 전달 - -컴포넌트에서 `$route`를 사용하면 특정 URL에서만 사용할 수 있는 컴포넌트의 유연성을 제한하는 라우트와 강한 결합을 만듭니다. - -컴포넌트와 라우터 속성을 분리하려면 다음과 같이 하십시오. - -** $route에 의존성 추가** - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -** 속성에 의존성 해제** - -``` js -const User = { - props: ['id'], - template: '<div>User {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - ] -}) -``` - -이를 통해 어디서나 컴포넌트를 사용할 수 있으므로 컴포넌트 재사용 및 테스트하기가 더 쉽습니다. - -### Boolean 모드 - -`props`를 `true`로 설정하면 `route.params`가 컴포넌트 `props`로 설정됩니다. - -### 객체 모드 - -`props`가 객체일때 컴포넌트 `props`가 있는 그대로 설정됩니다. -`props`가 정적일 때 유용합니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } - ] -}) -``` - -### 함수 모드 - -`props`를 반환하는 함수를 만들 수 있습니다. 이를 통해 전달인자를 다른 타입으로 캐스팅하고 적정인 값을 라우트 기반 값과 결합됩니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) } - ] -}) -``` - -`/search?q=vue`는 `{query: "vue"}`를 `SearchUser` 컴포넌트에 전달합니다. - -라우트 변경시에만 평가되므로 `props` 함수는 상태를 저장하지 않도록 합니다. -`props`를 정의할 상태가 필요한 경우 래퍼 컴포넌트를 사용하면 상태가 변경될 때마다 응답할 수 있습니다. - -고급 사용예를 보려면 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js)를 확인하세요. diff --git a/docs-gitbook/kr/essentials/redirect-and-alias.md b/docs-gitbook/kr/essentials/redirect-and-alias.md deleted file mode 100644 index 3da8aeb55..000000000 --- a/docs-gitbook/kr/essentials/redirect-and-alias.md +++ /dev/null @@ -1,57 +0,0 @@ -# 리다이렉트와 별칭 - -### 리다이렉트 - -리디렉션은 `routes` 설정에서도 할 수 있습니다. `/a`에서 `/b`로 리디렉션하려면 - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -리디렉션은 이름이 지정된 라우트를 지정할 수도 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -또는 동적 리디렉션을 위한 함수를 사용할 수도 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // 함수는 인수로 대상 라우트를 받습니다. - // 여기서 path/location 반환합니다. - }} - ] -}) -``` -기타 고급 사용법은 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js)를 확인 하십시오. - -### 별칭 - -리다이렉트는 사용자가 `/a`를 방문했을 때 URL이 `/b`로 대체 된 다음 `/b`로 매칭된다는 것을 의미합니다. 하지만 별칭이란 무엇입니까? - -**`/a`의 별칭은 `/b`는 사용자가 `/b`를 방문했을 때 URL은 `/b`을 유지하지만 사용자가 `/a`를 방문한 것처럼 매칭합니다.** - -위는 라우트 구성에서 다음과 같이 표현할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -별칭을 사용하면 구성의 중첩 구조에 의해 제약을 받는 대신 UI 구조를 임의의 URL에 매핑 할 수 있습니다. - -기타 고급 사용법은 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js)를 확인 하십시오. diff --git a/docs-gitbook/kr/installation.md b/docs-gitbook/kr/installation.md deleted file mode 100644 index 5187b078d..000000000 --- a/docs-gitbook/kr/installation.md +++ /dev/null @@ -1,44 +0,0 @@ -# 설치 - -### 직접 다운로드 / CDN - -[https://unpkg.com/vue-router/dist/vue-router.js](https://unpkg.com/vue-router/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com)은 NPM 기반 CDN 링크를 제공합니다. 위의 링크는 항상 NPM의 최신 릴리스를 가리킵니다. `https://unpkg.com/vue-router@2.0.0/dist/vue-router.js`와 같이 URL을 통해 특정 버전 / 태그를 사용할 수도 있습니다. -<!--/email_off--> - -Vue 다음에 `vue-router`를 포함하면 자동으로 설치됩니다. - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -### NPM - -``` bash -npm install vue-router -``` - -모듈 시스템에서 사용하면 `Vue.use()`를 통해 명시적으로 라우터를 추가해야합니다. - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -전역 스크립트 태그를 사용할 때는 이 작업을 하지 않아도 됩니다. - -### 개발용 빌드 - -최신 dev 빌드를 사용하고 싶은 경우 GitHub에서 직접 복제하고 `vue-router`를 직접 빌드 해야 합니다. - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs-gitbook/old/README.md b/docs-gitbook/old/README.md deleted file mode 100644 index 9d80c1679..000000000 --- a/docs-gitbook/old/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# 0.7 Docs - -- [English](https://github.com/vuejs/vue-router/tree/1.0/docs/en) -- [Chinese](https://github.com/vuejs/vue-router/tree/1.0/docs/zh-cn) -- [Japanese](https://github.com/vuejs/vue-router/tree/1.0/docs/ja) diff --git a/docs-gitbook/old/SUMMARY.md b/docs-gitbook/old/SUMMARY.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs-gitbook/ru/README.md b/docs-gitbook/ru/README.md deleted file mode 100644 index f8a898044..000000000 --- a/docs-gitbook/ru/README.md +++ /dev/null @@ -1 +0,0 @@ -{% include "./SUMMARY.md" %} diff --git a/docs-gitbook/ru/SUMMARY.md b/docs-gitbook/ru/SUMMARY.md deleted file mode 100644 index 240781a3c..000000000 --- a/docs-gitbook/ru/SUMMARY.md +++ /dev/null @@ -1,42 +0,0 @@ -# vue-router - -> Примечание: для пользователей TypeScript, vue-router@3.0+ требуется vue@2.5+, и наоборот. - -**[История изменений](https://github.com/vuejs/vue-router/releases)** - -- [Введение](README.md) -- [Установка](installation.md) -- Основы - - [Начало работы](essentials/getting-started.md) - - [Динамические пути](essentials/dynamic-matching.md) - - [Вложенные пути](essentials/nested-routes.md) - - [Императивная навигация](essentials/navigation.md) - - [Именованные пути](essentials/named-routes.md) - - [Именованные представления](essentials/named-views.md) - - [Редиректы и псевдонимы](essentials/redirect-and-alias.md) - - [Передача входных параметров в компоненты маршрутов](essentials/passing-props.md) - - [Режим HTML5 History](essentials/history-mode.md) -- Продвинутые возможности - - [Сторожевые хуки](advanced/navigation-guards.md) - - [Метаданные путей](advanced/meta.md) - - [Анимация переходов](advanced/transitions.md) - - [Запросы данных](advanced/data-fetching.md) - - [Скроллинг](advanced/scroll-behavior.md) - - [Ленивая загрузка путей](advanced/lazy-loading.md) -- Справочник API - - [Опции конструктора Router'а](api/options.md) - - [routes](api/options.md#routes) - - [mode](api/options.md#mode) - - [base](api/options.md#base) - - [linkActiveClass](api/options.md#linkactiveclass) - - [linkExactActiveClass](api/options.md#linkexactactiveclass) - - [scrollBehavior](api/options.md#scrollbehavior) - - [parseQuery / stringifyQuery](api/options.md#parsequery--stringifyquery) - - [fallback](api/options.md#fallback) - - [Экземпляр Router](api/router-instance.md) - - [Свойства](api/router-instance.md#свойства) - - [Методы](api/router-instance.md#методы) - - [Объект route](api/route-object.md) - - [Интеграция с компонентами Vue](api/component-injections.md) - - [router-link](api/router-link.md) - - [router-view](api/router-view.md) diff --git a/docs-gitbook/ru/advanced/data-fetching.md b/docs-gitbook/ru/advanced/data-fetching.md deleted file mode 100644 index aa5e251c9..000000000 --- a/docs-gitbook/ru/advanced/data-fetching.md +++ /dev/null @@ -1,109 +0,0 @@ -# Запросы данных - -Нередко при переходе между путями требуется получить от сервера какие-либо данные. Например, перед отображением профиля пользователя нужно запросить данные о нём. Этой цели можно достичь двумя различными путями: - -- **Запросив данные после перехода**: сначала перейти к новому пути, затем запросить данные в хуке жизненного цикла целевого компонента. По мере загрузки данных отобразить индикатор состояния загрузки. - -- **Запросив данные перед переходом**: запросить данные в сторожевом хуке роутера, и завершить навигацию уже когда они будут получены. - -С технической точки зрения, оба способа годятся — выбор зависит от того, какой UX вы хотите получить. - -## Запрос данных после перехода - -При использовании этого подхода, мы осуществляем переход и рендеринг целевого компонента сразу же, а данные запрашиваем в хуке `created` компонента. Это позволяет нам отобразить состояние загрузки, пока данные подтягиваются по сети, причём имея возможность сделать это различным образом для разных компонентов. - -Предположим, у нас есть компонент `Post`, которому требуется загрузить с сервера данные, соответствующие id поста из `$route.params.id`: - -``` html -<template> - <div class="post"> - <div class="loading" v-if="loading"> - Загрузка... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // запрашиваем данные когда реактивное представление уже создано - this.fetchData() - }, - watch: { - // в случае изменения маршрута запрашиваем данные вновь - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // замените здесь `getPost` используемым методом получения данных / доступа к API - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## Запрос данных перед переходом - -Используя этот подход, мы запрашиваем данные до завершения перехода к новому пути. Запрос данных выполняется в сторожевом хуке `beforeRouteEnter` компонента, который вызывает `next`, когда данные получены: - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // если путь изменяется, а компонент уже отображён, - // логика будет немного иной - beforeRouteUpdate (to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData (err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -Пользователь останется на предыдущей странице, пока не загрузятся данные новой. По этой причине мы советуем отображать какой-нибудь индикатор загрузки. Кроме того, если загрузка данных не удастся, следует отобразить глобальное сообщение об ошибке. diff --git a/docs-gitbook/ru/advanced/lazy-loading.md b/docs-gitbook/ru/advanced/lazy-loading.md deleted file mode 100644 index 7bb01ba87..000000000 --- a/docs-gitbook/ru/advanced/lazy-loading.md +++ /dev/null @@ -1,47 +0,0 @@ -# Ленивая загрузка путей - -При использовании модульного сборщика, результирующая JavaScript-сборка может оказаться довольно большой, что негативно сказывается на времени загрузки страницы. В некоторых случаях было бы эффективнее разделить компоненты каждого пути на отдельные минисборки, и загружать их только при переходе к соответствующему пути. - -Совместное использование [асинхронной загрузки компонентов](https://ru.vuejs.org/v2/guide/components.html#Асинхронные-компоненты) Vue и [разделения кода](https://webpack.js.org/guides/code-splitting-async/) Webpack делает реализацию ленивой загрузки компонентов в зависимости от путей тривиальной. - -Во-первых, асинхронный компонент можно определить как функцию-фабрику, которая возвращает Promise (который должен разрешиться самим компонентом): - -``` js -const Foo = () => Promise.resolve({ /* определение компонента */ }) -``` - -Во-вторых, в Webpack 2 мы можем использовать синтаксис [динамических импортов](https://github.com/tc39/proposal-dynamic-import) для указания точек разделения кода: - -``` js -import('./Foo.vue') // возвращает Promise -``` - -> Примечание: если вы используете Babel, то нужно будет добавить плагин [syntax-dynamic-import](https://babeljs.io/docs/plugins/syntax-dynamic-import/), чтобы Babel смог корректно обработать синтаксис. - -Эти два пункта — всё необходимое, чтобы определить асинхронный компонент, который Webpack автоматически вынесет в отдельный чанк: - -``` js -const Foo = () => import('./Foo.vue') -``` - -В конфигурации путей ничего менять не нужно, просто используйте `Foo` как обычно: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/foo', component: Foo } - ] -}) -``` - -### Объединение компонентов в единую минисборку - -Иногда может понадобиться объединить в единую минисборку все компоненты, расположенные по определённому пути. Для достижения этой цели можно использовать [именованные минисборки Webpack](https://webpack.js.org/guides/code-splitting-async/#chunk-names), указывая имя используя специальный синтаксис комментариев (в версиях Webpack > 2.4): - -``` js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -Webpack сгруппирует все одноимённые асинхронные модули в единую минисборку. diff --git a/docs-gitbook/ru/advanced/meta.md b/docs-gitbook/ru/advanced/meta.md deleted file mode 100644 index 0a6eae704..000000000 --- a/docs-gitbook/ru/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# Метаданные путей - -При определении пути можно указывать метаданные в поле `meta`: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // метаданные - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -Как получить к нему доступ? - -Прежде всего, каждый объект пути в конфигурации `routes` называется **записью пути**. Записи путей могут быть вложенными. Поэтому, при совпадении пути, потенциально могут быть активированы несколько записей путей. - -Например, для конфигурации выше, URL `/foo/bar` совпадёт как с родительской, так и с дочерней записями путей. - -Все совпавшие записи путей оказываются доступны через объект `$route` (а также через объекты пути в сторожевых хуках), в виде массива `$route.matched`. Таким образом, для проверки метаданных в записях путей нам понадобится обойти `$route.matched` в цикле. - -В качестве примера можно привести проверку метаданных в глобальном сторожевом хуке: - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // этот путь требует авторизации, проверяем залогинен ли - // пользователь, и если нет, перенаправляем на страницу логина - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // всегда так или иначе нужно вызвать next()! - } -}) -``` diff --git a/docs-gitbook/ru/advanced/navigation-guards.md b/docs-gitbook/ru/advanced/navigation-guards.md deleted file mode 100644 index 5ff7b515c..000000000 --- a/docs-gitbook/ru/advanced/navigation-guards.md +++ /dev/null @@ -1,154 +0,0 @@ -# Сторожевые хуки - -Как следует из названия, сторожевые хуки `Vue-router` используются для редиректов или отмены навигационных переходов. Есть несколько способов внедрить сторожевой хук: глобально, для конкретного пути, или для конкретного компонента. - -Следует помнить, что **изменение параметров маршрута не вызывает выполнения сторожевых хуков enter/leave**. Вы можете добавить [watch на объект `$route`](../essentials/dynamic-matching.md#отслеживание-изменений-параметров) для отслеживания этих изменений, или использовать хук `beforeRouteUpdate`. - -### Глобальные хуки - -Глобальный хук можно зарегистрировать через `router.beforeEach`: - -``` js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -Глобальные сторожевые хуки вызываются в порядке создания при каждом навигационном переходе. Допускается асинхронное разрешение хуков — в этом случае переход считается **незавершённым** до тех пор, пока не будут разрешены все хуки. - -В каждый сторожевой хук передаётся три параметра: - -- **`to: Route`**: целевой [объект Route](../api/route-object.md), к которому осуществляется переход. - -- **`from: Route`**: текущий путь, с которого осуществляется переход к новому. - -- **`next: Function`**: функция, вызов которой **разрешает** хук. В зависимости от переданных в `next` аргументов, результатом будет: - - - **`next()`**: переход к следующему хуку в цепочке. Если хуков больше нет, переход считается **подтверждённым**. - - - **`next(false)`**: отмена перехода. Если URL был изменён (вручную пользователем, или кнопкой "назад"), он будет сброшен на соответствующий пути `from`. - - - **`next('/')` или `next({ path: '/' })`**: перенаправление на другой путь. Текущий переход будет отменён, и процесс начнётся заново для нового пути. Вы можете передать любой объект местоположения в `next`, который позволяет вам указывать опции такие как `replace: true`, `name: 'home'` и любой другой параметр используемый во [входном параметре `to` компонента `router-link`](../api/router-link.md) или [`router.push`](../api/router-instance.md#methods) - - - **`next(error)`**: (добавлено в версии 2.4.0+) если аргумент, переданный `next` является экземпляром `Error`, навигация будет прервана и ошибка будет передана в коллбек, зарегистрированный через [`router.onError()`](../api/router-instance.html#методы). - -**Удостоверьтесь, что функция `next` так или иначе будет вызвана, иначе хук никогда не будет разрешён.** - -### Глобальные хуки разрешения перехода - -> Добавлено в версии 2.5.0 - -В 2.5.0+ вы можете зарегистрировать глобальный хук с помощью `router.beforeResolve`. Это похоже на `router.beforeEach`, с той разницей, что разрешающий хук будет вызван непосредственно перед подтверждением навигации, **после того, как будут разрешены все хуки компонента и асинхронные компоненты для маршрута**. - -### Глобальные хуки завершения перехода - -Можно также зарегистрировать глобальные хуки, вызываемые после завершения перехода. Однако, в отличие от сторожевых хуков, в них не передаётся функция `next`, и на ход перехода они повлиять не могут: - -``` js -router.afterEach((to, from) => { - // ... -}) -``` - -### Указание хука для конкретного пути - -Сторожевые хуки `beforeEnter` можно указать напрямую для конкретного пути в его конфигурации: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -Эти хуки ничем не отличаются от глобальных. - -### Указание хука для конкретного компонента - -Наконец, сторожевой хук можно указать и непосредственно в компоненте (том, что указан в конфигурации пути), используя следующие опции: - -- `beforeRouteEnter` -- `beforeRouteUpdate` (добавлено в версии 2.2+) -- `beforeRouteLeave` - -``` js -const Foo = { - template: `...`, - beforeRouteEnter (to, from, next) { - // вызывается до подтверждения пути, соответствующего этому компоненту. - // НЕ имеет доступа к контексту экземпляра компонента `this`, - // так как к моменту вызова экземпляр ещё не создан! - }, - beforeRouteUpdate (to, from, next) { - // вызывается когда маршрут, что рендерит этот компонент изменился, - // но этот компонент будет повторно использован в новом маршруте. - // Например, для маршрута с динамическими параметрами `/foo/:id`, когда мы - // перемещаемся между `/foo/1` и `/foo/2`, экземпляр того же компонента `Foo` - // будет использован повторно, и этот хук будет вызван когда это случится. - // Также имеется доступ в `this` к экземпляру компонента. - }, - beforeRouteLeave (to, from, next) { - // вызывается перед переходом от пути, соответствующего текущему компоненту; - // имеет доступ к контексту экземпляра компонента `this`. - } -} -``` - -Хук `beforeRouteEnter` **НЕ** имеет доступа к `this`, так как к моменту его вызова навигация ещё не подтверждена, а значит и экземпляр компонента ещё не создан. - -Тем не менее, доступ к экземпляру можно получить, передав коллбэк в `next`. Эта функция будет вызвана после подтверждения навигации, а экземпляр компонента будет передан в неё в качестве параметра: - -``` js -beforeRouteEnter (to, from, next) { - next(vm => { - // экземпляр компонента доступен как `vm` - }) -} -``` - -Обратите внимание, что `beforeRouteEnter` — единственный хук, который поддерживает передачу коллбэка в `next`. Для `beforeRouteUpdate` и `beforeRouteLeave`, `this` уже доступен, поэтому передача коллбэка не требуется и поэтому *не поддерживается*: - -```js -beforeRouteUpdate (to, from, next) { - // просто используйте `this` - this.name = to.params.name - next() -} -``` - -**Сторожевой хук ухода со страницы** обычно используется для предотвращения случайного ухода пользователя со страницы с несохранёнными изменениями. Навигацию можно отменить вызовом `next(false)`. - -```js -beforeRouteLeave (to, from , next) { - const answer = window.confirm('Вы действительно хотите уйти? У вас есть несохранённые изменения!') - if (answer) { - next() - } else { - next(false) - } -} -``` - -### Полная цепочка обработки навигации - -1. Срабатывание навигации. -2. Вызов leave-хуков в деактивируемых компонентах. -3. Вызов глобальных `beforeEach` хуков. -4. Вызов `beforeRouteUpdate` хука в переиспользуемых компонентах (2.2+). -5. Вызов `beforeEnter` в конфигурации маршрута. -6. Разрешение асинхронных компонентов для маршрута. -7. Вызов `beforeRouteEnter` в активируемых компонентах. -8. Вызов глобальных `beforeResolve` хуков (2.5+). -9. Навигация подтверждена. -10. Вызов глобальных `afterEach` хуков. -11. Выполняется обновление DOM. -12. Вызов коллбэков, переданных в `next` в `beforeRouteEnter` хуке с созданными экземплярами. diff --git a/docs-gitbook/ru/advanced/scroll-behavior.md b/docs-gitbook/ru/advanced/scroll-behavior.md deleted file mode 100644 index 1c4fb5a6c..000000000 --- a/docs-gitbook/ru/advanced/scroll-behavior.md +++ /dev/null @@ -1,80 +0,0 @@ -# Скроллинг - -При переходе между страницами в рамках клиентского роутинга, можно сохранять позицию скроллинга для каждой записи в истории (что обычно делают браузеры при работе с традиционными приложениями), или же проматывать страницу вверх. `Vue-router` позволяет использовать оба варианта, и даже более того — позволяет полностью настроить поведение скроллинга при навигации. - -**Замечание: эта возможность работает если браузер поддерживает `history.pushState`.** - -При создании экземпляра роутера, вы можете указать функцию `scrollBehavior`: - -``` js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // здесь нужно вернуть требуемую позицию скролла - } -}) -``` - -Функция `scrollBehavior` получает объекты путей `to` и `from`. В третьем параметре, `savedPosition`, передаётся сохранённая в истории браузера позиция скролла (только в случае `popstate`-перехода, вызванного нажатием кнопок вперёд/назад в браузере). - -Функция возвращает объект позиции скролла. Он может иметь одну из двух форм: - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset поддерживается только в 2.6.0+) - -Если возвращается пустой объект или приводимое к ложному значение, скроллинга не произойдёт. - -Например: - -``` js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -Таким образом мы просто заставим браузер проматывать скролл к началу каждой открытой страницы. - -Возврат `savedPosition` позволяет эмулировать нативное поведение браузера при использовании кнопок назад/вперёд: - -``` js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -Эмулировать поведение "прокрутки к якорю" ("scroll to anchor") можно так: - -``` js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -Можно также использовать [метаданные путей](meta.md) для более сложного управления скроллингом. Полная реализация подхода содержится в [этом примере](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js). - -### Асинхронный скроллинг - -> Добавлено в версии 2.8.0 - -Вы также можете вернуть Promise, который разрешится дескриптором с желаемой позицией: - -``` js -scrollBehavior (to, from, savedPosition) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ x: 0, y: 0 }) - }, 500) - }) -} -``` - -Это возможно связать с событиями из сменяющегося компонента-страниц, чтобы сделать поведение прокрутки более сочетаемым с вашими анимациями перехода между страницами, но из-за множества возможных вариантов и комплексности примеров, мы просто предоставляем этот просто пример чтобы показать где можно разместить собственную реализацию. diff --git a/docs-gitbook/ru/advanced/transitions.md b/docs-gitbook/ru/advanced/transitions.md deleted file mode 100644 index adcf8a18f..000000000 --- a/docs-gitbook/ru/advanced/transitions.md +++ /dev/null @@ -1,59 +0,0 @@ -# Анимация переходов - -Поскольку `<router-view>` — это просто динамический компонент, к нему можно применить анимированные переходы, используя `<transition>`: - -``` html -<transition> - <router-view></router-view> -</transition> -``` - -Всё, [что сказано о `<transition>` в документации основной библиотеки](https://ru.vuejs.org/v2/guide/transitions.html), применимо и здесь. - -### Анимация переходов для конкретных путей - -Синтаксис выше применит одну и ту же анимацию перехода для всех путей. Если для различных путей хочется указать разные анимационные эффекты, можно использовать разноимённые `<transition>` непосредственно в шаблонах компонентов: - -``` js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -### Динамические анимационные переходы для путей - -Можно также определить переходы для путей динамически, в зависимости от соотношения между старым и новым путём: - -``` html -<!-- используем динамическое имя анимационного перехода --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -``` js -// затем, в родительском компоненте, будем следить за переменной `$route`, -// чтобы определить, какой анимационный переход применить - -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -Полный пример можно посмотреть [здесь](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js). diff --git a/docs-gitbook/ru/api/component-injections.md b/docs-gitbook/ru/api/component-injections.md deleted file mode 100644 index 872a2c976..000000000 --- a/docs-gitbook/ru/api/component-injections.md +++ /dev/null @@ -1,21 +0,0 @@ -# Интеграция с компонентами Vue - -### Добавляемые свойства - -Перечисленные ниже свойства становятся доступными в каждом дочернем компоненте при передаче роутера через опцию `router` корневого экземпляра приложения. - -- #### $router - - Экземпляр роутера. - -- #### $route - - Объект [Route](route-object.md), соответствующий текущему активному пути. Это свойство доступно только на чтение и его параметры иммутабельны, но над ними можно установить наблюдение. - -### Доступные опции - -- **beforeRouteEnter** -- **beforeRouteUpdate** (добавлено в версии 2.2) -- **beforeRouteLeave** - - См. [раздел документации о сторожевых хуках](../advanced/navigation-guards.md#указание-хука-для-конкретного-компонента). diff --git a/docs-gitbook/ru/api/options.md b/docs-gitbook/ru/api/options.md deleted file mode 100644 index 722236670..000000000 --- a/docs-gitbook/ru/api/options.md +++ /dev/null @@ -1,107 +0,0 @@ -# Опции конструктора Router'а - -### routes - -- тип: `Array<RouteConfig>` - - Декларация типа для `RouteConfig`: - - ``` js - declare type RouteConfig = { - path: string; - component?: Component; - name?: string; // для именованных путей - components?: { [name: string]: Component }; // для именованных представлений - redirect?: string | Location | Function; - props?: boolean | string | Function; - alias?: string | Array<string>; - children?: Array<RouteConfig>; // для вложенных путей - beforeEnter?: (to: Route, from: Route, next: Function) => void; - meta?: any; - - // 2.6.0+ - caseSensitive?: boolean; // учитывать ли регистр при сравнении? (по умолчанию: false) - pathToRegexpOptions?: Object; // настройки path-to-regexp для компиляции regex - } - ``` - -### mode - -- тип: `string` - -- значение по умолчанию: `"hash" (in browser) | "abstract" (in Node.js)` - -- возможные значения: `"hash" | "history" | "abstract"` - - Указывает режим работы роутера. - - - `hash`: для роутинга будут использоваться URL-хэши. Работает во всех поддерживаемых браузерах, включая те, что не поддерживают HTML5 History API. - - - `history`: требует для работы поддержку HTML5 History API в браузере с соответствующую конфигурацию сервера. См. [раздел документации об использовании режима HTML5 History](../essentials/history-mode.md). - - - `abstract`: работает в любом JavaScript-окружении, включая серверный рендеринг с помощью Node.js. **Роутер переключается в этот режим автоматически, если не обнаруживает API браузера.** - -### base - -- тип: `string` - -- значение по умолчанию: `"/"` - - Базовый URL приложения. Например, если SPA находится по пути `/app/`, значением `base` также должно быть `"/app/"`. - -### linkActiveClass - -- тип: `string` - -- значение по умолчанию: `"router-link-active"` - - Глобальная конфигурация CSS-класса по умолчанию для активных ссылок `<router-link>`. См. также [router-link](router-link.md). - -### linkExactActiveClass - -> Добавлено в версии 2.5.0+ - -- Тип: `string` - -- По умолчанию: `"router-link-exact-active"` - - Глобально настраивает для `<router-link>` активный класс по умолчанию для точных совпадений маршрута. См. также [router-link](router-link.md). - -### scrollBehavior - -- тип: `Function` - - Сигнатура: - - ``` - type PositionDescriptor = - { x: number, y: number } | - { selector: string } | - ?{} - - type scrollBehaviorHandler = ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => PositionDescriptor | Promise<PositionDescriptor> - ``` - - Для подробностей см. [Скроллинг](../advanced/scroll-behavior.md). - -### parseQuery / stringifyQuery - -> Добавлено в версии 2.4.0+ - -- Тип: `Function` - - Пользовательские функции для парсинга строки запроса / приведения к строке запроса (функции stringify). Переопределяют значения по умолчанию. - -### fallback - -> 2.6.0+ - -- Тип: `boolean` - - Контролирует, должен ли маршрутизатор возвращаться в режим `hash`, когда браузер не поддерживает `history.pushState`. По умолчанию значение `true`. - - Установка этого параметра в `false` будет вызывать для каждой навигации через `router-link` полное обновление страницы в IE9. Это может быть полезным, когда приложение рендерится на стороне сервера и должно работать в IE9, потому что режим `hash` не работает с SSR. diff --git a/docs-gitbook/ru/api/route-object.md b/docs-gitbook/ru/api/route-object.md deleted file mode 100644 index 2f6bd0b8e..000000000 --- a/docs-gitbook/ru/api/route-object.md +++ /dev/null @@ -1,89 +0,0 @@ -# Объект Route - -**Объект Route** содержит состояние текущего активного пути, а именно: структурированную информацию о текущем URL и **записи путей**, совпавшие с ним. - -Объект пути иммутабелен: при каждом навигационном переходе он пересоздаётся заново. - -Объекты пути могут быть обнаружены в нескольких местах: - -- В компонентах, в виде `this.$route` - -- В коллбэках при отслеживании `$route` - -- Как возвращаемое значение при вызове `router.match(location)` - -- В качестве первых двух параметров сторожевых хуков: - - ``` js - router.beforeEach((to, from, next) => { - // как `to` так и `from` являются объектами пути - }) - ``` - -- В качестве первых двух параметров функции `scrollBehavior` : - - ``` js - const router = new VueRouter({ - scrollBehavior (to, from, savedPosition) { - // как `to` так и `from` являются объектами пути - } - }) - ``` - -### Свойства объекта Route - -- **$route.path** - - - тип: `string` - - Строковое значение path текущего пути, всегда в абсолютном формате, напр. `"/foo/bar"`. - -- **$route.params** - - - тип: `Object` - - Объект, содержащий пары ключ/значение для динамических сегментов (включая *-сегменты). Будет пустым, если параметров у пути нет. - -- **$route.query** - - - тип: `Object` - - Объект, содержащий пары ключ/значение для строки запроса (query string). Например, для пути `/foo?user=1` получится `$route.query.user == 1`. При отсутствии строки запроса, будет пустым объектом. - -- **$route.hash** - - - тип: `string` - - Хэш текущего пути (с символом `#`), если присутствует. В противном случае — пустая строка. - -- **$route.fullPath** - - - тип: `string` - - Полная запись URL, включая строку запроса и хэш. - -- **$route.matched** - - - тип: `Array<RouteRecord>` - - Массив, содержащий **записи путей** для всех вложенных сегментов текущего пути. Записи путей — это копии объектов конфигурации из массива `routes` (и вложенных массивов `children`): - - ``` js - const router = new VueRouter({ - routes: [ - // объект ниже — это запись пути - { path: '/foo', component: Foo, - children: [ - // это — тоже запись пути - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - Для URL, равного `/foo/bar`, `$route.matched` будет массивом, содержащим копии обоих объектов, в порядке сортировки от родителя к потомку. - -- **$route.name** - - Имя текущего пути, если указано. (См. [Именованные пути](../essentials/named-routes.md)) diff --git a/docs-gitbook/ru/api/router-instance.md b/docs-gitbook/ru/api/router-instance.md deleted file mode 100644 index 7602fa9b7..000000000 --- a/docs-gitbook/ru/api/router-instance.md +++ /dev/null @@ -1,88 +0,0 @@ -# Экземпляр Router - -### Свойства - -#### router.app - -- тип: `Vue instance` - - Корневой экземпляр Vue, в который был интегрирован `router`. - -#### router.mode - -- тип: `string` - - [Режим](options.md#mode), используемый роутером. - -#### router.currentRoute - -- тип: `Route` - - Текущий путь в виде [объекта Route](route-object.md). - -### Методы - -- **router.beforeEach(guard)** -- **router.beforeResolve(guard)** (добавлено в версии 2.5.0+) -- **router.afterEach(hook)** - - См. [сторожевые хуки](../advanced/navigation-guards.md). - - С версии 2.5.0+ все три метода возвращают функцию, которая удаляет зарегистрированный хук. - -- **router.push(location, onComplete?, onAbort?)** -- **router.replace(location, onComplete?, onAbort?)** -- **router.go(n)** -- **router.back()** -- **router.forward()** - - Методы для императивного перехода к новому URL. См. [Императивная навигация](../essentials/navigation.md). - -- **router.getMatchedComponents(location?)** - - Возвращает массив компонентов (определение/конструктор, не экземпляры), совпадающих с текущим путём. В основном используется во время рендеринга на сервере для получения необходимых данных. - -- **router.resolve(location, current?, append?)** - - > 2.1.0+ - - Служит для обратного разрешения URL. Получая на вход путь в том же формате, что используется `<router-link/>`, возвращает объект со следующими свойствами: - - ``` js - { - location: Location; - route: Route; - href: string; - } - ``` - - - `current` — текущий маршрут по умолчанию (в большинстве случаем вам не нужно это изменять) - - `append` — позволяет вам добавить путь к маршруту `current` (например, с помощью [`router-link`](router-link.md#props)) - -- **router.addRoutes(routes)** - - > 2.2.0+ - - Динамически добавить дополнительные маршруты в маршрутизатор. Аргументом должен быть массив маршрутов в таком же формате как и в опции `routes` конструктора. - -- **router.onReady(callback[, errorCallback])** - - > 2.2.0+ - - Этот метод добавляет в очередь коллбек, который будет вызван когда маршрутизатор завершит начальную навигацию, что означает что будут завершены все асинхронные хуки и будут готовы асинхронные компоненты связанные с начальным маршрутом. - - Это будет полезно при рендеринге на стороне сервера для обеспечения одинакового результата как на сервере, так и на клиенте. - - Второй аргумент `errorCallback` поддерживается только в версиях 2.4+. Он вызывается, когда исходное разрешение маршрута заканчивается ошибкой (например, не удалось разрешить асинхронный компонент). - -- **router.onError(callback)** - - > Добавлено в версии 2.4.0+ - - Регистрация коллбека, который будет вызываться при ошибках во время навигации по маршруту. Обратите внимание, что для вызова ошибки должен быть использован один из следующих сценариев: - - - Ошибка произошла синхронно внутри функции маршрута; - - - Ошибка фиксируется и асинхронно обрабатывается с помощью `next(err)` внутри функции сторожевого хука; - - - Произошла ошибка при попытке разрешить асинхронный компонент, необходимый для отображения маршрута. diff --git a/docs-gitbook/ru/api/router-link.md b/docs-gitbook/ru/api/router-link.md deleted file mode 100644 index 602903b92..000000000 --- a/docs-gitbook/ru/api/router-link.md +++ /dev/null @@ -1,139 +0,0 @@ -# `<router-link>` - -`<router-link>` — это компонент, используемый для создания ссылок в приложениях, использующих клиентский роутинг. Целевой путь указывается во входном параметре `to`. По умолчанию используется тег `<a>` и параметр `href`, но это поведение можно изменить указанием входного параметра `tag`. Кроме того, для ссылки автоматически устанавливается CSS-класс при активации соответствующего пути. - -Использование `<router-link>` предпочтительнее, чем создание ссылок `<a href="...">` вручную, по следующим причинам: - -- Единообразие вне зависимости от используемого режима навигации (HTML history или хеши), из-за чего не потребуется вносить изменения в код, если вы захотите сменить режим (или если приложение окажется открыто в IE9, не поддерживающем HTML history mode). - -- В HTML5 history mode, `router-link` перехватывает клики, что предотвращает попытки браузера перезагрузить страницу. - -- При использовании опции `base` в HTML5 history mode нет необходимости включать префиксы URL при указании входных параметров `to`. - - -### Входные параметры - -- **to** - - - тип: `string | Location` - - - обязательный - - Указывает целевой путь ссылки. При клике, значение `to` будет передано в `router.push()` — поэтому им может быть как строка, так и описывающий путь объект. - - ``` html - <!-- строка --> - <router-link to="home">Home</router-link> - <!-- результат рендеринга --> - <a href="home">Home</a> - - <!-- javascript-выражение через `v-bind` --> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- Можно использовать сокращенную запись `v-bind` --> - <router-link :to="'home'">Home</router-link> - - <!-- даст тот же результат --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- с использованием именованного пути --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- с использованием строки запроса, получим `/register?plan=private` --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link> - ``` - -- **replace** - - - тип: `boolean` - - - значение по умолчанию: `false` - - При указании параметра `replace` вместо `router.push()` при клике будет вызываться `router.replace()`, и переход не оставит следов в браузерной истории. - - ``` html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -- **append** - - - тип: `boolean` - - - значение по умолчанию: `false` - - Указание параметра `append` заставляет считать пути по умолчанию относительными. Например, при переходе с `/a` по относительной ссылке `b`, без указания `append` мы получим `/b`, а с указанием этого параметра — `/a/b`. - - ``` html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -- **tag** - - - тип: `string` - - - значение по умолчанию: `"a"` - - Время от времени хотелось бы, чтобы `<router-link>` использовал иной тег, например `<li>`. Мы можем использовать входной параметр `tag` для этих целей, и получившийся элемент всё так же будет реагировать на клики для навигации. - - ``` html - <router-link to="/foo" tag="li">foo</router-link> - <!-- отобразится как --> - <li>foo</li> - ``` - -- **active-class** - - - тип: `string` - - - значение по умолчанию: `"router-link-active"` - - В этом параметре можно изменить CSS-класс, применяемый к активным ссылкам. Обратите внимание, что значение по умолчанию тоже может быть изменено при помощи опции `linkActiveClass` конструктора роутера. - -- **exact** - - - тип: `boolean` - - - значение по умолчанию: `false` - - По умолчанию активность ссылки устанавливается по стратегии **совпадения по включению**. Например, для `<router-link to="/a">` класс активности будет применён для всех ссылок, начинающихся с `/a/` или `/a`. - - Одним из следствий этого подхода является тот факт, что корневая ссылка `<router-link to="/">` будет считаться активной всегда. Чтобы заставить ссылку считаться активной только при полном совпадении, используйте входной параметр `exact`: - - ``` html - <!-- эта ссылка будет активной только для корневого пути `/` --> - <router-link to="/" exact> - ``` - - Больше примеров с подробными объяснениями использования класса активности можно найти [здесь](https://jsfiddle.net/8xrk1n9f/). - -- **event** - - > 2.1.0+ - - - тип: `string | Array<string>` - - - значение по умолчанию: `'click'` - - Указывает событие(я), способные вызвать переход по ссылке. - -- **exact-active-class** - - > Добавлено в версии 2.5.0+ - - - Тип: `string` - - - По умолчанию: `"router-link-exact-active"` - - Укажите активный CSS-класс, применяемый когда ссылка активна с точным соответствием маршрута. Обратите внимание, что значение по умолчанию также может быть настроено глобально с помощью опции `linkExactActiveClass` в конструкторе VueRouter. - -### Применение класса активности ко внешнему элементу - -Иногда хочется применить класс активности не к самому тегу `<a>`, а к другому элементу. Для этих целей можно использовать `<router-link>` для наружного элемента, а ссылку разместить внутри, вручную: - -``` html -<router-link tag="li" to="/foo"> - <a>/foo</a> -</router-link> -``` - -Vue-router поймёт, что в качестве ссылки нужно использовать вложенный элемент (и укажет правильное значение `href` для неё), но вот класс активности будет применяться ко внешнему элементу `<li>`. diff --git a/docs-gitbook/ru/api/router-view.md b/docs-gitbook/ru/api/router-view.md deleted file mode 100644 index f169c7dcb..000000000 --- a/docs-gitbook/ru/api/router-view.md +++ /dev/null @@ -1,29 +0,0 @@ -# `<router-view>` - -`<router-view>` — это функциональный компонент, отображающий соответствующее текущему пути представление. Компоненты, отображаемые на месте `<router-view>` могут сами содержать вложенные `<router-view>`, что позволяет организовать иерархию вложенных путей. - - -### Входные параметры - -- **name** - - - тип: `string` - - - значение по умолчанию: `"default"` - - Если для `<router-view>` указывается имя, на его месте отобразится компонент, для которого в записи пути указано соответствующее имя в опции `components`. Для подробностей и примера см. [именованные представления](../essentials/named-views.md). - - -### Поведение - -Все остальные входные параметры будут напрямую переданы отображаемому компоненту представления. Тем не менее, чаще всего данные уровня пути содержатся в параметрах пути (`$route.params`). - -Поскольку мы имеем дело всего лишь с обыкновенным компонентом, можно использовать обёртки `<transition>` и `<keep-alive>`. Если вы используете оба, удостоверьтесь, что `<keep-alive>` располагается внутри: - -``` html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` diff --git a/docs-gitbook/ru/essentials/dynamic-matching.md b/docs-gitbook/ru/essentials/dynamic-matching.md deleted file mode 100644 index 3b7067ca2..000000000 --- a/docs-gitbook/ru/essentials/dynamic-matching.md +++ /dev/null @@ -1,74 +0,0 @@ -# Динамические пути - -Очень часто требуется сопоставить компонент с множеством путей по указанному шаблону. Например, мы можем использовать компонент `User` для всех пользователей в соответствии с их ID. Во `Vue-router` мы можем указать динамический сегмент в пути для этой цели: - -``` js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // динамические сегменты начинаются с двоеточия - { path: '/user/:id', component: User } - ] -}) -``` - -Теперь все URL вида `/user/foo` или `/user/bar` соответствуют одному пути. - -Динамический сегмент обозначается двоеточием `:`. При совпадении пути, значение динамического сегмента можно получить через `this.$route.params` для каждого компонента. Например, мы можем отобразить ID текущего пользователя, немного изменив шаблон: - -``` js -const User = { - template: '<div>Пользователь {{ $route.params.id }}</div>' -} -``` - -Посмотреть на пример вживую можно [здесь](https://jsfiddle.net/yyx990803/4xfa2f19/). - -Может быть несколько динамических сегментов в одном пути. Для каждого сегмента появится соответствующее свойство в `$route.params`. Например: - -| Шаблон | Совпадающий путь | $route.params | -|---------|------|--------| -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -Помимо `$route.params`, объект `$route` также позволяет получить доступ к другой полезной информации, например `$route.query` (если URL содержит строку запроса), `$route.hash`, и т.д. Подробнее в [справочнике API](../api/route-object.md). - -### Отслеживание изменений параметров - -Важно отметить, что при переходе от `/user/foo` к `/user/bar` **будет повторно использован тот же самый экземпляр компонента**. Поскольку оба пути указывают на один и тот же компонент, этот подход эффективнее, чем уничтожение и повторное создание экземпляра. **Но это означает, что хуки жизненного цикла компонента при этом вызваны не будут**. - -Чтобы отследить изменения параметров пути в рамках компонента, нужно просто установить наблюдение за объектом `$route`: - -``` js -const User = { - template: '...', - watch: { - '$route' (to, from) { - // обработка изменений параметров пути... - } - } -} -``` - -Или можно воспользоваться хуком `beforeRouteUpdate`, добавленным в версии 2.2: - -``` js -const User = { - template: '...', - beforeRouteUpdate (to, from, next) { - // обработка изменений параметров пути... - // не забудьте вызывать next() - } -} -``` - -### Продвинутые возможности - -`Vue-router` использует [path-to-regexp](https://github.com/pillarjs/path-to-regexp) в качестве движка для проверки совпадения путей, что позволяет задействовать многие продвинутые возможности, включая опциональные динамические сегменты и регулярные выражения. [Документация библиотеки](https://github.com/pillarjs/path-to-regexp#parameters) содержит информацию об этих возможностях роутинга, а [этот пример](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) — о том, как использовать их совместно с `Vue-router`. - -### Приоритетность при совпадении путей - -Иногда один и тот же URL может совпасть с несколькими путями. В таких случаях приоритет определяется порядком определения путей: чем раньше определён путь, тем выше у него приоритет. diff --git a/docs-gitbook/ru/essentials/getting-started.md b/docs-gitbook/ru/essentials/getting-started.md deleted file mode 100644 index 446e2c418..000000000 --- a/docs-gitbook/ru/essentials/getting-started.md +++ /dev/null @@ -1,91 +0,0 @@ -# Введение - -> В примерах используется синтаксис [ES2015](https://github.com/lukehoban/es6features). - -Создать одностраничное приложение используя Vue.js и Vue-router очень просто. Используя Vue.js, мы уже компонуем своё приложение из компонентов. Добавляя Vue-router, мы просто сопоставляем компонентам пути, и указываем, где именно их отображать. Вот простой пример: - -> Все примеры используют полную сборку Vue, которая позволяет использовать парсинг шаблонов. Подробнее о разнице сборок можно почитать [в документации к Vue.js](https://ru.vuejs.org/v2/guide/installation.html#Объяснение-различных-сборок). - -### HTML - -``` html -<script src="https://unpkg.com/vue/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- используйте компонент router-link для создания ссылок --> - <!-- входной параметр `to` определяет путь для перехода --> - <!-- `<router-link>` по умолчанию преобразуется в тег `<a>` --> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- отображение компонента, для которого совпал путь --> - <router-view></router-view> -</div> -``` - -### JavaScript - -``` js -// 0. При использовании модульной системы (напр. vue-cli), -// импортируйте Vue и VueRouter и затем вызовите `Vue.use(VueRouter)` - -// 1. Определение используемых компонентов -// Они могут быть импортированы из внешних файлов -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. Определение путей -// Каждый путь должен указывать на компонент -// "Компонентом" может быть как созданный через `Vue.extend()` -// полноценный конструктор, так и просто объект с настройками компонента -// Вложенные пути будут рассмотрены далее. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. Создаём экземпляр роутера с опцией `routes` -// Можно передать и другие опции, но пока не будем усложнять -const router = new VueRouter({ - routes // сокращение от `routes: routes` -}) - -// 4. Создаём и монтируем корневой экземпляр Vue нашего приложения. -// Удостоверьтесь, что передали экземпляр роутера в опции `router`, -// что позволит приложению знать о его наличии -const app = new Vue({ - router -}).$mount('#app') - -// Всё, приложение работает! ;) -``` - -Установив маршрутизатор, мы можем получить к нему доступ через `this.$router`, а также к текущему маршруту через `this.$route` внутри любого компонента: - -```js -// Home.vue -export default { - computed: { - username () { - // Мы скоро разберём что такое `params` - return this.$route.params.username - } - }, - methods: { - goBack () { - window.history.length > 1 - ? this.$router.go(-1) - : this.$router.push('/') - } - } -} -``` - -В документации мы будем часто использовать экземпляр `router` (маршрутизатора). Имейте ввиду, что `this.$router` в точности тоже самое, что и `router`. Причина, по которой мы используем `this.$router` заключается в том, что мы не хотим импортировать маршрутизатор в каждом компоненте, в котором потребуется управлять маршрутизацией. - -Вживую этот пример доступен [здесь](https://jsfiddle.net/yyx990803/xgrjzsup/). - -Обратите внимание, что `<router-link>` автоматически получает класс `.router-link-active` при совпадении пути. Подробнее об этом можно узнать в [справочнике API](../api/router-link.md). diff --git a/docs-gitbook/ru/essentials/history-mode.md b/docs-gitbook/ru/essentials/history-mode.md deleted file mode 100644 index a988ace89..000000000 --- a/docs-gitbook/ru/essentials/history-mode.md +++ /dev/null @@ -1,136 +0,0 @@ -# Режим HTML5 History - -Режимом по умолчанию для `Vue-router` является _hash mode_, использующий хэш URL'а для симуляции полного URL-адреса, что позволяет избежать перезагрузки страницы при изменении URL. - -Мы можем обойтись без хэша, используя **history mode**, который работает с API `history.pushState` для достижения той же цели: - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -При использовании history mode URL выглядит естественно, например: `http://oursite.com/user/id`. Прекрасно! - -Возникает, однако, и проблема: поскольку наше приложение — одностраничное, не сконфигурировав соответствующим образом сервер мы заставим пользователей получать ошибку 404, если они перейдут по `http://oursite.com/user/id` напрямую. Вот это уже прекрасным не назвать. - -Не спешите расстраиваться: всё, что нужно — единственная "резервная" запись в конфигурации сервера. Если URL не совпадает ни с одним статическим файлом, сервер должен просто отдать `index.html`, в котором и живёт наше приложение. И снова, прекрасно! - -## Примеры конфигурации серверов - -#### Apache - -```apache -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Node.js - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http.createServer((req, res) => { - fs.readFile('index.htm', 'utf-8', (err, content) => { - if (err) { - console.log('Невозможно открыть файл "index.htm".') - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) -}).listen(httpPort, () => { - console.log('Сервер запущен на: http://localhost:%s', httpPort) -}) -``` - -#### Node.js c использованием Express - -При использовании Node.js/Express, мы рекомендуем пользоваться [connect-history-api-fallback middleware](https://github.com/bripkens/connect-history-api-fallback). - -#### Internet Information Services (IIS) - -1. Установить [IIS UrlRewrite](https://www.iis.net/downloads/microsoft/url-rewrite) -2. Создать файл `web.config` в корневом каталоге вашего сайта со следующим содержимым: - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="/" /> - </rule> - </rules> - </rewrite> - </system.webServer> -</configuration> -``` - -#### Caddy - -``` -rewrite { - regexp .* - to {path} / -} -``` - -#### Хостинг Firebase - -Добавьте в файл `firebase.json`: - -``` -{ - "hosting": { - "public": "dist", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} -``` - -## Предостережение - -При таком подходе возникает одно неприятное последствие: сервер больше не будет выдавать ошибки 404, так как обслуживание всех путей отдаётся на откуп клиентскому роутингу. Частично эту проблему можно решить, указав путь по умолчанию во Vue-router: - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [ - { path: '*', component: NotFoundComponent } - ] -}) -``` - -Если же вы используете на сервере Node.js, уже на стороне сервера можно задействовать конфигурацию роутера и решить таким образом проблему целиком. Ознакомьтесь с [руководством по серверному рендерингу Vue.js](https://ssr.vuejs.org/ru/) для получения дополнительной информации. diff --git a/docs-gitbook/ru/essentials/named-routes.md b/docs-gitbook/ru/essentials/named-routes.md deleted file mode 100644 index 8c1b803c2..000000000 --- a/docs-gitbook/ru/essentials/named-routes.md +++ /dev/null @@ -1,31 +0,0 @@ -# Именованные пути - -Зачастую, при создании ссылок и вызове навигационных методов, удобно ссылаться на путь по его имени. Установить имя пути можно в опциях `routes` при создании экземпляра Router'а: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -Чтобы создать ссылку на именованный маршрут, вы можете передать объект в компонент `router-link` используя входной параметр `to`: - -``` html -<router-link :to="{ name: 'user', params: { userId: 123 }}">Пользователь</router-link> -``` - -Тот же самый объект можно использовать и для императивного вызова `router.push()`: - -``` js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -В обоих случаях результатом будет навигационный переход на `/user/123`. - -Полный пример находится [здесь](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js). diff --git a/docs-gitbook/ru/essentials/named-views.md b/docs-gitbook/ru/essentials/named-views.md deleted file mode 100644 index 6f60dd06e..000000000 --- a/docs-gitbook/ru/essentials/named-views.md +++ /dev/null @@ -1,86 +0,0 @@ -# Именованные представления - -Иногда необходимо отобразить сразу несколько компонентов, не вкладывая их один в другой — например, при создании разметки с боковой панелью и основным контентом. В этой ситуации может быть удобно использовать именованные представления. Вместо указания единственного `<router-view>`, можно использовать несколько, присвоив каждому собственное имя. Безымянный `router-view` автоматически получает имя `default`. - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -При использовании нескольких представлений, вместо единственного компонента при описании пути необходимо указывать объект. Удостоверьтесь, что используете окончание множественного числа (`s`) в ключе `components`: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -Рабочее демо этого примера можно найти [здесь](https://jsfiddle.net/posva/6du90epg/). - -## Вложенные именованные маршруты - -Возможно и создание сложных шаблонов используя именованные представления с вложенными представлениями. При этом вам также нужно будет именовать используемые вложенные компоненты `router-view`. Разберём пример панели настроек: - -``` -/settings/emails /settings/profile -+-----------------------------------+ +------------------------------+ -| UserSettings | | UserSettings | -| +-----+-------------------------+ | | +-----+--------------------+ | -| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | -| | +-------------------------+ | | | +--------------------+ | -| | | | | | | | UserProfilePreview | | -| +-----+-------------------------+ | | +-----+--------------------+ | -+-----------------------------------+ +------------------------------+ -``` - -- `Nav` это просто обычный компонент -- `UserSettings` компонент представления -- `UserEmailsSubscriptions`, `UserProfile`, `UserProfilePreview` вложенные компоненты представлений - -**Примечание**: _Давайте опустим как должен выглядеть HTML/CSS для реализации подобного шаблона и сосредоточимся на используемых компонентах_ - -Секция `<template>` компонента `UserSettings` будет выглядеть примерно так: - -```html -<!-- UserSettings.vue --> -<div> - <h1>Настройки пользователя</h1> - <NavBar/> - <router-view/> - <router-view name="helper"/> -</div> -``` - -_Вложенные компоненты представлений опущены здесь, но вы можете найти полные исходные коды примера [здесь](https://jsfiddle.net/posva/22wgksa3/)_ - -Затем вы можете достичь компоновки шаблона выше с помощью конфигурации маршрута: - -```js -{ - path: '/settings', - // Вы могли также иметь именованные представления в верхней части - component: UserSettings, - children: [{ - path: 'emails', - component: UserEmailsSubscriptions - }, { - path: 'profile', - components: { - default: UserProfile, - helper: UserProfilePreview - } - }] -} -``` - -Рабочее демо этого примера можно найти [здесь](https://jsfiddle.net/posva/22wgksa3/). diff --git a/docs-gitbook/ru/essentials/navigation.md b/docs-gitbook/ru/essentials/navigation.md deleted file mode 100644 index d71207374..000000000 --- a/docs-gitbook/ru/essentials/navigation.md +++ /dev/null @@ -1,85 +0,0 @@ -# Императивная навигация - -Помимо декларативного использования `<router-link>` для создания ссылок, можно использовать роутер и императивно, напрямую вызывая методы его экземпляра. - -#### `router.push(location, onComplete?, onAbort?)` - -**Примечание: Внутри экземпляра Vue у вас есть доступ к экземпляру маршрутизатора через `$router`. Поэтому вы можете вызвать `this.$router.push`.** - -Для перехода к новому URL, используйте `router.push`. Этот метод добавляет новую запись в стек истории навигации, что позволяет клику пользователя по кнопке "назад" в браузере сработать привычным образом. - -При клике на `<router-link>` этот метод вызывается автоматически. Клик по `<router-link :to="...">` эквивалентен императивному вызову `router.push(...)`. - -| Декларативная запись | Императивная запись | -|---------------------------|---------------------| -| `<router-link :to="...">` | `router.push(...)` | - -В качестве аргумента можно передать строку или объект, описывающий путь. Например: - -``` js -// строка -router.push('home') - -// объект -router.push({ path: 'home' }) - -// именованный путь -router.push({ name: 'user', params: { userId: 123 }}) - -// со строкой запроса, получится /register?plan=private -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -**Примечание**: `params` игнорируются, если указан `path`, что не соответствует случаю с `query` показанному в примере выше. -Вместо этого, вам нужно указать `name` маршрута или вручную указать весь `path` с необходимыми параметрами: - -```js -const userId = 123 -router.push({ name: 'user', params: { userId }}) // -> /user/123 -router.push({ path: `/user/${userId}` }) // -> /user/123 -// Это НЕ БУДЕТ работать -router.push({ path: '/user', params: { userId }}) // -> /user -``` - -Те же правила применяются и к свойству `to` компонента `router-link`. - -В версии 2.2.0+, можно указать опциональные `onComplete` и `onAbort` коллбеки в `router.push` или `router.replace` в качестве 2-го и 3-го аргументов. Эти коллбеки будут вызываться когда навигация либо успешно завершена (после того как все асинхронные хуки будут завершены), или прервана (переходом на этот же маршрут, или на другой маршрут прежде чем текущая навигация будет завершена), соответственно. - -**Примечание:** Если путь назначения совпадает с текущим маршрутом и меняются только параметры (например, переход из одного профиля в другой `/users/1` -> `/users/2`), вам потребуется использовать [`beforeRouteUpdate`](./dynamic-matching.html#отслеживание-изменений-параметров) чтобы реагировать на изменения (например, получение информации о пользователе). - -#### `router.replace(location, onComplete?, onAbort?)` - -Действует подобно `router.push`, с той лишь разницей, что вместо добавления новой записи к стеку истории переходов, заменяет текущую запись в нём. - -| Декларативная запись | Императивная запись | -|-----------------------------------|-----------------------| -| `<router-link :to="..." replace>` | `router.replace(...)` | - -#### `router.go(n)` - -Единственным параметром этого метода является целое число, указывающее на сколько шагов необходимо перейти по стеку истории навигации (вперёд или назад, аналогично `window.history.go(n)`. - -Примеры - -``` js -// перейти на одну запись вперёд, эквивалентно history.forward() -router.go(1) - -// перейти на одну запись назад, эквивалентно history.back() -router.go(-1) - -// перейти на 3 записи вперёд -router.go(3) - -// если записей в истории недостаточно много, перехода просто не произойдёт -router.go(-100) -router.go(100) -``` - -#### Манипулирование историей переходов - -Вы могли заметить, что `router.push`, `router.replace` и `router.go` соответствуют [`window.history.pushState`, `window.history.replaceState` и `window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History), имитируя таким образом API `window.history`. - -По этой причине, если вы уже знакомы с [API истории переходов браузера](https://developer.mozilla.org/en-US/docs/Web/API/History_API), то и со Vue-router неожиданностей не возникнет. - -Стоит отметить, что методы навигации Vue-router'а (`push`, `replace`, `go`) работают одинаково во всех режимах роутера (`history`, `hash` и `abstract`). diff --git a/docs-gitbook/ru/essentials/nested-routes.md b/docs-gitbook/ru/essentials/nested-routes.md deleted file mode 100644 index cb8ae241b..000000000 --- a/docs-gitbook/ru/essentials/nested-routes.md +++ /dev/null @@ -1,99 +0,0 @@ -# Вложенные пути - -Пользовательский интерфейс реальных приложений обычно представлен многоуровневой иерархией компонентов. Столь же обычно и соответствие сегментов URL некоторой структуре вложенности компонентов, например: - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -Используя `Vue-router`, мы можем с лёгкостью выразить эти взаимоотношения при помощи вложенных путей. - -Рассмотрим созданное в предыдущем разделе приложение: - -``` html -<div id="app"> - <router-view></router-view> -</div> -``` - -``` js -const User = { - template: '<div>Пользователь {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -Здесь `<router-view>` — это точка, в которой будет отображён компонент, соответствующий пути верхнего уровня. Аналогичным образом, отображаемый там компонент может и сам содержать вложенный `<router-view>`. Изменим немного шаблон компонента `User`: - -``` js -const User = { - template: ` - <div class="user"> - <h2>Пользователь {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -Для отображения компонентов в этой вложенной точке, нам понадобится опция `children` в конфигурации конструктора `VueRouter`: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, - children: [ - { - // при совпадении пути с шаблоном /user/:id/profile - // в <router-view> компонента User будет отображён UserProfile - path: 'profile', - component: UserProfile - }, - { - // при совпадении с шаблоном /user/:id/posts - // в <router-view> компонента User будет отображён UserPosts - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**Обратите внимание, что вложенные пути, начинающиеся с `/`, будут считаться корневыми. Это позволяет задействовать вложенную структуру компонентов независимо от структуры URL.** - -Как вы могли заметить, опция `children` принимает обыкновенный массив объектов конфигурации путей, такой же как и сам `routes`. Таким образом, вложенность путей в теории по глубине ничем не ограничена. - -С текущим кодом, если перейти по пути `/user/foo`, внутри компонента `User` ничего отображено не будет, так как не произойдёт совпадения по второй части пути. Может быть, что-то в таких случаях отобразить всё же захочется — тогда стоит указать пустой путь: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', component: User, - children: [ - // при совпадении пути с шаблоном /user/:id - // в <router-view> компонента User будет отображён UserHome - { path: '', component: UserHome }, - - // ...остальные вложенные пути - ] - } - ] -}) -``` - -Действующее демо этого примера можно найти [здесь](https://jsfiddle.net/yyx990803/L7hscd8h/). diff --git a/docs-gitbook/ru/essentials/passing-props.md b/docs-gitbook/ru/essentials/passing-props.md deleted file mode 100644 index 972dd03e5..000000000 --- a/docs-gitbook/ru/essentials/passing-props.md +++ /dev/null @@ -1,75 +0,0 @@ -# Передача входных параметров в компоненты маршрутов - -Использование `$route` в вашем компоненте создаёт жёсткую связь с маршрутом, что ограничивает гибкость компонента, потому что он может быть использован только для определённых URL-адресов. - -Для разделения компонента от маршрутизатора можно использовать входные параметры: - -** Вместо жёсткой связи с `$route`** - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -** Разделяем с помощью входных параметров** - -``` js -const User = { - props: ['id'], - template: '<div>User {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - - // для маршрутов с именованными представлениями, необходимо указывать опцию `props` для каждого именованного представления: - { - path: '/user/:id', - components: { default: User, sidebar: Sidebar }, - props: { default: true, sidebar: false } - } - ] -}) -``` - -Это позволяет использовать компонент в любом месте, а также делает его проще для повторного использования и тестирования. - -### Булево значение - -Когда `props` установлены в `true`, значение `route.params` будут установлены входными параметрами компонента. - -### Объект - -Когда `props` объект, они будут установлены входными параметрами компонента как есть. Полезно когда входные параметры являются статическими данными. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } - ] -}) -``` - -### Функция - -Вы можете создать функцию, которая вернёт объект с входными параметрами. Это позволяет вам приводить параметры к другим типам, комбинировать статические значения с значениями из маршрута, и т.д. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) } - ] -}) -``` - -Ссылка: `/search?q=vue` также передаст `{query: 'vue'}` в качестве входных параметров в компонент `SearchUser`. - -Старайтесь держать функции генерации входных параметров независимыми от состояния, потому что они вызываются только при изменениях маршрута. Используйте компонент обёртку, если вам нужно состояние для определения входных параметров, в таком случае Vue сможет реагировать на изменения состояния. - -Для более продвинутого использования, смотрите [пример](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js). diff --git a/docs-gitbook/ru/essentials/redirect-and-alias.md b/docs-gitbook/ru/essentials/redirect-and-alias.md deleted file mode 100644 index 7dc4b29b1..000000000 --- a/docs-gitbook/ru/essentials/redirect-and-alias.md +++ /dev/null @@ -1,60 +0,0 @@ -# Редиректы и псевдонимы - -### Редирект - -Редиректы также определяются в конфигурации путей `routes`. Для редиректа с `/a` на `/b`, укажите: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -В качестве цели редиректа можно использовать и именованный путь: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -Можно даже указать функцию для организации динамического редиректа: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // в функцию в качестве аргумента передаётся путь - // возвращаемым значением должна быть строка или объект пути - }} - ] -}) -``` - -Обратите внимание, что [сторожевые хуки](../advanced/navigation-guards.md) не применяются на маршруте, который служит для перенаправления, только на его цель. В приведённом ниже примере добавление хуков `beforeEnter` или `beforeLeave` на маршрут `/a` не будет иметь никакого эффекта. - -Для демонстрации более сложных возможностей, обратите внимание на [этот пример](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js). - -### Псевдонимы - -При редиректе, если пользователь переходит по пути `/a`, URL заменяется на `/b` и затем уже `/b` рассматривается как основной путь. В чём отличие псевдонима? - -**В случае, когда псевдонимом `/a` является `/b`, при посещении пользователем `/b` URL останется равным `/b`, но роутер выполнит все действия так, как если бы он был равен `/a`.** - -В виде конфигурации роутера вышесказанное может быть выражено так: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -Псевдонимы позволяют не ограничиваться вложенными структурами при организации связи URL и UI. - -Этот [пример](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js) демонстрирует более продвинутое использование возможностей. diff --git a/docs-gitbook/ru/installation.md b/docs-gitbook/ru/installation.md deleted file mode 100644 index 046ab567b..000000000 --- a/docs-gitbook/ru/installation.md +++ /dev/null @@ -1,42 +0,0 @@ -# Установка - -### Локальный файл / CDN - -[https://unpkg.com/vue-router/dist/vue-router.js](https://unpkg.com/vue-router/dist/vue-router.js) - -[Unpkg.com](https://unpkg.com) предоставляет CDN-ссылки для NPM-пакетов. Ссылка выше всегда указывает на самую последнюю версию Vue-router на NPM. Вы также можете использовать конкретную версию используя ссылки вида `https://unpkg.com/vue-router@2.0.0/dist/vue-router.js`. - -Подключите `Vue-router` после Vue, и установка произойдёт автоматически: - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -### NPM - -``` bash -npm install vue-router -``` - -При использовании модульной системы сборки, необходимо явно обозначить использование роутера при помощи `Vue.use()`: - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -Это не требуется при подключении через глобальный тег `script`. - -### Сборка версии, находящейся в разработке - -Если вы хотите использовать версию `Vue-router` в разработке, склонируйте репозиторий с GitHub и выполните сборку вручную: - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs/.vuepress/components/HomeSponsors.vue b/docs/.vuepress/components/HomeSponsors.vue deleted file mode 100644 index 5e009242d..000000000 --- a/docs/.vuepress/components/HomeSponsors.vue +++ /dev/null @@ -1,91 +0,0 @@ -<template> - <div id="sponsors"> - <div class="inner"> - <HomeSponsorsGroup name="Platinum" size="160" /> - <HomeSponsorsGroup name="Gold" size="140" /> - <HomeSponsorsGroup name="Silver" size="120" /> - - <a - class="become-sponsor button white" - href="https://github.com/sponsors/posva" - >Become a Sponsor!</a> - </div> - </div> -</template> - -<script> -import HomeSponsorsGroup from './HomeSponsorsGroup.vue' - -export default { - name: 'HomeSponsors', - - components: { HomeSponsorsGroup } -} -</script> - -<style> -#sponsors { - text-align: center; - padding: 35px 30px 45px; - background-color: #f6f6f6; -} - -@media (min-width: 768px) { - #sponsors { - padding: 35px 40px 45px; - margin: 0 -2rem; - } -} - -#sponsors h3 { - color: #999; - margin: 0 0 10px; -} - -#sponsors a, -#sponsors img { - width: 100px; - display: inline-block; - vertical-align: middle; - margin: 0 2px; -} - -#sponsors img { - transition: all 0.3s ease; - filter: grayscale(100%); - opacity: 0.66; -} - -#sponsors img:hover { - filter: none; - opacity: 1; -} - -#sponsors .become-sponsor, -.become-sponsor { - margin-top: 40px; - font-size: 0.9em; - font-weight: 700; - width: auto; - text-align: center; - background-color: transparent; - padding: 0.75em 2em; - border-radius: 2em; - transition: all 0.15s ease; - box-sizing: border-box; - border: 1px solid #4fc08d; -} - -#sponsors .become-sponsor:hover, -.become-sponsor:hover { - background-color: #4fc08d; - color: white; -} - -.sponsors-top .become-sponsor.become-sponsor { - font-size: 0.75em; - padding: 0.2em; - width: auto; - max-width: 150px; -} -</style> diff --git a/docs/.vuepress/components/HomeSponsorsGroup.vue b/docs/.vuepress/components/HomeSponsorsGroup.vue deleted file mode 100644 index f8e2dab77..000000000 --- a/docs/.vuepress/components/HomeSponsorsGroup.vue +++ /dev/null @@ -1,43 +0,0 @@ -<template> - <div v-if="list && list.length"> - <h3>{{ name }} Sponsors</h3> - - <a - v-for="sponsor in list" - :key="sponsor.href" - :href="sponsor.href" - target="_blank" - rel="sponsored noopener" - :style="{ width: size + 'px' }" - > - <img :src="sponsor.imgSrcLight" :style="{ width: size + 'px' }" /> - </a> - <br /> - <br /> - </div> -</template> - -<script> -import sponsors from './sponsors.json' - -export default { - name: 'HomeSponsorsGroup', - - props: { - name: { - type: String, - required: true - }, - size: { - type: [Number, String], - default: 140 - } - }, - - computed: { - list() { - return sponsors[this.name.toLowerCase()] - } - } -} -</script> diff --git a/docs/.vuepress/components/sponsors.json b/docs/.vuepress/components/sponsors.json deleted file mode 100644 index e9c704b39..000000000 --- a/docs/.vuepress/components/sponsors.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "platinum": [], - "gold": [], - "silver": [ - { - "href": "https://www.vuemastery.com/", - "alt": "VueMastery", - "imgSrcLight": "https://posva-sponsors.pages.dev/logos/vuemastery-light.svg", - "imgSrcDark": "https://posva-sponsors.pages.dev/logos/vuemastery-dark.png" - }, - { - "href": "https://www.prefect.io/", - "imgSrcLight": "https://posva-sponsors.pages.dev/logos/prefectlogo-light.svg", - "imgSrcDark": "https://posva-sponsors.pages.dev/logos/prefectlogo-dark.svg", - "alt": "Prefect" - } - ], - "bronze": [ - { - "alt": "Stanislas Ormières", - "href": "https://stormier.ninja", - "imgSrcDark": "https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4", - "imgSrcLight": "https://avatars.githubusercontent.com/u/2486424?u=7b0c73ae5d090ce53bf59473094e9606fe082c59&v=4" - }, - { - "alt": "Antony Konstantinidis", - "href": "https://www.vuejs.de", - "imgSrcDark": "https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4", - "imgSrcLight": "https://avatars.githubusercontent.com/u/4183726?u=6b50a8ea16de29d2982f43c5640b1db9299ebcd1&v=4" - }, - { - "href": "https://storyblok.com", - "imgSrcLight": "https://posva-sponsors.pages.dev/logos/storyblok.png", - "imgSrcDark": "https://posva-sponsors.pages.dev/logos/storyblok.png", - "alt": "Storyblok" - }, - { - "href": "https://nuxtjs.org", - "imgSrcLight": "https://posva-sponsors.pages.dev/logos/nuxt-light.svg", - "imgSrcDark": "https://posva-sponsors.pages.dev/logos/nuxt-dark.svg", - "alt": "Nuxt Labs" - } - ] -} diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js deleted file mode 100644 index 79c12f352..000000000 --- a/docs/.vuepress/config.js +++ /dev/null @@ -1,411 +0,0 @@ -module.exports = ctx => ({ - locales: { - '/': { - lang: 'en-US', - title: 'Vue Router', - description: 'The official router for Vue.js.' - }, - '/zh/': { - lang: 'zh-CN', - title: 'Vue Router', - description: 'Vue.js 官方的路由管理器。' - }, - '/ja/': { - lang: 'ja', - title: 'Vue Router', - description: 'Vue.js の公式ルータ' - }, - '/ru/': { - lang: 'ru', - title: 'Vue Router', - description: 'Официальный маршрутизатор для Vue.js.' - }, - '/kr/': { - lang: 'kr', - title: 'Vue Router', - description: 'Vue.js 공식 라우터' - }, - '/fr/': { - lang: 'fr', - title: 'Vue Router', - description: 'Routeur officiel pour Vue.Js' - } - }, - head: [ - ['link', { rel: 'icon', href: `/logo.png` }], - [ - 'meta', - { name: 'wwads-cn-verify', content: '7e7757b1e12abcb736ab9a754ffb617a' } - ], - [ - 'link', - { rel: 'apple-touch-icon', href: `/icons/apple-touch-icon-152x152.png` } - ], - [ - 'link', - { - rel: 'mask-icon', - href: '/icons/safari-pinned-tab.svg', - color: '#3eaf7c' - } - ], - [ - 'meta', - { - name: 'msapplication-TileImage', - content: '/icons/msapplication-icon-144x144.png' - } - ] - ], - // theme: '@vuepress/vue', - plugins: [ - [ - '@vuepress/pwa', - { - serviceWorker: true, - updatePopup: true - } - ] - ], - themeConfig: { - algolia: ctx.isProd - ? { - appId: 'LI3RW4C4QI', - apiKey: '08e7ef7cd3969442874f0dee9dec34be', - indexName: 'vue-router' - } - : null, - carbonAds: { - carbon: 'CEBICK3I', - custom: 'CEBICK3M', - placement: 'routervuejsorg' - }, - repo: 'vuejs/vue-router', - docsDir: 'docs', - smoothScroll: true, - locales: { - '/': { - label: 'English', - selectText: 'Languages', - editLinkText: 'Edit this page on GitHub', - nav: [ - { - text: 'Guide', - link: '/guide/' - }, - { - text: 'API Reference', - link: '/api/' - }, - { - text: 'v3.x', - items: [{ text: 'v4.x', link: 'https://next.router.vuejs.org' }] - }, - { - text: 'Release Notes', - link: 'https://github.com/vuejs/vue-router/releases' - } - ], - sidebar: [ - '/installation.md', - { - title: 'Essentials', - collapsable: false, - children: [ - '/guide/', - '/guide/essentials/dynamic-matching.md', - '/guide/essentials/nested-routes.md', - '/guide/essentials/navigation.md', - '/guide/essentials/named-routes.md', - '/guide/essentials/named-views.md', - '/guide/essentials/redirect-and-alias.md', - '/guide/essentials/passing-props.md', - '/guide/essentials/history-mode.md' - ] - }, - { - title: 'Advanced', - collapsable: false, - children: [ - '/guide/advanced/navigation-guards.md', - '/guide/advanced/meta.md', - '/guide/advanced/transitions.md', - '/guide/advanced/data-fetching.md', - '/guide/advanced/scroll-behavior.md', - '/guide/advanced/lazy-loading.md', - '/guide/advanced/navigation-failures.md' - ] - } - ] - }, - '/zh/': { - label: '简体中文', - selectText: '选择语言', - editLinkText: '在 GitHub 上编辑此页', - nav: [ - { - text: '指南', - link: '/zh/guide/' - }, - { - text: 'API 参考', - link: '/zh/api/' - }, - { - text: 'v3.x', - items: [{ text: 'v4.x', link: 'https://next.router.vuejs.org/zh/' }] - }, - { - text: '更新记录', - link: 'https://github.com/vuejs/vue-router/releases' - } - ], - sidebar: [ - '/zh/installation.md', - { - title: '基础', - collapsable: false, - children: [ - '/zh/guide/', - '/zh/guide/essentials/dynamic-matching.md', - '/zh/guide/essentials/nested-routes.md', - '/zh/guide/essentials/navigation.md', - '/zh/guide/essentials/named-routes.md', - '/zh/guide/essentials/named-views.md', - '/zh/guide/essentials/redirect-and-alias.md', - '/zh/guide/essentials/passing-props.md', - '/zh/guide/essentials/history-mode.md' - ] - }, - { - title: '进阶', - collapsable: false, - children: [ - '/zh/guide/advanced/navigation-guards.md', - '/zh/guide/advanced/meta.md', - '/zh/guide/advanced/transitions.md', - '/zh/guide/advanced/data-fetching.md', - '/zh/guide/advanced/scroll-behavior.md', - '/zh/guide/advanced/lazy-loading.md', - '/zh/guide/advanced/navigation-failures.md' - ] - } - ] - }, - '/ja/': { - label: '日本語', - selectText: '言語', - editLinkText: 'GitHub 上でこのページを編集する', - nav: [ - { - text: 'ガイド', - link: '/ja/guide/' - }, - { - text: 'API リファレンス', - link: '/ja/api/' - }, - { - text: 'v3.x', - items: [{ text: 'v4.x', link: 'https://next.router.vuejs.org' }] - }, - { - text: 'リリースノート', - link: 'https://github.com/vuejs/vue-router/releases' - } - ], - sidebar: [ - '/ja/installation.md', - { - title: '基本的な使い方', - collapsable: false, - children: [ - '/ja/guide/', - '/ja/guide/essentials/dynamic-matching.md', - '/ja/guide/essentials/nested-routes.md', - '/ja/guide/essentials/navigation.md', - '/ja/guide/essentials/named-routes.md', - '/ja/guide/essentials/named-views.md', - '/ja/guide/essentials/redirect-and-alias.md', - '/ja/guide/essentials/passing-props.md', - '/ja/guide/essentials/history-mode.md' - ] - }, - { - title: '高度な使い方', - collapsable: false, - children: [ - '/ja/guide/advanced/navigation-guards.md', - '/ja/guide/advanced/meta.md', - '/ja/guide/advanced/transitions.md', - '/ja/guide/advanced/data-fetching.md', - '/ja/guide/advanced/scroll-behavior.md', - '/ja/guide/advanced/lazy-loading.md', - '/ja/guide/advanced/navigation-failures.md' - ] - } - ] - }, - '/ru/': { - label: 'Русский', - selectText: 'Переводы', - editLinkText: 'Изменить эту страницу на GitHub', - nav: [ - { - text: 'Руководство', - link: '/ru/guide/' - }, - { - text: 'Справочник API', - link: '/ru/api/' - }, - { - text: 'v3.x', - items: [{ text: 'v4.x', link: 'https://next.router.vuejs.org' }] - }, - { - text: 'История изменений', - link: 'https://github.com/vuejs/vue-router/releases' - } - ], - sidebar: [ - '/ru/installation.md', - { - title: 'Основы', - collapsable: false, - children: [ - '/ru/guide/', - '/ru/guide/essentials/dynamic-matching.md', - '/ru/guide/essentials/nested-routes.md', - '/ru/guide/essentials/navigation.md', - '/ru/guide/essentials/named-routes.md', - '/ru/guide/essentials/named-views.md', - '/ru/guide/essentials/redirect-and-alias.md', - '/ru/guide/essentials/passing-props.md', - '/ru/guide/essentials/history-mode.md' - ] - }, - { - title: 'Продвинутые темы', - collapsable: false, - children: [ - '/ru/guide/advanced/navigation-guards.md', - '/ru/guide/advanced/meta.md', - '/ru/guide/advanced/transitions.md', - '/ru/guide/advanced/data-fetching.md', - '/ru/guide/advanced/scroll-behavior.md', - '/ru/guide/advanced/lazy-loading.md', - '/ru/guide/advanced/navigation-failures.md' - ] - } - ] - }, - '/kr/': { - label: '한국어', - selectText: '언어', - editLinkText: 'GitHub에서 이 문서를 수정하세요', - nav: [ - { - text: '가이드', - link: '/kr/guide/' - }, - { - text: 'API 레퍼런스', - link: '/kr/api/' - }, - { - text: 'v3.x', - items: [{ text: 'v4.x', link: 'https://next.router.vuejs.org' }] - }, - { - text: '릴리즈 노트', - link: 'https://github.com/vuejs/vue-router/releases' - } - ], - sidebar: [ - '/kr/installation.md', - { - title: '기본 사용법', - collapsable: false, - children: [ - '/kr/guide/', - '/kr/guide/essentials/dynamic-matching.md', - '/kr/guide/essentials/nested-routes.md', - '/kr/guide/essentials/navigation.md', - '/kr/guide/essentials/named-routes.md', - '/kr/guide/essentials/named-views.md', - '/kr/guide/essentials/redirect-and-alias.md', - '/kr/guide/essentials/passing-props.md', - '/kr/guide/essentials/history-mode.md' - ] - }, - { - title: '고급 사용법', - collapsable: false, - children: [ - '/kr/guide/advanced/navigation-guards.md', - '/kr/guide/advanced/meta.md', - '/kr/guide/advanced/transitions.md', - '/kr/guide/advanced/data-fetching.md', - '/kr/guide/advanced/scroll-behavior.md', - '/kr/guide/advanced/lazy-loading.md' - ] - } - ] - }, - '/fr/': { - label: 'Français', - selectText: 'Langues', - editLinkText: 'Editer cette page sur Github', - nav: [ - { - text: 'Guide', - link: '/fr/guide/' - }, - { - text: 'API', - link: '/fr/api/' - }, - { - text: 'v3.x', - items: [{ text: 'v4.x', link: 'https://next.router.vuejs.org' }] - }, - { - text: 'Notes de version', - link: 'https://github.com/vuejs/vue-router/releases' - } - ], - sidebar: [ - '/fr/installation.md', - { - title: 'Essentiels', - collapsable: false, - children: [ - '/fr/guide/', - '/fr/guide/essentials/dynamic-matching.md', - '/fr/guide/essentials/nested-routes.md', - '/fr/guide/essentials/navigation.md', - '/fr/guide/essentials/named-routes.md', - '/fr/guide/essentials/named-views.md', - '/fr/guide/essentials/redirect-and-alias.md', - '/fr/guide/essentials/passing-props.md', - '/fr/guide/essentials/history-mode.md' - ] - }, - { - title: 'Avancés', - collapsable: false, - children: [ - '/fr/guide/advanced/navigation-guards.md', - '/fr/guide/advanced/meta.md', - '/fr/guide/advanced/transitions.md', - '/fr/guide/advanced/data-fetching.md', - '/fr/guide/advanced/scroll-behavior.md', - '/fr/guide/advanced/lazy-loading.md' - ] - } - ] - } - } - } -}) diff --git a/docs/.vuepress/public/_redirects b/docs/.vuepress/public/_redirects deleted file mode 100644 index 9f37e362d..000000000 --- a/docs/.vuepress/public/_redirects +++ /dev/null @@ -1,31 +0,0 @@ -# redirect old urls to root - -/en/essentials/getting-started.html /guide/ -/en/essentials/* /guide/essentials/:splat -/en/advanced/* /guide/advanced/:splat -/en/api/* /api/ -/en/* /:splat - -/zh-cn/essentials/getting-started.html /zh/guide/ -/zh-cn/essentials/* /zh/guide/essentials/:splat -/zh-cn/advanced/* /zh/guide/advanced/:splat -/zh-cn/api/* /zh/api/ -/zh-cn/* /zh/:splat - -/ru/essentials/getting-started.html /ru/guide/ -/ru/essentials/* /ru/guide/essentials/:splat -/ru/advanced/* /ru/guide/advanced/:splat -/ru/api/* /ru/api/ -/ru/* /ru/:splat - -/ja/essentials/getting-started.html /ja/guide/ -/ja/essentials/* /ja/guide/essentials/:splat -/ja/advanced/* /ja/guide/advanced/:splat -/ja/api/* /ja/api/ -/ja/* /ja/:splat - -/kr/essentials/getting-started.html /kr/guide/ -/kr/essentials/* /kr/guide/essentials/:splat -/kr/advanced/* /kr/guide/advanced/:splat -/kr/api/* /kr/api/ -/kr/* /kr/:splat diff --git a/docs/.vuepress/public/bit-wide.png b/docs/.vuepress/public/bit-wide.png deleted file mode 100644 index 574b9de40..000000000 Binary files a/docs/.vuepress/public/bit-wide.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/android-chrome-192x192.png b/docs/.vuepress/public/icons/android-chrome-192x192.png deleted file mode 100644 index b02aa64d9..000000000 Binary files a/docs/.vuepress/public/icons/android-chrome-192x192.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/android-chrome-512x512.png b/docs/.vuepress/public/icons/android-chrome-512x512.png deleted file mode 100644 index 06088b011..000000000 Binary files a/docs/.vuepress/public/icons/android-chrome-512x512.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/apple-touch-icon-120x120.png b/docs/.vuepress/public/icons/apple-touch-icon-120x120.png deleted file mode 100644 index 1427cf627..000000000 Binary files a/docs/.vuepress/public/icons/apple-touch-icon-120x120.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/apple-touch-icon-152x152.png b/docs/.vuepress/public/icons/apple-touch-icon-152x152.png deleted file mode 100644 index f24d454a2..000000000 Binary files a/docs/.vuepress/public/icons/apple-touch-icon-152x152.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/apple-touch-icon-180x180.png b/docs/.vuepress/public/icons/apple-touch-icon-180x180.png deleted file mode 100644 index 404e192a9..000000000 Binary files a/docs/.vuepress/public/icons/apple-touch-icon-180x180.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/apple-touch-icon-60x60.png b/docs/.vuepress/public/icons/apple-touch-icon-60x60.png deleted file mode 100644 index cf10a5602..000000000 Binary files a/docs/.vuepress/public/icons/apple-touch-icon-60x60.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/apple-touch-icon-76x76.png b/docs/.vuepress/public/icons/apple-touch-icon-76x76.png deleted file mode 100644 index c500769e3..000000000 Binary files a/docs/.vuepress/public/icons/apple-touch-icon-76x76.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/apple-touch-icon.png b/docs/.vuepress/public/icons/apple-touch-icon.png deleted file mode 100644 index 03c0c5d5e..000000000 Binary files a/docs/.vuepress/public/icons/apple-touch-icon.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/favicon-16x16.png b/docs/.vuepress/public/icons/favicon-16x16.png deleted file mode 100644 index 42af00963..000000000 Binary files a/docs/.vuepress/public/icons/favicon-16x16.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/favicon-32x32.png b/docs/.vuepress/public/icons/favicon-32x32.png deleted file mode 100644 index 46ca04dee..000000000 Binary files a/docs/.vuepress/public/icons/favicon-32x32.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/msapplication-icon-144x144.png b/docs/.vuepress/public/icons/msapplication-icon-144x144.png deleted file mode 100644 index 7808237a1..000000000 Binary files a/docs/.vuepress/public/icons/msapplication-icon-144x144.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/mstile-150x150.png b/docs/.vuepress/public/icons/mstile-150x150.png deleted file mode 100644 index 3b37a43ae..000000000 Binary files a/docs/.vuepress/public/icons/mstile-150x150.png and /dev/null differ diff --git a/docs/.vuepress/public/icons/safari-pinned-tab.svg b/docs/.vuepress/public/icons/safari-pinned-tab.svg deleted file mode 100644 index 732afd8eb..000000000 --- a/docs/.vuepress/public/icons/safari-pinned-tab.svg +++ /dev/null @@ -1,149 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" - "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> -<svg version="1.0" xmlns="http://www.w3.org/2000/svg" - width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000" - preserveAspectRatio="xMidYMid meet"> -<metadata> -Created by potrace 1.11, written by Peter Selinger 2001-2013 -</metadata> -<g transform="translate(0.000000,16.000000) scale(0.000320,-0.000320)" -fill="#000000" stroke="none"> -<path d="M18 46618 c45 -75 122 -207 122 -211 0 -2 25 -45 55 -95 30 -50 55 --96 55 -102 0 -5 5 -10 10 -10 6 0 10 -4 10 -9 0 -5 73 -135 161 -288 89 -153 -173 -298 187 -323 14 -25 32 -57 41 -72 88 -149 187 -324 189 -335 2 -7 8 -13 -13 -13 5 0 9 -4 9 -10 0 -5 46 -89 103 -187 175 -302 490 -846 507 -876 8 -16 -20 -36 25 -45 28 -46 290 -498 339 -585 13 -23 74 -129 136 -236 61 -107 123 --215 137 -240 14 -25 29 -50 33 -56 5 -5 23 -37 40 -70 18 -33 38 -67 44 -75 -11 -16 21 -33 63 -109 14 -25 29 -50 33 -56 4 -5 21 -35 38 -65 55 -100 261 --455 269 -465 4 -5 14 -21 20 -35 15 -29 41 -75 103 -180 24 -41 52 -88 60 --105 9 -16 57 -100 107 -185 112 -193 362 -626 380 -660 8 -14 23 -38 33 -55 -11 -16 23 -37 27 -45 4 -8 26 -46 48 -85 23 -38 53 -90 67 -115 46 -81 64 --113 178 -310 62 -107 121 -210 132 -227 37 -67 56 -99 85 -148 16 -27 32 -57 -36 -65 4 -8 15 -27 25 -42 9 -15 53 -89 96 -165 44 -76 177 -307 296 -513 120 --206 268 -463 330 -570 131 -227 117 -203 200 -348 36 -62 73 -125 82 -140 10 --15 21 -34 25 -42 4 -8 20 -37 36 -65 17 -27 38 -65 48 -82 49 -85 64 -111 87 --153 13 -25 28 -49 32 -55 4 -5 78 -134 165 -285 87 -151 166 -288 176 -305 -10 -16 26 -43 35 -59 9 -17 125 -217 257 -445 132 -229 253 -441 270 -471 17 --30 45 -79 64 -108 18 -29 33 -54 33 -57 0 -2 20 -37 44 -77 24 -40 123 -212 -221 -383 97 -170 190 -330 205 -355 16 -25 39 -65 53 -90 13 -25 81 -144 152 --265 70 -121 137 -238 150 -260 12 -22 37 -65 55 -95 18 -30 43 -73 55 -95 12 --22 48 -85 80 -140 77 -132 163 -280 190 -330 13 -22 71 -123 130 -225 59 --102 116 -199 126 -217 10 -17 29 -50 43 -72 15 -22 26 -43 26 -45 0 -2 27 --50 60 -106 33 -56 60 -103 60 -105 0 -2 55 -98 90 -155 8 -14 182 -316 239 --414 13 -22 45 -79 72 -124 27 -46 49 -86 49 -89 0 -2 14 -24 30 -48 16 -24 -30 -46 30 -49 0 -5 74 -135 100 -176 5 -8 24 -42 43 -75 50 -88 58 -101 262 --455 104 -179 199 -345 213 -370 14 -25 28 -49 32 -55 4 -5 17 -26 28 -45 10 --19 62 -109 114 -200 114 -197 133 -230 170 -295 16 -27 33 -57 38 -65 17 -28 -96 -165 103 -180 4 -8 16 -28 26 -45 10 -16 77 -131 148 -255 72 -124 181 --313 243 -420 62 -107 121 -209 131 -227 35 -62 323 -560 392 -678 38 -66 83 --145 100 -175 16 -30 33 -59 37 -65 4 -5 17 -27 29 -47 34 -61 56 -100 90 --156 17 -29 31 -55 31 -57 0 -2 17 -32 39 -67 21 -35 134 -229 251 -433 117 --203 235 -407 261 -451 27 -45 49 -85 49 -88 0 -4 8 -19 19 -34 15 -21 200 --341 309 -533 10 -19 33 -58 51 -87 17 -29 31 -54 31 -56 0 -2 25 -44 55 -94 -30 -50 55 -95 55 -98 0 -4 6 -15 14 -23 7 -9 27 -41 43 -71 17 -30 170 -297 -342 -594 171 -296 311 -542 311 -547 0 -5 5 -9 10 -9 6 0 10 -4 10 -10 0 -5 -22 -47 49 -92 27 -46 58 -99 68 -118 24 -43 81 -140 93 -160 5 -8 66 -114 135 --235 69 -121 130 -227 135 -235 12 -21 259 -447 283 -490 10 -19 28 -47 38 --62 11 -14 19 -29 19 -32 0 -3 37 -69 83 -148 99 -170 305 -526 337 -583 13 --22 31 -53 41 -70 11 -16 22 -37 26 -45 7 -14 82 -146 103 -180 14 -24 181 --311 205 -355 13 -22 46 -80 75 -130 29 -49 64 -110 78 -135 14 -25 51 -88 82 --140 31 -52 59 -102 63 -110 4 -8 18 -33 31 -55 205 -353 284 -489 309 -535 -17 -30 45 -78 62 -106 18 -28 36 -60 39 -72 4 -12 12 -22 17 -22 5 0 9 -4 9 --10 0 -5 109 -197 241 -427 133 -230 250 -431 259 -448 51 -90 222 -385 280 --485 37 -63 78 -135 92 -160 14 -25 67 -117 118 -205 51 -88 101 -175 111 --193 34 -58 55 -95 149 -257 51 -88 101 -173 110 -190 9 -16 76 -131 147 -255 -72 -124 140 -241 151 -260 61 -108 281 -489 355 -615 38 -66 77 -133 87 -150 -35 -63 91 -161 100 -175 14 -23 99 -169 128 -220 54 -97 135 -235 142 -245 4 --5 20 -32 35 -60 26 -48 238 -416 276 -480 10 -16 26 -46 37 -65 30 -53 382 --661 403 -695 10 -16 22 -37 26 -45 4 -8 26 -48 50 -88 24 -41 43 -75 43 -77 -0 -2 22 -40 50 -85 27 -45 50 -84 50 -86 0 -3 38 -69 83 -147 84 -142 302 --520 340 -587 10 -19 34 -60 52 -90 18 -30 44 -75 57 -100 14 -25 45 -79 70 --120 25 -41 56 -96 70 -121 14 -25 77 -133 138 -240 62 -107 122 -210 132 --229 25 -43 310 -535 337 -581 11 -19 26 -45 34 -59 17 -32 238 -414 266 -460 -11 -19 24 -41 28 -49 3 -7 75 -133 160 -278 84 -146 153 -269 153 -274 0 -5 5 --9 10 -9 6 0 10 -4 10 -10 0 -5 82 -150 181 -322 182 -314 201 -346 240 -415 -12 -21 80 -139 152 -263 71 -124 141 -245 155 -270 14 -25 28 -49 32 -55 6 -8 -145 -248 220 -380 37 -66 209 -362 229 -395 11 -19 24 -42 28 -49 4 -8 67 --118 140 -243 73 -125 133 -230 133 -233 0 -2 15 -28 33 -57 19 -29 47 -78 64 --108 17 -30 53 -93 79 -139 53 -90 82 -141 157 -272 82 -142 115 -199 381 --659 142 -245 268 -463 281 -485 12 -22 71 -125 132 -230 60 -104 172 -298 -248 -430 76 -132 146 -253 156 -270 11 -16 22 -36 26 -44 3 -8 30 -54 60 -103 -29 -49 53 -91 53 -93 0 -3 18 -34 40 -70 22 -36 40 -67 40 -69 0 -2 37 -66 81 --142 45 -77 98 -168 119 -204 20 -36 47 -81 58 -100 12 -19 27 -47 33 -62 6 --16 15 -28 20 -28 5 0 9 -4 9 -9 0 -6 63 -118 140 -251 77 -133 140 -243 140 --245 0 -2 18 -33 41 -70 22 -37 49 -83 60 -101 10 -19 29 -51 40 -71 25 -45 -109 -189 126 -218 7 -11 17 -29 22 -40 6 -11 22 -38 35 -60 14 -22 37 -62 52 --90 14 -27 35 -62 45 -77 11 -14 19 -29 19 -32 0 -3 18 -35 40 -71 22 -36 40 --67 40 -69 0 -2 19 -35 42 -72 23 -38 55 -94 72 -124 26 -47 139 -244 171 --298 6 -9 21 -36 34 -60 28 -48 37 -51 51 -19 6 12 19 36 29 52 10 17 27 46 -38 65 11 19 104 181 208 360 103 179 199 345 213 370 14 25 42 74 64 109 21 -34 38 65 38 67 0 2 18 33 40 69 22 36 40 67 40 69 0 3 177 310 199 346 16 26 -136 234 140 244 2 5 25 44 52 88 27 44 49 81 49 84 0 2 18 34 40 70 22 36 40 -67 40 69 0 2 20 36 43 77 35 58 169 289 297 513 9 17 50 86 90 155 40 69 86 -150 103 180 16 30 35 62 41 70 6 8 16 24 22 35 35 64 72 129 167 293 59 100 -116 199 127 220 11 20 30 53 41 72 43 72 1070 1850 1121 1940 14 25 65 113 -113 195 48 83 96 166 107 185 10 19 28 50 38 68 11 18 73 124 137 235 64 111 -175 303 246 427 71 124 173 299 225 390 52 91 116 202 143 248 27 45 49 85 49 -89 0 4 6 14 14 22 7 9 28 43 46 76 26 47 251 436 378 655 11 19 29 51 40 70 -11 19 101 176 201 348 99 172 181 317 181 323 0 5 5 9 10 9 6 0 10 5 10 11 0 -6 8 23 18 37 11 15 32 52 49 82 16 30 130 228 253 440 122 212 234 405 248 -430 13 25 39 70 57 100 39 65 69 117 130 225 25 44 50 87 55 95 12 19 78 134 -220 380 61 107 129 224 150 260 161 277 222 382 246 425 15 28 47 83 71 123 -24 41 43 78 43 83 0 5 4 9 8 9 4 0 13 12 19 28 7 15 23 45 36 67 66 110 277 -478 277 483 0 3 6 13 14 21 7 9 27 41 43 71 17 30 45 80 63 110 34 57 375 649 -394 685 6 11 16 27 22 35 6 8 26 42 44 75 18 33 41 74 51 90 10 17 24 41 32 -55 54 97 72 128 88 152 11 14 19 28 19 30 0 3 79 141 175 308 96 167 175 305 -175 308 0 3 6 13 14 21 7 9 26 39 41 66 33 60 276 483 338 587 24 40 46 80 50 -88 4 8 13 24 20 35 14 23 95 163 125 215 11 19 52 91 92 160 40 69 80 139 90 -155 9 17 103 179 207 360 105 182 200 346 211 365 103 181 463 802 489 845 7 -11 15 27 19 35 4 8 29 51 55 95 64 110 828 1433 848 1470 9 17 24 41 33 55 9 -14 29 48 45 77 15 28 52 93 82 145 30 51 62 107 71 123 17 30 231 398 400 690 -51 88 103 179 115 202 12 23 26 48 32 55 6 7 24 38 40 68 17 30 61 107 98 170 -37 63 84 144 103 180 19 36 41 72 48 81 8 8 14 18 14 21 0 4 27 51 59 106 32 -55 72 124 89 154 16 29 71 125 122 213 51 88 104 180 118 205 13 25 28 50 32 -55 4 6 17 26 28 45 11 19 45 80 77 135 31 55 66 116 77 135 11 19 88 152 171 -295 401 694 620 1072 650 1125 11 19 87 152 170 295 83 143 158 273 166 288 9 -16 21 36 26 45 6 9 31 52 55 96 25 43 54 94 66 115 11 20 95 164 186 321 91 -157 173 299 182 315 9 17 26 46 37 65 12 19 66 114 121 210 56 96 108 186 117 -200 8 14 24 40 34 59 24 45 383 664 412 713 5 9 17 29 26 45 15 28 120 210 -241 419 36 61 68 117 72 125 4 8 12 23 19 34 35 57 245 420 262 453 11 20 35 -61 53 90 17 29 32 54 32 56 0 3 28 51 62 108 33 57 70 119 80 138 10 19 23 42 -28 50 5 8 32 53 59 100 27 47 149 258 271 470 122 212 234 405 248 430 30 53 -62 108 80 135 6 11 15 27 19 35 4 8 85 150 181 315 96 165 187 323 202 350 31 -56 116 202 130 225 5 8 25 42 43 75 19 33 92 159 162 280 149 257 157 271 202 -350 19 33 38 67 43 75 9 14 228 392 275 475 12 22 55 96 95 165 40 69 80 139 -90 155 24 42 202 350 221 383 9 15 27 47 41 72 14 25 75 131 136 236 61 106 -121 210 134 232 99 172 271 470 279 482 5 8 23 40 40 70 18 30 81 141 142 245 -60 105 121 210 135 235 14 25 71 124 127 220 56 96 143 247 194 335 51 88 96 -167 102 175 14 24 180 311 204 355 23 43 340 590 356 615 5 8 50 87 101 175 -171 301 517 898 582 1008 25 43 46 81 46 83 0 2 12 23 27 47 14 23 40 67 56 -97 16 30 35 62 42 70 7 8 15 22 18 30 4 8 20 38 37 65 16 28 33 57 37 65 6 12 -111 196 143 250 5 8 55 95 112 193 57 98 113 195 126 215 12 20 27 46 32 57 6 -11 14 27 20 35 5 8 76 130 156 270 80 140 165 287 187 325 23 39 52 90 66 115 -13 25 30 52 37 61 8 8 14 18 14 21 0 4 41 77 92 165 50 87 175 302 276 478 -101 176 208 360 236 408 28 49 67 117 86 152 19 35 41 70 48 77 6 6 12 15 12 -19 0 7 124 224 167 291 12 21 23 40 23 42 0 2 21 40 46 83 26 43 55 92 64 109 -54 95 327 568 354 614 19 30 45 75 59 100 71 128 82 145 89 148 4 2 8 8 8 13 -0 5 42 82 94 172 311 538 496 858 518 897 14 25 40 70 58 100 18 30 42 71 53 -90 10 19 79 139 152 265 73 127 142 246 153 265 10 19 43 76 72 125 29 50 63 -108 75 130 65 116 80 140 87 143 4 2 8 8 8 12 0 8 114 212 140 250 6 8 14 24 -20 35 5 11 54 97 108 190 l100 170 -9611 3 c-5286 1 -9614 -1 -9618 -5 -5 -6 --419 -719 -619 -1068 -89 -155 -267 -463 -323 -560 -38 -66 -81 -140 -95 -165 --31 -56 -263 -457 -526 -910 -110 -190 -224 -388 -254 -440 -29 -52 -61 -109 --71 -125 -23 -39 -243 -420 -268 -465 -11 -19 -204 -352 -428 -740 -224 -388 --477 -826 -563 -975 -85 -148 -185 -322 -222 -385 -37 -63 -120 -207 -185 --320 -65 -113 -177 -306 -248 -430 -72 -124 -172 -297 -222 -385 -51 -88 -142 --245 -202 -350 -131 -226 -247 -427 -408 -705 -65 -113 -249 -432 -410 -710 --160 -278 -388 -673 -506 -877 -118 -205 -216 -373 -219 -373 -3 0 -52 82 --109 183 -58 100 -144 250 -192 332 -95 164 -402 696 -647 1120 -85 149 -228 -396 -317 550 -212 365 -982 1700 -1008 1745 -10 19 -43 76 -72 125 -29 50 -64 -110 -77 135 -14 25 -63 110 -110 190 -47 80 -96 165 -110 190 -14 25 -99 171 --188 325 -89 154 -174 300 -188 325 -13 25 -64 113 -112 195 -48 83 -140 242 --205 355 -65 113 -183 317 -263 454 -79 137 -152 264 -163 282 -50 89 -335 -583 -354 614 -12 19 -34 58 -50 85 -15 28 -129 226 -253 440 -124 215 -235 -408 -247 430 -12 22 -69 121 -127 220 -58 99 -226 389 -373 645 -148 256 -324 -561 -392 678 -67 117 -134 232 -147 255 -13 23 -33 59 -46 80 l-22 37 -9615 0 --9615 0 20 -32z"/> -</g> -</svg> diff --git a/docs/.vuepress/public/images/vueschool/vs-close.svg b/docs/.vuepress/public/images/vueschool/vs-close.svg deleted file mode 100644 index 0e2f31fcd..000000000 --- a/docs/.vuepress/public/images/vueschool/vs-close.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"> - <g fill="none" fill-rule="evenodd"> - <g fill="#FFF" fill-rule="nonzero"> - <path d="M1569.69 33.321c-.415-.414-1.084-.414-1.498 0L1563 38.503l-5.192-5.192c-.414-.415-1.083-.415-1.497 0-.415.414-.415 1.083 0 1.497l5.192 5.192-5.192 5.192c-.415.414-.415 1.083 0 1.497.414.415 1.083.415 1.497 0l5.192-5.192 5.192 5.192c.414.415 1.083.415 1.497 0 .415-.414.415-1.083 0-1.497L1564.497 40l5.192-5.192c.404-.404.404-1.083 0-1.487z" transform="translate(-1556.000000, -33.000000)"/> - </g> - </g> -</svg> \ No newline at end of file diff --git a/docs/.vuepress/public/images/vueschool/vs-fw-bg-small.svg b/docs/.vuepress/public/images/vueschool/vs-fw-bg-small.svg deleted file mode 100644 index a914f4005..000000000 --- a/docs/.vuepress/public/images/vueschool/vs-fw-bg-small.svg +++ /dev/null @@ -1,183 +0,0 @@ -<svg width="375" height="80" viewBox="0 0 375 80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <defs> - <linearGradient x1="44.505%" y1="63.572%" x2="38.734%" y2="35.987%" id="xyjb951esd"> - <stop stop-color="#100122" offset="0%"/> - <stop offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="ladppv4vnf"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="crxo99pdog"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.011%" y1="98.997%" x2="50.011%" y2="0%" id="l018dwim3h"> - <stop stop-color="#100122" offset="0%"/> - <stop stop-color="#100222" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="vf87rf4i9i"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="n2ips3meoj"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.011%" y1="98.997%" x2="50.011%" y2="0%" id="5lfox0f34k"> - <stop stop-color="#100122" offset="0%"/> - <stop stop-color="#100222" offset="100%"/> - </linearGradient> - <linearGradient x1="67.838%" y1="49.111%" x2="77.139%" y2="52.125%" id="glljbgkral"> - <stop stop-color="#463487" offset="0%"/> - <stop stop-color="#352869" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="7zcs47oy5m"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="1ivo9tc94n"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.011%" y1="98.997%" x2="50.011%" y2="0%" id="jtz1zgl29o"> - <stop stop-color="#100122" offset="0%"/> - <stop stop-color="#100222" offset="100%"/> - </linearGradient> - <linearGradient x1="85.547%" y1="49.383%" x2="0%" y2="50.617%" id="shrr9bnubp"> - <stop stop-color="#3AAB82" offset="0%"/> - <stop stop-color="#352869" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="tv07ok373q"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="eoraskrsfr"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.011%" y1="98.997%" x2="50.011%" y2="0%" id="cimbnvk4us"> - <stop stop-color="#100122" offset="0%"/> - <stop stop-color="#100222" offset="100%"/> - </linearGradient> - <linearGradient x1="85.547%" y1="49.111%" x2="0%" y2="50.889%" id="b2acvzbj7t"> - <stop stop-color="#41878F" offset="0%"/> - <stop stop-color="#352869" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="totw3crrmu"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="s5bxokedgv"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.011%" y1="98.997%" x2="50.011%" y2="0%" id="x8jdggif0x"> - <stop stop-color="#100122" offset="0%"/> - <stop stop-color="#100222" offset="100%"/> - </linearGradient> - <linearGradient x1="85.547%" y1="48.98%" x2="0%" y2="51.02%" id="bvdunkfahy"> - <stop stop-color="#1B2A68" offset="0%"/> - <stop stop-color="#352869" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="9resnyc60z"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <linearGradient x1="50.02%" y1="100%" x2="50.02%" y2="-.011%" id="9znzegdhvA"> - <stop stop-color="#241644" offset="0%"/> - <stop stop-color="#040102" offset="100%"/> - </linearGradient> - <radialGradient cx="86.363%" cy="59.145%" fx="86.363%" fy="59.145%" r="282.589%" gradientTransform="matrix(-.173 .5851 -.12703 -.82532 1.088 .574)" id="oprraelscb"> - <stop stop-color="#7A1591" offset="0%"/> - <stop stop-color="#050A1E" offset="100%"/> - <stop stop-color="#050A1E" offset="100%"/> - </radialGradient> - <radialGradient cx="4.87%" cy="50%" fx="4.87%" fy="50%" r="1332.284%" gradientTransform="matrix(-.07506 0 0 -1 .052 1)" id="0rnf4zdzve"> - <stop stop-color="#53FFB3" offset="0%"/> - <stop stop-color="#3E2F7A" offset="100%"/> - </radialGradient> - <filter x="-201.5%" y="-225.6%" width="502.9%" height="551.1%" filterUnits="objectBoundingBox" id="2t22ix8htw"> - <feGaussianBlur stdDeviation="11" in="SourceGraphic"/> - </filter> - <path id="1l5w42l0na" d="M0 0h375v80H0z"/> - </defs> - <g fill="none" fill-rule="evenodd"> - <mask id="fjuopk87tc" fill="#fff"> - <use xlink:href="#1l5w42l0na"/> - </mask> - <use fill="url(#oprraelscb)" xlink:href="#1l5w42l0na"/> - <g mask="url(#fjuopk87tc)" fill="#FFF"> - <g transform="translate(-917 5)"> - <circle opacity=".142" cx="1144" cy="10" r="2"/> - <circle opacity=".142" cx="1276" cy="6" r="2"/> - <circle opacity=".142" cx="1290" cy="37" r="2"/> - <circle opacity=".359" cx="1049" cy="28" r="2"/> - <circle opacity=".359" cx="983" cy="66" r="1"/> - <circle opacity=".359" cx="1184" cy="47" r="1"/> - <circle opacity=".359" cx="1146" cy="65" r="1"/> - </g> - </g> - <g mask="url(#fjuopk87tc)"> - <path d="M.54.973S-.014 3.466.044 4.06c.058.595 1.32 1.918 1.32 1.918s1.322 2.59 1.739 3.857c.417 1.266 1.848 2.878 1.848 2.878s4.911 4.666 6.39 4.608c.678-.026 3.403-2.551 4.282-2.551 2.337 0 3.735-1.846 3.735-1.846s3.299-5.219 3.587-5.477c.287-.259 1.93-.795 1.93-.795s2.674-4.4 2.884-5.557l-7.437.278L.54.973z" fill="url(#xyjb951esd)" transform="translate(306.607 65.944)"/> - <path d="m.54.973 3.513-.25L6.094.529s9.657.014 12.443.109c0 0 2.318-.527 2.947-.544.63-.016 1.849.63 1.849.63l4.426.326s-2.03.396-3.575.378l1.485.282c-.28.12-.599.21-.938.265-.59.1-5.021.174-7.12.16-2.1-.012-3.025-.425-3.025-.425l.966-.206-1.136-.076s-3.44.34-4.753.362A29.142 29.142 0 0 1 6.66 1.63l-.125-.252S2.968 1.268.54.973z" fill="url(#0rnf4zdzve)" transform="translate(306.607 65.944)"/> - <path d="M5.702 1.585v1.741l-1.939.3s-.085.035-.299.527c-.214.493-1.201 1.734-1.201 1.734l-.898.09.72 1.468s1.037.01 1.45.243c.414.234 1.327.932 1.327.932l.549 1.37s.548-2.534.58-2.934c.03-.4.569-2.112.486-2.411-.083-.3.033-1.425.033-1.425l.15-1.179s2.81.352 3.104.447c.293.095.42 1.167.42 1.167l.966 2.012-1.081 2.944.417 2.492.131 1.875 1.526 3.966 1.207-.836s.989-6.513 1.06-6.81c.072-.298-.268-1-.268-1l.48-3.06-.046-3.068.966-.333-1.136-.123s-3.565.485-4.156.536c-.59.052-3.596-.457-3.596-.457l1.802-.4-2.754.192z" fill="url(#ladppv4vnf)" transform="translate(306.607 65.944)"/> - <path d="m21.116 2.137 2.408.226-.386.518-1.043 1.413-1.26.674-1.411.294-1.097.435h.952l-.073.574-.512 1.367-.025.979.687-.267s2.526-2.416 3.579-3.378c0 0 1.751-.304 1.931-.491.18-.187 2.657-2.79 2.883-3.433l-3.565.38 1.485.28c-.558.142-1.14.252-1.738.327-.7.06-2.815.102-2.815.102z" fill="url(#crxo99pdog)" transform="translate(306.607 65.944)"/> - <path d="m325.144 66.577-.772.217s.568.072.896.124c.328.052 2.138-.03 2.458-.083.32-.052 1.51-.256 1.51-.256l.064-.21s-.888-.447-1.158-.423c-.27.024-2.528.501-2.998.63z" fill="#41A997"/> - <path d="m330.05 66.676-.754.24-1.18.016h-2.51s1.931-.093 2.223-.128c.291-.035 1.406-.227 1.406-.227l.063-.21.752.309z" fill="#10001D"/> - <path fill="#000" d="m312.31 68.368.81 1.072.141-2.019 1.802-.248-2.754.12zM330.791 67.371l1.485.282-.64 2.617s1.992-2.141 2.732-3.278l-3.577.38zM316.857 67.703l1.893 1.035 1.17.702.238.6 1.05-.376-.017-2.011.964-.206-1.138-.076z"/> - <g> - <path d="M.325.943S.022 2.437.054 2.793c.031.357.72 1.15.72 1.15s.722 1.551.95 2.31c.227.76 1.008 1.725 1.008 1.725s2.681 2.796 3.489 2.76c.37-.015 1.857-1.528 2.337-1.528 1.275 0 2.038-1.106 2.038-1.106s1.8-3.126 1.958-3.281c.157-.155 1.054-.477 1.054-.477s1.46-2.635 1.574-3.329l-4.06.167L.325.944z" fill="url(#l018dwim3h)" transform="translate(297.077 69.01)"/> - <path d="m297.402 69.954 1.917-.241 1.114-.19s5.271.014 6.793.105c0 0 1.265-.511 1.608-.527.344-.016 1.009.61 1.009.61l2.416.317s-1.108.384-1.951.367l.81.273a1.564 1.564 0 0 1-.512.257c-.321.097-2.74.169-3.886.156-1.146-.013-1.651-.413-1.651-.413l.527-.2-.62-.073s-1.878.329-2.594.35a9.047 9.047 0 0 1-1.64-.153l-.068-.245s-1.947-.106-3.272-.393z" fill="#3F7D8C"/> - <path d="M3.142 1.308v1.043l-1.058.179s-.046.021-.163.316-.656 1.039-.656 1.039l-.49.053.393.88s.566.005.792.145c.225.14.724.558.724.558l.3.82s.299-1.517.315-1.756c.017-.24.311-1.265.266-1.445-.045-.179.018-.852.018-.852l.082-.707s1.534.211 1.694.268c.16.057.23.699.23.699l.527 1.205-.59 1.762.228 1.493.071 1.123.833 2.375.659-.5s.54-3.901.579-4.08c.039-.178-.147-.598-.147-.598l.263-1.832-.026-1.838.527-.199-.62-.074s-1.946.291-2.268.322c-.323.03-1.963-.274-1.963-.274l.984-.24-1.504.115z" fill="url(#vf87rf4i9i)" transform="translate(297.077 69.01)"/> - <path d="m11.556 2.073 1.314.219-.21.502-.57 1.37-.687.654-.77.285-.6.422h.52l-.04.557-.28 1.326-.013.948.375-.258s1.38-2.343 1.954-3.276c0 0 .956-.295 1.054-.477.098-.181 1.45-2.706 1.574-3.329l-1.946.368.81.273a4.944 4.944 0 0 1-.948.316c-.383.058-1.537.1-1.537.1z" fill="url(#n2ips3meoj)" transform="translate(297.077 69.01)"/> - <path d="m307.226 69.624-.422.21s.31.07.489.121c.18.05 1.167-.03 1.342-.08.175-.05.824-.249.824-.249l.035-.203s-.485-.434-.632-.41c-.148.023-1.38.486-1.636.611z" fill="#211941"/> - <path d="m309.903 69.72-.411.233-.644.016h-1.37s1.054-.09 1.213-.125c.159-.033.767-.22.767-.22l.035-.203.41.299z" fill="#10001D"/> - <path fill="#000" d="m300.22 71.361.442 1.04.077-1.958.984-.24-1.503.116zM310.308 70.395l.81.273-.35 2.538s1.089-2.077 1.492-3.18l-1.952.369zM302.702 70.716l1.033 1.004.639.68.13.583.573-.365-.01-1.95.527-.2-.621-.073z"/> - </g> - <g opacity=".6"> - <path d="M.15.435s-.14.688-.125.852c.014.164.332.53.332.53s.332.715.437 1.064c.105.35.465.795.465.795s1.235 1.288 1.607 1.272c.17-.007.856-.704 1.077-.704.588 0 .94-.51.94-.51s.83-1.44.902-1.512c.072-.071.485-.22.485-.22S6.943.789 6.996.47L5.125.545.15.435z" fill="url(#5lfox0f34k)" transform="translate(290 60.963)"/> - <path d="m.15.435.883-.111.514-.088s2.428.006 3.13.049c0 0 .582-.236.74-.243.159-.008.465.281.465.281l1.114.146s-.51.177-.9.169l.374.126a.72.72 0 0 1-.236.118C6.086.927 4.971.96 4.443.954c-.528-.006-.76-.19-.76-.19l.242-.092L3.64.638S2.775.789 2.444.8C2.191.799 1.938.775 1.69.729L1.657.616S.76.566.15.435z" fill="url(#glljbgkral)" transform="translate(290 60.963)"/> - <path d="M1.448.603v.48l-.488.083s-.021.01-.075.146c-.054.136-.302.478-.302.478l-.226.025.181.405s.261.002.365.067c.104.064.334.257.334.257l.138.378s.138-.7.145-.81c.008-.11.144-.582.123-.665-.021-.083.008-.393.008-.393L1.689.73s.707.097.78.123c.074.026.106.322.106.322l.243.555-.272.812.105.688.033.518.384 1.094.303-.23s.25-1.798.267-1.88c.018-.082-.067-.276-.067-.276l.12-.844L3.68.764l.243-.092-.286-.034s-.896.134-1.045.148C2.443.801 1.687.66 1.687.66l.454-.11-.693.053z" fill="url(#7zcs47oy5m)" transform="translate(290 60.963)"/> - <path d="m5.325.955.605.101-.097.231-.262.632-.317.3-.355.132-.276.195h.24l-.019.256-.128.611-.007.438.173-.12s.636-1.08.9-1.51c0 0 .44-.135.486-.219.045-.083.668-1.247.725-1.534l-.896.17.373.126c-.14.063-.287.112-.437.145-.176.027-.708.046-.708.046z" fill="url(#1ivo9tc94n)" transform="translate(290 60.963)"/> - <path d="m294.676 61.246-.194.097s.143.032.225.056c.083.023.538-.014.619-.037l.38-.115.016-.094s-.224-.2-.292-.189c-.068.011-.636.224-.754.282z" fill="#5E48B5"/> - <path d="m295.91 61.29-.19.108-.296.007h-.632s.486-.042.56-.057c.073-.016.353-.102.353-.102l.016-.094.189.138z" fill="#10001D"/> - <path fill="#000" d="m291.448 62.047.204.478.035-.902.454-.11-.693.053zM296.097 61.601l.373.126-.161 1.17s.501-.957.687-1.465l-.9.17zM292.592 61.75l.476.462.294.313.06.269.264-.168-.004-.9.242-.09-.286-.035z"/> - </g> - <g opacity=".267"> - <path d="M.29.813s-.16.767-.143.95c.017.183.38.59.38.59s.38.798.5 1.188c.12.39.53.886.53.886S2.97 5.863 3.396 5.845c.194-.008.978-.785 1.23-.785.672 0 1.074-.568 1.074-.568s.948-1.607 1.03-1.686c.083-.08.556-.245.556-.245s.768-1.354.829-1.71L5.976.936.29.813z" fill="url(#jtz1zgl29o)" transform="matrix(-1 0 0 1 355 57.968)"/> - <path d="M.146.755 1.12.652l.566-.08s2.678.006 3.45.045c0 0 .644-.217.818-.223.175-.007.513.258.513.258l1.227.134s-.563.162-.991.155l.412.116a.866.866 0 0 1-.26.109c-.164.04-1.393.071-1.975.066-.582-.006-.839-.175-.839-.175L4.31.972l-.315-.03s-.954.138-1.318.148c-.28 0-.558-.023-.833-.065L1.808.92S.82.876.146.755z" fill="url(#shrr9bnubp)" transform="matrix(-1 0 0 1 355 57.968)"/> - <path d="M1.429.875v.563l-.574.097s-.025.012-.088.171c-.064.16-.355.561-.355.561l-.266.03.213.474s.307.003.429.079.392.301.392.301l.163.444s.162-.82.171-.95c.01-.129.169-.683.144-.78-.025-.097.01-.46.01-.46l.044-.383s.831.114.918.145c.087.03.125.378.125.378l.285.651-.32.952.124.807.039.607.451 1.283.357-.27s.293-2.108.314-2.204c.02-.097-.08-.324-.08-.324l.143-.99-.014-.993.285-.108-.335-.04s-1.055.158-1.23.174C2.6 1.107 1.711.942 1.711.942l.533-.13-.815.063z" fill="url(#tv07ok373q)" transform="matrix(-1 0 0 1 355 57.968)"/> - <path d="m5.923 1.356.643.113-.103.258-.279.704-.336.336-.377.147-.293.217h.254l-.02.286-.136.682-.007.488.184-.133s.675-1.205.956-1.684c0 0 .467-.152.515-.245.048-.094.71-1.392.77-1.712l-.952.189.397.14c-.15.071-.305.125-.464.163-.187.03-.752.051-.752.051z" fill="url(#eoraskrsfr)" transform="matrix(-1 0 0 1 355 57.968)"/> - <path d="m349.625 58.629.197.092s-.145.03-.229.053c-.084.022-.546-.013-.627-.035l-.386-.11-.016-.088s.227-.19.296-.18c.069.01.645.213.765.268z" fill="#09080F"/> - <path d="m348.564 58.59.213.179.334.012h.71s-.546-.07-.628-.096c-.083-.025-.398-.168-.398-.168l-.019-.156-.212.23z" fill="#10001D"/> - <path fill="#000" d="m353.596 59.444-.247.595-.043-1.12-.549-.138.839.066zM348.144 58.975l-.348.144.15 1.339s-.467-1.096-.64-1.677l.838.194zM352.338 59.356l-.6.488-.37.331-.075.283-.333-.177.006-.948-.305-.097.36-.036z"/> - </g> - <g> - <path d="M.23.666S.015 1.72.037 1.972c.022.251.509.811.509.811s.509 1.095.67 1.631c.16.536.712 1.218.712 1.218S3.82 7.605 4.39 7.58c.261-.01 1.311-1.079 1.65-1.079.9 0 1.439-.78 1.439-.78s1.27-2.207 1.382-2.317c.11-.109.744-.336.744-.336s1.03-1.86 1.11-2.35L7.852.836.23.666z" fill="url(#cimbnvk4us)" transform="matrix(-1 0 0 1 349.694 60.09)"/> - <path d="m.23.666 1.353-.17.786-.134s3.72.01 4.795.074c0 0 .892-.36 1.135-.372.243-.011.712.43.712.43l1.706.224s-.782.27-1.378.259l.573.193c-.109.082-.231.144-.362.181-.227.069-1.935.12-2.744.11-.808-.008-1.165-.291-1.165-.291l.372-.14-.437-.053s-1.326.232-1.832.248a6.386 6.386 0 0 1-1.157-.109L2.54.944S1.164.868.229.666z" fill="url(#b2acvzbj7t)" transform="matrix(-1 0 0 1 349.694 60.09)"/> - <path d="M2.218.923v.736l-.747.127s-.033.015-.115.223c-.083.208-.463.733-.463.733l-.346.038.277.62s.4.004.56.103c.158.1.51.394.51.394l.212.58s.211-1.072.223-1.24c.012-.17.22-.894.188-1.02-.032-.127.012-.602.012-.602l.058-.499s1.083.149 1.196.19c.113.04.162.493.162.493l.372.85-.416 1.244.16 1.054.05.792.589 1.677.465-.354s.38-2.753.408-2.879c.028-.125-.103-.422-.103-.422l.185-1.293-.018-1.297.372-.141-.437-.052s-1.374.205-1.601.227c-.228.021-1.386-.194-1.386-.194l.694-.169-1.06.081z" fill="url(#totw3crrmu)" transform="matrix(-1 0 0 1 349.694 60.09)"/> - <path d="m8.157 1.463.928.155-.149.354-.402.967-.485.462-.544.201-.423.298h.367l-.028.393-.197.936-.01.67.265-.183s.973-1.654 1.379-2.312c0 0 .675-.209.744-.337.07-.128 1.024-1.91 1.111-2.35l-1.374.26.573.193a3.49 3.49 0 0 1-.67.223c-.27.04-1.085.07-1.085.07z" fill="url(#s5bxokedgv)" transform="matrix(-1 0 0 1 349.694 60.09)"/> - <path d="m342.53 60.523.298.15s-.218.048-.345.084c-.126.036-.824-.02-.947-.056-.124-.036-.582-.176-.582-.176l-.025-.144s.343-.306.447-.29c.104.017.974.344 1.155.432z" fill="#09080F"/> - <path d="m340.64 60.591.29.165.456.01h.967s-.744-.063-.857-.087c-.112-.024-.541-.156-.541-.156l-.025-.143-.29.211z" fill="#10001D"/> - <path fill="#000" d="m347.476 61.75-.312.733-.055-1.381-.694-.17 1.061.082zM340.355 61.067l-.572.193.247 1.792s-.768-1.466-1.053-2.244l1.378.26zM345.724 61.294l-.73.709-.45.48-.092.411-.405-.257.007-1.377-.371-.14.438-.053z"/> - </g> - <g fill-rule="nonzero"> - <path d="m16.469.411-7.622 14.22-1.91-.07L.089 0l1.91.07 2.895.07 2.666.062.673 1.431L8.994.21l1.91.07 2.67.062 2.895.07z" fill="#05FF8F" filter="url(#2t22ix8htw)" transform="translate(311.471 50)"/> - <path fill="#1F3A2E" d="m318.874 53.566 1.905-.073-1.758-3.283-1.909.07z"/> - <path fill="#385F86" d="m314.442 50.342 4.572 8.533 4.11-8.735-2.667.062-1.583 3.364-1.762-3.287z"/> - <path fill="#1F3A2E" d="m319.169 64.63 1.91-.07L327.927 50l-1.91.07z"/> - <path fill="#53FFB3" d="m311.547 50.411 7.622 14.22 6.85-14.561-2.896.07-4.11 8.735-4.57-8.533z"/> - </g> - <g> - <path d="M.98 2.938S.28 6.446.353 7.282C.426 8.12 2.021 9.98 2.021 9.98s1.668 3.644 2.195 5.426c.527 1.782 2.333 4.05 2.333 4.05s6.202 6.563 8.07 6.482c.855-.038 4.296-3.59 5.405-3.59 2.951 0 4.717-2.596 4.717-2.596s4.164-7.341 4.528-7.705c.363-.364 2.438-1.119 2.438-1.119s3.375-6.188 3.64-7.816l-9.39.39L.98 2.939z" fill="url(#x8jdggif0x)" transform="matrix(-1 0 0 1 91.348 57.062)"/> - <path d="m.348 3.091 4.517-.61 2.625-.478s12.417.035 16 .266c0 0 2.98-1.29 3.79-1.33.81-.04 2.376 1.54 2.376 1.54l5.692.798s-2.61.969-4.597.926l1.91.689c-.362.294-.77.514-1.207.649-.757.245-6.457.426-9.156.394-2.7-.032-3.889-1.043-3.889-1.043l1.242-.503-1.46-.186s-4.423.83-6.112.886A19.94 19.94 0 0 1 8.218 4.7l-.162-.617S3.47 3.815.348 3.091z" fill="url(#bvdunkfahy)" transform="matrix(-1 0 0 1 91.348 57.062)"/> - <path d="M6.855 4.21v2.463l-2.462.423s-.108.05-.38.747c-.272.698-1.525 2.453-1.525 2.453l-1.14.127.915 2.077s1.316.013 1.84.344c.526.331 1.685 1.317 1.685 1.317l.697 1.94s.696-3.586.735-4.151c.04-.565.724-2.989.618-3.412-.105-.423.042-2.015.042-2.015l.191-1.668s3.568.498 3.94.632c.373.135.535 1.651.535 1.651l1.226 2.847-1.373 4.164.53 3.526.166 2.653 1.937 5.61 1.533-1.183s1.255-9.214 1.346-9.635c.09-.42-.34-1.414-.34-1.414l.61-4.329-.06-4.34 1.227-.471-1.442-.174s-4.526.687-5.277.76c-.75.071-4.565-.648-4.565-.648l2.288-.566-3.497.272z" fill="url(#9resnyc60z)" transform="matrix(-1 0 0 1 91.348 57.062)"/> - <path d="m26.9 5.385 3.066.508-.491 1.162-1.329 3.174-1.603 1.513-1.798.662-1.397.977h1.212l-.093 1.289-.652 3.071-.032 2.197.876-.598s3.217-5.427 4.557-7.588c0 0 2.231-.684 2.46-1.103.229-.42 3.384-6.268 3.672-7.71l-4.54.851 1.891.633c-.711.318-1.453.563-2.214.732-.892.134-3.586.23-3.586.23z" fill="url(#9znzegdhvA)" transform="matrix(-1 0 0 1 91.348 57.062)"/> - <path d="m68.06 59.276.94.44s-.691.145-1.09.25c-.4.106-2.604-.061-2.994-.167-.39-.105-1.838-.518-1.838-.518L63 58.857s1.082-.903 1.41-.855c.33.048 3.078 1.013 3.65 1.274z" fill="#09080F"/> - <path d="m61 59.546 1.017.425L63.61 60H67s-2.608-.165-3.001-.227c-.394-.061-1.899-.402-1.899-.402L62.014 59 61 59.546z" fill="#10001D"/> - <path fill="#000" d="M84 63.635 82.822 66l-.205-4.453L80 61l4 .264zM61 61.81l-2.076.601L59.82 68s-2.786-4.572-3.82-7l5 .81zM78 61.745l-2.5 2.327-1.547 1.579L73.639 67l-1.389-.846.023-4.521L71 61.171 72.503 61z"/> - </g> - </g> - </g> -</svg> diff --git a/docs/.vuepress/public/images/vueschool/vs-fw-bg.svg b/docs/.vuepress/public/images/vueschool/vs-fw-bg.svg deleted file mode 100644 index 8c5222062..000000000 --- a/docs/.vuepress/public/images/vueschool/vs-fw-bg.svg +++ /dev/null @@ -1,219 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1600" height="80" viewBox="0 0 1600 80"> - <defs> - <linearGradient id="5ameghss0d" x1="69.517%" x2="6.594%" y1="51.532%" y2="50.219%"> - <stop offset="0%" stop-color="#2F1360"/> - <stop offset="100%" stop-color="#170733" stop-opacity="0"/> - </linearGradient> - <linearGradient id="ldcbexte6e" x1="44.505%" x2="38.734%" y1="63.572%" y2="35.987%"> - <stop offset="0%" stop-color="#100122"/> - <stop offset="100%"/> - </linearGradient> - <linearGradient id="d2q9m4a13g" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="vad27r6pfh" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="9dpb6hp5ci" x1="50.011%" x2="50.011%" y1="98.997%" y2="0%"> - <stop offset="0%" stop-color="#100122"/> - <stop offset="100%" stop-color="#100222"/> - </linearGradient> - <linearGradient id="t5ze97cb1j" x1="67.838%" x2="77.139%" y1="49.111%" y2="52.125%"> - <stop offset="0%" stop-color="#418D90"/> - <stop offset="100%" stop-color="#352869"/> - </linearGradient> - <linearGradient id="iunmf4p5dk" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="ugpy0s3qzl" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="d2qa2xa78m" x1="50.011%" x2="50.011%" y1="98.997%" y2="0%"> - <stop offset="0%" stop-color="#100122"/> - <stop offset="100%" stop-color="#100222"/> - </linearGradient> - <linearGradient id="ghn0xezfxn" x1="67.838%" x2="77.139%" y1="49.111%" y2="52.125%"> - <stop offset="0%" stop-color="#463487"/> - <stop offset="100%" stop-color="#352869"/> - </linearGradient> - <linearGradient id="nkk1vcp9xo" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="iatia160pp" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="b93vg68qvq" x1="50.011%" x2="50.011%" y1="98.997%" y2="0%"> - <stop offset="0%" stop-color="#100122"/> - <stop offset="100%" stop-color="#100222"/> - </linearGradient> - <linearGradient id="qfqmiu1lhr" x1="85.547%" x2="0%" y1="49.383%" y2="50.617%"> - <stop offset="0%" stop-color="#3AAB82"/> - <stop offset="100%" stop-color="#352869"/> - </linearGradient> - <linearGradient id="3ph8n0fdus" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="z844b6m03t" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="grslp9mosu" x1="50.011%" x2="50.011%" y1="98.997%" y2="0%"> - <stop offset="0%" stop-color="#100122"/> - <stop offset="100%" stop-color="#100222"/> - </linearGradient> - <linearGradient id="oi7nzej9iv" x1="85.547%" x2="0%" y1="49.111%" y2="50.889%"> - <stop offset="0%" stop-color="#41878F"/> - <stop offset="100%" stop-color="#352869"/> - </linearGradient> - <linearGradient id="f8fiecmc3w" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="alvgpbp57x" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="z3rt2dgojy" x1="50.011%" x2="50.011%" y1="98.997%" y2="0%"> - <stop offset="0%" stop-color="#100122"/> - <stop offset="100%" stop-color="#100222"/> - </linearGradient> - <linearGradient id="3zewkh3hjz" x1="85.547%" x2="0%" y1="49.111%" y2="50.889%"> - <stop offset="0%" stop-color="#1B2A68"/> - <stop offset="100%" stop-color="#352869"/> - </linearGradient> - <linearGradient id="at7ruyopaA" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <linearGradient id="1y097csx7B" x1="50.02%" x2="50.02%" y1="100%" y2="-.011%"> - <stop offset="0%" stop-color="#241644"/> - <stop offset="100%" stop-color="#040102"/> - </linearGradient> - <radialGradient id="pemavkj99b" cx="100%" cy="50%" r="946.157%" fx="100%" fy="50%" gradientTransform="matrix(-.04881 .21668 -.01103 -.99353 1.054 .78)"> - <stop offset="0%" stop-color="#8647B7"/> - <stop offset="100%" stop-color="#050A1E"/> - </radialGradient> - <radialGradient id="eertgxvnhf" cx="4.87%" cy="50%" r="1332.284%" fx="4.87%" fy="50%" gradientTransform="matrix(-.07506 0 0 -1 .052 1)"> - <stop offset="0%" stop-color="#53FFB3"/> - <stop offset="100%" stop-color="#3E2F7A"/> - </radialGradient> - <filter id="rx0t6c148C" width="269%" height="289.2%" x="-84.5%" y="-94.6%" filterUnits="objectBoundingBox"> - <feGaussianBlur in="SourceGraphic" stdDeviation="11"/> - </filter> - <path id="f8t3xp6zsa" d="M0 0H1600V80H0z"/> - </defs> - <g fill="none" fill-rule="evenodd"> - <g> - <mask id="j8rbacs7oc" fill="#fff"> - <use xlink:href="#f8t3xp6zsa"/> - </mask> - <use fill="url(#pemavkj99b)" xlink:href="#f8t3xp6zsa"/> - <g fill="#FFF" mask="url(#j8rbacs7oc)"> - <g transform="translate(141 5)"> - <circle cx="1144" cy="10" r="2" opacity=".142"/> - <circle cx="1276" cy="6" r="2" opacity=".142"/> - <circle cx="1415" cy="50" r="2" opacity=".359"/> - <circle cx="1290" cy="37" r="2" opacity=".142"/> - <circle cx="1049" cy="28" r="2" opacity=".359"/> - <circle cx="1341" cy="64" r="2" opacity=".359"/> - <circle cx="260" cy="28" r="2" opacity=".359"/> - <circle cx="71" cy="64" r="2" opacity=".359"/> - <circle cx="70" cy="38" r="1" opacity=".359"/> - <circle cx="157" cy="63" r="1" opacity=".359"/> - <circle cx="231" cy="8" r="1" opacity=".359"/> - <circle cx="310" cy="63" r="1" opacity=".359"/> - <circle cx="429" cy="1" r="1" opacity=".359"/> - <circle cx="619" cy="69" r="1" opacity=".359"/> - <circle cx="761" cy="51" r="1" opacity=".359"/> - <circle cx="808" cy="67" r="1" opacity=".359"/> - <circle cx="983" cy="66" r="1" opacity=".359"/> - <circle cx="1184" cy="47" r="1" opacity=".359"/> - <circle cx="1313" cy="58" r="1" opacity=".359"/> - <circle cx="1313" cy="41" r="1" opacity=".359"/> - <circle cx="1367" cy="41" r="1" opacity=".142"/> - <circle cx="1412" cy="16" r="1" opacity=".359"/> - <circle cx="1379" cy="16" r="1" opacity=".359"/> - <circle cx="1146" cy="65" r="1" opacity=".359"/> - <circle cx="1359" cy="15" r="1" opacity=".359"/> - <circle cx="2" cy="2" r="2" opacity=".359"/> - <circle cx="796" cy="6" r="2" opacity=".359"/> - </g> - </g> - <path fill="url(#5ameghss0d)" d="M1466.372 7.76l59.556 5.549-75.405 1.606-170.359 9.693-42.523-1.11 58.819-5.46 42.003-2.974-145.38-5.964 30.368 4.058 24.469 4.045L1143 11.085V80l220.316-1.273 125.536-8.515-73.365-7.78h50.885l130.39 10.236-48.38-8.287H1600V1.736S1490.4 4.817 1415.871 0l50.5 7.76z" mask="url(#j8rbacs7oc)" opacity=".101"/> - <g mask="url(#j8rbacs7oc)"> - <g> - <g> - <path fill="url(#ldcbexte6e)" d="M1.288 2.32S-.034 8.265.104 9.683c.139 1.419 3.15 4.574 3.15 4.574s3.15 6.176 4.145 9.197c.995 3.02 4.407 6.864 4.407 6.864s11.712 11.127 15.24 10.989c1.616-.063 8.114-6.084 10.21-6.084 5.572 0 8.906-4.401 8.906-4.401s7.866-12.445 8.552-13.062c.686-.617 4.605-1.896 4.605-1.896s6.374-10.49 6.876-13.25l-17.735.663L1.288 2.32z" transform="translate(323 7) translate(1041.601 38.02)"/> - <path fill="url(#eertgxvnhf)" d="M1.288 2.32l8.377-.594 4.868-.466s23.026.033 29.672.259c0 0 5.526-1.257 7.027-1.296 1.502-.039 4.407 1.5 4.407 1.5l10.556.778s-4.84.944-8.525.902l3.542.672c-.67.286-1.43.5-2.238.632-1.405.239-11.974.415-16.98.384-5.006-.031-7.212-1.016-7.212-1.016l2.303-.49-2.708-.182s-8.202.81-11.334.864c-2.402-.004-4.8-.13-7.16-.379l-.3-.601S7.077 3.025 1.288 2.32z" transform="translate(323 7) translate(1041.601 38.02)"/> - <path fill="url(#d2q9m4a13g)" d="M13.598 3.78V7.93l-4.624.714s-.202.084-.714 1.26c-.51 1.175-2.864 4.134-2.864 4.134l-2.142.214 1.718 3.501s2.473.021 3.459.58c.985.558 3.164 2.22 3.164 2.22l1.307 3.27s1.308-6.044 1.382-6.997c.074-.953 1.359-5.038 1.16-5.751-.197-.714.079-3.396.079-3.396l.36-2.813s6.7.84 7.4 1.066c.7.227 1.004 2.783 1.004 2.783l2.302 4.799-2.579 7.018.995 5.945.313 4.47 3.638 9.458 2.879-1.994s2.358-15.532 2.528-16.241c.17-.71-.64-2.385-.64-2.385l1.147-7.296-.11-7.317 2.302-.793-2.708-.294s-8.501 1.159-9.91 1.28c-1.41.122-8.576-1.09-8.576-1.09l4.297-.954-6.567.458z" transform="translate(323 7) translate(1041.601 38.02)"/> - <path fill="url(#vad27r6pfh)" d="M50.353 5.096l5.742.54-.92 1.233-2.488 3.37-3.002 1.607-3.367.702-2.615 1.037h2.27l-.175 1.369-1.22 3.26-.06 2.333 1.64-.635s6.023-5.762 8.533-8.056c0 0 4.177-.726 4.605-1.171.428-.446 6.337-6.654 6.876-8.186l-8.502.904 3.542.672c-1.331.337-2.72.598-4.145.777-1.672.143-6.714.244-6.714.244z" transform="translate(323 7) translate(1041.601 38.02)"/> - <path fill="#41A997" d="M44.205 1.509l-1.843.518s1.354.171 2.137.295c.783.125 5.098-.072 5.863-.197.764-.124 3.601-.611 3.601-.611l.152-.5S51.997-.053 51.352.004c-.645.057-6.028 1.195-7.147 1.504z" transform="translate(323 7) translate(1041.601 38.02)"/> - <path fill="#10001D" d="M55.902 1.744l-1.796.573-2.814.04h-5.987s4.606-.224 5.3-.307c.696-.083 3.354-.541 3.354-.541l.152-.5 1.791.735z" transform="translate(323 7) translate(1041.601 38.02)"/> - <path fill="#000" d="M13.598 5.78L15.532 8.336 15.868 3.523 20.165 2.932 13.598 3.217zM57.67 3.403l3.542.672-1.53 6.241S64.437 5.21 66.2 2.5l-8.529.904zM24.443 4.194L28.956 6.662 31.747 8.336 32.314 9.767 34.819 8.87 34.778 4.075 37.076 3.585 34.363 3.403z" transform="translate(323 7) translate(1041.601 38.02)"/> - </g> - <g> - <path fill="url(#9dpb6hp5ci)" d="M.774 2.25S.052 5.812.128 6.662c.075.85 1.72 2.74 1.72 2.74s1.719 3.7 2.262 5.51c.543 1.81 2.405 4.112 2.405 4.112s6.393 6.667 8.319 6.584c.882-.038 4.429-3.645 5.573-3.645 3.041 0 4.861-2.637 4.861-2.637s4.294-7.456 4.668-7.825c.375-.37 2.514-1.137 2.514-1.137s3.48-6.284 3.753-7.938l-9.68.397L.773 2.25z" transform="translate(323 7) translate(1018.876 45.333)"/> - <path fill="url(#t5ze97cb1j)" d="M.774 2.25l4.572-.576 2.658-.452s12.569.032 16.196.251c0 0 3.016-1.22 3.836-1.257.82-.038 2.406 1.456 2.406 1.456l5.761.754s-2.642.915-4.653.875l1.933.65c-.366.279-.78.487-1.221.614-.767.231-6.536.402-9.269.372-2.732-.03-3.936-.985-3.936-.985l1.257-.475-1.479-.176s-4.477.784-6.186.837c-1.311-.004-2.62-.126-3.909-.367l-.163-.584S3.934 2.934.774 2.25z" transform="translate(323 7) translate(1018.876 45.333)"/> - <path fill="url(#iunmf4p5dk)" d="M7.493 3.12v2.486l-2.524.427s-.11.05-.39.754c-.278.704-1.563 2.476-1.563 2.476l-1.169.129.938 2.096s1.35.013 1.888.347c.538.334 1.727 1.33 1.727 1.33l.714 1.958s.714-3.62.754-4.19c.04-.571.741-3.017.633-3.444-.108-.428.043-2.034.043-2.034L8.74 3.77s3.658.502 4.04.638c.382.136.548 1.667.548 1.667l1.257 2.873-1.408 4.203.543 3.56.17 2.677 1.987 5.663 1.57-1.194s1.288-9.3 1.38-9.725c.094-.425-.348-1.428-.348-1.428l.625-4.37-.06-4.38 1.257-.476-1.478-.176s-4.64.694-5.41.767c-.769.073-4.68-.654-4.68-.654l2.345-.57-3.585.274z" transform="translate(323 7) translate(1018.876 45.333)"/> - <path fill="url(#ugpy0s3qzl)" d="M27.556 4.942l3.135.523-.503 1.197-1.358 3.267-1.639 1.559-1.837.681-1.428 1.006h1.24l-.096 1.327-.666 3.162-.033 2.263.895-.616s3.288-5.588 4.658-7.813c0 0 2.28-.704 2.514-1.136.233-.433 3.459-6.453 3.753-7.939l-4.64.878 1.932.65c-.726.328-1.484.58-2.262.755-.913.138-3.665.236-3.665.236z" transform="translate(323 7) translate(1018.876 45.333)"/> - <path fill="#211941" d="M24.2 1.463l-1.006.503s.74.166 1.167.286c.427.121 2.783-.07 3.2-.19.417-.121 1.966-.594 1.966-.594l.083-.485S28.453-.05 28.1.005c-.352.055-3.29 1.159-3.901 1.458z" transform="translate(323 7) translate(1018.876 45.333)"/> - <path fill="#10001D" d="M30.585 1.692l-.98.555-1.536.038H24.8s2.514-.216 2.893-.297c.38-.08 1.83-.525 1.83-.525l.083-.485.978.714z" transform="translate(323 7) translate(1018.876 45.333)"/> - <path fill="#000" d="M7.493 5.606L8.549 8.084 8.733 3.416 11.078 2.843 7.493 3.12zM31.55 3.3l1.933.652-.834 6.053s2.594-4.952 3.557-7.582l-4.656.878zM13.413 4.067L15.877 6.46 17.4 8.084 17.709 9.472 19.077 8.602 19.054 3.952 20.309 3.477 18.828 3.301z" transform="translate(323 7) translate(1018.876 45.333)"/> - </g> - <g opacity=".6"> - <path fill="url(#d2qa2xa78m)" d="M.357 1.037S.024 2.678.059 3.07C.094 3.46.85 4.332.85 4.332s.792 1.705 1.043 2.54c.25.833 1.108 1.894 1.108 1.894s2.946 3.072 3.833 3.034c.407-.018 2.041-1.68 2.568-1.68 1.402 0 2.24-1.215 2.24-1.215S13.622 5.47 13.794 5.3c.173-.17 1.159-.523 1.159-.523s1.603-2.896 1.729-3.658l-4.46.183L.356 1.037z" transform="translate(323 7) translate(1002 26.143)"/> - <path fill="url(#ghn0xezfxn)" d="M.357 1.037L2.464.77 3.688.563s5.791.015 7.463.116c0 0 1.39-.562 1.768-.58.377-.017 1.108.671 1.108.671l2.655.348s-1.217.421-2.144.403l.89.3c-.168.128-.359.224-.562.283-.354.106-3.012.185-4.271.17-1.26-.013-1.814-.453-1.814-.453l.58-.219-.682-.081s-2.063.361-2.85.386c-.605-.002-1.208-.059-1.802-.17l-.075-.268s-2.14-.117-3.595-.432z" transform="translate(323 7) translate(1002 26.143)"/> - <path fill="url(#nkk1vcp9xo)" d="M3.453 1.437v1.146L2.29 2.78s-.051.023-.18.347c-.128.325-.72 1.141-.72 1.141l-.539.06.432.966s.622.005.87.16c.248.153.796.612.796.612l.329.902s.329-1.668.347-1.93c.019-.263.342-1.39.292-1.587-.05-.197.02-.937.02-.937l.09-.777s1.686.232 1.862.295c.176.062.252.768.252.768l.58 1.324-.65 1.936.25 1.64.08 1.234.915 2.61.724-.55s.593-4.286.636-4.482c.042-.196-.161-.658-.161-.658l.288-2.013-.028-2.019.58-.219-.682-.081s-2.138.32-2.492.353c-.355.034-2.157-.3-2.157-.3l1.08-.264-1.651.126z" transform="translate(323 7) translate(1002 26.143)"/> - <path fill="url(#iatia160pp)" d="M12.697 2.277l1.445.241-.232.552-.625 1.505-.756.719-.846.313-.658.464h.57l-.043.611-.307 1.457-.015 1.043.412-.284s1.515-2.575 2.146-3.6c0 0 1.051-.324 1.159-.523.107-.2 1.594-2.974 1.73-3.658l-2.14.404.892.3c-.335.15-.685.267-1.043.347-.42.064-1.689.11-1.689.11z" transform="translate(323 7) translate(1002 26.143)"/> - <path fill="#5E48B5" d="M11.15.674l-.462.232s.34.076.537.132c.197.055 1.282-.033 1.475-.088.192-.056.905-.274.905-.274l.039-.223s-.533-.476-.695-.45c-.163.025-1.517.533-1.798.671z" transform="translate(323 7) translate(1002 26.143)"/> - <path fill="#10001D" d="M14.093.78l-.452.256-.707.017h-1.506s1.158-.1 1.333-.137c.175-.037.843-.242.843-.242l.038-.223.451.329z" transform="translate(323 7) translate(1002 26.143)"/> - <path fill="#000" d="M3.453 2.583L3.939 3.725 4.024 1.574 5.105 1.31 3.453 1.437zM14.538 1.52l.89.3-.384 2.79s1.195-2.282 1.64-3.493l-2.146.404zM6.181 1.874L7.316 2.977 8.018 3.725 8.16 4.365 8.79 3.964 8.78 1.821 9.358 1.602 8.676 1.521z" transform="translate(323 7) translate(1002 26.143)"/> - </g> - <g opacity=".267"> - <path fill="url(#b93vg68qvq)" d="M.691 1.938s-.38 1.83-.34 2.267c.04.436.905 1.407.905 1.407s.906 1.901 1.192 2.831c.286.93 1.266 2.113 1.266 2.113s3.367 3.425 4.38 3.382c.465-.02 2.333-1.873 2.935-1.873 1.602 0 2.56-1.354 2.56-1.354s2.262-3.83 2.459-4.02c.197-.19 1.324-.584 1.324-.584s1.832-3.229 1.976-4.078l-5.098.204L.691 1.938z" transform="translate(323 7) matrix(-1 0 0 1 1157 19)"/> - <path fill="url(#qfqmiu1lhr)" d="M.348 1.8l2.323-.244 1.35-.192s6.386.014 8.229.107c0 0 1.532-.516 1.948-.532.417-.016 1.223.616 1.223.616l2.927.319s-1.342.387-2.364.37l.982.276c-.186.117-.396.205-.62.26-.39.097-3.321.17-4.71.157-1.388-.013-2-.417-2-.417l.64-.201-.752-.075s-2.274.332-3.143.355c-.666-.002-1.33-.054-1.986-.156l-.083-.247S1.953 2.09.348 1.8z" transform="translate(323 7) matrix(-1 0 0 1 1157 19)"/> - <path fill="url(#3ph8n0fdus)" d="M3.407 2.086V3.43l-1.367.23s-.06.028-.211.408C1.677 4.448.98 5.406.98 5.406l-.633.07.508 1.132s.732.007 1.023.188c.292.18.936.719.936.719l.387 1.058s.387-1.956.408-2.265c.022-.308.402-1.63.344-1.86-.059-.232.023-1.1.023-1.1l.106-.91s1.982.272 2.19.345c.206.074.296.9.296.9l.681 1.554-.763 2.27.295 1.924.092 1.447 1.076 3.06.852-.645s.697-5.026.748-5.255c.05-.23-.19-.772-.19-.772l.34-2.36-.033-2.369.68-.256-.8-.095s-2.515.374-2.932.414c-.416.04-2.536-.353-2.536-.353l1.271-.309-1.943.148z" transform="translate(323 7) matrix(-1 0 0 1 1157 19)"/> - <path fill="url(#z844b6m03t)" d="M14.124 3.233l1.533.27-.246.615-.664 1.68-.802.801-.899.35-.698.518h.606l-.047.682-.325 1.626-.016 1.163.437-.316s1.609-2.874 2.28-4.018c0 0 1.115-.361 1.229-.584.114-.222 1.692-3.318 1.836-4.082l-2.27.451.945.335c-.355.168-.726.298-1.106.388-.447.071-1.793.121-1.793.121z" transform="translate(323 7) matrix(-1 0 0 1 1157 19)"/> - <path fill="#09080F" d="M12.818 1.577l-.47.22s.346.072.545.125c.2.052 1.302-.031 1.497-.084.195-.053.92-.26.92-.26l.038-.211s-.54-.452-.705-.428c-.165.024-1.54.507-1.825.638z" transform="translate(323 7) matrix(-1 0 0 1 1157 19)"/> - <path fill="#10001D" d="M15.348 1.485l-.509.425-.796.028h-1.695s1.304-.165 1.5-.227c.197-.061.95-.401.95-.401l.043-.372.507.547z" transform="translate(323 7) matrix(-1 0 0 1 1157 19)"/> - <path fill="#000" d="M3.348 3.52L3.937 4.938 4.039 2.266 5.348 1.938 3.348 2.097zM16.348 2.401l.83.344-.358 3.193s1.114-2.612 1.528-4l-2 .463zM6.348 3.311L7.777 4.474 8.661 5.264 8.84 5.938 9.633 5.516 9.62 3.255 10.348 3.024 9.489 2.938z" transform="translate(323 7) matrix(-1 0 0 1 1157 19)"/> - </g> - <g> - <path fill="url(#grslp9mosu)" d="M.546 1.588S.037 4.103.09 4.702c.053.6 1.214 1.934 1.214 1.934s1.214 2.612 1.597 3.89 1.698 2.903 1.698 2.903 4.512 4.706 5.872 4.647c.623-.026 3.126-2.573 3.934-2.573 2.147 0 3.431-1.861 3.431-1.861s3.031-5.263 3.296-5.524c.264-.26 1.774-.802 1.774-.802s2.456-4.436 2.65-5.604l-6.834.28L.546 1.589z" transform="translate(323 7) matrix(-1 0 0 1 1144.348 24.062)"/> - <path fill="url(#oi7nzej9iv)" d="M.546 1.588l3.228-.406L5.65.862s8.872.023 11.432.178c0 0 2.13-.86 2.708-.887.579-.027 1.698 1.027 1.698 1.027l4.067.532s-1.865.646-3.284.618l1.364.46c-.258.196-.55.342-.862.432-.541.164-4.614.284-6.542.263-1.93-.021-2.78-.696-2.78-.696l.888-.335-1.043-.124s-3.16.553-4.367.59c-.926-.002-1.85-.088-2.76-.258l-.115-.412S2.777 2.07.546 1.588z" transform="translate(323 7) matrix(-1 0 0 1 1144.348 24.062)"/> - <path fill="url(#f8fiecmc3w)" d="M5.29 2.202v1.755l-1.782.302s-.078.035-.275.532-1.104 1.748-1.104 1.748l-.825.09.662 1.48s.953.01 1.332.245c.38.236 1.22.939 1.22.939l.503 1.382s.504-2.555.533-2.958c.028-.403.523-2.13.447-2.43-.076-.303.03-1.436.03-1.436l.138-1.19s2.582.356 2.852.451c.27.096.387 1.177.387 1.177l.887 2.028-.994 2.967.384 2.513.12 1.89 1.402 3.997 1.11-.843s.908-6.565.973-6.865c.066-.3-.246-1.008-.246-1.008l.441-3.084-.042-3.093.887-.335-1.043-.124s-3.276.49-3.819.54c-.543.052-3.304-.46-3.304-.46l1.656-.403-2.53.193z" transform="translate(323 7) matrix(-1 0 0 1 1144.348 24.062)"/> - <path fill="url(#alvgpbp57x)" d="M19.451 3.489l2.213.369-.355.844-.958 2.307-1.157 1.1-1.297.481-1.008.71h.875l-.068.937-.47 2.232-.023 1.597.632-.435s2.32-3.944 3.288-5.515c0 0 1.61-.497 1.774-.802.165-.305 2.442-4.555 2.65-5.603l-3.276.619 1.364.46c-.513.23-1.048.409-1.597.532-.644.097-2.587.167-2.587.167z" transform="translate(323 7) matrix(-1 0 0 1 1144.348 24.062)"/> - <path fill="#09080F" d="M17.082 1.033l-.71.355s.522.117.824.202c.302.085 1.964-.05 2.259-.135.294-.085 1.387-.419 1.387-.419l.059-.342s-.816-.73-1.065-.69c-.248.039-2.323.818-2.754 1.029z" transform="translate(323 7) matrix(-1 0 0 1 1144.348 24.062)"/> - <path fill="#10001D" d="M21.59 1.194l-.693.392-1.084.027h-2.307s1.775-.153 2.043-.21c.268-.056 1.292-.37 1.292-.37l.058-.343.69.504z" transform="translate(323 7) matrix(-1 0 0 1 1144.348 24.062)"/> - <path fill="#000" d="M5.289 3.957L6.035 5.707 6.164 2.411 7.82 2.007 5.289 2.202zM22.27 2.33l1.365.46-.589 4.272s1.831-3.495 2.511-5.351l-3.286.619zM9.468 2.871L11.207 4.56 12.282 5.707 12.501 6.686 13.466 6.072 13.45 2.789 14.335 2.454 13.29 2.33z" transform="translate(323 7) matrix(-1 0 0 1 1144.348 24.062)"/> - </g> - <g> - <path fill="url(#z3rt2dgojy)" d="M1.177 3.42S.08 8.837.194 10.129c.115 1.292 2.614 4.166 2.614 4.166s2.615 5.626 3.44 8.377c.826 2.752 3.658 6.253 3.658 6.253s9.719 10.136 12.646 10.01c1.342-.058 6.734-5.542 8.473-5.542 4.625 0 7.392-4.01 7.392-4.01s6.528-11.335 7.097-11.897c.57-.562 3.822-1.727 3.822-1.727s5.29-9.555 5.706-12.07l-14.718.604-39.147-.871z" transform="translate(323 7) matrix(-1 0 0 1 56.348 45.062)"/> - <path fill="url(#3zewkh3hjz)" d="M1.177 3.42l6.952-.875 4.04-.688s19.109.05 24.624.383c0 0 4.586-1.854 5.832-1.911 1.246-.058 3.657 2.213 3.657 2.213l8.76 1.146s-4.017 1.391-7.074 1.33l2.939.99c-.557.423-1.186.739-1.858.933-1.165.351-9.936.611-14.09.565-4.155-.046-5.986-1.498-5.986-1.498l1.911-.722-2.247-.268S21.83 6.211 19.23 6.291c-1.994-.005-3.983-.192-5.943-.558l-.248-.887S5.98 4.46 1.177 3.421z" transform="translate(323 7) matrix(-1 0 0 1 56.348 45.062)"/> - <path fill="url(#at7ruyopaA)" d="M11.392 4.743v3.78l-3.837.65s-.168.076-.592 1.146c-.424 1.07-2.377 3.765-2.377 3.765l-1.778.195 1.426 3.187s2.052.02 2.87.527c.818.509 2.626 2.022 2.626 2.022l1.085 2.977s1.086-5.503 1.147-6.37c.061-.868 1.127-4.587.963-5.237-.164-.65.065-3.092.065-3.092l.298-2.56s5.56.764 6.142.97c.58.207.833 2.534.833 2.534l1.911 4.369-2.14 6.39.825 5.412.26 4.07 3.02 8.61 2.388-1.815s1.957-14.14 2.098-14.786c.142-.646-.531-2.171-.531-2.171l.952-6.643-.092-6.661 1.91-.723-2.246-.267s-7.056 1.055-8.225 1.166c-1.17.11-7.116-.994-7.116-.994l3.565-.868-5.45.417z" transform="translate(323 7) matrix(-1 0 0 1 56.348 45.062)"/> - <path fill="url(#1y097csx7B)" d="M41.895 7.514l4.766.795-.765 1.819-2.063 4.968-2.492 2.37-2.794 1.036-2.17 1.528h1.883l-.145 2.018-1.013 4.808-.05 3.44 1.361-.936s5-8.496 7.082-11.879c0 0 3.466-1.07 3.822-1.727.355-.658 5.259-9.811 5.706-12.07l-7.055 1.334 2.939.99c-1.105.497-2.257.882-3.44 1.147-1.387.21-5.572.359-5.572.359z" transform="translate(323 7) matrix(-1 0 0 1 56.348 45.062)"/> - <path fill="#09080F" d="M36.793 2.224l-1.53.765s1.125.252 1.774.435c.65.184 4.231-.107 4.865-.29.635-.184 2.99-.902 2.99-.902l.125-.738S43.26-.076 42.724.008c-.535.084-5.003 1.762-5.931 2.216z" transform="translate(323 7) matrix(-1 0 0 1 56.348 45.062)"/> - <path fill="#10001D" d="M46.5 2.572l-1.49.845-2.335.057h-4.969s3.822-.329 4.399-.45c.577-.123 2.782-.8 2.782-.8l.126-.737L46.5 2.572z" transform="translate(323 7) matrix(-1 0 0 1 56.348 45.062)"/> - <path fill="#000" d="M11.392 8.523L12.998 12.291 13.277 5.194 16.842 4.323 11.392 4.743zM47.968 5.018l2.939.99-1.269 9.203s3.944-7.529 5.408-11.527l-7.078 1.334zM20.393 6.184L24.138 9.822 26.454 12.291 26.925 14.401 29.004 13.078 28.969 6.008 30.876 5.286 28.625 5.018z" transform="translate(323 7) matrix(-1 0 0 1 56.348 45.062)"/> - </g> - <g fill-rule="nonzero"> - <path fill="#05FF8F" d="M39.271.98L21.097 34.888l-4.553-.166L.21 0l4.553.167 6.903.166 6.357.148 1.606 3.413L21.448.5l4.553.166 6.367.148 6.903.167z" filter="url(#rx0t6c148C)" transform="translate(323 7) matrix(-1 0 0 1 1092.683 0) matrix(-1 0 0 1 39.482 0)"/> - <g> - <path fill="#1F3A2E" d="M21.589 8.504L17.046 8.329 21.238 0.5 25.791 0.666z" transform="translate(323 7) matrix(-1 0 0 1 1092.683 0) translate(.24)"/> - <path fill="#385F86" d="M32.157 0.814L21.256 21.164 11.456 0.333 17.814 0.481 21.589 8.504 25.791 0.666z" transform="translate(323 7) matrix(-1 0 0 1 1092.683 0) translate(.24)"/> - <path fill="#1F3A2E" d="M20.886 34.887L16.333 34.721 0 0 4.553 0.167z" transform="translate(323 7) matrix(-1 0 0 1 1092.683 0) translate(.24)"/> - <path fill="#53FFB3" d="M39.061 0.981L20.886 34.887 4.553 0.167 11.456 0.333 21.256 21.164 32.157 0.814z" transform="translate(323 7) matrix(-1 0 0 1 1092.683 0) translate(.24)"/> - </g> - </g> - </g> - </g> - </g> - </g> -</svg> diff --git a/docs/.vuepress/public/images/vueschool/vs-iso.svg b/docs/.vuepress/public/images/vueschool/vs-iso.svg deleted file mode 100644 index a95d92607..000000000 --- a/docs/.vuepress/public/images/vueschool/vs-iso.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="26" height="30" viewBox="0 0 26 30" xmlns="http://www.w3.org/2000/svg"> - <g fill-rule="nonzero" fill="none"> - <path d="M7.546 18.111c-1.96-9.69-.103-16.049-.103-16.049s-.497 3.871 3.408 10.11c-.05 7.735 1.473 11.77 1.473 11.77l.313-.23-.313.272s-2.316-1.89-4.778-5.873zM16.776 16.74c.937.943 1.81 1.596 2.442 1.907a1.405 1.405 0 0 1-.01-.006s.708.255.834.085c.864-.915 1.075-2.621.5-5.827-3.297-1.882-3.713-4.816-3.713-4.816s-.593 4.073-.053 8.656z" fill="#364FDE"/> - <path d="M7.443 2.062S4.73 11.348 9.32 24.577a.954.954 0 0 1-.334 1.06l-4.84 3.393c-.458.339-1.126.127-1.334-.424-1.293-3.52-4.84-15.18-1.252-27.943.167-.509.71-.806 1.21-.594l4.673 1.993z" fill="#56D8FF"/> - <path d="m16.704 20.719-4.38 3.222s-2.337-6.19-1.127-17.936c.084-.678.793-1.017 1.377-.678l4.255 2.756s-.834 5.724.376 11.237c.125.55-.084 1.102-.5 1.399zM24.797 13.553l-4.046-2.671c-.25-.17-.626.084-.543.381.96 4.283.835 6.403-.167 7.463-.125.17-.834-.085-.834-.085.668.34.834.17.834.17.668-.509 3.171-2.332 4.756-3.435.626-.466.626-1.399 0-1.823z" fill="#667DFF"/> - </g> -</svg> diff --git a/docs/.vuepress/public/images/vueschool/vs-logo.svg b/docs/.vuepress/public/images/vueschool/vs-logo.svg deleted file mode 100644 index b44c00458..000000000 --- a/docs/.vuepress/public/images/vueschool/vs-logo.svg +++ /dev/null @@ -1,8 +0,0 @@ -<svg width="128" height="41" viewBox="0 0 128 41" xmlns="http://www.w3.org/2000/svg"> - <g fill-rule="nonzero" fill="none"> - <path d="M10.448 25.077c-2.714-13.417-.143-22.222-.143-22.222s-.688 5.36 4.72 13.999c-.07 10.71 2.039 16.296 2.039 16.296l.433-.32-.433.378s-3.206-2.617-6.616-8.13zM23.228 23.177c1.297 1.307 2.507 2.212 3.382 2.642a1.952 1.952 0 0 1-.015-.008s.981.352 1.155.117c1.197-1.267 1.49-3.629.692-8.068-4.564-2.606-5.14-6.668-5.14-6.668s-.822 5.64-.074 11.985z" fill="#364FDE"/> - <path d="M10.305 2.855s-3.754 12.858 2.6 31.175c.173.529 0 1.116-.463 1.468l-6.7 4.697c-.636.47-1.56.176-1.849-.587-1.79-4.873-6.7-21.018-1.732-38.69.23-.705.981-1.116 1.675-.822l6.47 2.76z" fill="#56D8FF"/> - <path d="m23.129 28.688-6.065 4.462s-3.235-8.572-1.56-24.835c.115-.94 1.097-1.409 1.906-.94l5.892 3.817s-1.155 7.926.52 15.558c.173.763-.116 1.527-.693 1.938zM34.335 18.766l-5.603-3.7c-.347-.234-.867.118-.751.53 1.328 5.929 1.155 8.865-.231 10.332-.174.235-1.156-.117-1.156-.117.925.47 1.156.235 1.156.235.924-.705 4.39-3.23 6.585-4.756.866-.646.866-1.937 0-2.524z" fill="#667DFF"/> - <path d="m57.499 17.684 4.43-11.94h-2.46l-3.115 8.875-3.116-8.876h-2.543l4.412 11.941H57.5zm8.118.22c.876 0 1.836-.338 2.29-1.112 0 .336.034.724.068.892h2.139a13.63 13.63 0 0 1-.085-1.499V9.398h-2.24v4.817c0 .96-.572 1.633-1.566 1.633-1.044 0-1.516-.74-1.516-1.667V9.398h-2.24v5.238c0 1.802 1.146 3.267 3.15 3.267zm10.425.033c2.038 0 3.352-1.196 3.773-2.628l-1.87-.555c-.27.74-.842 1.263-1.886 1.263-1.112 0-2.038-.792-2.088-1.886h5.928c0-.034.034-.371.034-.691 0-2.661-1.533-4.295-4.093-4.295-2.122 0-4.076 1.718-4.076 4.362 0 2.796 2.004 4.43 4.278 4.43zm1.684-5.34h-3.705c.05-.757.69-1.633 1.853-1.633 1.28 0 1.819.809 1.852 1.634zM55.781 35.622c2.779 0 4.312-1.853 4.312-3.688 0-1.685-1.162-3.1-3.335-3.52l-1.667-.32c-.876-.169-1.297-.69-1.297-1.348 0-.791.74-1.516 1.87-1.516 1.515 0 2.054 1.028 2.172 1.685l2.088-.64c-.27-1.348-1.38-3.1-4.278-3.1-2.257 0-4.16 1.618-4.16 3.74 0 1.802 1.23 3.031 3.133 3.419l1.667.336c.927.186 1.449.725 1.449 1.415 0 .842-.69 1.465-1.937 1.465-1.684 0-2.51-1.06-2.61-2.24l-2.156.573c.185 1.701 1.583 3.74 4.75 3.74zm9.785 0c2.207 0 3.503-1.415 3.874-2.796l-1.97-.657c-.186.64-.758 1.398-1.904 1.398-1.145 0-2.122-.842-2.122-2.34 0-1.5.96-2.325 2.105-2.325 1.112 0 1.634.707 1.836 1.398l2.004-.674c-.353-1.398-1.633-2.796-3.89-2.796-2.408 0-4.295 1.836-4.295 4.396 0 2.543 1.92 4.396 4.362 4.396zm7.765-.253v-4.867c.05-.91.606-1.617 1.549-1.617 1.078 0 1.533.724 1.533 1.65v4.834h2.24v-5.22c0-1.82-.977-3.285-3.082-3.285-.792 0-1.702.27-2.24.91v-4.598h-2.24v12.193h2.24zm11.317.253c2.476 0 4.346-1.853 4.346-4.396 0-2.56-1.87-4.396-4.346-4.396-2.475 0-4.345 1.836-4.345 4.396 0 2.543 1.87 4.396 4.345 4.396zm0-2.038c-1.094 0-2.105-.808-2.105-2.358 0-1.566 1.01-2.358 2.105-2.358s2.106.792 2.106 2.358c0 1.567-1.01 2.358-2.106 2.358zm9.836 2.038c2.476 0 4.345-1.853 4.345-4.396 0-2.56-1.869-4.396-4.345-4.396s-4.345 1.836-4.345 4.396c0 2.543 1.87 4.396 4.345 4.396zm0-2.038c-1.095 0-2.105-.808-2.105-2.358 0-1.566 1.01-2.358 2.105-2.358s2.105.792 2.105 2.358c0 1.567-1.01 2.358-2.105 2.358zm8.354 1.785V23.175h-2.24v12.193h2.24zm3.705.118c.86 0 1.55-.69 1.55-1.532a1.542 1.542 0 0 0-3.082 0c0 .842.69 1.532 1.532 1.532zm9.095-9.751c.775 0 1.38-.623 1.38-1.364a1.38 1.38 0 0 0-1.38-1.398 1.39 1.39 0 0 0-1.381 1.398c0 .74.623 1.364 1.38 1.364zm1.128 9.633v-8.286h-2.24v8.286h2.24zm6.114.253c2.476 0 4.345-1.853 4.345-4.396 0-2.56-1.87-4.396-4.345-4.396-2.476 0-4.345 1.836-4.345 4.396 0 2.543 1.87 4.396 4.345 4.396zm0-2.038c-1.095 0-2.105-.808-2.105-2.358 0-1.566 1.01-2.358 2.105-2.358s2.105.792 2.105 2.358c0 1.567-1.01 2.358-2.105 2.358z" fill="#FFF"/> - </g> -</svg> diff --git a/docs/.vuepress/public/logo.png b/docs/.vuepress/public/logo.png deleted file mode 100644 index 60e17006a..000000000 Binary files a/docs/.vuepress/public/logo.png and /dev/null differ diff --git a/docs/.vuepress/public/sponsors/fincliplogo_black_svg.svg b/docs/.vuepress/public/sponsors/fincliplogo_black_svg.svg deleted file mode 100644 index 848f93d56..000000000 --- a/docs/.vuepress/public/sponsors/fincliplogo_black_svg.svg +++ /dev/null @@ -1 +0,0 @@ -<svg height="377" viewBox="0 0 705 377" width="705" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a"><stop offset="0" stop-color="#43b7e9"/><stop offset="1" stop-color="#4e6eb5"/></linearGradient><linearGradient id="b" x1="-1.351258%" x2="56.638056%" xlink:href="#a" y1="-14.847497%" y2="72.60137%"/><linearGradient id="c" x1="29.819985%" x2="87.748904%" xlink:href="#a" y1="6.941917%" y2="94.345232%"/><linearGradient id="d" x1="40.600445%" x2="82.124613%" xlink:href="#a" y1="26.937293%" y2="75.459449%"/><g fill="none" fill-rule="evenodd"><text fill="#111" font-family="PingFangSC-Regular, PingFang SC" font-size="25" letter-spacing="4.92557187"><tspan x="66.481781" y="315">五行代码,让你的APP拥有小程序运行能力</tspan></text><g transform="translate(29 47)"><g fill="#2d3f51"><path d="m375 81.8c14 0 24.2 11.1 24.2 24.7v46.9c0 1.6-1.3 3-3 3h-9.4c-1.6 0-3-1.3-3-3v-44.4c0-6.6-5.1-11.9-13-11.9s-13.9 5.4-13.9 11.9v44.3c0 1.6-1.3 2.9-2.9 3h-9.4c-1.7 0-3-1.1-3-2.8v-65.9c0-1.4 1-2.6 2.3-2.9l8.9-2.1c1.9-.4 3.6 1 3.6 2.9v4.2c4.6-4.9 11.2-7.9 18.6-7.9z"/><path d="m304.9 60.6-3.3 9.4c-.5 1.1-1.5 1.8-2.7 1.8h-40c-1.6 0-3 1.3-3 3v17.1c0 1.7 1.4 3 3 3l35.1-.3c1.7 0 3 1.3 3 3v9.8c0 1.6-1.3 3-3 3h-35.1c-1.6 0-3 1.3-3 3v40.2c0 1.6-1.3 3-3 3h-9.4c-1.6 0-3-1.3-3-3v-94c0-1.6 1.3-3 3-3h58.7c2.1-.2 3.5 2 2.7 4z"/><path d="m325.6 86.3v67c0 1.7-1.4 3-3 3l-9.4-.2c-1.6 0-2.9-1.4-2.9-3v-66.8c0-1.6 1.3-3 3-3h9.4c1.6 0 2.9 1.4 2.9 3z"/><path d="m326.9 66.5s-7.5 7.5-7.5 7.5c-.8.8-2.1.8-2.9 0l-7.4-7.4c-.8-.8-.8-2.1 0-2.9l7.4-7.4c.8-.8 2.1-.8 2.9 0l7.4 7.4s.1.1.1.1c.6.8.6 1.9 0 2.7z"/><path d="m553 86.3v67c0 1.7-1.4 3-3 3l-9.4-.2c-1.6 0-2.9-1.4-2.9-3v-66.8c0-1.6 1.3-3 3-3h9.4c1.5 0 2.9 1.4 2.9 3z"/></g><path d="m554.2 66.5s-7.5 7.5-7.5 7.5c-.8.8-2.1.8-2.9 0l-7.4-7.4c-.8-.8-.8-2.1 0-2.9l7.4-7.4c.8-.8 2.1-.8 2.9 0l7.4 7.4s.1.1.1.1c.7.8.7 1.9 0 2.7z" fill="#4e6eb5"/><path d="m493.3 135.4c1 1.1 1.1 2.8.1 3.9-4.2 4.9-9.3 9-15 11.9-7 3.6-14.5 5.4-22.4 5.4-13.2 0-25.6-5.2-35-14.7-9.3-9.5-14.5-22.1-14.5-35.5s5.1-26 14.5-35.5c9.3-9.5 21.8-14.7 35-14.7 7.8 0 15.2 1.8 22.1 5.3 5.6 2.8 10.7 6.8 14.9 11.6 1 1.1.9 2.8-.1 3.9l-7.9 8.2c-1.2 1.2-3.1 1.1-4.1-.2-6.1-7.9-15.2-12.6-25.1-12.6-17.8 0-33 15.3-33 34.1s15.2 34.1 33 34.1c5.7 0 11.3-1.6 16.2-4.5 3.6-2.2 6.8-5.1 9.3-8.5 1-1.4 3-1.5 4.1-.3z" fill="#2d3f51" fill-rule="nonzero"/><path d="m526.6 141h-4.7c-3 0-5.5-2.5-5.5-5.5v-76.1c0-1.6-1.3-3-3-3h-9.4c-1.6 0-3 1.3-3 3v76.2c0 11.5 9.4 20.8 20.8 20.8h4.6c.7 0 1.2-.5 1.2-1.2v-13.1c0-.6-.4-1.1-1-1.1z" fill="#2d3f51" fill-rule="nonzero"/><path d="m604.8 83.4c-8.5.1-16.1 3.2-21.4 9.3v-4.9c0-2.4-2-4.4-4.4-4.4h-6.5c-2.4 0-4.4 2-4.4 4.4v91.7c0 2.4 2 4.4 4.4 4.4h6.5c2.4 0 4.4-2 4.4-4.4v-39c4.4 5 10.9 7.9 19.8 8.1 18.2.4 30.4-14.7 30.500596-33 .099404-18.9-12.400596-32.4-28.900596-32.2zm-4.8 50.6c-9.7 0-17.6-8.1-17.6-18 0-10 7.9-18 17.6-18s17.6 8.1 17.6 18c0 10-7.8 18-17.6 18z" fill="#2d3f51"/><path d="m161.1 47.7 41.2 41.2c.4.4.8.8 1.1 1.2 7.4 8.5 7.4 21.3 0 29.8-.4.4-.7.8-1.1 1.2l-41.2 41.2c-.8.8-2.2.8-3 0l-12-12c-.8-.8-.8-2.2 0-3l35.7-35.7c3.7-3.7 3.7-9.7 0-13.4l-35.7-35.7c-.8-.8-.8-2.2 0-3l12-12c.8-.6 2.2-.6 3 .2z" fill="url(#b)"/><path d="m109.6 47.7 12 12c.8.8.8 2.2 0 3l-35.7 35.6c-3.7 3.7-3.7 9.7 0 13.4l35.7 35.7c.8.8.8 2.1 0 3l-12 12c-.8.8-2.2.8-3 0l-41.2-41.2c-.4-.4-.8-.8-1.1-1.2-7.4-8.5-7.4-21.3 0-29.8.4-.4.7-.8 1.1-1.2l41.2-41.2c.9-.9 2.2-.9 3-.1z" fill="url(#c)"/><path d="m120.7 7.3 26.5 26.5c.8.8.8 2.2 0 3l-12 12c-.8.8-2.2.8-3 0l-21-21c-3.7-3.7-9.7-3.7-13.4 0l-70.4 70.5c-3.7 3.7-3.7 9.7 0 13.4l70.5 70.5c3.7 3.7 9.7 3.7 13.4 0l21-21c.8-.8 2.2-.8 3 0l12 12c.8.8.8 2.2 0 3l-26.5 26.5c-8.9 8.9-23.3 8.9-32.2 0l-81.6-81.6c-8.9-8.9-8.9-23.3 0-32.2l81.5-81.6c8.9-8.9 23.3-8.9 32.2 0z" fill="url(#d)"/></g></g></svg> \ No newline at end of file diff --git a/docs/.vuepress/public/sponsors/fincliplogo_white_svg.svg b/docs/.vuepress/public/sponsors/fincliplogo_white_svg.svg deleted file mode 100644 index 3254e5384..000000000 --- a/docs/.vuepress/public/sponsors/fincliplogo_white_svg.svg +++ /dev/null @@ -1 +0,0 @@ -<svg height="377" viewBox="0 0 705 377" width="705" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><filter id="a"><feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"/></filter><linearGradient id="b"><stop offset="0" stop-color="#43b7e9"/><stop offset="1" stop-color="#4e6eb5"/></linearGradient><linearGradient id="c" x1="-1.318836%" x2="56.633865%" xlink:href="#b" y1="-14.847497%" y2="72.60137%"/><linearGradient id="d" x1="29.832726%" x2="87.72507%" xlink:href="#b" y1="6.941917%" y2="94.345232%"/><linearGradient id="e" x1="40.606379%" x2="82.10433%" xlink:href="#b" y1="26.937293%" y2="75.459449%"/><g fill="none" fill-rule="evenodd"><g filter="url(#a)"><g transform="translate(55 60)"><g fill="#2d3f51"><path d="m352.3125 77c13.125 0 22.6875 10.4155496 22.6875 23.176944v44.008043c0 1.50134-1.21875 2.815013-2.8125 2.815013h-8.8125c-1.5 0-2.8125-1.219839-2.8125-2.815013v-41.662199c0-6.1930293-4.78125-11.1662196-12.1875-11.1662196s-13.03125 5.0670241-13.03125 11.1662196v41.568365c0 1.50134-1.21875 2.721179-2.71875 2.815013h-8.8125c-1.59375 0-2.8125-1.032171-2.8125-2.627346v-61.8364608c0-1.3136729.9375-2.4396782 2.15625-2.7211796l8.34375-1.9705094c1.78125-.3753351 3.375.9383378 3.375 2.7211797v3.9410187c4.3125-4.5978552 10.5-7.4128686 17.4375-7.4128686z"/><path d="m286.784651 56.7714543-3.114742 8.8348784c-.47193 1.0338688-1.415791 1.6917853-2.548424 1.6917853h-37.754442c-1.510178 0-2.831583 1.2218448-2.831583 2.819642v16.0719597c0 1.5977972 1.321405 2.8196421 2.831583 2.8196421l33.129523-.2819642c1.604563 0 2.831583 1.2218449 2.831583 2.819642v9.2108304c0 1.503809-1.22702 2.819642-2.831583 2.819642h-33.129523c-1.510178 0-2.831583 1.221845-2.831583 2.819642v37.783204c0 1.503809-1.227019 2.819642-2.831583 2.819642h-8.872294c-1.510178 0-2.831583-1.221845-2.831583-2.819642v-88.3487844c0-1.5038091 1.227019-2.8196421 2.831583-2.8196421h55.404643c1.982108-.1879761 3.303514 1.8797614 2.548425 3.7595228z"/><path d="m305 80.8356164v63.3287676c0 1.606849-1.281046 2.835616-2.745098 2.835616l-8.601307-.189041c-1.464053 0-2.653595-1.323288-2.653595-2.835617v-63.1397256c0-1.5123287 1.189542-2.8356164 2.745098-2.8356164h8.601307c1.464053 0 2.653595 1.3232877 2.653595 2.8356164z"/><path d="m306.594164 61.7142857s-6.763925 6.7460318-6.763925 6.7460318c-.721486.7195767-1.893899.7195767-2.615385 0l-6.67374-6.6560847c-.721485-.7195767-.721485-1.8888889 0-2.6084656l6.67374-6.6560847c.721486-.7195767 1.893899-.7195767 2.615385 0l6.67374 6.6560847s.090185.0899471.090185.0899471c.541115.7195767.541115 1.7089947 0 2.4285714z"/><path d="m518 80.8356164v63.3287676c0 1.606849-1.281046 2.835616-2.745098 2.835616l-8.601307-.189041c-1.464053 0-2.653595-1.323288-2.653595-2.835617v-63.1397256c0-1.5123287 1.189542-2.8356164 2.745098-2.8356164h8.601307c1.372549 0 2.653595 1.3232877 2.653595 2.8356164z"/></g><path d="m519.528402 61.7142857s-6.737121 6.7460318-6.737121 6.7460318c-.718626.7195767-1.886393.7195767-2.605019 0l-6.647292-6.6560847c-.718627-.7195767-.718627-1.8888889 0-2.6084656l6.647292-6.6560847c.718626-.7195767 1.886393-.7195767 2.605019 0l6.647292 6.6560847s.089829.0899471.089829.0899471c.628797.7195767.628797 1.7089947 0 2.4285714z" fill="#4e6eb5"/><path d="m463.249405 126.940239c.936053 1.040837 1.029659 2.649402.093606 3.690239-3.931423 4.636454-8.705294 8.515936-14.040796 11.25996-6.552372 3.406375-13.57277 5.109562-20.967589 5.109562-12.3559 0-23.962958-4.920319-32.761857-13.909363-8.705293-8.989043-13.572769-20.911354-13.572769-33.590637 0-12.6792829 4.773871-24.6015936 13.572769-33.5906375 8.705294-8.9890438 20.405957-13.9093625 32.761857-13.9093625 7.301214 0 14.228007 1.7031873 20.686773 5.0149402 5.241897 2.6494024 10.015768 6.434263 13.94719 10.9760957.936054 1.0408366.842448 2.6494023-.093605 3.690239l-7.394819 7.7589641c-1.123264 1.1354582-2.901764 1.0408367-3.837818-.189243-5.709923-7.4750996-14.228006-11.9223107-23.494931-11.9223107-16.661745 0-30.889751 14.4770916-30.889751 32.2659362 0 17.7888445 14.228006 32.2659365 30.889751 32.2659365 5.335502 0 10.577399-1.513944 15.164059-4.257968 3.369791-2.081674 6.365161-4.825698 8.705294-8.042829.936053-1.324701 2.808159-1.419323 3.837817-.283865z" fill="#2d3f51" fill-rule="nonzero"/><path d="m494.06015 132.524h-4.417293c-2.819549 0-5.169173-2.35-5.169173-5.17v-71.534c0-1.504-1.221804-2.82-2.819549-2.82h-8.834586c-1.50376 0-2.819549 1.222-2.819549 2.82v71.628c0 10.81 8.834586 19.552 19.548872 19.552h4.323308c.657895 0 1.12782-.47 1.12782-1.128v-12.314c0-.564-.37594-1.034-.93985-1.034z" fill="#2d3f51" fill-rule="nonzero"/><path d="m567.685349 78.002073c-8.033391.0945253-15.216188 3.0248096-20.225244 8.7908529v-4.6317397c0-2.2686072-1.89021-4.1591132-4.158462-4.1591132h-6.143182c-2.268251 0-4.158461 1.890506-4.158461 4.1591132v86.6797008c0 2.268607 1.89021 4.159113 4.158461 4.159113h6.143182c2.268252 0 4.158462-1.890506 4.158462-4.159113v-36.864867c4.158461 4.726265 10.301643 7.467498 18.713076 7.656549 17.200909.378101 28.731189-13.895219 28.826263-31.193349.093947-17.8652821-11.719864-30.6261976-27.314095-30.437147zm-4.536503 47.829802c-9.167518 0-16.633846-7.656549-16.633846-17.014554 0-9.4525301 7.466328-17.0145542 16.633846-17.0145542 9.167517 0 16.633846 7.6565494 16.633846 17.0145542 0 9.45253-7.371818 17.014554-16.633846 17.014554z" fill="#2d3f51"/><path d="m151.079426 44.7471429 38.63732 38.6495238c.37512.3752381.75024.7504762 1.031579 1.1257143 6.939713 7.9738095 6.939713 19.981429 0 27.955238-.375119.375238-.656459.750476-1.031579 1.125714l-38.63732 38.649524c-.750239.750476-2.063158.750476-2.813397 0l-11.253589-11.257143c-.750239-.750476-.750239-2.063809 0-2.814285l33.479426-33.49c3.469856-3.470953 3.469856-9.0995242 0-12.5704766l-33.479426-33.49c-.750239-.7504762-.750239-2.0638095 0-2.8142857l11.253589-11.2571429c.750239-.5628571 2.063158-.5628571 2.813397.1876191z" fill="url(#c)"/><path d="m102.782775 44.7471429 11.253589 11.2571428c.750239.7504762.750239 2.0638095 0 2.8142857l-33.4794262 33.3961905c-3.4698565 3.4709524-3.4698565 9.0995241 0 12.5704761l33.4794262 33.49c.750239.750476.750239 1.97 0 2.814286l-11.253589 11.257143c-.750239.750476-2.063158.750476-2.813397 0l-38.6373206-38.649524c-.3751196-.375238-.7502392-.750476-1.0315789-1.125714-6.9397129-7.97381-6.9397129-19.981429 0-27.9552385.3751196-.3752381.6564593-.7504762 1.0315789-1.1257143l38.6373206-38.6495238c.844019-.8442857 2.063158-.8442857 2.813397-.0938095z" fill="url(#d)"/><path d="m113.192344 6.84809524 24.851675 24.85952376c.750239.7504762.750239 2.0638096 0 2.8142858l-11.253588 11.2571428c-.75024.7504762-2.063158.7504762-2.813398 0l-19.693779-19.7c-3.469857-3.4709524-9.0966511-3.4709524-12.5665076 0l-66.0210526 66.1357143c-3.4698565 3.4709524-3.4698565 9.0995241 0 12.5704761l66.1148325 66.135714c3.4698565 3.470953 9.0966507 3.470953 12.5665067 0l19.69378-19.7c.75024-.750476 2.063158-.750476 2.813398 0l11.253588 11.257143c.750239.750476.750239 2.06381 0 2.814286l-24.851675 24.859524c-8.346411 8.349047-21.8507173 8.349047-30.1971288 0l-76.5244019-76.548572c-8.34641148-8.349047-8.34641148-21.8576187 0-30.2066663l76.430622-76.54857146c8.3464115-8.34904762 21.8507177-8.34904762 30.1971287 0z" fill="url(#e)"/></g></g><text fill="#fff" font-family="PingFangSC-Regular, PingFang SC" font-size="25" letter-spacing="4.92557187"><tspan x="66.481781" y="303">五行代码,让你的APP拥有小程序运行能力</tspan></text></g></svg> \ No newline at end of file diff --git a/docs/.vuepress/public/sponsors/passionate-people-dark.png b/docs/.vuepress/public/sponsors/passionate-people-dark.png deleted file mode 100644 index 028baf65b..000000000 Binary files a/docs/.vuepress/public/sponsors/passionate-people-dark.png and /dev/null differ diff --git a/docs/.vuepress/public/sponsors/passionate-people-light.png b/docs/.vuepress/public/sponsors/passionate-people-light.png deleted file mode 100644 index 61ac71af2..000000000 Binary files a/docs/.vuepress/public/sponsors/passionate-people-light.png and /dev/null differ diff --git a/docs/.vuepress/public/sponsors/vuejobs.png b/docs/.vuepress/public/sponsors/vuejobs.png deleted file mode 100644 index 50b7b7474..000000000 Binary files a/docs/.vuepress/public/sponsors/vuejobs.png and /dev/null differ diff --git a/docs/.vuepress/public/sponsors/vuetify-logo-dark-text.svg b/docs/.vuepress/public/sponsors/vuetify-logo-dark-text.svg deleted file mode 100644 index 6f4ff0708..000000000 --- a/docs/.vuepress/public/sponsors/vuetify-logo-dark-text.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="1370" height="424" viewBox="0 0 1370 424" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M199.723 205.477L119.488 16H199.723V205.477Z" fill="#1697F6"/> -<path d="M117.949 73.1896H28L199.723 408.15V261.099L117.949 73.1896Z" fill="#7BC6FF"/> -<path d="M199.723 16.075L199.723 205.477L279.955 16H199.723" fill="#7BC6FF"/> -<path d="M281.487 73.1896H371.436L199.723 408.15V261.099L281.487 73.1896Z" fill="#AEDDFF"/> -<path d="M511.361 277.646L572.299 101.719H603.061L523.959 315H499.057L420.102 101.719H450.717L511.361 277.646ZM721.273 299.326C710.727 311.729 695.248 317.93 674.838 317.93C657.943 317.93 645.053 313.047 636.166 303.281C627.377 293.418 622.934 278.867 622.836 259.629V156.504H649.936V258.896C649.936 282.92 659.701 294.932 679.232 294.932C699.936 294.932 713.705 287.217 720.541 271.787V156.504H747.641V315H721.859L721.273 299.326ZM854.721 317.93C833.236 317.93 815.756 310.898 802.279 296.836C788.803 282.676 782.064 263.779 782.064 240.146V235.166C782.064 219.443 785.043 205.43 791 193.125C797.055 180.723 805.453 171.055 816.195 164.121C827.035 157.09 838.754 153.574 851.352 153.574C871.957 153.574 887.973 160.361 899.398 173.936C910.824 187.51 916.537 206.943 916.537 232.236V243.516H809.164C809.555 259.141 814.096 271.787 822.787 281.455C831.576 291.025 842.709 295.811 856.186 295.811C865.756 295.811 873.861 293.857 880.502 289.951C887.143 286.045 892.953 280.869 897.934 274.424L914.486 287.314C901.205 307.725 881.283 317.93 854.721 317.93ZM851.352 175.84C840.414 175.84 831.234 179.844 823.812 187.852C816.391 195.762 811.801 206.895 810.043 221.25H889.438V219.199C888.656 205.43 884.945 194.785 878.305 187.266C871.664 179.648 862.68 175.84 851.352 175.84ZM984.799 118.125V156.504H1014.39V177.451H984.799V275.742C984.799 282.09 986.117 286.875 988.754 290.098C991.391 293.223 995.883 294.785 1002.23 294.785C1005.36 294.785 1009.65 294.199 1015.12 293.027V315C1007.99 316.953 1001.06 317.93 994.32 317.93C982.211 317.93 973.08 314.268 966.928 306.943C960.775 299.619 957.699 289.219 957.699 275.742V177.451H928.842V156.504H957.699V118.125H984.799ZM1075.62 315H1048.52V156.504H1075.62V315ZM1046.32 114.463C1046.32 110.068 1047.64 106.357 1050.28 103.33C1053.01 100.303 1057.02 98.7891 1062.29 98.7891C1067.56 98.7891 1071.57 100.303 1074.3 103.33C1077.04 106.357 1078.4 110.068 1078.4 114.463C1078.4 118.857 1077.04 122.52 1074.3 125.449C1071.57 128.379 1067.56 129.844 1062.29 129.844C1057.02 129.844 1053.01 128.379 1050.28 125.449C1047.64 122.52 1046.32 118.857 1046.32 114.463ZM1132.46 315V177.451H1107.41V156.504H1132.46V140.244C1132.46 123.252 1137 110.117 1146.08 100.84C1155.16 91.5625 1168 86.9238 1184.6 86.9238C1190.85 86.9238 1197.05 87.7539 1203.21 89.4141L1201.74 111.387C1197.15 110.508 1192.27 110.068 1187.09 110.068C1178.3 110.068 1171.52 112.656 1166.73 117.832C1161.95 122.91 1159.55 130.234 1159.55 139.805V156.504H1193.39V177.451H1159.55V315H1132.46ZM1275.28 275.303L1312.19 156.504H1341.2L1277.47 339.463C1267.61 365.83 1251.94 379.014 1230.45 379.014L1225.33 378.574L1215.22 376.67V354.697L1222.54 355.283C1231.72 355.283 1238.85 353.428 1243.93 349.717C1249.11 346.006 1253.35 339.219 1256.67 329.355L1262.68 313.242L1206.14 156.504H1235.73L1275.28 275.303Z" fill="white"/> -</svg> diff --git a/docs/.vuepress/public/sponsors/vuetify-logo-light-text.svg b/docs/.vuepress/public/sponsors/vuetify-logo-light-text.svg deleted file mode 100644 index 33f442df8..000000000 --- a/docs/.vuepress/public/sponsors/vuetify-logo-light-text.svg +++ /dev/null @@ -1,7 +0,0 @@ -<svg width="1370" height="424" viewBox="0 0 1370 424" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M199.723 205.485L119.488 16.0079H199.723V205.485Z" fill="#1697F6"/> -<path d="M117.949 73.1976H28L199.723 408.158V261.107L117.949 73.1976Z" fill="#7BC6FF"/> -<path d="M199.723 16L199.723 205.485L279.955 16.008H199.723" fill="#1867C0"/> -<path d="M281.487 73.1976H371.436L199.723 408.158V261.107L281.487 73.1976Z" fill="#AEDDFF"/> -<path d="M511.361 277.646L572.299 101.719H603.061L523.959 315H499.057L420.102 101.719H450.717L511.361 277.646ZM721.273 299.326C710.727 311.729 695.248 317.93 674.838 317.93C657.943 317.93 645.053 313.047 636.166 303.281C627.377 293.418 622.934 278.867 622.836 259.629V156.504H649.936V258.896C649.936 282.92 659.701 294.932 679.232 294.932C699.936 294.932 713.705 287.217 720.541 271.787V156.504H747.641V315H721.859L721.273 299.326ZM854.721 317.93C833.236 317.93 815.756 310.898 802.279 296.836C788.803 282.676 782.064 263.779 782.064 240.146V235.166C782.064 219.443 785.043 205.43 791 193.125C797.055 180.723 805.453 171.055 816.195 164.121C827.035 157.09 838.754 153.574 851.352 153.574C871.957 153.574 887.973 160.361 899.398 173.936C910.824 187.51 916.537 206.943 916.537 232.236V243.516H809.164C809.555 259.141 814.096 271.787 822.787 281.455C831.576 291.025 842.709 295.811 856.186 295.811C865.756 295.811 873.861 293.857 880.502 289.951C887.143 286.045 892.953 280.869 897.934 274.424L914.486 287.314C901.205 307.725 881.283 317.93 854.721 317.93ZM851.352 175.84C840.414 175.84 831.234 179.844 823.812 187.852C816.391 195.762 811.801 206.895 810.043 221.25H889.438V219.199C888.656 205.43 884.945 194.785 878.305 187.266C871.664 179.648 862.68 175.84 851.352 175.84ZM984.799 118.125V156.504H1014.39V177.451H984.799V275.742C984.799 282.09 986.117 286.875 988.754 290.098C991.391 293.223 995.883 294.785 1002.23 294.785C1005.36 294.785 1009.65 294.199 1015.12 293.027V315C1007.99 316.953 1001.06 317.93 994.32 317.93C982.211 317.93 973.08 314.268 966.928 306.943C960.775 299.619 957.699 289.219 957.699 275.742V177.451H928.842V156.504H957.699V118.125H984.799ZM1075.62 315H1048.52V156.504H1075.62V315ZM1046.32 114.463C1046.32 110.068 1047.64 106.357 1050.28 103.33C1053.01 100.303 1057.02 98.7891 1062.29 98.7891C1067.56 98.7891 1071.57 100.303 1074.3 103.33C1077.04 106.357 1078.4 110.068 1078.4 114.463C1078.4 118.857 1077.04 122.52 1074.3 125.449C1071.57 128.379 1067.56 129.844 1062.29 129.844C1057.02 129.844 1053.01 128.379 1050.28 125.449C1047.64 122.52 1046.32 118.857 1046.32 114.463ZM1132.46 315V177.451H1107.41V156.504H1132.46V140.244C1132.46 123.252 1137 110.117 1146.08 100.84C1155.16 91.5625 1168 86.9238 1184.6 86.9238C1190.85 86.9238 1197.05 87.7539 1203.21 89.4141L1201.74 111.387C1197.15 110.508 1192.27 110.068 1187.09 110.068C1178.3 110.068 1171.52 112.656 1166.73 117.832C1161.95 122.91 1159.55 130.234 1159.55 139.805V156.504H1193.39V177.451H1159.55V315H1132.46ZM1275.28 275.303L1312.19 156.504H1341.2L1277.47 339.463C1267.61 365.83 1251.94 379.014 1230.45 379.014L1225.33 378.574L1215.22 376.67V354.697L1222.54 355.283C1231.72 355.283 1238.85 353.428 1243.93 349.717C1249.11 346.006 1253.35 339.219 1256.67 329.355L1262.68 313.242L1206.14 156.504H1235.73L1275.28 275.303Z" fill="black" fill-opacity="0.87"/> -</svg> diff --git a/docs/.vuepress/styles/index.styl b/docs/.vuepress/styles/index.styl deleted file mode 100644 index a8f9a8a68..000000000 --- a/docs/.vuepress/styles/index.styl +++ /dev/null @@ -1,54 +0,0 @@ -.bit-sponsor - font-weight 600 - background-color #f3f6f8 - padding 0.6em 1.2em - border-radius 8px - display inline-block - margin 1em 0 !important - a - color #999 - img - height 40px - margin-left 15px - img, span - vertical-align middle - - -.vueschool - background-color #e7ecf3 - padding 1em 1.25em - border-radius 2px - color #486491 - position relative - display flex - a - color #486491 !important - position relative - padding-left 36px - &:before - content '' - position absolute - display block - width 30px - height 30px - top calc(50% - 15px); - left -4px - border-radius 50% - background-color #73abfe - &:after - content '' - position absolute - display block - width 0 - height 0 - top calc(50% - 5px) - left 8px - border-top 5px solid transparent - border-bottom 5px solid transparent - border-left 8px solid #fff - -@media (max-width: 719px) { - .vueschool { - display: inline-flex; - } -} diff --git a/docs/.vuepress/theme/Layout.vue b/docs/.vuepress/theme/Layout.vue deleted file mode 100644 index a27d64a62..000000000 --- a/docs/.vuepress/theme/Layout.vue +++ /dev/null @@ -1,160 +0,0 @@ -<template> - <div - class="main-container" - :class="{ 'has-top-banner': showTopBanner }" - > - <BannerTop - v-if="showTopBanner" - @close="closeBannerTop" - /> - <ParentLayout> - <template #page-top> - <CarbonAds - v-if="$site.themeConfig.carbonAds" - :key="'ca:' + $page.path" - :code="$site.themeConfig.carbonAds.carbon" - :placement="$site.themeConfig.carbonAds.placement" - /> - </template> - <template #page-bottom> - <BuySellAds - v-if="$site.themeConfig.carbonAds" - :key="'bsa:' + $page.path" - :code="$site.themeConfig.carbonAds.custom" - :placement="$site.themeConfig.carbonAds.placement" - /> - </template> - - <template #sidebar-top> - <div class="sponsors sponsors-top"> - <span>Platinum Sponsors</span> - - <template v-if="sponsors.platinum.length"> - <a - v-for="sponsor in sponsors.platinum" - :href="sponsor.href" - :key="sponsor.href" - target="_blank" - rel="noopener" - > - <img :src="sponsor.imgSrcLight" :alt="sponsor.alt" /> - </a> - </template> - <a - v-else - class="become-sponsor" - href="https://github.com/sponsors/posva" - target="_blank" - rel="noopener" - alt="Your logo here" - >Become a Sponsor!</a> - </div> - </template> - - <template #sidebar-bottom> - <div class="sponsors"> - <span>Sponsors</span> - - <a - v-for="sponsor in sponsors.gold" - :href="sponsor.href" - :key="sponsor.href" - target="_blank" - rel="noopener" - > - <img :src="sponsor.imgSrcLight" :alt="sponsor.alt" /> - </a> - </div> - </template> - </ParentLayout> - </div> -</template> - -<script> -import ParentLayout from '@parent-theme/layouts/Layout.vue' -import CarbonAds from './components/CarbonAds.vue' -import BuySellAds from './components/BuySellAds.vue' -import sponsors from '../components/sponsors.json' - -export default { - name: 'Layout', - components: { - ParentLayout, - CarbonAds, - BuySellAds, - BannerTop: () => import('./components/VueSchool/BannerTop.vue') - }, - data() { - return { - sponsors, - showTopBanner: false - } - }, - mounted () { - const now = new Date() - const end = new Date('2022-05-04T00:00:00+02:00') - this.showTopBanner = !localStorage.getItem('VS_FW_22_BANNER_CLOSED') && (now < end) - }, - methods: { - closeBannerTop () { - this.showTopBanner = false - localStorage.setItem('VS_FW_22_BANNER_CLOSED', 1) - } - } -} -</script> - -<style> -@media screen and (max-width: 1300px) { - .content__default::before { - content: ""; - /* background-color: red; */ - position: relative; - display: block; - /* top: 87px; */ - /* right: -12px; */ - float: right; - height: 221px; - /* width: 0; */ - padding: 0 0 20px 30px; - margin-top: 20px; - margin-right: -24px; - } -} - -img { - max-width: 100%; -} -</style> - -<style scoped> -.sponsors { - margin: 0 0 1rem 1.35rem; -} - -.sponsors-top { - margin-top: 1rem; - /* workaround padding in vitepress */ - margin-bottom: -2rem; -} - -.sponsors > span { - /* margin: 1.25rem 0; */ - display: block; - color: #999; - font-size: 0.8rem; -} - -.sponsors a:last-child { - margin-bottom: 20px; -} -.sponsors a:first-child { - margin-top: 18px; -} - -.sponsors a { - margin-top: 10px; - width: 125px; - display: block; -} -</style> diff --git a/docs/.vuepress/theme/components/BuySellAds.vue b/docs/.vuepress/theme/components/BuySellAds.vue deleted file mode 100644 index 17df4bd16..000000000 --- a/docs/.vuepress/theme/components/BuySellAds.vue +++ /dev/null @@ -1,115 +0,0 @@ -<template> - <div class="bsa-cpc-wrapper"> - <div class="bsa-cpc"></div> - </div> -</template> - -<script> -/* global _bsa */ -const ID = 'bsa-cpc-script' - -export default { - name: 'BuySellAds', - props: { - code: { - type: String, - required: true - }, - placement: { - type: String, - required: true - } - }, - - methods: { - load() { - if (typeof _bsa !== 'undefined' && _bsa) { - _bsa.init('default', this.code, `placement:${this.placement}`, { - target: '.bsa-cpc', - align: 'horizontal', - disable_css: 'true' - }) - } - } - }, - - mounted() { - if (!document.getElementById(ID)) { - const s = document.createElement('script') - s.id = ID - s.src = `//m.servedby-buysellads.com/monetization.js` - document.head.appendChild(s) - s.onload = () => { - this.load() - } - } else { - this.load() - } - } -} -</script> - -<style> -.bsa-cpc-wrapper { - font-size: 0.95rem; - /* from Page.vue */ - max-width: 50rem; - margin: 0px auto; - padding: 1rem 2rem 0; - margin-bottom: -1rem; -} -@media (max-width: 419px) { - .bsa-cpc-wrapper { - padding: 0 1.5rem; - } -} -.bsa-cpc { - font-size: 0.9em; - background-color: #f8f8f8; - border-radius: 6px; -} - -.bsa-cpc .default-text { - display: inline; -} - -.bsa-cpc a._default_ { - text-align: left; - display: block; - text-decoration: none; - padding: 10px 15px 12px; - margin-bottom: 20px; - color: #666; - font-weight: 400; - line-height: 18px; -} -.bsa-cpc a._default_ .default-image img { - height: 20px; - border-radius: 3px; - vertical-align: middle; - position: relative; - top: -1px; -} -.bsa-cpc a._default_ .default-title { - font-weight: 600; -} -.bsa-cpc a._default_ .default-description:after { - font-size: 0.85em; - content: 'Sponsored'; - color: #1c90f3; - border: 1px solid #1c90f3; - border-radius: 3px; - padding: 0 4px 1px; - margin-left: 6px; -} -.bsa-cpc .default-ad { - display: none; -} -.bsa-cpc a._default_ .default-image, -.bsa-cpc a._default_ .default-title, -.bsa-cpc a._default_ .default-description { - display: inline; - vertical-align: middle; - margin-right: 6px; -} -</style> diff --git a/docs/.vuepress/theme/components/CarbonAds.vue b/docs/.vuepress/theme/components/CarbonAds.vue deleted file mode 100644 index 8864e44b1..000000000 --- a/docs/.vuepress/theme/components/CarbonAds.vue +++ /dev/null @@ -1,84 +0,0 @@ -<template> - <div class="carbon-ads"></div> -</template> - -<script> -export default { - name: 'CarbonAds', - props: { - code: { - type: String, - required: true - }, - placement: { - type: String, - required: true - } - }, - - mounted() { - const s = document.createElement('script') - s.id = '_carbonads_js' - s.src = `//cdn.carbonads.com/carbon.js?serve=${this.code}&placement=${this.placement}` - this.$el.appendChild(s) - } -} -</script> - -<style> -.carbon-ads { - min-height: 102px; - padding: 1.5rem 1.5rem 0; - margin-bottom: -0.5rem; - font-size: 0.75rem; - - width: 125px; - position: fixed; - z-index: 1; - bottom: 22px; - right: 14px; - padding: 10px; - /* background-color: #fff; */ - /* border-radius: 3px; */ - /* font-size: 13px; */ -} - -@media screen and (max-width: 1300px) { - .carbon-ads { - position: relative; - top: 87px; - right: 12px; - float: right; - padding: 0 0 20px 30px; - } -} - -.carbon-ads a { - color: #444; - font-weight: normal; - display: inline; -} - -.carbon-ads .carbon-img { - float: left; - margin-right: 1rem; - border: 1px solid var(--border-color); -} - -.carbon-ads .carbon-img img { - display: block; -} - -.carbon-ads .carbon-poweredby { - color: #999; - display: block; - margin-top: 0.5em; -} - -@media (max-width: 719px) { - .carbon-ads .carbon-img img { - width: 100px; - height: 77px; - } -} -</style> diff --git a/docs/.vuepress/theme/components/VueSchool/BannerTop.vue b/docs/.vuepress/theme/components/VueSchool/BannerTop.vue deleted file mode 100644 index 02a3b756a..000000000 --- a/docs/.vuepress/theme/components/VueSchool/BannerTop.vue +++ /dev/null @@ -1,244 +0,0 @@ -<template> - <a - id="vs" - href="https://vueschool.io/sales/price-increase-22?friend=vuerouter" - target="_blank" - rel="noreferrer" - > - <div class="vs-logo"> - <img src="/images/vueschool/vs-iso.svg" class="logo-small"> - <img src="/images/vueschool/vs-logo.svg" class="logo-big"> - </div> - <div class="vs-core"> - <div class="vs-slogan"> - <div class="vs-slogan-title"> - Extended for <strong>48 hours!</strong> - </div> - <div class="vs-slogan-subtitle"> - Get up to 40% off your Vue School Subscription - </div> - </div> - <div class="vs-button"> - <div class="vs-button-inside"> - GET OFFER - </div> - </div> - </div> - <div id="vs-close" class="vs-close" @click.stop.prevent="$emit('close')"> - <img src="/images/vueschool/vs-close.svg" alt="Close"> - </div> - </a> -</template> - -<style lang="stylus"> -@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap'); - -#vs { - align-items: center; - background-color: #000c19; - box-sizing: border-box; - color: #fff; - display: flex; - font-family: 'Roboto', Oxygen, Fira Sans, Helvetica Neue, sans-serif; - justify-content: center; - position: fixed; - padding: 0 10px; - left: 0; - right: 0; - top: 0; - z-index: 100; - height: 5rem; - line-height: 1; - background-image: url(/images/vueschool/vs-fw-bg-small.svg); - background-size: cover; - background-repeat: no-repeat; -} - -#vs:hover { - text-decoration: none; -} - -#vs .vs-logo { - position: absolute; - left: 20px; - top: 20px; -} - -#vs .vs-logo .logo-small { - width: 30px; - margin-left: -5px; - margin-top: 5px; -} - -#vs .vs-logo .logo-big { - display: none; -} - -#vs:hover .vs-core .vs-button-inside { - background: linear-gradient(257deg, #e19b09 99%, #ffca24 6%); -} - -#vs .vs-core .vs-slogan { - color: #fff; - margin-left: 8px; - text-align: center; -} - -#vs .vs-core { - width: 190px; - align-items: center; - display: flex; - justify-content: center; -} - -#vs .vs-core .vs-slogan .vs-slogan-subtitle { - font-size: 14px; - color: #cdc5dc; - margin-top: 8px; -} - -#vs .vs-core .vs-slogan .vs-slogan-title { - font-size: 16px; - font-weight: 800; -} - -#vs .vs-core .vs-slogan .vs-slogan-title strong { - color: #fdc722; -} - -#vs .vs-core .vs-button { - background: linear-gradient(0deg, #ffdf4c, #e29d0a); - padding: 2px; - margin-right: 18px; - margin-left: 16px; - border-radius: 30px; - display: none; -} - -#vs .vs-core .vs-button-inside { - color: #000; - padding: 7px 10px; - font-weight: 800; - font-size: 22px; - white-space: nowrap; - border-radius: 30px; - background: linear-gradient(90deg, #FFC828, #E19C0E); - text-transform: uppercase; -} - -#vs .vs-close { - right: 6px; - position: absolute; -} - -#vs .vs-close:hover { - color: #56d8ff; -} - -@media (min-width: 680px) { - #vs { - background-image: url(/images/vueschool/vs-fw-bg.svg); - background-position: top right -110px; - } - - #vs .vs-core .vs-slogan { - margin-left: 24px; - width: auto; - } - - #vs .vs-core .vs-slogan .vs-slogan-subtitle { - font-size: 16px; - } - - #vs .vs-core .vs-slogan .vs-slogan-title { - font-size: 18px; - } - - #vs .vs-core .vs-button { - display: inline-block; - margin-right: 0; - margin-left: 22px; - } - - #vs .vs-core .vs-button-inside { - padding: 8px 24px; - } - - #vs .vs-close { - padding: 10px; - right: 20px; - } -} - -@media (min-width: 768px) { - #vs .vs-logo .logo-small { - display: none; - } - - #vs .vs-logo .logo-big { - display: inline-block; - } - - #vs .vs-core { - width: 430px; - } -} - -@media (min-width: 1024px) { - #vs { - background-position: top right; - } - - #vs .vs-core .vs-slogan .vs-slogan-title { - font-size: 24px; - } - - #vs .vs-core .vs-button { - margin-left: 69px; - } - - #vs .vs-core { - width: auto; - } -} - -/************************************/ - -$topBannerHeight ?= 5rem -$topBannerHeightMobile ?= 5rem -$navbarHeight ?= 3.6rem -$contentClass = '.theme-default-content' - -// Show banner only if the container has class "has-top-banner" -.main-container.has-top-banner - #vs - display: flex - -// Add margin top to body, navbar and sidebar -.main-container.has-top-banner - margin-top: $topBannerHeightMobile - .navbar - margin-top: $topBannerHeightMobile - .sidebar - margin-top: $topBannerHeightMobile -@media (min-width: 680px) - .main-container.has-top-banner - margin-top: $topBannerHeight - .navbar - margin-top: $topBannerHeight - .sidebar - margin-top: $topBannerHeight - -// Adjust titles margin and padding for anchor links -.main-container.has-top-banner - {$contentClass}:not(.custom) - h1, h2, h3, h4, h5, h6 - margin-top (2.5rem - $topBannerHeightMobile - $navbarHeight) - padding-top ($navbarHeight + $topBannerHeightMobile + 1rem) -@media (min-width: 680px) - .main-container.has-top-banner - {$contentClass}:not(.custom) - h1, h2, h3, h4, h5, h6 - margin-top (2.5rem - $topBannerHeight - $navbarHeight) - padding-top ($navbarHeight + $topBannerHeight + 1rem) -</style> diff --git a/docs/.vuepress/theme/index.js b/docs/.vuepress/theme/index.js deleted file mode 100644 index b91b8a576..000000000 --- a/docs/.vuepress/theme/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extend: '@vuepress/theme-default' -} diff --git a/docs/LANGS.md b/docs/LANGS.md new file mode 100644 index 000000000..3698afae0 --- /dev/null +++ b/docs/LANGS.md @@ -0,0 +1,3 @@ +* [English](en/) +* [日本語](ja/) +* [中文](zh-cn/) diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 69f6215fb..000000000 --- a/docs/README.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -home: true -heroImage: /logo.png -actionText: Get Started → -actionLink: /installation.html -footer: MIT Licensed | Copyright © 2014-present Evan You, Eduardo San Martin Morote ---- - -Vue Router is the official router for [Vue.js](http://vuejs.org). It deeply integrates with Vue.js core to make building Single Page Applications with Vue.js a breeze. Features include: - -- Nested route/view mapping -- Modular, component-based router configuration -- Route params, query, wildcards -- View transition effects powered by Vue.js' transition system -- Fine-grained navigation control -- Links with automatic active CSS classes -- HTML5 history mode or hash mode, with auto-fallback in IE9 -- Customizable Scroll Behavior - -[Get started](./guide/) or play with the [examples](https://github.com/vuejs/vue-router/tree/dev/examples) (see [`README.md`](https://github.com/vuejs/vue-router/) to run them). - -<HomeSponsors /> diff --git a/docs/api/README.md b/docs/api/README.md deleted file mode 100644 index 5c9dacc60..000000000 --- a/docs/api/README.md +++ /dev/null @@ -1,644 +0,0 @@ ---- -sidebar: auto ---- - -# API Reference - -## `<router-link>` - -`<router-link>` is the component for enabling user navigation in a router-enabled app. The target location is specified with the `to` prop. It renders as an `<a>` tag with correct `href` by default, but can be configured with the `tag` prop. In addition, the link automatically gets an active CSS class when the target route is active. - -`<router-link>` is preferred over hard-coded `<a href="...">` for the following reasons: - -- It works the same way in both HTML5 history mode and hash mode, so if you ever decide to switch mode, or when the router falls back to hash mode in IE9, nothing needs to be changed. -- In HTML5 history mode, `router-link` will intercept the click event so that the browser doesn't try to reload the page. -- When you are using the `base` option in HTML5 history mode, you don't need to include it in `to` prop's URLs. - -### `v-slot` API (3.1.0+) - -`router-link` exposes a low level customization through a [scoped slot](https://vuejs.org/v2/guide/components-slots.html#Scoped-Slots). This is a more advanced API that primarily targets library authors but can come in handy for developers as well, most of the time in a custom component like a _NavLink_ or other. - -**When using the `v-slot` API, it is required to pass one single child to `router-link`**. If you don't, `router-link` will wrap its children in a `span` element. - -```html -<router-link - to="/about" - custom - v-slot="{ href, route, navigate, isActive, isExactActive }" -> - <NavLink :active="isActive" :href="href" @click="navigate" - >{{ route.fullPath }}</NavLink - > -</router-link> -``` - -- `href`: resolved url. This would be the `href` attribute of an `a` element -- `route`: resolved normalized location -- `navigate`: function to trigger the navigation. **It will automatically prevent events when necessary**, the same way `router-link` does -- `isActive`: `true` if the [active class](#active-class) should be applied. Allows to apply an arbitrary class -- `isExactActive`: `true` if the [exact active class](#exact-active-class) should be applied. Allows to apply an arbitrary class - -#### Example: Applying Active Class to Outer Element - -Sometimes we may want the active class to be applied to an outer element rather than the `<a>` tag itself, in that case, you can wrap that element inside a `router-link` and use the `v-slot` properties to create your link: - -```html -<router-link - to="/foo" - v-slot="{ href, route, navigate, isActive, isExactActive }" - custom -> - <li - :class="[isActive && 'router-link-active', isExactActive && 'router-link-exact-active']" - > - <a :href="href" @click="navigate">{{ route.fullPath }}</a> - </li> -</router-link> -``` - -:::tip -If you add a `target="_blank"` to your `a` element, you must omit the `@click="navigate"` handler. -::: - -## `<router-link>` Props - -### to - -- type: `string | Location` -- required - - Denotes the target route of the link. When clicked, the value of the `to` prop will be passed to `router.push()` internally, so the value can be either a string or a location descriptor object. - - ```html - <!-- literal string --> - <router-link to="home">Home</router-link> - <!-- renders to --> - <a href="home">Home</a> - - <!-- javascript expression using `v-bind` --> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- Omitting `v-bind` is fine, just as binding any other prop --> - <router-link :to="'home'">Home</router-link> - - <!-- same as above --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- named route --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- with query, resulting in `/register?plan=private` --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}" - >Register</router-link - > - ``` - -### replace - -- type: `boolean` -- default: `false` - - Setting `replace` prop will call `router.replace()` instead of `router.push()` when clicked, so the navigation will not leave a history record. - - ```html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -### append - -- type: `boolean` -- default: `false` - - Setting `append` prop always appends the relative path to the current path. For example, assuming we are navigating from `/a` to a relative link `b`, without `append` we will end up at `/b`, but with `append` we will end up at `/a/b`. - - ```html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -### tag - -- type: `string` -- default: `"a"` - - Sometimes we want `<router-link>` to render as another tag, e.g `<li>`. Then we can use `tag` prop to specify which tag to render to, and it will still listen to click events for navigation. - - ```html - <router-link to="/foo" tag="li">foo</router-link> - <!-- renders as --> - <li>foo</li> - ``` - -### active-class - -- type: `string` -- default: `"router-link-active"` - - Configure the active CSS class applied when the link is active. Note the default value can also be configured globally via the `linkActiveClass` router constructor option. - -### exact - -- type: `boolean` -- default: `false` - - The default active class matching behavior is **inclusive match**. For example, `<router-link to="/a">` will get this class applied as long as the current path starts with `/a/` or is `/a`. - - One consequence of this is that `<router-link to="/">` will be active for every route! To force the link into "exact match mode", use the `exact` prop: - - ```html - <!-- this link will only be active at `/` --> - <router-link to="/" exact></router-link> - ``` - - Check out more examples explaining active link class [live](https://jsfiddle.net/8xrk1n9f/). - -### exact-path - -> New in 3.5.0 - -- type: `boolean` -- default: `false` - - Allows matching only using the `path` section of the url, effectively ignoring the `query` and the `hash` sections. - - ```html - <!-- this link will also be active at `/search?page=2` or `/search#filters` --> - <router-link to="/search" exact-path> </router-link> - ``` - -### exact-path-active-class - -- type: `string` -- default: `"router-link-exact-path-active"` - - Configure the active CSS class applied when the link is active with exact path match. Note the default value can also be configured globally via the `linkExactPathActiveClass` router constructor option. - -### event - -- type: `string | Array<string>` -- default: `'click'` - - Specify the event(s) that can trigger the link navigation. - -### exact-active-class - -- type: `string` -- default: `"router-link-exact-active"` - - Configure the active CSS class applied when the link is active with exact match. Note the default value can also be configured globally via the `linkExactActiveClass` router constructor option. - -### aria-current-value - -- type: `'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false'` -- default: `"page"` - - Configure the value of `aria-current` when the link is active with exact match. It must be one of the [allowed values for aria-current](https://www.w3.org/TR/wai-aria-1.2/#aria-current) in the ARIA spec. In most cases, the default of `page` should be the best fit. - -## `<router-view>` - -The `<router-view>` component is a functional component that renders the matched component for the given path. Components rendered in `<router-view>` can also contain their own `<router-view>`, which will render components for nested paths. - -Any non-name props will be passed along to the rendered component, however most of the time the per-route data is contained in the route's params. - -Since it's just a component, it works with `<transition>` and `<keep-alive>`. When using them both together, make sure to use `<keep-alive>` inside: - -```html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` - -## `<router-view>` Props - -### name - -- type: `string` -- default: `"default"` - - When a `<router-view>` has a name, it will render the component with the corresponding name in the matched route record's `components` option. See [Named Views](../guide/essentials/named-views.md) for an example. - -## Router Construction Options - -### routes - -- type: `Array<RouteConfig>` - - Type declaration for `RouteConfig`: - - ```ts - interface RouteConfig = { - path: string, - component?: Component, - name?: string, // for named routes - components?: { [name: string]: Component }, // for named views - redirect?: string | Location | Function, - props?: boolean | Object | Function, - alias?: string | Array<string>, - children?: Array<RouteConfig>, // for nested routes - beforeEnter?: (to: Route, from: Route, next: Function) => void, - meta?: any, - - // 2.6.0+ - caseSensitive?: boolean, // use case sensitive match? (default: false) - pathToRegexpOptions?: Object // path-to-regexp options for compiling regex - } - ``` - -### mode - -- type: `string` - -- default: `"hash" (in browser) | "abstract" (in Node.js)` - -- available values: `"hash" | "history" | "abstract"` - - Configure the router mode. - - - `hash`: uses the URL hash for routing. Works in all Vue-supported browsers, including those that do not support HTML5 History API. - - - `history`: requires HTML5 History API and server config. See [HTML5 History Mode](../guide/essentials/history-mode.md). - - - `abstract`: works in all JavaScript environments, e.g. server-side with Node.js. **The router will automatically be forced into this mode if no browser API is present.** - -### base - -- type: `string` - -- default: `"/"` - - The base URL of the app. For example, if the entire single page application is served under `/app/`, then `base` should use the value `"/app/"`. - -### linkActiveClass - -- type: `string` - -- default: `"router-link-active"` - - Globally configure `<router-link>` default active class. Also see [router-link](#router-link). - -### linkExactActiveClass - -- type: `string` - -- default: `"router-link-exact-active"` - - Globally configure `<router-link>` default active class for exact matches. Also see [router-link](#router-link). - -### scrollBehavior - -- type: `Function` - - Signature: - - ```ts - type PositionDescriptor = - { x: number, y: number } | - { selector: string } | - void - - type scrollBehaviorHandler = ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => PositionDescriptor | Promise<PositionDescriptor> - ``` - - For more details see [Scroll Behavior](../guide/advanced/scroll-behavior.md). - -### parseQuery / stringifyQuery - -- type: `Function` - - Provide custom query string parse / stringify functions. Overrides the default. - -### fallback - -- type: `boolean` - -- default: `true` - - Controls whether the router should fallback to `hash` mode when the browser does not support `history.pushState` but mode is set to `history`. - - Setting this to `false` essentially makes every `router-link` navigation a full page refresh in IE9. This is useful when the app is server-rendered and needs to work in IE9, because a hash mode URL does not work with SSR. - -## Router Instance Properties - -### router.app - -- type: `Vue instance` - - The root Vue instance the `router` was injected into. - -### router.mode - -- type: `string` - - The [mode](./#mode) the router is using. - -### router.currentRoute - -- type: `Route` - - The current route represented as a [Route Object](#the-route-object). - -### router.START_LOCATION (3.5.0+) - -- type: `Route` - - Initial route location represented as a [Route Object](#the-route-object) where the router starts at. Can be used in navigation guards to differentiate the initial navigation. - - ```js - import VueRouter from 'vue-router' - - const router = new VueRouter({ - // ... - }) - - router.beforeEach((to, from) => { - if (from === VueRouter.START_LOCATION) { - // initial navigation - } - }) - ``` - -## Router Instance Methods - -### router.beforeEach - -### router.beforeResolve - -### router.afterEach - -Signatures: - -```js -router.beforeEach((to, from, next) => { - /* must call `next` */ -}) - -router.beforeResolve((to, from, next) => { - /* must call `next` */ -}) - -router.afterEach((to, from) => {}) -``` - -Add global navigation guards. See [Navigation Guards](../guide/advanced/navigation-guards.md) for more details. - -All three methods return a function that removes the registered guard/hook. - -### router.push - -### router.replace - -### router.go - -### router.back - -### router.forward - -Signatures: - -```js -router.push(location, onComplete?, onAbort?) -router.push(location).then(onComplete).catch(onAbort) -router.replace(location, onComplete?, onAbort?) -router.replace(location).then(onComplete).catch(onAbort) -router.go(n) -router.back() -router.forward() -``` - -Programmatically navigate to a new URL. See [Programmatic Navigation](../guide/essentials/navigation.md) for more details. - -These functions can only be called after installing the Router plugin and passing it to the root Vue instance as shown in the [Getting Started](../guide/README.md). - -### router.getMatchedComponents - -Signature: - -```js -const matchedComponents: Array<Component> = router.getMatchedComponents(location?) -``` - -Returns an Array of the components (definition/constructor, not instances) matched by the provided location or the current route. This is mostly used during server-side rendering to perform data prefetching. - -### router.resolve - -Signature: - -```js -const resolved: { - location: Location; - route: Route; - href: string; -} = router.resolve(location, current?, append?) -``` - -Reverse URL resolving. Given location in form same as used in `<router-link/>`. - -- `current` is the current Route by default (most of the time you don't need to change this) -- `append` allows you to append the path to the `current` route (as with [`router-link`](#router-link-props)) - -### router.addRoutes - -_DEPRECATED_: use [`router.addRoute()`](#router-addroute) instead. - -Signature: - -```ts -router.addRoutes(routes: Array<RouteConfig>) -``` - -Dynamically add more routes to the router. The argument must be an Array using the same route config format with the `routes` constructor option. - -### router.addRoute - -> New in 3.5.0 - -Add a new route to the router. If the route has a `name` and there is already an existing one with the same one, it overwrites it. - -Signature: - -```ts -addRoute(route: RouteConfig): () => void -``` - -### router.addRoute - -> New in 3.5.0 - -Add a new route record as the child of an existing route. If the route has a `name` and there is already an existing one with the same one, it overwrites it. - -Signature: - -```ts -addRoute(parentName: string, route: RouteConfig): () => void -``` - -### router.getRoutes - -> New in 3.5.0 - -Get the list of all the active route records. **Note only documented properties are considered Public API**, avoid using any other property e.g. `regex` as it doesn't exist on Vue Router 4. - -Signature: - -```ts -getRoutes(): RouteRecord[] -``` - -### router.onReady - -Signature: - -```js -router.onReady(callback, [errorCallback]) -``` - -This method queues a callback to be called when the router has completed the initial navigation, which means it has resolved all async enter hooks and async components that are associated with the initial route. - -This is useful in server-side rendering to ensure consistent output on both the server and the client. - -The second argument `errorCallback` is only supported in 2.4+. It will be called when the initial route resolution runs into an error (e.g. failed to resolve an async component). - -### router.onError - -Signature: - -```js -router.onError(callback) -``` - -Register a callback which will be called when an error is caught during a route navigation. Note for an error to be called, it must be one of the following scenarios: - -- The error is thrown synchronously inside a route guard function; - -- The error is caught and asynchronously handled by calling `next(err)` inside a route guard function; - -- An error occurred when trying to resolve an async component that is required to render a route. - -## The Route Object - -A **route object** represents the state of the current active route. It contains parsed information of the current URL and the **route records** matched by the URL. - -The route object is immutable. Every successful navigation will result in a fresh route object. - -The route object can be found in multiple places: - -- Inside components as `this.$route` - -- Inside `$route` watcher callbacks - -- As the return value of calling `router.match(location)` - -- Inside navigation guards as the first two arguments: - - ```js - router.beforeEach((to, from, next) => { - // `to` and `from` are both route objects - }) - ``` - -- Inside the `scrollBehavior` function as the first two arguments: - - ```js - const router = new VueRouter({ - scrollBehavior(to, from, savedPosition) { - // `to` and `from` are both route objects - } - }) - ``` - -### Route Object Properties - -- **\$route.path** - - - type: `string` - - A string that equals the path of the current route, always resolved as an absolute path. e.g. `"/foo/bar"`. - -- **\$route.params** - - - type: `Object` - - An object that contains key/value pairs of dynamic segments and star segments. If there are no params the value will be an empty object. - -- **\$route.query** - - - type: `Object` - - An object that contains key/value pairs of the query string. For example, for a path `/foo?user=1`, we get `$route.query.user == 1`. If there is no query the value will be an empty object. - -- **\$route.meta** - - - type: `Object` - - An object that contains key/value pairs of the route meta object. If there are no meta properties the value will be an empty object. - -- **\$route.hash** - - - type: `string` - - The hash of the current route (with the `#`), if it has one. If no hash is present the value will be an empty string. - -- **\$route.fullPath** - - - type: `string` - - The full resolved URL including query and hash. - -- **\$route.matched** - - - type: `Array<RouteRecord>` - - An Array containing **route records** for all nested path segments of the current route. Route records are the copies of the objects in the `routes` configuration Array (and in `children` Arrays): - - ```js - const router = new VueRouter({ - routes: [ - // the following object is a route record - { - path: '/foo', - component: Foo, - children: [ - // this is also a route record - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - When the URL is `/foo/bar`, `$route.matched` will be an Array containing both objects (cloned), in parent to child order. - -- **\$route.name** - - The name of the current route, if it has one. (See [Named Routes](../guide/essentials/named-routes.md)) - -- **\$route.redirectedFrom** - - The name of the route being redirected from, if there were one. (See [Redirect and Alias](../guide/essentials/redirect-and-alias.md)) - -## Component Injections - -### Component Injected Properties - -These properties are injected into every child component by passing the router instance to the root instance as the `router` option. - -- **this.\$router** - - The router instance. - -- **this.\$route** - - The current active [Route](#the-route-object). This property is read-only and its properties are immutable, but it can be watched. - -### Component Enabled Options - -- **beforeRouteEnter** -- **beforeRouteUpdate** -- **beforeRouteLeave** - - See [In Component Guards](../guide/advanced/navigation-guards.md#in-component-guards). diff --git a/docs-gitbook/assets/CNAME b/docs/assets/CNAME similarity index 100% rename from docs-gitbook/assets/CNAME rename to docs/assets/CNAME diff --git a/docs-gitbook/assets/circle.yml b/docs/assets/circle.yml similarity index 100% rename from docs-gitbook/assets/circle.yml rename to docs/assets/circle.yml diff --git a/docs/assets/illustrations.ai b/docs/assets/illustrations.ai new file mode 100644 index 000000000..8aa7f4614 --- /dev/null +++ b/docs/assets/illustrations.ai @@ -0,0 +1,6381 @@ +%PDF-1.5 %���� +1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 6 0 R]/Order 7 0 R/RBGroups[]>>/OCGs[5 0 R 6 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 44123/Subtype/XML/Type/Metadata>>stream +<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> +<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c014 79.156821, 2014/08/29-03:07:50 "> + <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:xmp="http://ns.adobe.com/xap/1.0/" + xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/" + xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" + xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" + xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" + xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/" + xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/" + xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" + xmlns:stFnt="http://ns.adobe.com/xap/1.0/sType/Font#" + xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/" + xmlns:pdf="http://ns.adobe.com/pdf/1.3/"> + <dc:format>application/pdf</dc:format> + <dc:title> + <rdf:Alt> + <rdf:li xml:lang="x-default">illustrations</rdf:li> + </rdf:Alt> + </dc:title> + <xmp:MetadataDate>2015-08-19T16:50:53-04:00</xmp:MetadataDate> + <xmp:ModifyDate>2015-08-19T16:50:53-04:00</xmp:ModifyDate> + <xmp:CreateDate>2015-08-19T16:50:53-04:00</xmp:CreateDate> + <xmp:CreatorTool>Adobe Illustrator CC 2014 (Macintosh)</xmp:CreatorTool> + <xmp:Thumbnails> + <rdf:Alt> + <rdf:li rdf:parseType="Resource"> + <xmpGImg:width>256</xmpGImg:width> + <xmpGImg:height>48</xmpGImg:height> + <xmpGImg:format>JPEG</xmpGImg:format> + <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAMAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXEgAkmgG5JxVL7
/XtL06NJdQuIrOKQ0ie5lihDmlfh9RlxFljxIn64nofWOJ9Hjz9TlHx4Ury5cqUp3xTaG0/XdL1K
N5dPuI7yOMgStbSxTBSd9/Tdvu64mwjiTBWVlDKQVIqCNwQcWTsVdirsVdirsVdirsVS7X/MeieX
7A6hrN5HZWgYIJJKmrN0VVUFmPsBhAJ5IJp2g+YtE8wWAv8ARryO9tCxQyR12YdVZSAynfoRiQRz
UG0xwJdirsVdirsVdirsVdirsVdirFvNP5n+SvK9/Fp+sah6N3KAxiSOSUojGgZ/TVuI/H2ycYE8
mJmBzZJaXdreWsV3ayrPbToJIZkPJWRhUMCOxGQZKuKuxV2KuxV2KuxVTuQxt5QoqxRqAdzTEoly
eLfnF5T1u+842etR6PL5k0iSwNrHaW8nFopGZgZKAOacZOStxpypXpvdjkKq6a5izfNNG8iec/8A
lRI8siQnXAnL6rzX+7M/q/VvUrT7G3Wn7PTHiHHaeE8NJX+T/lTXbHzVd6s+kzeWdLTT/qsttcPy
M8yMAJgrBOiryZqfa6bNs5ZCqtEBRutno8umedxb2v6O1q2j4xOJ1vLQzFnclkIKSwkcBRenucpx
7DfdvyyEjcRwjuQzaT+aHpNGvmHTqszkTfo5w6qx2Cj6wU+EHaqnpuTk7j3NdFl42HWvvkGTsVdi
rsVdirsVedfm15O1rzRb6Te6GkN1caLcG4WyujxhueRX4eoBpw7kAgnfLMcgObCcbXflR5Q1nyxb
6te65HDa3WtXIuXs7U1t7enL4epC8i56VUCm+OSQPJYRp6HlbN2KuxV2KuxV2KuxV2KuxVbJIkYB
c0qaAdST4ADc4q8i89/lT5l1bzRqWtaTHp80euWy2l3FqJk52wVFQSRemCAw9NWqCd/EE5dDIAKL
XKG+z0Pyhoq+XfLunaE0hkNnEIlnPSRt2Yjw3Jop/HrlUjZtmBQTzAl2KuxV2KuxV2KpN5o8xrod
nDIsBurq5lEFtbhuPJ28WoaDIyNOLqtT4UQask0AhfKusR6s9/Fd2As9Ss5At1E1HA58itGoPA/r
74g2x0uo8WwY8Mo8wn/1a2rX0kqep4jJU5fCEj8z6pBpYtUt7Jbi/uHY26jigHpgM5ZiOlDl+DAJ
2SaAaM2QQqhZKK8ua+NYtZWeA211bSGG5gY14uPegxz4eA87BZYcvGOVEJtlDc7FXYqkOsec9N0m
9ktLm1vpHjWJg9vaTXCP63PiEMSvUj0zy+YyQjaCUsi/NPQ5OAXTdY5ud0/Rt0WUH9o0Q7fKuHgK
OJ17+YsDaRcXmnWVyJY3hii+uwSW6M8/KlOfFm4hPip4gda0hP0uPq9QcUOICzyVNC8wanPrE+ia
/FGLyHiUNvUxMGUvVgTWgHfp470ysT3ostH4sxPj4fRXI9/4/FFlCzSyLziQFD9ks3Go8dg22Tbr
vk4zSIR6qAIaDmrcqE+NQuK33sV1fzNew6sNI0SJRcDm0puASg4jl8Cr8QrTuPcChrmTpoQlZlfp
Y6oTgI1Xqv7Px+CqWvnyBNMtbm/s7kyzSywSmzgkuER4RyJbhyZVYHY/eaCuObDwSocmOHLxxs81
n/KztFLEDTtYKLUtJ+jLviFC15f3daEgr065VwFs4k68u+YbbXbOS7tra6to45PS43kLW7lgqsSE
f4qDlxr4g5Eikg2mmBLsVSPWfN9hpGoR2VxaX0ryCErNbW0k8X793QAtGGoV9IlvAU8ckI2glARf
mTokt1DbrZapWaVYVkOnXQjDMAQS3DpvT+zDwFHE7zR5g1K31q20iyuYNP8AVt2uXvbkAqSpIEY5
EKPs75TIuDqtRIZBCJEdrs/cr+Tdfl1fShe3MJ+ufZaRaFXqxACfy04VZe3XvjGduXp5mWGMyRcu
78fjdPwLogklEPYUL0+mqfqyTZusklKxuJ4udELcUHPmFG6gH9r2xtMdzTBbvzlrEUl5NBNFBBYy
iMWE3B3kGwP7wHkfbj275scGnjKIsG5fY4eozShOQBFR+1OtQ/MLTLC4a2n0/U5Jl4UFvZTTo/ON
JPgeMFTxElD3qDmEYOVxL4vP2lzWtxcQ2OpuLYMzp9RuEchFZtg6ruSnGhoa07b4OFNr9E88aXq+
pyadBaahBNHX95dWc8MR41rSR14ilO9PbExpQWRZFLsVS/XNDstZtFt7kuhjdZYJojxkjkXoymhw
EW058EcsaPv9yl5f0K10uGSRJZbi6vCsl1dTtykcgbVIpsK7YgUjBpxjuiSTzJ5prhb0r17RbbUo
EeSSSCe15PBcQni6ErRhvXY98txZjD3FqyYhP3hV0bRbTSbZoLcu7SOZJppTykd26sx2wZcpmbKc
eIQFBH5W2OxV2KuxV2KofUNOstRtJLS9iE1vJ9pG9twQRuCPEYCGGTHGceGQsJdpWgaZpOnTfUof
TkuI+U8pZnZiFNKsxJoK7YKpqx6eGMHhHNOck5Cnc1+ry068GpX5e+JRLkgNb0PTNUjj+uRcniYC
OQMUYBmAYBlI6jLceaUOTDJijPmjLGxtLC1S1tIhDBH9hBXuanc1JyE5mRs82UYCIoclfIsnYq7F
XYq7FXYqlut6HpWqRRi+tUuPTdeBaoYBmAahFDuMBFtOXTwyfULRMVrBax2tvbRrFBE3FI0AAA4N
0GLMREQANgicLNTlr6kO37Zr/wAA2KD0S678vaLdapHeT2kclxxLFyOpUqFLDoae+WxzzAoHZrlh
gTZG6a5U2uxV2KuxV2KpL5p8x/oS2t/Th+s3l7MtvawluCl27s3YDLcWLiPkEgIfyf5lOrx3NrLB
6F3pxSOYAsUYODxZeaowrxOxGHNi4K7ipDIspQl2sag0Ho2scYknvS0cYY8VFBuSaHxzC1erOIxj
EXOZ27nJ0+ATBJNRiv0jVBqEMhKenLC5jlQGoqO4O2xx0Ws8eJ2qUTRXU6fwyN7BFo7M1xnYq7FU
k1Xzt5S0i9ey1TVbeyukRZGjmfh8LkhdzsenTJCJKCQEHH+Z3kCT0RHrtqzTgNGgY86FS1WWnJdh
U8hjwHuRxBC6t+Y+kNok955euItSuI5Yrfbl6aSTAledePZTtXY9ctxYeKVFlHdR8rebdSu7i80T
V0jS9hQLA0SuvLlGzUKP8WwXrTBqIwjVdWw4SYGQ5Bm+UtahfyrFZTyNWio1eKlj0p0UE4CxmaBS
bUdemn1AaXpqqblKSStMCoHEcwKde3fNbrdVljOMMQHEb5+TssGljweJO+HyUj52trWwtLm9tLp/
rMjws1nbyXKoyAGrLGHejVoKA5d2bqTqMXGRRcfWYRinwjkhf+VnaLz4nTtYClS4kOm3dOAUNy+x
y4kkrWnUH2rsOAuLxJ35d8w22u2cl3bW11bRxyelxvIWt3LBVYkI/wAVBy418QciRSQbTTAl2KpB
rXnXTtHvvql1aX8h/d/v7e1lnjrKHIAMYYmnp70G1R70kI2glBxfmRo0l1Fbfo/VkaaX0UkfTroJ
uQA5bhstTTf4geoGHgKOJCeePM2q2esWmk2M0VmJIfrMl1KENSrMAi+oVT9ipqf7b8GKJiSd2YCZ
+TvMF1ruj213cRBJ0dhMyU4NQOtRQnidtwf1EZRlAEyB0ZZMfDR72R5BghrucxSQfu5JAWYn01LU
ARutOntgJYnmAxmbzNeyGW9iKQJbuIls5ApdlY/ESQT/AC9s57VdpZYSkQYgQIHD3u7x6GG0SCSR
z7kRdfmFpFpdSWtxZakJYpFiJjsbmZG5Ij8keJHVh+8+ex26Z0UAZRB73TS2JDSfmFpcljJeQ6fq
sixMyNH9QuEf4ATy/eKi0NNt/brkuBFozQfN+m63cPBa295EyIZOV1aywKVDBdmkUbmoNP4ggJjS
gp5kUuxVLPMHl3Tdesfqd8G4KweOSMhXRhtVSQR0PcZZjyGBsKCpeW/Kul+XoJorH1Ha4YNNNMwZ
2pXiCQFG1T2w5cpnzSSnGVIQWp6TaajGiT8lMZqkiGjCvXqD1zE1eihnAEr25Ec2/BqZYiTHqv03
TbXT4PRtwaE8mdjVmPiTktLpIYI8MUZ88ssrkisyWl2KuxVTktreU1kiRztuyg9Nx18K4qtWys1Y
MsEYYCgYItQPDpjaqN5o+l3tnJZXNtG9rLT1IqcQePQ1WhBFNiMlGZibCqOi+XNH0VJF063ERlNZ
ZCWd2p0qzEmg8MM8kpc02mWQQ7FULfaZZXwUXMfIp9hgSrCvXcUzG1Gkx5q4xdN2LPPH9JVre2gt
oVhgQRxJsqjLcWKOOIjEUAwnMyNncqmWMHYq7FXYq7FXYqgNW0DR9XRE1K1S5EZrGWqGWvWjKQd8
nDJKPIqirW0trS3jtraJYYIhxjjQUUD5ZEkk2VVcCuxVCTaTps9wLiW3R5hT4yOtOlfH6cxcmiwz
nxyiDJujqMkY8IOyLzKaXYq7FX//2Q==</xmpGImg:image> + </rdf:li> + </rdf:Alt> + </xmp:Thumbnails> + <xmpMM:InstanceID>uuid:6240075b-1c9d-b34e-bb15-246c6f0630c0</xmpMM:InstanceID> + <xmpMM:DocumentID>xmp.did:8548ba27-78bc-4184-9b1a-8ecacc85610d</xmpMM:DocumentID> + <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID> + <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass> + <xmpMM:DerivedFrom rdf:parseType="Resource"> + <stRef:instanceID>uuid:d1c078a0-2746-42b2-b0d1-25aedff8fb1e</stRef:instanceID> + <stRef:documentID>xmp.did:1b6690ed-28a8-c141-9479-b6a9cf6be651</stRef:documentID> + <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID> + <stRef:renditionClass>proof:pdf</stRef:renditionClass> + </xmpMM:DerivedFrom> + <xmpMM:History> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <stEvt:action>saved</stEvt:action> + <stEvt:instanceID>xmp.iid:8548ba27-78bc-4184-9b1a-8ecacc85610d</stEvt:instanceID> + <stEvt:when>2015-08-19T16:50:51-04:00</stEvt:when> + <stEvt:softwareAgent>Adobe Illustrator CC 2014 (Macintosh)</stEvt:softwareAgent> + <stEvt:changed>/</stEvt:changed> + </rdf:li> + </rdf:Seq> + </xmpMM:History> + <illustrator:Type>Document</illustrator:Type> + <illustrator:StartupProfile>Print</illustrator:StartupProfile> + <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint> + <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency> + <xmpTPg:NPages>1</xmpTPg:NPages> + <xmpTPg:MaxPageSize rdf:parseType="Resource"> + <stDim:w>700.000000</stDim:w> + <stDim:h>400.000000</stDim:h> + <stDim:unit>Points</stDim:unit> + </xmpTPg:MaxPageSize> + <xmpTPg:Fonts> + <rdf:Bag> + <rdf:li rdf:parseType="Resource"> + <stFnt:fontName>Montserrat-Regular</stFnt:fontName> + <stFnt:fontFamily>Montserrat</stFnt:fontFamily> + <stFnt:fontFace>Regular</stFnt:fontFace> + <stFnt:fontType>Open Type</stFnt:fontType> + <stFnt:versionString>Version 2.001</stFnt:versionString> + <stFnt:composite>False</stFnt:composite> + <stFnt:fontFileName>Montserrat-Regular.ttf</stFnt:fontFileName> + </rdf:li> + </rdf:Bag> + </xmpTPg:Fonts> + <xmpTPg:PlateNames> + <rdf:Seq> + <rdf:li>Cyan</rdf:li> + <rdf:li>Magenta</rdf:li> + <rdf:li>Yellow</rdf:li> + <rdf:li>Black</rdf:li> + </rdf:Seq> + </xmpTPg:PlateNames> + <xmpTPg:SwatchGroups> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>Default Swatch Group</xmpG:groupName> + <xmpG:groupType>0</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>White</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>Black</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>100.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Red</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Yellow</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Green</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Cyan</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Blue</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>CMYK Magenta</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>15.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>90.000000</xmpG:yellow> + <xmpG:black>10.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>90.000000</xmpG:magenta> + <xmpG:yellow>85.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>80.000000</xmpG:magenta> + <xmpG:yellow>95.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>50.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>35.000000</xmpG:magenta> + <xmpG:yellow>85.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>5.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>90.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>20.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>50.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>75.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>85.000000</xmpG:cyan> + <xmpG:magenta>10.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>10.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>90.000000</xmpG:cyan> + <xmpG:magenta>30.000000</xmpG:magenta> + <xmpG:yellow>95.000000</xmpG:yellow> + <xmpG:black>30.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>75.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>75.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>80.000000</xmpG:cyan> + <xmpG:magenta>10.000000</xmpG:magenta> + <xmpG:yellow>45.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>70.000000</xmpG:cyan> + <xmpG:magenta>15.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>85.000000</xmpG:cyan> + <xmpG:magenta>50.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>95.000000</xmpG:magenta> + <xmpG:yellow>5.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>25.000000</xmpG:yellow> + <xmpG:black>25.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>75.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>50.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>35.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>35.000000</xmpG:yellow> + <xmpG:black>10.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>10.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>50.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>95.000000</xmpG:magenta> + <xmpG:yellow>20.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>25.000000</xmpG:cyan> + <xmpG:magenta>25.000000</xmpG:magenta> + <xmpG:yellow>40.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>40.000000</xmpG:cyan> + <xmpG:magenta>45.000000</xmpG:magenta> + <xmpG:yellow>50.000000</xmpG:yellow> + <xmpG:black>5.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>50.000000</xmpG:cyan> + <xmpG:magenta>50.000000</xmpG:magenta> + <xmpG:yellow>60.000000</xmpG:yellow> + <xmpG:black>25.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>55.000000</xmpG:cyan> + <xmpG:magenta>60.000000</xmpG:magenta> + <xmpG:yellow>65.000000</xmpG:yellow> + <xmpG:black>40.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>25.000000</xmpG:cyan> + <xmpG:magenta>40.000000</xmpG:magenta> + <xmpG:yellow>65.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>30.000000</xmpG:cyan> + <xmpG:magenta>50.000000</xmpG:magenta> + <xmpG:yellow>75.000000</xmpG:yellow> + <xmpG:black>10.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>35.000000</xmpG:cyan> + <xmpG:magenta>60.000000</xmpG:magenta> + <xmpG:yellow>80.000000</xmpG:yellow> + <xmpG:black>25.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>40.000000</xmpG:cyan> + <xmpG:magenta>65.000000</xmpG:magenta> + <xmpG:yellow>90.000000</xmpG:yellow> + <xmpG:black>35.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>40.000000</xmpG:cyan> + <xmpG:magenta>70.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>50.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>50.000000</xmpG:cyan> + <xmpG:magenta>70.000000</xmpG:magenta> + <xmpG:yellow>80.000000</xmpG:yellow> + <xmpG:black>70.000000</xmpG:black> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>Grays</xmpG:groupName> + <xmpG:groupType>1</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>100.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>89.999400</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>79.998800</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>69.999700</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>59.999100</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>50.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>39.999400</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>29.998800</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>19.999700</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>9.999100</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>0.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>4.998800</xmpG:black> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:groupName>Brights</xmpG:groupName> + <xmpG:groupType>1</xmpG:groupType> + <xmpG:Colorants> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>100.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>75.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>0.000000</xmpG:cyan> + <xmpG:magenta>10.000000</xmpG:magenta> + <xmpG:yellow>95.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>85.000000</xmpG:cyan> + <xmpG:magenta>10.000000</xmpG:magenta> + <xmpG:yellow>100.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>100.000000</xmpG:cyan> + <xmpG:magenta>90.000000</xmpG:magenta> + <xmpG:yellow>0.000000</xmpG:yellow> + <xmpG:black>0.000000</xmpG:black> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName> + <xmpG:mode>CMYK</xmpG:mode> + <xmpG:type>PROCESS</xmpG:type> + <xmpG:cyan>60.000000</xmpG:cyan> + <xmpG:magenta>90.000000</xmpG:magenta> + <xmpG:yellow>0.003100</xmpG:yellow> + <xmpG:black>0.003100</xmpG:black> + </rdf:li> + </rdf:Seq> + </xmpG:Colorants> + </rdf:li> + </rdf:Seq> + </xmpTPg:SwatchGroups> + <pdf:Producer>Adobe PDF library 11.00</pdf:Producer> + </rdf:Description> + </rdf:RDF> +</x:xmpmeta> + + + + + + + + + + + + + + + + + + + + + +<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 3/Kids[8 0 R 9 0 R 10 0 R]/Type/Pages>> endobj 8 0 obj <</ArtBox[0.0 0.0 600.0 400.0]/BleedBox[0.0 0.0 600.0 400.0]/Contents 11 0 R/LastModified(D:20150819165053-04'00')/MediaBox[0.0 0.0 600.0 400.0]/Parent 3 0 R/PieceInfo<</Illustrator 12 0 R>>/Resources<</ColorSpace<</CS0 13 0 R>>/ExtGState<</GS0 14 0 R>>/Font<</TT0 15 0 R>>/ProcSet[/PDF/Text]/Properties<</MC0 5 0 R/MC1 6 0 R>>>>/TrimBox[0.0 0.0 600.0 400.0]/Type/Page>> endobj 9 0 obj <</ArtBox[0.0 0.0 700.333 400.0]/BleedBox[0.0 0.0 700.333 400.0]/Contents 16 0 R/CropBox[0.0 0.0 700.333 400.0]/LastModified(D:20150819165053-04'00')/MediaBox[0.0 0.0 700.333 400.0]/Parent 3 0 R/PieceInfo<</Illustrator 12 0 R>>/Resources<</ColorSpace<</CS0 13 0 R>>/ExtGState<</GS0 14 0 R>>/Font<</TT0 15 0 R>>/ProcSet[/PDF/Text]/Properties<</MC0 5 0 R/MC1 6 0 R>>>>/TrimBox[0.0 0.0 700.333 400.0]/Type/Page>> endobj 10 0 obj <</ArtBox[0.0 0.0 700.0 400.0]/BleedBox[0.0 0.0 700.0 400.0]/Contents 17 0 R/CropBox[0.0 0.0 700.0 400.0]/LastModified(D:20150819165053-04'00')/MediaBox[0.0 0.0 700.0 400.0]/Parent 3 0 R/PieceInfo<</Illustrator 12 0 R>>/Resources<</ColorSpace<</CS0 13 0 R>>/ExtGState<</GS0 14 0 R>>/Font<</TT0 15 0 R>>/ProcSet[/PDF/Text]/Properties<</MC0 5 0 R/MC1 6 0 R>>>>/TrimBox[0.0 0.0 700.0 400.0]/Type/Page>> endobj 17 0 obj <</Filter/FlateDecode/Length 882>>stream +H��W_o1ϧ�c�P7�'yAb]��h�I<L{���?b�`ķ�Υ��ֵC1P��.��?����������ã�5�����[����.o��,��5����A�_.͕Y�R�^�n��X������dth�����l� +G�Ɂw�,�������!�O���S璭㙳v�������y%�a^d(^t�~�g�[��O��o�q�ɋe���2�z� �P�cK�X���L"����4�Ш���Y��.�j�mm�={JU���3^�U��K9���� ����k����̺Nu쮌ϕ&���z�2�b�k3y~�}�$&IN�$�ufr�ˋn�!i�F *��9��=1��X���ă?�{l)C$��}7�CIr���[�!�����PG�� x���|���#�UtM�S�����]N�zїVh�SͰ(�BN~��O:LgH�q��c�)��H©�ZG#��9���1�R����C����g5`W@�%��('����VD��t2�����������'_/κ��3: �T��Ⱦ��x/3%�h9�<�D��0�9�t�xV��$(R��\�{�@��Fi�#��������(0�4 ا_�|L��jZH�j��F�#�H�^��LԀ8��?���V�?H�m�B�+��PD/~+.WQ�`�Ɲ ���=���r��P �5d�*� +`0�$O��JEڞ���yJQY�vTB7I�|�N�Ӡ�>1HV���V��{ni�����������sle�mzQ�Z�R���Eɠ!������A��Y��"��#���/Z�rRNX"��(u4��,iX����⋊�eI)+�`BQ��ޘ�J�������yl~ +0���_ endstream endobj 5 0 obj <</Intent 18 0 R/Name(Layer 2)/Type/OCG/Usage 19 0 R>> endobj 6 0 obj <</Intent 20 0 R/Name(Layer 1)/Type/OCG/Usage 21 0 R>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>> endobj 15 0 obj <</BaseFont/IUMCUF+Montserrat-Regular/Encoding/WinAnsiEncoding/FirstChar 32/FontDescriptor 22 0 R/LastChar 118/Subtype/TrueType/Type/Font/Widths[274 0 0 0 0 0 0 0 0 0 0 0 0 476 280 0 0 381 589 578 572 579 620 566 636 619 0 0 0 0 592 508 0 742 706 736 782 654 0 0 0 0 0 0 0 0 0 0 0 0 728 0 0 0 0 0 0 0 0 0 0 0 0 0 0 587 0 576 672 618 0 0 0 274 0 0 0 0 646 0 0 0 0 506 418 646 572]>> endobj 22 0 obj <</Ascent 932/CapHeight 699/Descent -250/Flags 32/FontBBox[-110 -250 1130 932]/FontFamily(Montserrat)/FontFile2 23 0 R/FontName/IUMCUF+Montserrat-Regular/FontStretch/Normal/FontWeight 400/ItalicAngle 0/StemV 112/Type/FontDescriptor/XHeight 532>> endobj 23 0 obj <</Filter/FlateDecode/Length 3654/Length1 5826>>stream +H��VyTT���;0CD�efPT��}��mXd,� �2����TM#�#j�Ԩi��ɉ5i�c�أ'�48��M5im51�����9]N�Ww��}��[�����z�[</�W;G���muv�+��z���4maS���rsc]�����M���L����.���k����$�ھ�np�Q���=����V���ަN�������7�����wv����u{G��~�u +�x �;am�4��Y5���p�� n끘th������щtLz�eE�#����ָ�K���d�sP����Opz���9%����\��<� ���/L�7|�?Ҩ������4L�b&٥�z!� aG"�h� q0�3,�" HD�aC +R�F�3��Y��,dcr��<���(B1J0���2�G9��X�� +�P�Ԣ�XL�o��؊�؍}x�p�����~��q��N�4^�/�~�_�u���x_��h�2� �qv�����~���8������=>��6��t��7� h�>&w~��X����6c/>�|�[��;�3>�Y��� ��W���39���_����Ocv���{0@���,� ���'��(n��5��?���Z�SFu�h���K�E�★%�٬�U�:�˞���Odok���M�F�1hb5I�ٚZ�֠�:�n��W��E�rt�����\�Y2�"~'Y��X<Kg���ղ���~�P�4S4�5'j��j�2B�������Ńb��[|F�.��k�Ub��+��X��w��;~�v�w�u�v�z���ѯG���9��:�����>N�������1��{���H�oѪrX���Ki>S|��(^ +:t�V�Z)�eF�FF��F�蔝A�4�d�n?���G?C���CcY�Թ.�S�e�2 Ġ�)BR�Q�R�'3�Jk�g�m�q�5���6%�?�R�U���,�">+���Z_x|E�5'V�x�?F��I٩d��W��.hK|!��Rm�Oی��)�E!AGy�Ҫ7e�%-krkl�-��V0٥",/��T&�^��h-�$cs�eev�*c�ش��[N�nfDŽZ��������y�Ҫ�&�-z2"�KF=vK�L�����tY�Ǵ����mF~��Ĕ������`[g���J�$�^"�H�f�N�He� fk��诈f\�TK�~Q�Z�X�nk��AѡE7����s���rxuo������_�/��@�~��R�ՒOvG�������3�*�}!\�i��.-;�K�%�2$�M��%:%�V��= +)b:��o0�:�ʕ�Ƒ�-��}����4WU�+5��7��Kˎ��w-\�faWz�11y�Ͷ��J��R��a"=�����^L�#�&�?y@!�6�����ل��}eAV�Pgn��<)fX���)����L�a�Vd�{G:�y�� ���0�z�Go1[ӘS�B��Y��L!Wq��X� +?M�l�ɭgª�۵~J��·<:*-:j$%4D�;5/.&���n�-t�r���:T�6"%�>p�b��DA7�z:x�1̓������';vݺÇ�j:��4��bC7?�I2~.+Ø�֨�w�Ɯ��SY̆�Cea1G0�[x�y�Y25����QhL^X����lF֞���n�uvi���ë237!��_`�f�%.�|g� Q���"�/���))�Ψ�T���\cYm��J۲��-aQE�_f �.�5l��S�*�����d����K�1�V/Y�' �3��]6Y��{�'��፷��p쮠�q՝$_A|x����� ��g��K+\�N�ωҝ�� +}U��,�Ur���w�=3p�`7s�v>'�f`7��J�p�j�.u��{g����t~Z�E���df1KG�T�*�E�SI�є�>��k��c��ի�=���9�Շ��ˬم5M�� +B�l.Nф=����O��J��Lu#�����;/3�%M{23�<�~��\ۢ�M�s�ɮ�-�\��Na:�>��U����a����^���jK�Ǿ�Y�X@IŅں}MMN~N��5EXH�Cڝ$�Z�VB��B�[}Z�9�|�����>��ŕ=^?�4'-�r�������r�x�����S�R�L��bѝ��{Ó�Ó�r�4��|0���I��?د��(�(|��k/R��R���oz��m�n��B+iw�����P�k�t�v{�u������`)�&�R�@hHCԘ��� O�^D0`��7�K����>����̙s���\��\��Q�D�K �88����%\�Qn�N�9{;��E�q��ϊ������#�� ��<3N+)�Y��4S[�*.�n\��Ա}S^Qg��t߅悚F�--��V��X�� oSmv�E�Dq�a�c}aFFZR���)�9���zW�=�5&���\� ?X견�G�nwhX�O��+�~�A,�r��9�5���)r��*X꼳CL��ŗ�&{G�o���ک��\qvs�〬V�����Ddl,2�)S����[*C`r �.��.��K�I U�yH��S���#��I���M#h�0u��4D�H6$��� 2S��'�H��E�Z2�'ȍ'�#�>h�,q�^b'��E�שN,#���|�*�>�`��Ef��\vC�*v��ߤ��\���B����9��u�(P�v�ʱ�� /ߤ +m!�h�.��N�fZ���;ȫ]��� +>k�h�'�V z��fZFI|�q1;E%� �gi9x�8L�� �i5� +���Qj�j�w�J�������5#�H��W�ܤ�[�yX�7Iqm��1� �uUE �۔�Vz�WS"gPr��M�l�y���ʸ�*�7`�5e���;��N:�U�ys%g�S�"���Gɡbq +�&����i#��lz1*I�� 9���Z)[�����Rb~�q2-�ޕ1P��"��*c�~\�R)m���y�*1�M*������{�.����M�~R�~t�7`}M�?����2�I�@�J�!�����n�~y+��������qpe�jJ�s��3�dUk ������-�/י�5�ao��i�!g�O�SH��xk"�Za[��P&�Q3�W�U�~��H�AoĈP?Cy�,��8�LX�b;9A.�����z�*��X`�J�Zm�ϰ%�i��Ú8@��y��{���1�vj��Xk'Ȃ�d�$ܟ�X�ī�S�-D�͔�"�/d7s�ߖ�,Q��g��3e�L9���~���E�"��2ۦX�+�}R=k-�3s�c��zw��ZL6A>d�q�Or<��8,�)���!�]&�2d���!k���l��Ґ� wr<������@8���-m�������"�aww���-���`_׀n錩���U��=�@��-ؓ_�� D:�f�?�����ވ��������P��s}���R[�HS��oG�ox��}�W���>�7ܥw�u�V$hA +���)@��Aұ�q��ۨWw����m��� k?l�����^��O}ԅ�d��YYU�q�j|���Z��b�|��=�E0���~���>hjaF��=�]'3y}�:�����sl�_�6������sjO��_x�g�3���HD�|h�Q�]�i��Ίm�~я�y~D��9ӑ?�HA6� endstream endobj 14 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 13 0 obj [/ICCBased 24 0 R] endobj 24 0 obj <</Filter/FlateDecode/Length 389757/N 4>>stream +H���uT�K�tK���KJI,��t(�4�K���%ҹ�H�4J#�Ғ�(H +w���q�y�y��~�3��̙g�<3����Y9El +�@� ]��!O��-@�����\����+BVKK ��:�OX�~�����WCa���iHKL����0�q�Y��� `�5��c����k�� +�X�]��x=����8���� �X���Ŀ�>�.�f���#aP������n� �D^{y8����� �d�pH�� st��:Y����c�xc �I�V�?S��!�:��_�����9[�YbQ�P�~�+rA +S�h�����Hh���t^�� �'0�߅�kY�X��Y9�Yq�q�p��l�'���W����z�E����E$�%D>,��^|t*K)�%/�`���\�ҫ����:���&D����[�7��dplDa5�|�mb���4�,�y�y��{�e��5� ������������3���⚅,t+w��h�l�������A �� � �mk +��xYU���H�&%��Ȥ +�q��O'M�z�3�K�T�@v[NUnn^\�o�]�a�b�Tr��t�l��mE]e~U�+�j�א�Z�:�z��a�q�i�����5����};�C�S��������[�\_�ۆw�����C�a��Q�1������;>�L$Lz}4��:%8M7�l̎��Χ/�}�XT^�]�X>\�Ym[���n�!�ycsk��kƶ�ʷ;��v{���p����I�s���0���X������ݯ�3�s��&�$��W�WW�*��)���!�$�$�%�!e$c��HNOAKIMEq�������������ƕ;KL�w�@��Y�X;ؚ��8^�+�Dsp����f���K�O��TC�P�p�J%���D=��+�+���O%$*������������8�I�Z�\�Z�^�U�K�_wL�������"d�x�����]�}�����������>�9�=�;��s���_G�8/�̹N!G�z�[<�=��2�|B}����P�Q�z�l�H0Wc(E�e�n�|�Pds::5&8�9�y�F�T"o��d�䳔���i�/Z�K^&gd:fg����Q���l� ��kJХ�e����J�*�+��篍k�j5���U���[�ZU���h��0�|�e�m������6�]B�@�`�P�p�H�����������?QM1Msψ�*�iϛ.��Z[JY�Z)X-]��R�Ѻپ���w�������?��@��?��5� ǖ'v�N��g���� +��W������3�g����L�C#u!��M�M�M�E�vAms˔F�V�N���A���̝GL�w�A�̬,���l�l�ؿs�ݛ����n��ͽ����+���!B�²"��<b��4$����݇kR�ғ��e�d���k*�J��Y*/TS'<�S�V�҈ԌЊЎԉЍЋЏ0�4�2����?M4I~�f�����s-�,"+�u�M�m�]�}�C�c�S�Q�\�R�Z��s�v����������G��i��H����3G�F�FaG�D�Ƭ��č��&�$V''g�$�F���LG��˰�4͂d����j�i�kh��C�f%V�Ne��Aq�YU�ڪG^/��Ճ�����[�Z{�Vڱ:�;�`��=�c}��n�K� ���Fv�(ރ��> 'R&k?���3�?�4+:�6o������T�\�ұڿ6���������V����ʝ�o���F?L����T;�:�>�::>�:�;��eq�vx^sa���wݥ��ʕ��'�_��E�F�O\D�K�LtAnF�F)F�|����ԭ6�\�`�@z?�m+F�;�L�wiA�h�y���͖������)���M���g�w�~_ �@���ZH_XA,�"F)�%�/�*9���a�Z:�Q���,\�B^_AU2� +�*����'[j��o5[����uR1u��h`f�m$1�xJgBdr�l�t�l�y�y�E�e$�fe�g-g#`�dGbwj��0���TOC9;��� �ܨ��ݿx�z6z�x��8��I����P��=A���!.��a�Axۑ���ϊ����}�b�G�-����ޒē����x�`�G�/����Ԝ��������q�_�O�?�0�"��������۬խЮ˯ǰı²����µŶȷӹۺ������� �0�@�R�f�zƏǦȾ������*�G�cЀџҿ����'�L�sٛ������F�s�����M����6����+����1����M����Z�����:�{������������T�?�~ò��~i��~L}��~cbA�~�Da�d�����~t�y�~W����~O��>~\���/~���|�~���`���C���x������}%��H}�1�X}%�z��}K���}�� {N}<_�~7��A�~��-ψ��|����|��Dz|+��E|[���s|���z}��^�}w�O@�}��-�~ċ�� {G�u��{D�z�{]�Ĭ�{��f�{�Zx�|[��]�|ϕM?�}R��<}Ǝ���z��]�Yz��Hħz����|z�=��{L�Nw�{���\�|=��>�|��v|ېI�8z/�r� z�;�bz'�s�Mzd�6��zɬqv�{D�[�{��0>|;�|���y�����y��a�Iy��?y�a��zY��vzݮ�[{^��=c{Ф�I{R��*y�߄��yf���Uy`��Vy���y���uKz��Zi{��<�{z�%�zȎ���~+�~��}��͇}W���0}3���}HtЄ�}�Zk��}�=���~���z��ɇ�������}�����!�~����Єd�*s}��Y���<9������w����p���S�w�u�����������u�VrU���W��؈|;,�뇔��{���R�s��Ѳ��������;����:�8����q)�P�CV���:4�.��8�����Ȅ���2������?�U�����p����V�u��9S��������c��b�փ����R�����.�ՁN��n�� ��U��38���8���A�/����ͬ�������δz��6�߆�ө�n1����T\�e��7݀t�XT����)�$̯̕�6�;���e�C��ʷˆ �i��mw�3��Sƀ�V7M� +�\��l�G�N��ػ�ځ��N�ā�a�5�t��N��zl�ߴ�S<��H6���*���<�a|��k�z|C�V��|�Ǎ|����|Ik���|�Ru��}26��'~2����F�-����B���*���o������������j�����Q^���@5z�I�`����ٳ���$ĝ�"�����c�ߘ���&�U����ij���|PJ�ˇv4v�y���V���G����.�2�{������������萾hS�掼O[���3���(����J��ьx�&�$�Ԟs�҉h� +~�2��gK�>�-N}�o��2ن�� N�%��է������������>�w���֣A}⇤�\fX����M��ݘ�2,������K��Ԑ�3�����g���°����[��} +�0�e��6��M�_��1���?���1ӣ���Ǿ���I��^�����I|B�̯d��ܪwL���e1$���:�������r�W������]� ��1���S{��z�|di����L ���g0��\��U��������{[���G{!����{ �ޔ`{&y�E{xbi�e{�Jr��|�/c�5}~ +~���:����f�#���������M�Kx+�C��a|�u��I~����.y�W�� ώ���әߎ���%�¡唘����[��w!�^�T`����^H��*��-����� 5�G��Ȩ�瘎��=�Π����4���r��v����_�ҍRG��f��,ދ̋������|�,���ƕ����{������Ҙ�t�ٕ�^��1��F�ő�,;�'��<�!���_���������Y�l�~�J���J��t�S�#]����'FA�4��+����;ۊL�P�f�&��ɔ��ޝ������ը�s@�夏]�0�E�����+:���ևSS 𧠨��jVPp,<XQ)�XVl�(Js�&�J!����K{�@B��E�.�e���WqQ䆓���~3��7���F�HI^�\�������ӡ���+j&Y���b�dML���{#�����)F���A�;q��T0��_� ^��9Iݤ�xֺ�ƢYFh�9Յ�hX;J���l�����n+j�ġ�(�m,ּJ�����(Va�V/���aؑ�@�Q~.�8_]���7]���������g�|�F�)-�/��MH�|����P��8�%�oFx��C��<��R�l�A�^����Q�l��z�rJAU�U����d*����N�$i� #�v b7F�*4ނ��� + ���pv�i�x֖�����I��o�����J۱�#� +���W��h�ԉ�l�"�kxwVjG�Dz���*��ߜx�W���:Ʃd��P���$�����j�4W�M��[��,]�ʫ$���W��$I�&��N���}�7¨ s������1@�9�TɎ.�E��zN�Df��*uwr ���� �*�#����,�h��"�8=���N� �%�=(�p���Qu�9s�Lӓ(�&��w�ھ�?��ER�AHi.R�~ Ԅ�6�����:�*tД3*���۱�x#�m?r~3��2�+�w����p���6�yXa�TO�#�� +U�¼<�_)�I�(��}��W2S�X U��w���� M��f�_T�)�����?k��YYF��K8��u;J$��þ*1T��>,��#h�%T�,�Qۥ{[��s�:��9�&^!Փ�a��@�!��"y�� +��.��Jl6m�Hj�u�,b�U6�+s���hܸd�-ʥ�}�wi���-s�un=0�Ľ�i-_�*)U��_ˈ����b$��na+;ϧT�;p�pA7����C�4��.*�Iߥ�a�8��M��m�.���ACi���7�\j|fi������ԫ)��]ޭ�j����ʄ���U�]�3(í��wh�J��c�h-�4x7���h*P0�H됎L����랇ڡu��Â������,�{�Bz}��8�v�g�g�Ҳ�d[�!XTZ�Z.��vl�A���g�� +{;S�m�`v��ؿ`~�?g�a.� +3�Ì�{����L�^�������W�����Y�e�4��]�L�<pq���������k���!��G��]�l�v���:DeH��Xq��E��K4kHoS|�X�ֽO�7����o���*�*�+�����2���h�`���?���k6ݤg���,�M{ST3��`�b5��XE�#*�і}�z�#C�//�����7��}��V;�9�T��)?�ވ���2[�ُ�]�n�$�~����f�Ќ,�d���p,��B�AdrH��]`u��P��V�k�aEV�vYN��U5/y�fD.�ݡ\ �1����Q�a#K��E�:�|��N[k�=�&[],����1$��ξ�B���0Y�(�ߊq$���]�!{Ik5�U�3�j�=Or���)�<V�� A8H��:YjD!��L_��|O����l�xE{EY[��9��#Ev�x���2�E��as=�[R���Q��i��*��i����66�`�����ώ,��+�#�,i��1����A2����@������ƪ�W���m���H�XJ�NP�+�)�̧�+��=l��$�zU�kb��]�i��[:��<�旰��A��r)<������+e.�� +�%���ӂ�B�s�W�����ď[��~�}F.+}W����t�=�� +��K�e&��,�^��-��v�a�(0�����t�tz�S���w�0D��6j��tl��.\�lVդ����)��-g� [ѭ�'��x�|�|D�D�ߵ�����v��wi���8�ư=��bY�� +���TC7j�KI���X�7�о��s�{��W|}��&饷MR����Q��rs�%5ԯ1�G���*=��V�DM���鶢l���`JY����Ke���\+��kl�=��ּ�sr͌� +����_L���\�E܋ʮܤH)�B���"�nĕ)J�ۙ��3g��Y�i&M{&MʹI��B+!%��,O���=Y>7o����k����!w����I�~��Ir�a^=�C�#Z��h��`W�u}p����)��"�z�7ff&�3����$����F�����J8Ҷ5���m� +u��R�_,^V��S&�aR�~Pf��LL_Dw��*��`\�-�9]q�������������T�I�6)�>u6 D�`e͢/���xq�Y%�9��ʜ�;�åO��d\˾�P�&eR�z��;�]����.�R�<o��Ρ�]�P{?�:�r̨\���ʻb �Ҥ�3|����m �s�؟���W�9����oZt]Rn��Å\�c�W�#+�n�I&�g����y��Ajs�N�06�HiD����'@����J+��a5V~�cR�I��̫�vwtU��c[3+?F|l(��i��U�����^+O�?R���s������1�Hqil��$Wþh����=���(�RE +��1�B��vџ��n��F/�� Bs�G�����M�Y����9>�ܖ3��ȗqI�� ڣ��5����V��_�1ȣ�β��i��JiX�0�WV���H[8g���_�/��� +n3�`� ���38A.|�f|ј0I��6�b�v�%�&� ;Y��㿜�҄#��d��D.)��.p�'��3�J�12K[D�uɥ$s8�I<�R�i�m�J��8�}��f�� ���DJ�ƀws�!�ʫ���r��RX��-\y^�*�̏Ld'�雲9?) "�q��^��5�/<4��i +��Q<���� +��;/��Ա�JB"���7��t͚��,m��Xdھ^�;촞��&s�`�Y�"������Y�����{>Ɗ�.���z^48��e!��R�6}��vc����Mi�oz���o�0�'�=�~���i,3�:?-���?oS,���9���w������#��R�Oa����������;� ?������p��B���� +�֞I����O�ݟ�e#}ԯ�N$�\�l?�]�,����y,��>&Р����q]�yh�0Aq��K)ĝB�F��ҍcH:��-h-�ǟc���f)�K9T��127]����q��EjL���<>h��;�|�U +��������d�p�G +ƫ�`�&!���8a��l���`83>�.��q��ɂ�n������A�9 +;����`��H��B�y�g���KB���*k�㰗2fF�=#��OM�� �eT? +m��Tm���_����OBۊV���<ɆF('�n3u�G~�Ȯ#�7Њ�9��[��١`N�s�.�P..콤'Knp��F��\�? �B>���-�����`����N��W�O�OW�B���l�f��x��W�^�<x==���Z/~�4/�.*g�Pʲ�<*V-}&���ٟ�w�z��Wq=g?:��;[���-�(�Z6*<�Ȉ��`p?���2���eQ�yў>�b���-_�x&*/��(�j����_�=߆�zF���`�Ld��E:���SN��ʔ@S� 0���3�|T�O�Ko�k��t��o}bF���z$4���-���,�.m��'j*J���|)J�6�B������P^�3ewܫpX���.��*��,0��7xP�ڳ�:2�X�OT�21|"7��=<J}|�wl\��}vGic��Q����S�]�<�C�jȹ* @8�-f�������݂={ñ( ����]�x�Ѩ�n���?�ϑ]�q�O��ˏ�ExyU���c�0��t�M�]��u3���j �o)(Co��~2�s�Ѓl�����x��֙�� �{��L�7z<��"�!s���[��H��a����*�{���1��l��1��,V��&I*[�v�$�#1/���5�Z���p(3��]�8��i2|(�2�| z�D���5 N�s֬����viV�`D�0Û���]���R)L�!'n��"� <v~�x��)�~�if�� +wnK�ܑQV�B�"�����Խp�� *�+ت�ED���*� �����(���o B�'{p���wH؆ʴ*JѪmA-n��WjGE���ޯ�y~�~?r�I^WO��@�����l)��ƶ�W��giX���"�C�#�k��nA����˻�r���)b�!�U�ڲI���b=��>�0�ߴ���y}ĸB)H�[�����Fs���V�+���̯+Y(I���(����x&��9JAI���'tXm�y�G�=�X[8�TK�)�2����<�TSR�v�x��lȓGO�|�g�/�{�>���4��/�g�R��F�ȶ��&�A�5���2�uЯ*B<�i����0�g�r+O��A��,0���-�b�u�g[�\~�-����4:I>幃A��uF�Ǟѧ��u�D���)B�,�*�?n�` 'qQIz���K֗�4�{��B_g�6�8�#�ʉ2.A�$69�!�̒�ub1&D�3Q�x��"�>ɏn��νx�VG�&��Tۨ����Ó)�sx�d-5��Kx�����ߣD&��1���±���j�d��GjJ��|�J��{��Z����f6�/vT�p̄ub�� ��P��mBU#g���B�g˷�)��-*�E +ar���>�>Ƶrn�[ɭ�F��-I���ByѸP�=��ĶK�UC w��G�D��}�����"��vN��.p�]�]Q��8u�Y��{�#q��C��v}sa���x_o��y�iN�r�����(� d8a�w�2C�Q�}V�8�UWO\�g������\�����yk�@��d���c��Z�t���9$��u +p��-���1���z(�=�f) +�v���ě9����2� w u��煼��ת��#����{P6�+D��q3HIi����%��B�C��b�!���kc5�&U ):X�$���[��b�2�*@�PkcӘ�d�oT�B_L1Uwi"�)��=�2#���pI9,�R�O>�T@>�;�bn�����D��PuC����fk���^�^��\��G~� ��o�L�Rc�Hqܮ=-8^5Oń�y*9��:-\�g8:T<��?*����C;��[���y�X���+����I�;��lRL߭�$D��vY�TQ6�Dy��Vm��fy%/sIs��mXP1�Lռȭ����vow)�QB�b����_�L�V�wu�p����eė���O*��|�+�]�(uH�װ4�W�U��.�{ �4�\�m.Q��w�����R~MAi���Rz+%�B����K��z�?'�{������k�҉�a��a�{���H]��sX}d����a~�3��_�au���Qz� ��������VM\ĵv5I0�L�M�)�DŽ�p���1��:5���,�&����4��%���!$}o���c��ޤ�A�]R^x���T◬M&/B�:D�wA��2�4�����?�c�d&g]5�b���4���a?������i�ǐ�� ��Ĉ��.OA 6�vfv�s�d��(5yT��H���/P��=�(�a��;zUs��b�W��x�Da�)E�ʼ� $�sg�PJ�r�e�Y�3��w��`�c��F�o�0|U[j5k��.�5�J��&�����e�T��o�r ��È´��}I l�p�jC���8c���5�J=g�%U��o�|L5��8E" +ِ���[Ak]�����J��͆�VB�M�"{�N�r�����Q���ih�Ц@�Y?��6��^߫ZWٯ�]ذ���c؋h�KSLj:>�O ɲ���.���ݰ��Q�{5mm<ٷ?^�v"��}�ъw��9��O��&�v��X�7�km[ �,70nΒ7|��e��P��\I;<��u�^`u�!��$P����B +ET9��ٲF��W��c����m$��="G +}K�e��6�~֔G_���M�DԿ�s`� g�]�v�p-9�\N��d{:�:�gv�H�_3fC;}�Ɠ�P����N���p�H���d�U9u�;���9$8w�����3�r�#�A�F�iD1�n�����-}��t�e������D��H�!5$��,I�Q:�ȖR���1�3��<�7���j�1�[�ЊT��m���WwzU�x��|����վ+ք{������W��>��p���:ʤ�JRqY���^���`ǯ�<�~�j��!m�r.�B�+��'���OyY+��fN*żt �W�$��W\�2�����M_�c[�g������jj�%WuU{{�,_��p�W��n%}P�I^�W�|n;c!�p���u�cʨ�N!k#���)k��sd��5n��6Q{H10���U� +���-�"{⠇TZG �R�,��ɇjࣶZw8j ICF���:�b[ �\+�?� +���oA n'a + +��O�j0���`�%��|�^�/si�_�Xǣ�Lqi�w]�I�έ�D"J���!y�!�Զ�n��0�R� z�WC��c�c�h���ūK�_R [��*)! OSo��u���Oշ�܌W���ze�W�C���a�����ϝ�L���/�QB�o�_��k�/cg���&MV?��֫5z�� !g����"?w��P͚�I�Q"����P�AdtE)q4��j���G�s���n�{"����}e��UM�rk��zvi89C}���X�LB1W�".ꕝ^M�����t?WK�L�w�DP]t�U�揊1r�J���ոK��V����GM;ph�շm� �v>��-wg����FN���cI�P�#q��W�����I��;�N�ٶ��A�)���H~�7i� t�hl�~��~dz�Y� C����x�2>*c&�m�b����{9f�1X*�L�� �#>��� + V@���g蒼]7n249=M����K% �;��,����F�\j��1��kl�Z�i���؊������ΐ�.|Q��9��а�$_.!��;�̿�l���E�,����ɥDi�������}D��3^�a`Y5�g{J=m��ɳ���y�3���C�M'�jM�-i�Ц�m���n5? �SJ�E+U~ �;����q.t�Xd���~���~p*Q�eS��%�.��Ћ�"ư��Bs���Z�6-�����6[\d;�^z4�`;64藸����ͱw���;����|�+&�A�f�LU��3���X�T��m�����)l�F�'l �V��ɺ�gcG�Ob�bɜ9�;v\�C��L,�>B?�KGC��e"�z-@��E�����H���</�s�=/�ᑍY���{��P��w\L�1A�|U{�_�����"҉w�+Gm� �$�#�n��o���x��N����+���}M�9�MbΥ�_@Tܲ�'1 �,�q��$;��!�헁h1kb��������Bo +�\��w�J�������uY/|ϕd<w��Τc�~ώ�����x�¡�#d��g3�����~����g�� xT2��ȵ��6s3�i75��ƻ�Z�E\1�\�ɺ�W�A' ײ�� M }?;ʂ�8|R�0S�#❣����CۿU��b0���L7ֽ`���hcEk�T\�m�+ 6�&�=����B�9)���곌���� \�@�^jk��a�ƚ��Ph�<��=T��6�K^MK�͋=�݊�$�Q����-�U�&�>ILp<�5������'��҉�����$>��8#�g�L�2�m� ��c�����1 ��c���F�w)�P��+�r�kC q�p/��u8#�!�*g��°�Pa�`v�u��@��o�H�`"Ž��:�z���_��Q<,D�>'Ӆ��WP��� .����`�x�W��3�|!6�� � +�5���El�["�,0� e���[Oz��0~l�U�O��+����&x��kP��c|u��$k�.�?�{Qp""k������r�6��isV�a���=~�@�W�_� +.<�7� +��2�#h?c~�m'r��E�_�xs��6����a��������G�+���K1��4���L^kUp�^^��_���m�S^d�Ш���'����>���}��5�����$:τ!E��[�b�Jx&�n� t�(��m�;Z��s�F5u�q��X�.�Ղ�BqKP��� *�����l���%{�ٓ{�'��f';�,TT,�b���h�Uq�2Z���3���;�}�����T9�vw��R�R;GD� +K�*��/@hUv������$�j�!�@� �vyבm���,W�|-͢ �^� �~�D�_���"��ĉ�����#c�禘�*�X/��Ϝ�e>�|�XH��;�:��)���d9gƖ�4�aB����Q4��E���w�,C +ۯB�U�#�>�SV�$L�-��5g�V ϯ*�B����#��}�np�þ�td�����U�$D�b&$^�\^�&Z"/˺+�-}��%�Z���:}��9���A��Yu�� ��rT�lP0�"���~! �͚*@5K�?�߫Z�-�P������=j��>��܈�[��O?)�a5� +�����?��W���Us����y�5^(ge�${C����m>� "���G�գ+�$�踿��ϫ&�� Xw��������8?��g��,'ō�=�"����/x����N����M)���'��������EF��q�rf� CįQ9ZY�$r!���6m<YZС.�<��V^�z{U�S=�P +k�X%3�x��fj��n%^�����i���s���3�0���q�h�$��`kܯ�D&���!�M����1��W�}훌1r����=2N���Sd�k�b��\��ŀ�p���d�W}^�'�S^}�+P�0iC��1�R� 0hDz[P����&!��v@�B��]P]V< �SܒG�L�O�NgK]+&��-A +�2���#�sL4�j��&�D���i�b&,�A��MS���U�D��9���y� +v���98�����j�c7MI�~�(�sL#�}�3���(M�^�N�i�E�K�E8�mi� u�zI�$N�r|}*��+�'�4��w���{�y%��F $��8��@��N�z��^G.g����-1Vfk�)��G�����]�u�6K"���K���1�p��Λ�P��8����r���>�)�4� ��V�9�k�J�$#��Fь�X��٥�C��p�[��ģ)C���S�;rFP#�I�m�K�G<��h/��U�-,C��O�kOK�YY�;�MH-�t��%�^N��ξ�B���7" +���O�aj��X�_84�V(N��-{D)��F�0�$�!�o�J��d�v/_��(�ǀ��U�H8�B��c�1����f�b5u��&�*�ҽ�n�2s���G40:�\=Y2�߯ �$bi�8亵M�$ҙ:ut�N�)��Eh��Dh��d�j�21|�*T��V�˰���T�5ȮM7-�^��S���84Te��hRҨj�[�U�G��U���1���K{�Nh6v�g֨�+��G?���` lݔ$Rq-�.ަ2��S�e�8pSՖ�k!�X��C�\�z0�0 nlh��j�<~I�����,K���r�L�)�IM����9M�_���c+"vҜݤ�L���$>ɺ��z���j>>��X�9,�ZL-j��Ib�k��ȉ8�˚?v�t�����x������P�IO}�_ay@��:����|Ve�6�����ubd/e�3<֭�z�t��e�a��'�c�LaM +�lz&,f^�_!��?�l����2x2�X�y���ń�3D����)�\�?�y�e�~��4��O�+�9$� � +���E�V�D<�O0�Vbj&��mLB�2Z܈�b9��U��;n���6L0 �+��oˇCr�E.~�>T�Sؓ�7X����?MM�!���Լu�O��t����PCbt;���i����ް��a��@gW��#�@��4c�9.D���o�z2>M�5��i�~�u0��q�s�wQ�9�ǸLt��삟�Mz)>���kɝ���I�;���io�"���U�)��]$Y���L >�$����$T����:gUo$���UK���,�C�`sCMAJMÄ��K��C(��g]���ٮ9�s�U�G�0?����L�5����QM%��0O�l��5&���`�Ƒ1,��x�'���{��k+�mY�}����-J�s#\��d���:�i/�N�K�������\8�H�����stQ#��-�ND�)�.s*�Z���y�m�n�f����\�1l����{��(E�=�VGW��9��s�:��?���w���ǟ�Q�Z�sC��6��A�1���ƃ��6K�@�8��O�UY�^��`���7��������j6�@�9?,y����t4&�}"�T��- +�\Y&k���V��x�녣3��9��1ٵqQ�=�b�eMq\��������`/nņ|���2��͌Jkz�D�mͫ�IR4�\~5Nl��օ���KɁZ]T�C�3�l�̅��D�3jSS�)�t��Ww$IX�[�w�V�� +WT���U�w^P�eU����h�WE�^ؓ~W�c�h���s�s��I��g�����`��w��g�s (�5������mr�����]���B`7Jf�A����aA�3Ɠ��G�����?{�O[�?�x�j�/����Z�*7�e�x��X�z� Ά��})��C���?`��K�c�M����Ռ��&)����Y�5����J]q':]$�؞�]Yvx�(�����ı��H1��e�U����>�_0�b�?*�b����¤،������D���;W�xm]|N�7U��13*�;��.�=��>���S�Üj)��CM��>��.��e�I����1���/�Q�v�Н���6T�kk+�Ɯn\\�F�F���V#���Xd���e�&~�WE��7�"�bj����u��^I@�j@�bQ�W��k��8���w��_�D��^��z���� x�Z�KA�_`�T}�] +x�}�Ё�M0S�,r����V+ K��O&�ƈ�`�;�E{irf0�F�]�� w86f�����fm_8���c3����V�<)�r1��p���� +h��s|p���!Q��P'�Ղ��ʛ����2�r�Ӥe��j4Y� r���, �r�?4�! U��q�]f�(��*&umM+�;�1� +-���c�8�C���j�L=L��1�TDJ���7���>����)BH�*�c�HY}~�xI,{��7��W����jW�ާ�ʇ��h�g�_���Yov�MKi��N>���Q��R���ǧ}��A��Q�j^��G�s��yJG"�?txt,L��>�֍p��_��>�Po$��^<�%}���K�D��S4� +�*S�<ܖ�y�d;���éIJ��~J�M�n>��ȸcI6��u���ɖژ��䩊i77�_�5W�2' 9��t�^}/��8%wd����0k��)��ͦ�F9����k����ih��3�Sh��PB�U�Lz��s���'0�$Y�/L3����o�����l���|��f�ɪ\AW#�si��S�-�O^�I��+�3��6���xas�� ���@M�� +�Ah��m�4�5�V�-��'ѵ�1����S+��~*��%~k����˝��ʉl �*� +�lك�=�3���_2~���OgP��s +�C�����c���d���[�a�ے{<Х��j�A {! ߲ۓ���;O'��9+wEH�E�����&�J��V�?f�iӺ j0�5瀶bhW�Zx�o=��ƺ0���z���hK5�m���o��v(Y�Ou����t�;���e=��R�*��yMV�n�,�$v:��Q�ڳE��.�y�Vl�;��svn��,��Wi.[�����@�����34S��D_!���M���F�>J柣ND ��@$�Y�~�-����C�Mu(+lBpБ��^��#$�~�2è /@̣�6 3�n�h� +�;������۪.��������3F��q3��\َv�Zn�Z"/��vNF����N�J2V{�#ΚV�s����e_쑮�T��a�8C¢�!Η��>F��L��\��M{���5��eH~7;F�� � �A���������B?���V���Y�=۩��Q i9�J.sӿc%��FVb�dեiL��`�a)kD���=W���������� \n����e�>�N�X7Ƒ2I��Yf-�to7���/�~��U��as[��`W��*v3_�`~����:k�����j�R("�E +*��� +��e)DDI��ss��,�f_n6�"���:hm�h+�]Aqñ��Qq��S�a����9�{~8�|�~b�h6�G���ZĠםN\�h��+��(E3�0�~�������k��T�MG�β����1�:zk�a'L��G�����2�>����,�gt���X&�@�?e%� +�����=@��Ih�s����)H��U�OeX^m��7R7�~�,���,��\j�����J�Ԍf�ͬ�����8!*�]�JR:��W�R�]�M�ɚ��P��Z��;��J�N�.8ɦ������,�[�r*�Α�]M��M"wa�X)Lbjd�`�>:�?����|:?u��>^��G���$��fa��.� +ʥ_��S��%�ED�8��J��=�ĕK���{�����6rz�G��G�� �����U�i�<����K�g��"���^ �q� +����I6����vP����W�y^,��u�c/�5��@�:ǹ+[��N��+�l�i�{��P�#^��y����v�,ñ������-��N���ѳH�⺣<֡g�x���V�</���nb���6����Ρ �+nhB˾�P��oT(�W��#�#ĉTw�ZU}� w-��v��T����-9O᭺HI�z)����� �z�9��R'�d�I5��a��Z��GS˟�ag��W=��.�P1ٜ y?����2����X�)r�4VaG������X����Be�`9�Q1��͚@8�5�����������$���W?�D�}��z��2�*� +�����p�t�+����;Br\ܕ�'>���-��v��C�Neʔ�����L-ʌ�q��K�H���r�7�I� d<�����B�gNelB^փRγF2��A�qCR�&�t����7߄��{"D9����u)��C��w���1��t�}?"���'�[�7o�̩�~�1�{�>R�u*���ʖd�C��l���u�tqf�2[�l�~{S4�>�J$����.nQ�nl�P�#��x��])By`r+��w����LH?����VD:�|��iU�G��~ժ�+��&+R��b� gP��>��}������W�Թ�k�Qǖ]WSkq�w���Z +�D�Q���d����V���d�24����K�G�M�v���U35��K�J~�4�&�j��w�J�����*��y�;��X�߉˔��O���@��5�hw)��o�-9E:��_��̂�o����&�6#�V��(ѽS�-te$�פp}�4�%�4m�rn�z����he4�KX*��KÃ����2�9�ʩ�~���'Ǥ�l|O5ÍB� +�;�^��j�㛑Q�`�exH��;�J�\*�`l���˴K�h��k +&����t���F|(��8Vǡ�ܷ�R���:ϳ��o�G*UjSKk��nR���gl���ޅ-�6���&��Nŗ������7O�4��rGm��O[du_T��vY�{�̏Iy�\�aR�Ky��&�P�7ݪJ)�l���"�W�5�{K�� ���S_����j�0WSW;�w�ix��F1�^l�О伴^�'�1���b�%�OA�����X�hq)L�7��j�}=�9PX��=��n��`��ɗKX#Cù�A *7{� �j��WܴT�By�����ufכ���d=�A��f��]����F���=�_u*`�q������+�_i\�^`BaE�|�S&����%Z��a�8����+Q��g�Q�[�IK��-�j��IKr2T�cju�=A�ʧ�Q�"7��{ٮ���ם*�X|,Y����z����ѽ�����}�ƈf:�jCo[>�]��x^���h����lhNr�ϳEDk��c�C���Ǫ ת9��c ���H�t<)��}�z��!�hE~DBӳ�2�S͆��i{;�o��u��I��p�??砃4�6ٺ��^"������1�R������<�-��65s��j�p�C�����Sjqi6dzھİ�紈��4�1�.��$�5E�G�9���:��=��o���b��쾄v#��[��x�ﯦ��AF�+T��������(C@RQF��7�7�2��I$��^a$�Eq��>�.�AE��b����i����O0�����]Т�K5ΫPÛ�G������ ����Z�d��J���*�$d����^�}E�*֤�>?��������Ƅ��������$d��O��� �_t�l�%��$^7��[�K��S��ECq�z�"$]�*���B]��}��W� zT[Rk�"�����n�]�E��U�Yv��FU�W\�B��6�-RB�^M��e�2B�4�<ZR�V��jV�y�~��O�� +W>��/w�ͺ�h�4E��k�5˖�<1�U���[�t���D��>�Q!�.kR��涧�7�u��J��c�>�c�� +l���/��i^��3;i�����ڐ�0��s����Ā��Z�n�S� +���q�W7�N��p:�([���5�6�8���V�i�AFޜ�~h�9�P�ldüj�2�dO +�+����6��1�--��1E���wv�� �=JCH��W�3��4&�x��8,���&�����#Rc�3D�vz�6��RS��yu�_N/nm�ك��vT����֥Y˼?��RFװKz�n��9����Q��4�g�C�^�5l`�P\ܲ����G�&���ޫ`�� ��9�P����ҞٲX���r�6��� +V4,��{�a����\tcY`]l�ǿԾ�a���r�鴯؏=b��!��&����Y�b �^[\�aYt�$w +���[��R�)���i��[�{$��7f"��o���X��p +��z�Bz����'h�O|Ō4ǐ�|-�j�� +:���}̴a��%Tv��5��Y9QK� �d0?�$��ćH|�#�u�D�3�p��h���r�d�@,@Xm��VKY��@o��u��([���8#!OM~�.�7SoJn%<��I��dZ��=�1�D3�!P#4����(|:]SYd���_��kG�����Rh�+Ot�B���%�/e�䱖�&]�h��r5�sl�or��Q����"F�,bՓ�*2~��:ʼ��i��[�������t��˦����~M +�U�6�DU�e�"udPO:���]�x+����G��B���]��q:�ʥ�'�:�-ML3\�F$�7�K�3��C��*s�2��z�F�s�'�Ô�����̼K���s�����Ӛ��w�ER�� �!`%aT��H��v�R�W��SP�ƅT���}FVArB�[��SS &��}p�`� �~����_���1{�,y��o��������{�30��[�b�K���:w�3��Mn����e6�sz/0<x��&�3�nj���@���_d �K�Bٓ�! t�r��!�6<��rƕ�KjT�;ҽ�����.�Z������.,��68�MUl��{D6v����@)tmp�y�_.>OG�" +Ü3N��|���/�'��O��-R_�1Vh&N�Pz8de��� 勊ZTH;X����Q�6�}��+���'h��_��|ȋ��Cc�����u��H��j�BA�,�N�OS���{�3��� L����`]���1��> A��� ���rxӴ�*E^�.��ؐ`����Q5�v{`=W6뼟�\9a����vGO��Xc& v��1���w�~�����0�W�:ʎ~��f��: 0�/˵��%�m�KRK�A�������c�R�%� �P�#CS��ߥ�f�mD�5�oEx��1�7B����0����<&������Yd�8"1��wܡ5�� TaaJ3p��5����7�A>��+��y��I��M���c�u�� Zd?�B��k1���x-���r�sV��9s�H6p]D�G�g�O|y��5�S�$a�E�`$�Ls +[��Ym� �~u�8��p`6*Iߕ�`S8���8s�n��9O3nX�OE/7f�^�l�bN�[�PB�F�O��.�9����Z��_.�5�>�F ���S��̉�R�'}ΪѬ`_d�X�|�{�d��HXԾ3�QlZe7P�R��q�ش�O5����OkZ��r�x5u`a�ǂ:��*`�T�)��,� +DPQʮ���dߓ�����J�����Rk=H+ +*�#u)���h��) ��)B�6��s�9߹瞏��H�ZG�z�G���T�"9��3h�D�ͺ��s��r|��b�4��y �$��TK ���"�$��I��~�$�v(�B��#].��qi��?�C��N�����~�ޱ�|��ܷ�LcO�n���T~������vxj��̦5<.��f\K<��2p�:Cp���S�y,66��>|z�C +�����E +T�)��f/��:X1�}J+��>���_���~����Q;�^��ㆪvs&�۸>�.�k�7��yZ��S��:�˩㜍�r�ݖۜ���aKa���!l��.g5���7�Kv�0��!;ڗ�f����e���%�]"X�T��J3�aժ�lwV�j=v�姠�α���e=b�I/��g�H&����:����g,(y 27�>a�b�a�8���8f��VV�q��ɌT���0��N���������ɉB�����`(�_"f��o!��t}Wg��_0}H���X�9�,�Q���x���=�~Jٹ�x�>�����ӱe�9�M���2mF��S��)�Vk����-eZF�F٥bt�g0��O?�D��ǐ%7ey��ښ6��W��S��C��y�e��US}��l�`a�8i ��g"1лJ�"�|P�Kڝ�c�,��$����+�&���P����vꖴGBoj_t4I�vq�f熚(�e��C��!��b��^�S��b�Yi1���¨;2��W�`/7u�h?4 +����!��z��@#(���T���6��^��!�R S��#�>E/�S�q9�z_ /G%ӈ0C�9�[ۼ�@�(٩��P���,�}��X�T�Ok��p��QȫU�G6�� �x�2�e,��>���� -?�ϭ��QެYz�/�T���5�FL��^`�tީ��3�\#�������̬D�:�,�v����w[mDW�����)��TB��Z���`0Ֆ`3t�BQ˟kk��s4�1y� �`�\��c�V�#��z`X�Hhw�A��0�چFTy��qӵܫ*F˪�%��*����/>�9 +�gS'�"b'zL=N�)c��s�*����b�R�����)W<�#�S ��癛)K���� �� +&����L�\��9W�t�W!Y1�������7i*�%�����wJ_������閥�n�WJ�!p�����-0�T`�:K6B�+��S��z�l��L,~��J#ZL�HBEe�߈E�q1 +ڸ��TD}�bB;��*O�TC�nՍl�$OY��Q��0m��z7�o��9NŻ�|h��DV�[V��e�֩b7���Y��ZÖ�H��l�����~I�)ܻ�J�5�����oO��ݑ���%(��,�h�Z��G��ҼmR�d���!��/NEWutV57z;�j���j��s���^�^lD�Ǿ0-a���_a��L���w���44簍b^��ppi������&n�X� ����uƻ-�݂ �-c�Y4��_�������g ?�j�G�I�fH����%��J҂[��%ϩ�C6Oz�vW�z��oZ�t�A����$�?z���;��ؼ���FT2�/+��0���@��@S<@>0b��S�uq�w;j4S�'�/4s����E�թ(P[����V�^�5ƊH��k�g/�ۄ�w����0��*��֭ �a�j�yB��5�TC��J(�_��F�4����!�m�,R��N� �?S����9�� :״��O��f��O�V��"յڇ1���,V)S��@�._ +���#��Q�`�K���|ͨ%c�j��/&\��: [��F�t�^Z�"��q�٤Jm�뙊jMarח�`VCg +��w"�~><�� �8�i����}�X�T8�dzQ��VY<��<�J=��E�ۏ7G8v6��Z:�%���hBò�94^�ԥm!1���OD>�p%�H���G�����/�Û`rq�;��N�m�~M���s�\��/���Z�h�:�(�����MX�а^F�.꜋�.�Y����s}5�`a�����(�(X0�T�+JS���4�&��~��|iB!! !)$�)ʰ����WF�Y]E��븎3x,��˽�}���|�d��c� +��|�i-��0�Ws�� +Q_G�pRj�y�0����t����j��T̎�ԍ�D1��څ�ڍN�:ka?���7�e���k��_�%]a;�ז���F�=�9��-b=&��Mm0-�vD�'^�j��+��/5(er�^�+E��L F1�$�1K���WE|f��O��FMK�����m��:�:1`�ڥf��X�ЩM�*i�9�� +l?+Lw?-Nx��͈��wɳ\C0���瑃f �s����M;iđ`��$����O���0z��*Rٹ�B9�@�"�k��5�����v��~�.l�B?�u�g�]�ed�����8J�A�j���um�.��D�O��^^��v:�y;��ske��+,L�¶v����ŝ���Ҽ��خ�����d��_��5�Z����;q�#�k>���� �MU\��J����{l*͟��ґ�3Do����y����"UDc�����u��#H�)BP��it��/ v�`�_�Sʝ�{�e�5mp�Ppy�=�-2��[���m�+v��6*.�Wۿ��Sǔ��]� +^DMk��,2�.#��ɲ�\���!{�^��I4�Ԉ��.~�ç�lDc�BU\b�"c �j��v�����J�G�|�H`_��2�r�������H��ѥ� ��t��HH���BaG� :����B�f��{�'�9 +[�j��aЧ��e +&h��z6F�d�y?�>g�ۑx&�l$����^���:����^���n����x-'-����]�O 5�������@S� U��ڏy]�Tu �_,z��WPT�|BJ,ɕ}`8�ߴy?p�7gˢu��\JO(_��vOUue4���+Q����bi�?A.j����Cxy���R���J�駥�P��t㸲r��T��fd�d$ֺ�FR>P�a�L���'���v�����2M���*���T�]`W��*�cD�*��h�A�e#�"�ɆKO9�J���KL��2��J����(KgK3jԉf��Z��nL��5��o��M(�_���>�FO����ӹGi}<���@w��#Nd����hoo4�Y�̾�Fٸ2�����Y�A��z$�W��֜5��Copl�i��\����3�2�l�;��a�<;�S�?�B�>�<A��a�rL>�z��pr�j��s�m��1t�Z�c̥��{�s�/���J{��c�*�#�3��ހf�ϡne���h��-�>Bc9SJ���"�չO8�'�8ހ `yH�Ϥu�-�*`�� x[c')Oy����\x!�Q���S9q<o�c�����WSR^��[H�{�e�U���!.$��,]����(��1 +�oe�*�� +�p���}����%�� +K�"G�*� yE�%��S\�#���V�9��ۦ2�4=���ZH�W}d��UU��$�U���>*;�$;�d'=�NY��,|ܶ3�4�����q�T�=�ka%���h�s��䬺��U�X7Fl��[��o��1a�puxf�9��Q�Gk4�;e +˸�7荇�5��xB:�y����Zd�ͫ,�`2��?_�a[0�~9iYFs�3���g�� �Ë9u����<,yx�87��� �1�����Ja���,O�@/g���O�㔛�9�4 �|.]�1�6��'�^���@1'��p:Xt�������wL,j��V���Qv@�wl{έ��̱���\�?R^�UV�\�GI�+�����9�����D�0���3o��y�d�[R<��"�"��" +.��2�}��"!<�4t�H~(��-r��2��5D�H@��l��"K�����濣,��/S}�������"+���~w�������F}V dR�z�,��:�w&?��C~Fq��J}Jݢ�����J��i���rjzE�gU�#��p]ZF���%��+���[�Pj�e�w�Vjl���W�7��wR��/*��C%�%�j��G�x�@EFH)&0_����Օ�|Xu� +D���RNXA�\0JS���H���30��7�͛7�3C�Wc+��U#�r#aQOL4E�љ?�s~�{���s�I���y�?�y>�ҒL��ָKd-ޣJ1�v��*fH �6���h�����z�+~B�O�:I��Qq�Z��UՍ�P�[�U��D#�BM� ��>$� �z|��?��^�������!J0��W8�N� ��W�zX��f���щ@'h��<� +%sd�R۔e�[�$z�,��Z�2�H5����[&Ht L��� ��U�O�췯�<�u��ɎrE�ᾀ{i�,8+ןwM2��O��\��7I8��i�l�2�ewkv"9k�r6±��U\�R��*�q��o�GCxxy���;�:j��Y�E)a���ΰ!Xid�j�� q(���8�S��=���l�(�P��9Iue�&��k)���W1����=k��Z�b;8�zB�C�����4��ڕa�v��?�su��UuP���\Vf�>+�5�2��j&�P�6���uR�ɮ�! +a�+�r���k�!�o�4 ���`��ܗ�P)f��%��V��Q�T��F�(Z�]s���,��TR�|O)O?��h�o�# ]�6y�л�)��O�U�,F��٠����E})�g�s��ٴG�y�Ҙp/kw~˖��I'Y��;Td��g�Y�U���'��I8�@F�*�� �8$�I���+A2((�+y�8O��ϋW��ȗE�� {բ�b�W�"@�}@�C�t�e�Y��gv�ֈ���H���o�fE`�ea�<o�V� �F�C��k2������* ]v%녦L�y|�KJ���3��P�nW�(��<��yiBVO��h�P������|��q'�9["�<c-�����p����!p��w5�ϔ�r�)�^.,�8L����o����қr�7��ȶǫ��.�@P�p����"��X�SI�3����I����k�TGm���W����Vb�u6��Gބ�����`]O����ZQ���&'l�T�R&"N�!�v�G{�%���^}T�1�v�:Ȉ�\������(�IW�f��*�ڮ��ʃu��*����lg��w\W�d?�'�~�|S6�|��ɖ)ݹ��E< �K��7���b�%����J�\�*\D�)��e� +��2�G��2ћBjx$Z-����aV#s�/�h"���K6WZ,�ɳ����L�9�0�~G�"~4��5"[���K��4�h�����q���ɕ�����F���a��1U�_��K�Ī�)��P�� ?Q9�ޒ"��zܮi$��5I��0�]x��oܬ��UJ&�]�:QS{%K��z����<��~m댋�/7�ƣ��i_��y +I<G�dk~��x�k�ے��1��e'w�7���۲�����U�y��ʪ����\���P��x��V���nL"�N6t�Ħ>�gbN�_�����4�!/�e%����O;m���ht��Wv6�������[���i���������yF�y���4ʔa�tV�]�� au��� �#������Q�Ym3rM�/q{�~��tj��D�� �7���f�i���ɷ ������� �.=[�n`4���qSh��B�r�x_�5wԐ�%��n�Q����~x�'G[ �`+qb�]Q�2Ը�i�=UGn�~���ڋJ�(�����Aݪ��d�����E�7��K�z +M��]������!}��j�nh-Cզ_�魺��������a�٭�D�fr�j�6�$-�4�n�U�Z�F)�Zp��ux'�@��]U���/�ٳ�ۿ�3�Ug`iU�}��ڰ��U�L��W���u����+��S��U��[���;u��������XJP�v��O�ŀ��{$�KF�,q�Q���r�u��H��.���}i�m����fZ�h~a���t���M����B�b0*��iW���C䶧���jZ��m��n��[nKfi�c�+.�&oV.���&ʭ��{���5�_�s�9�d�m��I�A. �*s�5: �1���Ů� m!�|f���l'�6#N� +Z��>���\�oM�k�CZ8�)*���b�EE@��(2���7{�I�" $!��0a�=+v�U�ZŁ`-x�E���JUǺ +����~��~�7�<N�z���Q���T�!w�����B,��C)k���E��+��+��#�6�-��)��p�*㪝A �����Ao���c��c~�\_xb�5Ӽ�����z�g�Q��u�}�z�Ge��X~ >T�S�s��V6�������i�1=�2J眆Jh�@ U���u�;��7!�0 +߽�\�醮���������%-;��=.��e�/�T�7D�$v�{�.ʫ�����|�Z�Ѯ�mcDֲ+-C��u�_��{�>�1�H�1]�"�D^n�R� �ٺ�:����E3�[�h9���������7�TJOW+3v��Limc @�6'��[�c�`Ǧ8v���!���b�R�{��1�_ӵ��u���o��P��E�2��\@;4"�mO�������m{��ߺE1�d��A����}C=W����B�}[3']\PJ�G5�V��mnY�GXy�ahd�'J�[U~ v��W�ۅWo�]�Wn�G�n�R���9H7�Ѩ��Au�1�v�����Zm�]lU�r��T�V�A +sj�6l�hm,M��y�4A����*0����v�J��R�?�� �Ĵ>���2C!*�#�q0�MJ!:ŏ�C�����R�|�d�F�a?��2�݂�c�h3��dB��z��SI�t?�%�L��m��F[�A��x�Y�G�ҏ0m�;GY1űh%[�sጒ@�9� q��_8�G>r��W�n���)jod�E��z�C�.q�JviN&�If���8b��g� +� �v|�s��d��%:uT���f�����&�L��0���~�p����.(R���U +;_)�w%$��/���t#� +~�#�u`u[�w�.��q�s����Y��_�-����*'̳ɩ��k/���)2* i�9��$�7fU�z�fl���c�9}�]���,툏WYC�I���kS�-��t�y7>�T!����<v�`tF�W�V��"�)��'����U���!��<���^��D�V��"_W��퇖���6!�{�9JJ�j��i_U�(홽�c4*j�����>�����26�����Kݲ�� m�&c<kQ���Jln�'�I�y�T>��ӣh����'�..+�upC�6�&@j�5�t���d�����P��0����=��I�˂Ė���� +�</��BིY%�V(��q/ܦ,Ǘ �9(B��0j�tI4 �S:�q��ԙ�1��K�h^��ChhC��F�����( �|�|y�0%o:TA�B�Q��yPI\�;hVʓ���2J +ĥ[�Q�r��_k`��9h�� "?7�<18�����~���Щ� t]Z*7֡�^��%A�nj#���7L{Lu�7�7]ČY L��L�; +��i�\WkI��S����y!KC:�31hZ�Pf:�߄���0��C�>C�{$tR:(ϭuO��R4����$=��jl����uq�1?פ��9��S�i|c��q�F!�_z^�S��K}��`�d�%D�T �wV�>�;��<�'�V=�(�5H�%j���WM��V�#��9�Y�D2��֓��p~�����~J��}�D�]�gN�S�s�jJm�n-�>,v�g&S�L�l�#�����>���^�i���8��ʞ��%��4'��R��JD��h�RN0hB�A0�(r�0K+�a�������M��Y��|"�E�G����E_R^�v���4�/�?��m[˨�y�N`�K/5[�7�1���[G�ؒ'� '�铯R�G��hqꭁ�]��>���iI��X� +5�'�\�GB� ��ć����d�^u��x�+���[�^��%e�� �֪�p��xE�� +� �6�%!It�ި@�Ҿ�#%������:��*��h$r��7ש�ׁ�55���Ց'I�+6��*ЮwȰ��%U�#��zD�+J�t�� �B�a�Uؕ 6����}��uO�r��7��d����P�����Cu}FEu�a�7�RV�"KS����T���20E���N�{��^��lk��ƕ$vW��(�,�F7��bˢÞ��O���y����<"_��)���.k�h���[n �9W�?g��ڈ7��yș�*����Ӽ�uA@ �Op��I�R��rP�(�$e[i<�H����������/�\�t�/��G�inQ��a�@��q�I�a�{�Yʒ�]��e��?D��98ߙ����y��dx�,�8�?����Pe�1�N�W��wA�i��N,�B��=�%P�K����~�҈�G�!Oʽ��R=e�"!�]:�:B�I�\��MJ1�j�G�K)b'xL"W?D\G�ԝC��{���A�A ?u#U���������UJ����ǹ� H{�F[�5h���[N6��){((��%��>�V�Y�R +n��#����(a����F�q�&mq�3%�\g?�%�ӆ��M5������X�D3�b$ʁW�� ����ƿ��5&͔D4�®K���c��Ꮚ�. +��1Z�o +^`��~¿`�6z �q�����aX����ǰ�)��Ӽ܄'��84�n"Db.������yC<K���d��},��{�*h� +ڸ�h�>���wMv^c��8�Iƻ�(~��j?��� +e�o��y��l/��Dl5�����Żר�p�y1���ܣܵ�����^004�{�����.��%C�A2��2�d�Wu�����Q�>�o�kL<������5.ſȠi�f��fh�7S��-��|�^����T�jX[�wC�Y�*��sG^1�Ve֗�+�˃������L���3� ��/2y���{�����+�.�;C�t��J �}�� ���-��>٫y6q<������<b�s� +�bk*ĉ��_�V��������T�m�}���D5�1o��U����Q�u�*�n��ҹ��D��U4���|>�W���x�A�_P�Z�? �Q ��y�����1�>y��K���\.�!�O�q�M�� +0C�l����];�S�k)��=RZ@�[ɷ�5�����JBe�ǐ$��Ni"�0-�ú�R4H��~�9.☫|Dϸah���-�)�r�~"��e�oM��������K�%4 _7�"�e� +QD~�0T��.��>"x*�O�>�酧��.Ey+HVy55R���Ws�����Ek*�PxEGB����;(J�X��(8h�iq�mh��^��0`���}���_APW�D���L��Z�]�<��4��zG֦`��oy��Z�R|�u^��g��C�F#�n�r)��Va��5�ƪw�����9��n�j�yI���t�� +xI��1b�Iy�>}���-A��گ����OSh��KF�x���6xq�qQ +�3��S�U���\ka��椚̩�Di�~�?{�>���J�3m�tߐ��Z���t����]�Y���N�ju]�ɒ���QY�lZZ�s��NѴѷ���W�>S���ݥ0�B��j������+�7��q�҄fU7���m� �����:�8���^�;�#�eտ�+���*,�_����C�Y�3����M���S��U*���L�X�.jQ�Ȗg�_I��W�J5a"9R��'�C�\y׳qH)��V�U��-Z��.�\+�Ѥ�/�a��en�/|F�[��?S��Pk�r�"� +^�Y��>����V�H9&ya���I��x�Q�<�zU1\��� +ٽ�l�*7�}���hu;Twfa^���cn����YS q;)oZ�u�G!�uT�U�Or����lk;�H�F�-�x/,u� s�m��>fd��}�+] +U�.o�.����=��q�-y�]�[��v�i�R����g���k*�`/p����LBu���+��A����@��[�)��&P���YQ�?���i�m/��K,�Y�*g�u��(i�2�`��V�"f��JSs��=�RU@����7+���>d��ْ���s�m�Y����)�w�=U?ο��3D�����qjv��8<��!zg�)�b���^�[$z�RYjT����)�Ԭ1�c�?M�2q�=�@��?��ܣ5�ew?SIf�q���D7����k�\��L�24A<D1` (T@@+���7{��d�I 3*8����:@-�m��q�*���8r����><�u���ݹ�\��id��Xm�m��J����J������"��U��jb'm_�z$b�"�uO����b�M��q_'�is��ͼ?M#mp_=~m��=�İ���+ȡ�:�L��;48l��mb�3�埒-m�$�Y|H��n��]�c�k�k{>3�}��1�r�@v��y:{�Eͩԡ.��,珈��~�CH{k�s�v�_l�毁@��"�l�OR�."0���Fl�]�]C���˧�������M��f���i n�q��˶Q���{�5�����6e�f� el��[I��u��Y_(i��&;����t��o��� ������5��k������Z���/�� j���j��p��~Ch��⨿���䦿�iR�s!G�-�����֠���5������ +�����&w���a7W��AƫX���U����r�8��+}E)�oV�ӃIÌ}�qZl��h�<�gw� +���A��?�=��$�6-�ޡ|,)!<�*�ǘ*z!���8�߀ϸu��Pp���D|�Ŝ�e�=s�m4'���Ң�ؽ�YaP�OZ(���vj?�VG�gxI=V��-�̹��u�MCJ���H_�-C�]����B~�2A\�8����*�E8P�T��Δ�To� 9/�w���h������������a�ߣ�b�y\��'�F,Ռ�o%��w�U/�ժ���n�M�*��T Ƌ{�5NJ����ԢT�9L��;y_fX�D\���u��ַA���:x�"�)�V%�V/*��]1���#���)ԋ���@�X�"�SV�Ӆ����4u�.�f�?��Uչk�%��Nj����;c�~?�]Pۺ˄�W��Ҍ=V�듍�1� +E� �ֻqd{q��;� +�N���������YH�d�fttc����#&�v�P�tQ��jd����1�o� ���R)�ʽ@}����<7� �&���8�w��y�y�b��H��04���͂@>��o` �����~�M�<��a9����(��n����c9̼4��<o��/��E1�������:��ɕ��7e���.{��Շ�Pi WE�Y���x�ޝr�� +�EJ�7�T����|4��'�r41������� n�s��#?�Cśhk�6�/ϻ����7�n ���HIT�����c6�߱=�zz!�?z��_)��c�)�u�e�T��}nS�3��&iq4r����E�U�Y�X\�K���88IX�`}7yIi�� +��S��iG���r3�8Eiօ�$f ����l+n��.���*d}0Qe��:F����S��S�퍆���֯�SȺ�8��~�%;�[ژ�l0~{��^��KbV+�T �s�I��x)�oe���q��ra5),k�xU����Q"��YN�פ����ܾWu8G�Q�d�!H�9��2�'���31c�C\��!Q-�;U���9� �d�Z�o�8C�N�T1+�hڟl-?63��z�,�=]���Aw7!�z6��*H��H*[|C���_@m���s2U�r]^9��n������0�"��PuT�t$�#:H���@�бjy�b��~�=�噛��*��ku��U��Q�m�9�]'pu�����d��SۖHgi۬��6r-���>`Oi#�T�2��"-�!NSn\ z��$���S�C%�Q���%;���O���z�c�T)!�M�.wf�.P��o�1���U=B��l1�F�#F0HD�\u̞rڜ*��u�jQ��O5��u8�E$�7:"��І���(Uu�AN�gulW�YE�*Z�"cT\���k���Tx�l�x)�$��<�hT��',ʷ� �����y�={V?$�N�)�D��P�Vl������]:�|�d��̏��"���w1*��=3*gB'����|�'#�sB�F�S^PR�8�?� +$ m�:��@����l���(蕉9Ea,�_i�ǀ/O I��4�a��S8!��%UJ������8C�(�&2�J:�;{��Mጫ~J����dm��rFW �jg�Y�?��;��s�8Ҁ�����Z6\Fq�D,���H Y'{����$a@Q��k�^���ж��r��h��"j�}+�m�j����y��s�������әM���D]�_CJQw�)��/ʹ�5���״2�s�7�v���}���7� T�V���S���6~G���oLF��YH����Km�k�v���~�U��.+�jp��o8Ɖ$�5�)�\R��������(��g��H�m}�w�5j�N) ++����������p�vO[n��Hj�͌%=h����4�^"��l�q:i����%S,��P����=�Ƌ�G����T���� �B�ULR8LW������$G�xLcLS��},�?�E�;�8Q��E�$?\.�e�!&���KK����J����G���7��|�_��Ҟl8!>�8��(Y�B�I�Y�`[�}��.�B���b��T���$��=U8O��ŧy��P��-x��$�]��0��_��� +�j��(��sO�����H|/=�wKR���������`�p�t�l>f*�ӡ����uU��<�=�T��s�(�&zpK��A?sL�o`N0M�q+~*m��-��~F7�^���5惬H]�${��|�-Ҷ9Y&�=X'�V�u+^�ϖE�m��� +��Y/�0�X� c����A��dPc��_X�� �V�Rx�6���b�|C�6������^FeC]���o�-�F?f7���Q3�V�>͝y�Fs���y]�ݯM�F�����͊��k�^Nն��I�����#F�Z�.�7��Ɔ�Q�f�eϫCJ�n�;Aj�BJF���w +��mԗ��6��t�����(�I5�beE���l���X���Q����͌����i,)�6QS �1zJ�ezVBf�� ۹���ʹ�/��� HQ8�9�SnE%�o���-�4�NJ�`�`,��)�~u�t��yQ��N��]�vح��p����+e�"�x����N�6y�*������,�7�$'�x�\���C���QL���[8.d@}���C�ɏE)1���D?@晹���b��$�?7� + �Y��M���N�|����� _�Td'wa�}��0Z��������<���9|��3�����閗3~o=��Y>���l0Wb=P1��jmE� ��X�R[l�o�uv:.�C=���;.�a.��Bř�S[�n�W�J3�ǟN�1='\Xr���8�۲��:K�X��j�6�e �ga�p����%z"��K�1��.c1�ɇzɭ�G�T�Ri�VB�e������-�)K@iͬ�!�u�@_�`�&2�q��u�p�%P���� +��S�Ч|N�WP� !���o-t_����n�y��V|�ؤ��賐�e`Hʏ�E�=>\���Tǀ�|��cҎ�k�IS�T!������%Gu,%[IR�'�������+#T�}m���3��\��/���df)��`����n2�#���\�M����(��CQ�d�6f��l��qG����v�첵).Z&���w�I�����Te{�������JQ�����ܕQ����E\m�`�p�`��Ҵ���\�z�[�v7OV�o9ݜQ�����}��$SSFMW�d��ny��u�я�:� �*�o�[��3� ���O ��FRJ���0��ո�l�����+��L+�&�o�E�+d�-� +�@�?��^f�E��ko�o�\fy���J���8�z���ΰ�Xmi����-Nw�}����OY�pz&�@>��g�ݪHc���.����]7M����z�#�f�����e"�g���\��a��@�\�qyºJc�\��3ܔ��������r�'W�QV�E� D�|��P�L���s�\h_h��#��9�Z-�T�d��L�>˼!���WS/b�n�iA�3���.1Fx@Ǡ�3UN�N^n�POZ�d��t<�jGLy��s=���>�vW�O&�-8ךs��hv���eSȉ���`wPU_�c�a��ř�=շ}�m`�<<�$�+��UV�6�6d�����o�88{��η���zkG}ڻ��<<�7�\���jvg!5M��!�w�&�GmpfS����g��O�3x?��� +wZs�LR�q�/�~l�K�]Q�V�����:�o��m��<Q�'���R]�AMXy��u���^��ȩ�����$�}�!� 9LH��aH8��h��ʡrTtD-�*��fY]]wu������u[bg���gߛ����"���ȹ�� I7�����H�R�7�H�B�H�u��d�t� �*�Ჲ=e���J��t�j�|��� �#T����I�/��W?�{�Ν��O�^��'�`�����v�'$�^��E�=7�I����TF�2˵���7-��^�'Z�"[�x;�����[U�7�,���QyWrr�9��E��6c�y'�I� �gIR�m��2����Z�Q���� +�{0K�,�^�H�/>�>G��@l`�T��=FZ����nZ�H �ѳ$m�¯鵩�K�A�3D;w�����7����ŏw��^J<��`i$�M_�x��8w��U-,�/h!��pbP���1��|*�k_U�;����N�45�����j��<?�>�X���_�:�]��$ %�ͫX�+é���Miw�z��z{7��`fOE���5Fo�h�X�}�fL�}��k%�J�q�_b��_���A�5��4WK������'h?�:l��TH�mm. �m�&�"�X7�r��V7�����l̨b�]r+��O�pK�[�{0�E�uwrf�ӵ�Fa�jCCP�k��t�M�ݻ�Vw�[FR��(�Y�-V��E8���� ������P��?�)�p>��͛�5� #��T��t�F%�����3� qhk���� �;�`�LVOp���Z�ۓ. ��j��&�\C<G�P��J�qzK�md +���A�>ʡ <�*�g�!��r)J����;ȁ��&x�K0�N�\��B�&���Գ����$�bԍ7f��p��t(�0��H�2����3�ӲG1�d?ź��� +�b�Vֆ|�����\[�w+�tj�j?b7����h���wJ�Cm�m�#�b.^V��B���DR�b��8��E]4�J� 7LG�c.Xd���/�a�&ڎ��@�顢��zQuֈ4T��q�i˽�èb˕ 4�3���~,�y�moθ�[��0� � +�l�} ��T�C�u�L�Bt2��Z���W�>��Eh�@+[�Ř��y����0= +�s�U"r]�;�û]���(��̏{�����e� �E=�m��a^2�'FKv�~.�Оm��0O�j(�e�s�ߺ��� �Pk*!��3�I�BЦ��s4�{^�|{6��k\* �}X�Y��Ǡ���D�=A%��$�hǹW���ǂORV����� ����U�B��ꯪ��r��+C�a6���� ��K��ԣe�� :Zڿu�6&��?�W�&�k�).��]%��]�,l�b7MX]�[H"}���WL)RI�r�f�r?A��ƁY�&�I�~_�IB��$�{X��l��Z����X�E�&|�w�#����؆�`��_v�ߢf���u���3����f����m��8�9�?��9� +̟��N�Վ��`�jz1*�������.�@��爎܋��`�o�ْ�J_����+-��4α6@��/DWE�jE}HR�Dl���;Y+����z���/������1�D�ѓ(z)oι&�;��.�4��aZ�#�g��s�b�Z+�X�Wi;�<~�n�"�(� �����M�'��b6��!G���lP<�^\��nM8-�-a��G+dyXP�^��s:����0q \p3b����W�u.�,R�&�r��m��#<�He�ĸ�vQ�l���.ˍ���J>��қ�s)��lej�(�^ ��,�=�/����FV���6fj����;e���x��%�D�����k�%�!FW@a��o2QT�vs� �5��h�0��B�{�U��H�i�GCO����zL'�pb�I�q����+'_1���Lv�� +���Q��A����%���$��[H~�}{�1�f��K�ٲ�:HmW�S +��ëd}�2w7����j����<� �O�����7�i�2�G��;S�W�ݒ�!�@Y�s�Z~��*���PƐ6�x�Q�ܡ��/9i�7c�G��HV�f�3��R>K�����2j�Z�xH"Z�"�)�vH�D�} �@���} Y�J64�T(P_�(*�C]���mi���S�Jq�OZ�g�A��(n�y8}wν3���7���;�?߇�*x"D���6�Hae�Z +�5K� e +tE=H�������\ƒ�W�8 ��7��2�y��m��]L����y��� ��1N<�8͍�@��������:�>�>���6p������ӹ�<�AМ�*쵮�5M +��N5����g���ܿ��]7�c�D�!\����O��6N�(���b���H����ֲr�t1g���u��N�'w�ߢ�e�Gr��u�b�J1��a�#�g�i�|��Gc��"���� �'x��&�YH;�����4�T1}�Ϯ;c�V*���ܲw��f����|�H2;�R��l��{��K��*��G��ZPg��z*ۿ��?ʗ��� +�ד:�N����9u�����L7�o����|j�B�jEV�QR��!Ū��;~;�Z�Z����xٲ� +�(�q�����E蠟�V����7�:b��g3��h\y����g�.:O�������0�7��Ң��b�4=�N��Hdto{�<��WZgH�NR���RZ\��s�W*Zx�� ƻQͮ�l<�I���Ts|���X)���c?��p�\B� ��K��u��e��|0|/a�hB�|樕���sEG���M���s��M�d���?�*G,����H����R�g�[)|�3��C�Q��{0b��Iט%9*��X�����R�M��U)+�^��P�,�p�y*��~uR�Hw,r�~L���;�_���vN���"������ۿ�]���//S{̑��Ͷ�^���0X 7�4�����㊈�#�ޒ{Y�<mg�$���5`��Vs-*l��ۻ�g��r��i�˕[����L��X#DEhgq!N-_����c YP�a �!w����|Em��"�����P�D�OUHS�r5�a�+[�� m��� +�Wh�*¥{I/1Ywû�Jy�j�k�@p[�����z�3*R�e���RXwq3�0���u%�B�AŒ%\N�C)�W�'5�꡵ +&�F+U,��d5�gR "J�r��VDB�SDO]V�[EסdyVӃ�1,+�Iev�"���`��Wrw�Ka���G��|����`��%+T�VR�C�F���{Ys*���Z�5��߬�R�e�s� Q3 +���j�QA�4Ӌ<>���$�.7�$C$p�������A�)h����J��ew�T��*Fm���K�g-��l�m��*{��{�����v\ܲ�s�Ja>3_*ݑ���ہ>��V�5�|���WG_�>��R��R_YL�!�R�F�jz�� S�5fځO�2��<�� `��}I\:��X�i�Zk�R���H*��4����[(�x��X��$u|I9̺TkV���z����l�_�g�C��%�*��w�XR��nY)�N.�9+�wZ�[��E9�ľW����J%�w�p`Nj���[���.�b|JOsd�W,��R�~�#�* Ľ�yF�dwC��p����*�L(8�Oe��lL���˞)A�����v�f���F��ʹ.��Kn�d�~A]�Di��(i���]Yʯ�J����ߟ�?�>�w�[侾�7���KK�6�w"��!e��D�p���5��V* �3VEa{:KoED��cɾ���J�#�oOU4���4����l�TjF�k�,>�{S�?ý�Sk�>��Su�����=�|��j}�����T +�SU�.nk�.����������m�c�Ů)Rx�b��T�<�T�V*y�Ù<+�`R�C�;S�^����0�-�itp��<ȗ�2I�Z_0�ȡ�VVKHW�ol���9�=�fd�j��b��%}D�C��y�{�s��I*�{ZL����1������r`n}+�D�����_�*�Uz�3�����}�i7��7��9_�k��jx�L�+u �;�FxL�.�m�m���Q`sK�z�������K#�>����&����ޗxiB�V�^�\s�3�_X��X_�ر��C�+ҭj�|S�� �k�Ͻ�|j|[����X +Ά�BL���.�?�\��D��C��q��ߢ7n�O(M�&���JO����������i�ݖw0������I�J�LM,NCOYPoQ�R�S�T�U�V�X Y#Z:[Q\f]x^�_�`�a�b�c�d�fgh#i3jBkRl^mgnqozp�q�r�s�t�u�v�w�x�y�z�{�|�}�~�ˀɁǂŃ����������������������{�p�d�X�L�@�3�&�������֜ȝ��������|�j�W�E�3� �����תū������}�k�Y�G�6�$������ڷȸ������~�k�Y�G�5�"���������ŵƣǑ�~�l�Y�D�.������оѧҐ�y�a�I�1�������ڲۘ�}�b�G�,��������{�W�3�������q�H�������v�U�3��������s�I��������a�)�����\����Z������,��� + ������������ �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/�0�1�2�3�4�5678�9�:;~<|=|>|?}@A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�c�dee�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|z}o~dX�M�A�5�)������ۈʉ��������q�`�N�=�,�� +����ٖɗ��������m�Z�H�6�%������ؤʥ�������������w�o�g�`�Z�T�O�L�I�F�E�D�E�F�H�J�N�R�W�]�c�j�r�{ĄŊƐǖȝɥʭ˶̿����������������*�7�D�Q�^�k�yކߔ���������������������� �,�8�C�N�Y�c�j�n�o�l�d�V�D�/������h� 2 +Rer xzzzyuph^RE7)4=@?:4 ,!#"#$$�%�&�'�(�)�*�+�,�-�.�/|0p1d2Y3M4A566+7!89:�:�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�||}v~oi�a�Z�Q�H�>�5�+�!��������؎͏Ð��������������x�p�j�c�^�Y�U�R�P�O�O�P�R�U�Y�_�f�n�x�����������̰߱� � �8�Q�l�����»��!�C�e��ª������9�^ɂʦ������2�T�tҔӲ�������6�L�a�t݇ޘߧ���������������������o�X�\�[�V�L�=�*����������b�/�����f����M���q������ T� � +��� �p_L7! ������}tfUA, � �!�"�#�$�%z&d'N(9)%**�+�,�-�.�/�0�1y2g3U4D526"788�9�:�;�<�=�>�?�@}AoBbCUDIE<F0G#HII�J�K�L�M�N�O�P�Q�R�S�TzUmV_WQXCY5Z&[\ \�]�^�_�`�a�b�c�dxeffTgBh0ijj�k�l�m�n�o�p�qlrVs@t)uu�v�w�x�y�z�{n|V}>~% �ہ����r�W�;� ���ϊ����}�b�G�-����ޒē����x�`�G�/����Ԝ��������q�_�O�?�0�"��������۬խЮ˯ǰı²����µŶȷӹۺ������� �0�@�R�f�zƏǦȾ������*�G�cЀџҿ����'�L�sٛ������F�s�����M����6����+����1����M����Z�����:�{�����������O�X͙�~ʹ��~y��~e�L�~�j��~�Q��c=9�����~|�4�~c�l�@~]�̳�~n�f��~��C�~لOiZ/�gP����8�v����}6�q��}0����}>�ϲ:}i�^��}��,��~�_L��p����K�-~~,*���~��&E()D9�v��yo�w�y���=�TS3�wI�!�D)�J��%����OBv���w�N<i����_��ΝD�g�A]�3w�^�|�<�~]� +bʀ�}�S���W���?������CN�<��-Y�4����� ���B����Yp�z�S�)j"��{%�>6��4��;�>��FVW���m�� +S�^�D�i��*��bPk�������pة�?�%"�1�#!ϼK`���L�<�n-e��2*���+�) X䥂C@�v2lQ?����(=�0�q�� Mz�ǃI�z����7ME�Y;���Y��@K (�-���\��U��������&>�r���I�^���2���I�Me;Ya����"��V�N�,S�;��o�_%s��D;��f�Ǝ.�����R?l;0Dq�>���8z��D�KG)�3o��+�&�<4��@n͗0�E��O�9�4��#��Ґ���n�W9�b���_��7}B�2�yːv���/ąJH삻Ȧ��p$�ȫވy;�Æ���ǘ�f��o虔�F¨Ls���I���,Kh�W2�!�A��jHE^�τ���� _�w�d�lX�g�g�Ωr!jU)�[%�B��\D��Cf�p� �<_��\?�k�,.���w�Ȳ����i�rJ����R����ݐ=>0�+cv���Z�{Hl�l�L���VA��c�۠����^{6o�Cҏ���S���م�bȏ���:sz� 7�j�P@�Q������;[�w�g�|z3�0Uq`!�P����-~|���X�3��+�z2lIђ��:�_<����a�X��S5\}���E�^����G��� +�X��J4�^�Ƭw��/��I!5 +�bn�#�F���O��������`.ܙ�-�J\�!gZ0� +)�ݥq Aß���O��k�V����^B���f8KĈza>p-F���O�J*����Yr(���".��O��'����q�ä����f��rC���RJ'�dc~��h��!�?�`���}W�zBd;�hѲG��ϲ�m�T��SAi�j9�<�� � +ߨ��%�@`��8xL��T��qė=�,Mk $hJ�����d�����x_�r�̰gʱ��h�t�G,�K��ytomVK0����X�?R<�J%��m�q<UG]I�X��'t�9E�� +$Vt����������ܛ8�i�(�G�T�+��tԃ��]�6k�N�*���d�$m[��w�_L��-h��k�,Ȭ��&º����^>���=Џ�]ٛ��a��`sʠ�7���g&Gr�ŀ�?>��r&�z`�b>&���z��%��sx�bw�&�{�~�څ��]"W�R�%��c"z��D����zA ����r���s!֝=jcf]��rm��A��NJl$���ے�#ؑ�>���wTf�GF�F69�9<.�'S�Z*�˺#�-�Jl.��Z�Zx�%m*�|����� �o� �2�ӝ_T��W�K4�eRsu33'jRF�B����Wl|�� +��F��gml0L�1�,�����y�+�Hu��2��f;�[�T�0BE��{�:���qn������to�T�]o������kI, +��LgV_R:�Kϋ0�d�P?= ��v��E̷փ(M4�m����\��T�ko�����,�H��=����������Z��w/��E�I�-LQ����[�����8�F/�g֖'$��?�[��u~f�g���h�X�j����ݚ-� VI�m�K��Հ,%i�b���Q���*e9�7���������WK�����M�YiHt�X�T���BUD���w�-�4��9#i�ԗ/�r]�hGވ�/� + +lD2h��%TT�T*F���dw">���G��Y?�"��[f r5��ʊ4��`��TAo��4H5�rW�S�8��Xy��;$Yr���'�q �vUP��V&�����4m�/5LJ��E�:��S�7��Hv�y..�� ��k�P���X��Al���`�� +��,e��:E�$@B�Kr��.!{�A$A�,�C�Y[EA;|�TJkU>���4�1a�Ɯd�cT.�����UsR�&�Bc�h�R�)����� +� Pd;���ʟH�b����l?1;_�:i�^��m�Mh9Ӝ+,�x�+(�j3�=P6u�>��a}�&���b�(���0�=��.À<��2&�m�%�u9��_�~z�����L��!�S`(�6͟>թV���l��W䨸�m5y�pg�!�2��<�� P�R%�wC�>��u�b�v���b�F�.0���UK�$�K�;��P�,�!�rA�5��%\��v���"� +[2�g�w���dx��J���:��_�'�Eښ_+^Cژ�� ���I! v��,���V7�2UJ������L��N�ITU�K�ɎIy/R+�=+(֨����v��6������!M���� ��@P�B�%�R-��-�3��|4�-�����)#ͯ��w����.�ܘ�<�;���b��#��;*��>$e�G��� +�>�3������"�و~A��Z���$xOU��x���fx;٥Q��hX�(�Z�����x=�`d�� 8�b�i��d�, ϐ��!�enZ +b���/���І�����2��P�0~��+��1�b��a��k��tT��� �?�g�)��˧�9��С�`.ޓ�`>'4��\DRd���Paxԗ������?i|�9�,�t��Ĵ�q]��"��m-�9�O�D��'���Ex�>�#B������z6����Nk�%��tm���6BDzV��Q�G�q,2�O:��y�{i��H�cy[]�v�a�Z��T�5 �Ȩ�R3��4�5N�@q���G!�fYXr����{�3^���M7HX1��ey����������8����7ҙ;N�������P9��tn��/D�=����}*��I�:��2s�̋%�����G{��<Ie�d�X�w��39��5�I��ot=�ޓ�*̸'����(���#^s����{�\���d�Y����dS�j V���T>�7��a�b������T�B��m�6ۺ�4JZm�I���F�הz�\F�D*r��E�y���ք�̣�V��-�8ˉi��#�7���Xm��Z�LW:2 +$Iⷱd�`U�+�����z�3��8"}��Y\�E^�\Q��ܵ���)<&uZ�!FM)V��"�ڟ}���&à/���� ď�����5������O546�PW�눤0���f�GlE�bd�c ��'�ƪ�r��Ӭ[��{�K(��"M/y%���0=����zF�Bx}��{w6{Y5��0��%,��4�0�R}ԓ�vT��p>�K@�f�R�$�7H�U�( �����/1��0�f<,��1�B�S>���٨RI3#&�&���p�a�5j����1��9#yT����H�9c�I���[��է��j���U̟�~��?������+�7��N�zM�`k�|-�k�qJ�}(Ҙ2������S��aӼG�i� �;� ��b�:`uǤayU�}T�� 2����Ftm�̔%OpuD�����U0m~L-_������:�q��W��g�0~�huw�-]�NV��rP� =<�]x;Y���1�iw@��8,���n����\(z��q�������b�!$zB��&5d��n��6�1Q&� �&� ��C��u�Ўy#����c%$7�]w'z\���0L�k{8<Oz ���o%4�P�˗� +�9hz���͊��$�L�mxEFGO��$���Dc�����n�:0td#�*�v��T��2��.q0��6���v�g����Aԡ�n�3����l�'����H:�<@�I˞��8!�mR�S����s�^���U��g��f�B��u�2L�> �;��f�G�S��Fx¬P�~���K�����m�%t3�M�����c��cM(���bC�B��$ _� ��J�,���@��՜ ����%ӸZ�;�.�6��B��)�P��T�~��~���:_��tH�NI�T�S��c��Τ5���_�3���b�O�6�-[o��7�$���c�n����:�zN�q��n�E2~�7\N��T���'��"[�fTT��^2F������&��+������c5r~ԕ��(����j����l4�8mW�DC]X�#���<����n�_ �T�� 45 �C0 V���~m��&AG�A����7w����@�w����;����Q8����Q�� ��?d��9���#1�y�ʕq�_eS]y|�d�*�&6Q��3�0J(�WG>�H���N� v���Ag��+�[�o:y1ډ�G�m�UV�'p�J{"�����M@3��X���|��*�oƙ�ޞ�%sfJ�<��ߔ��[����-0R'G��i�++q��NPF�\���&���XT~y�k�P�x�>��������������~u2LX'��P �M�O�W� �rة Z?q�U�����\+w�>-�q}y/sR�Q�Q�����J��@737���K�a[t̷�����E�8X��,��T����p����!��P���V���K$��`�����Κ��b�u~*L��lB�z-��<�R&,��+?�AP�]�o����L�K�ِ'y���� �Y�?� +~�t-"X�n�v&�����?����VA�G��+�����7�W����h�K��D�Y��Z�%4YF�g�[���� ��C_�M�6ЅLJ��!��)�9��!6��-��l?�@��W���?�t`k�;�����p��}� +P���>�f�{��i8Db����Mp/Ų�F��_<`w�[�U�q��.���Y!�'i7�L'� �R�z$���v]�c�-�ީ%HY�~�ٕ�����鞀ws{)W�a��˹��ԑ`����{�[z�����ϡ������Z�&���z +-����U��@u�BP.8�jz�B�{G�tϤ1�ޕq# ���^�o�2��N*`�D��Z�m錞c�@QY��@����O�����y`��ŕ^ ��)�H�?�?��s %�����J�@�f���-���H�%�{#}ř�PK�n@�u�5w:=�Y�X9����(5#p�9#���A�v(~�-�"]�Qb'䠡�y����a +�������'����£� +��vO@��%�7_�*Z-r*��~z Ց�4��!��w�Bp����G-q.�a+��c��"wmqk=���WfB +k^����0����>n�pu�5���㞃= �m]0o�����-1��:ǒ~��%ui����;�p�V��O�/a3��;0�o��KܼL���6��E���d@�ZU%�{ ����^�Ͱ�y�O��V�NHLm���u�?�uM��B�EQ1\�IُO�u�i�@L����7�Nk\��dd��[i��|����lRܰ��3"���rW^ �� +�1��9�~�(�V��ZQjsf���b�5~Nl�,$LAE ���\�����Y�v����3k��"�*��Ie����.�gj4u��D��k"�*T�~~���g�^��~��<|�1�c��Px7��kF�84�K(/AI�\�%�H��G;�'��6�������`kK���� +���Z�J���A�Fq��K�q�$5�GT��#.��a<��C]�s�zO��9�����@yQђ�-��D�RP����G�D{��n�����o��^�7�P��vU�v����T_F"�T��e� ��^�9��^�9���(Zi����*���J�|1�"�]����.��g:��E�TI�FzN���%T�|�k&�J�l���I��3ʌ�+�r^�qf��SNM���X��e��$��v�{�ꢫ?�I��B�-��-Oi�0iX�o� �葚T\���.%kR&-?(�m��=���?~3�Jncu�/�mS<��Ð,��Le�H:��i�_+MSV��a�k�@��\Ѓ*��+w��qDS!h��e +�4��9"(h�d}+ɗ�7��)T��� b�ǪԪhm��`Y�ջ���s<��-�,@��͋������SCg�Zw��N� CU�c��W�����-JGm\Q��A]Q�]�h&D��0���Zvnw�%����0��z��MT�X�I����:��l���<�7��a�` ���5�P`��ݰDh��k?�(�b�� ��?�`F��g�����ű��y���=�4EJ����0 GvQ�O4��W����d� SA�nM�C��� +ұ|`�7ø_��vY���Io���R�yYqE�,D�;�&Q�\�B�xW��r���vt��[���\"]����U���ˋ� ����w�髐�<�|Mc+����� �Z�9�(WZ�ʳͰ��f����t��~X)�U�i��?�m�<P���� ���;��G��-_k&ڞI&��M�L�<�:��:�7�����Kƒ���KX����Ѫ��W[�5P7W��ttb�E6ռ�z������~0�i��W�űہi4 [$�k����i�l�$����VRc4ӫ���Gk~ʿ�YQ�:ٮHb�F�G�X~�Nu�.�kf��c`�m ��f��4�걳�qVP~�:�U�#/b�E7K*�W0��]�q�=$ܭ��� �X���QM52ym�B�S<l�U +�ZҸL�eD=�B��kLBR��Y�^��#z�A�%�ڥ`r^��'UIo�Fg�>�;1p�'t.t-SSUn;Q��Y(sў��*�M�8=��� +BHZ# ��GcD�S���{d'�,U�t���l�=��,}�*��v�cr�+�]�(_�1r�Ø@?A[��K�Dl�v'o�>=��ԏ������[���?�Q��ô�n!ܘ���e���o���i���B]�u3����PzP'ߧ�%�4�4Qw� � L7@�?;�gSVjgo�ho�p�7��sy����R�\7�����V�%xL| 3��n��|�2Q|��-��Go�t��u�V֘��Gk�}��fd�'�̐�yQ/;^��+b�#��&�~����ي2����(��<��c 3�;�n`9��2[�Lqzt�.��)�<����lJ�a�n��X>��ɚ��p��Tֆ��)��$��Dr�u:5�z�j�,|�~��0T\~�>�*,6�Y +�]�7E9!��7���;a����u�*��8Y?��Ң��#�����W�f�iA�~�\���mB\�$��O�wD�h�E��16:_�����J��qB���R%��*X���3�!��O���:�`I�����o��k��2�+��}�Y��'1�%Y �G����PMJ{rK�����w�������_����L�&N������N�yA�'�ճmﺾo4gz"�v;L� j�e���%Ɯ���{��N�S6��U'*���@�d���jNc��v�o^=�Bi���7�95���l�A��ⶫ62�7�I����C�k�yV�_}B��.I=��YR2��U^�c���<z+w@����b +�"����8ۺ?pG�Z:�Oȿ��7�Ý��T��ԐI��� ��J�A������x߹rx���n?(���w�h���?���F��O�Gj{�D"��La�W�e�}j� �w��*����62�y3r3O�(�1�;LS��P��p��a?����U��}��c��qT/+��~���3M�ҫy$�=IQ�RS$�@դ@&\�l+f���EI��1k��ڸ�����v�x�}_���nϐ��M�fB��y��"m� �9�nQpϼϺ�e��\I��2��Gt3y����)w���%�u�$w[6o@&zܞ�Y^�Z�w�;<\��b���m�����"��������{���3=�s�SN�Ӑov�(����D"��i��dM�֬Lใj9��Z�K7_�<��ې���ø��9�74�P6���0,�R���?����D����m���6��.�D�t���he3 +����>~�o��\Ƙa3Ƹ2���@e���U*Tl��m�c�ӱ�������~� x������n��N��������U���)o`Iχa]�����P���F�ŚVTC&�ϣ�࿋Y�=�d]/���.��.F�BX�s+$��=�}buM�>�RWm6�Ŗ6ᢐ�FX �5�x{v*������j;�zv��<���_~�����A��VUJϐ��^Ij�Q�x�シu�Q�o�=l�K�_��Ց�E�kZ\4��s�qU7��vOa �J?��Q)�4C��^����\��k[{��3��y�~���M�|J��'g��4Ay,$�0�( j�H��l�:Q"V҉�1X��&e��������� �s)M�Z��(�W��|�Ϲ�\���8�8&�t��c�p��Ҕ��a�����͔�����C��C�GU�$^�fb���|�8u����̸����&���A֍�9k�e�7�;�㥦���k�o����Av���Տ0o5����y�'�����������<�!�����H���P�4��|y��C�{_�2e��lTr�s��*��Idg_���'V +Fv�z|"��ƞ��ҩn2=�3[�"s����t� �}N��8����`�����1`X�i��]�x���(�U2\�o[v1�d%JOO&rؗ��0ܵ9�Yx�ݨ \����D�m����]=H�j�ovfd���)�:�t��b�dH9\��ϛ�Y�?�8�� <%�}��dV�ەh��nu�ӻkV��3�+��(+�$���-������#��Ջ��QҰ�����Ж���X@��h-Nd���$�a��>�M3��q��"y���$�[Y�@S���g�Ó=ݎ��P����1�)L<�d�"�d��rՕs����W�� ��DJ� +t��b���c�j��*���!�A�q +hG�|�3j z�O�������|�N� +��*�π�������%2#�Ǔ�H�7!� ;v������'�;��O����~h�ĥ�%�,v6�Bբ��Tx��Dv"Lt�ïK"N#��.ec�}f��˺��d�&�T���R��AS�;Yq!������E,������AA�m?~������[�7��[���> \�!�B;U��!�)/������C$N���$�A�³u�e�uU}�,3Y'��/J���c�� .8_[O�����N-<"N�����awG��m��_+�yj~P�]ſ^\y�X��,r-�|�㒒��ܳ���<���L^T}��,�^eDR��,��n�kqց%��|r,�!g��Jx�����=~�p{"��\ee�E�N;��Þ���=���$���{q@Q��_��\?�/иLe���>�u��#��M����p�'Y��n�_e<�q㼅����Ra8p�LB�=��(�YK��[l��`BK����B#4;c��;H�S��^��OA<�J��~�I4,���$"���,B\HV'&fಀ/pO_*���_�_�#���&l��Wc�K B�Z�(��|Z���b��+|���KpT�� +�Ar3v�*>�����>Ʉ�x\�+�0lk������O�Լ`���F���cfup�.���wlC�n���KJIi]����&���f�����XPA���n�1ک���F�TK��BoI!��Ӯ���Z�� f�)~��X��h���y���9�ݨO��C5�����&�|�T2���Ӳ���n�SLB5eD0��:��yP�;��(��w��9m��Ϊn�Wh����K�u����{�`��w��k����� +��kH���>*�ڲ��1����w�p5�����Q�����$�;����LvvJ1��f����3n�*���T�g@oO#9|}����?V0M�5.�ۀz�{"N�K?�C�_$ P�&B̆e>�(q��I�u���`���|o�b|�_�0l2�Wꂝ�sC��ܴLT��I�a?�f(/+���P�Iw��BW�h�g��H���Ei�Ů���(G6 +�����" � +"(�H2�̙�dfr� $��x�Z�EP>�ţ�������C������~���E��F�:}< �\{ +�����%����rH�6N$(߫Nᷘ_%�1�����]�2�:$����o��-�8ȥ I-qt;�'k��TjJW^�}�k��fQUr\�u��l�N�kHn᫂�H����*�W������d6��M2 *{���`�V%���VR�oJJ����`+"�yO|s8����6�V��y8��:+����;��9��ɨ�=�.q�q���ѝ=���ɥ��^ӏ�w�ld���G���;<�bSh� ����(������%]� �N�}uAܹ��`MV����?g�=�&�o:R�����(�tWS-{66C�S����������U���foEI��hzE�'�ܜ��&��Q�8,�g�]-2t��%��F@}S|��QJĜ�h&S콧�bor 2w�q�|�o�����/�$� Ĭ�7�Aң���I�MXIc>��f���H^�2��`�zB�ȳ� ŞO�*�{M�2MoR�0�i����:�T�~%�$�9ED~c�j<}���${.�-��+P]c��=Vz��pwz\S�;!?���C:�G�F����Iױ�q�Y�Ş݇>;��]�����m�S�)�yr���Ez�_n˕�aI"l�|s�G���������vm��ߵ���_7e]֭�>��Г��U�)i:��D�G�}�V W�5*��{�f��?� +�(��$�p\)9D$ZY�r|�����(�4D܁O�H���ʳ;ܫ��v۱j�x�Lr_r� ���;Wi�� nV�|�R��u��dܦ��;�@������Y�N�<q�Iȗsc�E���^M|��K����ƿ��6��#Q�쀫��Hl6�\�r��E��jJ����K-�β+���x��=��j1�(~ǒ�)�C[vQn1�����x��V����a���u��I[���8��m���Y��GeLV��(X/�%W}��%�� +��M]4�ǽ��A�ߗn�װQ�ԈX�tGd�Ƈ�D�\wQy�R�>�l-�Q���nJ��Ȳ�c�/�����14���C:�'K��&���̕BO�J{ߴz�f�sW��|F-��q2��?���}Y[�pXd�Y<\��v�+��M{��i�r��8��~��LJޯ���� �vlL:�� ?@���o�[g�`���}�>?Ur�ǛI2��L�k.�}GpI8�Q�RV%܂L0/PU���E�� ?�ɹT��c�ۼ�f�H��s��^QM�C!��)�$�;�ej� �uIy �W����6���#L��Mi9�Ħͱ��P�*���H��ʘ����F�g��]�m��ߝn�+|���X$Z�6K'��O�Q�J�q ���m�(B~�lj��Su�Z�ť�bhW��P"��z@�U��V��J�\�,<\H��A���5������O�af�C75O ����<x�5���MKQ�����e%T�f�ʤ��6 SsFt���TOU�t(����2���[ +ES!.?Ӕ��#��C�:[�6�$ߴR�2G�[�D��U��cb��Dx(M<����}��|�y��%�����}�ђ�����Hm�zy�Ey�)�9Didh(Cp��K�o���Y�9_\n�i�Qsƚ��Ӯk�X3���6R7��U&�"c�T4E�ʈ0�X�,t ��:�T��/>Uݮ�x�7�����F���>Q��L��~:ʥ�#�]�[eTS�2��%��c� ���Æ~EW��g�9��i���%�3W4ފ:�}0�_�X|���-�ƣ�µ������V�u�8H{���Y�F�"qĔ-�F95E!L��/���3z���Lw@��"���F���Rm�O����Q&�[�#������Z�O��/�x��ˤ�r�~9�T0�0b��ܬ�4��Pߋb�>_nMFY%��<�ip +�;R�x���@��|���qj#�l�j�?Ape����[�ۊ�x�{� +�s�H�t-bM�#���t8f���5�}s�c��0�f0 CcB�K�R�mc�E�����k���ץ�JH�[�ۢŚ<!)�N�o�OC����I}5����2��� ������0�9���tMب�������7B���0�؋������0��z�D�K��Ye��R�U�J�����ѐ:N::,#��D~6�ž���4o1��l�`��q5��X��U5G�"����Z4�tX���� ��������cV�u�{�_<�9�������S�N�}h���%�{�nԾ�"V}V�"C�w}�t���)�b�3�zFj�oK�����j2�'��Q9 +]��\Bȫr1.8�C|��.x8�~��pG��m<�ϰ�"i��S�˨��ڠu[��)�E��k�+WE8x����5� q�g<k~���[��0n�& ˊڮ�c�A��a��Jú�g���"�:�"].f��f�5 R�u��B�Tu6�u�|�;4R� �'���hNp�\@I!��Bq"��:*��pX'%O���$�K#(��}�vW��&��$�����n������x���T�eحk���U�^�I���kK��l��Y�+H�;"�����^�\��#G_�Km��R2�y���fbI-�ب:ݐ$;8�$N(�Ӊ�x���a + ��1��"��*.d8>���MO�a��N�$ʡ˖~&(��$~��>�����t�BM%^i���3��ϐ�Ef8UB �������'`-�icIaͨ��+�� ��دR���=�Z�����Ⱦ��Ł�=�5�U#��5H����R����>njky/����s6��H�EoL��y����C�G��/��?QE%��F�v��MMz)=Z�B.��ϡƋ��/����3������O��8��5&�Y�����K�լ(�ST� e�ҝ���ZV���x'�xaV�4�Ë�*H�]z~�h~ �i�0d,�K��8��CZy�{j��CF')�b�|x���NJ>�V�{�0��e�#|S���E�1b狛*_�R��"������37�����B���oξ��(p�3_�<ݥ%-��t��ɫ�B�e��t�Ɠ��px H��uRuɵ)H?�m������f@�Iz�͂qrgM_����D�|Ce� +��ӯ_���w�CՄYK/��Ԩ ��佨/���Y0�����y��̸7�.]�*ѳ���a �!�d��[�m��9���#{-�;�W�[���� ��U�$�mb?ci�3�ؘs���q�6�ĂT� t��֠}����dl����v��{�F�yt/ټ�t�����̰��K��Q8���N��"���4�ʻ�c��'N��s6��I��<�fWϚvЕ*�҇�T� ��9� �I#�{� ��mVx�@�.��\�EyT��}��W�*�fҿS�ѵ:'��hP��of��ħ/7��n�u�3֭F����c���ȶT���5��y�ŴѪ����L��i�Ӕ���%v�I��G� �ɒ3�m?PH-k��;?�v�bkk���Չy��^��4o B[�*�Bo���R9���^F�t�b�Iyd����W��$ګږ��N��T3�VYzl((�m��"U�a.\�vz��C�5H8�H�$?sZ�6���=:�hh�B�!É8 +`,�g6�$cN���!L�p�<�b<���Nz;�0y�%� )��"� �D�B@�;�.a��$G=�W+����v�F�v-�����|d%��ݿǁ�gOŨ��;$KF���lb�u#�^$(�b� ���,���jdM�[s��kx�v�͆��c��?s�B��fl�S����k����Me͈Ly�i��3�TZu�g�v���#���V'{�F�,���8+�5��%\���Y`kY o���C��,VQ�"�B�k�5Wjؚ�� a�x����h�k�"� �A�ƛ�/����d�X��!xJ��(}�~��&�|����� �h��?����.��������XS�����qX�}|�#Ci�ch�K��VF @ d��w^��NH L +jk�u�j����V�JE)������swm��^��VQe��^*���7�c���Su�5�.�:��5!{3�A/��u@v�?�aD��UNC�k���H2)�1�z%�9�U鱛������v�!�k��0>][#�?�w�sb���,4U��_ f�)��E�ď�* uä6Go7�6ɵ����{�����'C���Ga��+���RU�A=�@��5_�rgs1OU��G��*��ʚ�O�&��Q͡�4��%������nl�c=�%Z� ��v�Y �Ze��ਝ4�?eC����`����_���wvĦ10�K�B/��*Br�v�4όwM�� 0����r� �`���$����C�ܝ�G�a6;g-N_�&ɰ�.` �`�0����M/s\�P���M�f�`p��3�������$��A7� i�� ���c���(y <�N������6���e/��c�POj��m�+�YЪC�z��Xa-��T��`ao�t�t�._ ,qg��O�����I]@��f"� �?4|T�]�T7[��r�5+��D4UffN�]Ϭ��'�Md�d����Y��%A'-�:�x�>�j����Ӎ�5!�U��iMSD�-rB�FL��&����^:O����F�-T��4��w �������T��3cq]�2��R��d�/3���U�\;?���Up=���@�b� +TYRJ��3���O�)*+�s�W�u�.��[��L6�Ǽ��A�. �귒�h���oN_�=C��|��HW� Gz}��w\��2�h{?�U��r_ס�,[<���4�Dm�D��〷����C/�F�l� M�r_�g"�P\T�M�Ii�D��w�$��=`��I�Ӑ��}����6�.��jY�x^���h}]����"�]���l +��8�"ӽǐ��L����"�H�ڝ��k��:^֖T��m����������.���^�@1�~qxT���l�U����#U7�����5��:��L�E|4�&W2��5e��xz��*̖̆;�����M�0��do�^�lpm����aI�S�7�kD#���'͊$�"lL�?b�A���DI����N�mEh���8��Ԍ*�"vұ�E���������5Z��5��� �`z�~x�[�M�N&�a��|�b�(��ǁ$�ch������|cq�)M�_���Ɔw>bSО$�� �D�p���z�!G@o3������a]Pn�N2);K4 U����"�p+q ��7b�������L����a�y�$�04��iC�c9��(�6�>E3a�{� R䏡�0`�?�s0��7y9'`L�q��`S��cLr�&M���P.ڽ��,��_�r��u����/�F������=��=1lt�Ŝ ��9>1�lם +��KX_�t+ ��=���#�ثL��� +u�uW�K���̹�u)�F�@�������j�R��_$����YuBś�G�bQl+$���,o8�q�l����g�!)����n�2Q��ή��U�>Yt�w�(���^��'Y�������!�� %��G�U��9�������,� ��&>�YcwU����M����j"���Z�o6V��WF9�=�a��lm�y������nqA/2�A�I�̐���i��� +q��AN?!9Nxl�b�O���{�e�i�Y�Q�̶�>S���Z� .&�s���b��j?1_��ǡP���k���ٟ��x�`дY�!��n��6f�VJ�?ff�o���n��0�����6l�)�7�B�u�yMA�Ѣ�&�m�>�>�Nj��#4J%���&|���E]ۊ:��i�2g�0��io*�6zX������h+�҂��3;���1"��2ҍ�+O�?���K��ja���������Y|��n�MH�p�A/�LsI5��cu�*ΐDx�!W�{�|m�p�q%��q�eh��r�Yb�BtM7��u�A-� +w%5��,x�+�z�!Ί}|%��w�pȩ�xe�Xx|Y��y$M�}y�A��z�5��{�+=�}5"6�~�{άq~�p^�Q~Md��~*X�~,L��U~S@��~�5�� ~�+f�2T"��P�{p�U�Ip��<��dG���X]���'Lz�J��@��ς5��)��+��g�I"ۇ���{�~�o��e��c��,�dX�؈ L;�o��@���}5��^�E+����#���zЩג�oy����cơz��Wܝ��L����@��E��5�����+����#N����z��O��oK�/��c����W����K$�B@W���|5��%��+��#x�A�qzt���&oM�ɜ9c��l��W���K×���@V���5�����+�@�)#�����q���h�f��j�[Ű1lmPʪ�npEХip�; ��s0�Xu�'���xzr{�qD��o�f��p�[ԯq�P䩪sNE�t�;=�%v�15�x�( +��z� W�W} q(��vsf���v�[���wLP̨OxE뢳y +;N��z11c��{v(_��|� b~mq�C|�fL�o|�[y�[|�P��|�Eҡt};O��}�1���~/(���~�!E���p�f&�B�p[Q�/��Pt�ہgE��S�;P����1��ƀ�(�Ā�!��ހ�p��,�Rf�O�6[B�5�Pc���E��`��;U���1���*)��^!��H��p��y�`f����[>�f� P[��AE�����;Z����1ٓ0�U)F�j��"0�op~���7f ��![B����PY�_�EE����;T�\��1撠�C)k��"d�j�pm����f�r�=[M�,�1P\�Ǒ�E��S��;`�Ћ�1�'��)}���"����Ρmf���n�i=��p�kq��r^m���to�lVu�rX w�tDy�w'0�|Yz>̾j�qźjl�r�`n�t��p�u0�rnvgkbtgw�WIv~yCtx�z�0b{x|b��h�|~��j�|���l�|��^n�|�~pp�|�j\s}AVtu[}�B�w�}�0z�~l�;fׇ ��i� +�9kD���mh�5})o��viNqꂿU�tX�BEv��=/�y��VǧeP�{�qg�����i卞�|l��{�no��hLp�(T�su�SA�v@�Z/ryX��_d�ִ2f}��}hƖ�Mk�/z�mt�Lgdo��jT3r��xAKu��I/8xσ��[c&��5e��[�}gܞr�Qj.�xy�l���f�oD��S�r�d@�u��/x\�ębp� �vdܫ���g%����iw��y3k��ye�n��bSq��@�t��o.�w��U�a����d`�R�f��W��h�-x�kk�emn)��R�q�\@?t@��.�w��Z��t�f4��u�h���v�j��xxm0x�yosekz.q�R|{itP?�|�w-�~�zK�'r�p{��s�qԜ�u#s��vFtgw�wtu�d�x�w*Q�z%x�?E{�zb-�}�|X��p�z���r'z�ssj{@�(t�{�vxv|c�wy|Qy +}>�z�}�-R|�~H�(o���Yp�����q݃^��s=��uPt��;b�vS��PPx�<>Ay���-|0���m��{��o���p��z��r���t?s��^a�uQ��O�w+�T=�y>��,�{��¹�lu�S��m����oou���{p���sGr��latq��Ovk�?=tx��j,�{ �@��k����m�ܖ�n��l��p��rxqؔM`Ws���N�uȌ�=&x��,�z�����j��4lg����m���om��q�q0��_�s*�9N uI�_<�w��6,�z@����ja�観k���)m\�|�2n��q)p�� _<r��`M�tړl<�wJ�),zy�����}!e��u}Dh,�9}�j��}�l�pp~.o^�~�q�L�!t";��w+��zU��{oK�j{ipϒ{�r>�|2s�o�|�u]�}@v�LO}�xT;"~�z-*��|L��y(x�*y�yr� z$y��gWT�aˢ�ĮkTd@D\dPPp-HG��&]�30�����;s�Cg(�� 1DE�*n�6ܵa�z�*�&��<��//6�� �O?��Q}�0$ 8_��{���[w� �/��!f�UmxrI�WB���5�(����)2����.$��5U��o�}Z�!O�O����q��m�������>�>P�3��ĸg|�,�X�`���S$�>BG���DǕu��#�i��#��܌-�`��xJ��!w����م:��(�����`[H�W��eQ�2U��FD�����`�|���:C��d���2��~Tv���k��dEeUb2�<o]�^j���j'{@��s�Jɻ�uiW����ŷ����o��Ws�%�PFU���V6[f����r�uOC��U(5�?���"/�/��b��;��H���-O +�o�_�%��{�"bHk�&9q\���W:���r���&�G�%2.i6�D�1�%~F���+~Z��C�?��8��V�� +�2�#�⮪����ui^#v +�NL���؏�S���E��Z�Ln�Ö`���=l�va�;(�>̽��p� ʠ������~��[����@��Qd��F!��7��H��$�������� ����#��d�Lt�!BO�K�*��G-i���C��r�B�.�U�l�mO�>� �,B�2W�<+�3�6��7���ߛ��@���)�۠&KO� 0ޏ����O� igm��82=D� �4FB[���!A�Ib4�~����Z��� *��fz\��O�t��F&�����ӝN&3x��F���[�H��j���z��&3n14���b��M� �zB��!� ��|��+�� +/�hw{��V�\l�s��T�j�g�?қ����۟�u �깮�D�}û�.��5�ʺ�(wM� ��ұ=�L����j�e�o(u\���y�P�X�����Ƣ8�p2�����23�2"uh�0 ��;�(3���-ybݷ�3����Wd��sF�@w� �,��8#���!��H*9��)iF^ +��P7��D�g��3I�33D_�����)�J�QNdO�m2�t�a':�=���J��.�۱� +s�`d��+�uu�-� ǵ�i�ȵ\L +�kw��/i���&G�1|91�:H�^���gW���@-��E���if�?Q��F?�/�Kv��ř�M�kz�݈u�N�0:ӎ3BJ]�PU@��VV�z��D��PC����9>R��Tl�{=E�Y^Sc��yjN��9����6b~mwj[�� Zl'�d}��[�Y�ގM�:tU9����WI�-#�d�=�sѣ�S ��I�Ku�Ʒ6i/JO{�s��{��c@6o���P�U,�'9cV�~�M6���I�Q�1�W�wo��T+�ml��F0��\�O��d��?�o���i��4��M��4M�C%�H�f�M[�r0p�[����p�|R���/Ld/_c8]����YpF�KM(���Ewo�@�jj�I0/���k�ad[�H�>��|/ѓ�L�� ��|0�0S���VR��ׂV2C�æ���a��v��4x��,'L��82��'�7���&n���&CĿ���f]9�-f]i<?h��_��]�ǿ�"��a���5!� �+��C�Q�O�}D{�p����՛�x�էɰ��i��X1kt́K�M�w:�h_�Id)[`m���:��'1���f%s����7�^V6,��0���|����3���3~��+�䔓*ow�PPK�� W ��{�W���0�.�����^�Mq��'r�>{���T������a��4EeNٟ�����ή"�V��_�ǔ3���t�f6���5��ҷ��,� �jP���6E���x)ͻ��U��Su�@��6M6�d����������F�����V��SˬG���Ŧw�Ơ��u�y�@>.���TȆ���V�Odj�?#驺�syc���A)w,zl<������ـ�B��*��7�i�j,\���P#���;}}�~��r4��fx�O�"Zh���NM���Be�@�(7���8,i���A#F�a�N}����qǖ*�lf����Z��ۋM��2�HB-����7�߅�,y�Y��#p��9|����q�����eے�NYƐ*��M��}�"A�튘6؈U�,��ۅ�#�����||���(qW�,��e��s��Y���!M�����ANJj�e6Ç�,��}��#��5��t�Pc�jO��f=_`�rh�T��kH���m�=o��p�2���s�(��Hv� "��zbtu�5k#j��l�_-�$nnS��jpDH���rB=t�ytn2ݑOv�)�yL ���|t��ri��Is ^ٟ�tS���uSHt�#v�=_�.x02�y�)B��{�! +��}~s��<x�i'��y?^W�Ly�SV��zOH-��{=:��{�2�|�)p��}�!g�~�s@��|h���g]�OR�r:GA=��^2��)��$�!��U�r���hn����]����R��y�G��Z<�����2�3� )��h��!����r��7��h/�ۋu]j�R�Rh����Gv���:<ِA��2�v��)҈ƃ*"-�=��rY����g��<�"]2���$R1���GD�T��<�����2�䆡)��?��"Y�ׂ�r+�0��g��Ȗ�]/�&�R�`��G;���<���42��^�u*�څ�"|���/j ��cj_���e�U᪹h K��$j�A��+mX7���pM.=�tsk%���v���\z`i���j@_�k�U֩im�K���oxA���q�7��ts�.��vp&(��y(6�0{�i[��p�_��`q�U���r�K��5t7A��<u�7˙wz.���yQ&��c{V��+}di$��w_O��w�U_�vxKk��x�Av��y�7͗�z�.ݒ�|&̍\}[ '�K~�hꭢ}9_��}AU-�)}TK4��}wAd��}�7Ζ�~..���~�'�v6 ����h����c_��z��U��{K�o��AO����7ԕ��L/���'A���� ӆ��h��ʉ[^~U�0�jK���EAC�ą17ה�1/7��D'r� �b!�k��hn�/�^����U�u�K �ʊEA8���7͔9��/A�O�7'����!H��AhZ����^��b��U�ؐ�K�'��A<�g��7ۓ��$/L�͆�'����!r������h`�JjNc��Qlyf���n�iMy�p�lf�sn�S�urq�@�x u</{,y��eEk��g�mE�j*o��l�p�x�n�r�e�qdtR�t +v|@Uv�x�.�z={9�)b�v�"e�v���hwl�Ej�x6w�m0yd�o�y�Rr�z�?�u�|.�ye}S�i`��Y�jc����f6̈�h��vRk�yc�n�gQNq�Y?Kt�S.Jx�L��^ي���aɉY�qd��%�vgf��u/jO��b�mf��P�p���>�t(�o.w����]^����`c���CcH�l�Vf+�;t)i0�a�ld��O�ȯ�>tsw�[-�wn���w\-����_A���Mb0���ke#�SsShA�!a7k���O|o��>#r�-�v��0��[D�n��^a����aS�h��dL�%r�g{��`�j哟On��-=�rf�v-�v��m�3Z���p]��`��܄c���r f؝C` jR��N�n�b=�q���-�vB�w�~o�`^��q&cc�r�fB��tiq�u�k�_�wIn�N1yq�<�{u8,-}py�mjy��n�lp�ptnR��rp/qs�r_;u�tM�w�v2<Ty�x�,|~{6��j�tn��l�uf��ntvT��pEwFo�r+xF^Jt8yZL�vkz;�x�{�+�{�}6�h�~4�lj�~F�(l�~L�Fn�~Qn�p�~e]er�~�L:uM~�;sw�~�+�z���f�� i���k�<~�m*�Rm�o_�n\�qǃ�K�tU��;w&��+�z@�ɮoe~���g�����iю}�k��:l�nH�[[�pʈ~Ks���:�vw��+�y��Q��dX���f����h�}j���Շ_S���VN�u��1���X�DY��d�0�@�/y{��e��`�@��=�P�����8� +� +���x��+����O��pO�T���+��g���xjZ��@���c}9`k`cTnw�?�+�^5�����j�䤢���T&�o +�l���E��x9�{�Xf�Pg@C_�[�G�=/�5��g�4��ʥ^E�*�z������ ��5�#�p�&��X��s�Y>���>��@?�n���C)�HKс�#�Eu��$�%������`^>[� +�(?`~�^x���0�����_�+�OË��v&"Y��D�>s�5x'��]����~���-��i�f�~�>NF" P������^O��G�#���ǖ����0�<�7�ӆ�7 �:s���XL��!kݱr�����x�{6�R�t�"+��@��q��*�7k�1��U誘Y�}(��~\H��`J䞂��\�� +����5�2[{�F�;�On������ݦ�� �*C�{2H�<��N-�S��2��Ur��u�UKm��5ųBu�� +}�����3�!�J�H$��#h^Qv�0�q�U���Y:�ʫ�a�Z=V.���}V�Z��fs�y����֧�M���P�8�:�x-k�ն(+�rީ�G�S�I�Э����O���w��iι�9јy��������&��z�8,k�.$��x�=rmRM���R����u�Mb;d��w0y��2֤�T�{������WƊ�6m|�+�8�EC`���Gd]��Mm��"��W�rS禜D��~A���S������ ��+�G6W#��jnA>p���u�w0�D(�MHO�B$�������vKѻX���{���'V���'5�c + +�sh�]T4�I����D�G�ãTD�(2BNlz�9�eB_ ݫ.�#�J�U��bG������ɰ������ �P��c36����߅!�3����?�o�/˼� ��4Ta1l-vKWZ������A�p�ɾ���<���>\�Щ��ހk�a8�Z5$�G���d�W#��{{��ߢ��! �e�8l&�V�lu4��ʚ��@ԸQ��������WJ"�������쎛�����)�9(�6�gf�y�'��1?�J��L)��b���쭢���l��]4�L�kۘ�Pp�u�ﲹ�)nCA �Ŷ+2d���EH�'��H�m&Y3�u���ѷ��k�ѽ���ӭ���1��n�]�_Z�<ڮ�Rvӛ���pj��m9G݂������#j}d��A�-u�ڠ����� +�0�\C"���dhK>م�����ٸ�:IF�q�\BVhF�'$�[I�&3����B��t��K\ �D��'�`;�I[�"��%�#���N���\����I +|?�a��8+�ş3�"-A��ש�_ZZ�K�O%u6`����X{c�ͯw1����$���+��O�M{�'���E�],�j�z6���+���~��Q��k a=�_���/E ��q����bV�k��&S��7<R5�|m[N�S�<�T[�'���c�֝"16`���f�i+m�Ԃ���E��h����6��=��2%w ��\W��w3/VWx�G��k�� (�+��K6\�G��k6ygf���p86�,W C ~�����8�y�q' Sk���3��vI���ժ*�/��kffԛ]��_M����5Ɵ��$Ϲv��3����\�2�e*��^\?����|�_��cj��1��xڶ+����em�[�8���@�Ń�r�1���3�4�6=����v���+�f��5�R���j�W����u��M!\��7c�{1�'a����`&y[8#��H���3��Ci\OR<y��0m�O�y3lN2'�\N`�́QSL��'�}�)�R�찧�R3I�w('�g���V!��pG�Je�ضR.u��.��j�O[GC�����d5�a��L!_s��d݂F����\nMͳ�&ֹj~*��A��%y������2[�\���f�-:H�Leyby � +� ��}��s����-j������5+ڲkE���Z5ֵ��ޛc����[GS�J��o�Ť��������+���unR�Ɖ�o���Q'�j +���9y<�i;M����B�] +���Y�5S�A*bPW#�X�~$u2�ξ/1�a��+���` ����cv&�L/�0�̰��;t)H܄|�E���9�1��ݎ��j�Ɇ'u/���qvC��|���\l��W���ja���C�m�^~nc�=��=�7E�m+�O^� |��v�d�,�<8L�O�j�%=���Y0o�}�ď��vCB�W[�K&��I>f�g\"�&]��KOÑ:�%ije�B>�%���j�:l=��T1e~��/�ߪg� ���I0^Y��V)�<�^�ϑ�% +�զՏQS-W��GpaθD�8�ߠ9�D֑Ճ�XM'� +��U��J�]I�"��mt��e�uuE�)��-3`�Ҍ� SoO�����������6Ju@$�Z�Z��ǚ����;���o������a��m>݄92)@m��{�����������>�-�V�|���������WU�>r�$Ӳ]�qّ¸��z�EYuɔ��>�GT@蚩�\�'��}њG����9��mp.d.@L4c�&,��r;b� ӂ���d�l����t3�ݦ�]Q<�b��-w ����N�k�� k�b�K�%����H���@j��"�W4�sf��|A�a{��8�c�%�J@b��W���\��E���':Ehs�ř�=�}��9fǹ��T��W�!3ߔ�% פԘ�]YzĀ&XIkWdP�ي�b�]�9g���bI��i�����$ �O�1wu_)��x��S$P�)m/�UI�.m�psf5�Uwl}oy�h� 4�;=DU�IKS��DS�j�j:�?�2�*w�0P��4��o���+G��4O6�j�eu���H�W)ϛ=���ݮȆ��s�51�� o���k���a�I�ӽ֒Wo�0�%>��#}?V�5N���_�����r}��%�7��� +�Լ��{�!`�D}���K_�4� +�!���Q\��Hҽ��zȔ�H�N�>�uA-^Ჰ�bg��%+k�5���8�W� #�wi+���q��0��k�hc��uTT�[����`�5�Z[�`�J� &���-��v�**��cs0����:�-�7���o�3G�(�Z!�d���z Q}v��x�'E����}���aQ#*��'���vi�Ʒ|'i��n����˵Y���;�eR{��E�1��v��i�k�Y��T�2����4o�/��;��K��|O c�� +Rr_��T��'�U�t�Kyγ�z�a�L�=z�s#k�)��|O����Ā�܇��:a�x�im&��&^c���oIѓ`� +���W��8�2K/�ױϬ˽���^��i�����p�u�����O���:JD�:WtG<Z2��]uyy�+���0��H5W�?16א ~u��[4'�)B��rj�X��G���>��<�8Y�J] +Մ�y�iZP�-|xm�4��r�Qe�`�dZ�H;4�S����X1̚�`��w����p�u>�7<dE,]��5�J�!���T�%"���7%:� -+�6\�w�����O��1=�zs��[ITNX��)bOIUq~�JY�����鮦�t ͆/?��w�U[j��+ϖQz�U�R��'d(�_���X�q��B�y��g5m���V�e�q}��J��sg[�\[���>� H��2��<?\�`��L���8�n�/�j?*��BgK�ߩd�}��d��"KK{ �LT��k�a�(�·t=no��4���i�H�A�-:��s0J�ַYa�<Sebv]� +�%�;�8;2�/+B�M��q�vs$`ى�Y4/�\ssi iUcd���U���a����fh�6ua�P�����&>�%�C�d>�zES�?��+��&��e�{�\�Q>��+)� ��^T9Z�P���F���������V+�@������l@A ��B� +r�3����L2�$��$���x ����*,^-�ڷ[]��<**�R�������I�<E�|N���B���j��*�K�=���A���ua�2�%V���/�.RC���v(ݴ�ܥ�Kp\�� t!w-<����ar[�fA72�:%�E;���),�Aj�&%yޑ$��xPM�E�@��Af�Wxx����M�%|zW�6�J�i,�o�V�^>npdk�ŻΫ �:�������C�������>�KXi��<�_�TT���Ֆ��q�cs�.�JmZ�E�����:��^΄���hsVIbm8tS��X&^ a*Ɋ���n�^�m����=A2�s��^�mICca|k��`�K��{��"Y١:nf�,ڱ�W x�_n~� �� +!f�睥��#� ��A�ɧo��(u� +gį�Vg攷���E)��?n�/ؠ�bd��S�u3�Q��Q���I�B`�\��C!���d� +�P�,���2QC���[P���һ�n�`��R������XYU�^��'�,|Y5G�4-}�<����k�C���fގo�ۆ3������7��%�R����/4��!=�a�'��m���fUg�L���(CfU]@::&�� +�wo��߿���D[D$��<��H�k���U��*I�#;He6�i*��80C����T�N/h%��u�hvL�5'�ƭs*=%s+�:V9˲O�%����(LWӖ�s��w��n0~~I`����F��嵃v���&��K^U�*^�6U>,�V��{�:T�5zG�Fd������x|��4Z�ٲ�� �u�'�ʦ��"��Ww��[��f^�'0X�cx���������2��rK�J�J�D��������Jm��B�|CÁ=�55oc/�����h��N��L9�'0�jI��.���������� =$!_��3�s�^�>pX0�]S�c���Թ`gi�9��Q?�+�,O�|ek���kC)6b���f!)�,�M�����jQ����Z�F��_���Y[-�ۈfiv&���m�H�!�����`5o��I��xu�d��P#�F� +�P&�����h_2�n�nm��MsC�?�������w������O��t�[P�k+�j��n��A ��ǐ������H�ځ��Y�*�z��ל`��L﵋TL��0������1|w:4�4o�����(���%����j��̨5Y��J_���|���f������y�l0���0����D��O+/�.5�T�"��$8��[g)T`MH��?�Ɠ��\�<f\o���-1�b�y^�Q���E�E����*����e�U�.�_3P}7&^l������X���x��V�MCG|���0A~������%_����o��À�c`�4]~rf�5��o���{�/DRe�)��R��'2:(FQ�KL�U�Du�4�9��%���O��'����E��Gts���Ӻ|U[��nl�M�Ӵ�� +���/8*�;,��a���8�s�k� ��~!�!�@)��֧�&Ñs<-�s�Z��2�Eb��T�b~A��A�}D�ʺ0��S��{��{G�a�oqB͝$��F8���z��*��d�������:ٟЕLza:J��ea�������q�� ��T�*�1�"}�!�@��k���˳�߬�B/�lEy�~��eK���\�5��$���O�=h���Z�����͓ނ9�����`�_��������ݎ�[�9�Ĥ����u2B�\s�� �u5=��@�Ό��p@�z t�;�*+��.��Z�����a]�1��l�R�S���o����� +�Кr��H�Y�K��g�<�`��7/�|�+4�A���*�K֨8���1��%��-1w������?Ɩ����)�r���~�K0�;h���+f��g:"&�6)�r����p�c��y�B��6 b����#�&l�:w����>fިÕyL/�\Z������j�@��Ν(�W�ڢu�����d>�P"Y��d'$�$�ʗ���V�J+W�>pG��[��^���Gڻ����2|M5��k�ci{��ZJb��ILF<�fB>�P��C��R7<]'�w����K�Í���QXb����*� +��$f»��~ ^�̈́:�)�]��}�p��A(��+�R���X��zE����;b1t�!���9�ݠ�B���j�`�d�>���!�L7g���h%<d:@dA��C��<�@��߈���@��.�������Z�j���@pC䂻Qab!����M�b�q�q��z�b��ە�3;����@�A��K�$�˰E��N����T��ۢ�H=j�o�n_a|�1��r(���'�m�r��Q˰�lp;�Ա�{�qe���������=�^ՐYc�I$�ۖ(o%�����\�-�Kч�����Α�v��K�W0d��ngXg��IF�~�������X��QH��l8'Kr������gJ���� +*Xc�Z3}�E�ٓD�sj�d9F�K�䛉J� � �I1{�V!xnK�-e>����7n�ׅ����_Qg1�R2Ǽĸ:@�n�\�K�X������)�'�WI�C0hݤ�!XL}����4��l5� Vh2��,��?��bLb#(sÀy�tk]:ibP�_"��2S&�F�� ߆*:�/~���5�l�6���fݻ� ���Ӡ��v�<N�E���"A�M�B���I܆=���ӰD��!5��o�G�]��Ml[U��Z~$g"��H�U�(�>�(l1���u��;8��q������i�7m�L[�@��Wxl�<R�s\�]1�^�>�g���� �Y<�#nMD��yY�ZO�E�X�;/C<_��IfG��u��R���O��M�++c�7�S�� +�4ƊaZ���ԃ������u���� Mߊ]�>]o����/�m^&=�Nh̕.�g*>d_�$�� +]�k����oj-���]��w�z��`��g`�@�XR�������SZ^6�u�V���^��o�����g��~X��Q�� �濮��a%{s T���p4{���HLydW�)YU�&R?���FD�/�'�g�H�7yO��G +�S0᪄�g :�po��)�-.XF:��e����*d�i��G{.㯙nwn.�t���Y���<�"��`����7�d��sSC���!�x$��g��:S����X�9��Y������%�r_��']4K����.q c�Yv�.㏢�Mr��m������*ADbW냊��M1�Dq�by��9���m��T'b�u�q�7�O�r�������}�y�XK�8���`����微�.;������~1K�}w���ҭ���rB;�ҏ�ޒ&�6 �Rr���*?j���䆑lu��g�ICk���M��|���v����h�ZY�Hn8�V��z��Q3N?�?��֫zGP������5�|No�(RG�J[�5���&Hs)qq}^�&2���n:z����ǰ�kFmP�03;7�N�s���i+Z�iӍ��� �^��z�s�7�T�m ,� ��zb�@��p����2�2{�9���6��ʄ��/�=��4�)�c��� x +t&8�3��B��-�(;�^S��e���dSy�7yG^�H@�Es��7<�A��Q|��h�[�\j���e��Z�Ҏy1|i�-��<C^ow���5���pc��P_���<.&n��;ˌpa��[y�y�$۫j���!�ѫ�$E�42�˚v�?ݴ��^�wnYg?G��9c���K�+%�<qWŔ��z^}NV��]QvS{�q�8�ڷu)?WV����1l��%�Wy���j�p���0#��>M�']�����|�k!���3h{�&��m��5&[K�i��K%�}UE���k̀��uhT��[�*�F���k�kO��Z �e�� ��e�v]G�ؼ;�G��L��W��[����d;o��o��3x��������Y{OEk[@��|�l��2��섐���^��F6a �9�u�UQ[�E�m�'*u�WA���w��:^WfA�w:�R�c��$DZ9-N�7���~c +� +?��;�A�34VfO������ 5��*Dv��Ue_�Rqr�_����pM�v��]���{�қ[;��f�4�(�c5ڑG����d�x�����E�jO����-n +|��g8�� K��ٶŲ�]�{r3�J�(��?ұ���q�l��u;S7���qWA}�ǰ�����=��o +�n��xg�|�GCT�p�T�aH���͗O�0�U`llڤ�C�lt��0�j�h�~��pڱY�_�,x��'�,�IU�jn�\�[M��z�����DB�b<Ô��]��T7S0C�o�}�2�%�s�F͘�MQ���ś�!�7f�Sѕ&.!m����Fk����(+O����Oȏ��@�W�1��f���G�0J��Z����-#�=����q�b>@@�g�IxFz�|�����\�E=�Y�g6�at�Һ*��SY�����5��T9vh��� �%2{}n���}I�90�v zRf����8kO�ʼ��jV�o�:*�x��H3�_ 6�WWx�4�\;�5ju���K:��:i�7�rʶ��Y�Ad��~X����:J1<����;��e�� +(�;�M�s���rlڪ�U[y5�����vw�(k +-��Ol��H���WeG㐣�݆L9s����Fp6���i&x���Иp0�C2�}�Txm�C���H#�ѽZy�ڇ�m{��+�E�Aa����W��d�V�Sy%�ې���8b�ש"SLL����1�4�$B�s��&��B��j��&�d@��Y��?O��+82}����-D^�����ݒD��(��P��R��{���Ѭ.���s��!�$��4��P���ڣ���o\�i�(�����#�u"��D��8� +���:�]�C������>�6����ڒ�������*������m@1GQm�lìOrus�g#� tk-ۤ��<���v+l�U�w +]�@��V9�9'��3ի�� �P�?#�0eD�a���S���#�[%�����LY����ƉU��U�_n����F��η4F�/V[��&+�;�k�+�4e[D7\�~YCm[�D�����������4M���n/���9�0����:/[�o��`�K����(�� +��T��o��rM�8���FECw�LhT��l������� �;=���L�t��^r%���|�TXN��d�R3O>����^������G�)� y����ۂ�2��b�+�Pg�DW�B��;T��+�4Q�v�����{����9輵;���!f��6~/ė|@�r~��E�M�$,<��`�2���+��oM�ҿ$ȵk�뤆���)<$�\nnu|�LX�������+z-]�:�r"���Xꗺ.KW�;���YFC� �:�Aǔ+�I�U�u���+�U>.+͋�;�SN@]��� ���L�U������X�Kx�6͑8=�*�U��4^q�ݗۥ>S韒�+�Ż�e�L��sf��� v?���m�!���'�粈�Y��v0��z�ْ2G����wT�1��e{B��H��M�,� �&fr(y���)�% ��P�����Ehl�% +$EVDĶ����to��\~6-�s��/�/���E���2<뤪t����:���mb��p��V�����n(Q�7:��ziZ����N�l*�3��m�iИ��`���� s���nX +�U��\П�b�i0���^Kc�=�!!{pwp�y��K��H��&�Ș/�U�D���g�#M@���1�����&����yf_s�Ir����Ŕ\�B�c���7�H�e�x�Xl��tbu�!��hI +&)�� ֩�rbp�s���;�CuGF�q�~~c6RbO��'l�"<͖����z [��T���0}�5y ��V�|E�W�r��ф��\�2�aAA��0 ��/ɷW&a�A +���AK]מ�q\k�P���U�"�Jѻ�?�W���{��j#�'rG�^���$U��)~V�H�D��Tup����7��e��Ê⚊��R�"�I��^�w0�^�+m��O��X���iM��i�-T��5ȝ��'���N�]�~{e�����r���5Ճ�-w��A������-��V��YF~�Ug��BO�Jt�8y�0���.{K��O�(��vlJ� u�S��0��փy��k�^?��6W��c+� +�C���l�]��E�ko�%���ݼ�脦�����g}<p���?��j~�t7�Q|/y �u�"-�Q߽����{ޥ��w�iN1j2F��c���߀9uTE�����ڵ粎t������ �;�HC;o�sTH#d������}�[aT���*Ч�ހG�X�;Pp�i�t$V.��x�P +��C�_"�>�h0�[[���tVۃw,���U���^|}�X?����4:a<X� s��%���هU)��<�@Z�Q�/�[�6����.� �0A=��f���x�Iҗ��Q�l�3\�P�BoJ]Դ�\>[3��������?,���ЛMOyI�Oi>� �'�|���2��k��x��o��6��<J�c�^|5�ܲZz;*�,�1��M;]���U��� ���DQ$6*ړ��Xz#���U��fZ,k���u���)jF��R6�:��*�hyY���p�I�~��K�SpMn�Qjm-+�y��ɽM�4q,��t0L$t�h!f����_�yb q��X𖠕@�Fb��/r��hf��Z`;k��4<a�%� K�E�b}��9v_Փ� ���U���k��w�3��H��/us���k�`�Ǚ�;3��������$B4\+;�j�K�D�� Z FF��v��E��u�{qcʰS��TK��k� +rS4�,F�S��Q�?���D ��"�u�%���Z�i�^,[U6Pw������S7$��!�E.����H���7�^ü����u������m[E^����)@Y�MSP�)'b^E�q���c�?�'F����x���m����uym.͇$|��O�Kb���1�c���w�Wln��~B���XfO�yDz��2�MӅ�B�QW���ci�2�� [�b},�1�E���w��^��k��b�)�k�,]��wH�ߦ�4�U���mϪKc`�C!��Z�ʎ�5�I�C�W� �fQ��9�Q�|U���ά�2=��-�I�d���� 2_���M��4� /ڨ��B��>oy�*��Zo�9��XY��i�����fNP?��1�k��� *���_B����u�p�ֲB[� ����4X������φ��}�����P����73�d"�dٮ&�<����ăT�>���x4�Y��"��G��XF%N�g��t2��S8.h��pq����#~��2�Hl<hކ�� +�aG��-?�J1��p�m�����"��2���V�z�|Raw�~�l�8� �����4�������������E�Z�Kݸ���UG�|�B1��&T6���;w��W��ٝ]8���X��y�W���G-����%��r9���Pv��X7i�x*�L�(�u��==��ϲ�͓mqqZe��&���߰�n�=jc�i�o��@����x/{Y���/�r�pՓ�-�k�b��(n���J;7��N]Ğ�� |ט9^R��,��q��i-�j5I�~Wfǒ�;*~x���F�M��u��ò~�7�����S.0.rm���4�P�M��X�� +d����6���͵�N|b*��4uv�v#3�֬ަq�V`i2d%��5���0����7Ӝ���jx��9��x���!K�hF� bLb4�Ezcl��X�>�eҢ��(j=����~�n$�� Y9P�K���C/�q䢘��&l���r��S���1��|�8��+�����ۺ���p5q ���Z����(�QӸ�AX��!\�$$$C�srL2�$�L��%,���*OQ�u��Oł��BuUX뵊]�x��V��~�n�,��[�|�nC� +-�bY@�X?(�e�92�"կ)f�m��6@>��_�|�Xȼ ���LN�+VJ2�v&����ǂ��g�a:y�*=>�C�,꽅�zq����wΣa���V�bP$���Ԇ3H����* +|�t�c^�7�C�v��f�C���UʆN�\�A�X�)�M��Ȋ��Q�r�K{���Fۏe�"j��%��h��C�����i�24��.$�Ҳ�ɹ�D��Ӯ�?2����]HMt���a���PZ�+C��9�J*��_r%QN�H�4�r�{W)� |�em}�^�e��ٻ +�.�v���_.e'T�)�V4��(F��o��Ugzf��0�=�r��ƣ�[(h��GjK��Ң��y�}����%�]�ʟ%��(y쭬��0�����L1���s�R1w^N�J�O�7���نy�oxõ��O���`�i0)�¿6T���@J���JL#��״��C���[!�)��9!���w�+����@,�&T��Q�0GU5����a�� +�5\1(���<U~�����ڌxݷ:vR�Ȇ�qV���t��. �d7J���<L���US����0ݠL��w�k^I�p2��Z������#*��͚i�1�.�~��x�E \M;.�7�vD�5枤���B��l�4 �&ɷ����͉�Qs�r�k�d� +�B�2i�N����ğ�'��:d�a����9�<o�=���:�O8���Zq��]��\�(�p�/@Γ��H�+�nind`�gA�د0iJ*��eW}o���߶�x�"omz�r��Q��u�_p=�=n_��%�!w~~S]��Jѯ5V�Q��z�<�L/8#����+�������>-�9]���������s�4���1y3���yʍ����/� ��G䇫~IĴ41��_�35g%@���.1N§�N�̡�P��i'�7����4��@r�z�8�Z?� ��i�;�f� +�c�E�N�O�ri@�D�������u{A�6.ѱ>1���_�:,� ��Jf?�/�L���C�N�N��*E]٭!�����mq�=p�)���ݍ� +�c�F�M�H���?��b;t�%�� 7�r�~�����L&�3>��ﰞ�~6slD'9�?��6��T�ϙ��^5�;� +k[�}����gX0^h�q$W�KJm3�qV/f�̔��&��|�}3����1���s�O[�9�"6��ε�6�9�K���+�|d���j�8a�&�k��ɐ���=9w�U�ͩ��?�������|����0,����lug��z���eU,}*���e-���^u��G�S���oy��7��7��bC#Q����ş�n��[�,(��l�^ 6���!����ʌ�>�"�:�j���<rB�a̪�� NfE���kI8<*�͒"�e�[�,�A��v:ks�Cl.�\șc�+��5*�W���&��ŀ~�\K�4�sR^�?ӕ��x0v�>biq������2�$V1�\$���Ǖw��kGԣ����Q����%�[�����`�ѐ�J�Ή `��]���+Y�)�u�!*�5��(H��Id��a�oE�lw1��7�����hY�xЈr���M��y�A39S��cLYg�Bل*d��lQ��� ���P/���Džm���l)��I�R�`i��?Ğ���A��Y訌�:��e���t��/� �y�sn琸�M����>d�SG�&H�P���e*p���:��v��F���ӫ�}9��|%*�C��d�ڌ����T���m ؍��θSV��k��q�����~V�Q<��f�� +�C�B��'��L�H�?� 6���ǍZWz��jxA�|�+cs�h�i�#a�43����K�Zr?�'H:���m�2��A�Ľ�e�Эd�c�M^��k�^�C�j#,���@D�L2����I~tHGǫ��J̀�e��� W�`_q�Z�b�� +�"�p�p߄CH�� I&�d2�L�)x�ʪ��*j�XEtJ�J]�EZ_=@�X��Y�����#>�(�U���T��#tg��E �����U�O4E���]cD��ix`Ff����w0b(���U +��Y��]sA��vj�fh�w@A,b��x#�i���u+����E���_�X��x˼U-�E�W'��_�@���c�e2b1(��h�^EN�� +�`V�[@-k��b���n�_P����e�:��60���������l�u-'\��j|D�me;��tH�GD�˪&����աD!ߪ�@��M��?B�=�r���Εt<�GH�8�Jd ��l�M���i�lv>Sw��o2�Y�!�;DL��ž�]�������˶�R�����f;˷��-r��0�ۏ첸�R}�"��?5#��mk+3�(���(.���R���xP{K$ ���~?uX� m�����(U$C[K����Il9v���L�"�F���]C2q�.�OI�6�1�Q��x� �1i��Q�Zxl��e_��)O&uZ���C�j7$6����} �A~��8zX�������m�b|�n�^i>�]��fQ����Bch�JDj^��k��]�r�ou��#I���h +8ЂTc�1)�ü��W�+�-�*�kx�u��e�I�~���PE�:���LR] &��t-¬^�*$M�4-�b������B����c��鎳�A9Z�u�K�Dۄ������T}��p�p;dz��x0w +���7 ? r����lJ�����U/�3B��K3h��f@��j�m1��R�זD*��p����֓�2��O�(Vv�� +n���d���mMAO���;�1�S`�M����-a6��)��N�˛,��_ +�l[c�.H�і%�Ŗش+#]l��c�ٶ����$ �s�~�&���b�~In^�Y�6-�쪸ʟ���/F�R��a` �����Ei|��o���$Գ��h:)=�k�Zv��6���g|V'E����;�R�����^�t\"ZW�� +Y���nN'⢒���Li�K�[��!6b����jnf�$=�+*�.Ӄ���K�vI�chP�*%�z��ډ,1-�pGs���D�8D�C7x��&�X���8e�!j5kL��4�Y�� ��&Xq����Y�LA)$�]�s�_g�^.��[����fx���́{�s��Hq��� ������o����� K���Fa�a)1$Poגי�DO̐Ń��w�q?0$װ����ޮxYZ�N��8$��8��_ُ$�`�l�cZ��6��ݐ?�ȇY�+�0�H5z�ቔkQ}Ö<i�|�>!���~QQ���2�&P{B�cH��|��7g�z�9^sy��l������u^�A��;�R�ckU�>�)����v�Q�8�:oV�c���s�K���6��8#7�>^nNk�_�<w�*>��m�ڹ3���"Ψ��Ţl�`����D#��������ޣ7W-��#���h����<�L�qf6��6@��0}����ك�i���h�� ���ӛ��R�$�0�a�p��s���T9��˟� sJЫ��lO��I�w7±A8j^Տ�ork�l��17�x�&��e���o��U��d!SQ2��b+��(k�m\5���/���>�D��:G"DxA4�>���X�(��� �6b��-X>����*�'q�k�xO��OX��+�{�5�|fP|�~NE����z�E�y?��|�S���-�2��<�3��}����=���`�[��~���#l���t��G���P���j_� �_���߷,����c��n�$k��a�����M�=U�lM�Q���"g��Ɇ5iЉ�5M�%7R�%q���v�L�S�G�[]]��M���� vK�s��w��>���q|� +�7�p�L=��#.��[��CjϨ��^w�UOl���Tv�Ce�����������]�j2��0�uuFf�ձ��ʪ�:�AƆ"E�*��S��'_ +��!���Z�:���Qpt��4��7�rv�윽Ys��9��{�<����Fr��׃d�+G1 F�~ /b�m1�&��&�x����,�^��LtZn��D<�t"��7�4�"���ף.9���m��-��6��Iq�5�����5.1g�)�j�����������!0��OD<%n�{?ns��������8�Y����F<�p ���r�wPq�D��!\ ���F���KA��^���Z�Ũ�ˍ� �R���휃�E��Ꮵ��l�a�������?��aZ�뵘lt�U��t�W�z������s1��͘iea1�����M�1�g͞���v��w������x��e�W�m��O�V�����u�m6l�Ǧ�mav��ov�u��m�w8�������m�^wO/o�}����?t���c�N�:|���s�/\ �u9:&�J\|B"�D�1X I�dJ��Դ�k�Y����y��Bz���bs�<��D(K�2��T�*+���RWkjj봺z}CcSsKk[{���������[}��w�������>z4����g�?�x����7o߽�0���6m��3fB|=k���s��Λ� 4�|K��5~X���p���%�&�(�*�,�.�0���<��6��6�4^�����?|�X@`P�sB�#�b�$ PX<1����A�O�3�l.O I�r���O�S��#?UB�P' +�B�P��T;��}�*~>22 +E�OL���_�~���[�������� g,v�,�cy]�zF��l�(��}FVύP�q㫪���J6�A�$�*�H���$���Ρ�����`v0;��f�×9�zL2���ٞQC|�Q�M5���x��zA�R+��Ԕ k*x��Gj�sH�%Ť^Va�ݼ����r~��Lȡ�3h��5$؋�#����2��'$ �� +�,��F�P].����V!���fo��Dc&�2`* �_'ǹ{# ݰw%{2��>��aQ�*X��SV*�5r1V/��\�����2���d��L9�x~d����E�]0� +���^z[�AKm���<�L!���� |���t䳁�,&p#�A�e* �aʁ�'pB�r�� }��1��zw�A���j$��� +�,��9�Kͅ|�-��7\c��L� Sy�r���Rꈼ_��bl؞�Ұ�U��KT�U|YB[��3�@S���J���Ӹ�!�C�2�)gO��|�dgس�u�����zw��2P�W^R�d���\=M4� +���z�Oh'���7�@�nOP��J�-�y���V;Lg�]f�Γ'�R���j�^[(���Ā� +y�C�BI@l3�o?� �q�M����zۨ{�6����T�և�*?]FW^V���|�.G�2 �T�!YHl" Iͦ +~���]��tˑ�ն��:6^��m5��������+�)��U� +�&G��͒�ҥ�U �>IL�ŤSK�`�`�;��m\�o����j��c{.]w�{]}A�][�U���T�5�䄚T9��"#֑�$-QJ֙ +(���R;�7������n^���윆����a�:V�V�T����ST@e���&��� +�P�kL�l���vw���6�Է�U8{`>��5#��8-Eʦhc�5I��j���ɱUx�(EU��������u=X�U=���ux�}{tj�G +�����4�a�(=���Gr��(n�Ë���qZ��T�i�����vU�肝���F7�� :&|�ؾ����ĮȬ8CLNlG\nt{B��vx~T2?�]ъ�����?����:��B':��������n��A���S�+���w.�"nG%���PB��RBz�^�ML�p�z�&*�T@�� �mH����h���؇��Dc�����&Z�T_�Wj�5yI5���LOї��5��m + � �һE��/��`v0;��f��ˡp��;�ϙ־�A���}��U�l��K��8��SQC#k�דtY�FU��VEr�AF̾!���b7���E�|��{�e����w��Y�쓌�E��8�T�@V�4U4��<7�I�Ii�����������A(��R��@�����: j:��8������v��ug����*t��E@EQ��*�r �럄B��;� !�rI�C@V@�]��_���Ӈ�Q����5��<�n��.>��U�W�/)�a�Y�/-Ry%�F���2"� InK/i��"�t��Y�{�p�8d�|�Q\Đx��i'6ĩ/�U�Ui��5��gԧye�bLY��(k�e��&�\1q�(h��-����Ev;w��Λ�6 ��!5kC�(x�H��@����m�՝�N��&ו�y UF�e�a�f5n\+#�$�,�۾���.�w���A��ڐ&�T%_}ؗ�Y6"�s���9G��&��j�� �ơ���R9a�WL����t~�-��m� ��A���Nv$�&��! �2p��0t�{z$�?5Z uTj���]Ġ��`9��t�& f,���h�؈!��%g�S$��&T<6n�cK /��'z&��b�p��`F*��8b�(�@����H3x!}'�: yo8�I��P&\���P����{�C��@R�t(���ɓ�ʌ*rH1��&���d��x'�McČ��`�$f��>��m|�S�~䃱ؕ�$�x0�mq]P��e&� i�#�eF6AWB~��8��QChi�T�ɞ <|�����]z��[u*�nz!�b�g��9�Ԓ�r3l��q X�r3"��� >��4�SPh=m@����A�8�{Ͼ�+\�Ǖ--�F�����3a��@��4�M�6�;ҩ'�Z���8JԐ�pj��j�6 �D�z�Q0�'����չ=��;Q���v��(��X���� �N#��0-z���#��}���2��Ң�����>�ƾ#�Ah��w��8Vw�5�C�/[�r�:mU�5�f�Y���H�7H�����)N���6��SP��X�'>�}�<��5ӽ�e�~y'NNdtO���ݗd��jM� ��Z��̓x3�Y��A��dE��CM&�-ڀjG�o����ž�����>ْm\��-��u� �Z���T��S#%��xG�;�Ѣ�8]�0^�`#�Hƺ����b~ں�n����A��-9���*�V��i��TR8� +��`'�yM>��a�AT�m#GђZVZ��˪ݐ��ETD������_l �}�m�ϒdo�8�z�����P���c�)���Vd�jG�T �*��:YϪ�z*�M����S�qK�P�}���W7��K۫Ov*�o���m;C��z�z�q�t}�J���e��V�l��|e��ryI�t��V2�j)�k��b腳��h�����?��|��lIl�N^�mz�Qr}�\E���+������ݫl(�[�Xp��1ٔ�Z��[m@_Xi�䮠����p���v�f�y�?q�)����?GZ�3�=��@W��� =T�����2lvsd�rڰ�P챢�ށz��E ���� ���q�5�Y�Tp +yO�C�Ż���R�eb &��l�[Ghm������b9��M�%��>]8��!p���~�{��g���k�l�B�4�2?ȩV����n���I�����6 +�e%2G-8�o� ��Q����P6n�c���N/J/�F�Q�&= }-9�>#,� �+�>n���ƙ�,��Π���z,�>3�'Џ�ԍ���I�����6�M���o$G������Wd�o�s�f��ܐ�T:�jGyh��K�ڻ)k[��Le���ٓ���#�ceA>V�l� ��������o�iE�Ǫ�2p˪l�Me.{J~I�T��"��C�vn�c���5�3�}-���"Ðh�I'ِ,���kHM"D�[Yj�sUZ�CM:f��D˂�+�)U� +��N�a��aZfk@�� �0�,��"IBL�tr�AlĐ�� N9�V�r�:��#�Q��1��h�a�x!c��oD��jԀE������_�dLq�i&]8�N�L�S����NI��S��/�)W����K�lƜ5�==\�[jTv]�٨@�(��W�K�s�m!fwO��)�ii�L�ڤ���?鑓�#�tɕOL�=�?ٯ������9��,o�9̳��t���2����UA��P��@C6����-!d!��@ BB6�B�ĂQD���k���op��9��4����M��re���9�*��Ӎ������RM��d�0W�:�r�B�5*G1G�R�Bd; �ib"P'd�h8^��`B��5yϕJ\���L�΄*nW��2���b�߭�L�)�3t�*E&�' �sd�r* ��i����@s��?��/=:V�h,~ߗ��;{���u15����k�}6�EnA;��xo��bh�S$u�,N%��ɕ�8�j�� ��'����q/�q�O=�`�S)����г�,�T���ר�s���=@o5�-z�$^˚Fk�3(�l�UA�?5(��!�4���v��(_uw1�f�f:�w-�}h�X��Kvz�q��A���O�Q�� NϜ@�:&�z�$B/���$Gc�*�8�?���z0�;ߗ��]�/ZZ���V��#sY]�X&q�zlK�NC���dP<dՋ�c�1ƶ��ؽ�P��Ҹ�=��Ӷ�1��S�o�<X�8�/%��3Y<I�X�s�:�Hs�oe�vn��$�������G���H�7�G��8`ݗ�$����1�]�\?�2^OdJ���tJ�z}�eb����8B!���v���@�YN��݅4wBT_D�Ձ}`0��Kw������ͮGf�GU��l�,&��3�=m�2)����(ʼn�'��qv�c��F��+c>¶�G�F������ޜ�=��;�����èj��!,�z�5�ϥ�+D�`���C��^����n��"�NJ��f�9�02����?��������}�ɉ��=y���Ν���i*��m��Jn�L����6M�$_��e A� (��$e��EU�����Ȁ�ӏ^9���������,�>I�oG�s}YE�HBW����h���֯�յ�������YTw�L3�r�S1M��O�eS-��)*d`���[�������hh��%؝��j��ӣ��͓��\$|�[��X�RK���@-_��J���oЌ+כ�ŋ8V�"����]�?���/&�����������{���d_$]B?�,k�ʯ������2x�F5�x�u�n#��s���� +[�������o�y�D��s?����{h�ow���1,��8 �f�L?��CVA��yE%� +K.?)-������amU����[�5�[�ڜ���Ⱥ�Mt��M�0���o��?�s�}*�Ϝ|-��.̩� �{JZV�u�(�lIne�C�6�����%�F��Q������n�j̍�;\M�{��w ��5��6��4��q@p�$��{�{�bK��XQVx��&�\^f��A{�O���m�����.���B����0b�� ���@��ħ/��d�?��4m�/�o +��y0��w��A6k��lo�z�=vV�tbd.R�C�{,�DŽ4�����]@��Гz�Ӂ4#���L�#y��,�xK|�}]Xÿ�C���>�A�i�6��p�D�1�|��,H�ψ���P�(@c����ii@���Rq���2��[eaU^��FR��6J�z��!���` {��v'�����f��Q��m�)0}^(�6Rc�$5 (�r~P�,y�9��wM�:���(�^�։gDH�D��ϡy�l������"�0A4�t!5F�5�bl��� #@�� +�)�ۚ�+Ou�`����;�\� mqׂ�Z4+�+'�8���bqu2Ǭ�N� ���G��t$���� ���F��7 �G�,)�������O '�6��b��gSo��/+�Wu��������Q.ml���c`rj�($oQM +��0��rIF?�i����#@���I�_�S�����>8�Z7g�W-[���ܫ�� J?&�[���1Ck\����B�"�mф;[���� + ���7q��D +�$f�Øt�;Sj͖%q�z��f�g,��;�-�^��Q`-}"Ҙ�G�H���v��- �35Sl�.�J7��oÉ�@�����5�p�Ng�mw���ٱ�ٙ�mu���*ꊸ����/#7H �NH ��@HB��\�$77!�P���x��E�.�o�v��[������O���8������bD>��������Π����)Q���6A�Y�-�a�W�j�LGU-o��F<B��8�4���4��N�_ � �T�%�w�O_�@�����9{q�/��ߔ�`P�ɥX���h��{j*h�Z;��0T��J�5R�+��� 4x�|_O �9�g.����m�Φ�� �^p���܀bFl���Y\u\,R�ՍR���J� ��K5�d�A䉆Hl���^js�l�x��9��:�c6:��- �?��y{"38�\n����,9"ARU��+���J_��ʆ��Q��$��e6W����}HN��SA[�����2�:7�<v7�=�DU��٭�٭��ڀ�St$K���������\`˓�l�V��+���h���O{���/�y@6�N�. �D�OFN�eئ#��2��z� ���F�if��D_h$iK�8uyZE�A(9�peko�R� 8����y���g�L��Wm��|!S�~q�`��`�l*��7��aڲ�+�QR�%_E6����̌�VY��:+B+��5-���M����@��1�u�q���gq��;s'/9���?�lRě��a�$si���hIQAAt>�7k1Fj�@3����\=ۉ� <��'��#Gޙ�?�<t�cz�ЏC��C-K���4���v"��b$�Sj���ѭ�^��M��;�ڑ�R%�R��1Wi���u�%���������|�ϻ{��<��k}�)_���=������M�V����6�(ƆkF�[�� +Ź��m���zw�,��F���p h9���voZ����ͯw�x��p����o��=3��b���� +�$���ʨ����!G�l�0��3Dh�v��Yv� s��)�F��h�)�-����܀n�WK�/o>��u��ߎ�o� �q���xeP I�É�h1�nzY���=�W�uM��զ��g��ԥ��'�(e]-gCGi.�];^���ɹ�>�~��o�[?)�� �oO�P^�M!=�aǠ����tR�l69m^�rU�4��\� O��%�%�-,O�]T�B��*s�;�?M���w�+��Pm���v{ւC)��#H������ܥ��O��)�i����h�\L�C.�!��K��'b��1�����HQs�.�����w��{�ϟ��/�2��Tp� �c6�#s6"���b�I��)���i�+��˰��exV��z�:;�9���s�YAn�S�K�G?��v��O������W{����$����a �R*����ը��1�o���7��l���� ���˯�WC^������kh��+����qf7� :�B|�J�+*�u}B�2#�P�C���Ѧˋ�S%e���*���:�g� c�Ch�܁li��)� +�`�Fm�5�{����kï �� ��5���!>s���^���sUX�t�9UJ厓���7��YΆ�-P��7 $*g�z0W��]y�����l`\:XA>�s9�7<�5'&c�E=ff��ӕD�dyi�x M8ZH�<Wa�T6T�چ�h��AgEt��� L�1�� �A�Cc�#�V��Evr�}fN�t �1I#7ܤ� G��ۆ +�r;���a��t��)��Ch��H�^��0���� uΆ��c�p�.]��� ~x�^Lޓ(q��Uv�����&ro�(�Je���P��<_ׇ�{Q +c7Rg4�tFZg�a��CC�����Q��x�!��)(��04e�) +�T����1�2�Υ�f�8��E��6G ��V�����^��R��(�E�֘��Y�ՙ��>6�.����"4F�m Iz���9��)�d�1��ź� F+)mju�@a��7�g��DfFiUcԝR��ڊ�X�x�i�>6|X�G��/@@+$���k��a�����Qbќ0��/�n�M��ҋ��]%�:c!ר�ZTxY���jq4�F�ּ]X��yw�?����=5a'���v:�u�]��㌵��u=���,�"�@n9� �$$!�+���E�@�AHGBB�p��EA.�"(�hA�P�뷙�ӗ}�Ї��w� +oP�E�i������ԑ9�q�ͩ�[ �q)Q<\U�h.g�Y}��WS(35Q���EJ�Yj)zS ��h/P�k�����<�^~��'���?aS�|�� ��A�:8}F�/�R�+�����|����cha +� 4�Y^��H���j��ZU�7 +����[C��1 ?w�<}A�w�{�_�K�yē����]P�m�p\�+�ؐ-� T�źˠ���RV�YĐ[�t���X;�-i�(i���7[�9GP�q4z���g�6����@���0�=4kֈ�\�c�-M�ANTij��*�A�+7V� �|��ZQ�4�f��m�l��d/ �5����@�� +�ݽ��#�]�w̋���Usri07mN�w�ˌ|��!W��Q�RQI���c� fWlerU���:Gg���&{�� q? +�n.��������|f�0�rg$u͚B���8�6���9�A�$�Vˊ:�bVoi �L�,EU���J�@!Og)�Л�����@�v4�>4�=A�[�+�g�� $fy4"nv,9r1��gJc�:�5J-AY�L�� +:J匞Y��*��ϗȭy�5�Zg!W�����6�����@����@6,�G����D�OMBӆF`�+��٘^-��+*u�j���/i�u�UcnC�9K)��7h�����s�z����� �5�]��N��������ٰ;��T�d~><lt&aK��]��VTUu_���;�����#�;st��x���m����-&ls{^i�� �� +g�9yN�nZ�Ϯ^sw�s�9�qq.�5��4�̨��&��J���l��d��2zY���.d����ؓj0t���=��#ۀ��{�:y�?����ڈ���-w����~��B�=wB���(��z�?�1G�E����AR#�R�ƙ�����6T�P�f�kG5��^C����� s����#?�9z�� ��%g������^���t!�̛�a2�Rx�c����,i�p�?T��Л�VN��W#�E��~���j7 s���Z��o��_;�wf����� ���.��U��/����` +c�(�� N`+�G�D�+���:�%Z}�E�2u��>T�J�4& *��o��w��}�� ��u��?���z�X�c���Α�ggS�+~���P2u.���3�M��V�&����*��1Z,�_e����%I#\i�P�pYRg/Pph������m�s�Y��}��~'�kG��s4���T�j`�ޅ��X~>�3�e�n؈��2�4�"y�����'�����ʸq~t�Zh/���5�����k���o�f�صO�a��8�s߸F�_�$����@3q˰<�R �����d%��'���nQ�q����4f�M+���Ҩ|������׆�n��|�q���j��p�Ch��#�/ⳟ_�c�bQ�G0l� +�%=+�>>'n9;7�^^^�=1�.5?j���D'_X,�D,�Q��n�����?��t��/����J���\p� ��&��w!��ב���0؋���g�T�StZ�*j���|��� D=�bC�B�3�WYx{�o��t}�5�[�,�w������$ ���4LB�A#�oaQQ���\x�����ą�ʈ}IH��N��K�ȇ�ߠ����K��e���'�s�}*_}�;v����$p��;���$p�\,��1~ �?$�� � + +������!� +9�~��|?��}�S����R���wp����^@��Y�H{��VD�rqQ�"�Ş'Vpo�TU�$�V�d�DױJ�tz�t +�*�B��M"{�i��1�����a�=~o����ض�R[�� ��Q!��q/��e��UV.y�VH[(`��I����ʪY���L<�SJ�0Mu��V���~٫�@(���C��[����=着0�#�?��/0�S.2s�C -3)��bg����$�395���t2C!��6+�ӵ�khC�5�Iu�?F�;��;����?�z��{w��]-�SUԧU� ""{*(CF� +DF$L�@ �;���/�d:�!��Zu]�{��w����T�*���ʇ��F������9xɉ��Y��9E���G4v����؊�?�Ƹ�@��ֱ���B��J�|��/7)�˜����b@Ջ<��*���@��;�� ��f��e>� 1K�Wi��E2�c���9��rg0]����D��g�Q])����ܚd��]ѯ�W�iMU}:o���@�:�v�N�?ćѱ�@���F�q�?��.�[cT��(��y�1�o�M70œh~�8J���h.#l�QD���ҭ�W��F�[�����3j;�E���#@�����O���<��~����.;��YK��h�k&�qt�d=��r�T}�J����+z�PU��X}Ψ�9gT��z�<�����#��8:���<1��)y/�%O$y����evU�m:�>Cn�^!R$��,�@�P��18Q�r� �.���e�F��Һs&o|<�#�A��D�1�@q4�7剜_���NJ��5yvAT�<��P�hx�0�,��w*�\��^j4�5]�ͪD;��:�U�qZ�W��s��~���,�0PD��u������gڴ�lIJ�}����8Ma��)�BU��,��QdRb�n��&�8����mpZ9�.�7>8a�@��Â�*2 +hc�^�3~1��3�J�E�i�颸����r!:Aj$�U��^N���Mr����s!�����&����xt�~8���ۀ��>�4�@s�W�Ѵ�m)9�PV�-kQŸ��iP��8��S�Y��FR��4���c�4Kl] �I�C4<Q ��z�á�s���!{�2� Ѕ��f�NxfKH~�Jμ��Οu�F^4��܊����p�rf�J@�г:���6��BRBd���� +Am-[[��ꍏ��m@��Ch�[kd�+>�~r��`v��S�!��C����k��B�D��+Y]d=��a&���JD���;Dlw؛��7�c�_��so����` + y툈z���6��tk46֗��7Z��*�-��Kآ&%�ת#q�fB׆cʡ��2 G��MT���C?�����.�X�� [��Z�H�����5:�W�t6譥d����U�E��FIҬŋ(��ZǗ�kxZ����,����z0=�� >�=P���~����?�Y�9=1��y~4����t��V$�a��i��x%A��!j�Ls�LdE�Զr��V!tZQ<����s`��i���� ,{߸�?�x���Q��#/N�e��`%���z�yx+�U��nG��z)�xVY�'i��NC�V`�k��"��|Fy�T&�`y������'_���z>����#�n/F�\L���z�2���Cs/)��Tb%Ӌ�\8y��U ��B��+��|Ȫ/����:���� ��{7Ӟ��h�o��;A[����,��8N����(��V�'O7������*������x�Uzj�ޝ;�Wd�(aCV%l`P��Pyp<����}�捑�^��g�Օ���B�kQG5w�a g����7�p�kŭ�Y�l���hd����˿L�^b��/IİK�(�����9�w} ۿy���7�S[��Z�����h=(L�0��~l.}-����Z�Y�n@�."��@����P +g�SDF�d{W���5��d�˸�:n�8� �������\���o3K>^��=ݻ_�%�%4��$&��8�� ��j%��| ���A +oմ��Ķ�^Ƿî�:�f�Ԍ&����6-�L��zH|����b�?����ӑu����[}U�� +^��^��_��b6��Q�Y������U8��2��Tݘ��i�-4�3�4�o��'�iͩ��ZRn +Z�o�H���͟�s��ӹ��?}����W>ߪ�m���7� +�b��#�1��e����n����?�#s"*a�Q��{u5�k �i�xt�JK}� +��L���jH��� +0}�����0:����[gAM v��t�v�3�t�љvZuծ]��u�C�;r�CDD ��@ !`BBHHB�r�;��\B���ZP�X��nŋu�����؇}��f~/������76ذQ����@Bbh�\��Y��u��un^�R!��lQ�wL�s6���H-M{��#��R�p�R�ʒKʓ���7kM�rM��'����?��g�İk�S!"� q8@&� ���x�w���3�Ks�ޖG�!禼�:�������� �%�����X~H�<�齾v�m�Wka��İu�~A���D� +(Dh>�F����,�A�C~�I)��o|J"��&�����x��ŭԤǮ03b��gF��}P����M}�3-�z���[6|�Ǔ�oK�@C��' �룐��A����� P��tD`#c��{xʢ���H����jl80bÀ�!s�'�<�jc�/q/Ӄ@��|� +�8�-���QMxFeU>��i�HR�|�������/1����{��.�K<[�'�-<+�A�IgPW�7�K����g����� +��� N���H]iD����/X�"�IY����E���M�o��(��� +g�]�Yt�d��_6]8��|�pR~ =)��L�}�U�z�����{@�yf4HsRA�:�VPR�����X[CY�q��Du*ܹr��.� ��Y%3X�lsZ~=��*UN^i��\U^,��t{�gP�5�y ��- A�Er�(ӣA�����eQq�����>IY`��<<)`?����5�Y�^2]b����+�0g�n�Ϫn]T_�\V�c/�=�˚�%>����x[@���A����#I��=�,-B- ��g ��Vm�<�Ǿ_%�߭P�f�ZewJ-�۸�?�{5��#�� �%��Sr�y�����UC�� ����ݠ>���Ф'��X��ʂ��Rl�Fy�C���r�sT��I<MlQ��[T�p��o���|s^7�����/��.�v���?��A��bw�&� 4'�����Y��4�y��h�s ��1�����b���U +�I��I0k&K;tWp}��Q�h�� ����켡����E�p��� �������0�'#@����%'��U�������<F�t]�]"�JQ��I���e�V���Ɵ5 �L����:�cmvҘ�R�U�o=HB?M�h�>���0%ŭ�Ґ���Ǟ���!�W���i�� ��K�F�M�vW�Z��fC?�������]>jq�F-V��Ty�l���?d^�6b�#�Sl0�b�Y��K���O̹�4�KftD�uE5s����px�!�D�GS�vWL��v��|�j'�mm����c�U�Z�գ_��E�&Ѕmc�~0�� �֑��ܙ���y<wΆ��4*&ԔZ���?ȯ���5�L��AYNZ���Sv}ՐCW=b�PG�*�Ǧ�y���� ��M������5*`��#��Tr�+'{�]x�\Z1���RR�=b�������zScnamZ�ˡ��;�t�S^�v�#6)��U�kPo��࿂9�KpD�����+1v�'=�~��o�P�K6�m 2�4��Ny��&�j�<����dn����L�C��q���N!��hd�ؽ�|<���5�mám` ��p�官��z" ����AN�)@������2FW�gW�eF[�5��YҠ�5r�N����{s;��n;�~��U����� ��Ơ���:��9�8p8tޝ55��:ї_���{m������L�5�X���I�f��;Kc��%�t�6�u1�N�mg�F||�A�54n�S�_���B����{<�|p!-�'+�������E��K�V+���P-U�j�����$n���l52��*mwVK\'%n'M4b�Gl��� :�t���Vh��ÙC{�3�����݉���${�����/$8�p4�����R$b]ՠg�0u�&�Vi��[�*����s�TnG�|�N�yl�Z5H�Z�~��f�<�m�?p�3Oخ�W;oO&��g$ ���*������nB���,������k���8N9E�i�՞��VO�:�c��w�+��MX $���aEО ��� *EY�dHeJ�q ���.�{�1�����������wRX%*�U��X��ʄ�3��W���7j5W3K�]L8�(L6@�շPv�j�{��5�m;n2���I�XKg(���Q��{8���$NQ#S~-I!����-P%_��e^*(�֔T�j���5 U�ږJr��Jj�n��m(���v�O��n�ص��Ю���QW�GC�6�{�}�:#�/�a���Dzj� �vB��&�ɸ�R�1���<���s���x�{�a9��n��m(1��̷C����;vNw�o=��c�e߽1_�ơ ��di7���NH��Q��Ƌ��化�|r����+F�U�hueI�����\y�Qi�Ggt�mù�[���6�����_M�y>��W���k�:nv}�þv�sv$4��y4A֏�K磻��2��n������uJ�����UaDG�2��2��2�qwQ���R�pa�WPg�����M/��uL�nm�X�i�����vu:3��_0%yN䍡I/�ɴQ:�8��nj� ��%b�P�,|�Tv�@�<x�֍���6yP�NPl�jL���d�a�s�������&ۯ-Z�^��.�wv+����F�4�DM�2�gfhɘ���� 7�(-bL�}Q(U��F�E�#��#���v@���W6��{��ꅿol�`btq�|ɒ�M����x�'���L\�@Sߡ��E"3O�Gk���YNb�� )tZ� +�R�M�L�p�'ʸ~�<�x�NPm������ z�c�\�c����]�Ofy��lş]]���H���G$�;����zO'D�M� {�BYL�������y�\Q��F��є�{�V%�ܰI��e���'���_eP�[OÏ�s��,�r��1F����\!��}�!C��� +�+&�w�o��F|���,ea��rq^���T�wg��t�\�w��@�~`�`��S��6��%�#�䀣�mI�눁`�(@z��;��@��F�}�� �`O��x|�u�,s��s��wY9����k��:�蕏����9���"0�.��2���\-P�s$mC �>��������^@q���;$����8ΐ��BOG�hO����t��P_��__����r��:!͆�i`�=l���i_(x����1����r�a q��#Ь��$������� �� ��$v�@���m��dx��8�$� F{���8� +;��("���a��)^ST���S�� ��7���� +Ә>��ɟA�dL��b�c�!�3쨠�bU�o����m`kR���S2i����@���1��ȏ�l�r���>>��^��@=͚#�K�+���ڴW�+�lc�4�`}_8�������1C���Q~u��6�hx�F �0�l?� �y�;H� �!?��)|�$Y�"3?i�V����徊�H�!�fL��S��I̝�It�x�#��{���v�MH��!��!��M@�0���c��r�?H�+��e.���%f�N�M�c�H����͐/dLk����� � �V-�<����I��ϥ�A����������=�j�2!���}��A�P�t�<�d�F�d20��)䷩B��$9K�Tr_�K�Ӕr�dlM��N2��Y�ے�=���$d��>��I�9wȫ�_G� �7��^P��6P����%��Ȩ�ea�-��\`�X���L��)jY��F��X����|ך3����"�紒�jro�/���&�ꀣm�j�v;!��Nz�A1������ +1�+�d�)��V�a�s��YV.o*�X0N?'�Tg����<'�T�Zs�{�ZI=yw)=�?S�4О\�������� ���p����|��*�N�{���?(�ы +Q#e�MeX�q�i��Jѳ�R�SF���z9���X�FR����w�O�M�n�Uzw�Oq��KqOV<mC��!�v9���~(�>g��Kx}E5��q�cu��(�:�ʢ2�� R��^��P)R @JH��C�"BE0 A\�����g��nև}����9���9? �^��!H�yY������z@-��F*#��1K���cH9}�b_�R�h2/s/g���f���97y��7� H���P������a �������0����WRX�3a�A *�v=A)%�(����j*5ybf?���7���+�@\��MH�@�2� �����P��7��]���AP�e���B<�*#������q� +r��|�h%�x�\N�/b�z�|VV�iè�-�� +5(n@�� +�^$����k� +��$���ub�� +wk�<s�S�߉�MAn��#��6��kH���f�Ǹ��H�TA�t�VU�հ� b��@)�Ŷ�e�K ��D�����b.n\������Pbj����u��n@�i��f�?Z�_��x��w�))J_��zU�B]��;�Ŕ��F2�]K�D�HHh���R~DVM�I�D��Iԋ��q�9���@>���d�߁z�����f���������0��]1>���F��)�\d7KheR��U�r:[D��x%2Q5I%eu��aYI+��t�J�^�%�(G-���i��l \~�N�S�y�U�����0��.Fy��a��Md�CPq d��&����L,�Q��d��J��)��B�J)d��B�$SC��w�N���yߧ6�Ʈ�6/���> +q����J�hMI�l��m���"Y�+�q���&�WQ%�+�ŕm�������� +��T�����bs@���������@�ӞE��o�ܭ���-�~b0��������䤶��2'��rą�>�U�epK�y�B�B�c^��3��X�VV��IqUz1�>7��������O;A������t�����������z��B;��~ICț���F-��LZ�,�8G��K�(^�4��#��J��]�c�z�9���@�Y���A�����}�O�_\;��������n�z�G�PLh�%���%l�Ʋ.�I�*\Y��������(ؼ�X�%m�K�$i�k��^�-!��Bs@�i�� +�?�l�u���������?o��v����9�ц�w�D���%H�S2�{31�����| +����n)c!��5�*!/�Q)Hj�&���I A�� �� |s���Psp�3�F����>�M/G�l|t�ĺκ�>�m�w3ȭU���N��ӑ��98�żbt�,��B�w2�I�j����Vs�:�L&9�Z&9�&������^M��a��ݕ���ɤ���v�O���e�q'�Ey+�_h��bh�'�G���DzCȺB(�k���AzE���*f��5�Ό�0"4ӌ��)ft��Pnj���X��o��]+o?سB�쨅手e��36M�$�Po��(u +v�0�������2`�R��y=�0^G/�����z*T�N �k��㷩a#3��� +s��r%�ۿ +��V���e��� ˴����?��s�i���1�ߓ��A�ԇa��q���I�w3�S��Y*v��5�(������Y51讆to�4��0x�Q�9���r�l�|��Wӆu�s��^�Y�~m�����Kw�|NQ^���#B��q��s���ғ�i1s�̈����9Zn�0/G�Ϸ`��{�|�������{�c�n[:6-���2vk-��oV��Z�m-�F�C��q�����4F�c����qƴ�(cj�&��Rߕ��}�L�{#��}�����9����,��W�ϼ3�, S��!��VC�fi�}ؼ��þM�G��N�K?z8���O�.{��`�bc?���[BD/b�>b��S�P���o�9����3)�{��J<��#��}�Yw:W@F4� �WAZ�Y��۾��[h�Ϊ8,��v�� +]��#�xA�7���̀����}@a� �zZ�`C�? �O-�"ܖ#�>6�5ڷ�;��2�"{��+�vM%��\�-��yp�I^vq����2_gQM�g��9�=ǥ=Gg��>�(*(�Ȏ��;�H�����d%| ���,심���@EE�R�VOU����0��l*���w�o�{��_����;�C��i zC�g н����|_H���)O����m�;�ݠ0�ʃ]�ʬ��_Y4���(��"6����5p`��63�q' ܭ��c��~�3��!�>�G� ��P��~�؎�wr��+ ..��:���r�N@���uᎅE�c��*�lظ +�����z�H�MQ��x��������zAԾ����DkW p���N�8t8�@`s$��@fk�a;P��Y�l�����n "��b H�Q�ƺ���<v�R# 9����;����PN�@<G{w>�����oc.᮳c�ً��9��ܹ�1�1���������?�` v뀍5�}w���G!�Bj�/�Y���D�}�鈿S +�+�����5�wq�����������Y���.���棇x�c�y/q��1�4o(v�7��kH�x�� ��A�An8�x�|A� +<A$���5��y�Ki����F�b\g���]�����n���y���yʟ�M� S�ḗ���i�9��X��d^� ��g�A��F/��S��B3Q�SJ���*�bBg�x�7ۖ��)����� +_ឋ&���Q�KQO�`}��v�A�l ��!��Oہ*�2�| �v$�S �ؙ��d}һ�"�Rb%{�Tϛ��ȟ�k��������%S�1�(��q���7a2����`c ,�A�� (=�����=�H'P�AI#DB§���6i�^�\��s��u�����Yb��M��ׄ^�aT��8.}��"��4��!O�nQ�e]f|i`Yi'��l�m�����`w=�� A���Dx��"���S�L�7�R�+j�p��$y��t2�3m�x#>����e=�1��ı�.��$�{5p���נq� +&+����0ȋ9 ���55l e��Ԅ��J�tJ{�U�K�?Mj�>��"��k�>��G�>EO�sE7�ڙ��+���2�<�b )�׃��א���{�A���1(�r���hH<=�fDϠ��H:�X�N���KS2jd�К2�SB�Q��w)������봑�6�HV+c$��i���:����F�-P����,��SY��r �g��2m�G�k�q#(B�C�8�z���B�]NEz7���ܒ�I���N����/3����au#kX]�y�2x�V���:ȶ�yΛ��k������?T�9���>�k1`�0)쉑Kx��P{ +�]D#��t +J2:xՙ�&�V������"�_�����8C�j�7�1R���u�Ӳ +�6�Y�P��sM��ҹ��>���j���Y����,BO��z;[��Rd�:��MR�h�g7��5��V]=����{__�З�s���b����c �kA���EN�Bv?k��|��?0�j7��8�H89PE +�-a�o�Poꤜ�Y���B#k�� �����5�*a��\p�P&�k,� +E�|�>O<�3�Kb��XC�㟡�m+�y�~�oߛ�`������b<�&������Uȥ\5�9��颦�lY�VɋTg�*uũ� �6c���dJ�3��F�t@��6�cv����`���^GK�q��;��}�^] +��h;c;����H�N�]/eS�����V��Uf��Re�� ��$�7�e�MZYW�F�0W-�3����|@oΗ�l�1a �u����m��%�]���V�;B=��v�B\pW-%�����\�g��KE�R�S�y*�ʐU��(������E�_0}&�7���9 ���@�͟� +�S��߮\t�n��c��u��O:�>h�p�{+!�Z#9�RM2���Ǫ*K��H�)��T*m�N��6���M2յ�4��\D�gB������9_2����?B�� p����%�M�u�m���w��������u��L���@#��p���BA^ ��S�T���:��:��8���iQ�i�m��lY"��Y�Y��9�}�^�Pd9(R�6�� �D�)L��I3� %�8���)��������������|�'r2$E9)y���W�ro���?(}S�ӑ���)� �֩ CO���ǥ]����%c7M�5Y,�i�Y��!i��F�y�-_RM-ϻ�R�?{9,��Rl��|RRF�$5�t����YqE�������7�)�ɏ<ޑ��)� � Y4P��SF��5;��/x�W�����g-���^f7�2�����.Ԋ��U!AyW��2*R/}8�Bfz��c�%9�gʥAgj�ĥ:�NwJC��rg�EC�zu��6W���zs����ms��w��~a���������5��e�J�mN�� q��ȈԪ���k�Rb���WH���:&*���_V��/���+�w���_rDg�f�IkU�����[4Pe�1vGO}�MO���@�ٛ�K�_�o���mϕ���Y�'� �Yw�������F��HN�M?x=G�_s���b��:�Uݔɬy�ɮ|�ɭ��RA�b/+�զ�tU�|�J��� +�W�mR}�m��N����W���)6'�����|����c�DŽ�6%ň��w����3�\Heܩ��%�w_J�{����1��GV(�d�2*uT�n�V�y��xիE���5��.���vmy����N���5���ҏ��.b�<�>����o�DrZ�c}[���-��U����$r��D���$j���� {�.�TB�2����/^�#.SjПS3�gi�{ݒ>'��O����q�b����_B�]�\~g��ݑ&ft�{w��t\�ꨎ��l�t�z��9���)z68�D W�o��Z�?u�#ꇗ�T ,��i���C�zҏNF�<,�i�QL�����?Л����O`��S���,�W��}���u���e��y�UL��+v��S��;3��$~�S'��� ��j���#*eߩ]�o^T,7Y�+��O�;'�=�#e4�@ӑ/�rdbO�,�B��&��xȏ����Y����h����u��X#w��v�ݗ� +C3깢L<��F�{�F�x�A\�T:�����۴�����|��O'�w7�S�x�[�ׁ>!r�L�:{NF��N&��&%�����S���T��˴}P<4�Mt��� +/f��V��wW��kS%*�4�ҩ��ǡ;��Ra�:6�p`��F~ �0�cF����n�uF��#��#��G�!�� +E$K�s�@��9�]��0�������D��T���e��8�v,����`X�`��������N70�I��>���~�� r�>ę["���fȱ2E�>��ރ�w��f6uw���� ��� r�3W)˕�����0��b� +�WS��� $x�9�[�Lkp�XB��A������{��c7$;��C#��@��!��M�O��/ �X/A�b��Ah)c����5��2� +�E�0�"�Z�+l��<W���z/kL�^��u��!Xw"u �~R6lE���8���z�o�*XF��[h"�n9"\tEق�.�- ��0� �#n��y�YL�<>x����j=���ir��$�5w«������/�U���r�c3���\���嬃h�D1w!���av%8���?)�b|������J��ؠ�s���~S�6�$� o��=��O�Q��3M�����������Ad��pm�:���f�2�ɷ@H��q$�K��ˡ�S� �YeL�T���~S�z���7I}��t ��_(Â�h#�t���!���� ��Nu�M5e��x�uH�،x�1b��Cp �= Ȣ�{�v)�K�i�5�)�Zޤw=��@0A}����N�7�PF�,���`Ȅݾr��<`&��O�l��X+m$9�C���iF�g�#Zd���= ̠�W����5���o��*o�Q+�����~(�F{.���0F�0L���w$�sD��%lg�gEw�:�v/@��2ڿ�.���b�����ϰ��=��l.R��-�:�{R�U��p#V�$BB�� Y$9Y�$�0B�aod�����(PW+^!,E�^�������y�>���9/��y��w��}�q�zP�!��q��O���(�CT�=��gd���W o#�o_F� M"�#Q/I�ѯȷP�(7b��5.��� 0w~��B~`9P�XT?�9�; ��<�q���� +��'j��p1�Ƙ0o�E�ר*���F���<��� ~�L!f(#Q�Q�P/i�1s�k�9���9�= n�mq����b��5�_4!ۀ��?P���(�}�c�y�JMKB�$��g�s�f����2�dLe�N�E��F������c~c�Dϲ�1���vK�}�76���'P�^4����c�A�-�B��ǔ�}�7bj��6Ö#����qr&�)�D�Qa���c����n� �.{�=����p��3�V�snC�sn�>@X��\���V���?,� ���!tǻ4���̡Y%�Դ�jH�#u�z:~��C�C��o��X}�:No\{�5�M�U�����?ͯ�O�+���r�3��n��w���f�B`�� ����9����H�Y}L���p���u��D�(0�9Z�MF�5��M.�t+y�&A��� ?,�'L�����22%�����`�u�M�����%�;����Ě����sy�~���QC|� ��%�'�bzjb7���2����zj���R�XM�I\I�-)'�K��bmB\@�ḨO�H�8�W����w~r���C��s��k�� 3�s�63��Q6���4r��6�[!¶K�&��~�������˙��F����"�D�]�?�L�4�9.5��%Y� �=7p��H��`�1��],��Y1W|r�T��MO��w��eC�/0m�|L�"�H�� +Q��o\J��h�K�ٍ��U��}_����6HϵIӹ�{�n����� � �O��O�?|�{��e/ʏ��U�{P��u�''�L��٠K�T���2��^�fq� Ohg�K�^�\��R����Q��?&� +lLj��wx�Ѭw����݂�{��"��YMв֞\;T�w�}�˄nʦD֤�c�tB�5YN7)S�92� C�'N�E�E��C�,P�GI����1YR� �P��J�[�r������Y��¹�}�'}�K��5U�v�� �Y��/�Ηg1c��|�I'�S�CR����(N�Yd*�R!�Z�2�_ɞ*!hTAc2����p�x�3H]��}=@�����]�_��Y0���^���}�gwt�#cOU� E�ttAV�����J�N��S��r�Y&U�+U�J��J�����E�1�Ha���U�@�5����i�������kwxN���|ҹ�k�5��zC���������'K����Ԙ�<^�-�j3��$��/K5�u&��-Qp5 J�暒�Qr4�rn�,Am�����@7d���K[�>Tluٰ�}�s��ë�o�txՕ�`ߦ��*�P'�����B2�p��5 (�\��<af�(��+e��t}����VR��Q9#uL��� {�>�R'� �G�&�w5\gZ�^��<|}���W�w��V�Pr9꘩{.���+a�%��R��!(Pq9���<���c��952|N�<>�g�83mR�a�.��� $�r��t��� >�SWV:�rk���>��W�X��}rKEG�K2�9�ZG@$U�b�\��TDc+شB-�h��.Y�K�}�6(E[�%XӸ$.wBl���y;� +�OU+��ڼG����r꽳ݳ��Қ�7����y(��n���)(A=Ǯ��52:�Z��Vf$�+̂�J��]���#���EO�P�)�=@��/q֯��/qx���po�ӡ��r�Ο}=��K��+��3�F���NȺ�� :�VMi��� ӒLC5���vDS7����<���]~�QmP.rF/P���m��`��C߽yݏ�:6��Ž�ў%��GVg �� �uDЏ f��B)7��^^L�u)6�Z2>����u�䝆�c Ъh](VED$ +�*���d��/�FI� +���b��#ngT-.uGܷ��0�n� +�B�����39��+r��?����%�R�C]9�˻R���z��U.y�;�w�;�l�`�W��q��y��-g��?c�S�_�i���y����=*�|� BKZ��JO6>�b��)MS�X�T*�4V��Uj^cu:��Zvc���tW�n��`>�ӳ~�˴[��9N;W/9��'��%j:f8�����#�m�ϲ�L�����viTv�:^ۖ��֚ǔ�.�[W���d�1�u���V#e�����ߴj�����%?P�b�v$�k���4����mv!�&��2yҶ��]7tG�8��������/�t)�]�8IWN���0����^�bvWrR��s�L�y��c��?��=����*��˷�� ��/����m�����$������K�Q��� ���T��L�� �e��P�`F80+�c�_ĴŦXJ�U$&U%� �J�>�=r25j�"#�C##��K�n�D]�=q�=��ɑ���gD�Gw��>ѝW!p|!�ݲ7=�^Jp|��R��q�^��>(9!�Q����(����H����a�Y��1!��;����BG.��;Q�ȞX?2�n ����)~c3:Q��/�H�&�Ãr"�d(|���!�/1��B������?���T��`���G�MG� b� ��� ֶ�j��+��}<�Aw�#`�'p3���nI`�ǃ�Ѵ(ȦG@=#:�d��R������y��=[���9��}�Ʀ����߷��� V��|���a��S��t���D�}���Hp G��P�'����'�C>i>ԓ}��<9S|P�6%_z����=P5uv�1�� ġ�P/r�.� �ܙ�I�H�@Z^(�%Q�|��D�J�/�&8�X`�a����:�$�I���!����a� ��x��a��;�{K����!�Ȉr�a��93aӡ�@� +eq��q�u1�S����y�n-��\�H�n��l��f����裆X�T?g�o"����a��H��i�9C� +c�rY3a�aH@FVҖEC�m<$�� �1�n&x� k���&�i��}�V3���#�~��{P�i�� کaa5, �>.�A�C�+�Ĺ!��<��2���0�DC�:���oe@X�u��Q�S|p�S�\��(��n���D�{�;rP�o��,�'�!��6@f� �A�c�8�L�ש(�� _��6��h��L�j] +䛙��āh���'��#�N�wY<L�[ȧ�염�̒v�����"k[�6��A>���3��a��)X�<��,��a�&Fc42��Q��)mkD�����,�B��g��_� �ܒ��Z��T����O�.P�&6+%��_e�- ����/ _'�E���}�4�p��R4��B�o��`,L�\�j�V���[x�����~�IvX�%=!+9�x-���7+_�_)[��T-��=�YsSn�\V��/*G�5�f. 9s�Pl�8���P���Y^X#��*E�P�.r`i^|onI�)k-筮����E��җ���vE���l�S�e�c�M�셦Y֓~G�>��A�^W�֯;�����8"߇�UcP���wG���s-�}�5�bc����)���pڳ�S�2�$�kw�[4�UՇ5������w��t��O�7T]�K���zu�ᔦ�p<��p,ctPY3dz;���/J�?G�� ��ʔC��9}��~�kUa������O�^�i�[+h2VJ���n�57��^K�YEs�pI}%낺)�����3�=��=ƣ�c��'���ݨ�6��^�(������aS�+6�L�X�4�}���7�o�FyP�:}�o�K��Vq�.[#���B~5wsڥ�� {��������S���]_QM�i���P��XP��2*:�� +�� қR �ɗ� ��Ih���%t!�Q"ʂh��x�w�#I�Y�f��o�:^�������O������ERS�"��H���N�� +8����LA�Ȳ5���,�2��_*\7���{�|�Ž�%a?<ˏ=���?� �JI ���EޢĨȥ��ۅo�w�:����f�0E���4�(��7�*����H��w #��jc�\ ��[����Y��X-Tyl����f�"�n�(��<��=ŷ?�|#�jd7+'�T��J��5�k���r��ZC�K�&<�K�:Z%IO����7�8�+�6�9��(8�.?b�\����̺�:�M/꼷�, �Ք]r`\�sH��3A]i�ȶ+��&vAB�,IF�"I�rj%��^N��(�P)�5TL�х4=M@[�~�̦#�����3�+�}��Xlp\�J�~Z���#����ʈ꒸s�B<�+�Ԛ�)��S��M�J)�W�Ť2f=��P��z��g�d�1�P.SG�a�i�!p2���o;�:��ڭX�?f�k:a1�vz͓f7��~�V��+�9�,���PsX2^Z�$=+A���S+ȅ)����V(��b��#,^�&/Y��L�A��z���X��H�f}g�!����������mG͞w���hs�:����6��^I�K�(�[^L +�0"Ĺ�1eY�af>?����VM��63�rz�\�?Y�B��r����s9z�!p2;i�k#�|��r���[�a�[�!�g=�,Ʈ�l�ׂ�w�1�XW�e�f ƫVD����)���tL^Nn?���Γ�8�rFJF7��q���x��g�3�Pr���|UO3& �S�5��`��їƽ���}�/�0~��_5�t�<�᳷�9�h[C䙆�xO�$�_TN ���r��0<AvRZ��t%OLc�4@Pv'���fQr��9Z-K��::����I�=�mB���(�j;j�y��k�N��m�x���g��Sz��l8�h�8]��Q.�� �ȡ�b���rN<���K..$2�ʩTA�T����3��Z�@���4R�a09�+\��!ۊz�n�zyc�Y� �������ɪ����V���u�a�������y���Lɭ�˖d$�+���22^$�%�� LY/C��'��i�"=+4������6�?��^��r��߳F ݵ[٧>��\�g'�9Y��ߎA�Z��-�M��O����d%LM59���U}�v��!�5J�@��X�Ė�1f�G�y�P�d�в<S��V��#����AӞ!�u̓n�e��������K���8/NW�E�5J��Ih��$�dc⚋�QMR|����P�B�F/���EbD-Bf�Y���k�'�j0u������a3pG��4�L���~�źr�g�`0�h�:{;�<��C�I�ǫ! �9�1=��K�¸�nIB�R����t�G�a�������Z �3��Xd f+���`�%P���ɵ�cr�q��QK����E�=����s` G��%�'�#�`�B�S�"���BՂ� �����<�o�7�W=���F�����1���ap���6�m�`De +�M@Ϙh�Z �i$�:d^��ic��i���&C�)Q'q㘳�?ܢ~��"Ʈ�C4<��� �O#��(B|4���c#�^c�!^߆y���9�a�����v��۷��r�4O��ڹ�@<gc\4{�<{�q=���5�W�=��b�_������<Cp��� ���0�;aZ���{{M+|<gz�χ���E�O/�ݦ���:�lЌ�M���5J�1P<4UÓH�U��ބ�=j��u�iݬ Z�]����Q��v��1����)~�lG�|�i����Z������9]����~���Y���y���!���;Q@ه�a# �4Es�@���w�M���[R�;nHz�%���K.���/�C��߇;���dヤz�u����ę����?�O9~R:��<�t�˄��g-�A�m�t� @�A��)��c �,[1����<�*�O��Q�u� +��cK�_���ࠝ>p�.O8���0v�9���f< smO��v�c���b��8��fZ�p��(%-�$T�,��,5��K3�4��HDuQ�P"Kٗd�ZN<�9����\��v�updi��}��{����>�����������Q��������`��>�7�ZN�HM���$R�C��Æ��Gda�����+2Z���B�'p��Ăp2�S������Hr]������ +�j� ����yh��C�_���K^�h���yb�5b�=����lО���#p�Q��,�[��8X��G*�c�����E�_��O��D�N�C��VN�)�����i��8�G���U;ۈ�����&��_�HfPHZ�!I��!q�"��E���mB�"�~>"��p�g�#�!��(Ohg�����3a��N�Q�4��N�B�8k�C{�-�!v�,t���5�J�d ���@T�~�|p7���c1�?�#�H�KAo��*�V�����"t�@�'�@�P{��}dY�7�` +b�� u�:� Z�34b(����@�,������i!�����֡%`��D��(0~���N����}������G6�9��?CL � [(B�[�=� q.Ш=�4�B�qq������%���x�g�`]��y��=�;�{���5���x��5,k 2�)���Bl��p'���0�\�Wx@c�2;�U ._QM;#�����tp[�\��6s������������cc~�����p�����G�����{�Ü�ʘ�T��e0�}���� �5a�lZ���(���~��'���gY�b.�cn��y�8=�לO�O�1��1�v +�{*D̿D�[�!އ��-L�쑾h�h�ś����H�� 1%:K谺8|H�!rP��6 ����c��a�=��,���(������^���%��~�w�Bx/�[b��E�܋=!��9��a���gr�ܑ��N6��C����=ڵQ�TU�nE�/������?%'b������W/�w���s�ᓸ����ے�R��ȬC�A�I�Ƀ�L;�8b��Xɜ��!�|n�>�sZz�s~��Ē�7 ѯ4[؝����>�s�Q�SY���r���_��?ߓ�ߑ�ǷK��W��ҋ�a�y�u�!C�NF +�;��ڢ0x��ǡ��<T��[(�����{���*#7���U��Mk�OU�G�:��n�=uS�]� �-�y�M�5Y�������GqI9�8�R6k��'4C +k %������D�+t@��1����r�w�ƺw�V�t���{���z?��u7iC̯��?��� ��W���m�ӊK�˪�[�V�곚��f���nPs8aPݤ�r�L�d�����S�o� ��_+���Xɜ��z�kg�l���A +R�����ڳV������R6�^J��wc��\�~��qusB��d� ��'�#���C�ݾ��^�n����f� ��{���&c���𦐑=��N��_l�N{Z!�Fx��v� ��f)`_�)��\ג�Yz*e��y����E�xŰ�x��h�2�1�v&����� u��A3���l���Q�f�Jo�`M����E�o�"�=�ƚ��*���zU��5�ŗ�ҩ�+,�e�'s��G�*e3����5hS$�N>�ؐ|Ѹ#��i{�KcmJ�qkjobMZ��:�Oo t��g�w%�;�y���}����w,p��>��z��ݭB��������/M�6小�\!8��D�߲^�7�ZՐU�����P�q̸%�5�:�=iszGRU�g���cefobEf��� +b�,g�":�z������_Jמ �獡#�N����v�F:�u�n��rsԱ�LvSQ���p�xW�Zy}�&�6K��&w��*簩2��yC�����g�u9�I�r������r{�A"�r��YLtފ#�os����e�r��Ɂ`��{�&^�ɛu�6��L�f��JSdSy:�qM���P\��T�ee���`KBE~Cb����2�is��jr��q��ؤϷ&�,���%!T��� ; (]@���{�:!P�R�B(R'�DD H�*" � �������qw��Pag��ȇ���9�9��ߒ�s���9I$�(��B��VK� �S%>�� ~��"^��=�7��y�^a��s���`��&�E������T�S�Y����A������ʨcG�q�'y�3좂s��n�Ô�/.w��-XO�l�D�de1�%�P�D _����*�s�:�bhqИv��N~V�q�t��`�~��x�v>ǵ�6Ç_�TSq4������Һ�"މDn���W4��9z)�p�}��8�E���Gדr�l�D����@`�V�FExߡ³J�dT��=bH�2`#7��>"���a��k{����?~л�>;���0����y��&6��)!��3)�l09�l:�`��9�e�����̒ �(�F�P��y�yX햅�#��`\���/�X˜pQ�������<c���r�9��U�t(��PZ�=/2��*�PmC|zu;+��lrJ�'��&I�̩Zg�Tn$�Vl�D�t�_$X'ڤ�E���m�ۓJper7uj�Rzd�Y�g�g穾P��3Qֵ]���S<xm�~��y��-EYMQ�q��m�I���D�$;��D�����X��b��?Q̒%�T��x�) +��pwBnL+��e|j��� �m缴Z����"-+����d7� �'�3'0���д��Hv[}t��ָ�֞����,f�u��Df�Ĩ��bE�i��-�k�����#tX����99����d*%�a(�Nyh�'���E��Fcm�Cl��g���q��zK����FFw�DEvwdž���W�B��*x��!6�]4�n��5�������� �f�p�4_�$z����l�ϻ�W���L��p���O���S]8�Y�����ђ@�HuH�HsxȰ`��9f����H��5���'f`�hȓ��x�E��!q�����<��7Aϭ�D�MZ㲵L���J�u_-����L������R�.e:���G���f��������|�GC|�B�g��x_\ ���5�-L�O�b��V/��Q`b���kTܣC�%hx��Z�������w�4� �9p;Ґ}+�4�&�2j9�6b)��T��X��������8����������}q����G_�k�'�+>��N��A&&���t.�C�#I�.�^h�������z�-�;XO#v�>��c>N6�n��k�Rl��r��k���}����x�����g.+�98=�����7Q�;��pa``��4ݣA��RP.�F}�C�ycJO��$]ㅾjQ�P�pa�v����:M���aC/�a����o�,l���f���ʹ%�?wHo,� �ן�DY�\�$��o����4(^���U5"kU���fJg��l�YsV�X�V^R x�_��m����d-��;]���:���f��ֳ{�l`�^`h�>jd�~��r��gc��"���t^hX�x@@��!�����`��C��Ә��J*䣃t�'w9�O~[=>�*�~fns���������K�����;���jZ|����[����=8��t��#�42B�/��kd�@�s��u:pP�Q��D-J�S�ь�6t7t�䌞[�_�Ce�!S� +��"g�f(�`���*`���Tݍ=���.�n��e��4.�����O�H�"Q(��D����'�P\Ј���hC�FG t���}Ja��FK�!k�.<�y'�l��b�a��&6�j`鬜:���<G����W��� � +�������3���)f����hH1E3�ZQ��N|:�렻�6�о�@�&���1FB �$T0����tE,�+`���H�c�H�dHA'S*z�|,h�gK��wiRD�XU�Nہy��Z��N�z�x��]F��7F�Q�����L�v�t�m^�~1G� �gs�E�o�/vh���.:P�ń�^$?s�c��4*b`�*��h�w�6z�v�k�>:7��ict�5A��=Ș0EƬ�_l�WX�i�?M�1�2�q�����J$��ވ�:&$���*eQyP�EY+:긺��(��#���~�������|���G �E������ 3N:8ͺ��;8Oz�����@�5���!8����&�c�G��́����� +|5;�Gk�:{�nq�����#x�9��g����8����f�Ӹ/�<���.o��u��[@�1�?�s�!p�@�3�� �if �o^�9��-��j �y;�Rf�5@nr�v' �tR/���2�}�e����_^��S��\?zq��fLxÞ7$�������>h��p�A���N�AF\2��r6�h�jі�I���,[����t���;�RZq3~�.Ӿg\��^�3E�&���$��ߑ����N�_���%�|�� +�,�����@`i�RkCٽ��V@8y5�l� �9H�:��f����f� +(w�Ĭ�Mқ\?����'���?���z�� u��:L�w�~v��{S��?x�J�;�oe;���5C�B��"��/�oS����l�Kl�Yk3)N��d;����9����u�����t�3{ܟ1�N|ʸI�/���W�����I���s� >@�e@��>�A��ngkJ����X��O]�%��i2B�ӟ��֯e�Ǥ鎣����2��Մ!n� ���1���!���k�t����k��k��:K�7�J?(}\��[�0���G}Eb�=lA�d<�L0�R�?��8/��":��<�n($��_A�{w��^��f�-�q� ^��5^?e�{�z�;B���������#�Z�h]���>HQ�@[�!�Mڮ���{��W{�z��n4��yX)��(6��~��;aj���<ⵠ���*�+�����6�E�I���>�9�?��nj3�qf���K�10�$H 0�<�_��^ꝉh�4]����\ܒ�\w��,_�!5{�o��mw�r�q�qQ�{/�3=.�iH}!徽�jϾ&�)i�d`O���ˬ����c�6�'v��M��U�����E]s�z=H٤�[��� �<��E!~鰆d�[6�A���Zr���܅�ngc�<{�r}��Ŕa���:�߂�X��nN���Iv�� {ƫ��=��V���*8�����P~��$�=�Q�4��Xh�����p��y�b�Uw +h�e�-/�����#�{(ܺɞ�q��� �5��~4�&�A~�]�ɭ ;˯ +�&�h�'�����e�y^�|�[�-��ӃH�7�P��\���lқ(ݢ���J���]�w����r>ע/Kj{F�ܕ��XR�gk��ܴ?�ZWL���dUE7p�Q���=�_Dő�E�Qo��Q3�C�:~A��W=� ���1��%�ޙ���h�F�I�i�V��� V��\-�[���SO�xgWV�S{z���T�g�*�|$1�Z�p�qXq�U_�-�khbO��c/�sc�s�^�r⦅��s��x!��!n꽫Q�Z�M�}���y6T�v�n���j��� +��Ҁ�'�;�����#���=��T>)��2U>�(���I���*�ي.Q��$]qW�V���S�4��)u߀`�_�vP��@c�MjM�給����`����:���IkOk[�� +lZ +���ϗ�Ή#j3I%�i�Ci����bVvr/]�$8��)NI</Q%JTIc��H�4+T%� �� �C�J2����D� 6Ҹ{в��lep���������i�mZ�uC�ԡ�(�U��!��%�49����,zfF!+M]�MNk$�'���(Ro"����"��Y�2uN���$~�A� ��t6td)��yv��h�fp��y��FO�c����Vs��THvU�����D�k +�9�d���Zj�& )�07!�N��.���Dg\�Dg� ����YaL�� v��G�c�Zc�q��^��f�)v��B���qɉ���&ʏuu�m�5"��*N��p�.��J/M�M)V�'�1�RNl�~T~�P�wF�7�#�E�y�ByΜ�� b���˱�CK�߫a��������+��'���t0n?F0ml�?�u��p��JPaTd�@B �BB"$@Xª(.�� +�U�Q��P�Ƞ( +n � P� ��#������Z�*�K�M�yO�Nz�;�������պT��xl�6yo���q�Bi~�W�5�+�y;���)-4,�^�h[E|fI�)��xҜ���9�?��[bؔQ4���u,̱,���%4xPɄ۵L�Rτ��6p������{��z�S�{��aam�_�����{��s����w��fUn�\���茝������S���/������Tޓ��ݧ������ұ0��6��Q ���Aޞ8�H��&+hhq�h2�N��8�r(j�r+l���ק�V���P�t�������5s�m�L��a0UW�&�m0��=g�{��6��v�1n�X�� ϶ܫ��{@���4h:A��Vl�{�x����(&nj�M]���d����s}�[$^ؘ-�װ24�h�*�~�6��Lg��s��P�f��u�G�Q�Q�Р?8�P��m���(p��I����.O�����v?֦K2����+�GO�i3q���㵠u���3�SO�1����7��i.U���#�굺��ڈ�mDS�V{�?B{u������Wj�N�4�$�6 +T^e@� PtˍRxˇ���zō������%L��C7�j� ��R��˹~��� 훂#۷Ku�U2M{�\���~�x%W]�W(/`��<*�����U�����Ԟ��D���L(�? +8��|Z� ֲ�a��Ϟ�q��ڙ2��9�בō�XΏ���K�Q(�vl� ������h Tt� Pt� +��$�3,��cܮ�8_p�(��&�'�ϒ�4��ik~y�)�m�P���̲qif�m�9zb���c��7/r��$�Mk^�V�7x(��\���'7�˞��g�r�?��s������a���#�_j�p�����F�W6ܥª�����^9S��Rӻ|�. +�Keexi��h�:e���<U�GEw���{�Ti�fא�27qO���7��|s�����ۿ�������F�]gH�2�������YϘ����?�P�z9Ը^��'f��ei�5�T�z+�@��| �V:0�.dp�_��&�O����a��)>C5��Cǝ��/: �;��/��1���n&�K�`ŏ�����X�4jFt��M�@-�� +a�P����B�zV��Y�a��L��Yㅘk��|kO�b����X3��ٱ��~�&��6r6��ȻO�O���G��6��ɠDW�9������i"�ӽQE����h��Ɯ�,�0�b*�e9�,'�a�ՖS�����3c��3����{���D�Q�4H�0�)ځ�P�qE�! +�<Q=0�����i����`� 4L�O�t�=.��a.��ʰ�"��a��D��CE�����4T��Q�DU8�c�P�f����([�� .R��n(���A������S�x���X�9���xGr09���������A�C��ڗ�Z1�Jj ֨I�Gբ����8�hJ����*���\��'8(>M\���'��o<G����Q�`���G�����B�'t>t�b`������8�d��LT������;Y�R6�*�q�~�u���F.J�=Qr����Nި�����?(���KGy�R�������$��%�zQQţ��GC���1����0Vg�����်��Q�f��@e�;���b/Cxb�Qި�$D�*�,�,�����]��彂w��9z��Ч[����0�OE-��z c� �L�Z`�� +�c�16���\0j�� +�#ڭ�aM��zo0|?@uDЧj�*[�>*/x}P��~�|�ݣ|�ݥ���B�Y��0��<}����c%� �\*�fS1��wM\���H��t�����dr��t��q��ƽ7j�Cd �n��]��7�{�G}^kN�ti�D/5�D/4D�j=�|���f���~Rc�5���u�ԙ�q�ID�Q��⊈ȾCHrsH �������}��;� + +#x�Z�ʴ�i��Z�Աu��Z�>s�x�9�|���|�����n�.<��o��{��`��Z�$�����kT���"��:-�~*?�"Xu�9���"Z�{J��S��ķ���䱓�3_��:�'/:.�_;}N��<G���0�d�6�,I{�0t'FY�!�" �G2v�w��� oi��v�`�w/F�FJ? W�<��*���^���Z�����t�y��2�~�z}�z���m��1�B�k(���B�Q�r�b�m�c1I��ؿ��]����7<_ӗ��M�N���m"s�7���bDG�r�~��~.B�x+���lX�ˍ�.���A��!c��!�z]��k<��H�;��!�g(�\��-i�8Hǚ3a֝;��ڇ�Sx����K���3a�#^��=.c�vҁ9��l��n��p�]rj�^�:q���jd��hD����a���I�K���ß�����O���+���q0�=�V<�m!ڍ{�}��Jfk�(s^�(��B���g�V���ӜT�I���8+�q4^�r9V�~)���B���|T�_}0��~5���MB� ���3�%�BS$�a`� +�il�8����;2-�̶Ľ�����8��rro��و� Q��?�z<�cs�˷�H��y�� *��λ+�ί=�5���Ghb\!�cfH 1Hu���jc'��BbU�����`�9���K���|��^����=(�5�/�X�O9qˤ4t�(�zX�h3�K��K��N���s��-l�Ϲ�j��9B��XͼD���B����e�F.cA�&�+���8��z���`x���(���Ֆ`AmcpS�fr]I�|Ul9$��3��d����g8��$n��<�z�ʷ&�<����c��4�A�4q��J�G���Ѣ�wHQ$r YɁ��`4vּ��;r���B3����,�m�����xB�鲒�ɀ<r_�,�h[�D���� ���s�*y��ڴ��ujm���J.L�$����[Լ�g�<�/��y%��5/kN�z�1o�Q�<ԙ��Jsp�� ~J�fT��W��=�q�\N�]]v�c�X�J=5�|_U�:��l1�ׄ��{ќ��4m����M�{�JxQ$<�`�K�8l��u�JL�Ok�C�1�Wa�k6��k�x���!��Y����C��I}�N�:^��⨕�]J��<���|D�����(�IF7*ʸLf|Jd<�e +^S3R2Y db`����<)2��k��jcp�~#��߇��7����]N�֢ �]_B?TUo�-�8�(x.�r��"'�'GZ�-�EY �@܉��C4�h��.��35]��.��"K�l��:�|�2��\�0�7��=��F;��:��m��� +ڮ�ȃZu����(�9O��!͗�d�)2�eA��:r����.R��S4��>�5Y�M�AJ�"KA� ��5�� ��*#p��L6�#-�pͶ��z7Ӧ�����JWn]Rc��&����S٥�"��;�H��+,%pjH��VJ�b�e)�Q��a^b�(,D� y)��|�Z)q�n��3כ�X�)��a z�mV�����o��R�G,K���)k��ȫ�vٕɎ��|��3�LV&�V�%��XU?���@�Uw��(1ſ!1Ő�(Z��e��W0Wi�� �x��6}=�A{�a��.'���M�6�eKȞ�&�!�>�6�!�$�.ݙ[+tO���fU��U�FW�#���ȑ�W���y���{R��"������wy����p��ьÝ�����s�8��>�Z�ﵡ�7�"��f��i-hgMoK�KiIuHl��7I�z�7�Q�����Ci +n� +�\�+�k�{'�B�>�����p��6�?�7���{qe�v��C�d]@?�ߓv>� ��e�Лb��w��8Gv廝��xw�{S;�|)W���[�E?r�/~�V迒g9�j�fjk`�����s����@=a�SN3�w1_�3�"ܑН���]�QM^i����@A����H ,!! � a�Ȣ������Ѷ�N����jkkGfܵ"�hE .���q����j�����3��/s������{�{�����sfW/�=�4�rl�4��:���&e����U�ԉU'b����r(�P�V_���}�P#>�N����W���8�,���9�u���>��K��~i]�ԅ�܋/����a坟Ýy�D�U�D�^�R�j�<�h��h�.�����2��A��>�����NOD���{Z�\���������oO#��"�V7�Њw���X�N)iQ���OͿjr˹j�ʺZ���\�25/�$7��'6}&�o� �7}״G�m:�i��=i�c���� l���:�;�wP^�����Ս�� Ϳ㌊�|Q�MD���[�}���f�pN��ۊ<�zǷ�1tmk|cm_�bl��Զݜ��Ǹ����v������� ?�6�OvwP�;�����;��y��e���*�pA�Ld��R�ԩ�3vΰO�Ju���v�u�O��*v�t/v��^��^�ٳ�K�[�s�.�=͐�^cHz���a��k�=U��>���Ghùw�K[�w�@9�(�+J�c�Ծ�"�_L��+)qZ;�@U=h��̦E�;ȇ�#�J�$ë����p��K���i�� +נ�Z���V7�n7�ˁ����p;���8��]~QB����i�8�c>H7�'��""zBJ*'T����"}k��C�]dR�!�E�BXd/��4��8p�ܑ�~p֑ ͎,x���x�5�q�u�oC(�'u"4c�������)��d $L�������.9t�?$�\0Q� ��̷�C��|n� ����Pݠ�}�f�>������g�#�Ѕ�f�!8w + +W�(��|�!����g���5�q��� ̤+�$�a.9�N� ��)��B�r�=�H$$(�H��-�@����TP�i��w�g��p�Zw�l���!�_t��1 �����b �v{��� c��b���h01�d��U!$Ą�� ��Va�8*Ĥ�@=� �>re�(>���/�}K�������_����2AR�]�`O��!�t��Z +�WR`�H��R~���E$�b�P +�ev0CK��q'��@�7���'��� �-����r\�>&��@~�a������أ��+��{X>���߀8�r��ɀ7(q�VH� �pIj*$&���9f̙���!v�h���7��z+�bMD�b�Gd��*�FU'9oT��ת+��-Π��ӧ��<�����S���@������?��IH䓐��0�)����IO��0�M���_�=�_�3�[�|��5��略�3�����h���5gx/4�x�57x�k��}����10�=�c ���֟�.)~�H���En�Z{�4:�M�L5y�$�҇�V��'�c�0l�{���nj���]�^�A�n}��SwQ�DMЮ$�M�|����[:��A��8n����@��,Ҙ���HB>�#/�~|��qĒ�2�U��<}���̷;u �3�+��ޣ���&��O�p/�Bh3���Px��t�p_t=ᙨ��*�р�K_�걺I��&�� ����(�NBQ(e�(�:\�� Ź77ǽ#g�={ �U[�Z�m��7S��H�!�zʿE-�����!�ƚ�+����ƛ���9��j�i�&"N}�} ��{o�7s�Y�������Rʳ�j����)�s�\�ΞM�o�BVkN�ŲZД���!c��R���a̻��̇$V�q�SmD����cY�i@~�<��4��V��J' �s<�0,b�K��%!dW����"����f��Ź���b��R~]�ʀs�>���*���S��INf패��';�Q��̨�<�Ѡ<�qOy0�j�jo&��`��@9�= ����y�>�s,�A�eԽ"�x�BB�Z�uh)M�ְ�B�XRȶ�[ȯ)\.<9���q]�QM�i��$�((H�*��"��@V,���f�5@ !�LK��@�����(������h5x�9���2�����NGǶs���ȇ߹�~z�}���<�gS*}.1UGf�5L%w]H҇�%MF�Æo����_{��{�bw2��N�f�t)h�c��Qho�;�;�<��5�7���h~�8�f��q����|^���B����ÓR�q��$M4��2��K�c��w3.Gt2�";Im�oI-�#uL$�9�@��@��a�}/}� �(���r���9�#�'v�<�lYes�$�a�����L� N��X��k�]�;�]ЛYܕ�ڑ����ХM���ɍi�)� J�r=!է#��w"6C�l��R��7%xxQ��� +<<�r��U���`�E)�z���Li���,�a>�c�����)��̓��*�u9�6������Ϝ �e^�*3W���uZM�?��Y�P��2��r}��m���ob�Zfk�V�Pa�~�RM��|%Qz|Ǹ$~��(ŵO���%�n��� +%ZnU��SOP�����j�8��=G�`ߡ��_ҥ��h�ܟ)�<���f�A�%���z�)�U��#�%ܫ��e�f���eE䶉���ò3���.����Ҽ�MB��Z P�+���ڰ�¦9��$�P%�+�2�-���%���&��Dq�����l��Z��`ߗ��+� k��s�9l��3��k2�"Z�*?����"yo��u@+a{6�}jKK��K���bA*h��u�E�!j ����iTo5�������&�#YP�>�e�~L`C�&���ZSXQ��r�5\k���qM���>ʮ���SkM�me�����CJ)���_V& *W�"5QX�N��<��@��>B��s�oh\!B-"y3$���0�T`��½z��5�:<̶�ɖø��P��F�m[É�ZU�G�J�>EM��ʪ|o���HY�8�T*�Wy�-$����W6Ec�-�s�F����F�*��"o�d�����R�J,48X��`��f:�`�� ��-ؼ��b��t̡��B�p�ק{����+y~�@~�,���6<_�ɮ�dUL�2d�t��t��[Z��?�tBɐ!䭐\�oJ����ީ��r�1p���{@����0�u������ָ]r]�Ky뀨1dzX]��k�sT��u +BV�����&�*�)L�U*Cq��P|Ce���¬Aȿ!m�p�������Lp�~W��y��z{���ô1���){��˻O9�w&�)�H�WԖu���㕧��4K3��!i��0��3"Y3JJTϑ��+� r|�������ȭ^������:�Ou�W��)�� ���{�hs�hF}p���|�f+<�X�?����p��e`�����{���~����䎆���v���+�m�3bl뿈�-��b��}F��qջ,v�\D�G������<e ��ݠ���VL��MR��1��N;�';g��\�G�R��*�J��=;��շ����zl�Nh���И�����Ӌ�����>i��������Z@՜#H��1����\�%w�c���홗��.�:3.f�$�p����㦥�NN�z�j������5y˟>��?}�?��O�q$�6�nfDgpGp =�I=��@+��B;��D7��x�xK>ؼ�0��4+��6�g�������|�`��r��Ł��fڵ�C�k3��eO��=IW_zFο���C�#f�w���v��~��Q��i���r� +o�s�+� k� ���c��L�V�-������&۞�˲?f`;Dx;�e���jg�A�'�з�h�v 7|�f��k�g/] ���zٿկ{x�`���)��,@� ��[��ߙ@�C8������`���6���4���f1ƳG��m4c�5�ȵ�4��W+���jv���8�N�Z]����� �����_;<Bvm5ߍ����=��Z4�����h�=��/p�f'�Zñ�N��G��1�gD,�Y���I�����f��l���|ˠ�r���Z���6k�?���:�j�J8��I��%��@Xe �A� +Avd�����q�ڣc��R��BQ,r� �V+�]Zƥ֭�+���&�g.g�A8��;�~������p+Y�'�,Y�U�GG���;��}�-m�h��Cc3X ��$�r�+ϓ~�����CA��!��^ `Z��;e0���RuM��]Z��;�.�N�{��`x��֓�������l1����V3]ޞf:�me:�{�t��c:�����?p`#����q`�=�m@`�������@1(��Ȇ��dXM�?Sn�i�#q4�Tڤ?����̣�~\C����~ǰ�CKld���x:N�q�M�����}��0�)�� ��dh�:���=`*��)[�BYbe���(��̰���B��f�i&x�h".�S�����ߢ��M�>{�z�����LpA8"�4`��`��`�"���p��P,�RFC` +��l�¥�zb'���&j�A�'�^R +��4Tx�P�������Q�H�G�</c�h��m6F��&�Vj��r� +��l�&�����e� +��#n�#D���� +e��S��NC��CC�@:*"�=S���,��k�P��%;LQR�B��lt�$j������s_%nsF���ΐ��ـ��9��sG^�x<���RH�?1YL�)ބ������/A}u����W���W�赍��El��k���UGɷԛ��Θ�]2�����k�/�6�9h���72��!�K����XߙB51UHC�'�O���c�qJ:���2ST�e�o��G���?}��?(�s���!E oPq�7�h�W4����^�#^��5�π�Z>W��So<U�u��x��O�P�@aY���%3�����H}�$31p����Ŭ��fS6p�O����/��/���X�QU�U��]�S�N�9�+U���!�ÿ��X�oզB�~h����w���S8e�oK��F�u���hrQ��0=�9��2~��� Z��Ҭ�vN+��a�|j1���2�u���a���:�v�YA�������]�+����v�գ�8���tl�8ַ$}"֎�x +�l���g齍�bvE���f?����$t5�=�+~[�V�?>�-�Tj}'��润����� M��u�y�V�M���g���/hF��5��D�Ӡ�DdEa0��$�L!g�*�S�i=�j���0���D�G3t��9�G.�ߌ���z�F������Zd-t��m��%m�Ӆ�Z��!?9���rN�����Gؠq;�EQ=QG�N�Z�(��M4L�f���Ι��I��Jz{z����X�[3�ح ټkqyV�cW�\�Yg���CS�ǟ"�8��(s9~P�~��Tx��>좸6��xx����!IM8JE���o`iǒ7g�`Y��ûl;x�� +��ʩ�g��[at5#�}!Ugє�Pp6i���� ����6������-�)�>$����VG7yTE_�UF?�U����cP�=�L�xI� ��ds�0<��Z@{�-�ΑR�.�¸�j���8�]�ECF��.-��D� +ǣ�_:N� �N�&�!�Ƚ2~��"�RVw�s^��Z�qO�%�����(ߓ��o�k"�!�dc@�1��3��E��4�w��кXD]��c�[lظ �]��lq|�,�ú��ՙ��3 +\+�ֹ�������M.�}7�מ���EI�R�N��+��g��^��3?*�I�1ބ�S8Ä́!9&��1��<&�_b7�r��2W�i��1_ì͍d�I�U��Tfg����T6k��^�QI�ɷ�<��^�3��{{j�϶�:�-�畅�w�_�u+7���nJG��騘��=�C�<�����R}���ZVr�y��^)��.�jpdI�*/�W�y�`���v��s���-q-�[ �5g�d��B�V�.��Y��MY��2O(�g6���yK�.��om��Z�>a"��^.�#�N�z�K�\�� g�8@����U+���b�e��V%y:��E�w��n_�B�u���.Ϩ��<���PD� �H)#LQA�,�"��t��ІFpF� �RD�� *�1X�Qp]��f�%'n�f��=G�}���s�����=�W�R���*�x��-^��nAIܐ�84�wQ�SQQ�;aQP�_B6���1x��C��T��T0^����,p�̕�_��-]��Q�ךnܔm^��`U��fW���H+v)O���m���R�����I����ޒ�)�ܤ��oE��D��B�LH$oA���26.�98�]���pf�n�t�.��*[;��h�Q]�&��8+e�6��lDz�BY��[�Q�+Ho�u�S�E��g|2R����>��H{-�H#B��K�&�E20�\�ߖ�p���Q�)�qX��t)�*�+�4��W�֕�V�"�ҭ�&ۖ�g:J��$�\I�N^vN�WFv� -�h[�i��� ��Q^�R���"�<Ln��y��3��:�dp�R ��讶gګ<9�;�ΩW�ҩ.1P�7���b,e%�6E��yR�sN��-�P�VP�_��wH� �\����D�M/!B��KH,�S�C!pY�W#4{ ԲѻKu�L�.wvC��zMu���2X_��`,۱٢�"�Z�=�>K��0�T꺭�bQ���#����U�+�������,��-})�.�$�)" +&��{��d1pq�5����k7�٨��&+46r�5 �j����:�^q�:���(���X�̝)���,�dE�K�9wkE5/���s��nA���p���h��}�OQ�QQF�_�,���Õ2ڃJ�����w��f�m4����Յ�l�ț�5�{V��5�d7D����b�R�d��+�>�6�)���uSu墈�&ކ�.�u�C���q~h���Н��)� +S��x��gz�7�.^�܃Z����Zi��>5��Pt:2e^i�RuI�*����K�n��m�7�rKs���=���M2� �J���nHC�{p� O�p�C�p�C������:���=zW?�� +���-4�� ]@e�*�{磤ϖ)�sg��.V��Y97�[��pp��֮(���f��)�����:�v!�;����ikw����۪����n��{�����B����.^R���=��l�RMPz��A]H-�u̕Ir��bVύ>�u4Bc��uG�LB�d�.X��P��W�v��ﰢ��qy�7N�}7�{�;���s��&�����9:�t����}��C@���H�ĶQc$�:2������%���@��`�u#�BF6����_s*�p�p�q�p���5~'[-��<l�{�底V�����"6>Lj�L.�����7�h�2h�����1=D�[!b܍Y?.b��/���Q������ߪ�r<E�,g�}߱*������>#��ic�ؤ���#��7&�s���,1��7��]Կ��+�_6d��ǁ���\�D�U#���c�$�&3�+Y+&�l�������U}'�|�2爦�4SJM��&-��m��)��:�S��]{�ý�qw����x+�}�����P2 +d�.�W��)6n�c�mm,�m +�����<x�����F0���Y�wbX�;)l����\��n���NՅ��T��_����x��j���~�4g&}�t����˨?���-�_�� +����gZ��Z�|h�C+�?r��'�����J8?3NO�3�O��g�,�g���r���F���l����LP�͞�d�={?�6��u����@��G�S��&��=`���\^���Ws8�j��\`��֯���?,^��ٛP���b��&2�r������M�އּ#,�߯P�S��b� PN�P�}$�}�-�o����8��>i���b1�91� ��q��B��G|�KV@���E�1��aɂ:�3j��Q!9N�����,vP>�'S�ߨ�־�����X�������ԤN]�O}&�gI}���D]\��wa�%� ��R�)i�~�=>BO�͂8�2�ٙ!.g.C�X�~�خe�6�J��l��Q�*���\�iTS��@H.!�y`b� �Fd�A@A� 4aJ�"cD'(�� +�(� P���ϱ���+��������߱�}`������:{�u������I,c��`�#ց]�����{I�|O�d�E��?Xc�����{�< +8b¯�3�7*��5��3�5�.ClU4�-��B8۰::p�a��Qpڱ�X'v�1��e|�2F9�#��a[ �lA{�̷S�ɥ�,�s��0\;�� +"_ �h�@� |9 f�рW��2:p�b5��a|��'&�G�q� b�{��̽D|�^'F��a���7B��Mh���X���t'�=��o�) ��<<�yb*��� p�h¬$8*�����u���&�#���@����~'8�="heN2��7�n��{��s�sr��79�zJ´'$�c}$�M���6��3 +��oq���y�-�����p�1q�ևo�����3�go�7j�q��|�\�|�T��©Ig��S��9�3���~�V��3�^�i����;���N0�� ~���.�܍,��+���w�{>u��[c�}��[��k����������k���*t�Ϋf=�b��t���S|l�ù����dߟ{��#�-�~C<fx]F�b0�Y&]S���c:����O�8�2�x!��o���#��%0�<ӵ{=�t��f�_�a�on��=n����ֿ��4����.��]:��\7�ٵר����%�O��`v���ag�������z�9�CC˅���y��K}4z��~��a��%3��*uo���K��m4��4��èӳ��������<N������ǯ�<���l����1�u +�½�X��.�P\G��H41=w���N���vcY$�Ϻ�D�����_mر���_������|k�O�6X���l�i�:�s����u�O��!�N�/p���m>��;��P�,�I�F/� P��ݓ�-��;j1�3"���:��wjY����<㶠U�Ǘ�3k]Ra�Xmu8���`�~��V���g������ xk�;`bƮ@��j���ƹ7���GhP�������XCt3���b�R/I��F?���m���o ���)M��̚C�-��o�ڷ��fop�m}P�]]��;�Nrk�~�����-��*x��5x[�w�@�;���M�4V�;Aݓ�Lu%١I���2Z{| �* �=�~st�Q�t������U]x��ΰ�mw�U�o�ͭ +i�m i�o��)���C�C?���1fNKh�(h?/�2*�I��[�tԝ�F6�\DiKu�lI�#�e�Y���=��FuR�im��bGt�U�d5g� v��*gTD���#�"� �G�'�F�"K#��k"?J������A0M�@�iB�Sp�Uh��t�����dX��L�Ғ>_�Y��ؗ�ڝ�W�(5ܞ�dZ�nQ�cU!-�[j�!���.z��5�{�%-d��p��_�jI��:��P�w1 ���d_���h���wW�еL*���D�:臕f��J>�Y)�h���ץ��(���Sc+�e&Ir�2��j}��S_l_W�-�����T�C�|�)�<i�(W�D�;�dn��P��=�wp3��+)�#��N��X�1:�ǣ4���؝�Nߡ�gVe��7��0(Wę������fZ'�q����Չ��[�y�:AvB�P�pR���%�Lx$ʔ ;fʾ3e@b�� �gx��q�R"tg�3�V@G�U���;{T�r���iU��17eO+SFN_�%5.�H4+JO�T���(�v���������Z2#e�cZr�H��9K���,y�[�<eB(OR��ɾD!�D��sgW�|*�7�Uk���h�*[�s��Z�v�mR�ho,X��6/\�8'ƨ0;�L��[�e)m�3UvYk��|Ez� 5��19�(Qqy�,��F��6.LLaR���û�W2�CBW���߮8{\MA �l���m+R7ϧ�-"��V�C��*�Q~A�iN^��27�:#'�V�]�M]Y>3I�]���'��:&�ͺ(�f��^�zL�d�/�.<�s���?��=�|����Ƹ��Ľ�3bf0F�Q�PI��.���])��)��B[(%]�ە��n�v��Dm��v�T[�UJ���:�꼴����5��|����{�y���L�2��,�9��l#(�J�@��r�=��,�u�!�SM�ӣ�W��/I[`������I�R�bW�8�[�]9'y���j��s�ɭ�IO\g& �D'g���|������I������PQ�� ��<'*;o$�.g�n�� A҆0�e��f�YsD���Y�g.��e����n 7'];<zm�"*�L5=��9"�Kx�5��5��[�T��L%ʡ:�3a9�E<'q��9��&���5x�>�XBV��J/��)�y+��n�d��)��˼h������Yh=w�2٬ )vQ�,y�v��i�%�)Y��aY���YW�C���o�a�d�b���τd����`����Π���6��Af�Ҋ�`u���؋M,��h����S�b�E �n���U/�*H��,X%��%�.ls>���ab�Aǐ�SN�����7=p��w +�%�!9�kųx��)-v����bE8{���`u��,���= +*�̃�/��Ŗ�Ŕ� f�L7��=[�+�"|W�h�W+�Bw�K'�������,:�������}�mD��s���s���^R��(��shR��X\)���wPC�T�ffU�*'�EL;mV1�$�b�ل��-�����m�W�C�_^!S~\�[~ uI}�����������q-v�P��`G)@N9@ΡK���հSk +�km �N3�<��:fjm0orm������ڹ��5�5K��֤��Uk�|��YxW�����W�E���NѨ���Q�?�<D��:�{P��_��_a~�~��C8����8��,~��� �^� n0��� +n��7Ld��c�u�bu}�� ������F#�����5v��`��o7֜~a�v�� "Df�/�8���`~v��kO�Xt`n=�:σ�F�h ���;�i���@ʻ)��j��=��0M���e��y���y��Ks��������;tGO��LO����t��#�'G0�o�|m@ +�=�@fG|r��G<��a�5Spo����ܮk@}�\[��u��"A�C9�XD9�XE9����E���C��/gPm{�1m����i%�P�_��9��z �`�w���!?�����:.���]�ۅ��K��_`�� +�����d�@��p�t���`u/��r)Qw ey�����2�;e���2���N����4�_r`�y̿|��`� �����4��� X��`X� �z��E��?���g�`�l<�<���Bb�b�L�W�@�W�}u�݈~�����c~�q���6D��� `t��6����������Lދ��?p`�A��@�x��@����!Y��N��d���209��a�ӱ��V��[�j�v�lI7������ƄC�1�<�3�<1��qH�ܑ +B_�� |ozr�3�^A��k���DC+_��C(b9�&�41[Ba +�B�h;ڍ��JT��F�ѷ�t�� ����~���gF�Wf������4��^���M�x��p�X��D��&�d��rQ!ډ��~tբ�G�9惨��2��{�+�S��x�~*&L����zĄ7q�(��9w���.qE���&�&v�hbO�r���mf>Jw0�%��w�rf@Rɼ�e�%ǘג3L���y)��<�v2O������C�ݗ��?�ET6@\$��+^�Z�FR�ُ"ʉ4q�A����Df@��y�e2��\��+d^r����}��g�rG�^����N�����G����v�{��[�v9��MN��� ��_W�ֈ�(Y��k�t@�#q?4�w�it�����B�jӫLc�(��#e>�P���@��w_��wOq�ץ��u*N�:���ڕ�yw���[��6�~���_U�%1��/�;�{�x��b ��>�����K=��������c���.�Ul�&�����V�sǭX�[��-u��Mu�^����u�Y~��%�U����4����u��y�q���x"��*ʡ��v��lC5ިx�������xŃ��Js`Vm\�cl��T���f3iw�N��l��ݴM��n��c�����3���w��<��>����]ل��m���������q���N +`�T�Ri����y�Fx�s�.�q|��r��۵����y����yo��띭}�w8�>�9�|nr�ol������ʖҵ-ˤe�=�UΧ䋜o)������`������"�&�#��3��<#������QZ2��\���b$���D������+ m�k ݾK�v��x�r�~�Kq���f(���/�]���p6��Q���4���3�` (;�e����/r��*<�Ey�û�q�[�L�jfa9��� +W�})����j&-�Z��)=�����g�GN%<�4I�K:4�t!x&i5�X�Ð�䧡G��H��\ȑ5)X�KX�7`\w�r���>x�> ���]��.�����K�<���^�9e>gx:��,����f�ٌ����M�`����tW�D�L�+��p��`����_����+����ǐ�5����|���U���"wxP� w�`EĄ+�EQ"�\!��dA�ל��8#P�����܆���V�k��=!㼽a�y�4g�T�h֩ȑ��tG�]��� �;z6�&�� +,}�sQ�D���%��I���V%~pYJ��F�ii~N�u?V,��'����Z������Bs�S` �9�����}yt{�\T_�b���1z��Dw�5Q]���_Z��|#x�~s�Kn)�$�U9 �48U��*��婄��\�C�"⁒R��X�?"����ZB�����=��zO�ᨮ�Fg�yfG�*˒�V{�3f{�O��BlM�z�4�e��ε�F�O���>pZ�`J��U�D/�y:�Ľr y��̿_� �#� ���C{�-4k�-�C<L��ƣ�D���YV���,��m���e*Ƙc���A�@p�/U�ޫ8[� �Z*L����nƍW&�*2<j�πJL�+�Sz��rCpgiC�����&�l�D�����IV��4�N�c��S+}���U+Ř�`������*ʿ�G���p������p0n�nL��mX��a��z�4E�� +�S� +��tA�*chsY3ͤ�lPأ��1F��(� ?��_���ߏ�ɿ��R���R`,���?�>F����(��^Խfjpp���Q0f|7\���^��a3d{wU���ҕ��i�M դ� ��0ь�]���}Q���N�bW���T�.ŪU����V�^�+�1�\��"��h������:��еg=Փ�����p���>��j���� +�-�b�� �oЫ��*CH����Gh��(M����<�Rifc���� +�;��JͿ�J �ZS���/}���t�ZE3��rϠ�7���.��g&��)��7����x�9��n�z67�M�E�:������� +��ԅijZ#ʫ��e�!�B�U�����c%���g��{�� +cɪ0�zO���2���F�Z����������`�mg��}��-��Ԛ��В�cl. �$��,�Ҥ V7ֆ�54��뭑���hI�f��[d\�)2�D>A�c�j1������:����Q��Lt����wxBOg tZ�f݈k���Vߙ�^�������b��]�j�P��!�SXIsG���N/l���7O3��y��|�-0?a L�YB�6b��>@�p��-3�(��.�����7��R��F�����vs�նD��7ó������2?YWy�Īw6�vXh������]��ٖ��e�ɳ<fd���nâ_�'t��Σ�ϡ��6�g�]H��<@��A�m����8�`�[�`��r �K�_�#闐��2J�m���.�������Ƴ�DdڎFrm���o#���=_�ӻ��wa�r��Z��V4��h��Ã��!�ƽ�{���n,4N&�;7��mx�3�P2��!x��}��r�_�H���f*����p����O�����h���h�?�'�c��6:�h��P������Q�����q��CP�@�H��~Ů7pE��r]�AQ�g���w/v�]�]@VPXYa9�[��11�d�Z��j��h5��D�Q�pXa=�c��*�Q�^�[Q1��z�����ib�|fv�y���z�����M��M���Ζ��̓'�|�L�Y���^i���~b�6]TV�Cd�aLj�Zr�1"��)b����|DxƯ���P���3i��(��,`e.�(�Gm�o +m1�hfZ<�f �4K8�j�eɖ)B�e�8�2WkI�N*Zd]�\Y�N^�EZ��zB�A���jr�.x���}�5A��~�J�(?w�j�6����ԋ�)RJ%�\�Ab�+ʽW�X����,ښ���YB�u�(̺@b]& ���Z7��w��[�l�[��~�s6~e��q�C�q%\�{�WGh��(?#��ƾ������#���@j%W��+^�CX�h���`Bm�k��M@`�4��a�u�_�"�[����S��~�hl�>ј�J�g��g]�ȳfP�Q�%����L���^`�}�a`a��Q ��PD�0�÷Q �)��Fal�7��Ls:����q&�3s�ޜ��0�e \[���%��%���I8��ù� s>��p�ٴ���i��� +�]ʞQK� @� �?���I�oU���W�p����㠻6�DC{=�7f��f:47�Bs��P�� u�~�ڪ`�v��?��� lo>m�nV������G�A� '��&���:�n��1�ߒBӡ��CU���(�|�����YO"$=3!�Q�2�� @�ׄBz��=H����f���X�0��I��F��)��_��u@wP�lP( PC2��h��M��? ��tB�"�����A +������kS�R�s�Ӛ�Es�@�a�=�2`�8����Ȩl�3�q}��JC��Hb >$�L$)�^��>�8������qZt^�wK��-��u����D��'3��Ÿ2�q����'��v�A���Bp�aRN�H^ɛ�B~C����X��H��P��C���n��n��DO���Z��u T��5�2�^H����F���"�$��W�셺�=W�3u���Я��G�n<P��W�Y�g����k����J�H�܉�����g�sw��q�2����m`/t_�g��lH���j�6��k��m1{��`�5���F��� +��u�u��݁��\���?m�p/�#��8�{QciMƘ�&3Փ>j6{�ΆF.f�#W�'���~#{�����;��֫�e=�֥?�:��C��ןd������Nvå_�� VW.�D.�r�a����h+i��� ���8������Jc�=�a}X�a�2�b���ak7lcwݿfwܳ�m�<v���nJ�5C�p����j�(���Z<��N{r�)O.i������Q���IC�فмy�ɄG�Q�����9�o:k�Y�n�,gk�e�B��K�q�p[�Oc�謱@�l<,:m�5�č�f�I���߇�:�W�_ns�g�|���D�AJ�Px8�ሡ���1�#8mAq�����wع�B�i�pƴR�dZ+j�L|2`��D�N��{$ {��E�ڀRiM�1��FY�����jz�(3qe�ώÃm)_ +%�#m����E9�=� �#��BdZ"��S�ى��BC�BQ}��ĵa�T����(�.t��ې]6�!Y�|yy�!EiH��$�AYrIy0�۶(���0�NPW�{�����I�'��Ij\�脳1�h� ��� �66M8���I�+'.��G�^V�'������M�C�mʃ�[�9WUh.RD����k���-v{�?j��������7$� <�Q>ЗH=_2p5Y��Ir4'jqb�j�Q�<�UL�*�%�'�'9��@f��Ȧ0n�� n�2?�ۼ�/T{cv���dj�b��3c��{b��1�t������aG,w��l���x0���O�~��g�4�J�C��SG����(���& �ii��)s��S߷�;e�<'y�2k�JUf�Z����Cu�5}�q��K�o�\����Z������H!� @�+�����9��T]ī��u�{�����t������m���ٱ�?>3o��7��>���x�D�xG��#���G��퍼��y���1�3�K~{Է�o�f��Æ�_���$��T����T.n���T�wR7�\�v�4�3�g7���p$I�4���2��w�7y�Y<���=����Aߎ��~m1��[b~(h��-h��Hh��\���`����%l�i<��?"ﻝA��tW�ΰ)�8��3�A�q�^�a��QY��pZ�Ӏ4ۥW�s�N)��L��jK��$��4%��Y���gu 煵��D�ğ������� �����|�1����S�P�k�_�y��d�`Z��T[0��VFr2z�eN� +�K�<E��hJ3y5�YxS}k�]|�tDP%�VH�Ef�u�I�c�Q��ؘ�o�1�}�������c%���殺��9��Us0��c��lƐfӧ�ve�ٷ���͙.�J�[}F�G]z��%��W����Pt���!A�|BT*�˗$�����S�^�X�`E�а��t��P�7)�r>0O����c��m@o�6�S�m�9`ߨIv��V8ת�\����+U�r��g̬�-�l�/V�ʣ�B�Y�N�����xB�K��dń���3��_�ܣگ逋���"`�~Ǹ�CB��GGAӢ�ñ�G���%8XrӜ+����wcN�g���3d��e7��}�|�aQ���$G}%@�~H���J�Q�bB���'R����y�"e���s�8B�a�+z�|tٰ֠�i����E�U�9�H��.%:��!_�Y�W�˫���m�ks{��H�=%Qi/dj� �)�Բb��-�����in��({�H�WF�G��'������5ԗ25e;8��a\sI�}iq����p)2��t�|���b +���~VA� �`T��;!V�.J亻r�'�?$ +K߱������!��u=�"�!�<Jй�d�&�7����|#*ʷ1��Pn�9�^oJt,0ɜ�*WmY�Gv��+���S��K/i���O������������ER=��K>�{�Ks�H�_[p��"�$�bP[�*���(� b�ݜB�~���xmu�Sv��%�2�MYY�^a���������S̃�$�0��(���8��q��KQ��[Q��&���'�]��%3������Z�Z:WtCY�?�֠Ⱥ��Ywr��pnvC�}V}���^�8�v��w�֕z&�V�k�}�j��15�,�(�-a��W¨�/�U� V]������u���T��z�>+�C4��-�(l�A~�*h�7#�};�j�d�Eqm��im2Gi��9�%�5����\�y�����볿�_x�,?��:_�/�a���a ��ճ���`��>G�Sʹ-�]��=m�]]@^7�^/d���ٿ��A���0�����Xnb��>�/�!�W��[��cv�����幷������%ޮ��B:��B:������㦉f�z~���t�.tV�.���=�Q7���![���@$�oG�x(3͉O�F���"Ʋ�������9��u�5��ct�m��i�m#��#?r>����o<�Y��,��Q���}�h�Pv e��c@¤b��=%F��:�ފ��]� gBgb�=3)����Ι����m�U�?�nqxkz�q�� �7�/��ޜ��S��'X��c��@ +v����>ʵ��� sH:D�&�u��9_�[��s�c>oχ`�|�mq��2o�T���h3q6٬܍�~��I����v�l����?ᮝ��n�9�~��W���c�����2 N��g��9���ឋ@�e.�,x p�����iq6.a��]x�j�_�Ǻ%�,e��%V/Y�UK��ʥ#L��yFr�6#Y���,��/<爯��1E�#T{'���t�����rcIIC�m׀�7�5�9`�w���� +�ﮃ�����^��ł_��9�}P�V����)x=�χ���_�u����1>F�H}o��M����+@����lzx�> ���չ�����l�e�D��((`�W%��� 1`A,H��@Dņ�(�< ��C�-�O1D!�ODQDĂ����g�0���;�=�;{���9���F�9���P�Y��0�s C �Y�ҿ#�DH�N��b:D� �X +AC��Fr�<�(g3�J��,Z��=�X�=�OZ��8����`]h��%�+"�6�!�j��&;��@�:5�ͣ�1��n�@h�m��� +}k7��j����GK(��]�4��8Zw }��0�`W�.���e@~5��Gn���+��j�M�� ���:���k�Rs��G��?�:����=�@ON}�Do��G���=�b{�����}��`��]$7��b���u)��b�ѽ5t?+��������f� 5���(F?����C��?b�>`�h�Uŗ`R�wŮ`0��o�4�H�%$��"�H>)�k���x�Cx�jt���h���(m����0k0���Q�����L��ɼ�L�Dc����O�WI%K�r��W��߀�|��Ex���N����������y��n���@߅�B�V�����5��ջ<��RM�)O��H�D�ɿ#3�Z>]�x)[��,<����:t�6ᑬ��t7�J+�&�B��Z�7pC���]h2ehT�sE������9塡|(��T������7��T��j +:U3�P���Ÿ��@��7�Q�M��Ven)w�r��{q]yM��WՌ�C�k�p^øZsƝ{��=fK�m�`����f��9/��c��<��B��w����m"nh��6 M�ehԮ��Z\�n�%�6\Ԗ�^�,���4j��p��W�Ew������ϰ~f`}�`v�`�*�j� �|���vC���u!�����^���+��9��[�Z��貸����i�z�;���U۔q�m���ٜ�z_�۶�l_*m�`_&�ۇ +>��)���Q�DyP��+K����z?'\��z�?��#q�n����U���듸c��>�;����s�C� ��V�}��ҮB���ܾUXf�LX��D%L��3l��w���`φ��1H�6G�[���g�\q��ǜ�q�y,w�y"��y_���s��W8-�q��;-�v\#,s��:�J�v�v:;�9�:w�lqf���L����m|�N:�h{u��A��!�8�b��nq�m*��� +����[��u_���e�p�K��ؐ**2,m7�֛l1l5)0�.�7TJ6��W��\:dk\^�V�2Y�g�`��(v���F�#9�.� % �}#�c�w����JFs��c����S�[�ŋ6�-��X ��f��%Y�Z��=_�ڽX�����U�9 �� ���֥����t�'�+m�����Z#PM���88�>�(��c��E���V��~�O8�qT� o�DѺ���k�6���+Y�"��ʐ-�ʑg{�fzmS,��m���ae��ye���/�/���L�:��}�?>4sЬD}>͟��P�o���� ;�`k�@�xry�����`A�1Z����ѓ�٣�L2�����e�i�t�,E���T�-��R�B���g��}[��~������=���h��(�1:��ӑ����� ���(����X2�� ���d�3lj2�|/N�&I�I��?W��b�и�l�q�r�1_5S3�X��e<e���<���&����R}p���˴�S��h`o�[t�ơ \���Xa�d�{q�¿� ��F���/ +�$Y'MN�'-P� J7���Jܠ���<>�����j���f��<.�i�S��G�Cp" +80(�ٯ��[�u^����ȉ�̘AȈ��Ң}��Q������XqR���9�Ӥ���'��S��E���]����|j��)�ǻMk"�-&�1s��T�?p�jPEq����췍��Ҽ3N��Z,��ҿqBj�;�(v�<.@0wl�pvL�8!f����)���xy\�����ԨL��ȵ�"��uyGEu�q�wgfd`����.誈�i*e�60�U�RUZb�2�X�YK�(n�Q@M\)GO�-�h��k��n�Q����9��9��9s��{��}������b�<�31�=uO\u]�D��1�D�[~:s[<ס�='ˍ�y������kP�0e �P�0I(��H��Ҝ�y2s��&3.N���#56Ci��uXS�h��vN�ޠ�G���Gp��>�36�o��_k�E Q����Y�|��7��jd�Y�c�?4�b���I�Q�4�I�\�t�l�-�4��� 6)�1��D�")!�ΐ�c��/T��+�b�����۵�\���z��/�N���Fŋ�~�>��\�3��T`'ٔ��uy�%&G,5�E^�rR�!+e��a����a6I�Ѷ�E +����$�}L�R�¤r'��Vaܦ 7�w 3wY`�����%��Rf5�Q���|'��&`_��ԥ���<JҀ�t�f�9c(23=��9Y0e�J�2�J �e��(۸�xyLZr��i������+��u��bQ���ӆ�|� N�Nl�� 1�Ԅ�Duh�;��Zle�鵚����.f��I?�9YJ,6k��=��QX��%rf��ْ��itv�MTv�m�٨7����ʵ�*U/^��x����=�̣�9�ߐ{���_��: ]t~�Y����]��%�9@!��yF��%�H���w��#v��]�/�I# +�da��6���KRAKr�������P5+w�����/���on���w�/�~9���;N1���\��,�k��+x\BҖI��U�+��ҡ�*�@d�d!��G�_ -�' .��K�mJ�mg�d)�����W)�/��0�h�ʻ�09��.���^�\�T�fz�o�r 63��e��B�RL���/c߱��P"�R�U1�j$B�' ��[��)TIfW�KfV�H���2��L����i��)���&W�TzU"g�^�?)�V���Z!�{-�����w}u��<,�3�[_ D�= +]c��'��Ŝ�a�U灙u��W���9��u��u:ɴ�ɔ�T��\����6�kkl=k����4�=j�"��k�)<V� +�U��x�A��J�� +�GRR�НLwL {����M��V{�ت����VOL�L�$��,��h �[bO�"��b���IFYVIGZ,��&���̭���m�S����6n�����طӻ�mX��k���2��-�\��>;�I 2�ۭ���^�8cGbt�8��Nş��i �kܭz��a�5_b�[7��W`=.�Z� +���׆��]��4T[�]Mo�:����`+���@�.�� +L���p? ��f'i�A̓0��8� ׃S���� +�{�t�{Ȁ>-f�n)Eϖ:��4@�r��o�9t�����X�r0��y ��T���O�&`�R���3`�Q��19��*hZ]�nu�s�p2Nm����U{0��C{2�O�Ay� +v��P�7A��%����P��J^u��qW��}@w&cN��7s�G���80��u +p>-�����*��ka{�l����(H/xAr��A$�up�up�}�DwP��A;���6yD�t���3��=��S��-��i�w8��O.�ձ���]���#���Z�r_��`��HD��)PY^�K�:_��K��F����n� ��)k��p��9�}�5���O�=�G��;�� �������pKŦ@ �؋��+p� ���By:���x�y<�K����I�d�;�B�$g��c�M|������W���� ��"sO��^��-�/r����#�m�P�AaNk���ɳ!��1��/Y$��^�������b�]LzWs7�������0"��D�KBII&Y����Ux�5x��x�-��� �{�?|���3<E��<�:q����>��DM?��} :[�K��WO2�1��F.~EG+��#<C-]��c젫��O�j��ǘ�3�7�0uw������͑n�ѥ7硅��m���!ʦ0/����3�n�4�Y��J�dL��ZG�f���vѵ��f�}7���"����ٹ�(.KD|��;���� ���L�yTSgƟ{��$$7n�#V��j�FzX�l��$&�� �@v������(n��R���(.�Եxlq���L;��T����tZ���y�O��w�{�?��=������#����r +�O4~���%���<��J�LR���j|%��cI=r �ׂ�&|���\���]�8�p��%���'�.�W.+\���E��0TI����C��Q�m@0����x|ͧ� ��G|>�ɗ�K���q�_���p�o�-~#n����T]��:�˪^��n�b����� +8K�!N��>�C��������<O}'��i�Ǡd���[���[�k���;���ϯ����E�f\� ��w���N�rg��ũ!�p�/��3����94L`���"�"}*/�����@%�S�������pk���6\�KÍ�8�N�Q���p:� +�jp2`9N�ű��� ����y��y�9��t>`:G}�v���m��(/��cH?��5��'��Ip?P�;���2z4.����c��: '�i8���ڍ���VW0��.�bf�z�W��t�[���=h/���� +�����n{�h˸_E�� ���zy����ɓ�Tb5����O��7�?�O����EOH�hq`�t��Dg���)`�Cʘ�!��]����Zv{�*vkp�hs�Ѧ�ŭ!��CΉׇ�7O�Z�4�gI�{��Y��*w�}?�A�/�z�Pg&��2�S��:�QhM��P3�}���:5��<���@S�n�T�6h�Z4u�u�q��UҠ�%Y���VkNq+5W��S�H�O�QZ*H�yY��ITꩤމ&�8��biޡ'�H���}�1 +�"'b{d86Gj�i`6D�3-vv]��m/� �%^^%^�DR��[��-�&� �+[v\^�'_�H� �{B�WG�7�&��3ҿ|�� �)�-F{��l��M��16ͱ�h�Ib�Ƥ2���l}�C�<�@�,�L\5G�$jW3�N�pZ��z�fyմ�yQG}*�.*�D=P̎�NQ-�x���yO|JO�i�:D'�m���xZ�ѬS�Q7�u��O�g���x�$>[T�u�j���Z��*���W+��F^���kS��RΌ�U�i��gh�U�j�P����y�j9n��/L��]�n���s�!I���!X�2�)!�K CmJ,S���,HNe�'e��%9ĕ��ىeܬ�Jiyb��L�R^�[�(��T�����Ļ���|~����$A�&�\��9 ��4{���I�F�� Ǫ�Xn�Z㻨1�b�1��2�������h�![\npI��%\��BZ�_ +�/���7+�)ەN}��?����&���zAI(^s?�dN�~7�_m���S���J��<���ñ �T�MAeZ$Sa�2s +[�jfKS����\q����7�K]�*�Ӵ�'�Ԥ�1n���}�,�)�F?��?����2 J/�W��<�h��H�]���S۳��5i�禋P������1�3߃'#e1LIF"[�nd�3D���Ӓ/ɵ�Is,sevK�O��AaM��g�u��-�K�\'�Q��n��4A��۴�������&�W��)��6s��`V�ۘ��ҬPeE1�Y ��f`�l�Ö-��\�l[)g�ΑeZ��[�(Ҭ�xs�U����d���d��ʔ�3��)�B�����u����̙KP\K��|�gv��9~(u�D�c< +r5p�F2y-�p��v�Y�尉�9y���bΒS!3�,���F{��`���ۏ�R엉�*��'^�-(_a�r�<?E�>袙�h!��kS.s(��N9�]Q��;y�I�q�#����Il��Ħ�3Ein�8�U(1�<R��Z��\��ܠHt�)uΣ|������Q����\A�����8��/��H4K�i�s�>}� +$p�Gn�?��c�Uk���(�b,% �����J,���v���-I..���� Eu������݊��#ʘ�O��ʘ����A��'�GHo���t�E�,���9g0�������@X<�a�h`�D���2O +��1�I�H�q���K%q�\L�Ri���.�(�+��لaf���aQA��<�T�5ڨE��A� ���EE�qA&.TD0j]S4�Vm�X�Zc4DM��'�>��3��}�9���ݓT�84ɬ�O�OZ�qI�P�/y��_,*��ʷ�8��o{P���z�N�����-gߑ���n�����������1�>c�� �ӧ#�% i�J��-����,�K�RĦ�w�I�p�^��4;D������!:�g����k�{�R��e܋$�$ӻ0�� +Lg�6)C���8cl�7FgaTV?�����x��������B\�,Il�|�ଥҨ�ղ�Ye�Y�������&rM��"<�'"*�W�B[��+X�IYIoR��٢M^��s=�����\w���D\�C��5�`�0D�"�8�3�ƹB�q�fL��7�J��HC�vKC�viH�#iȆe!���Ԧ�.e�.��I +�^� ̦{��~F`8[֘B99c@�"�u�(AxI$%��_2�J�F_�T��f!ش�zS��۴N�e*Kv +��PrQ�? +_H +���\ la��d�5i�!݉tO������R r+Z��JW���ޕ��eE�9��X�� 0���e�,s�ò�������b��� ��3К�B[�m�(xuQ�!�b�#I��Y��}X�La[8����l������5N���� /���x�F��6�#�n�7�L����Ŗ�-�l�ڶ*� �joAe}u͏D�t#�#s�*�g���1��6��J����ҿ�< pnPB��U�N��P6�����t����>2�� �����kgB��C�����fQ��ttR@�Z�|0�1��O'0��6 z?�� � ��'��Q@�86�!=��Õx-~� �0h兠��V>��x�ڸ��\[ 9��/��G��0�+��"�<��5`�#��H�a ����8������i��A�u#��y�㼖➼��Ŝ����G;/"WX��_�B_-'{��9�ȍN2��I�{��F�(�;����^�S��@y�\���|N� ���u'^�5�Mw6'݁�t�$�jV��;� ����.�=�{\��\����r����y���=��f�� +0^-�z���~I8m|E�&��w�͜<P]�G��c��;=�=����>��>�����ɤ���Dt�ح;D���M"�P2�$�ydI�O��K�������ex�J<E��ߢ��'x��x��x����7w�3�Q� Q� Q��;��@b C�2���ӹ���t�q�L<�z<����Ltm��B�.����z��8Sv���'n��79���F�Btq��v��p�(�\�GBHI�{��-c�G�"���>Vғ�;��DW!-�tU�U��2Gq��?�����"G�@ο����\�!����/�"��o�8�9��i�ͦ�=z�Г�Q3pk�Mrpq��UF���jF�g��ъS��m�$3�O"�%�C�pb.đh8����!x ����ܒN�uY"����o���$[��T����Y�:����S�f����*/G�|�6�Eр&E�:���=؝~@�JD���d� j�|�<\5x���]�7�\u�K�18�� Ψ��)�<���G�z��i8�^�&͇8�و#�"֔��َF����8�|\ڱ��ln/`uQ�.b��>���ؐ<=��||���E�>8�6���p�c<�yL�a�ٰ{� ��P�=�q@���� ا�{�&ؼ*`���n�:T{7a��ET�܁ŧ���P�Ey"�r��]���Y�t.�:ଗ+Z|p�G�{���(��M�^�D��ޅ��=��/F�2v����lT��b{@,e��By�a��P�;+�~#��� �A�PD +�@d�!�XjY�?e�=���)P�� ��ƞ>Q�gv�ǡJ?������� +���`�>e��T�N�X�I(ћ��`�Pl67H�CNI6�ܒC�HrCEIίx̲\fimc�?���p��}a������2��l�E�a$��&�4lL�Y(6�C��OB�a��o�/���}���\��)A55�J��.�{�]8����.�.�]nr[�ۊ(���%��*X���ԱmSӦi3�δ�v�!m�Ӵ�t2M3M��il�/2f���9�����ߞ>f&m��J�`O��fO�-�'�_��Ʌ��ɍ��ˍ�� ��"�ܱ���j�}6p/�{��Vp��\��q��z��܊5)��h�F��+" ӚjLj��IMs"����fÙ!v43�gNsC��ܠ�"�\�4w�Y�S�e}���~@D���PC�����ܦ���+��;t/���m"�h��Uc*7'sM�έdF�NfX�a���젶� i{�~�0ק=��hg�n�K�.�UEg����_ �� �y����y�����B��rp���e�C��m��nN�S�gcD�ǐނA}�ۘ~������#��ۥ�悺�\�n�oӝQ��� ~�+B�Y_٤�+�Ш�>B����I�N1�@��QD���,��6�0aL@ش æ�4g"d�G�ٌ��t�*����t�<l���m5vr~c?�lS4#B��E�k���7���~A|��3�GYg�*=��1���a�V���4�(�P��g�|�(�1Z�c���$�ך�#V-�V:�V��"1��i���&K�hi�|�^��pD�)�ܖ��rYUc�E���E����*�����ߘ�7���t�Y.��,B~&��E�ǡO܄nq':�T��d! ��"�I,a�J�+:�z�����[��k�c +�xJp�s�jqYeo��ğ�T����sT��M� +�ܧ9�:�ި��@W�Y��L��1��Q��[�`��K��R�,e�QʃO2�^*b�r�%��Z��uJ͜C +���QE�4!�Ҭ�B��*��#Io"�I�Qey�C�U�Q����j�������y9F�z�K�"�� h���Q~^Y �|n�0je���lc�ek�9Y��+�E�<.��g����(� ތ)��#ʟ��ʨr��ʨ��Ϩ��H��Xt�<�S�O?����M@Su<�՛��˞�G6��9J�!3�����c��m\����aE���`����د� +�?&�#>UVG��5�U~B��$��Zʜ5���!��M^Z�{����&��Mp��ݵ6W&dw*�&����]�����g�]����]� +�+"�\�F�5��uWep��2��Ci��Ji�� +���z�E{Rp���qb����S#�u���Eu�S��nC�w�}j����w�ςb_c�٘B��5��Y���3��x�wZ��. ��� +��וy�w�������y�_s�j�J`��&F��O�y]���7�Gi�f�-�P�O�՟�� +f�"��1j���=��d���\��?�_T䴼��n��"��[���n~��i�~�-��J#0GL��Q;���;Z���P������0wn�)���j��2@�eE~W9������t��Y�V��2�s܁�wyu�6��5�������W�Gyu�7H��������JxZ)st�~P@1�л����oA^�nhRqp@��P>�Cfd�J� U!#�:�¤�z���q65�<�o`�M�>q�M���M���K�r)=k�Ju.�Ӟ�F�� �D�5�-��ʞ[�� +d��!st#2ƶ������c8ia=R�|+,a_؉�p���H�0�ç�]����M&)|�I��I�7�4e��ָLZ��q��h������c�q�=dL���O ej=�N'��$$O�`���fb�I�"���q��H+�FB���3�sH�\��3oF���H��2���8O1p���#�Mύ!Z�-�v�8�7 dRLL=�e��\,��'`��f<����)H\8���شh���lX���|s��/�#~q�xq�o n�=<9�)�� ���C�h_$��u������h +П�fIH^��6]��p)�� D"�\ށ�����X�"vŌu+�X�E�J�ʕA���|��-p�~I|���gė�P�G�@��p�S�%gi�9����i�%ҿL�/��וP����1M���}�S��QQB_C�RJ�SN�����h������HER !�|�dB�2�9>��eȲZfǚ��5�5�0��ż�mw�\]����������繟�њ@ҚC���eS�eS�E؈�x��x���u�`E�D�994|Cݬ`����@c�\ �0^_����o� ��!��(`���$'���N�Rp�>�ٜ6�9m��V��<Z��[9ɭ�u;���yr����)�����ɘ��+ƫf����0j�RӢ P6�����76� +�}�����@��R;��Nl��_���lL:X;��:8����u'��F7yۀ��܋��o�u��Q�`��= �PS��y����� +�*_��6���X�A��E����l�����<�������s��Dw�'��L7�;����0�x��0�ZSלV�/R��"���ȭ�N�'w97?��=�G3�s��Ǽ��BOٌ<�����*�%�_꺑���aуBF�qd�$�$o�����+�%��9V���)6� *�5����� Gp-�'.����o����� ��Y]>�C��+"�/�����N�y�Y�G(��2ꬢ�:�l�Χ���q�����&��9��[�<`_�G���z��)s�� 1'�#�`u����Q/�Z)�ʤN�`u��SJ���Y���1��k����s�4r����.��f�������~/Ȣ!��ӝ�7���:W�G�P3�ٌ�V"u�C����.�b�,���l�N%�3_�gp��q�oZ躙Y<��8I�� +� �᧾d�����J�Q�ϟ��0��Ԋ�hI�>��K�\�P����\͜���E��140M\�ts:���k4�2J�C斒��e.��F��`�� �J.�$�A�"gѦ��V�84�%�^:��e�^.���R�/�N�Z�*4؉z�z��uu��a��w�c�3v�E����=� 2����,wwȍ>��6��^�X�㴱;�M��I(M"pX�2 ʏqP��ze6>W�N����bO�r����۱�t?��6�3�/QmvU揱���-�xN����,+? bIa��J.��l?=��*q�|��]?o���쵘�ݖѨ�����)�n���y�f����Q�%*�W`�U56Y����Q1� �^G���Xm����n�zxj�3�%�G�yg�{G�����Fhh�:�!�m3;m}Pc�j��Qe��v��l��Mv��`7v9Xg�k�a�}9V�oE�{�X�^�nA��+�'C�%��bY(z�Կ���=�}�bi���}z�5�56�t�3�8zc��?*ð�1�ӱ��#�9��J�YXR�<,u*B�S�P<l��dX�P8�^(�$,�'!������J�u��YЅ�,t�`����GH�7PK/��W���\��~��]ݱ��+\�P�����Q��!����-�n�(p�/,t+��J�\�uB��ja��:1{��\�b�{����B��!��x�_P����������>ۓ� C�������%��(��C�g( +<'b�g$�<c�뙈�Ta�W���'dy��^k��Jq��q��)����:���2���w�N���o�����/y̔3'+G`�3����NX4�y*,Pb�J�l�$�UE!S�U���Jf�r�4�1EU&&�6KI>��L�CR��i��mE��/R����.�����a�����ǜ|�+��W��㬰@=�ծ���L�?2ԡHWO�,�T��c��N��iB�:[H�+����~���vH��ZE��N����һ\b�͡\�l{�����Jza���|�7���[ +�Θ����_�!90I�����B|��B\`��/�.�>\/E�(�TL:����<&�J�A�ig�����V�2�9��Rz)d>rIv�!��cv� RC��⎙!c1#� !a���ؐHĄ� +ѡIBTh�0=4W�-�������mSL +�'-���kza�����R��Y�A#[�]d�����K��3���f�� �H�0�$h\��F�F�hM0�4ᘮ��i��Bdx�0%|�09<G�/�>_#M���2�������73��(��Bj�+�7&��� +"���0#2L*�8������y�2�T�2E���$�\�Ct�2_ۮ��f����F��m�o^R����=���|��y�ߔ-���}�����ԋ�RR���-�)>�Ϝ"3��*��{�$��ef�Eim4%��wW^z��Q�M� � ʶ&�f�P��ndX�V�L#��1�Z���[W����,�2�Z�2���cI��>�&����6j!�<@<�Ms��L�)�.gf��2�˞�U9Y���,[�2m#e�%)ݖ����d;���Ӎ��bSR�ה���<&{�ytv�%!�>�ۖ��h��!Y>�q4�M�`,e,x��������� 9���*#������f�T{�R�c�lO�8�MI�<c��e�q�1��Q�J��s�c�9�q��8o���2��0���~�(����P�8P +�0=}���6�Oּ@��uRʤ�JΏԸ�(%��Xg��8�5ڙ�QN�F:���YF�s�i����\o�q�2u1G;ϙ��4���<t���H��|�y�Zƀ2X��`*˝D���&��<5@�S�k촮]�S� +�kdA�F�F(ޕ�8W���r뚬W��oq��]U�(�N� �!8cTp�4h�w�3EM}�~Z�-謄%P3 2�OE����Q)a��F�R\a���)���b��4�=L�� q���n��'i�{��K��~�5F_�v�����~ψ,�nD���g��j 7�UO�l�����3CW(��% ��L��m�xI .骨y=5p^ �7D�=���IT_O��x��LSo�Ex���Y��j#ܳN���% Fx��������� ��@!�'�=���o�4��h���k������)���z/Ž�s�@����Q +�&+�kSwo���ے�겤R�z_P�w�B�'�BJ�+t�O +}�g4� �g�怋�p"�h'2�3�Y��R)�̬�g�Xy�����Ky���Th� �TĪs�hu�L�#���X�R��yj_Y���� +�ܣ��7X������i�̧����i>�E�,������%��e����F��+�����am�ڭk��u!��u� +����j[5Vm8���պʭVU��_�Z-�m�ߺC�[[7䷦A-V��s�y�\�۾HJ��1eRl�4�^kЯB��n��fs��n����Ԣ:D~�aj^)K�`���e��ổ�f+]M"�ˁ�샓4(���-��wZ^����;�i��r) �㞓���nwF��[����Z�i&sMk.:��⽏B8��ji�j�pk�xj��u-���H�N~s���p��Rb]���05g9�#��э܆����A�V +xE�{M\0p���vƎ�4�G�h��� �1.�:�:6zI�ù:bQG,��� ����r/���ֱ�>����[#���>�A��VG%��h����8ٜ��h[�m��ӝi�h��ml҉GccPϡ_ON�It=���.���������9_��9�%�t�z��uR ������g�l��f1�3�] &;Jw�>�%}��iB�PWf2�P�WI�U��̫8r��f`�Db���4�05�nt;�xZj�~��y�l� ����ҧp>�H��K�o�[�ȝ�k�r�f�>�7vߐ���@a5쇃L�� ��� �B,$B&��'f�����ѿ�H��i5�\��B��u��z}�M�����=�ż���tC��:�~����5V����)�@�C(���M�44sћ����4棱XׯuS�Dg-:Xs���E]�>����c}��X�+]`�F>�/j�h� ������ �<t +��b4�o�� +R� +�*�ߨ�����9��z����˓���x�6*���&|����ޚX�o�C��1�Hw*>M@'_\h��(Ac�{)�ezO��<��z�߬���M��7tT��~k���a�����G)��3͉s��v��0��X\ 穋���cg��h<�����<��S��ot��8DN���*�~�������D��F�4�c���Q�l�/�[~��n(1�����0�dt��Ł�SXy:n�]�W��%�,W-5ZCNv�]zI;�b��f��V� U[�����f�>��=��l�K5��9cnE��鄩�����z�j�>�����^�TPnB�Hȅ�@B.�@!B�- !"�BAQDT��R�u�κ��εg���z��������vv��n�ݥ]������9o���|��=��y���2|k���1��;n�m���m���W׆p%f.Ō�b�^������p��e�^w�������qb��p��GX�}��qQ,<s�<N�>M��B��!���R�}���[�;�q+67�D��ĕ8.n0���np�̆v����r|'�p"~����b�!MX��8�p�����1��S�l�ӛ�+���,�e���j�w���ѽW6����\ڔ�s�xi����XJ���$+���܂�d'wc.��#��2��-����[�b_�7�7� �I}���O0��v�G1�QݟP{WH{���1jm��<OYΤ��d�K��BF�3�����n��NLq=����$�{21�9����ؕ5�Ѭe�l{�m�c��}�~���a ;����_Q�D���H��B`����,��u��m��l.^�`*���*���0���8ߎ1~F���w"��Pn;r�` � ��λ�P�m��� +~�����(�zB���Et�I���2��St�,R�Cہ�5�ΏǤ 9�UP�Q�#�J��Ch����B7��>��� �}=���]8���c,Px�u�b���'�k�����&����j~GI���F�(�}��L�s�1�.�è( Qv�0 .E��!q�bz���]�Bg���Nt��W2���)�Z�����XK�M於C~ʚ%���X�$���|@5敏��)p���S�=e�勔�Ǡd#�$�Jr�#�K*C@Z����Ԃv��enx�:�)�-��f�$s��S�k���4���8?&"�fE�9�O�O5_��{Hc�q2Kc�^�2F9�)_�<Ay��)(�ѡ�]Q�VE9��*�(Mp+�Фt��l��� �;��|��Us�^��l��������cQ���QfU=��|�ƌsd�L��3NY�)G��Q�F@�:��,x��p��hR��RW��� +��WzPW� [���jƙEs��jN1��Ǩ}�|H�@��1j�O�'Pݛz�49D&�N�7@9z�_�Ц��G� ��t��|4j��JQ�U�������*;,:7�:?L�>fԏ����/1��*Go�6Gg�!�=G���r�O��4�\�Q|�̒�մoѽ =?ei�Ѭ�_�> �T�x� +`5��\�@m��j#�5u��iBu�c:�NVe�fZ�q�1^�T�r*L�#N��K��T֬`o�+&��&����u��h�<͔���zS<l�-0��`�͇�V��Z� +����VTY��Zڠ����aj�~��,�r�%����(�? ��(-�I�)�QVN�Z�/��#d�DH��S�fZ�s�e5��8m�Qmˀ�Ƈ���: 4u*T��PQ_u�*���.(�C��'�̾�����~�I��O��LZeҺ(+#��h�!sd7$]�C�A]m4�����jH��!��<��r�ܩ�ҩ��i��U�� ���k��� V�gb�9&r�J�G~�Dο3�3�čOݰ'ɋd��IirP}ɍN@�ݳ9*w<��d�[2!k�E��R���J�V��.��>y�(�C�C��x�I�e��_3��L��V�e�(��%�d�tS�V�@uʹ��[h�UIѶ +��X��6��# �D(��Я�v�B� ���/��� �?0���2���x�m��������Y�/����sd���?q����5������i��ݧg����&#?�E^���`!�! rB*d���l�nFf���2�SH/!-|���H }��������z�+NR�i2Bz���'�6����@m� ���W�7���Dd��;����<�GDH�Ȑ�DJĄ��$��#i��G�b��"6F��\�yTd��"\�\�T.j:Z�S:*������ �+\���\REG'�r�IsL��:���Fs���q�<z:����p��{�����-{�\���-��2��=��3�����L�Váh�G�5֢]2�P�ŀY�O~+y8�u��< +�e*�{a�� +#�Z�~/c�`��˹h���fɱ�L�52�}�'2|#Ü���LyV-J�! ��w�db����R�,)r��'�?W�X�Xb''��-&�%PKG�[̲������ZZF��%Y6�5��'��R�vv̒+4Ļ�x�B���M�J̐��&�l.@���藢���c��l+eS�0��w�/q�ƪx��h�U4�j��:��q�j����>灼����i06��@��0�{��]1���K%���5�e�dX+��aXo/m` ��ƣ�P�;61��2��������@��:X�v��p ��{���KO"ޣ�br�ϯ.��˥�*��4���q�~�d��%dԳճ|�$�$;�G��؍�=��g~Iރs{�Ec�����pnk*>'͓���|�]%5��!���qw4��V ��B�B%}l�N:��P�Bp�$aI����vg9��s��~�D�D�$�<Ɂ'���=�����Q����%_BfjD�d{�=����YpN�'�)|FLN��3��,19�%]`a���B.�(}IN�P�Wʤ�8x��d�8�D�u�:�1>�J�;�돟�Ч�[o����p���p ���p��������&����t;�1(�����{@}>��n���p/���p_���b�?��'v�5Q�5M�+[�4[�R�j��c��r}Ǯ{Gﱷ��EsS{�����^� ��=��9�כ�� `.�A�F����hC+�q�����r��C�H_i!e�W�k����2[�E�B� �;���ɳ�t���Uv�Z���+�~�~v�uG�M���D�]쟀F3��A#�b�Î�Z̙�m e���|��??�[�#(F��XI����5��h�H��KS?����(4�H��И��9h��b4q�R<_�Z��ق���5b�.��@dP��+^�?��jF��ؤ���sb�guC� ��|��h4���)ڏ$/{��;vk.�r�r�k���m���O�qR-Yۤk#�ވ���?�;@��_e��.hza}�D�����Bc�>��ر��lÎ�ر;ꔏ�<�-�zU�����v5��ZV��J*���T����)W���x�����+�>hv@��I��y_b���h4���ICg�V)�B�^��f�U�l���l��F-n~T���Tj{O����Ď���\�봷�h�����h{��N���C�-���U'���5v�k�}?U�V���0īܐ�e�-5L�bC��f��a�J�h��*�w��\��*v:�"��*p~�9.ϔ�bU��n�ܜoG����E��چ�{�[���E���h�s�V�Dh��������_��wTb���-pM�<�I*v��"��j�[���Vj��F�toP��G�6]T��}e�~֟���h�<w{am~-��*�e��AKM&Y<���u��6k�g/{�U������<�X����^�땪l�e��SF�Jo[��mk4ջ^S|)�������v?�U��8B=�@ev �) `���|o��|�j�o��|�5�]7�{M���R��@e� U�_���%j�_���OS��&�����*%`����q�*9��݆�J +���4c��i3T���Bl)Ɩ���'�z(+�_A�J�Ҵ����Gi��498F�G(%8^B�5.$U�!�Jz�@��������E��vZ�þU\؏`}ɩH��L��E1�c�ll�����wpӔPo��kRXg��u�����Wc�(��%v�1��i�FwJW\�<��\���*�������E܄���c�I` ,���b��%�ұeJ��&w6jB��ƅ��؈0%FDjLD%D���o+."F��Wl�����S5,j��F-�;� + 6oR��Q1ѧ� ��kP���Vb�� +UPs �Qlz4�>��D�(9�I�Q&�1�S�9Dq�pŚ�jdt/ ��a�44z��t���c�-M���h`�yн\�g�̣�:�0��+*"��EP�E�a�eXT7�( +.ǚb���&Z���q_c���5֥�1�x��X�Ҩ�Z�M��D�? ����\�{����������0��t�^���>|߂���3��s��1�TG9y�%��41�W�1~���P�ŌV�1V��$ٍ6es�[���2��͔-�WJ3-W��A��MJ��`�?f���r��1� 6��k`T��7�8���b�Eqg���O9�����+����h���`U�9K��q�&�(%a�,���p���F�I�JH�c0'�+� � �?�:cx#�%S�3�=�|K!1�'tTN��쉽���/[�P�%��5)J)Iq�$[�����d�-��`�.s�\ŧ<+SJ��M���2�Z�����bS�����I���� ��Q�g[�)#�Si)��Z�d�Q�5D���JH5ʜ���4�Li��K+R�m���9��-Qtz�ƦoԘ��Т��K�j��0������;1U�e�� +�����v~�ۘ7m]���Č~2gV|F��2��-c�Y1YVEg�56�@c�e��h�K�����oPx�v�e� +��G�� +�r+^e��ti)̇����߶L<G3���L�^��魘E�iln��r�4:/N�yE�e*ܑ�0G�F9��HG�B+���F�o�C�N#w4"�'����V3u��J��E�Hg$Oɕ�إ��v;�SQ�}9��" +V0\� +�5�0F�4NHa�F�jx�D�kX� -�QP� +,ڬ!E�,�V`� +,`r���ȡ0&��2�F75���C��1A +���� +)��%� +. Ұ�P -�RPi�KS4�Ԯ��B .��AeUz�l���~��e�j@�~��~��75�� ,v����)̃r4�!���Rr��:��W����^A�<5d����Ӡ��z�<X��a��d�3A~N��;��,U_g��8����^�������|���[~]=��^�ܭԡ�K8���"�E; ms��=��&�(���UtV�9^�7���T��we�zU������o�E>UvyWMP�*����սj4ʳr��US�9��9����~��nբ��f@ �p<d���v�t)�2K +�.�ϕ�.�|�������\�`����� +Q7W������e��+_�]���5W\������0���P}A����n�w�)�a��9S����s�l)� +}t��F���?�\�I]j<ձ�G�k��]��5|�k����r���RKS?�`�L���5���`?�u�]� ����<τ2G�3�ND;z�4j�4t1���].�<��Jɣ����3��{AO�<�j�5Dk��6�o���@�5�����<l���}�r��NU�Y���M�-\n\�3��4l�+�>���WK�X�N/`�^���� ���@���8���)����a3/�f���fl^˹-��~��**�uv��4�{����W��n�u�ٕ-thF�t2�K���`���P��y;��N��������n��{7��M.v7��7�\�ĵ7TN��(W�Rj�����g�p�G�˽_���&h'��?�m�M��^��!��A9�18�P~�!�0q�����G����BA���l��p.��|�������7�ݾ\��G�����x����`K:�9:A��$'����1 +�Gf�:GM��h�I�� ���ކ�* ���]��{��.���C�vy��H�8�ZZg�8�U���|J}��'�|�/������F�����k�~��E�o#v{n�;tk��`�3����?MNñ��=��]��|�m-�-��M<� ��W8�/��t?���úB��9sI�����m|��y=�C��魇 +Џ�F��{��o�k��:��K�����k��O�B��<���u:�����=K��[Dp\���џD���l�AOЕ��p�@���F�=+�1�ɤ�I *�!q|@#���q�8��մNj�����B)�����o���d��JO�X��WGt��a���(��V2:�h䳣�:FG��q�K]k!�������*�Wm��Wx�vjgv���B��������m1<�{�/�H.ΐ����}�"�1�++�Y�O䱜L��Y�v�N��A�Túu�LM��&�آM��G2ӤO����<����J���p�W0`6�`�`6`���� +$��&!Is�M�4I�&k�f]zd=Uu������ӎv�6�դ�Q�ҺN�:mk�U�vd�������z�����{>�I}�R��/���xW�%^ս���ŋ�7��Zʥc�:�������\��G����&�dQ��qX���<�pz����}��^��ݐ���s:�����D��v)^�V�Y =�HӨ5�K�H:ҩ� ���.��f�ƨ4&�$��^���KcE������i�;�:��p\'zL�}L��5i���Tx{Y<��+�='�$�eK�D�Y���5ί��� g�85��0w����k8�vǢ�}'G����uW9��I�X��c~ξ[�c_��,o��������S�����)z�(�]Qx��!�˷�'&�s�y�[Ʃ ՜����-������� p8n�CqS�7ρ�E���l8��yn7<�R�����_ga���4~�c�+�Th)����_���43 1��7r|S+�"-4:8��bB� ~�&��;a���YL�fW�N��#�(ۓ�2�t���יI��t�L��Ƕ�O�J�|�kz���JA.�=��yJ-�爼J6p 9��\v��XJ�b1���R�YH��#-���si#̦M2�>�t�S� g�b"�㙏�5�;�e�����2��|�+ +�O����� =.V�%?{�ewV,�Y ,de�#���l3������3��a*��pN7�9��nek�4�y���g(���(�F�s���P�;���."7)��R��.��JŎ�].�%�Y���ˏg� �m��K�(�d���X��ѢV����2X4Lq���턶�GIP��ݦ��2=K��e�6�ҿ���7�QH����_��Ny�����5�K�/Ib�$�SC�rM6�MN�J�����)�&X:@w�8]e���o����s�[��<����7�C�_�k��ҝ�6��G����Yy�ҾLh_Fͱ�����3��k6�T�mq�ei�oi��⧣"D{�(���U�h�:D��,�xlO�}�fۯ�_��\DVyF�W�f��/����k\�2,����'X�L�5�����v� ��I��M���[��a��S4�,�d�����+48�/Q�xK�E��Dd�'�{�VwQi�>� f�<��a��Q�S��@M�5���x���K��+q�4;\49�p�v�X;HC�$�u;p:�S�<Em���q���^���?���pF����L�W�uJ������뗏����_�ڜF<�T���49����P_C}}Ά���6��hǮ�ƵL��$�M��5}k�wůğĿ��"�\��F�ŢKy��z�K�����q��䊧ѕL}SΦBj��p4[�7�Q���݁��=F�g�J�*Z�ci�O<����[~���/,��*J�R��:�M%Ҩ�>ѩ�6�n�5z�q��mI�ޚNuk>�VֶJ��T����z�x���#��f(�-Q�[�仗��G��~C���(���7���_�eJ�������"(��Y�R���Z���� X;�Tv�Pљ�����N3e�Ք��1�[(���80EQ`��#.����x������O~�S +��U.��.HgI�*�1�'����k�*�j;����ʃ��(��`KO>�=&�z�(쭥������z�� M��Iv� Y���=DF�ۤ�~&~OF�'d�D�wK렴Ĕ�DP�K�I�N���A����?�����L!w(���"���d U�9�@�p��A҆GI�#yd�GΈ�$ ?K���Ż$ }����*wJkY�����E�H�M%Zc�U�V����Q�[cȘ0�6�H�D:)�y$O��y����Z'�$��bcx�M��ćOb_O7��x��G�?#~<���i1"�ѡ5�U��I�J�Q٘�U��!}z I��$�m�8��Ms���`�/6���8�e�|/������������H��u��^d��D�~@���c�L��<�0�"�"2� +*���5�"(Ȧ((�� (8* +�+��˩₩1n�&�D�Qc��%�i�[5�Ǧ�MjԨI�4��4�>�99=�Ǚ�g������}����T�:+�+�Hϖs��<r0K����5}�ŀy�o�ԣ�M��Y��j�%H.��r�D���C��f�\���2`�]x�kت頫��g��ȇ,IF;��9�X2���n@5��k���E��r��A1�x-��Xޟf���ʋ��g�ȭԊ!+Z�p��^�����9�� +�"��҄9�a 9��Hx<��:�W0���\h���t6�|6҈��)m���4y��x��8�l����0f�a[o����=�oU�fd�I�;��}Ț�M�� �Q���'��f��R�gx��m��v�h��?v���p���M�᳇B�C,�1�̬������n��s�ZsI�t�J��k��9r9�k�_/7K4�v��' >�'�'-<hi��H��i��?:^�m䤍k#m��#��HG�&���4�xO!މK��yp��z�5�$�/����#���0\�!K:NL^'&'�I;M��4�o��i�3�tΰ�ϒ賋�X�%g۹O]���J6e%9X'�n�L�������%��x ^B�@��H+��P༫t��\"7�eP�?.Ӕ}ċ� +�y�d_�A�zN�ye��r����r�^_�j`}���s���à_�2|W�܀�N�'��r�1�|� G�������|`����y���;��x��`�<��g̘�)Wߨ�ٴD_3�=a�{Ĝ�%s�&��Lt�����t�S�]��?��?��?��'ܽ�ou��wp.�]N ǧ|������i�q�衦2)��s�˻̗V�>ŏ;�q?>Ə��q�)�S�&�ժt�����"�_�u�~�u���y����z��YWz��+��TXG�O�~>�/�~������طb-v7R�(�=z�B>C,N��)V|���^�������)<R"f v��'��Bk(:�hL�~��Q6�OIa�To��S��~-���]����vف�>�P+[�]G���9DF�x��!���Ng�u�%y��ab Qh�@#����`��5��2yi�>ZU��Ə��q@���V��f*�%��cD���u��X;��;������M,�$ǩ�W���5Ġ1 +�㱟��LV���<�H����f�;�I+�����o�[����m${��� +_�v��'�l�S�#���8�ia����t�����N�r +�3��l4�?6ᇍ�l�>UG$��o�V��*V���[��r�����c�գ��_�K�s��4��g[{/�^���g��� A' +��h�Ec)hd����c��)E� +�����ZV���,""[�.�v���._i��s�wr�#��kG�>>wp���e���l��w�U�S�Vw �J�hY�G��%Vu.�ZꚢZ�L-q��"�|Y܊T�V�j���Z������֤y�-*s?�R�wT��c�x<Q��9�;�đz�㽅WMظn�� +Vz�iew/�w��R��Z�1HC�F����$��LU��Ux�j�g��<KT�5_�^K5ǫAE^�T�c� +�_�,�w5����������}y��J�'m��|��^-�,�]dt�Bo�x��ۤy�����8Z%�x'j�O��|�T蓧�"���P��b��J�{nUN���������S��Me�� +~{''y�0� +@Cm ����S�/��]T��K%~�4ׯ����*�����5��X��NP����g(�?G���P���M�cUf�M��%�ئ���J ���A���smױ���Ā6lE�泊�r�)Ɨ9�2;�C���(?��f�����e�TV�8M JԔ�Te��Rz�<�������+e@��lФ��J2��J4]Qbȗ��\�Ն�.ڍ�iTC�s�_�/��2#��r�{hZ����Sfp�2LQJ7 S�i�&��+�4I�!�������8�RB�j��Q�杊;�4.�� z��n�]���F��f��*`n��ˣ5�!.Yfe�z*=�W��>J1��l�D�%�G(1,V a����Aي/и�r�F,�؈��l���CuR#�~���=�;iAom� +��1�� +��ǽl�����09�C�"�J�� �����(�EӸ�ъ���Q)5U��kTt�FF[4b��0d��Ǽ�a1��|���`��!v��S\7�y�a&�po +K#.����M ����̣�>�0�dQv�MvD�}�}G�EepcĠ`Ԉ\��Ƹ���5q��i�Fk��U�ظ/MjzbNs��5M�S��Tk7��IO��sf`f�{�{�����K9�Y�eI�PfR��II�HJWzr�Ғ���R%SJ���MJM]��j%7)��MG�`���������A���,W�}��́z��@��y>�9���J�T�q������d2��ј�T�I)&��� +`��ҧ)1ݮ��E��X��gޭX��`>�x�7�e8نV7�m\��3��0*��������ǔ��.S��R3�(�<NI�(%�'*!3U����IeP�X�M�,T��S��+:k���+2�,���=E[�l"�*3�k�6��5��C!X!���Y�7%ey)�jP�5Pq�p�Z'hBv�b��5>;[�9%�ʩVd�LE�(<w��r�Wh��pH!y��Bs��C��8����hEc�hTB ��*��'cW��|_�/�WTA�"�Q��B�� +- +-,THQ��5(��YAE +,zN�;�u����E��_�� +�Q`�C�E�����Ī�B9���<��\��*1��U2R�� ++3(�,H��"\���d��P�'�� +����1M]�&C�3�xQ�*��I�V|�Q�w�W�@�2���z��h��KUPy0 ��"�_���:FbUB*]4�S�վ[=Vc�C4�:Z��x�1ȣj��)�Z��4ʻv��j��Y�~ ���<����k�C��,d���� +(��bjP*%��;&KQS��)�N2L!�z/��� @0yq�yڒ!S��۪4�6Cn���:�b땳m���������\�%ܕ��jG�q�ـ^5�Bk��vj%�{]+�am����ly�=4����r���)g�D ���d�j�� v~d���VjĨ6b��3|��9w�Z�V#5��YoX��h'���QX���э�7I�����]N�����P��������J�[)^�lX=��m�����|�!�3�]�����rȣ���zf`�>}t ����j�K�4l)w)���W��e�7�v2�l�{Emg��6�k|�m~sn����0�(��z���8��E BװH�~Rr_&�,��K8�p.�+��*.]���tq�������í�A�aa=�� �G����w1�]_�5ͩPF�s([�\�!k�\�>�Z��i�Jɩm�*si-�䱎<�S� Q�� zt!��a�GO��>j��b��`;��6���{[ �V�f�6S�D�E���V��Fr{��� ��6xh���$��2����.�c}���c�����c����}���ǹ�}�7TG�KH1��Ia�1�y�5�빑�o�z v�^x���2 +����� 3�#jr�K���y�3�6�Y+0��;���g6�~��K8��N[����u�?��E�\vih2@o��!ނ��18��I��59͌�#��</�W/R�Kե �e_&��*F;�Dj��ǒ�7���������pj���Y`��\�� �U� +���\eN>aF�ї�2����gl��M���V�żu��ؠ�u� <���=�w��'-�]U���'��m���u���}�����r�uvx�a���}�k���}�Ӹ�_�C<�ω���<��74}t�WE�/JD3�|t*Ш�-6�������K��A�N�w�}��e�E|�y\�Y"��qyW(����2�9�?9<�{�=�;��B���Dz�QD�J�^G�t�<ΐ�)��)y���|�<N�B�i�~���N��C�ُ�<�8�$���������S�%^� +^��8��=�t2��a$J�*"��y�I_k�[��X�����k� z� �*C��o�B�ݺ�](�Du���x8�}h��ș�y�k��!~2�f��]ʶ�$v�mĞ�=j"��.f�k�Vj;ً�d*[�j37ѥ^}���':�<������ZG��H�|�?�ÉG|#�-t9�إĮ�V棏9ݬYĞK��]B'����bB��Y���z�Z7���D�f�V��-7м8��=���vj��=�E��E�⛈ja��_B�J��R�z��"~1[��R:ҩ���r�|�.t}�lc���+�78���v�ce�+ڼ���Q蹡�MEǠ�F��J���B!_�I4&�QK�ј��<v�T�C��� "�R����i�OǛ�����f�8͑v��u��>X��5�<�\�i�0w�|��G'�X4��HG#�|4J���=�ͫ�O����[;i�$Nb'�'�sqbױsq��iR���M���6��Z�:��um�U�]K+T(L\�Mh� B�6��&�BĆm0ډ3?�?~:�w�}~�{���������c�c/���V�0��]�b� -�|Q��_�75���������O �op�}��������$��1�s�4WG +:�kѡ\����i5ϫ��~��j%?�L���F�X0���i�*��\ъv�i���f�/hGɋ�*��ɒ�5Q�&����>d� +���e�E�����i?�-Ye,���-5j�Ԫ��J-����ЬyC��=�i�j�!�Ɣ��iM�5a<��Nj�Į1]ר鞒�ה0����F,Yڬ^F���z����Ч��}�c~��,lZ�s��Lf���1;5mnД�E����am��i�2�1˘F-�Jn\���U c>�nzRq�U Z�j��u��~���?��>�.�/8�l���>X�z{�f,3�qږ�)�Q)�&����i��U�֦�-��������,�x���w��n�m~Lъ��k����s��xUa�� +Wާ���y��E��i�t�-��<�3�M2�s3���6{��f ��5dw*n�נݧG��=�9b�V��r\��Ym��(T����O�����5w�U�:k�oÇ�g�Z�I�����"�r=I�8ce^Fː�H���_mU��P�Y�^g��8[��R�&���Au*X;���Eu�T�����o��͉[�=�������?�kh=��R���io�ޡ�yd,}�<E]E\�]���V�U�.W�:���p��^ߧ@}B��I�5�R�g�ZO��xQ͍���������o��;|BVW�9��4�c@ +F�j�g�{�xr��)Q�cR�Ǧv�CO��<�jmlS�7�oT��!57���<'o�}'��]P���[�"w�w��\�������i4`?[��0���e,aBGs��F��6��W!�ϩ&_��->�TckD�ָ��Tߖ�ۿG.Lj���j7T�2|[��/i�W��?�ճ�@s��u�~NB��/]�m�|��5��j���RC�%w{�j��c@���霑�sE՝GT���*�^���eٻހ_p�7����ά�濏��Y�jN�~�#?�����y�J��� +ZU����V�n����T�TeOL���CS�-is��CO�,| �$[�[��&[�=��>Vy��54�И�V�A:��R��#Շ�} rn1�*bQe�\�H��nU�����Ce�٢C�FS�]�C�;'K�̱{�M�b?�9�WY����7�3h��zϣ3�N A�ۄ%n�RU_�*�KT>`RـU�A�6 �j�`#�e��)>s2����/�]��_SI�Ǵ��0���:��tf�|�0�^B�-��'F��)ՃR��u�P��A�E�D�6$�dL�eH��K�ɘJ� 'w�(�[���*H^T^�r��*7�C�%~(�cFg���J� D H�~��h����O�b�l3��ɘ*QIʤ��&��*Lժ ը�T@�a��تuL.����EL�%�*P�l��������3��%C��e{ˇv���LJ�m���<I 6����b���3K�O���$�����f���4/�� �xi��4ET��i�8�+�{�@+����A�$�Vb�s�8��c�F���,ڵ^��ԖK�%�2�~���P�p�g��3,l�?��� +Em�$P�f>ϳ��?�ݿ�}�"� ��JH��%�:bv̠���RѰ$�H����@����p����hĈ��`ּ�>�5&ymxy��X{�g(b����5��s/�w���)��1WΣ���0JW�AJ�c6��ԔG1��� �#�u�ơK�?C"<˚�eße.��o-�q�3<�{>M�z�mx_Sh�B?��ʹ���|���5�[By��=g��®��r�'����oϳ.�0�g��K��2{�9����� �2{�2r����{������� �8�|oa�<�!�j�� ]�q�����8zlk=�?4��W�Ә�녘r� ����D��������6B���4-�q���EUs�wJ2�1�sg������t�@5y�q�_!1&@����p7�" � �V�}Z�V[;�S�n�U�u��^�Z����Yٺ^�9�����g�tk��s�Z�5�a��w��/���������>�ׄn�Zr�1��xv������fK�0�4&{C����Y����i>���>椏��� �~��q���>�J��%?��A۹B�>��z�Ƹ%�9����j��]����c�F���2ur��9�A��Ca?/�~곟B;��i��8�'U��9@��m��c����A�g��|�FW�(ćW�$�^�~�E�a{3ظ�!'���}�q��=/�X�Rl�$�I�p�.G�&��&�� �ҝ���j�K�t�>�o�K�����O�l�H��1�������ӝ��S{���7$��ۘ~S����� �����M�̫2ґZ�v�>�����Ϫ@�V�O�S;�tF=ğI����� |�����ݞ�pOѩ���y��e� \���0]��<w����2\R��@w^6��2�R[��(�ד������b=z /��|��Q|a��xi�R��r��_��G�KV���L����v,t�rSk�Ɛ�2C�K�����@�b�����~M!�t�����(ޣ�l"?�Z��I;��η���q2���n���?Wѽg��@Yk�@nj�����c�i}���ɼl�>�i"�'k����L>�R��X���f�)������'Z��:���%t,�e�v+�-�H�|';��!����.'v5���L�qTa'�&3�i�B/��mt9.�h�XI�dn9��L��?��E����v(��,����r��5�^q�O�Cr1��/$v9�u���&�q'�����-��[|c!.��yds.3:� +��O�n1���.��̓�ي�� +��U2�E|���$���E�/�"|,��||���\�q7��˺������L�OgT��T2�Ce��O�����8[�S6��[���.��R^��/i8:4��D#�<4��(G�J3�1�y�J}�P��\M曓����T��p�$�:���������`�v�� [�6�� �jV����^?��!�=8-:q���HC��h��(f���S��wԫ�Mԡ�AS4>�.�Y�����2�a� ݩ�Ѓj +=��!��v�A@{���ql5[�=0f��O�5�3\�6��;ܠIC�tg�U�aɚ�R{X���i��� �Tk�h��7�9|���u�q�5D,P}�J�En�����<�j�I�\���hn8z�`��fB7�]<��K^:�C�n0j�!F��x�58�l�P�!G���1���X�:c�j��m�����Ue�����Tiڨ +����I��߇�4�k��#�[c#;zy����\�s,k��4G����F�I �8ՙ��5�j�9K�f����U��Q�Uլ���E��3G%1�Tl���,�T{�^�/�=��� hZ����W�L����Z�1yހ�:��Ɔ��bT�%Z#-6UZ�Uaq�̒��X����*��Rq�ƍS����Yg+��J��U�m�r��);�%8��:�0Z+М�Qt*��Nh�1m���y>G�BTa�T��,�5VŶDٜ*�e���/�Hy��&�)7�U9�]�N�%�}��Ik����2��*#��\�g�s��ó�֣���T�=������W�|$^h)U��b{� +�F���ʳ��'+מ���le'��I.�;�FY)��L�T�c�����|P���r:��#�x>�3��z��h�L�9��eHc�_#yV���R��!�:�q��q�)ˑ�L�S�,��yJO-QZZ�R��L�#}�R\��z@I�Ge��Ǖ��6|��W<h5�ћ��<�X�uP�u9~����/^�N����I.W��\6��R��pɑ����"%gV*)�A���Jt�(�=O��U�y�/��G�� ���}U6w@+ј�f��y�PP�����ϼ��L���C����D)�3BI���iJ��(!ۧ��r�rje�mӈ�)�˝�X�}�xQ�w7U�� ��������ؽhN�%i����UPE<��r�{ ����H%��o�-?A�|�F�g*Η�X�__�b +�*��KQ�2.���T�����^pQ��C@KП��Dڑ�P�P>ȅL���|�}�^��d+ +W\�Q��hŔX]����tȑ�_$�4��(c�,J�*�t=�T�����O��\�K�%7���ME��F4��� �g��R]�AQ�g��]w�EЪ(* +�-,������ +B��m�ă�D3i�F���Ui;1&ͤ��Nk�N�c�̴�L56i��֣�c��,�d�?�Y����罾��}��F�L+�����`��WJ�Q��dv|d��ȕ�Q�Jv���\*��C �~�;�+ιO��c�q��X�����^8V±����`>(� ����*i���d�_+�;IF�YI��J�d���T�'[��y*�u)ڋ����'/ыp�| <�<�_h���&����q;(�@1τ;�~$J�~d����ʼnJ��**�@0���� ��:3��"$�� �*�� ��!�y���U��Rx�P J���l�L_��qÿ~L��l�u1JXbPt|�R.�Fz#ì�C�H� ����N��j�ų#�a��K�gpK-��/p� +PH�9ĜE̓}�O?���/��Q�_�µ�EgKO�F+�k+:w%�K�����F.�(\/�Q��u`;ϰ-�D����M��T\~�vPB�s�y&1O �_?��f4`��9��V�AZM.��?�P��px�s�{�E�z���3����r [d������!m��\@̳p}j��Ϋ)��$C��7�X�l�a�X���?X�6N`���LM6s�6�����U|R�M�y����Sp�w�+�TQ�"͡|���ի^3uK a·A?��XWY<���e0��":�����1�%7���� p�;q|'��q�������L~x�Թ�|���Ӊ9c5�=���m�p> +�����q���/�O�=��r�,�w��}�q�K��C��M~���'��q~g���<�>�,��O�ڙ��zb/��k��u?#|a�g��D:a�/�Caq0&�X���k����u�7F��4�(�8�!��8��G��䠿���&M���������s�A��";`4"�hu��&x����`x?NsfO��8�)�������w �/�:�r���΄;��M�6���H��hD�9p���ɈH#��88r�p�u��\���,b���%�% +~��O +y��.����!��M��w�A��Q���j�@�|�ν�:���+�OQ8��|�����H���❧I~E?"�sp����h��B�p;�C�-�>�U�n�3o��>�$}����|�Q�X5���=�:�7j��~�{�����=Hj���=�k? +�Ux���3z]W�]R�t�+p�k>�\P\f�Fi�3��[G�P'�^��uz�|���:��z�:~���C�E��0-��{/��J'i�:���A�� ���ƸE���+Z�d$�����,����%ض㷋�\D�����K��è���!�A���6����]T�y�xs�cu��9�/���pޏ#��N�����[f|�a +Gb��]�m;V]��a;��l/�n�v��S����<��7v����#��dr�E�A�+|2�����;�1�7bۊ�t�f���.�v#ʎ��^������DZ��=B]��F� �yB�z����}d�����%��,��ã%2v������b�\lQ*�'a{:�sυ�.#�U���{���~=�7Q�������By����5d��������f'�ީ��~�.�=��$8#��`; ۓ�=�b��eد�~���?:�C�ZE���Ko����� +�rz��S�L��9����q,���Ǭ�`#�v�����pF�H�o�~:��b&'2�B".�� +�8�p��@w���tұk�����uԣ�j�� �.�����3�H��x��U3�2�_ Vq ��G�-*3V�ÑG&��ȃc�e�T���<�x����k1Q�舅��K�y�t7��͉w3 ����ùsW;#��k�#��w3�p�5&Ū1>Y 1�G�T5I��i +De�=G����(�\��jyc�����m�+�U5q�r� �?�����'�����L8����4��^���z�����J���KXk�'�/S��IF-6X�3��k�,�!K.�l-H�WMb�����H�Qu�O��zU&����.U�UfR�q�JL/��tBE��p|�'��6��\�p�-�������^~w[��6�2�UcJ�Ӕ�j�T�M3Te��|S�*��*7W���U��V�㖫h�jͳ����U����k}Es�o*��!���=��pm�`�cm�zk����.|q⛃��SbUeMR�Ţ +�M�I*�NS�5[�ֹ*���Z����S�;�Iy�W)7u�rR��٩O+���f���L�9p��{HC����� +���U|��w�*�_��Ԗ��T��RST�:A��575Ksl�ʳ*�V�D��Eʞ�T���5#}��2�.�5-cD��55�,��! ¿���4`��$�|��e��}��o�Jx b I���5AI*����;����V�YK�f�n��V�b��UQ���y�U���ۺ�uն�]ﶹ��]����n��9� d���'y����^������z|���*|�̍W�%Ye�ty-Y*���R O�G��r��jU��(��Ek� +&-V��_v��l�4�~PV���g�~�<�mYm���j8!:�h0 L�ܫ�J�)��JA�� ��(�ͤB[�6p���U��J����kRA�����s�R��~Y�;��|Vf�)e;�ו��%��?�� +�zX��]���p ��U�[(�p9&��HQ�#]vG�lN��N(V^�O��S�k�r\m2�{��^�,�&ezv��yF����=�V���2��h���oh*���ց��SJ���|�w���I��cTn�I�"�r��e.r+��\Yŵ�, �TҪ������)ݻQi�o��'��}�ܔ�����R��Sp� ���@)>�߬�8Ki�̥��*�Pf�Y��I�(/Tz�T) �j�hQjE'�U�o@ɾA%����;�Ċs2T\����*>W?�a;���R�ԃ�|ǤJ�pϊ|�THپx�&')�ʨ��Li�ԪP��*����J�nRbuD��ŚX�Fw�lU|�^�U�� կ�+|�D�U���ݬ�m�o ���W +<��w��L�F��j�V�����J��e�۔�wi��L������@�أ+�,�X�#�,�~o?�c�-�b���f���6WBQ9(.��ÝW -��RZ N)S24���`�⢇X��$H�)Z�Bh�B6���)B���&ȖD$4�>������TP*1Q +<|.��HF3ńٴF4P(N�i�O�;�J�N3�X3��.kᡖ&��lAĵ�)��0�(��4�����1�������{���$f[��3����K���7�E���,^�m��f��v��)��#�#��ψ�v�l���/�d��x��:��4�z0^o���Q&R1��&�J ȵ �����N��y�=/���亭�M�ԃ�����>��������!�g����}�6blS��|�s>i�m��d�7yp.�]�6��E,`��c 5Y������Q�>����9�f�q/�r9br9�c/[��y�fg�0��%�� �<R�I�Fx��K����-Ƃ��+��j��'k�cmt�e����g���3���~i� �'�җ_c6��QaR���k������̫WFx K���(��&ρu`= ,�k�� ,�����A��R�0/�A�A�n��>�.m��m������,����o�:�H��C���Y�k�7��f-�������Pl,�`�'�&'ߡO�Q�!zt�~��"�'(�~����sbϫ��5��*�]�Msv��,!�{_�3��hl�<&Bh-�TlDŽ�0 ň2���=r?F����(�8 +����a:t�Pu�V���r�4�%��-���|��4.�F��&�1B�Jg蓳�q��\�����E?O��Ar�3��!pF�p����v�R�#<�+�;�<�a�u:��Q��x\���(�.�A]�6��������}f���J��#�+�{��^��8���i����=s�yS~}������=*�:�+��G�/�P]Wiԟ�%.��~J�~B�.�i\:���op����s0�^/�c��_������>Q\f� +�4�G��5t̻j��L�?~�ʹ��y-�J�<Cs?��D��P@��LÜ��:� �tk#Dw��Q}�;1�?������R�1�<eد%�Sue�2~�ƏS(��X'P��84F��~����6�f�s0>C��xЙOE������������h�4�7�jvP�}��hũ�߄�3�,j�i��0��)�(�'� +���L5���{�� #u�̼M��`��pEW����h���T�՟W<~�`;۹�v0�Ŵi%��m�x}�%��rǘ���as9��j�j=��7�{L`e��R�5�:�%.�Z;�����}��Q`�O#6���Z�m/���u؞��{��VlE�ݥ������Te�� ��е/��i��Vқ���b�X��������1��\�G.��t욱k.l{�]��Z��쇰�V+�#�]L�b�� +Y��<H����0�g����?�>:��1~6����ktv �5bׄE�g����?���R�X� a�2)s��n���M?ӳ��ٮ:e��05&9���(�F�����d�}�{���\,�XH.�&=�F�ڍ��c~t���!셱ۦv��,�n�/f��:��z43Ua��K����H}$A��+oX&�fp���:9/:��jQ6��LC8J�dR��r���u�a���ĉc;Ǘ�N�8N��vlDZs�:M�$m״ ��K֭���b��BJ���A�V�S����V�1D��m0��A h*h�6&.ZQ��PG�'�e=:������������3H�ì�1V�*f��젗����c%����X�z>���A4�lsG�X 㰔gKH �����;�;Ѩ$��:u�4���2�t���o>�.&� zg=;�6��%ʯ�c�³�x/�U�|��8fw����cn������i��L�"��.��|�5ը�\�nsL]�:�Yuv��0����-W�x�Z��(m٣f�A�,ǔ��V�r �����v���M�{�R�a���G^�{���jSW�����K��VZ�liD�ҸZJ�J[;�l�WʺPɲ1%��(n۬�m����j�S���"�� +ۧ���:��\G8N +6 +C��C7�]'��c�aV��DY�]-v���J��~%�uJأj��w�)��UԱ@ �1E��(llV��G!�~��*h<��G +W�^�k���[�K�Bz��N<YK3����JV%��K1çF#�#��Ѥ�3�zg��C +��(�Z���p�V��>Uy���9-�粼���u��7��;�\�MZL�3���v@�gi�%���r1O��5�m +� ջ+rW��]��'�O��W�T]�HU�+��ީJ�.U��q}�����\�Kry���r{oj'�荓��@.�pm�4�$x#�F�E���[��ת�ס�ץj�WU� D�J�[զ��~UT��㟐ۿA����|EF�pJ偋r����P��Otk�#�Z�!��kR��]��'D���~��vy�*��婩��&.W0#g�G�څ2j��<4)Gh��/�ò��RY�����cm����݆]�h�44O#��"���Ye�P�P�\u9��r�Wɨ�Uy}��4t��'[d��"kd�lUidJ%�#�DN�*��\��d ��Կ�EسA�,$!�=���P �<wG�r6����.G�){�R�h�ʢaY� ���T�%�Hű�*�oRa�^��d�?���*���*���vt�#� ����ih�Y#ԣY~�}<�`�1���%�%m�& �$=�$�U��SQ2&s�E�T� +R��^��Ҽ�{��7��;IƔ|f����R��(������"P5Pų +l�3A��4��lQi�M���� +�����h6x�VLk+yt+^�o�Jf�%��b2���cfF��{1u簆�� �Gc�r_ͳʤ�¶�c���m��������f��F���c���oՍ��Ƹv�D��=d�/û,��Ӯa��6h�&�5@�{?M������ �&��������|nc����� }1�G�x��a���)r��e��m�3���h)m�x7d!���s_C�}Y��5:%U��IE4O�8؇��9\�0}1B_����2yG�Q>�ˀ91B�4B�6Lֺ�"��og4���t@mM@��m���ݍ>���T���ib�8d��6�cL���l�l&������q�c|-0'�3/��<~w�4\�|tz�����F��aɪ{Y�נ6t-#���Hb���3ı�8V�j�XC�c�1�d�O��T�� +�3�o�c�e}~��z�����.hE7�5L��\�=5�-C�h,�I5$s��o%{sI���F�Mı�8�17v0&;X����T������V����f�������H3׆A��!s���+��+�z))"�ö[�/:@�n�dw�t/��ı��v?��~ޗ��}�S��) +�k�yR�{���꣯��s�"!�����R�t{^sk^�n�h +Ƃz��8K!L�t?I�!���q�8f�e�ep��#Tx�p�l���C����N.a0�U��X���R��|��������e��>oH���]�)a�0K$������S��gX'�0ٟ����q��%=y�2����ղ�1@ۏ�k#��VR�+�{ ��@^��y3�xޔ��T'��Y{.o�?$���%�K��E&���<{ŋ��s�g�W� ��ml�}y��`�}ò{ސ͚���:Lm�`VKs��%O�,�~����c��c���l:W�� �{ś4썓d��ŧp����O�/y��C�/s��/d�"oG�G��,���~��~ͤy�I�K��L�W��W��^/��}�_%Կ�,jg���'��ހ��Uf���yw?�6sZ)� +��:���2q�����Ӻ�{�Esx���q���~���&̳�g��cۼ�8��m�~��v|��;��8i���M��鑶뵵��)�F�=��C��ݠ�$@��c��L ��ILHC�CC�����$P��P����}�~���{����<$���%<����t~�n�+k�|>��� �ݜ�7�3 0�(_f�ѯ�=���M�gP^ <��?��QR�$�gH�GH��X����x�< r�/0��{ >O�߰yކ����!���$�=�~7�V��!Rd��c�s�e �e:�#h�$���>��+x�y��K��+D�gt���������*s��B?�Lm*���у�_��u���]S�2�5t��������,���v��#Wȑ��q?>�2�S�{R�#��a����Cd�C����/6��k���*< �3�������ϋJ�\;�-�[Cw��6Н@w�Y4�:0G���t�7��)T 2��d� �V�9�����-hm[���=�c��0g���!��X��=��G�G�����x��l'[�p�<��Sx�<���:Gϟ�#~���)�|��{�6��o '��h��Vt�aE�.��U��F�&�1KT���0{�l9O�.��:�H��������:7�Ŏ������v9V� �]7��&D�n�,����n��_G�q��ɐ9�ߏG�5�,N� 2i�x��1��1v�1v�q|X��c3g9-s]�y���l����.���G;Q���gYl��Q���z t'��]��C��óYI��Ƞ��o�p�ͳU=���sp��Q���ZyֲQ�M:,��������6rc�e�4ԁ�6�ب�7��6f��~f��HՈj�x��2{����?���]��>��3�=�Ѳ�Єq��Q���ϰǦ!�[[��-&v�؉c'��v�ة`�;����f�L$��G�S�\V��Y<�:�ށ���(�Na� ��<e�4���[)���3,�y��[Tu�uU��j�-��-�n[^%{������*8���ة�sI9�1u�V�u]R�u]i�Rη�R�u'����k��c0�}�{�/e�Meån�W%�_EOPwT���r�.ux*ʶԕiU�;��w��}G�����wIq�u����UE}o�{�z?� +6�`o�Rc%�A�=�R�] _�L�:M��~��O9_@Y_X_\i#���W�QV��W����Z1����c��)l^Q�|NA��#��_�_�K��q{sQr�r�P後/E�u�K�!��A�R�G���d�T(n&3;5K�kj �(l*ZT0tDfhEf����gᦌ�k2Bo�z��?u +�7K�3A)<}Pᾄ/������Z��+r*�*�5R8W(�Q0ܥ`k��֭ +D����=$#zZ��c�Ʈ�%�Uy�ߓ;�&ܒ'rW���{;i�`�R�ʵ|��.����Z�����z�2cAbQ�c����2�e�u�&o;K�~y�Nʕ� g�9�_���;���\�ğdO��1��פ5j@*P�<�dy�6��-�ĭ +%�2�.��>��|�ay�ji�ȓ*ʝ�ʕ�3ݔ=�$[愬��e�pf(H��i�����cc{S���P�2(�:x��$��!��(��*�n�?�/�UK�/w6$gGL�������*���)r��F%O���9�s*�r���g���}-ck��l<K�J��Y_R�o�(��f��g�2r.�tz�,�LY�H�.�E_���"�S���DsV�Y(� 9��/�wo��K�}���>���@%�!��4���� +A�hߌ�M-]N9K-�u��ma���*$MG+],lj�j���@���i�CeP���P�o�)�C��Н�$P�n��N�S���!��6J�@e�����4U6�]?M��S'hu>��[��w�4qu��:�@�z��J�����ʱ��{�-�hAz���<�2�Lr�r®Y�~���ΚE�~��A�!�a�h�66���@�A<�0ǀfq�&m�&А��ឦ ]�`ta/��)�q���ĮQ�<Hr�2ā?B�;ꐶq��3�d��h�M���5��I<�4��ɉ����I�� ���w�&�V�B{ƛ��!��]��a����6��)h������8�w�7�6��b��,��x��e�s��n�Y�ݙw�]w4���Ս*a7�5I{�S���u����5�@�Q4�L�)t����e?~,��abr�a��0sq��q8S�$'�����}���j�Nk��)�e�A>�a�E{HY�a��Na�V��6��3]��Q�g6{����9���d7�l�����[� PbF +*��e(P*�S�S +J��/Pʥj-2� ʴ:�ڱj�3���H�m-������ɞ�t���;��o������el?V��~��Y�pYKb�r�5�c̉ջ��c,N����Y{����&Μ��&�38���]�p~�ᣴX���,�k�:g�HL6��}?�ѯ�'��� �v?��m�I[�����-�����~x;g�r�!�q68�w�sΕΒm�QQ]·�˨#r�s[ � 7����c?}��&{�������v���dV����ĻH�����"��8���s��IKi�&x�A;�.G��d�#��#�h�^�e~��WN0?H���H�3�(�qe3~V�p��N��E�j'�[��ٜ;�nG��<�$�����H9��X< �WU��~�H<^�W^ef\�.��eu�qD�I�N��ۿ�����^p�᳹��ϏU�6�K�<`�,�D$��+�5�>����>�ɿJ��Kb�&�>�f-�| +��������������Ol��������.>�I�Q��Aa�M���2z�����2z���Q�{u��k~��8���� p������z]uq-����l�$.��%����~�u��9G�e�m�~<G���HOQ0'H�q�o���qt�x�=�;���x�y���W�V�w��3��v/�!^D-<��8�~8��9��:ΰz�A�4 +�)�w�&�>~|?�D�~�bz�":����'����~BiUh� +^V�Xe��]��SNڟ&�h�q4�8Z�j%v�؝�lj�~��>�^���n��.�N�C)��u���}�v��!�~D�_�v���<���mv�\p�ǝ��;�v�d`�IЈ�"v;�;�eZu&v��;�#��bl/�"V��c(��p<� 4�z"����%�kЙcp�_/;mu�i�G���:ў�؊��@�EN�A�{�;�ӱ;��a�rX��e��Q��Û����� ����r��W��+b� ���f����8�S�a��@䩾"�;�=�}���ll�>B�~ ���*Y�o���a���T�1�v���|*8�=���ط�{L�cz�\��c��Ql�z+�۱ݍ�>l`o6�;������s�:��>G��NU QuCt��~��1l�E��о��kپ�Tc� ��~���o�~���;@V�d��jY�dg:Y���G��-��e:������5c_ ���;�~�σaWuM�C,��lr2�ژ��T2��c������^��y;u£��)TE��G7Y���.���wm�k�Uh9W����J4f�<��i�S&���Tr2�ژJ���G��h���v�M�nY��m'�� ��dvQn��Kt\�iUd��~E&q 6qݏr�-e�/`53��z�nz��W�n��A�A�I8�p4�Q�^'����t���UR �Tx��'�y&@#5��Th�G<�����BV�a֟Y����:�l��<*�jU�TtG�ꊂ� +���]9x +�L�f�]e�\s�u���u�2�U`�Үt��<x���}Fua���V�B���/�|)n5�|j +��j�E��5��&���(�̓���N��}J���|�T ����7+�T���,�Y�˲<�e���{�X�|xgq���ɠ�xW�M|���(�*�+ +*+�*�TH*�*((lW,8EVp���<��%�Lc�"ƣ�¡3�U��Z��E� ��5���xn�}d�#�Q�Σ��_�H@�pH1#,ˈ��L##3ܤ(B�1��T82,�Q7�P�&뾭@ݓ�j#��U�#7��/�7�4�IhE�̻�e@ҬQ��*�ˊd��pE����@��ht)d�4oW�\�Z�n�� �Yߒ�:(�uRn�pE5� -��|��9�H�.� +<7���%a����L��f@ufPa3$Ê(d� +Z b ���X���>y��$�;�B5�ur%X|� ���E�Ί}��ṗs&�o/�E�̻,H�K}ܥx�#+�iժDb�j�����O˓�˝lSM�G�;lq�f�����܆i��� �I|H��bx�S�GdQh- ϻ|I�y"Q�X�+3�SD~�� +&�� y2�4Xr5�� 9�g�Ϣ)���K{��ca�q+�X³��Y�φ�$�/�"\C��edj(�f�s��I>�'ݲ�=�&=��#�U0�?�;���ӼMvū_nF�5#\�O&~���mX�fl�ؒ��! |�|e6���;A+h�9�/)>�O�&�d\2�5 +����r73D�V�:HJW ������xm�ǶA��lc�oC��%K��"�K+>�|��pN�+=`hi�y׀)����ޅ��~�F5}fa��X5 �Z��Z�"� +nUƱ�3h�:����Z+ne��J;�=��HYB6BIH�@���P� !Ѻ/��N�T;ն�K2��x:�ɇ�0p�=!����������?}f��^��L�R�p�φ��`@Vr����@�G�� ��A�w"0<����A!���\�ŜԪ�X<711 �'#�h�G�����w_��C0"��5�m ṫ�`��",B�",B�P�G�b��P�!�BpS/� ���t���3�Ϟ���ߧ"�$������/��0����` %�����:�B�r�Xa`F6;X�Ap��ٕ�Vb�\���r>�i:��_PK��������-��:�G��/�Ґ�9�c+.q|�h"�|�X�~5.�5��uб�Fl� 0�a|x=��u����04��.z�E4)�����x ��C�$����Hl-� y��ױ;'�jn� i�\ W8tl�-бk���؎�nA��pNlEMla�Y�6�{ר`� +��Y�;���y8���0���_�w97�=�Ec�g�@Ҁ��=� �б����Q�R$Ή�{P�1��j������`�� �<z ����aXB�5n���&s�;JM���BD�q��~��Av{%���|�{,����wQ��G��\�:h����Ex��5�~�<t�;�Vw�]�|()��4�1�#�<�=��J� DQgP���6�X@s��#LtЧ�G?�zj�e*��{���;� ~���v؝�;O�{(8C��#�\� +���F�س٨ )�S�"̌��tN�T���f`��#�H��8�00��;�Iw>B��Vݕ��Y�k`Õ������(,7U +U�+�'F|`��� + ^�EMB����@n/����+i�Q���'B/ p�aT�/D�;��C!��X��B�"�0�c�r�>�Q�8�8/l0݊���M��?�xy~n�0���7|��c�ǎ�0q��)S�M����s��^�(d��^^�2l�/W�Y�n��_�z��W�l۾���ܵ{��"�ވ��־�o|���#G����?�����>���3L6��ğ=w>1)�B����Y"�D�-��U�5�ڂ¢�Ci�����TS��ź�Ʀf����f�pvv]��|���nܼu����}�ŗ_���o���������~�O�����D%�}�y1�<\�'�_ �g��K��<b}���ˉ�_��+���'���� �HB�M`8@8��A�Aq,>"0X�8�d$ D���0Q���P���p)#`�@�L��6-��F�8�n��#����m��O��@zH(=&����c̾�dݽ��z�~���x��F���������Eyy ��=�%������G� �����X��'$`(�,�K?W-=C���o"[ ;��=Q�o�;p0�ȱ����4�Ï?�����!Idr��-�bX�w��AWM�1 �� �0 +��z����}�_>x�������o=z��;x��ɓ�O��k�M�����uDT_�_��ba~Cٖs�J��:C�R������Z �G#������e&\Wf���HK��ih�0�a@À� 4��� w�|��k��f�dKe����Uh�_ݯAų�s��94H�A��Se �*�g�)�A��x�Ӏ� ���n�_To�O��*HSo�Tb.�W]���ޠ�Z��A �Р�%4(��ײ3n����膆��>�n��E���$YL�!�`*�_mԝ�/Qs��Р� 4�y�"�y��SIf�uaƹ���gc,�i��0�,5���pCu�~S9Ѡriȇ��+�]��xW�Y��"��Z:��Ӹd�M�3�^��Dv �9��7�V0��N6CC4��N��#�����>1tdBG*�������@C��'�ie$5��h��ͥ�o�t��Р���Ur�S!�\ʖrz$N�:Ҡ#{��脆�ƒn#���Hi� Кʷ��kJ�� +�A�˱)s�Ny6�K"cwgI�=��q:E�+����6�������Zg +�U�o-/�4C�TР�a;�rV�(�Օ�Б�u9'�_�4��q��b���f��՚�*ʶ��̅ڸ�|5ǢT�۳,�8��Ȅ���#Eƾt^�鎗�{<��6�X��jwУ-VZ��zQQY�kF}QL�Vנ���<V�Dɲ ̎��#E�r&�ٝg�9]|ak���%m�[ -��j���tg���p�Zנ�e*�5+�ٖ�d���2� +VG����p\9��i���Ϸ9��[���2CeX�ְ�RUt�6� �N�e5�4̖t5Ӓ�b�&�I���.��ps�6v.��iXm�q-NzX��S^������J���YVwQ�c�gh���Y͉VK��m x*����2��G��6������A?^T��Ra�X*+��5���j�������$�!A�nh9��|N'������hG]ǰ��.چr'�=U��t�i�.�4��'��$������l'Nb;niP��� q[��RN��RJK9�IӬ�"���O�l����i{�%�Z�6[�mْyKҙ�q�L�8=��\8F\���w�����ߐ�LT�e�$(!�a��S�Ic.4�����3l'��u�x�=�ن7���Ӛ�VTR��L�z�"����_�E>�ϋ�I��h4��X��$�&�}4���9����w�?���c�W�{YE˫���}�?���Q � +˱lp���WDL�|r���V\�`Ɖ���мV��mӰi�4l6 ��m��{�Pdž��g0|ǐ��0��a���V]ց�灡F!ʺ[Kn۹�l�{�`�����?�)`�o��h@��l��ǧ�"���sf\�-R�tɌ)��N��m-���n��ë�=�� +�5��e�'#1=0h�tH���h�#E��A����g"�F ��V�h���I�b�m�0;;�6���������7`�2>���A :�S���vI���QĢU�]1��WB�% O�Xo����L[��n`� �`�Q/c×���hޫF'�J��cs�_��+�!��DtU3(��˗�����vj�������Yy�`xN�+1�-x��[�VJ�f����Aƻ���C)�,�ȗ��fjkۭTk���ë����K���/c�k$f����L��<z��Ң3������AA�h��%��{E"_�(���v}Ðn���ѡՑǀ�E{�v��X��|!��33Z�Ѳ]��X4�A�-j�ؒB�/K�C,�_)%�������o2-�o1ã���{�z��c���[O�v�ˈNـ�6�V�Ԕ*tA�D�����@�]�)�K�����z3�c�7�Z��f�۳��{�p�~.qte<�`7"e�����Ui�9�� ��!8��\$U����ij��ݱ�f��V�Xׯ�Y�!C}��Oł����)� )�ZU�:hF����x��T5Lͭ��������\϶���|�Up?G�\=)����D����9��3�}�[Wa����P�X:x��Efq-6�jɺ[�5�|=�홯G��ng��T�~�N���ɤ�ѝ�ڐ�l]��=!5��F��Xx�B� +�Ǫ�����hC˵��}��;�kaO�F���#��}������T�YإA{\,|4�1�e��W؈���XÎ�R�Ͼ*m;��B��R�q}����Z鳌�ٝ�9���b�Il��V�ȵB%��02���qȌO�[u�a��D�ӵ�7�&��(��-��k~����iR��N��PF +�vhT@Ac< +ʓ6���;B�?[�"ۊ��T�a[���d�����dcW(��i i}EU��q%ݝ���� p�P��s���vd��c��A>�G�z�(6l��j�;^i<�)7�m�}U���ɰ�w>&�t�%4��a��S�&�Hs�ĉe!�e;�l����[��0ݸ/Wi<�k�Q��� %ߤC�����X��<p�C#I�F̍2�c`7�b��T��L��8u��xp{���lh��=�W-������� �r��ɓw�͉���;��0@"l?:��Ǣ��H������./����#3>o�����ƮO�W�}�/���>{�cI_ᜲk�s��,�p!�m�,�g9�@�O�v.�Rg�u6A��$Ⱥ[�5���X�=�ښ�Wǖͯ�s���l��w�rl$&��"���;$���&,�aq�����J'�=ʲ�[_vw�MæaӰi��7��X�?�ښ��c˖�9�_��0t��JddD�'�%x:,&rA>'����>\0�EE�h`��Nӽ���GW�����pk�z����^`x���� ���+W���c"R,��B���q&<$�Lc�i7�_uA�[=k��V�}����;��Ǘ�/ �����b$�fǢ*� ˱\P������W@�i.w�Ef��xH�m�j�i�HW���#-��]��`�0�(̩��I��HL��`�� H��w��EĴ�ϙqrxsvB�@��E���͌����:yn��8~^���I3���m��fځ�6MmҔK�IJ�q�C�wI֣�y�G��ﻭ�Ѿo�bK�l˖%[^ �p(t�4u�U}\�?�ɩ��k����3������������X�b�?<1�{B1 )�����ʠ)��u +�e;���5+��j�K״4Œ��^�S5�x{z��~q_=�a8����ie�/��Ŵ�xX��j(�Q@Ө����ʨ�V���f�=[rS�PԤtuE�h�x{~���{����/���ͩ0��/�����!=��k��[�8�P�&��ڪY��� ��V $7�yM�RU�LMo��gn`�#��#4�n�%u��b��D�@��tP���f*haTI���Ț^ʸ����,��o���e>OU�q�x�-�"���8����g��3h.����P�ԗ����M��Ь]U,*��WPW�2�M��~K(���d+\����+x{���ڍ^o_=�N�i�o���Yz!�p�g�'�ئ�b� +Z�(�e�^�ik{�����d�E�DU�ۆ�a�}�B���{_k_����ӜB3�sޔ�J(6�y<d#d�؞���I.h5`U���J��UPW� +� +]�_f���t�����--���}����l?��mh�tƛ�]��k1�m(�@SV#8��S�ZʂDC����"� �Bj��]���*�QT�v?��r?�m����c����o����G�#'=c�3���#� �F-��D�Q��L�u@��Y�B�P���Q4� +�-��^�u��ֽ��/[|���<�7�Ƒs�p%'�Z�f#�,��՚���D�ɳ\���S�8��2�C��:v������D��o��s/��{롽�K�����m�x�����8dG�R!k�L����B���E� ��)3T�}@�Z�d`����&�7�+�ܞ���}}�}��}�T�UK8����=1��% vBFcr�Q�p���X��L"�l��*���"�D�&��[K76�ٲ���m�~��~y5���L�u?�=�Z�� ��8��� ��0k�cw���y�b��d+�@�"�����LCӝ��]g�^�)5Ah���]@�Q���2���8�����4�N���`��Y�e)68G�Qs$�#�⯜mh\�l���t���r��B3lH�a��O$�+a��FT�&�.J��R�L,� ��N(;�1� �Q�1���v iҷ�4ްin���|���b��-dY��~��FN좃��a��/a����i.(����I +JM(-9�"IJO�E�|�3�٦��J�/i=�������#)}ȧ���l��1S#�8�N��������0��C���� Q�=A����D���R�.�Z�;�[O���j;r�� `��aR�4B������NuK�}���Ae�A�9N�\ˑ���(��,��$�fh��w��&��}��G��'�����E���_����y�عr�Xꂯ,�@.W����D���a���ι9���9*�l �-�qWG_h���w�퇎�-?k����ҏD�.gF0�QI��������Y�0����L�,�I�\�()'��ڼ����[p��������jx���څb��mwu�Ve��9A��{���@RB�H,ʡ'�L�X���!n.�&��⼏(+�����Aݤ{�4�0�Twm^�Qw8R���vW�~_UvJ�v���oJB +&dp$&��#|$b32A:3�9> +��%��<$i�CPM�����Acqd�<���k[cݍ����G�����ۤYѧ���ۗ�� 9�J����6�"Y?�1ᣱ&=���3.�t�ET��]�J0L �)<������u�p����}�'����/%��hT'�bj&�����H�Cg�0g��d�sX]���sF�aFG2M����P�`3�n�c8 ?)�J����._J���ȱ�N��p�/��\ڔ�I�Ai�9�_�S����b$k�d���l��Sݳax3���`<�_V��夗]i�5_J��ov�+��À��� 5R!��ڃBҦn�u\�#�.��@33lp�1�%Y��K�ִ������_�[�l�6�$��4���_1�}Eo}������O(��E�"9_72����NƘ�ɞ��x%+,��C�T堶 �#��y�{hX��`{�a�4'�ĝ�7�PeK(�"��*$��}�x�-B +N�h�J&.��F�%9�*J`mA�G*����Z����]���i�;�8�EU͡��k�t@ �{d��K��م�)�9k��~�a��ə����(�kB�~���gx�l�k�N(�?��d'�i�i/�i +Ŵ�xX��jx�W�:ep��C�1u3��D�r~Ϝ�K6-�('�,�eS��$̻챡�l�o~lP�����u�՝���xXO��u�`�.8��YN��J�db�=�5�P:��)'��4c�]��|kˆ���E�����+��؋�1SK<l��}FdХ�5<�S 3rrETvp%�9�T:��VL��1O;ZI�5x�Ǜ�;ƭ���=iN�se��<��T0nk���Ĵ��tP����J%4%V@3\� +Kƾw�0�)F�z�.�* �-���ה k0�&���Ģ�]i��g�|�7�8�O����섌���ШF�K���@Nq�4]����iD%�D�qX�-T�c�굘wC����w� �I�q�#����x���q������A��+�@�[�q5@���&}T�'�j��U�jM��0������5�o} �z w��Ҥ����[�{4p �v�KX�����L���@���Q��L�Bc��j��M�8Y+#�U�J��Va��k0����w�VC*y��C��Mh�mg��p��jL줌� +��,���:�5#,���QP��v��?v��� =�JK��Њ5X�5��Uܟz���x��?��7��c����M ���Rځ��J��[�~�`��A� �&d��H&Y#$c�0�$����U"�W�;��[��e�7�u��C��+fsp�O뭍(��rW;*q�)��tـ,���V������������� X����ދ-]u?�z˃�z�͑eu}��4[�u�*�/ �օ%��1��=���<'�r`���4;���p�#Y������v;G�uV�\b����KV�}~�����]t�;�Q�oV���9E��A��b��!���@�� &X.(I/��`r"(डT'=Eq2Rd+Erp*��Vͻ�[���}�n*L/|'t{q���݅-����*Zkb�>��"mnf��:�p��~0H�A�\^�0�K����Ì<�h%�����\�|l|����5���Z���س52���C�Rj��=wIM̶i���5M6��(Ƌ(�Ԍ�I�Ҕ�-�&h��8�VI�l��G�,M�����%;%�_<����3��mɟ�!���J��-�΅�&nc��~/l�E�#����aj��!Prj�� �d�0+j�o����U��7�*Öo��6����|��$�?6��:��x�_��������K`�L|b�����>*Q��J ���82Eg�`�*)=P���3�؏6r��[h�/�w`�}����o�羣�=\[����u����nj:|����Ͷ�o�Zp7ȗ|Im��K��u��:�m�lB%a�5�0��as5�ޱ���wDGI��^�{I��vx�\�/��$ٝ�����h�c�D�,IFI�d��B#mZ4�7�"��T�Ձ>m��3��V?1�Y�iޯ�-:B������}�K�y�/�e�N(���^, +�ю�d�,A#$9Z6��m�toJ�Zmio�=��a�����qS5�ݾ�|O�����ӂS�a�c�O��0��.v8���h�x�'#TQ*L�I�H�L��ʆ�t� ޜ��Yޖ~�0˪�a� +��аm�=�ć���!A�)# x�B�1B 3��QFg2�R!@� R��`�, ��}�o�w�Yr�6[�iì+�a�u�c�7�1��'���R� ��9#l��D�������}�q�N��ܱ��qZ�ӝN�U�z�uu�k�@�zW���EAAP ��I�\�Bx $�����F�$@Bȅ��pAEV�Ժ9�;�m�-ʶ���������?���������������*9�M��8b�ɢv�:j�h"(VV��@��ߠ���T�e���i��4EJt���Lp����avw�k}n���䅜4~�����1+�=n�*�(NU�� +<L���;s���YIN���iBx�6��� +�_�s�Z���fF�G�������ܰ��Z)H�B':�!�T�Ur��_JD���o�t$ ���H�\$�\���V����Q��"F�a�]|V��aG�^�j2��#(Q6�"*r�*&!i"�$]0��k���A�]0ݺ�4!>�DZ�р��/�rz[I��V��-��9�~��`q�L4�5�z]E�����CmdULD�D�](Հ���������OICV�t�^�D�A$"�C�V[��+�{�$��SL:��Q�1h�G��� 5M|CF�^k�ʇZ��x3UA��P��i/ � ����n҄di=�ۊ�~i��+�z�d��%�C6�@��>k\��O�X�["�d���>�Еq]i��B�6gx;iذ��% � +gd9� �$*�MM��//uxU�����a�����k�f���R�2�ȕ\o`����*�X�(���0,OƤA���q�����.�<�1*;��O[�T�������{�j8lQ��.3&�B��a��:A�8�/�� W=��h�S �g���4IC����/�}ڐ:��=k�J�]�*��� *8�l�]Kh���-nH�6�j���� &_c�i�S 3Ҁi�r`xaؚ�D�y�]��Mݧ 1M�&��o +Zr-��s.��j�)�kjT�A�Ad�GO�۸7`�p�HG��ܤ��M$Հ�!�o��?f�*w��m��2~\?h��2b۩z�2�ln��ʯK� �@1����'��TY�Y�0F��G)2��U���h�Ӳ4`^���2�nK֬f{�}�V�m�&�p�ҁ�-Zw���Zܥ5U�Uz(Ԧ��MjJ���m�3G�r�A���A��%�h���4��`Z� ����Э�lV��y�1>����g���<��X.t+L5�2hA)�-�h������D{��b��8V#�aU�h���%i��2������4�!�_]�+�.��x����k��q��n��-1c|�Fȏ�` +�ju�~XG(ZF����ixX� Z�E�u���i���2`y/7e��Z{�~dU���b�k�"UW�Y��s��e]-���5� ?�H 0 � M�((#DDYa<� c��0E����P�ۯ���e���z`]��Q`����%y���$4�)l��� ���V�n�b���:3��6�z&�O3��#��dd�����` �cs_�Ǣ���|)p�^��g՟oM,��w�9�ԛ$Ib�� �i�{����e�:'�ɳ��+��e���;`/����L����l���Ś�{1f�/�w.���{ɒ���}�x}c��뻬�2 +dw���6����M���f_�����=8=�M4�<d3� Ypn�� �j\[��e��bۯ8�� +'?�nu��lֻh�?�Do.̴�.�V�{�df]%{j �â���'^@��-��Uqu��j'��/�������).�ѕ�}LU���:��S��7}���k��#��p��r�d�jz�^.���"���*���`�N��nR+n�0.���J�*��Uq�G1��|]����0��?Lm8;7�I0y Nc� ��ϋE���ƫ+��}�V~��R�}���s������ߟ�Xr����+ߖV�S�9��+��;��S_c '��'��"��OQȹ�i�c���$��jѾ�W�C�j��-K�r��[��x�#��=P�ác�?��8�lޣ�K�����±�%GT]<�=������C�H��A����eV��T����+���^��˹`�;T�v=l�\>�~ |�y؟��~u���G<w���xz���ي��Sg�M���'�9�t���L&)A@ +mBS )`B���mh!1���Rc�ӒeY�u߷dIֹ�z%!�v�]iu ��pd0!L���̐�$�̯ۚ>�? ���ӷm��H���oz������ޯ'�|%:��W�S����� 8�#�^�87Ѐ����`�S��ӏT��]�=�r�{L&��u���~C*�gN�{�i��%8���dp�?�3 ����x�����\�ahe�eh���jO�y��`~���R�M�OU!�KrU��h��>���D�u���38lj�,J0��pz���T��~��ޡ{�&`jm���յ��k�˦�t˸��("�R�(H�ɼX�&�Q�oAq��q��˓�2�,�a�h6E�e��X=7e�Nަ;63e0�u��O����ɧ4]��jn���H�"Q��RĀv�ߌ帶l���a,/�1 �G�#���a���ܔ��>ehi�3~�1k<ʞ1tȧ���i�PQ�'5�D^�LRM�l�)��l8�q(˛G�|������0#x���eX��+)�z����9�Ys{�xJ1�?o�����'u�d^�H�2�k�����<k>�q2,9ʄ�q�0�0�|���h����ahe�>o�옵fϘ�+&�;j��pQNj��$���� +%���h�>�鵐i���f�qf����b�5\��É���ߊy�s�&`�`���1k�{�ڦ�4�vT��ᢁ/���A�ɩ�YL�"2B��5��=�+ v�:̂*;\�q`r�!�=�\=� ���y�������c��ʚq�OZO:���ᢉ/��)�,�du��P�bM9�7�Fz\W��j��z{Be7&�H��� �(����� ���un��̬��u�yP>�8�Z?�]�'�[E(f��jY1)QU��oh"��^�jN^�l�^$o�Gs�4o�-��Ҁ�28��>u�9�Ƚ�yh�l�u�^s��K�O�3�;(j��zIyD.� �A�s���\��5KT1��E������7���w�>u�>����3���m�u*��].�������NQ!iWcZ�DX��� =7�B��^Ut�pQ+.hD����2�-��h�M�;[���l��'�Ap�d:�d��;,{O�H���g�����p�j�]<�5��jT:�h�Cj���J +]QI�%�d�@����� [����[ߎ�A;.}�߆w���[|�pRB�\�G;���A���-��٤�����}S��KU��T*K�0)�!D=��eR�oh`�2x�o�.���cxk���{�w��t#;]�ds��=c�?�bv> k6�`B��:��E�M��{M��DZ�"V�E� +��Ӽ�g�w�o������2���o�M�{� �ir�e��Ӈ�Ţ#�3P�S + ��}���f�j��;8�wy��m��>3tE`��uÅzA��Q���ln��w��G6{�x�����ϫkE�7���]�H��H ~��������5�_8��ɯs��뜀g���q�+<k��k��z�ʰ�2�Iކڰ��� ����ꚮO��'��6Lj�!�D��DQ.aB�2,�� Q������1&d�1B�*�U��P���z����/��i���D���~��?>��>~���?�>].L�m����`�=a���cܜ>"�ˑ~R�J�ai�VUXaS��/���%(\bxa��@�@�Յ ��e �nH����\�tz����K?��Y)�ƶX�f�#fHv�uq����Ҩ�Fą^DJ�+��a]��XH:�$�?y.��d�_Y«�����Ѷ<�����/����"|g����v��tȣ����L�eU���'���돉s����F;��3����������@^~�\R��|Q{i��K��|� �;��yw��p�Q��~��z�D74�� �(/����� vj �H�R���twB;ڕ0�^L�G;��t=���@��A���rɊəū��K��~�5����l;��ζ�Й����twfe��vu�V@D@9��\"�IH"$! ���" I�r��Tģ��]ԭ.�㮀���:}^�E_|�^<�<�~�$���g���oX7�XMs���S�R�8JI�j��'��C����=�r��[�k1^� �}bc�O����7����_my~{`aa�G�O�?d��8V��9Г×��;��-%Pȷr���|%��jMk�V��"H+&Im�Ty�x��d��,c���T��� +1*S���]����S��wB?6o�?�����>Oo~~���������Z�J^]�r��rj�����[���E�ۛb��.�A�\��Ԓw��ͽ����xY�b�N����8�ww`�{-C����p�lI�nF�'�L�Ǭ�/F>�-/��,zT�B�^��������O>{��.�����V�~1���v��tnYH�I{Bc{C�������:>g�ώP���:}�$%_z��^���U�S~n�ˢ��e����Ϫ�������q%�k�ҔIe�?R˒�6^L|�,Ox�ri'�� ���ޥ^y/��� >9��}�Ǿ��+���2�2AnB:@$����dP����������Ɉ�ğ?�Ǐ۠d�~u9;�3'��ܝd}/Ds;d~��>�O`��?T��.�@�WY���4�v,dG$���xPt2\���11� ЧO|� @<(�1>0�n�N\x??��G������ �)��e�U��Mu����ƥ�6�-�k8�b#S͢���v�횮�馐��J�~�Ү�����*��`w��o�2�`�i(�`���!�8)��:���W���@�K�����D�|�Ъ���j���)��{���g�3�Wzǫ��qd�q�1����>��,�� ��A�����y�-�"�8��Yh��f�NS���%�o�_%B�)�X7�o�Ƕ���;L������ye��T;-���� ��D�A ��� ��� �p�[�Z�T�� ͷ�4�zS>Kk�L7tD�a� 3��f��Y�`�l��^{��j���{���~8&x@������?= +�R7 +��E�Une�2�^dQD�L�r���9I����[M#D�%@P؆�~?V����N�����8��o�� @�A$o �@���� (�pM�@��/6,qkً�x�դ�f�u㍼�*d �%v����k\C�n������\��ӂ�9�X��g�h� �?�)lń(9 +��R7D��k�P�Pq������Kf9T�$�Y?���.���c�(w �5�A��3��x�ی��{�6�gsv��`�� ;���l���lH�k�lԪ��a *�,�ђY.I3�����8�a���O��r����7���91f�k�p�oui�6�����ٶ�0 ��( KJ�lK-Xo;_�*�%/�K8P��*��c�K3\iaY��<� r��|^|ǐk2�L�=�>_������U�SI�;�İ� 6�mN��H OH�T$�+�U=Td���웒r�l+Z3! ��6?��9�(�zI�!7�3`�z�ѯ��P�^e��-'ڜ2�������a@d�#��LҖ*1��:�H�F�מӼ(/�J�� �pEH��y,���p��W��t��:����;��7 ��^)���m.����3ȷ '����=�Zs&�6��qg +�6�q[�ͷ��O���G$$�_�py���"��!hgT���6�! !�E f_+��Rl.���[�b��u��ũ�@���36��.��}"~�'��>�]W�6���S�L� +�� 1�f�Su<*�q�O���h�fuqi6g����A�m8�%h?�w�=���Oe�4Ĕ=1�a��$P����[���k�匭�sH_g7)h�v!oF�VϷ0�&9��6��g���t���du��l�`�5(� _�YT8PG]�����s߉�5{4�;�~e�l��H&{a�L0�Ejm����<,P���2�|��s����sz��l� �e�1�-�� +��?N��٭�<�������T3���T��TN���ؔ�f�WZi[�y噡r�x �((�x����J�� ��!x$�)���ef5��5M����>�s�����o�P�ʝ~���w8 J��W1�4G��u'��C����0��VЮ#�ԫ�%JFWV]���R�-fE�`����%l�a*�2 +���& 7�Ym((CU�5X�B��~�dgr[7h��~��}���hč87w*A?������:�Lڞ�6�4�^or]����������҆�Xѝ&j�L/RiY��vCA���)T��u6�Ae}�� +����{4�8=��?p�k���������b�P��Vg(3���]��BGi��K��{h��nzicg�X�e�TC��P�� T!١} ���փN��t[�>59w���#;�vމ)��/)+F�$ev+����Ӥ(�.�R��PtSj]���Τ +eGr�Jc(�D5f&P}�j-~�&s�w�l���&���n.Y�h���)�Y�Qt���в��E~���Nkb�r[iWr��a;���=��VCjRic.���Tڄj��P E��&P�)4����6_������.��K{OkV�W<>D��:�Ew����a��>r�:����lH�d(���qm���6�r[uKT[�|ks+Au��t�pP�.�0��Vh�a�����f'�� ,��լ��R�:!]:� �se���p�1"�@L)�F���K�%t��ەYݑ�@�� �29���!��kZ���b���.���zۖ���7.nޭY�����[��"B��>�ߝ�1��c�E��G���C �z)�?�"�W���Wc{5:���D����UՄ��/ +j�DA�?��i�W��7lZ��7�ʷ��;����[�����%���NJ�d&�Dr�'IY���\�hR�6�0r�-��ʺ6�W��C���`}UI���$P�,1�oDAÖ/V:���e��ņ-�����`�,���o�Y/ݱ)�|���! 1�i���Tܽش��D���ι�t^�73h��0!���-��/������]6(֣��5�~c#턉��ӗ�R05�n�l�:����C�Ly�!��a�1Q�_��sO�q!�)��%5�#�����03�g!����0�̃�T�����2��^6��:ע4C_��XW �L�����: �ip�=<��U_��A�ޝ��[T���X��+j��Jr��K&����x��?�<�pj��xrY��� +��F�֠�uF5��1�x�n]!���L03c��y8Z���,�v�cAp��B���^�G���ubϜ��>��'>�������s��Ca����@Ci4kP z#T�=����sa�Tؽ��;�`�����f�Vg�� �� �;`���x�N�@vv���G!�� R\!�p�����J�C���Py���8��Otغ.̾���߄���?�m?.�N�����8���B���p�Dt���=�~��8+[�Z�!H������[C�k#`�X���0�- -� �"<�A +|G�F��1���<�SJ^�R�0�!Y��@*��'Ve�.������a������ +f»3�����a����C����6b�@��FL��r��p`E�eR�+)�1�h�����"�0�Alq�<���T�;K��?C�L�ES��T�Z8q]41(�� �n o�o�>dl2.b�"���>c �@g�aЫ\B��X�K&=�ה��%?}�*���_��Ŗ�͐��i�ŢIb�h�X<��"��� �JF���A����0(�&~>� ����C���e ���C�f��pc�/ش��LV�bJ�-?k.A�7_"���NDˊǣ�%c�ƒ1���;���;���A�Ͳ^bYgT������2Cb�!�,OK�=�y�Ы���7�����D�vZ�C&�3O���&L%H�q�1�����|4JYq��Zy��-�����>i'�:�O�J�|�C�>1d#�LĐ����3�ѫ���or���ٔ���T��Ûc��M'M$��c����ؚ�r]�0IU=u�f��#��� �Ȯ���Z�T�!��<�0��ZO��sj�Ӟq�ku�Qj-����"eA���` �@XB$d%!@VI ��%$lj@A��A�V��G��;ߙ�uz��ݼ�</�W�-�D 4�P����Ƒ-����aX��kSҞ�d�h�����[dj���Z� "Ox�� �ɤ��+�3 -�:�����]�VlW�1��U��V��[�T�P��Q-h%�B��7<�x�G?p��_�1g�0�����;U$�x�9ZB�_/�4 � ��9Җ�X��J�Q��r�]�N��l��8��x�Z�w��N������̆�P��!��?�G@�ﺄԧ���)f�=�:N+eyʫ?�X��|A�U�DُS���VM'Ρ��8�Z�C�"84���<��&����n��@G �}+��/ԇ솆�Ph�:�F��L����-��ʡ��I,��~��!(�k�˓�_�i����o3hrmebh&"zi�]'�wh�.t�{�P50Ps� +o��������ϛNb +���eR�YD��^Z?D��^)�.�u�ZB��5y��h5K/X��6Cc��u������wC-j`�]�A�@�=H���w��KYL�#Ib�dSj�O�l�?9���������-;r�6M��֜o��,�B����f�!�:���:o������X {7�$pȃ��p�Z���Q�OZ�I�wd4Oc� +�,�մ��s{��.�`p4��b�+����6#�1�K=�Į�Ԡ�Z��D �=ˠi���E�~P��?� Oy���N���9Wz���J�LJ{+�m��:�%:'�l��J�Vf��\[j32JmF)������`�j�/��zhٽ��� :��p(��XҔ�x�D;lN/�Ug��R�X�'�72vu����sUUU�&[�b��XMU6cUb@�{���ų������w�@��4�����4r �+,v�RL���S�}��b�>�٦$�DbR��f���w�9Wi��Q^c�UT�-U3�f5URm�J*��0P5p�̇ƝK@���ޱ��C�?� +��;61|��������3$�-�!��x�UF1�x��&����(��b��JfX,�t����f(�F�ނ�Og�5p}��o1(����f������������<?znFE_�O��1�ʮ�!��ѿ��L�W����V+GO��d#�͖��\Ȳ�j=�a�y����x�A�u�|W�qˆ��m[���w��w�vH��Dd�k46U;t*_ܗBc�d�˜Y.Bn;geR� +s��j�l����V^h3���k��sZo5p��� ��w�l\�ٰ�٥����\빽{Ǖ���;��nE��G�u?&S���>|Sv/�%��V}�)�$;͚�F�.Meם��u�EmvC�'�h��QCݢYа�sh]��,��^�trx�77n������9�7Lw�@���,�Ddu,�B���� ��%�k�{��=���e�ե:�u�S�.u�ܥʐt*�����ڿB۷��/�����7&V,tOm��x�}������ o*�<�^DA�xbyލ��0��>P,8�Okĸ��D�T��6��.�HO:{��9F�#OV{x�A��W~�%�=���3ϭ/?u��l����m�Wۂ%/���=J�=:�U|?�H���d�eP2<���EL���p�Y?���h����1���} �־Fo��/>дp��y�7g�3w�{j�<���U���m���v���?�6�T��Xq*6;��ϸ�AJ��S�+�$����<��u�� #j��6r���`D3���,o�p�H������O�m��\��ekİ~'�� ������g���g�=�`O?H'���OP{�\3A+���E��%,�a\^~l\�f/�Zvll�k �������sip�����9*X�U,_Æ�۩�#���߇Ec�DǧM�'%�HNIx���+�\̣����$l�/�ptl���%��17�~K^�} 1d�N<<y�k ��g�:ӧ�w����G3�/?��_͂U�V��V������Y� +Q������:�j���8@ϙΔ���Zt�V[p�� +� +J����,ʒ�,$�@���D�L�$ ���Q��U�"{A��(��"� "Z������3y�������nt�;b��7����i���\B�+11쥂txNE���%���!�fZ�s=�ycr�̏vi@��~Z�j�^��������֬̆M$�k�ەA>d8⇃ȀX� �<&(G��dl��1�?�Ƞʨ���1���3?��������3v���jjqB�n8�J��:j`�G'`�21|�� ;7�`�&�o��P�h�1�G a}C )ȁe���dD#O�/����6������ �P{]�䈪�F��(��䠀�K���c�.#��K<x������z0C |s��l���~�wGy�~����4�����;�@�kdy��n�#���֊B��B匣P2��>q��gK���hpu��?ŀ@ؿ��tAC��}��"��c_zA�W;���(v@��ہ��;�\�B��Pn���:�w�#��-����y��a��~�� ���C'��z6� UC���_����� +�B �9�t���;���{�p�?�*���N��N���&� n� +n�������lw��p��?�8_�QC��< +Lq�;FV�k�)�+�>e�RƜ%Y8ω��g�z�4�Q0�kMa?M���4�7�q���1콌!�}� �X�u;1pC:b`���!7Ey��!%x����Li�������RK�33o�T-�"�2���$��+�Il�l2�_��;$���'�I��$�ʻ���厐������7�Fz�, ���\� GN�-M��"Eǚ���T�`�R%~B��L&6�.dN�(&p�G��~H9�8���8�l' +�����]��m��E�P7Ȍ�E2��&G�rp��I/�9��iγ�"�Sz�x2�*}L��|DjP�'^81Nh�~��ʾ���}�8��K�� ��i���i�1��U v��p�9��l�� �Z$���N0g�y��4�x2�L6A�T�'�f=$7�< ��Kl�#���&���s�)��' �/S���@�� ��A� +N��*��1h��b ���d��|�Q&�O%x�ΗL��(Ɠ+��jU�) �Q��S���4w�75}�M{Ҁ��6��D�6%h�'hĈA�D�A��p�����m|(�"F-����l��Te'�Z�8�8k�aV��m�F������wI��I7 +�i����~���~���~}�F�Y;A�2�� ��Π�q����@���P���B �^���W��f�ΔT!���sF������.��Jsѯ���z��Jr����И�k8��W\��+�e^_4� 1b� �,o���B��!��APw�}A"���N�Uq�SJ�xBrR9���a�C���۴s%�Ime]���+�n���n�Yf����SV��)��)�����!c�H�ɽ_��o��C���P%����I/�֔J z�P*�5�ani��Ԛ�����>Z��*��|��a9���8�fkz����.7q{�ʹ=���O@�d�A��(F���0��a�DY0���H ��R'u��J���P��� +;�-�ִ�WS���Xm�zN����f���+���2~��D�]nt��1���k%��~f�o�2��0~P�y]�܊�?����K�� +��Չ��LM�eQ���k�j�\��r�U�[k�תK�mV����H�aы�LzqW�b�1�C��O@��s0��� +�&�����߷ua�s�Q�O���ԑ���Le����-Zy��Uq���R+��� +�Yg�ԕ�[j�2Zk��kU��6�N�Q��t���.�bA&b�#�Vg���L{�B���P��z�7����C���F7��}���V3Gv�H�wV�e���U�+�mŲ�.�5���[�4�m���y�6k���R-�4���UN����<W�e���q��h�w�wϝ�}�+����N���LR�b�Ц)�skк�8r͘a3�$gR"��FB��0�M�U�D�)���M*�W˦ҡ�=��?0�^??�ߞ� 8��&�6��U}�|kY�� ��jNve~fI-�[����4� �}u���^����6$䥉+PI UA +R��9(1�B�N�7׆K�/�v�o��������u��Q{�8�7#�Ng��&�eTd�֦�T7&�t6%e�6$g�եd�פf�RyC�4��%��ІT�!KOJѿ��5h:������.����qƳ#^؉a��`o ����t=�\E���ˢ����IW�㊅ 1ŷc������&��W���J�U���HG�І��7��XjMv@��o��\�ԙs�y�����(���`���;�0Q����\~S\~r]Ji�(�*J(� �V!諍.�9U0 ����4\Q,��x�\��6����\�MPi� ���P�S��ϯF,~��î�)Ӂ o�[#d������^ΙK�ii7O�ĵ%G�d��˪��m"Và�p�*�lHU2\](���+;�_"�n�.�P�-��Т���KW�X_iz��h�V��_�F���Z�+Ǩ��bVo ,)�7&�D����.~ ��Ҳ���唎{��kb�F,��WZv�,���Ոɀ�6d� W�6@ݾMЮ)�a`���cm��Y�m����s���;�<'z�<��'�I��nj�L���E�sĥ~��$�B������ђ���f�X G8V̩+�2�HA��:h��k{d�v��̍+I?�U�\4P�|e�ۺ`o.z�+��'�?C�'����~|*l*�c215`��#M�e��f&��>#�rH��������|j�x>�A2� 9�1P��R����o�<�݂x�.��NW��@��Ʋ�5΅�ʃ���vz!0$l�Ŝ�� �KH��H"N��_Ԥy=�H�z�g���04�A�y����,����Ey���٬,��G} ����"}�b�g}��OX��e��e�K�'!v�D _�0Y��ǩo�"ȋ��ą����s�^����kJ86z��99���`���t2~@2ȓC�ByvK�߿靐E�?)�ԯ��&X���5�\��L^sv:����F"����e��d?� ƿK �\⇻�)�t{]u�e�5�y�n4nq2�u�e����I��1�@�&d� ��t�G��e��ɍR����R�؞Z`n�v��b��, �S!O��"������� +���Hu�� r��K�}*e:.װ�~��v�x�c��O�ѥ���$Z"��o��i�eLMo��ʲ�@[�F{�^ؙ�Μ������.�z�D{�@����,����D۵r��Z���� ?�����8�r�D��݁A� b������fL6�lL�0V;f��`�K���dp3%�� d7���l+G�q@�#[8ko �G-��x +�,�=�j]���b�O��r��T�!H�4�d��T2���-�p�Sb��j�������'�t��C>���Z���M��ISs�?���Ç k +��L���DF�r��$j�@�#H�$���C��!ױAU&46Aw�'�(���vG�U��Nkp��+����o5S�B��!J�b��D}��Ӄ���P��*��C�D�}��qI�E�3� a�Q����*�q�G�t7Z��#`&gV[��VpV0wE����Jz@٦�}�}/D�І������.�ݐ��r%�`U0���j(�6 +�pUa/S��1f�-����u�%o�/&��|E�@j�� �R�|�i���A��� +~����9�_�y��"� �-c���>CzϐBT0�Bh2@E��jp�B� �e�(;`�uz�P/�R��e�@�����SWI-A+�v�w����>�o��/��e�<{�g��@|˚�]b=�{ǖ�� lMi2��4k��p/��7�0��D�'���^�'���Rʚ���B���ka~�mg}#��|%��#�3a&�����ϰ&�5���==-�:+Z�QԣuTD+�ʅ�u�Bf!���H�,�'$!�Ҡ("e��(U(�L�x@e��(λO}�����s�7�i� �/l��>B�G<s�g5Ġ�f�m��>/`���X�/Ш[��� D��Մ.3�#6'�=�0�]� ���3ĉ�jқ�:��k�����c�i�!�i�{J���FӚ0#N�I@Z� +��݀�������������xr �9{�"=q���H�{\v�[laSBzYF��� +�Hz�1��|��`�D>e�1�̦����X� 5�Q5P7y�7����@��?H�����@O<���qzܻ�,�\>�5�F}�)����b��_d��� ��< �y�`ۣ�pna�p�E?���t�ݦ,p�8�����9 ٹ��i�$��,~�'�<�=E���3��c�h/qǘc�Ӭ�*�h䥄g�x�=�?1�x��~�M\��!�_�;�_�[������� 8> �yȷ/�5��Yt ��A�c�|bI�o���#�e\���=�;�0��c�Ñ͢G���V\_�͘>�؇�:�Cɹ�>q%�y?�h�]����� ����z�jPo�4L � A f�~� �'�J�8=���le����C�5�Q ��Q�I��^�M|or=���@v�ܛ|�ܛ�,`�:j��p���!u�l�,���Ap#��@�䐏bv�/����f<���#�|�`l�� �\���Qރ�R�V^��N9O�J��t��Q��'i= +�G�,`Ow&���� i�נ�8��`ڹ��} 3�ѻ�k���J&��DD�0� �G���M�I�T:� �wc;�������rj���ޑnct�3:S�])��l�G �en G����`�2�w,�� o�o~g���1�����Ag[��$�K����i�Py�R���T��'5kk���CW�l�Ƿi�Y��<V�*�ݙ�,��m�� + ^S u�W��̀�-� w�R�۽�C��W�a�#��A&RXo�H�0����H�eNNZ-�D[C��W��ӌ�x��P�n��r�ln�6�ۮ�$t���i.�B ��S@���� w�',��_V�)a����B���<�V33�N���"�&i��B��<�0��]n���M��fS.����kA,|���w��6-"hW;P{�+$�w +h� V�o �7����m��؉=�O��;��~1���#��+� ��4R�)i��$D},1�pTPj:«�d��ZL�f"�gԋ�Q�^'r财�g}6pP��q2��r�=���Y`�<�M�V�ggv��8���<��� ܁? +ȸZ+�Q���'5 +Ea�NsDfEL����ƪ�4ei�w�jis�Zڂ��v�J�ХK�4�z[pQC���8���m�����e�������.�[�Zuxˍ2��ߏ���2�Y|A!�,�֪5H��(�,��_��[V��E�h6)�-F��nP�Z3��mZg�o��+ȿ���S������{ڻ3g�V�4w�n���K�Wp���}�J زc4Zq��mː�T�JoD��|�D]ni�[Ū;Iz�I��bLJ����Ɋ6��@�PC��ɐ��ū��Sk<�+���n��װu��aNJƋ����[q���R(��X<c�(YuD��Y2��\3�x:�e�j� w-��f�@ӂ�v�(ݑ��֦u�g5��Y2l+��T���/.��zએ{O���;�ۗ_��߷�.lwi ."�,�d>��jl|��(9U��ѱr�����fr�%5���0�3����o�'�:��M�,��s&��[W8�n�R�)UK�]^6�a��֖ ����6�X~%dg�El��|AWIg)�E�� +� ��b�� �K�1��F|qB̳(�V=���1�m�xC��Y����0��;�̂�c��&���ε�k�����\�,�����č��� �`�rlLj��x��cW���ʴ|�Yu��6��NQ��aK:|a�6.����ݮ�X:ҝb�M�f��*�7�C��IC�<\:�������W{}��w�/<�ص�����SS�~Ս�����u���q��uDP�QT�(��b��I�l$$,D�*0�:Z;N�Z��:n��ǵZP*���2�)�UdK����9}m^|^�������K.�7V����z��a�Z�������j�BK5}��F_�\c<�\������m�zG��i�af�ӛ����0�ܻ=��|��j|4�쳨�Ǟ$M�W?l{�������I]voqf��"k���[ե��m+��U�n����zZ�h|��:�^E�h[��m[�?���<Y�<�������id�kMn��s���Π1G_F��}� ��7^��g�Ī'��AQЖ��n-��h-ϥU�+m+��*��/�?)��(�^{�\��|������g�`s��v�}Ε\��J���}��y�����*!dCOZDU��[�M�t��Y]��U����g(�֙�][�u��������j���xi�ڝ'��S ��](��U���N:��HӉQ��9{Õ|��F������`䔿ڸ!�m��2�8n�M�0˦M7��"�-_&��R��*:���6վK��^��<�`Lj7����x�^�[^g��X�F����tƙ�it&Gﺐ���\���U��ɫ�T�4N>�Q��IT��"�b�ŋx���F���R.��p\��T��*�m?���;��1�t�e!W�r�Ή��D��y�jx,k#�]�!ԳQ>ňX���&�gk ���*�Y>c�Ȏc���d�%rQ���)�#5Ңq��+�Qh�G��3bw�F-!?�&�H#!�����Ej��Z�Q�q_��qY����_��iR���H�#��ܰ8Ŋ�h�������M�\� ��sp1n�q���9fG���!�~%d͠3Y /�RLt�F�kӡ�\Ob���IC�o2�� ��: Ʃ���:K��ayU���4c&�Ϝ���Bp,4?�� �#G�2�_%d�B����R�+>a������.|��s�����xF��=�qs@�� ݄Y0�)։AX���ISQ��-~�b��Oqp�?��;��"s�;�T�R4HH6�%���t�0 �`�Hp\�"b4�G���v�n��M��-��1��3Vw_,���Q�1_������@?� �`g��]!�gC����zzt�Ph +á.��r=3��'C�M*${y�C�����B�EXtY�m ��R�w2���6�M�V�/z/钼�vH�?��i�3 �lhS�`�¨DFf(�Ь\��_�ܜ�v���CrH��1D�%�3O���;r,j��ߥ��h@a��Evy���7�;�S���0� �A1���lz�,��� +��8��H��A�6 �M�PnK�|����bH�-���z9DW�UB𘂠�z'�~٨�]�Bf���oU���A�%�@ǰ���l�r��2p`^cI<��B���W(w��8 ��V�)%$u�WT5�!zJ_�6���+�_(lt�rH�e�<p�F���c����G�����<��e�a�r�� KQ��)����"�z��~G)�O�!��@zU�}ݰ���.y�� �:���ڨA��T6�z�p����tg��\` +g#/�����H�B5����] eE*L��o�@�C�^T�i�<���N?"��1,���V�a��;���V���>�&�f�|U7h���2}�`t����06 +c�P��2A J���$7�?OC�j!L�0lSA�G��~Du��AYgV\7��?��Q��tR��6�?�I�:�?���K���9���4d0 �\`�Q�r�$T�OC�l6Vh��%<X��ȪV´��a������=}��NU�m���3�|�ۣ��m�m��Y���~2���h��;�ٗw�X&9�4��,�5+��bu�֦M�ZI(V�Q�0qQj塰D�>o e���Lp��q��__�ӫ��ڣ���I7�?������k����~�"�-�ց�j�W�u��Dd� !���I�2 h�����QP�(T�hI �ǭ{{���̋��yy~��y����$�A��'b*�3��7Em��J��O%\�OŚx4C����<H�2 +�e����z��v��A;�{ೀ���M�yK��P�a��,���`�����Bхߠ>� b'iݑ/����f�F}�KF-�%�:v2�2v�f�A�i:Oǡs=�_H��`��0��Z�:�*�J?���,�m:����� 20%�� ��q�qC����hm�ݨ6foT?�'j�݆��4�9u� NU��<��*��А^� _b`4���0�6YA���P��2�����4���]f��2�e\w|D�x�����~j&��T�x�X���p%�=�6�s���@4�j� �r�ѐǓ +)�[�`b�c�1�` i�,�p�<��f;/���_����� +|��A;�s���T�!5���I 7X���- eI�$-�>�CX?�\Ij(c����O3 �4#7�6��N�0�������Zd�{�߽\���m�l���m#š�C�����.9�!ƶ��˜LV���]�Q[�j���6,�Ke�DŽ�=�<Àd0���x�9h��@Z�jK���f�{�p��?�����p�j������w˓�S?�+�<ڕ�ߡ�c�S�X�8�Z-P�K�j~!�B��l��0{R2Y:��=,V�G��r��=/�mDP\s`z��[k ��sB�f���jv,��t^<{��� ��j]��7�w�Z�u�@�E מ��V�ET�$����x�b%R��ν)S ���$�"�B��˸D�5ŕ�hڷx��HG��z�,߾ோ;�^5�Y�ovY��cS�%�]7+Î�j�~�jrXU�P�P��l�,S�.)��Du2qrg�H�\&餢�a�H8�,� DO�7"�@����@��*�,��X�S�����i��y���}�-�z.��h� um����ǟѨ�1y�H�J%e+�f�%�b~j���ږʑ�!K�餈tX�HF�y�1_d�� �9��i�9%F��Wa`�F��������N֏o��������U��6�>\w1ҧ�"6T���U�"O�e��!�<3�2%Q�*�f<�%��Ii#b�|TȖ� 8)GjD́dtm���-����,_������tm���k�Ń�]_t_w]������|�`e�DAmLpf�V�"���tn��K��R��%q��)�y�I㲇%dՈ�znLHK��� +B���@ +�6�X�����֬��6�c�7W�G��0}wv�]�:�������5-a�9��A�ZR���N�V�� +�T��#��$�J�đ%�"\�hrL������ǟ7��J#�rn<�����[���%�/sڥ�Y�-x�g~��5��=��?�X���t,���S~g���Z����x�B��/sI$�4IŎ�� gj/�C����5z����*4 ��F.!g�CȚ0���-���E�m�-x�l�ۀ��l@�З�}p��Ɓ}�U��7��ܭ�>�"��Ϳ{��IŒ�81�k�5��R�ji`����M��K��� vX��QdbF�0���v��<���[�_o�7l@���陣U��eE��m�z�]~?h��n��/�$�%8����v��C�2��]�$���ow/���4��WԀ�W��K���կh!�A�b�;,�å`�� +t�Y��k�2�4��c����G��f��M��c��ݬ?�Q���}#ف!�����'Gz6⼆�p��q^�o �7�}�����:���Y0y!��`���X��NK��g j�,e�UL��9or^!�p]/?��4��$B���Q.X=�㴞�0&���+��A�m���;���2�]�>����0�����Gz�bL��;Zhk�� �,A�}kPd���k-��[me�{V�g]�1f=��Ϝt������{j�x�&��{���9����:����j��o�|�}�{��ϾGt���~�;���߁��p���F�:0����Y��c�>:̓|�ޖ��y9�ӡ����7F�y:�-p.����]gQM�y�? q� +.,* �l!!!{ I �7�k�KGw�KU��#-�X+:�u��A=z�L[��8��� +B|潚��|�w�]=������hi�l�*5{�.]0���wp3�G��NRqU���"֘[�>�a�s�bOn���"��)����{��>�G�6bڸ��-G�x}�H�Y��|HC4Є�aX(AQ���<��f`u|�$$c_R"����mJn�Ƣ/-H�'�<�<IQ�ϒ��(jOEm���־�V�U�M+E(݂� �|��L�C4S�,r�pa +�@qH*��tA<ֆ���E�<"�\����q+:}ѡ@��9�FQ_^$�W)j�m��HQ�`Re�g��|2 ��2�������$�S� �cA3-��q�Έ&�"Q��5�uv���en .�EW�\��A�G���%w���A�}���(h��i0u��^BӸ�f#��B#l�X� fF@>>���a���@TN������q����G�����q��2͓�$���ߡ(��2�)*%�`�8�z�� d��E!�;q��L�.}6D���3�e|��4�|����Es262'aq�h��/Ȣh���f3 �2���*��� (\���GA�i,�; <�As +��R�u� ��t�:3���A��Ld>�� 1�y��� +��J�'�� J�C�ʀ�ÄF���KTaP�-��!��D��XK��/l��d���AV'ɺ��.�g� Ivg�|���[x�bd=�xM��4d'ѡ`1�IgB'��^��9��p��GC�I<�ے!ٟ +��t�Nf@x&�v.�Y�wg!�>Y��������/��y���B� ����t�&xC�Ȁ.� ��&E������[��D(��@����/8�n�Bܖ�>��B�E<�����C���!�ρ��ُ��Qx�� /(#hP�y#o1&�����BPPCU�ꓠ�4 ʝ�� =�G��BH�#�3�������� KG����R�<U@�@ ��U���x��@/�Ҡ���1�k�?8�`׆������0�`A�!��\��P4� o�@z>9�� �&'}HN�J1&Q��O�n�=�[}K�Aݝ��<Ϡ#4��>��(:�qLT�}��å +A�1���(�I�y �-|�v��{8�TgP^R�W���h�ʟk�4O��w��y�����w�:�?�.<C>�)��4�½a#*�}P�2��3�L�}*��Q�������hA�d��$�?�ҵj���}��������j��z�o������W��˦QӅ�Q�9�g0��"7���x�&�����Xś�U�@|��e渱jGʰs)w�t��u�V�+�ne������E�c8��8��ᑾ�x_����~������aK�y�r�p��f.l���=��tГ|�{]Ċ:�&N�'��ؐ=�ա#��1�+m�W�U��]����G�F���&�K��_� +n�[n��Z���d(�0��[mmEC�S�C�-���_���z�l/�y�A���o�"����ؔ�-�Y#���z�Y��[����|���%��+���p�2\+9T�cqK�?�gK:-��;,�J/Y_8�Z4�h� 8N�J����),9��y���L~#�d+ȷ�.��ͱLlK�2�ȟ9�( ���v�����mp�o��]_�J�SM��k{A�s_�%�Q�{k�7%�γ�����������fG��pY����eM��>��'( ���d�ȾWOz4̣a[4;Y��p��؛=��n������[�m� .ѕ�+�+��ۗn)��z��t�AG����d�9�+��e�U�|Y�y�+ʾ�ݮ~�.����'0��FfQC��5��&2�����%��?�1��A�d���袻�[�~���mC�������?�h9�|{ɉ���Ǫ�]�]mK�:j�\����]���E����tm_�W��l�y8�yƟ�8����H%C�E�S��f_˖���88��9v!�5d�l!�Ҵ���eFi���K4�L��������������^���XY�A�@�����3A���������Z��6]M����D�j+���.;���f�w��9�&G�7�%��ƞgTF�.�8�M�<�m^�?�7���O�g�g9��9v:>$��, +�%t��IIl�b�樒���I^�֥N��{��:���+�v��x�o��f�:4��kR��e i�"anH^lYXVt/#��\Ԉ 5�=/%z*"9z&,9j649j>$)j�%�=�֓0�{��"_���B�4{Y��S�.u�E�p���@���� +�k%���Y�5_qO�f���Kf|����P�w�� �.�F +�&�B�W��Lx��YN\�;.v�% +�#<���{�+���U���ͤ���Hߴ�z�rL���N����M~�jK��� +�O�D�dg%2�22YI�)�x����䇑�� ~d�7*a:<:~�7ǎ.�D��DaD�r����xY~nS�ћj�ᮽ�&ʷ�m�Z��_��s��2����P��"�wZ~ܙ������� ����*�d8�ᇧOq#Rg�y)�~�[����&<p�H�,�'+�2��Ui�! �{T�a�n�ޮ#�;ڭ5�]��������T�8���<.���)Je� +sC9�ᬼ&3����#/8g:"$s&,4c6��6�K]`���)K�������W���[ +��(�ݾ��=��oZm����b���ܦӖ� �� u�151���$�<��,+�)��W��[�.ܿx&, ��̙ce͇��/���b�3��]^6��H�<����}_��v�.W�g����A7��;=���4��i��q�^��b7&��g2��J���؞u�C=��ٞ5s�Se�!~�������LQ ��!^�0ZE��&<�A�t�A��6J�#�ʯM7�ɼ�?��)��[K� ���������~���Z�m���m=L�ko]���'./1=���^�ˁ�J����T*�-xVG�mT�E���b��T�m&W=Փ*6V���L~����^t�����{!V�~�����g_��[o��So��Co��}�۞�~���M������'.���!0� ���2�v����M�iP�R +*GUIE����W��S�c�~�Gm�3����t�p���������P���P���P���P����qW���'����æ�OO��?�Z?�����������~W�Q�z��ck �����w���wec�7S澵�2~R'�����Ac�C�c_;�e�ڎ[k��|}��ś7V��}�6}���C�hq��z�E�e<'2������P��/h�5%�&5��hQ�tٰ�cJ� u� M� ��'&��&8zv1��t���Cf�5FG�w�L O�� M����&ߢ��gh)�Q"�u�]-��M����2��� qIb�4�ܥ���%C�e�e+�eGu�e�-���Y`�X~��0]��e����h�T�����������h`���2��AÃ�"]�U�7��w�w�rR^�N��/��:��Y�������߇e\�L����Uł8a��1�jƨ-0YS��a��^l�ٍ��w��]���hz��ڈ�{�r$������IQ�䋪dwԤ�����G#)34�6A;Y#t������ۇ�J{0ZYS7l�BUm�U��.�m8�Ig7m��[E��PIt�{ �� �=���e�דlQ�l�_P��.���ш����zh-��$w����Ii!KZ2���_�n�Z9U�߀� +*���2~Z'���D�w ���k��/�+@h��׀9ʑ�Q�t7��Q��u)�����t��mEs1 �SCg�*zҔ1@|��+�PB�%�b��,�H�b���I~�������ݦlm�#H�( z�]T"�in%oFm��7�E )�hD�GS�Z��ʠ3u zQ%�I�!_��Ib�q(F�خ����< +�� �V�渶(.��@ �B�� dO �D%���AFT8�+x�vpk�:�V;��z�U{�JF�`Y���M�&<|��������GtN +���Q�bʹ'��8 3�V�CX�|��#�⌀.`�]�OW��+�N��~n5|�w<���>������`����A� O��_B��'=����q�/n&��y�d,@؆%`mY����`�Y���n`u���g=�w���4�{�@���7|I:�H��5�?BH�I �t`{R��"�n>�|��bf�/s/m!��?�삐OV"x���F`�'���!�,ɹ� �0z}��OX ҂A�g,�7��{Ɇ_g"D.�ǃ +�Q�v��Gl���Y�MtBt�"�s��+]��*W�5�Fh+ !���:��i__�#�;?=�G�+b������� ��`>���7���ҁO=��3�@$�fA����b��"�h%�[W�WG���mtp:���f�}6�aי���D� �@+��5z��q$X?�r'j"D���u�"֕ +����S g8@>J�d��HJ[Q�+��<���:��D�3q,����]b��k��,d�;2�{���!���8?D�s3�듀���U�HXA��P��AK� +}�,�N�&-�*��unH2� ��_�x+l�ƴ�Ew���Æ�Q7��Q�9/�9}���p�ŀw3W�q>�&��!��?��{���ԯ��Z{d�>@V�#֊A�rAr��UU�=,7�J�$6�^�Z�^%�s^�[��%���*�7�!�q�+�C��;Q� 8/���DN&A�-��d_Ɠ|Ň����-֑{��@w. �lٲ�t�[����R[����"�WQ�T�;�����KRg��I�O�����{�[��7�c��!� �q�e�#�C1�$WLh�b-��� +#�G��4�g� ��_4��egy?Y���H_κ���s[�+▲%��������kҞ�+�o.J{�I�E�eW@ܩ����j$���>đ|)�֑�����6�UT��N-g��7G8���/yZ�\�ИN��n}���%�7�,ܫ��Q����=��V�!�Jy2������7ң��v�[����V-��@�g�_B��idg�'=���������6�M%sz_e��_-�~6K]n�t^7 +r�� ���9戞�����;�O���?O9$���w&�8�|[ٮ�]ٖ2�h�[�ͩ㲦Է�ƴwI �����dg��Q@zlZh�R��jw��Z��OkCf>����VE��u��v�$�ٳ!�}*�$�\KlWv��#�Ir8}��`Z�j�Mk귚��}���#ꆵ���VE}Ƹ|{�[)!yD�m��H�@6o�<l&}���ԭ��m��ݣF��yN��$,�P��}U���.��+*�w����W��d�S6g�4e��6d\Kٙ٫��N��Q�d���s����qYU�DH$�[G� d�Υ�2V���r�G6O�]m�5�n6�;^�.���{vW��6g�?�h䷙6 +[ ++���e�y�U;�jks?�լ����}���0�RiN�0��-�1�V�U��0.{$�m�J� �l�T͡�p�<߽�����V��ԫ{���5�8���xt�hWf�lY��Wf6�nI�Y\#�-lTW�O�0v���Zn|�Z^0�3i��M�qTU�?�(˷��y�����{)�L|2���8��k��݃�(7x�_h �{�Y�����G�Ռ������F6Z +����Ě�*ye�N�fSkʦ��Ԓ�4S���b�:S��T4�1��L�� � � �a&�.&��������{�S�͠|�>�r�ǔ�m��ݭ�%��"���J�};�����u����ʍb��Bf�\�.1�M),�,ո�LZ^ُĀ>Ӑ�X:�)(U�ƔLV���&�Bٜ�3(CU��沧�i�F�uh:�'ʿ��j�[W[Ģ��x��=rzSS +�nW&��./fk�I�i�ViqU��X٬5X��9�S�Y���-C�u���yTe�4�\�Ѫ��u�����MBXEA����aIX�E@0�qW�z��Z�D� +R�EAPAܵEܗ#n=3�v +c�NUԞ�,�g�g��|���~z��y�}?�ѐ�f���͂1=�ŧo�A���4ӵV+����ok2?�mW{$QRYk�+;��.�b����}���˶���S����"{qI�����yy%�����w��,��>{I�@��m�˶��\6��E�~����у*!ݮ3���Ft�mu�M原T�յh'l���y}�Oq���Oj�#��Ǭ;�&a��)�*>K_X�?+w�}m������d�}�=�@V^�`�O�2�w� Y���٧D����N���6�� u�1�ֳ.��3�&������s�Ւ"/j�T6慮;�T��nu��Ûf���=��,=������sӪo2/�U���YeCs�w��F�Rև�D��"�_I�UǧM�����%S��,��\RU\�,=㰽C�Q�>�wݩy�'G,iY5-�yc\vSѬ�c{�SkR�N�o� /��Æ�/?R�>�*F���GRGC���o#zTFt���b=�����t�G_]ҡk�T�%�^ 1��M�m�D����d+/d�/>�08����g6��;���>�'^�:1��U��>���>��f6#9�(�����T��Ѱ�臝Dw]������۽j/qTyÈ��M��{�\�]���ۑ�ފ�_q3�m��,��k|��V��S�\�1�s�6��zڌ���1�יӣ� v�y�Ŵ#>�3�����D�]�!�h`�?���Utr�뮈���Ӗ����O}�����[�8�:���>��������˼����&<ت�}�;h�����V����F��By�Cx�]DFvAu:�yD���gD7���#jnf���ʯ���Ӗ�"��kNkzż��r�� ��=Z���kCO�]JO�xV������cz>�F��ȵ=U��͊�t2�T��8��w(C��@u7�5�2��ω.��4>��/��N�����͈V����/y�/e���TF�Wfɯf�Ox�dחa3�/�N�!�o�c���.���܂��M |{F����D��7��$�/!����5Z�!���Dul+Xvv�'��_�=7���-)�_�3�{p��~���j�Z��x�����Y4C��� +�UC�l��w��~�����d�5��IJ�A�lbY?�h��GX�a��D��|K��#Q�;#J��Î7n:��Z(���3 +B�H�c?d��`����l.A��T���VK\��_��0l��_�Lj*�P�5˿C��)�<�?�g�D(��5E@�SÝ����j�Q)f�1K� +����X.���"[���$��X��� +Ϙ�LG�b3Pr�h�-�O�rz���ż#�Q(L(���?&�|X2��$��B�9A�9@��A˷A,� +I|Kd��c��kf�.0E���Bc����<����M����|=����H��U��`J�'W���'� �� +R�x�,���Q��[9B6����'�2��q�c��=/���J�Gp � P'D@�~�&P,6��:Kȋ��Yfσ�����e +������[�1<~b�8�c����!e���NÊ��f5(�8��auhBPG /�*����h"['�{�dxW���=�� ocg_t�����N��:C���3pf���/F�a?�������/��C8�#"P��0!Bg��I5CH�xXAU8�v�/��_�� ��=�߳�P|��]6"�3/ܠxnj0�|��r +��;��A2BY !�"�8����@"�n��d3D�L@��I�l�E�v{�uDP�3�\�jv��� �KS������_�! X� +��@H��+5<��B6��9��X��C�'��� +��+ab2,1m� �k� r�ỜV�К���K�i�����N�'Խ�#�מC��~ <WC�V����7>�E��pVCԿ�.��4���Y�EjE���( �"A��%��� ��#@��#r� A(�"H�M�X��VG+VW��Z�]�gߝ�/��g������|g���]�ך��$���i ��V�c�jD�0��!D� +hzG�[���C�qn�@=������_�\���r}A�s}F}��� +ns���[�x� +ϫA�y9��*Φ9�|���f��9D�Y@��D�B(���K��������D��*�F�!�.��mz<���vl��i�'�k�?~�1K��w���Zl�D�i&x�b�6S �����a�[nb<���$^�@`1��� ��x!Js�C���)W�<G�nz�n��O���1�y�5�e�uz믬+[o�z��|�}� >?2a�4;N�a�1v���k +�ZC狰o��R �#���� ��~�H�{/px*ٽ�_� +LJ�j�ٰb��ͷ�=o�:�~��y_#��!�|�\�q���w�|�� ��$|Ã�Q>P�@��)�w����u�s�W`���Qn2����#5h�����y��R��/��ף5n3Q�-߇�/�5��u�M�� +�N ��:!�x\�$hB��6&�P(��APo8���.S��3�)mO��EH��d�����`�\�i�X��f6�iK��'E���d�R��t�v�阽�'��;'����� :>|$l*���������@�zg���!�U4S�����V,��=v�����S^j�R� +\�g�[���ͨ�.�Ǭ=�"w9���9)�xOHK���U|%i� �t�D0���^�y�(�ewE�&:b�h� �F 0$@��@�)��=�Į%�Ω�s�?A���şS~+[ov�l��Lq���ɥgr"�2�.G�R<G��>�IZ�YEࡄ�c|;�+��#v�l���6Knsc�$�S�A +�j)0��@7��b�-Ǯ���ȳC����c��S���S�f��z�3%쥓a�㹱.#��->�J �;�,�3���*o&e=d}�0�6�ߐp]P���W%n�8�r �r`�d�0���q�����-�=�-@���Ѝ}����M��>�*g./�.�q���<��J�άjkF�Q��Q����I>��L�'꒮�O���+I�X�"�) �]��E��7�!�=*��n�F��g�f����O���NT�F*������=ERώ���\�>��fP陕�}z;�D�/�*'D�ˡ��9a~�5i��(��akR�e +�-D�}/� +=˷D�u��z�|�o�.5-Bg�7�߿�f�6x�@ w�qo��]�GSI��:m�u~�<��Y�S�Ѫ[xU�0'k,T�u!T��H�R}�����R�lu:�@�B��LtOKA7*,Е�y8>�n�G߶a6�z�1hQoge�!̩�R�^[.��*K�ח�k�U�M/+�(L� U�~���P���^��^Z6��j`���0�p�X�W����w�T��� �h�u:y�Mt�5��2��-���&bEK�h}]m�[UM�6]e�_Q�*P�+��K+���njQ�@�ɵgCe��"y�;��B������;9S w!���!tC���}fh����@nj���Ք��UO�����g���uUMbW]C�Vm��7ϐ���N�Աu����/� ���D��{�X�[~|p��L�[V�)���D��B���w��N���c=fh�� ��r��Ͳ���������]�5��gm[�Gn˞�Y���ʆܠ��RzB�����N��Q��H�~T��� +Ș +�Ht@Ė��Z��Y���pـp�{���C |i�/CC.�_����-���+��aN���n�݉[S���;���mŴݭՌ��V"��0G�<E +�os�M�8����"�XQ��4�=�E�j9B�a����7j����O3�>�)js23����^;B|�3$t�oL>,u��'{�R�F�j�+E��^O?��dr�7��N0����7]X!�@*Bw�]�A�dBc� ������_ݤ��t��{�+<�sA��!�(�s�X亄#qΒѤ�Q�a�N��:�8�?�&l +��C ����D�aI��)Te�Z=z�Sm�:��g\j��j�=��.���Z7w����:V2ֱ. ��VD���ױ� ·߹���?��>����k��/���7�����ZT_ks�7�6�m����Dna-r�[�;~����c�x|���D_|J��������>�KˎEћ�ԂEG->����v��8T)������N�в@]��n|�;)������T{s�%��35�q0Ͷ����m@���yW�����5�;��d�d���&��Gy�S�-<D���6z�<m5����ꈲ����Wζ7���V%�}0������֨�j��f��e|C�q�����H߱�H��'D��j�d���V&ZrR@�𢙝~4�E��j~��"�t����K�\��������/��v.�dw��f�7D���Ǥ�k��r�{�����<��sHL�I�SP�Ժ�h�����`S=�{lV"Z�vЗ;x�~��&u���+�*���.���;ˣ�����]>�vc�_֍Yc�o,���d�Yb��j�m��t"\�����8\ۅHM��k�������D��������Ds;��^ ��,����4����㹼~o�cd��� 8=� Tx��V{���� .�\�;vh�H5�mL¯����.��Cw����C���ma3�>����^g�sX~����G��[B���Q(e>����*����M��C��ra�x�a���yFc��xGa�w$xKp�'������l`3�v�o�g�&_$*�B��M���#|Ʉ@�CBZ(( *.�\,�\�x��H���`� �X&c��� �ࠇW�!���fpU3�+�l�?����D�"���\" �Hų:� �I�x +C=�q�?���/�8T����籎簝'�c�??g5��|����M����˾E��r�b�(xS�(b +D��ZD��hĒT� �/�j!8���K�"f5S��dZ�m�$=m2] +{� +��-��HE�bfy"z���} ];ҏ|!��i�ү� ��9ꏨ��bD�2w�a1�x��d�]��� ��Ԡ���kyXz���LVG�'zB9�q���h(���F���|�?��b��2 ?ɜg��fn3�~_�r� +B,��#dX�,�T��<�I���i��b@o�����i^;oTo�"q� ���P#F¶�(wB�+�&�x0��U�&s/ �]�ND�P��}�9�0� <�T<�5<,��6�]�0N�a�h$�.�n�?� ��� h>�zG����P��A}����1�a�4{��W#���"�f2���ς�友����#;��� @v���Ȩ�A�K�H�?�0��q}�5�H����pvE��,��U���O�� ɯ)��cI +�n �e@t� 1W͈�<�Y0*Y���-�CS��ph(���� {�r��!{�Y����<�q������6G�O���g��Y�I-Gd��n[�����/�<��a��˂���;�g3&�YHe�ϖrȗpp2.VO)��R��lO���s�h�pV���WC�K�rޑ���G�b���f��蟳�b��_�{��=�S���W���dV��H<�U���6���@ud�������e��D�*%��d*�=�'��U�x�x^h_�I�c���pM�����+��c/���]�k��hoR��'��/%v��R��?T�١i�C{$��h�B�gX�8���$����^LUp�6�0�,��yߜ��멚xm����F^,]}��*�\�{ʳ�?J<S�%鴳N��ح9�8�mu��s��:��04:a�]C�xvC_7rX� lי@x1�0S�=�����J����>�1�Ҵʀ���4O�m�bEۄ?+[+�M:V���Hi��P�v}��>���d��j3�q]3�r�57�`��g�0o/�iK9����<����r]�QMgy�%D� +*2��2XP�H��TA�D �@(��J���ޔ���A�B�6��=�������sf��κ�������������{��b��O��MbCx-�'���I?&s�>���XߎM�9#�s�d��kQ���5���n�B���Ny\8�� ���<��;��?Q�B�+y��#��p�!������u�N��x���ʶ��[�]�X&w���g�������<%ݫ��:0�/<8S�6|����n�:9@틼H뉸A�x�h�|K�D~��F!ZS4����.y} + +���|&�������t3�I� ��l}�#�fr+�Ȧ��0k�4�f,9�nD$s�&�J�{�j<�b���1=�V���7�j�=`��~f����Y�G�j>�U�wQ1������k �����n����$o<.������x:���rVȖQ�F�"���v�I��v$�5� +Js���t0k�울 Ne�NE�OU�{�J�X��( Z���0D] +��(����ަ�i���0��E&p���J�ה�F�ߍ�yǷʣl�2v�2��&%ݵI� �ť�3ɵ��D K%�)^�U +�� +�/� +E�s +��!�B�h`���/ �{o. +���c��2���{WT�K��E�V}���9�{[�I ����rU���:]M/�6�%}���_��7[��͖��7[�|�Ē�C��_�dD[ :����U����7��JH�u�!ܪ��5���*�5�L�����Ne莖=j�С&�K�<�\�YH)ʨ�+d ��n���Qnz� ���1����!Y*b�RSv�1���0��x�����{�J�.7�[�$��5���; ��ל���vU���<�u�����ST�b���t��<%7GEϒ׳dY����a�$�8�̯~�Lđd"�41�2D������ +��Xp�;O�눠kX�M�a�щԭ����q-�5ǷUWF�R���W�%T��V�ze��R�kYE;')O�'̝��{���/!�s[����Y��)(��J����"���j& p���k��0hk�Z���1�i8f������.�Z�U��*+�{H˔Ԥ�j�����<�����|���/_�|b+.1��]���$�[�=��gp�{W#v�V���vYB{�>bc'ٸ���Q�9jU��#���'�!�@j��YR��.:S�%���'+|�*'8�8�|"*;R���%��S"�h5�[�K����L��q�����f`34�&��w3T�1L�z���-�#�6�-�.Y��(l���5+ȼ&�WdC#-������n�� +V�a�#Fp��V#ZX�+*_ͿE{�Wp���`����`�����#6��ფ�!��l��y�� +�@�����N����{S��s\»J�C:՞A�=���q��;���m��Aԣ͈zL�(Au�y�{�oq�`w0������@-vв�u������q��1����Q��-q��/x�l#GN� ��*v:��s9��>�Վ��i�q�\r��@� �o/"s;ٿ}5�2��G���p�s��g���N� k�dӻ �iWR��X0�o3�9�j�U���m�W�;'2w�(��������t��ێLݒc��}9�. �ra��������ut �4����|�$@�MH�3��v�;b�=IQ�>�as����7��[�M��Φ[sf +��fjv�g:����`K��ږ:�d�u����Ȏ���1��{\E�+�W�w��A'�@?@ίXΟH� �m���!��f[���B��ਞ��_l쫏^��'�1�)i���}�g��6K������y+w��Vn������|�8x�8�]�M�����h��_ο����-��3�'����p����C�"�Hv���Y(��9���y�ѡ�Y&�/J�9�hZ��r����u3�W/�����~���,�=A��}�ny���;P����g��D.�~��gЗL�{�(�m��#��� ��a��!:�5px�7�?��ՙ���Sa�20�����f`F��P��"JQ,X"q%��Uc jt�E��=��.Y{�u���ƵG"%( +��!�����;�O��}�}�'�~�$�~���0Ofh����#��v^��R��+��u��BWe{;���F��;�m����_ x�(�6Q�}�اD����֍"�j)�]�5GPps�`|�(|H�?��-"���"��)bϏ߈5X/v�~�nH�>6J�-�߳�*�.�C4��'����D�����D��8?��( + +��А:��H>0Z�ArCO�Y� +y�JL�X R`��Ev�%�����,�M4�����/q�-�T�{�c���DA�D �38Ӆ<�Ajt"�����@4�э$H%��ΊB+g�l��jٛ������?�-�Q +�=�����9ߧ�ȓkpg.\�3���D�\��$�7��1#g1,�e�|�/A�b|���}�~���̂"F���M�414�b�C=A�l[�*�p�ªdp�Ͼg?Ƞ�"���cMmdp�k7���a߁!\@�Y@���][ELA�,�o1: ���T�4V.�f)��A���CS��As���=��5�V;x�O�LO(��?��o +,�*�l!$F��bf��/��o��Il��ErhW��v�n�����gGОc7�3����G�:([tph�W���!�s-FQ��^�w�M�'b�3�͓ x�� 2��a�o�2�_��MJv(X��#0�bWax��bhpl6�wh2��w#� P1��F����o����/ ���^����"�u��Ce���#|�=�s0/r�i�#L�l�S��ʹ�t����s��_�&�}��� �w�/�p�3������������!*�s}t�$�K�z��x�g�[w1�˗!v�]kt��C���:�szk[���m��m��k��W�j�k���zV]g�I��V������ �[������M��t��:���\BO���$ 5J��b�L���+oJ,��I�CC�)�/��V�vY��"a��y�:�g [ܟ��v��a�i� ?z�Mx����}->�㡽�.�Cw&��]�mqm{w'�♯����E��^d��֬QSzɫ�ly]j��y�h�'��P=�9]}�G����K4w�V{�J��u#qg���|�&�x��B�S���F�ӉПHD�1�v( ��C��jx�m�<oe������Rk�Qx�)���*~�/]� {��n�0����k�'{\N���b�N�S���K�НI��:�J�������s���W����Ǫ��m +��S;B�!�^�|j,�Qm~��xp���d鏟�W^�)T��?��L� ^�����3Gw4s��&se��J����A������}"����C����v�������ݐ���L�������^;� ��Б����n�=*���ő�I�e)O��4\S3p\�C�u�s������[����Н�7mϮ2o�Sc���ec�/�����a����}a^�������Y��)},�QC����P�ӑNt�ċ.�2gK�JO�譬��z`H���p�OU�_�w��-oV�߄m�]aސSiY��#�b���g��<�-�i�.�A��\D.�EĢ\�/�������+�Tϳƃ1�#�[cty�;�- �������;��K��|��G�n)��4�K����!k�6��_lY9hM��-�%y���;�0�^̂�7���6o0����`D�K{���~�y�1ϝw� +t�TJ���ѹ �t��(.����S����˶�y��F��,�_3bBЪaSC��_2da䢢�����w��-87��fܬ�W�_!zfl�:��Ӌ�2��Q�P�ux��9��/��/etr���L�����]�췖e�6��լ--�]�Y�~��σ����d�e��yQs�/�<kXe���o��Z\?��j�������ˢ���EM)Fd{�#�@��p��>#�TFtf��NL�P�ɮ��+����( �}߆}f���DTDDY�aVePY�M�*�X�&F����M0.5�9�Ѵ1i�h���Ks����������[ą3r�{����� ��ʏ2h��nڒ�۪1Sb_��ǯ���*Ҫ=�R�D�n���a_Y�9�����s����MF���""�,�MB��0R�߯i��P���Q�t &�V�X�)�������w���j+�\ټw�I�l�徼T�ʜl~Yv��<��s��Q��q�;Gr�/+}�_�~�?#��_��� ��I�Q(MC��0 +`~'��4�T�?P�L)�<���j0Rm�|Vw�ﲶ�ns�z�����5�;-��mK +2��d��<�gnn�(3��[�=蛚u�?%k�?9�_r��>)�(N�BQj& +S�(Xla���ᮔ�^����;���4�>#�80Pk�=u�L{��Ӽ/xE}�Z��h�Bg./�c��$�1�8�%���#�p�0��U�$��M���K�]�O�=��O>�d(N�GQb. +w�`1�J��D}���P:��}�'i�h`A�=�h�cZU��4���u���kbMeՉV9�i�Ҋ~���-��F�X��_r�'N>�+��+D����8�E; +Q�����B��`��4ԃs5ԃz�{����vH�[���C��je-�ZEM�+�c���-$u)�)�Y����$�Tz�U7 �U�xm������]��;��xs�6��pk +bJ�s�����S�5��P�H3@/����*��Ʌ�.3��re�v�.+���k_��ٶ�0��Ӥ�{,w�d��h�9�(w���辩�K�pB���r_�����:l�E����X��z.��,^.�����V�ô6��T������~G���K5��=���Z)G��v����M�w�[n�̳�>\��Q缮��kD��{x���������v;��a�=��"�z�NϤB�4�M�C��� �r�f��h� �a]���';m$��gx�F�����[�b��F��l�6_7 ����o����7䴺���)�����A�U�輺���ɡ�QA5h�8A����z�v��V�,��Ns!e��L83 ��������G����x*Ng�����L�бB㐱�U�m�� +���kp��o��o���ȱ�>^����A��wP~�1�?O��H��1Ł�i=�����3L�L�{��յ3��OǨ��ޥ�zZ���t�n�T����!��AC����ӷy���F�sh"�D3���\p-�Ds8I�?D�������M����y`�%6�U"�� l�BgE�b���� e�J�2��L^��U++��fMOe?���Y-�k7��g�]����e�w��+���b���G)���F����)����O+a�5�X�s\�3� �)�ς@x+�܊f<ndz�nK�.w�T�w�U��Qu����� ������P�v5l>�֟��b�t�����R�k(��j/���˔?�'��O�D�T��up~������� ����`�$l�F����xV�2���e������ы�,��?�xO��{�*��Pu�A�o����_t��?��_��#��?�����%��7j`��X~������|0�^��@0��WA��Nx絔��A�h�ie�ޞ`�og�?���hΓ�����|9�g|H�t��7�B��|����{`���'��zh�%h�p�4�40�pp�X%�B0H��1B��o ��F��ʗR��Q>�=�����X=�Q��[�L���Ʌ�Cy+)��hE�ˉH� #[�!��`����|E~\BA�Y��p�����S��8R��B�7��(��ˉ +r�o� ��}bL� �x�`B/Hb���͇C�<��h�Ơ�3���̕A#�z�j��A�M,�H`�Z&)&5��t�>2L��$����U�)}~D^������K�K��0h�Ƞ ��]�̝ACo���l`��r�I�$���!�� 2A��%r�|I�N���e�J�����vv:�2hO������Z1�[��X���B�\RJj٨�B: �Bw����,��\'���u}GEugq��SF�A�"3���u +D�PAd�2��30� ���"�,��BK�5�ZWc��M�=�hbY�-��b'���s���u����}9(z�y'���V���&�q_� ������N�q%]e�v�^Hi���h�d�e-r8hQ�A�:���'��h��E����"���[|�}mq��B���L���b�?�ǖ( z�Ũ�����-�,����rw���(e�}���o��w��?$kxo%�7���W�������C���gҋ�_�w�?�=�߷{'�+E�;��oKQ�ܒ��(�[�'e8s21�E�3�f�N�Px�pz]�8o���W.Z����?����Y�̬��Y������ 0��/��2���]�7\� +�g����'\e�� +�/�����p�@w��$@/#@oZ�P/��^���z���~>+���]�}�A&����ݙ�;����U�'E���b���;��w�>��3�_�q�������)�0�J�Ƨ(:�@��3��8]��z~@��I�w�}҆��<4��{�����~ެ>��;��ܛs����\�Z&��U�ٳ��g��7'���d�Y�>��=��x�����5�qχ&G<ޚ~�f�<p� ���h��=��#�)�ͥ�D�l/����|'�3ϝ��������K�����~����?�&���3:�����z����������3���ȔA���}������E�>���#z}�b��!����\ ��C �a� �Zd�C���_��Ey���N68�=qh~��y&sL���?�ݢ?`�xO�n�>�A�]�g�w�d�-�Mw�N��6]���V�@�A��`�Wal����-����pM9�G2p:ҋ},b>H�.��p ,ݨ?$���E��v/�6߹��r{�Z���6�A��[��K:��K7]������`��'�Q���k�Ա�O��/&���f~�e��%<��疈�JGT�q�����=ѱ�����{#4�=����]��7���nm���tۯ��6�lM�%YK�#٪�w͡hO��P���c��8��O��7c���q>�_'��d�$8�,��d�_���P�=>Ұ;.AԵ$�lSl�EGt�����m�M�ֈ6�e��Y�˩1��sC�9�z��:��N�(#5hW�ұ0���e���7��gRYp"��S'�g6�7c{g�7�'u�pKJ��Fu��=1Ŭ-![ܪ�Y�ĕ�6/Yn�"�UV�ѩ6�����̥2�+yy�]���7Li:�Ƣ�8н}Iڍ���0�۔���)o�S��1�ņ�,؛m ;s䬞l/^g�\��P�u�1���$�U)��&u�MCR��.�־:a�cE|�s���e�j�kQ�)W�j��v�ţ3q$2� +���Íx�Ae �������Z!��3��|gVg�lnG��^[ ���D�Y f i�t�MuZ��<�ʾ$�ɱH��ѩ���I���I'ܴI7�r�/�Z52ĉȴI�0.�x82���L�cT�e�}�� +�AO�)t�X���6���ei���<�q}n�YuN��"[c]�)�g��d48楯erҺ䚴O�2Ӿ�����[F�yF2�)3 3SQFFa텑�� +p:�z@��Q��V́�t�ڱ�J���q��� � +U�bM˖&Y�gZ���m��ڜzGMv+���,O��vK����|��<wUk�%Y���Y蘒�������m��:��ȣP��R��9HG�$h�����i���9�����e��JK�'-K0_Z�n�-̝���e��R��8��7��v������grU2�\t��E�-�r��td/$Q��8��P�>ʟ��P�j�=�����V��ٵu���ZaI�BC]U�(�Re�S�*�,˶I+-��K��5;�w01E���]#�.���Bd�S�c +PFF� �9P���g?���\N����ay��4;�ʛfq��+� � �F�����uj���,�Ě��q��Ҙ�FYd��NʊmLXŠKh�����LX9:�����R�����X�U���[<^H����}��ݍ������kW���J�8� +�(8��������g�����6NZ�`�jN��m���z���N����?f`��af�n�MP��EES�����k�ٺ��n�]6�e��y���Z(�*�X� +��)J��Y��Y����ػ�ہΞ���;0��}����'�MZ�B���ǽ�2��-�c��$�)nJ�jG���%��W�?ō�'��=�v��pU��B`�������J��56<�ցYki3�d�^S`����gꪉ~E+��߷bz� +�|NX��c�.��ts�ȥձK��,i�)X,1�$f�=bao�y-~��������K�U�^�����)5cFi(ޔ��mJצ���JG��x�i����qoM�nx$p̆��;��.X�$lhIix^IUDnIcD�ܵ��Z"sVId��ގ�5���^���u+�7�r�~v�'�l3`Jy��*�qE��X���[Q�����sl�$���S}Fn�a��)k�ֹ9[����V�̭�����3ʮ؇�-��%$}������0�=�5P�����-g�ť����ʁi\�&TwW�QX�����J�(W��� wݣ�wy�2d�f3]/����ӪK�R\;-�]���lI���6h��)�wH��p�8���_�����\ɞ�:��P��;`�y�V���C��Nd����Q7F����j)�3u�����{&կ�r�o7$<dH���_{�ؿF|���o�>1�T�(c��1�f`�6�ɝ��.`2Wû�ù�f6h���X�t$�G��<�gS��F�cw�A������UQ�˴��2-��Z-���~�ˣ�Q��;"���ij�r�o`�R���?����PT���Y�@Ƈ��& �c�O�!g�|&�_$#�%��;`?;}�MC��O"���h-���ݰ}����`;+��BgD�i#�3~��n`k/b݅ ��F ��I�'��3@�9=.�a��k[,m�03��L�v����^�N���O�й�^�6Am?t��uނvU����*�3N5���?�ev�SO� ��Hf�l�o|oa�������1:w4�;p��P���A������7�� �����-`�s̟ɹ���2;�ك?e�[��V��`�'`����x@�7B�d��Nq�L9ćᇡ��7\�.,P.���W/��{���r����g��̎�� X��>̽��o����,v�$'e�h�B| �C��G����{"$(��C�� �i���J0�~O��z��J��cl�r����}j�O�]�[��B� ��9� �<�9���Sb(T�/�yf(ў���:-��T�D�A�����@'��/R'����y�N�[ߛ�3?�;nD$�_��}���<Z��$%�?(1�i>-&�¸��P9U�^��x��<~4^��.�0���#�;ߟi�%�G��\���������)P���a�I���������6R��e١���Ԫ�֏� k�괶��M��M�6Ѯ�����Ab���N} ���:��F���9�Ur����ꧠǕ����iE�`_����P��K�u�f�T�� ��:��k�A��+��i_��!7��!�q6Tt-����?�� A�$��b@�k�"q�$>�����ǫ�P������Z��%���vٱD��X�}�ب]t�i;�֨�ڹ����S���+�D��7Lj��:#�#ݢ{���-����T3$���8��8t%����|t$�ˉ��W�ӵ��k��i-Η=>w��qڹ\w�Y���s��s�����s�y6%6{6&]�jH���`���T�$>5���@����| �q��4A�y��@�+#Wӝ�t[Z�F⋴��d�ډ���S��5���?���gc�b��)+ )���yL�e�K�g�Mi4Hm5�M��'U�vSU�X*i�I�X��gk�<OH� ]�~h��/����d|�������Ɯ� �?�?x�c^u��j�_2��z��%>{�����YjveV����c��<dݕ��u{�U۶,�/˒�w��m����#��v��(������_���aAh*H������QZ͈ �}S=�>��5� Sհ�|w ��c����e����my���U��W�o��5��+ �o"� �Jb�Z����E�(� ��K�!@��k�����@�E�(���j��u�nk�n����۱��vv���t����;�ad?����=s��9�s�������߰NJbMH k��) ^ك{�x�����s%��' �0!n%��&�,%�^JR�/�5���|Ϲ�R����3���q��S�����։ة����PG�2{4�!�x�W�!�s���e$ ��k�g�����|�¾����Ct���+J\V卵WI��*9}V��8���=�0�M�TL$[�ƒۘ�I=!��C�C����Y�=�2�/�.�H�����]r³� זDظ������T��u�Y�c繥�ΕA��t_����f�MM�tf<�T���Dz��#��DmZLU<�lb�u��R�ܞT�K1#�T�֡�)�*�[SkI%��p�^��u�^oOq����<�╻���l/Xв�n38u�ԓ����c8;�{0K�o��e��=�[��s8�Ϛ6,hUO ���D ���z�������4��E8��ᷘ�?d`�A���{.�>v��<��g�T�F�0즎�Ї��yj�^]�w�!�S[�lϩ m�n�6gu�4Caͤ�&s>�*�Ie�#�Y�BCDH�YC��B���>�9��Ή�װ{^.p!g�0e��b �GP���5&0z +�ޝ�,��}`k~ �I_Z��ȭ�u�s��f털\;')�Y��h?�P��[x���J�$ |���s�×j�ߢ�7 �A ��R�7�� +��`�L��R�ʢܺKe�M +�����"]`��Ȭ3V�V�s͆v~Y�QaI���H?+)�/n(��|+)�1"4���#�U��cpу���.���{�F�������[���U���QyнŜ��X��[W�]_]j6��B�Jj9%�m|cq��P4*��Ht�+r��ޠ5~#���0��t������`���a�B� 8Y0�O0{���Ͳ��ny��\���V�QS��� +(��2U�XE�j�����/��-唞ה^�d�ޗd�����3MD�1A���J^�W%fA��=X����4��������B��y#45�Z��ѫ� �ޥ��~E��@C]S_kͭi�f����!az�S��z;\Yu�:\Y��HUI�Tf"P� _]Ax�<K��� ���� sЊ3hA}�����`�o�ڎ���(�2k�{�5ų�-�'�U�k)�i.gi�,�����q@��0)Li8/Jn�-J�&J��G�l!��:�O�%��<�9<�3��38߈g� +0�ЏX��F������ ���7���z~����Rz�ز|5��靦 ��ZVj����n�&���Ƿ�q֛a2�Yۿ�q���Bx�̈́���XEna���̣�� s� Ѓ40����El(x�(�Ѵ�8zf���֟ᥴ�|G����V&��0�z{C���cz�9�{��H{�đ�<�H�Gj#��6�������_��]@��v����v`-���}4o�ZGd;Ġ��c����!����P����o�h����HO`��#8jx��g�:�y�_��A@������"f`��=@���]��П�H?p���N�Lo���H��K���Qe� +ځ����<�h��#�i�t�|^w��������|�1���Γd�� d���:f��}�dž�,����T�D���H��&{���C̼���a��n�vI!ʕ@��RR�pe�v��n�\����u�]C�[]3�W\�[\_0����s���4K�7�%>k���C���?4 +`C�z'f�,@���w +;�kW� �j0�\�-���nؾ$�mˉ�uY [�u�M�e��W��/�ة��)Z���x�M���*���u���]x��p�N�A�{&q38��;���p;�@�5��7h~�D��@t[��ۛ �N�D�n���^>p�W�� B�Cȃ��z�`���u�P�� �y���2��cc�}8�ܻy3��i����t�u�`������ �cOx��������>����>�����ޏ�;x}~<?�_|����^PQ]i��o�0�P,�$�51q�T� +"* �D�����(Į�ŵ�`Y#Q�� QcC� ֛�"9��s�p~��;̼�~߽�3�Hu1~�}�|8sȼ{�¾g�����O��Ӏ�`}^�oZ�/頺���P\�t�-@n�*���w�����jg&p�!pS��|ƟT�d�'���3�! ���1��$�vp��䋀�@q�-5ِ�m�f��� �Gܔ<f;�p�{����xv +�� �������w�N��֟�5���'sv���/3�k��cߦ�T���"-�mK�@MC������n�*�)\��DZDI�{��OY�����2�p�mfl�_�w��t��W��q�3���!�!�DX��&Z7�"�^;��\0���O�[/�|�����Dݨ ���M�i6-�%���Q)��2:N��.����sbl'�qݙ�'�ۄ�H�ԛR��)4���"ZNŴ���^��Q�F^�^���oI}��.��҈%l�z�*������!�F4%Q:e�����E���b��+��v�w�9�'��c�G��CzP��zD#�n��f�0kۡc-d���a�B�6����k���7�\�R��u!j���L]�j�F<Vo�CU���;�J�>l�Fຕ@���Cq� �� \��֥)��������b�J��r:�ɣP-g�< �<ܗ��\�;�Jܖ�ᦼU��p��8��^�E�'�� 霽��:�'�8����^vMm <er�f-7g{��ܹ���������2d��0����j��ˆ|\2,�E�2�7��¸�{p��G�r�"w}"�� �:�&,���7�B4SCx����ހ�y���w�ͨj��Mb�[�$�Ꞇs�#��8����L��\�G�T�J:�Aq�s���a�������[��z���%T�i��P���#|��� +�O�h�k+-^���#o#n4�¥f��K�`��[7���C�w���P�O��O���g��~�<�}>�-��,U��)Q��٬���j��i�f���M~/������-߿-4�˩S��۟*p���-lQ�犓�|P�:��Ma(����U��OU��ϰ�f�Rn1MPm6MW��f�7� +l0�Ԭ7m�\k�eYb����V��h���%���? Z+j�s�������l�g�X��gzj��~���:J[�EJ��,6PnLW� �. �)�l�ڜk��\�]n^b�Լ�f�y�\d��\h�,�7W��9����aS����s�\Nq�+��H� +e�u��-?�?;���w +W�t��X�1Q��cJ�e�j�tȴ* +��O�Y4K�Th;7h�.?��~vP�}^P�}n�#���~z�Б]N-�:�3.m��K����vʺ�{:+�=TFiXC��Eq�YZ�X�, +�Sv�fU6�z���Y_L��.4W�:�~F�rǜ� ��!{����v�z�iB�Џ�dO�����%�������7u�bM7g��j����H��wP,��,��ΏL��떢��u�͌��ls�d�v�q������);|�a\�N�����w�Yo_G=9���7Y��#Y.�{{3~,���K�`E=����^&��W{��^�����Vo��c�vJ�4yR�p� ����}��ب<���Bcfd����m.#"�]�E�tɈzëғ�H�P�)�`e8p���v$p��������(����x���J�����O�2'>R=9�����$���A���_ٍ���Cf� ��=s �c�;��eH��~��kZL�tN�r"}z�p���p�p���c�-<w���L�x��h��I�1����k����I91��:�oO˱� ڬ�d9�ϗv#��tȈ�F?4n�!=��yp� +�A��nɱ���^�.c��ɱBO�u���;��y�f��d�8X2��y?���܁n�I����6���`�q��Y�5��kG��/g�K��4�!=i�>��4CJb���e��6�%%p�p�j\�&#���������}�������YI�%���)֘�ꌉ��!;�_3�����T#R�4�b��J�IOd���e�����7 1P���,,.��V�:,��U��H�A@��*��`-�k1X�b]Q��QD���#U�ѱ���rԊ��:��k+ڙs���@��w�����Ť��,��F/(�GFW�ύ��8;j�SxT��QW�c��(a>_�#�����}x�k�����+��$�|dm���8��IZ�%BN�(If��4-y�YrR�"!1�ba�\eLB�Ut|�M�,�9���"V��6:���p�kv +���<r���X��������`�A�'�uH������^4?U��t[df8#=�U��1F���c�(}Z���`�����h՜�눔Ś��BmH����IF�I����']p����> A�>0^舶�K��g�ų��f��]����>-�)9���;�r=$���eѹ~�Ȝ�9�aّʰ����4���<M����W��3��2�O����/���/M触 ��T��Ov=��~le�s�۲�s�r����)y@|� +q�XP8QE�$��&����g�(��X��(�S���rm��j&/Y��]R��YrH�����{:�\���v>�$Khz��:�� �w=}�lIV��|���(f�Yb����.sFx���<%!e�3˦�˂��K���Q~�-'-�Vy�[M(Yc�^I��W��ؒS����ڎ]*l��H!)6=g�;ؖm^�!�I.�I�����}*$��BP�#�� `�h���K��W�j�lҪP3��y�U�UeXxUY���RzVnQyT�W�W���+��>j����� +a�^��c�{�s��2�|s@�鎭��W����U[`� |7�q8���P3�k�H��̐�� ���Y �I���{�6�+�1n2w5�5w1���l�m��xk�:�VX�X�\s;�}F�Z:K+��* ���<����m�o�Ԫ�Y��G]��[��\?�M�x�,i�+q1�K�6�H��VȆ�jdCL���N���2T+䃶�^7�τ��=�{��tW� +�M��Dofm������]2kP�O �3�C�����w��ǀ�P�o��sc�6.C�}�$N��K��E���%q��\�[Hv ����l�#�z���,z�a��� �˞�u?0� ���&5�M:�����0h��`�<�c��=F�`Ӓ�rX��B�z�\�U�3X�>"$d3��8�2�;�s��`�. ��������00�(лв]�:!�e� +mv0o� E�2 +�N����?���!k������vN�}'��5����) i{M�'܋����H�Dr�A����.�.�����iT�����5/Z�\���/�_\Jy��C�2�h/��`��pB�/�������뭐yO���3�3��O��W���:赦��;���X�_�*��8�kx!v�7\�[c�ی���@77�����,�]N����)��K�Ogͣp4��x0m�ځ���=�jz/��ȏ��I~"�r��~���T<�<<�E�W��y ~ +n:��-Z�U�����C@(�4�nO�y�i��<s P�+��p�%���<!��_OEl s"�6,�q�q� U/�`�ŷ�V�o��!,�!d| ��EƑi�CRɇ����5�H6�I��#�89C��"�����?�aC�5{\UoE_�f�AƐ)$��'�$��2RI֓��s��k��8����Ё�,�&�1�x���n��g.z�̅;�&�d6�#i���9�9�J�`5=��l����������3��|�n�6?y��y� �:-�а&Ē�(X�ȗ��'�H���e�U@�rz��YK���-�l�i`q���q������� +G���#�C����cŚ(�CXxB���3�<���=i,����)�A��?��p]V�k���*�W��p�l'.�}���V��w�L�.t�?�?�h�8�|��kD_��X2�=������/�#q_=ݪ����������eU.������T+qV��UFt����z;:��qR݂6�N�����l��E#Ь����%������Z8��;���� ?i���;��z�&�g��ѩ]�]N�2�>�/�qC��.נ(�+����+��7&��F���,(,ȲܖEv�v���rY�˂+"��.!xC�E��h�&Fmc��6�If:i:MS�M[�vڴ}z���<�_��9��y�>|e>X6�����e��7���pm��ŕO�K���\@��$�d��X�q��u,x�F�V���e��� +��*��U-�]��)�[kk�ݵMp=��{�������aj1d��r��r��r��_w�~k�o�7C��fC �$r"�����C�kK��Gm�o�����Wk�q�Kp/4n���R�Z�.G��R��Z�pP���9E;}V�C�)��g~֬�(�b�}Bq�}Lq�=���=�WΑH�H���둄�CH���W���ׇ�G1��7r�}��G���͛`!:�)3aNi��(-�)��>����)w�f��i�^�Q�g2z�{8�8w<z�7���U~�Q~�?�_���\��_����6�|f~�F�dܳ�pύ��J�V���8���� i0�`����dB�pB {\��S�r��n�!��7���O�� � +}� �T�����{TDгD��ق�@zN �?����1��D�NzN$��%L�$S)Y�XJ>}Hca kl�!Mw0��7���ߟ�WЧ>(�U �Qϊ�귙.�=�C�Ӟ�OQ[2 �$��<�%�b�{?�@ω��l��sc9�ʅ�49Lføv3�3����@fk����זs��5�ތF~OF����-�L�/jO���J[���>���})iN��ؕND�"BW�O��_��z�p}�b�0��L +&tRݱ���p@G���t�>�ի/`wg[�]�6^�g@ێ��֬�@wV?Ӓ��t3�Fݼ�^wK���ZV��w�#��ơ#"$�9�p���7�\G߷`�=��` +c���i`�@�J0�C�1��)�Q��0��<+ߝ[В��r�E 9{�NÈ�a���ޒWޕ� ��m�'2��H1���D�>���O1w��W��9K�����(D}�7�� +�A�)����i�N��3X�&{���m.,�5V�4� +ZE5�=��!��8)������Ae�_�������H�S�GD����瘃[x��q�z���~\�__��z�_�Βh�l�V���iI�]�lvcI>�Yb�9Jl5�N���-�,�+̃�R�aY��LP��Z���I���Xn6i��H������;���� �\��>�b�<���aN��<�]&O�p[#�ٺ�j�jhg�����TW���ր�r����ETZ�)..��-�Bˬ<�r%�h����h!��"A��b��3��:���_C�y���~ρJ��Xڬ,pۤ�l�4V���:�rT'��UZ��*�m�����r��V-(�5�+w3��$F�,�zRn�.��֟"��+��� �=�g|�}w뿈�s��wj����� mO���8+��n=T;���L���4��.�m�+�9,<��PP� ̫��rj���k�����2]�%���'ȟd�*"ɬ"�L;atv"�ٖx�}wW�u���D�Q�9@Z�z�W������ +�rW�����6�t�BW;�����d�����B]���aX��0#ImX��4ܗj��(IqqJaR�(���w�1�}��� ���i�o{�7,�dP��*�=�P艁|�v*ϓA�x�,}k!;�����Z�������+Ը���if��<���$�1�-�%6Q��nF�w1��s�?�FߋV�q#������:(0v2�۵r����n���խ�2�ut��H�yK�����6q�wu�U]��&ۺ� c��c;�����0��cۈ`��7���γ�q��Gv#M�����0�����/��WC�/R|J��A=�N% �D��V�*Xq>';���(}��-�ü��gyQ�ۼ���xQ}��z ?j��X�x�c^��.�=�.�v�v)j��d�Ґ0�@��+w(�R�V,��� Ư���\�2ZBm��6���^V��������{��������N�r�1糨{�{�i'҈ߕ>�j�@k�����<ɃȣP]S!> ���k�jX?���7��vy@E}ea��Op�}P,� ���� +(�q]����ՠƂ��ADET,�NPX��h{,G$1�qu]{�X�ۏ��������{�����@�x�g��y��gΑڛ�%_�>�`�Q2l�]f(2C����/�)���멷4�y�����赌A.��| b3��8~�Z��9�P� �rx�ë�;<+"�Q1�ír\�\��p�4é��U�p,�2!9����V�3y����LYǻH�?���R�O VF�*�gS�݀c��j���u#`WD�ak���26�1�Z�CcI�ڲ*K%���\�@]+��!��=��b��ԝC݉�Eݸr��6�����ԯ��_��Ƞ��AV����h�6#G���de��Y�PV:�� ���S�^��� ��jO-�Pwm���.�߃�k=�?����CIl�3�Yw�8ߕ��F6eل\d�i�kbR5љ�&��+"�CV!��V`z�m��DQ7����+�|�; ��R����@.�Wtl��l�]��>� 7� �L�b��|�I�I}g'�&w!��h!�y6���N�(�F{;Q����]# �D��u�Or��Lh�v�/��C��?�[7����l��O�����1yI#_ҐW���������h���v<x����ռ�mּE����xD����3��=��桍�i<���,���`��!Pq��k�6@���k�A�?� $��#�dYM6�RDJ�vRK�!��u�/��+~��xI��!쨭�Pp�W����;H����32�$�t��䐍du�r� +��.����2i��.�'��W��G������ƙ�5���H?2�|B>�N"u��9R�kC��:k��%�2S��Vo���>�~���C����G��7�A8RW���m!� +����Gz�j���XjMf|�tX@�Tjd�������s�"�@#��~��I� �p�'��4q7F�� \��hK_h�ZG��9&��ۇ��G�x�}L��ԙ�0&���H���e��%�r�M���8O_���S�� ��8�t��Z%�#R����9��ST��hgG�8���A��'5�qU�˲�h�%��|:�����bN+�qJ�'�98�̃UY�ê +4�jpHՀ��&|�����W��2c�j�AxQ�eN�W^/'������7�~��}�6}pV7�lG��X�����3�`?���`��8�n��s�W�u�2�:�A�C=�84a��T9�F��@Y��Bz��7ˈ�����n.yJ\��C��;N;t�Q��w��ð��Թ�G��T{$a����L����敃*�|Tx��{J������Hf�Ki��� +IA3!�!�Z��=��k,��� `�;孁����Pg���}��� l��ʎcPR��(�b�dl H��VJ� ����TX)��Iy�'e��~����L��Y�՝�F�R�K�0���3O�v���@ol���=P4�[����Gas�8O��gHy!s��!)� !���!9��!�5!��U!��쐣���e�OKC�"#TțY�?���]���8i��G,=�c~��3X��P7l��a(�<�`�G`�q���8AZc�"[eL�eʳ����ƕ�L�FE�q�2ݸS���^�~E��X�(\(�I���< �ԝ�n_>�|r�8n�����U��� �=���+�LXc�F�i��e%-7��e�&�2L��t�\E�)E�jZ�L1�S-�0�FlSϏ8��gj��1=��6 �,�Pe�<��W{��>��s� �:��W|j +{K����ھ>X���X�? +����#����e��&��5E���\�������F3+�P�yd�vf�>����6�#h�E ��(��)Tm(��O|ǧ�J��x�� �b�c����a�@OdFwƒ�0������XiQ�G����d�c����NR̎��L������N���N�γ�]��m�M��V71��.!Fh�����*a`+�"�}�����c�������c��buX2��q�H� ��&̏(͍��͎)K�#���"q�4�!��S�R4��Vh���u�GEy�a��fav .D�&�葨(�((�"���0�̌�� (��q��h]\Q0.cM�h��4rZ=&�Ic\km�m��&��A����;��8�}������}��yI�ir��jI�j�I�4���j{���'�J�x�U�?3��~��F[�6�a���>�(Ѡ���Ԧ����*C�PnH��t��$=WV�^P�V��O�W�5���Mߡ���Y�g�M�Y�Hc*�^TZRE�S.q�a�Q��ؑl�ZV���u�d��D��9Tf�C�i*�L��i�PlJ����N�]��Y(_�Y��e���ƕj�q�&˸K���ΘqZ��qC���&#CT �ҏ����}m��f`6���9�x%�R�uԘTf��bK0ʬcQb����BA�<!?;E�k͔:�92��)϶��-5J�e��h^�1�۵if�No�P�j��M5���g�*�ԛDe�IT�r�������,ځV��q#�SüTpM�9:ۆ�� +�c�ӱ�1W�;�$9���J͎\y���a�V��Uz�:u��UM���6���6�vU���P��-��Ee�� �^z����o!�c.���*Z�zR����,�U#/o���4X���s�`r�I��,��鐥9������ ʄ<�j~�vu|�M\�IrY��@�PT�<��xʟ���1�.'����`�!�<�N��Q��@X��#�$&�]�0�� i�d!�e�$�r���ق�ry|I�"�d�2�x�jv�����Y�ߨf�S�*�1�� �>>d��b��Jx�yh�I%)�{�rs����~0�AZy(R+R���9H�LT��I\E�4��L6��-�U�]ު�^�WY�>�J���"r���,�J������B�����2`y)PK�8�]L�WA߳H^�FB�@̯}�a�瞂��hĺ�0ǝ"ĸ3��n�d��X宖Ns/���n�O�}M>���<���<��<�Z�G,!U�|��w������K�RE���C��Z ��ާA�������!�n��&`������ ҳ�Sy�_�X�)��&z%<��=�<�H�<�a�?H�Di�ˤ�W�d��T�<�p/.��$�H.����L�6��XE��Z��́�hƤ�ј�f"��Db�w�{�0�c���B�^a��]�}KY�#���^�Z��h"�DI���*ލ/������=��5X�7�k���7҃�h�y Fm���c�:#Z#�|[,�kK��63��9�-��� C�ló[|����FP�(m"Ɇ>�P{� +� ��~�u����@�����7hYGo��ڥŠ�$;Fc@G8;#�\<өG����] +��� �����<M� hw=�n�];��G;�65+���P���`0���^�ہ�N`�`�~��j��Cp(�C����!�EA���e���a�qC��1}��������C"?���6j�e������6ր����v�1�.���Ao�8��]@8���B{|a#��hB��>��n~p��s�y����n��u�����+�2�7���ԝ�Xg&Qs45��9�=@{��?0�# pZM�����3�lF{��p�3��,?�gyٟ�!�a�{(p�m>/����д���.�d/`=�f�C���70���ԧ�'����������J���"�H��5��K��\�~���¿ƍ� ��b^?En��D|B]k�4�R�C�I��X�=�� +(z������%�-�B��R�&k�O����m���?rw����p��0�>&��?<a����������;��QWw�}I����~���%���(��Ӌ�\�C ��9Y�M��FM�^�"��ċXd���Oe��D����$�H$�'�NJH�#�I3YOZ�+���'��q��p������w��S�����!�� "A$��!�%�$�X��,"KIYI�p� �m�w`7��pwp�:=L� ��������QC�@�����E8�& ��x���:�pS��������8�V�g'���y},�q�gp��*q�3|˙z���:�t̅�o���d,�J�"�Z��Q��U�x�.�i��k9W��vn�|������S8��<F����8�Y��v�Ey�q��^�] �[�Q@PNA�c9Vv9v��Z�e9� �'�x�b�z�V,�x�h�ĚX�4��Sg�:��i��$�f:}�Em�d��g�}�?��<���=���?��5T-u'�@�D����Ok�%k�)"�����d>6�2�j4�h�G���L����A����I�þx�q�1�Gx������P���R*Ǎ�+�G�sM�ԝ��PS��20�l<@��?F-5���A�ո������5��Z���xWX�wq�+0"<���⢤��MT�8UK�<�y�X>�Ʊ���s��qW\����%����u�W7�hZpYӉQ�\��ň�v��¸C8?���3n�&<ĉI���dG��o�N�~��:G��� ��ӊx0n�������11W&%atrF&�0�-�������_N���I�~�G��H�) +��^��?�`���ST�!��|�:��lG���<v�q������2�k� ����p>0������V�#ӝ84�ߛш3۱�j웹 C�v`p���>�ݳ�10�v��%������%U�'������8V? �_L�Hj�ȹ�{�<�3&�̬)8>'�����$��r&���cp�{T`��:5cgP'v�ö�~ak��?���|^� �.l +���>�/�څ��Cք|�/����@Fcy�G����9������2�����]�ұcq6�-.���Rlw�/�#� û� �º�]bO�~qu�i�;�����X\�/�=R}F���4�����X��Lk��6c9��b r&�G/Ė��$�W����|��ٱVW.��j�ձ��*]�إ[/v�I�!�-���;*��ޕ�b�$7��Sj�U�=c������;�3Ҙ?����o��v�$�/��ذ, +��X���n}���+�Ra��%��=�W�.���H� ��Ƅ��'��NQ��?Rj�j�Wr�^�\ �E�kp���4r�iӊ 2��)���I�~<�'����y�NGWJVR�n0�͐/�B��Bl4ԉC��6����r��U�e8�T.j*w4e�ߓ(N�*;ST��<�����Uڍ�fր�g�����_�&k t���3m6:2B��СŘ�&�r4s��Hp�b��F�66IU�N�¸Q.3�TJ3jJ2��qo�؍5v�ߕ�U~J�*ٟ��D�2j^��'�9�1�M���5�2��X�Ek�4g�� �Y�9��l��l��+� +s�Xn�HNs�\bZ�8Lەb�~M��O�馏��[��K�դ*�,U&�5S�l�#��5/�G��i763����+�w.֧�< 9S��G�%չ��MEe^�P��/8��bIn���uKŹmran�b�ݪX-�4y�3>�u�˯��������lU�'�� j^,�^��h�71�n��F�Ș�yP��"\ֹ��-B�-d�,NJ�`/(� +�bAA�d��Hy�ղ�֯dۆ4f�i�,�5�L��}2��dZU%3_����S�1�1�=W̽H;��X�x:O#c�㳪��E�p�FI�B8�1���(r��Б-�6!�Q"�ګ�{�d�w�Y�>ey�&���&�� M��CMZ�MZ����r��4�;��ej�\���A�����+����X�Eq���挄���2r˲�S�/d��SY���l���N)ݹINu�VR��5���5I�4���)I%����)R�C���m�|��Gi�J��%�i"���ߋ��k�$�UN��jr�!ۥ�ɕ�,��]]EB��LHu��W���� �]r|ը纯�U�U��T� +U�+W���g�`�/��*���!m�M��VXE�] �k�#���ݳ��Fz}����IE�DŽd���A��yZ�8�Z1�~�����SI��O�r�Y��S��ZU��!�ϸ�\�R㻤�Ž@�H5�5����� �IFJ�d$�LEb�<�[ð�u ⽉��f`�ׂX.�o��m���B�w���{P���bh�'bh�*�6�FU{��'��Z��a�'�|/�����^@�,��%��#�k&�� jU8"W-EĪd���Ģn+ºK��u�G�|�q����X�YĖ�,�$��&ni����TUk_�p� +"��$�D�ԒPJ����2��Uc�LU����jj�:J��ϕ�:��Gr#y�����<꒕�Ȭ�g��*���]Fh�I#t�M#4�4B3`�i M7-a��*t�fpY Sa*��gC�~m��w��@�^dQ�bOE��*<7P�s#�)7Fay� +�믐�� +����� +̟���j�_�v�;�\y�)`��j�cmAv�3yf�.�f����N5`={e!�/�bRpq�/�R�?�- T@i�ڔ�ʿ4A~��kS>��jm��V�����ҾU^�#�_�W�OjY�Q�x?���Vv&g�����R�\)���"�K�/�ʥ�k����%O��<���X�p���1P�o�m�$5q���Q �c���XF��Tޕe�)� +SM�4PI����Yh��x>]B �I��ϕR�)�51�Jj�I��b�۶2�1oc�����R P ���RC�k(b �Wov�m7�)��� +� Ě��z�rj���E��� �o��TK�;$�]�++�>v�۽���c~�ǏZ��Z}-ͥ�b�b���j�W��#0�G����i�%�o���FɺU���h�$��/5?(���G�� ~ŏc���0���$~�b�9E����Q�:�����_�|F^}�I�;l5���wK������a�M�ch�JV��0����E:�\:Ǣt�%�B{��K��u����L�/���������gds2y��4]�!���T�=A�OI.����?��H+��X���MXPܥ��������q���>g�A*K����c�����zM#�c��/�v?�>�>��~���_�zN�o�:p�t��p0��J���Sjc� ��&C���0��&51I�I1�/�g��ה_���q0�ބ10f�X�P+` ��-���6П�P���Ol����s��&\w��V���6=��0�a&��~��j ���[��Z=��W�^�u_���:Rt�����z�m���e�.������4�+��k�4�xƠ��F +)O��<�/�~v��VW%qm�wڡkڧ�:G�6�|"gֿl�"\��N�:u��[�ז�j�D����+D1�����x4�b��j6�������plVcwv�R����+��4�g��SX> ίu/`�@��hȉ+������f7r���}�!�>�w�7%�,g�ҹ�Y���n!�K��kt���v��>� <�����Z����äŘ� >��<�r� jr�sqQ���A</��::o�1�O�E%��=�h�G#{�P-�^9��ح=څ'p��S��[���m/`z��u���܂��Ϋߔ\�"�D��UG�*:�8�o�1��h$���M�� X�N>�KP_� ٤����4�*�3Z�zC�Ǫljjm3S/`�R� _Z�-�� +�N����!����M�h��o����n6\[�������b�6��R��\�wϑ�c�*=V��c��=?�j�CZ�yF+�n�����{�>�@<���iGK ����i��O��)r��N϶�� +ז���ѻ��Z�.G��Z�z�ִ��r��Z�3]+}fk���}���Ϯb?���j�ԿV�����r�(���E� h�!��¤ϣxz��ήA{�ցgկ�6��h��*�ku�x���/{��*�0L�FkYljZ�1I��Z�����+'�B��[�0x���Լ�k�}��P������~�+OQ���f�×u��6�Py��V�WIH����Ra��Z�i��:����Z>N��Z����5/b��F*#r��#7i�{�YQǍԨ+ƌ�G��(�HyNd7x����g�{�=Ê6�Wvg�"7�*�l��.a����n ZЭ�����跔=Js�'jvL��bR53f���g̈Ya��T���2�c?5�b/ScSbM#�I̯\%��g�ˌ\}�2|)�)�e��n�E1>���=�*��U��)��@��=D���a���)�f�n$[�I�c�u��huX&���L�;by7�q����3�q�Fz��Wh�D{�o�͌������ �q�ڽ]�i�V�K4+>B� =5#���>4��`%ۆ)�6ZSm��D�{�d[�1ѶИ`+���UX��j,�m�\F�λ��ݳ��� �1�g$��b>��������ã��0��{ KHe�K�"�I&�L2If�LB&�$$C!���"IT�BR, �@�!�(}��c��V��V��c] +B����_H��g�3s����9�|/>����X�$��E� �Ґ���cU�8E5IsT��@U�-wd�ґ� +G@�2#�Xa�:�Ŏ;�BG�Y��n�;�[y�c��q��9.YK��$�_�m�q�g�����.j��]��L,k�c �a�c��S�UU� +��TE�<��'�,ݩ�ӣg����F�s�Q�3��L�����w[���,��q+��'+�y��N��+��fNj?g�8�I�K+��M��u��J,�����T����y��]̈Qif��3�ȝ��;Kn���EF����k�\�m�ǽ��vo���[��V����r_�\���GF��9�Ʊ�l�M�Ԁxꉧ��,'�r�`�fE�8;J�9SU�3GK=��q��ɔϛ�\o@^o���1��Mf�g���<`9={�4�cV��y+�c�}�fCV?��8�+��/�n�-��xB�R�g��T�7\��c�_-�o�r}���'��w*��Q�?_n���0��#�����b&�w[I�^+��Z���\����x�m&����}$�=��o��%��PF<����/o������t����]�̂eR� +d)=�WZ�X)��#��H +����̈́�.sA�x>0��7��f|>���x�����h��A,�B��eVVQ�2�#�*�Rz�T���Vj�|��&)�ԥ�`��- +V(!x�� �l��c� �4o2c�������ؒ���bی-�"ۈ+��c��/bO�~o�&�j`��<��H���i��X���1J���E�ӕP��� ZJU|([�C�� +���Jņn3�ڍ١�Y�����������3������l�1tzJٓЂ���R�}e��e�WJ���>�C5o�(�]��k�(��F���ӜU���ʥW�j֪"ͬ����F��nԴ�nM�=�ɵ�(z�ۚ\�1��6&��gJ�m<��h����|P�u�<ش�����Z�Ճ4�>\3��� �i��7�Ѵ�xMmthJc���uC�2Mj�ӄ�6��i����i|�q�kzC����z[Qk`�mD���#hl#���Y�����y&-�)�tS�4��<D["4�e��o�����o�I�Zjlk�ƴzu]k��m���uնY�m{���F��WD��l�I��I��O�ݷ +ߋ^TB���:�^Z�V�ŲNoA����Ȏ��Ή���XX��. ��Ӱ� + �lPX�&]ݹC�;�誎3�~AWo�5�n����lo�l$ϵ�Y�P���F�u+k�Y�k�f`W��ѿ����X�5L��"5�k�̮I2�8�8��y�w��Yh�$�M�][S� �� �������λ�z��s)9�[�� ��M�Lt��H㱉��T +���K2v��W�����C3��d//���`�������N��'�����@��~:�s�5PB��wK)���w��D��Ҩi������pЂ�v�q�8'&�#���a�ˁ����ea�R�#$p���K�����ȵ*5o3s@��;�\'�E�Q���?* �E�7p~ۇ)=I=�ӈ?5Jzz,�0���ٳ��K'����'���x�5�Wh��+�-"�l�M�g�����x4#�JÞ�̧�<'�9�=��?��Wь �1�9� �e��2q���8ρ� +�U&��. �ר�k�[�m���H�}��+iޯ��p#�;9��<���K�2�����M�f�]j�>s�!&���E���:�TK�Xܗ�.S��p�8.�j�k�a���R�3н��A�W�e�4��ހ��Rbc��/�L�>e~>g�|�A��`����fN����m�����h5@��8� +q��P��`%��:X�������>��q���B��x_�]}���%�~1�%��ޅ���&��V��#�7B��%B������70v�ޯ�ե�h�>�g^�}~����$%zEs���`@�}x�ËWbCa�ADA�z��,E�L�� +F���e�;{�v0-[��nr��t�#��L�q�������j��h��8���Чm�>G��u���lꖀ��i�E�P�0'o��eX��<q�L/�����Y�Y�=��-s�\�yL��ǿoΆ$@��Ä�!�\�0`� ��c�m6l�aCH ��%9H�PҜm%�Ҵ9�4R�4G��֩��i�V�Ȧ-�4���e���/ Қ����'������������)���'t���pg����Sx������x�Ƭ�Z��Q������N�����0���]�����s��?������u���������]��W��4����#={���Ԍ�O�J�5�*�:t�0�#4q�V��N|H��5��*}\�.��I\�\��x�N.��y^�s\�٧'�y��31��nS��4���[B�x�S+�k)��j���9�6��.j�Rc����sN�u��i��$���c\�Q��4W9s��f92�^�o���: |�sk�L*�n45��9� +�����+���9qJxpB�q|N^�3��s����qL͛��y�ph�yLο��`�_a�o�'L����1u��4�tr����X>?L�����0?g�pj���J��U�^l��b���Px;�w�@x�#F�7b;&"�aw�Q�\r㑗�#��G~�-Q�X��M��7�����g����Q;�O-����SQ�p2"G#q$*���q`i9�-���2v/k�ΘV����#��c�ak�6���X��.#�/a8�6�����`�����Cj~���c>1�1�������_��Cq��y,�$Ȱ31;Vc��JlYi��$+6%90���H���A�O�P�KL=�P�IS�A��&ze?�Z�#t�I� �%U�oW�9R2y���WP�~X�a��Jy;R��U���496�*�pz9֧�1�ڌ��vd���?�}��ѓ�ݙ��C��M��7�!��Y�'K�G�=2%|�'�>K���L!��rl/���碗͙s1�� �e�c [������Do�=9 �V8Px�Wt�S9��ڕ{�QN�Uy^����� g#�?¡���3���m>�K�,;&Y����g�ɸl`\�*cї���y��_�j� +��(��[� +OaZ�p�6¥��jJ4�� �ꚰ�>���ªzB$a-��@�S�f����4�(c�CO#���� 1.��a�V-EWQ|řh/�D���*���.m�������^4��aS�$��E���������0�� ���u��3J$a"?���J�E>��N�ś�i�^�����t!:�Q�%��,�r\�pVhЬ�E��v�6�V�Z�k�`�n&�AaԾ&��E��Q�������H���5咸Oͫz�4K�I���='=駛q��fܚ%pi��Q)CSU6�U�hԕêӣAgF����&}�F� ���F@����N�����Z��O��IB[%��*%q���X'{��j��}����U��Z����LXj�`�-��P�:�FC#j -�1tBoAg��}Bc<!ʍ�2��6�F� ��ZI�k$Q6C�$nQ�m����C2J��_K}����v�o0��R S� +M�0��5�Ƭ��\��U'*-�X�QnE�eB�Z��b�;���PY~%T�I�L�(�{��:�ۢ�&`aۊ^��q�5���,Q[��x�2TY�Q�X�mc4�z��L(�5Am��փb�0T�](����D��#���R(�U� ��K��z�2I��A m�F�V�l�t���6���9��IP;2P�P��Q�b�ENT�F8��w��Z�k9�W��zY����~��o�;$d5K"���%q�e�I2AF��O|���쀡�}K���Uk +[P�&C~[6�� +���A��#�c���^��dz�a��0Vy�#�{2�� ���6 i��-aU�����-�8YO�i��ɞ���m���@�o>r:#�������w�#�K�V�5H���A� 5Ї��f$&�"p���|��wH�d�ꓰb� ��|�����.�&�7P[��M���`븪oR�#�����$3�2���R$uHYjA\���,����iD��"*�cD�At������H8��M���E�N�Lm]'{�����L�wX��ǿ *��p�ʐ%D�qE��ׁ��/B���E��yj��Ml���`֓&����8�֪16Mn?H����}~�~�����=��~���_������Y⦎%��( ��)Dn�(�/WS�:���`ʖ��@Φ%r2m����K�ʡ����|���2�L��h�L�cx��,� W����<�$�R�k3`��\��r2����#s��͡jg�Q[� ٙ�ek�,3ƛ���vs�Z+�*�P�b�[�嵅�O�����<i>�Η���g� +�S3`���V�jeSˌ[ۑC�h��(�u�:.�:�.X�n0g�<��̙+��[�F�_sa +�S�yH1g`�^.�@��U�s��$����z� 4���fp�'E��g � +m=E�������'��������{�x�����K���4�b�X�94s�퉮�j�#��M�C�d�;�s���rÎ]ر;���ر;h�(|F�u��l��]p�w��r��߇ {�)�5���՜��� ����>�4��A�p�&�B����4��hΏ{H�c_N`G#�I#ů�K��u�X4�`�;�1�'-��c�ٮqu��x-t��ɞ�%�CR[��1Y~ւ��}8��6�9��4�.�Hb�U���(�M����m&>�v~�f���ت�����n����c8!�;ݪu.4@�W� ����9|������ ��-�M�����yw�t�{���>S������ӆ�#��I�? �{�Y�r��U�� +n�GL_�M�%݁{ց 0�=&&OV�ۃA����c��Y�p����d�r��Xw�@���0�C̄9PeP�`�~a��Y�̍;���ټ'�� �K=�=⭇�܁����uޔ������_�8� �l4r��9� s�c�x��Ǝi��� ��)�>s�]��u� ~˯�|� �| ��\�K�68�ش���� ��+�/�����c�Hg�i�?���.c�*�Z��k�l7��ң�49��Y}��]�Z��Z9���flA���M��O��Ţ�:#�W��Ϛ��d����D<��/W��2v\Z�s��.�$����B���|��D�*Vޅ�p�نg�O�S�-�3��7��V8~$`�P]dO�)�㘁F֞��\�.f�2���VG����r���!���e��~�dJV����9�]��|���_|�#�ht�����Y"f��Q��;�c�^�أj�"G��&�A,��[Y��6�M�Y����߶i9�l�숗�Xu���N��n��N�a������F��[ȏ�2� �d�2"���62���P�Y��]�n�@�y�r��������,��9lk���tŧ�dX�"�I���h$�1�4429����J��B�b����*_T�*�c1����� +ۧ*oC��{���S���1���ڝ<�A ����<8�~Zg�ն�Z�f�V� ղ��Z�n�j�MRu���j?Sf�9��/Q��b�9�j��&-p�-��Q;]T��-��Ԉ�����ɏ��>eo{g�)��Q~��h��A�N^Z���0U��i��EUUn�E&h����er�U��|�w+W��r�m��]�w?�<��������5����n��k�0�I�!�vß���WÕ_�n/���*�}��c�J;�U��*�4X�;��<�1*�J��,�{�T��\��,P�O�f��ӌ�o���������v����?)��E�]�����C)�!��*m�U2�a��.mT��AE��5�k����)�7Vy~��7L9�ɚ�?^3��kz7����P����2VkJ�6�Ҥ�3J��&=Uj�E�����7%��g���a�z<+Ŗ���7�fn��^ ��� �����jz�M�9X�=G(��e�JSF�,������B�W(5x�&��k\�A� yOcB�+%�F�XZ�(.E�Q�6XU��<+Ė|l�%69���i!]55��2{�+�w�����>�4)l�&�MPjX�&��и�� /SJ� +��ج�%E�҈��� ���C�E#�\�0�6�C9�,{rh�a��V�ᮚ�ɑ�J�쭉}�5��5D㢒46j�R�'kt�Q����@#b�jx�F��OCcNjH���, Q-�����נ�\Z�Z#mP��G�jR��Rc<5>�_�b�5&.R)q��o���%jd�%ŧix|���4,ޤ��5��^JأNh`�'��P�-�?��<*���?we1 $���n "�"��2�,�0Q��NHAA�(����M�q��Z5q�4զ�M���6mz���ĸ�&��ƚ�X���a�9����}�����"Ρ���l����X?m� _f�K1�S�U����@Y��(/i�r�'+;� ���,�E&C�22��UZJ�RS�dH�PR�>%��RB�NJO��� %$�Hr����T�#,�g���= 3� +��b��oe�Ȝ6R��pe�E+#=I�t���s�j���L��J26(��\��M���G�'�qA��;�Nw(��4�bS:F� �@�Q�U<�Cq���l6�)c�22�Pzf��L�J5M����T%e���U��ř�4�lW�y���4ɼK���`�nkB�C�&���0#�Oa4Â�`�0eIFs�f{Ȑ㣤�@%�VBn��rc59/Y�y��ɛ��M���DK�&XZaY�p��Y�)�� _+4ϡ�\�qh\�C�R,���r(�)�J��<zn�?e�&�{)��_���*Ӥ�I�X����tEXs4�:M�� +�Y�jm��5ں]#����� +�~��B:��wh��^�0�J�V�E7�Q)��ٓ�1jZM(�TD��5�d��J"Z��%�)�����,-SHi��J��T�j�����P�����FC�C��ڞ����lP��fю�2��_"�gT;s�F�{id��B*�\���H=Y�@[�F��4�V"[��l z��&_�V����vnjX�C��t8�-s�E4V@TCL�\F4#�lyE��_.�at���s<�_�-���=Q�ǫ�ɷ&J>5IVc�w�U^56=VS��5��Y�!���r�>��>�<���e�k�z��P������� +)�il���u�O��y-��P�0yڇ��>���+7{���4�>]�5�o_����p��S$��l�7�SO7=ϡ~�z&�j��"��9�Ff3��A��(h������ܚ�4��K}�i~�i<���[�dZ8�Z�L-P�ky��g��ຈ�m���l��y�h�*^/�|�3Xs"k�ĚC�� �7IÚ%�%m���,�1ϵ�x���XE#�������C�� �N0�1Ҿ���C�����P���"p8iF�j��z��͚ �� �5J���c�{��J�����j}?���@�?6��f��� ����p뤰;YT'�:��p�������p�z��y�b�F�cI�7x��Z�Z+�o��w��^B�m���x�B<v��.�������c/�>P\���w���F�z�w>�{��pbGs֏���ŜC�9��V�M�(���g���U8����@xu���������q?N�x���;�A�Equ����O�/����Nj[9���W��<��F���^��W]ZG���Mg��_��p��b x���%7�Ҡ�Ï�,\~��gw-�������/�M�CO���H���9���;b?��%�=�].���;�z���Çp�9����Ae��W�Kä/�� +M����y�"����uj��M�穀5��Z��z���a��qi����ȥ���g�7�`x����a na�����w4������'?P��_���\c� +���z��� � �a:̂�`�&h�6��5z���=�}�o���Ôx�$}��L�_��6o�p���9o��@���`DA +dca�~P���:�۱߄�V��_����?���4z�"�J"����<}��t K=|�Yx��C?���KWL|Y[0�Ϛ��2�cA���د�j����������~|ʴ� S�ټ�T?�QJ�z�9"�>��uqN� ��?�%w�ŗ̺7��5f�/��N��LN>V 1,�v��b{%Ө���;��[��|;�x�R>����<Z7t�HC�u8 +���#>prWJU}���s_�D��щ��T�MNΨ@�Ə7𣋼������:~ŏ�Z��u[����8�}D|E���Bm'�|��.85�go�����-/���(t"ш�Z:�s�_��l���خ��|l6bs����ll�2�9=ق�l��ds�����ۮ�����"G�'�#��$:��D������b��]P��r����\l.`w,$ +ϓ��T�V���W��UD��̮�������r�]��9��� �]���;��A��1���B���9 �(��h���r4*Ѩ�f,�R����yZDd�+�G#��r���"���pvrԾ�ѿ�+`�ܵ^�� Gk4:��ı�T-��T�iL\�����Y�n0˰/���2,���3,3��1�����$��v�c���xK�ʭk7�V�괪*�R��R�U~���V��.Q*�J��c;R������{����;G:���� r�q���+Y�Ȧc�n:�J�F�d)���ﱰ��G}��Vu���Wj폴�~U��e�Zr6�f_T=/�F�|Tg"S8�%�S[K8]ͱ��lsrx[�����}�嘽,�Lr f���Äc�e.v���L��g2�=&�> �1�����,�wvi9Tk���%�?k�5�t2Y$Dq"nG��9o���r�j8��`!�E8��\������I�L&�1��B(i����K����{SH�9#�3�j���J��Cq'_vD���Syʝ�i%SK�,'�r %�pj6�i�L�U1����������2���ьQ�fL4-0�`�t�ݙ�2�y_�d�������2����L�G�_d}>'.�z�i{X��d�U˜j�Ɍf*3��Y&�w�/������4�i'���p���� �y���-0�w���s��_�c�=�o�m�)]�Ɲo�6t=&��ez�X✖���.kߜ,ȔjٯZ�͛ٗ�s���J*�fwa=��V|En���+��xO�=ūt?���*%o�^�Β�V�Ga<�Y��we���� +�Ū���I�W=����f�8��%��K�(-����Z��<�.z*<tU���b�e�e�6�Z,��l�:M����#|� +�ğ�bF�k�գ(Ǡ�Y��gI�[����LwU]�V�� tT��v�n��i�N�b[�a[�ѶA��6v�ר����� Rm�v��B��CY�cbAL���7�c~�اz<�(�m;pפ�Q����gm%muvZ�Zh����G�}�F�~����'������&��������=U�S]g<���]�[�Q49ܠy ��; ��߫Z�US�=���8�RhmȢ���GcM�5465�����䥮i�Z�86�<Վ�T9.`qܠ��e�G�:~GYӿ�Ay�AE��]i�,�{�Iߡ��bH�.wiۦ���CSs" -Է�ao-������zlmmXۺ�n�S�6��9G��(��(q^����B�(p����R�jP��7tՋd��" |�#\��U�K���Mm�l�4��l�: +��`騥�����N�:�)��C�{�B�*��s����u������ 9�� �� �e��npS�?��uBX��!�'�Dk;4(>ֺ���"�t�QޓDY���3%�R�=V +=�x���z1{G��N��]a��92����������k�=���c`�~�5��3�t����RLrH��[�(�m$`H#Ϸ�\_!9� +�}u���e��1�����ӿH��4)��$���(~I���$ �=��5���X�E�_Z#�_t �^���}�Wt,RT��$k$S ��@:;���I T�h$9�")�Obp/ �yvO�L\�Mb��&&��+�#r��r�C�|ǥ�Ġ�p�!Ү��Zj����B��VCq$������Y��!6�BL����a�CSl a��Td��o1��'"����lg�qHL��ݢէ9(�Ji+"�J_�1uBp:�ع�� D�S��bs�����Ma}�a�ܰn�Byw�xf�kf?T#������VJ٭�aH=A�a�+\��8�9�J�I_��4)�ҟ���MD��Z��Y��XI׃(ORS_US[�Ƕ�\���[U�\=%���=���@vP5,O8"�Y=��%]�6�mz�I0�H_�)K����0l>.�wR���)���Z��L�-v�j�����5�!���/����C��p��'�V5�4X�ք�,(z�۩g���C�����|D�' z "���9��&5x����ZpT�%��� -vz'�5�7�`B�cㆎS�}���&T��y�i�0(:5� :�� H�tR��w��K����c���)�j<�)�^�x���rS��긭�����M��z���[����9�����5�Yi�Gcݲ�9�SOk�I7���e��.���5��ӍB��2��{2��ce���e�y��(�K�k�]XXXv�]`9DPEEE-�}�3�Ѫ�68ƨ�ǚ&5UcըʹM���G϶&iL�L�9�l?�q��g~�e���}��y�G�㣍Y���&�Fa���V��[O�?�r��&�4ݑ�C�ƹ��ߢ�����ԩ�~�?�p��Ҫ��� '�K���i.�g����]��l�穋L�h���ݷ�S c���)+����C7`?��vj� ��$��ur.�{�gx��hV.37������kz���nP�7�I7��M�����;*�D2f;y6�U�+�6�����S�|���}�.���U�����Xz�M�|��;��]j�sr�E��5�zH]< ���t9}���"�v�@ ��Z�3a,�tS��|��=���t��������}M��>��|�������\�sOz��O��� �B�VȆB}�24F�QG��@�����Ǘ����9�3���Е��b�A�\�Ru���!u>}��p�?���^0zݣC.����RC�('~�n��>��_~�fb/�%||�������%�� +�x����6�O�t���k?������S�n)�qG�>���H^�WB�ԟ�q��sϨ�سu�������8�Mhl�����6���u��F��*���ާ<�k1N161��){:&�2�l��Q|���#�&�x��!Mg�M:���c���w�����/w�E�cj/�v��wz��YΗ:��Irq�\�.+ v��* +��aڃ����I���$bNgkbw%[�z\�h3n6i#�7P����P]�I��4ou.�w:����h?��K.vi���nE�A�\��G{4�XK�IěN�����R�j5�*"� �/��rfu)�f)�O�U������p��-ql'�e��Z!�#�1�Ѱ��Ɍ�i >V�c%>V�����2�e �e�摍�ϯ�il�JfSQM�����4�9�αͷ�h��f�� x�%{�Z1�p"ơ���4-�6�o,P��� +4jИ��T��mnq<��Me>������_x��������y-���5�+8�{w��n}W0z�h%��K���dhVW�fv�Wc�!�LӺ�R��8M�I~�T�c�&�X���[U�s���<�1=/���g���j�j�b(G�ˋl�a5�ø�ph����?���Y�C���i�f5��iJ_�&��U}�M(Q]�H��Ѹ��8C5�T�FU�[U�W�o�<�=���ߏ�2p�Fq��Z#-�9��3#���gj�Ҕ��>(B��lQmp����֘~��+��~e��_����U���C�,d���lְ��ڪ!�T����~��������q���>O��������� И�U�Ekt�I�"�2¡�9*P�J4<�B��cU��sh�l����+v*�pX^�9y�n)/�1ON"Cm \e8�3��� �O�o��S���x���ʨ~*��Ԉ�x ���4&]�b�44֣!q�*��¸j��+�8K^���+ǸC.�!eǟQV���p;8��6���\E@#���$����#�R�S��A*��ЄX4�h�Ml�Q��P^S���U�5��mn�˼HY���L�.G"�\�i�'ބ���}O�0�t����\{��L�8�g5G~/�K)^�&vWQb� +�B48)J^K�<��Y��Mv)'9_��e�T(3�VΔi�H����g�f�&�����SJ�^��@��%w��M�.���rdž�P��2(��b�������4@n�Q.[��l��L͔3�#Gj�2R˕Nc��� [�\Y��(9�yY�(1��iW�S}Jj���nt�s�\�N-ک��r>�@���)��;���҃�i������V�gd(͑�TG�9�du�(�9Yg���dr�F ���w�AF��2:�)��SB�}ځγ�$��:P����^����,�g�3���_�Yٲ�5(ۢ��t%gg���W�k�̮*�\�Jp5��f�uoQ��eE���ຬ(�]Eg����S�Wg�ђL�1P%P������R�]e����`Yr#��+s�Y�<��9���S�g��<���)�;S�2Ez7+��;�y�*�sIa����SDn[�X��,4&r����P^p��V��,�o���4� P�!2W����d��U薡�P�E#Q4N�E� +-Z��E�'�̃�>�8�dY�]p9d�jF�����Ev���Ǯ"��!�fR�zD�1j5�6�$�HӚ��1�Zs�L�5�Gڴ�4u�S�v���~��L�LJ=���}��}��}��J,}Z�җe-=/k�Mي�\!iZP[O��h�g��J(�<�E{,�#��K�!�ʨ4+�iS�3E��L�8���#�+W]EJr�ds���Z�W�,�͊w�Xf�Q�\g�.s%�k�=~�FG!�":�P eP�idz�UF��3�8��dw����$ٌ4Y�!J0F�b�W�1U�5劫���Ƨؚv��e<�H�yEg� +_+�TtuP��X\�~ �ZpA ��x�A{��]�36:<RJ 3��HYL��Ze��5��P�w���*ʛ�Ho��y��� $�R^Ɔ�p�`����}t�� +�����V@L��8�GTKC�3��N�1��ϊP��X��1����}\�~u?��M�g���3g���!��0�C�1�����Ü`��v.��tޗ�T�g�Yb�3��g����`6��F�����fc!�"���]��7�f��́v`� 0D.b8]�`��.� Z��ЙM���"ׅ����ziX����dt�$s�����GJ˘+;hv:i4����ts���p]�f�.u3gv���y�g/p9�|���G��� �R^'��Ĝ�C�x��Z�H�eR���&�4u\�!�c5~�!��c=~l�������uk�؈����q��C�}������ڠ|��S:N^��u�<j�U�\�>�~��ԏ0h.CM& l�X��o���ӈ�`]~����5顸{� ٽ ��]��k4N�>��br�K �$���B]�)f:[`��k�i8`o�g��g��~rr��9H}�;¥{���Ev��$���9�P�,z�)Y�J\�B�c���U�?t-��=��7��������L0�cQ�q��-��)�8ť|��<�B�$�$��!`=!�����\D���|�f)�x���R�����O�hX�ux3<�Ҫ_�;�� L�Y����c��'��E�K�e +�2A]�ؕKpS��9��(b� lj�P!ݟ�+a�p:��+�5����pH�>�?c�t�$�`]��9���s�Mx�B����@w~DŽ �q`� +�a2�B5��X�X��Q�f��e���z���E�|�^&���W��T���_��?�xN���D��H�x�&@�Q��G�ՠ���oLNי�1�]e +�?>Ǐ?�Y>c2���D�|��oI�9�d� �8��8�>�//w�@<)�3��̤���N�L� �?>ď�0՝����?���{�wg�RO�yN�9��%�x�%��cd�5^�� ����\���{%���e�3�)�/&�.lخ��ll��n应�w�E��Vو�v�ϓ:��^�<@��G!���������.���b(��?��h�Dcy���2�Ķ�uDڄ]?Sm+�_�qх�*�?J&v�����%��}� �(n�C� +�D�:\��fk�m�t��*�t��3z�s��<l�`ۉm�gb�I��� +�R K9Һ�`�6��o֓�ul�����t��j������3��I{��nYа���1������f���;����L�5b��J�q���a�����x�E�:�d'�ӁⲾu��#zo���Б��F�BWA�t�h!�#����Z���х�G'~,#�O&Z�D���X�����\@m.�6��n��s����;�w�ޯ]���{d�XN}v�&��Qhdk�&�Q��,E��*xШ���h!#���#|�B���,֣������r/�!�4G���Z�-� +������u�T&b����V&ֳ��n���dt +�)C� +�Z2ш����%T�J� ��TO �e�?<���q[�Ƞ���}�Ǹ���X�Ƒ��` ������"�mּ�6͍L���C4+�5F��7:G�1SUS��1��1����2b}r�.Rul��LT�i�*M��0W����n���/G���$3����[�kK +-��Ɵ&X��d�W�y���͈���Q2���c�$��@Ֆ2UY��ԩ2a�*�,a�J�4�K��ګ�ʷ~�|��!�{N`8��NZ�u\���>�7�]���/��Rk3ɰZ嶥j�m�\���L�ʤ�"i�ʒ�U��T��ZM8K�[T`�T�}���wj��9M����E�$�Qnr���v�J�ˤ������3i� ��Ɨ��R�-g�E)v��8T�:Lũ#5-u���&�0�P�i���єA^MԬ����I_� �ە��O��_�����k���x +�G�҂Ҋ.� ��`��+�ܔ9"T�0k�#Q�i*������7�e�y��G�(��A�uY`w�]`�e�]�]6��x�M0�xD��⠉��h���hԦ:���M��4��=�$�Τ�v�I��۴�;���^3�7{���y��{���wi��J>S�����MM�,�)O�"�t�]�-��)���n~]6��p��D�o����}=%�� +M|���!�.��oNP�9M�1#U3&_���,UV�S�SE���嶶�i] �u���.�Xw��zH���b=�x��p�g�ي�lA�S���!������|��(^UE�UY����\���QY�M�29m^����a�,�-��<ٗ�оY�.��e���|�9�)�-�0�pv�Ӎ�*��-�M0 &�]���*�pĪ̑,Wi����*-5��,���T��RŮ:�&��5UW���2�7j�{���/h�����*�u]9��r���Fc3��e.�K�FB��|P e��;GY�l�i*.�RQy��V�e�(���S��^&O�F{f)�ӡQ��]��FV>�L�+�y��>����F�G�������������������*^����3T�͑�[�|o�F�[S�Q5�SӨ�|3��kW�o�2|ە�ۯ4� ��\UZ �FoT��Q=F��h.&��B����� +}/��P06F�k��[�����y��o�H�CY�2u�LRz`���X��mJ<���q%�(�YI�{J��*�6�-h��������Pe`G�Z�>�-o�cB�2�)�f(=� &����rkxȧ�PPɡf%��*!�BCC݊�S\�b�o+6����zn��ڌ5]�����0Pp�]����W�>�mĤX�6&*%���p��¹J[4,���p��(.ܨ�0/�6�&|�f�,4b�96Dx��5�ƌ��@=���|��mA{�D�'��R�b�45AC[R�@�p�D�T#E�MaP��������<��0��i���BS��Bc���a<�}P�{{��$�7��e�h�6�u��grј��?�v6ʜ��M�����nc�ښ� 0�m�x�9c8����GX��f��H��⽓1[s�)��V�)m�)n�ql( �".�ɣ=���å�M�����$w�c:<_��O&�����(���ӧ ����&�⩒i�X�tS�K�(k��Rˆp�p [�eg%yt2'�9d�r��cN��/8&s-�[�ֳ���j�i'7�U���j�����C�m�^0}ƛ�nr��]�"W4y���&걙zt�G7��B=��V6�,�Ԣ�����\�1o��v�aM]Q�D��:�����R�oig3�tt�:��~͍�[`+<���(f�"�$���<��G/r/~/��~���[���q��}p�Թ�Zj�^LR�Z(�D�TL�棆ˋk��ś���?x��0�Ajr���f��-�8F�cN���Gg��Z.�x�;\ qS�Y��S�;�Z{����\���������ٯ��_X�bS��@HؠAx^������q��4�[4ُz��q +q�]��C��&�9�����x���1�~�c��I��2�7e��8c�~��!|D�^ �K��K��X�}4Y���+]$��>���#�I̯e'{�5N�����1�bh�of�=Cc@~ �W�ad0�����*�r�Ξq�M�&�����:$�fϼ�ɀ�$`8dA>ؠ�A��d,�-��=���qB���~�#�M����]�[}�wu��O|ʯ~g�� ��r��y�AX����z�Ea���� ����N� +n�2.�S��Y4��y����y]����C4���b���9�eh����'�{�̻Ja,#t�Z\S Z����!}����5}L���>�U����3�� �xG;h�^��ms�{�V���3���]8 +�����Je|�I��NS���4hT�O[��}?�#ĞI�y��bZg)�W�*7�e��ƻ��j���A�r��z��}��}Fw�����ㄧ Sh��G�V4\ԭ��~b��&�Tb� n�_��}�ث��ѫm����M-v�,�ϵ�'`| �/�>g,��ƒ8B-^T*�G���_L|7�{٢����m���Ӊ9����:�w [i��ɨ� �F���ܤ��`<W�;k,���Ex��N�T2yg?��f�ۈ_F��t���A�7 +�Z��9#�9N��Z֓I�:Y'��� +��\��9�y������v��2�È?�����#�����K����B�h&�t�0�U���jg���BF5����p�����6���X�f�����Ʊ��ZtR���'�e��]��o��;v.�p�8q��Nl�p��9���&M��N�v-m�v�JW�rT+[�v �h5���[�@�Q�ZXA\��1& + ���� +!:�'���������}���<_+�Qˌ7�ъF�Q4���$�M�,�c�]�O��x��a��YEVW����^e�N�{��{���J�;��Q��>��!���ctM���:^FݏN�t��f6R�;�I��ha��:fm��M����E���Q��ڣ^C�"��)R�QX���s<��� +��uM!}*F��jT�����tj"�W�5�=�d��Ʋ7k�� 7,j�pV���7�P��E�,+�s_�ܴb�%4�J�{J�CvJ.���Y�m\)W�eʘ���&��+W*ߩd~�� +Z4Z�HAD���*��@#S4�hт���k��"���6�P����:MAZ]ƴ��w�R�IJ���fa�� ����X��<���1ٔ097�4dnҀ9�~s�b�}���kIi�eF˜�,�W�rFA�e�Y�*��]�����Y�z�����J9ZM�`��<�ĉeȖ���" X-������V�����(b��֣.��:�c +�7(hߡ��} +�Sk�j.����7�-}G���\�ܓ�<:�B� %�C��YXc��)O�/�;Qb�-�SO�Y�r��ʫ�Y�V��I��6+��^U�rD~ǤZ[��ث&����xFNjr;^�������Ɋp��h����ƒ�8$�:j�0.��k�QmR��D�5j�q*P� m�Zj�j�����9�F�fy����|Bu����|A5�WU�|��qO�P�ٍ�Q4�`�z�=�^�0��>�E���ü�^����P�.�Z\�jvW��]/�ۧ��v5�GT_?(�g\.�&9=���<O��sQ��*�|_����Wy=<M���ۅ%���������������<y�jh���T��Nn�W���ꚺT�SMӘ�|U�W���|'e�]P��+���'k���߲5�e��u�v�7�؈MK6����B�x�fh��ӼF���Z�r�����FխU�[���U��S�Xe�)�;UxT���e </s��2�� ����J�����n����@?�@�ڠ�w�{����rͪ�Tt�,�R)��C���zT��^/Kx�����%�_Q~�6����`ZEp���b����ǡ��]?���3D�OiZޙ#{�Q%�VY�ˠF��GőV�#�2E�e���(�Y�=ʋ<���"/)���L����+�8B��h+��A�h�y4�]�vU�XY��lY� +d��e��T�Taԥ��O�Ѡrc�ʉ���VV�0����ˀ��o�� +�U��Nڟ�` ���+/��hנ]�V�G%K�L��*�����ʐ(Sv�M�`�&�$���&0� ��F)~0C�0�^e�o��C#����Y;��]�#��U�� �bg)4O�$I-Y��@Oqئ��)X����`]�x)�k +Ә�����$yҫ�o3h$a�z���ʵ��5Џ��K�����f�mٓ��)����Ý�7́>�A6Á2���3|43 �#7�96��4U��_�.��4&ab1��۸z�sV��W6t��-��ri�bA�L���"c+Ƕ�DOb�I�cN�9T�YPs46LJs;�0�c`w^�@�n��w�Uf 5�V�1!��a�5&9�f6�Ԍn�&<�V���<��cw.�,㱗8��������@c�<?�x��Wx�[�Ǩ����)��`��v3֭㬁 ����5��O7�XޔF|4G!��Z�IO0/G(Ǝ2/Ljc�w�ds�M��X,ґ��s� *�c�أ��`��wi�Go������X7n�ڂ>�لn�ތ�c+Z�$_-xI��L|�1y��y�uz�8��c�}���:�`?G�gi��s��y�Ǽ�O��&�� ��ٷ�=0��ۃ>�9�g4Od�N�i8�)���<|.[O��+�q�8�����O^a���X\���ū�Ú���RZ#�u}��g�\�����"ӿ���3��0���+FH�a���W� ���M���q�����M�7��-:uq���Su_��qp?��a�`����ә>^�h^�������;�s�͌I�.��1��������_�^� �}���C~w��=u�e|�������>��r���,!݆���!y��tVL�X1K�/�W�[�����e�2c�̦Z^�ً@'�~��y�y�_��=�ͫ�O�8�v?;NDZ���%���n;7�zI��m�vݺ6[E�֪]����B��ҁ(� ʠ�*�k�T.��T`�@��`��m��2���sQ�S>����w�{�y+8�!h�n� X����_8�wp@7)�8���2��}���]c�^e������?��̫�� +<߅o�7�9���|N��Fb-C�Oo�c���\#�Wp9/�|^�u��¹�|�<~K��hM�^�#8��0lO1|�e�.�c�_��ރw�&��2�؉��_�3/�^P'�=�C�%��i��/pZO�~���|���1��!��} +�"�zA�RB��L�y���,|>����O��s�yx��4c�$c�syy�0���;���G{� �W�=���hϳ<��*w�n�Y6e6N��Y���]ad�Z�yN���8�K�e�T��/·df���}?�ed��N�a���A{�)tg�"֣=�S�q�y9��� �ܯ3� +����O�Tn���a���w����j~��� m+���'�`�6��@;�v�a��hO����0y$���>�f{;�{��n2��ŵSϰ�ހ��a<�_֜��B~�c7E�E]������T���K�2/{��]B?��J��5h�g��I�8Z��r�s̜��y��)��u����&x"�<���参�ǃ��-h�Qt���1����"���Eo��2K�n�B>@6�X=G�����Rf��f}��6C��<��o�'�G���q�։J�e�kC�}7Ƕ�a��1���1��1��-��4+f�:O�l#��������<�+xr����d���8���rD�.�w-� +�2k�9�s�9Y���XE�N�f'�;VR+�� ��8WY�\N�c��o5��R�T��#߯� ��"g�����~��m0�a�{�i ��g���XV��q��;��H�V"����/��4�gt6���覲���4�+���dg�dG�$~ +>K�c�@�Z�bK���I�~��hy�Y�E6�Vh��F��~ , )��Y}E ���S�Q�iT]�I�Lk�i�S��;�,>�D�j+>�V�%��������%9��ib"�6���N�&!�����ˀ�Xf�2e�z˪�c�U�9��9�Ty�:�;�Qޣe��JZV��2�V˼�j�Q��AE-��\R�rU!�u��9E�q�s��mo�hn��0��*��]7�t�Ե�Ti�U)�C�j��ꔴ��XS�ҤZ�n�i�cƄ��YE�y��j0�*h|J���Tg�X>�E����:'?'�n�݅=XK۳��|���ý49u�_;�-s)�(W�a��Q���V����+�TѦhEJg��ά�kpn��r��*�[yZ��srW^Ru�pSngN5p�woc-u@[>C�)�V���B.1W���ljtU(�r+R�W�:��긂�� +�����ܫ�uo���n�k�UsJ�5_���#9�ϫ�}��*�s:���Ļ�v|�O�A?t��bq�o&�F�xL +y,j��+P[��Z��ޠ�M�y���u����7)��6U�>(g�9|'e�="���|��R�uޜ�p��-ĺ�V|e�:�^�$�Z���"��s��~�|�K�w���F�@�܁���rҪ�d%���"#�O�� Y�_�%xQ��gTxS���J}NBw3��h�&h��ڡ�{�������P��a�\a���.UF|rFB����t���-:'kt�,�=2G�WY�!�D.�����5���Wi8�{�� �5سl�y�� �Cc�~��;7�zUS����r��cN1d�5�O��Qy|L��j��7�8�SE�c*����h�ct ��U��� +�9?�ހ�ڣس^�V>7C��Pǵ�Irag+Z +e��ʖ�ʚpȒp���1�xi�E%ɔL��%�I$1ILY��(� IpB'��P������o�+h{��$�qh�~�\�r߅uc �H��^"sʢ��!Sʩ%)� +Sj���V�`����V�4NaRR�Rl�֝��Iّ�]hϠ�ņd���6h�3�/���/��<P�@�������M��M,�"ϰ�2�E��*�����&&C7�9ų�>LH/�S/9��t�5��H����u��i࿏{�v�w��#�����A<��0��sqsc,��1�|�rl7��mF1f#���+�>��i�<>]��s�� ����4�y%����lH*�P_���r��s�N0+8t&�ܧ�H�(�)^b���)<��v�;[�i[A�:A=A�8�m9d E������A����ĵ�$+"�o��<8����ߐ;�ݼ�l��dw���쒓�!� �SAn +� G�@e" +�JG�C�)��)R��Z��СPfl�ik�RA�Te�j�~���N��ξ�>������e`�.�ɐц��?:����M�'��х���.;q��+��\̎���� � '���)'/a�����S�}�� 0�Pc7�!g� ��y���?QK9d���%�.�����5���u!�����}�0�kl����V���O)�^ތ6)���`�{`�5�=�0���XI}�Əu�a���K}���u\��kWr@n�zc�y�GY<�D^�%���-ći� �5�M�7�a��&X90��Os���6���&j��>괟d+�V곟Xl!y}K؟�6Sϟ����!�s=�U|R<������/��hr�뭁H(!0�XB��qa�C�*5�?�+8p�l�I�>�����|�� ��L�}_c�uM;9`ͅ�9�����x7Z�}�������k �-Ǹ(dD\,�FN����?#'')�3q˥����|x���Cul���b����3�Z��>�W�]���y�D&�Qp�$� �U\0�!V�s��%���q���@�ϓ�s� ,QTg~)���!Ļ�<�jg� ۬������13 BM���[�I��>������e�W�9�I���н�Fs�ƺFA}�p�C&k��@&0@>�r0���u�-�ys%� ��kT�m���r��� YWI���e����{1�-S׀�C���X�5�ȵ�G6(пјwU�H}�r���:~\e����������M�! s?Σi�j��OZ��{���$U1�#�1J ]v[>�_���mpmu }�)����'h��ЗQ*����8�fy +��>��=��w��$��) t��9Ïa|�$���љ�Y�;�6�����f�����_)������b��5خǶ��&b{�gb���x��O�)�5d��t;m�G/Q��'*;���������)p��X���U�f{&��wѺИ����P���n���.�N������Vjd~����E�=�Kx�:\?דDt�O��`X >��������-`��U�2��K��@ �+�\�g���Q�Q�����H/5�?����z�OR��z��^N���l�߰�Ǩ��c~g��;h�$���i=�� ��lYnl� �W�P��:l7`{�'�!��n��-�n_�%s�ŃtAz�����D��w�m��_P|��ت���]>�`�td��J�a���7�#u:��ID�Q��R-4�,M�GZYm����b�ÛV�͵�ǐy,�G���1�C,��E'9� '�F;5:KQ���L����䥅�L�>��f2����H����6��l�����q�~+��9�3��=\�ss���A�OǾ�ٚ��5E^8BpD��J8j�����nV_����D�����*���P�#����ĸ�c7|�8�V�3�p�w1���wG����6Q)pdGn����Rx���M؟Ld�4�H�R1è�:g(UW�^1DwA����ý��x���K�#>6s���1�3:m���Ԑ`�ˀ)����U W\�ᚈ�x�C���� v�~���nw��]�Al�}����`��hi�`,� Y̹��ß�I����)�&;U�����^U'�4$y��R�T�R����LPij���݊�.V8u��S_T(u�)G�9%�RQ�}��_��ι�_m�>�@�xV˻���JP�=Eՙ��a�2å�L��2�T�Y���rEm5�����W��EA{�������kߢ�^y��䶝U������r�F8����X�ʸ��HjF�Jޗ�O�����4�:���Vđ��,��Y�*�*U���"�� �3�����X�|�W�F�\�~9���6>���>`���b�:ɧ2��0ہZ��yVJ�)�7W�J�I*vf*��R��R�Y N@����9U*�!�k��]S���˵HN�Ze�^���+��쮳�9�ALk�=�YH�I�;c��Q5�W�R���>B��K�?/M�<� +�*�ϗ'�'�;�<w�rݵr���LR�g��9<�e�l���2<?Q�������|�lυk�1�C@�"�S�|�^PP�,w�My^C��\��������*�7T�o��f��3e��U�������Yɾ7��;�*�{G�ޘ��� W�!��A ��yA������-��@��A����������-T��P��C-J �ӆ�)1��B�&�a�a0�L�bZ��N��0��uȣj~�@$�_@���uϝŃd�S��d�ʌ�*#�Uz$��H�R�ÔmTbt���(�"�I݉�À)��a���%�ى���>����A׃A��A����?L�p�����ew�^�g���;���n� �,$�$�\ T� ��� +����D��8V�^���Bq�2��Z�N��6�#�2�Ң����>��q���;���9����o��yn�'�[鐫�%g�+{ ]I�l% +eVP�!��d�"Z��� �"�8��<�<]��LpUq-��@�ԉh��ܛ_!� +���c> )� $�Uc��֥� &�S�a +(��H�w#��)�<a�s2�9�C�>��q-���J��FP��.�~1���͵�~L{� ��M�H��i� 4��� -J�G l���l+@�5���c`��*�o� >40E70�c�ۭ�� +�W�/��p������dK��,1!���a7���f�F3���bl����lm���B&�xjG���������;@�� |�R�o.�����<���)��>?:�c�m9�&'�4�^6O/������3�J��κ�s�ܺ�b��Cg\��o3@�j�i�y\g6��^g��8���9�@/��}��o��1DN��Q�C�b����wD�&�A�����z�kN#�� �����-�:��Nc�nx�_����`�=��'�d6���2���!'#�FW�?���r&�e��R���R�;㚅�ͬ���U�[�uv~��&�v���6�IZF�P�I�`%XEn�E㮥>��yl�>7�� ,f=F���5���\�3KT�h\��5����!��%�>��擤!s��`������1k���D���-^[�c������s�X|��0��>���CMlFY}�s��$����A�n��Z�5d�||�X��`�5�?b �ߝ%b���&&ϰo_`���a��M�<~���H{xy7����1��R�X���:�8{�WY����I��ň�%@�#_&��A�%���WL����$��u��8�x�WX�Q>8B>�0uUJ�&�^�p�Kd��|<a �&iD� +�ɷ��e +�ׁ)Vޒ)V��p��˻�K4�w(�_�����B�����S���4n;6Y��a�s����_����"����xP�z^d�t� +u|L/�AN�Aù�#�����$^{Yz�<S�����U��)��� �[x30�I�PJ_e:F=��3��S��?)�(���G,��J�.���y�_��?��`0���!ݴ�o4�-���2yV��0���~���o4���}6�{4���?��~����"~��:��8��ܛ$�_���,�`xpz��&C���k��*��2�����h�K�����q�x��i�F��A�8E�8A�8��{?��'��i��~��y�Xԟ�t��N�-�8xl������w�R:3�v�N����k��8Z���~��^�i@�Gu>G�|Fw�UV�3�]����6�KD��_P�Lpo����Fp�*%���U~/N�� �)ڇ��GN���vSO����8��j�Q��v��85�mjd+~<L<��P6�A<�AT��N�ye�s|�+�E�ďX�`��8�M���Pei ����ZN˨�nv���6�vh=5��Y�k��^�t�7V��VRy��0B���ږ�;�K�[���Z�n��v���X0c�K{N9�.�v9+ b;B+m�vvgSݴ�~�߁�T�Z�ڄWߣz�O弩��x@������j�X��l�f���a3�.|6@���b��rl5��]��m�*fc��J�x�K��H��n2;����6���s������tr��1��#�<*��]'�`; db?�J,�~9���c�{���_Og���hgUmD����B�g��&�O���o��<O�2��:�w�E'�� '�,8��(��� lF��v5�U�h7��2W� +������t�0�P���q�5��;�@�H�1�q�(�N�{����Q@��S �t��Ox��ZV1�j���TW��S��UE���_�m�^\[�Ɯ�$-�z�l��u���5�O}��8��! d��W!\��T���Fl��U"[�y�O���d��n�8����(G�F�>Ɵ9�D��!�Mǧ�)���;Lr+���j�OU�,U���*���.V_���ZUb�R�mP���*��Q��!�y7^��'�q~��&��������>�@��^�gU��cS�;Y))*wzT�0Tj��Ğ�b{���*tT��(�Ѭ<g�r���q+˹Z����xJ~�!���ȗ| �qm��2�˻�[��U�2�O%�${*v�T����S�+Ky�<Mu�(�]�wX��&ez:���W�gX>�j�-J���sH�O�U�/�Zl���(����"�Tr���O��%*�HV^�SSS����I�++5W����0*�7B�MJ3:e�K�1V�ml��xRS���4N�a\�ɑJ���b��1ǐ'� �A9�J@!���%7=A9�$e�����(����ϗ���P&#}�����cr����?��8ʫ +�o6��$�,��fw��I6�l~vIHBH�&@�J$ +�$�AkJJ�J��RZ�j�Ţ��X��ZdZQ���t:0�V�v�ږa�V;������0/��۽�=��s�}�o� +|��ӷCy�d�}K���e+���{�y�3������s�lP⼫����`�M�2�|ey��*����(!�Uh�+ت�`���>9�ò7��RN-�F �����6`|K�Zi� +�����|A|�l�r� :�)w�r�(4K�P� +�Q~�R�pB�p���N��/B܆hD��Ѳ!|���PN�c%|�a�#h�p���JF�0ߕ�K�<G�r�����rG�*��TP�V���+�*��X瓀�-� �c +�-�[�� �1��!ʜ�ޅ���J���x��]��%�oʀ�gO�&w�]E�<T�/��Ɠ-�Z�MT��D+`�J00%F��Q������(b��'�h |},늑���]�/���?���<�w�}Qܦ�Z�u4�zX�;{�S$6ł:>ż�bxLq㤸S���n~ǐ�� Ѐ (������%��������]%\a8��g��|�JH�l��H�Oq�4d�i ��X��6�5������|Ն�oexhE��0W�!��Д��./�n{y����Y|<��� ���sc�Zl�ŏv��0���:r�����E�E��0��&���u���٦�0k�@3�������nI�k�%���e��� o!�y��a|��Hs�v��B�������!'K�A#KY�d>`�]�*Y� ���Ճr\t�u��L-�1G��l��k�����Kx_o��8I/9kA��!�h.\���c������ <�FV�x%�X�P�b����1����4"�sq}F(�vx��g�U����m��xm�7�%��g�#rVZ���5�d�c?��%DN�)�q63���c= +qŴ���yּ# 3��6\��/5���������Q��������%��,�iD e� ��$~l�6���[)��l&`�,�4�o�!��$>��2ꄯ����MS���~��w9Xeqrđ���&�f�������Nj�n���q/���X�6�,���a���o���������=puV?�&�k���y��G�C&g����3�d��L(9!�Qj��g�����ky?ۇ�G>-}����)��w�k)� +��!��#������6ko,c\Ɋ���A�(���f��C�~���y�Cv��&��ړ��{OK߹�F�*J������y�W��=烀%�����qe�#3�p�H���\����j�<9y��{�@�&�/|N:��gT ��"b�c�|'�k���u��4���J��g-�_�-�_�_�߃?���[�m��rr��z��{ҿ��r��GQ +�-�@�t���%��"}�v�̨N�|S�t�LF�8$P��3�\�P�E��M�/3y^b}���"��3ɹ�#LV��9�����2l+C +3l3�ԑ���)e�X��%�x?��<�>j�*�� + +�-t��L4���&��qX�sh^�x_�xO�Nj�qJ�tR{�L�(�������P��&˽�v�+p^�Z!��3��N�e�8�q�Y��������S�q��u�����s�a��(�C��2������M�~�]�� +�{mf�{�L��m�5��:'�`6�?�)�=�|w��|_APŎ��L�籟.���L��i$_�y=B�z?"�k��z��DZ}���p_!B<DK�M`�2:~b��9^_�����#n����r�GL_�����Y��^.�=4����.r��ى;��v��o'3��x��ll�y���`<g�����u͑�v�*�49���9�T� ?n#/[��ne���t����Lh�l� +�F����n$'�Dh��R-며���U`���V�f�&�&L{����s(!lǰ]��v[a�`���^L��S��7 +�U;M�ܧ�,����~x?�,<f�ﲸ�U`�s%�v��XS����jjcX~l��?�����m�nQ����p������J���U���=ŵ�[�}m�t��ڿ� +6Z��0�jT�ql�A!vݠ�g?�#�����o�^vP�}Tʠ��N��AV�QQ��f�^�\N�\��Z]g���u�JËꘑ*F:t��J�3Қ�p�c?���R�l�B��M���fb���fsR0���$�<�7Af�����5��e%�"���H'#ݸ����(�'O�jl�c�I�xӀ��D���&�l-Y�����8K5��t�8��&\+7����c��H���T�û�H�>%��}'�]� J�)���(<5�k�n����t���b��#BŅ9!:N���w����p����CȎn��$���|_�)n�S�V��"xf���O�*x�l�y��x��H�%k7�x�x�S�spd�;�I쯇o9r��8+�[@ +ԁ8�c�ҕ�h�C��|E�\ +;��{��Tn���������6�ٻ���4wX�܍*ɝ���yyr��g�E�o����/��(�3�?�d�o�%3���$$`BH@�����U��d���(Q�"��EED +TP�M(�Ȗ��-��Z�"��"K��w�;=�����4�s3_���s��g�}���ߖ6�(M@�rA�k&�Ь��%�vJ��^ ;��K���g�M@�� ú�Z|��u�9I<�9�v,�}��l�+팸� O8:�C�_�mk��<�b���$�J��.!�)A�-A�&�.~OHtO���H�ZsѴ��Ѫŭ�$N�V��i�%M["V��x��sR��ܢ�x:�{u�>4� �gq�YBz�t��}N�}.ѽ�z���D�Eģg�q�%��+ġ��~���Ţ��N��y}d8/a�Kb�rg���*bNE�}� +A�3A���"�M�~��K��[4�[<~M��������[���[�%�V�A�[���r�Nj�?�����]༆��e�y�|�1�G@(h�`�*��]�S�@�K�!M��>���b G��s��)4N��_�(| ��SC���,u%�7�$��ђ4���ų��`�6уv�-dw�C�a�آ�ļb�1a1������1NS�aȤϋ����8!5F�� -E�Sw'�:�{U�!�<�\>�y���0���?�*>���⎤�3�&��C̙"�,�\&57��K?�GӚ� +�4J�C96g! -dSCI23!�rm�3��A��{�Z"���%���I���cfqdZ$-�*��<�|6xcw!^"�0�Å�("�q��k�N�Ƥ��5�!96"M�%�3�� C�s��o��#�:���2���������4�s�4�/����%���RLZ�Jk���M[����f��� +�ESjh���rٓ���\�gRG���������B�%�xP�EWjI],-��V�I^T0���G����FZќ^IRkA#VN�,c.�'�Z�ϕ���W�:���g/�\��h��L1�$�i�RU�kku�RG[�bNڱ���E��AΚh˺���ن�TI�n}Rɻ�@S��3$�(�����4�[f\��"�� h /\4����D�SGw��Ά�݊��+yލC�F�3��gD�v6gT��T� ��a[>u�� ���������4UF��h���F��4�B@?�h�I| b�aX_���Mb���H�����Д���t��%�0>���B���S� �.���z$�f*|ըj�@8�:F�F�0'�YP�y�H�`�pΪ����4���M LH9:K��F�f���������� ��T{|���j��H���h#O�S�4pu�d��d��������q'�q�m*i~R����R��B�7�� %l�jۛ �Z�o�����Iq�@>CRM�}�jP�~D&�%�x������8�(���D�笚�|�9*Ŭ��v��h֘Ws/�w��QqN2��,����AI5F���(�SB�)RV�$��M����l�ux��U�y���d�.�/���(ǘn+��Д�<�np�5�K:ٔ��+�s�jU���dӨ��ݒjb��+�1'X�o#�M�����c[�:���>�ЬB�݆��j>��l[�����{T��3�8r�99��<��c��Bv�OU����d���N�[����`(���Y9�y� +6izEq���e-Z^Yq�խ�暶U��_WݱS��v���7��٫w����8�v�C� 1r��1�7~¤�Sn�c�o��5�{gκo��s~?��.x�?.|��EO<�䩥˖�xz�3ϮZ��k^Z�~�Ɨ7�y��m�n߱s�������[{���o����{�>��O���g���~�����}���Ϝ=�ϟ.\J���������J�]I��YW��Q��dg+��/R�K��r��R�+��k��A��ݔ7)nƃe�-ʅ��p��a�2b"NLUV܉w+3~�ܘ�P~<�yG+K��<�Ô�+/b�:��&e�+8�f���M�y[�sP��>�|����T}�<:�I?(��)�.^J�>�\ͻ%�~����_�_b2���lv�����ǣa�O����G8�#1<�\�|��LҚ�7?3'� �t뮶;�f���[��m��q&O�6}ƽ�fϝ7��[�x��e+��.j��[�ȤƟILiL�T*��N���h��j�~��o����'�G��~8��3gϞ;w�?]�p�����ƶ��e����hbm���֮-;zW_�5����a��3�Ж�����j�����sӲ��Z�d���O���G. 54��PCC 54��PCC �w +����u%^��]��/��9��� _ԏ�����-~k���w���e�����ܝ�V�����O��Ѣ'�~�H�PG �VF��ծ�=��Ͽ1���}C&|�w�w��>����/n{y� /Mٵz�o.���Ѳ{�_�d�'��װ�6R�k]�/��̾�����{t�t��p|g��v�zf��fg�i;f��i�����N���д2/A��oF)�TLP.����E�["-�����)'-�߶g�/������y�ޘᎀ�N"_� +)�U�k�a�"a�>W�~�ՓĢ�� �?J!���&�v�e��zz���c��-̣>�$CkS�F��kCe\ ��)�j3J�-)|��ʉ鱶d(;���nZ���s�����>w�'C71}f�Dm<W�,�Q��d�uY�կ���b�Oi�6 �|� :���n\h���[��S��<Fǯ���%��wE:��!D|�%K���Xu���# ���?�װ +�����}��~ϴ��v|�ʵ����M��4Yg`&_�`3�Ȓ; +TEr-ZF�b��J�_��6P���@���]T�n�m��=1�l3<q�Z��'J��7V��`��tH.]�*��G�S�¤�j| VJ�[(��{V��5o�'���92z��ᴫ{˔�z؇"������ȂD��A��ز�z|9ZN��6P +J!C��ճ�'�����:ڴ�^tSM_C�Ƽ������Dz�1$���$7��M��0-���,�6P���XP�j���w摳�Z_8�l|�rE:��Nxc�����~T*�� v�2pFB6����Ŵ6 �v�eF`����5m�gw��8�Ȁ�Œ9�[y�ވ���X��DBGG<����3))���若[�زl^��ў=��Ǐ�SϞ�)v�����{7w�o��8�2� +���bpO�8�">����X4 >J��6 ���3��O;F�.���^�h������W��}�F�]�υ� +{��E����"�f(��/c�`�4���Ѭ����7�h�^!}w�>8�5��K�h�ʙH��AΡ �5�.-F\ |�{Gq�{���im=�/���Z��t��Up��pdK*8�+��#�K����D0�� +�3��{�������7���1�7���@���A�����o���Pa��.57�d0�~D�K2qH9�y���BCO�mHLU��1tՔl���2�"8���dX2,�K�%��e(�%6@d�u= +�ם�����j����^A���\�ˎ�*����$�,!��2.�K���Gv[��=����ZP +$�A�=]����+�#��zw�^�X�aF�*�b��Z*SR�D �&^\����4��h`C�͏@v~'��x�<\�վ���A�G��i]8�^@(W�I��<�}I�X�A�-ed�YÍ�DV���a(�e��������Z�g:8�QCHz�,��I^���P�Q�%�x��I�-��0�2����,탡�2Ad��j����k.s�[�g-���H�Q���$Xi}y�J&��E|���N�e2���@ZF��������O� �A�F�#zw��/9Ќ��ވ��0RYe�J($�9J;�C��`�M����}0� ��P��/69������&�I��l���됼:y���*LYT~?W@l�ͥt%��SY��Bf���a�C�*�Pn�;�ӑ��W�_�ހ��}��]���M��*��'�(�b��N)�%�O2�qbzȅ)}���^K���gX $'��mo N�_u_q��� y�[�r=�P�"fU��dV���p���=!�:qܴ.K�``�ZJ ������s�^�9z�����5��-���&i *ઑ�9u(I�#O���bDQHnƖP ��VKE��2�j���Vwn���'�\G&���Ǽ����Բ֠�m0�NJ�\���ɰu�U����H Z� %4Y�@�"� ��5P��o�g�1i�p`䉳���ߦq/�����g����(M�Eɱ��Z�,��T"�V $�K�M��2T��jA}��)���Ï���9;g/�(��Ė>������Ȝ�f+Z��5�b�� m ����@9����2v~ j����l��̆�q���'G��%���7B�#~�̇���ސ��t&� �n�磛#X���B�.���x��ю?�S�]1a<�u��톖)����/�W/�z�fn��N�cSG��q�(j�9, ߏO �%���Ɍ����j��1!��@��πt�/��,7�]i��u�䁇a\ŎU�q\�3:Z��:.g� +8g��: +ElA��,DBHHB�@¾�- �@�%1, { �E���" +ZD���|���>^���w���>��L�p�P8:H��"���O�l@H�4�@D E> E�ߧ���h�x3�{=�p��~�@��bI��b����)���y���`o%��6������5~)� +}�Ozt�Gr(� �y����Ć���_ x� �{�L|�@�m�T������+5s7*��N�ȁ3GR�]x��څ���)��|9x��^d\ \dy��b��.pP��d��m�k����k���m_����"8��'�q��*�����)�c�{&��B��?P�|��5 +b�} ���\����hX�L3���5��j1|����%��/h`�?�b��!4���У( ���^@9� �S��a��6���������r����%'����P�b 5��A�(�=�)|F����I�S|F�!�'����AcI�n#V���4j�Bkn�{C.b�E����aԞ���=�����a�g*"��t�V�P*GhHL���f)��sU�Q�͚H��%����P�Y����~5�[y�6���V�!�zgkhpw��K +L�y}\DM�3�3�]W�����dk�i�jJ���$��#d=U$y��A����� +�7B��-P����%P��_6�`ׅ3�$�����}N��+5A�IL�6�2�U�<C��TE.3�Q*{�Y���3�7@9b���*������>���`�#%�yWF�SE�E[V\Ks2�[��nh`�Ա�Cb�x��.�蕽�|Đ� +Cű-����N�����V��>ߊ�=j���Vy& ����ޠ�e����=�����<S%�tX+�gJ�y�R���3!鱿Abhv������W<���Z,�2<�_)�*��4��6%��S�K3J2x&a�`8?A8�ͮ��bK��� ������1�8ZA�E�7]^s�������̈́<c]DU���T�1��v�$?�P���g�G�S��Ӹ�i\���~1 �b�?Cbh��4�Vo;/�/�<=��������h����JMm��^��V +�z�E\� ����N�^禗p�$Fs���%�A���A�h�SϷ�zO��}���G���-��rc���)���.&xũ���B��W>�ή0�ۯ��k@��G� +*���h�����\���̰O����^LA�� m��(U�4�2fw���O'p���xa�0��|�YPa47(�t%��1� ��Ο;�\0^��vw���vgԟ�g�oB����� l�����;�e�^��cdUd������~�Pb07(��Pf�G?���^��;87�rz����ĸ~�_|�)8Wх�����5�S����S���r�I���Td������C!b�@��As�/��<�q�v����q���XMCA�RF���ӯT�bkt-�#���sU���V%�U�}8Y���@������@yd���;f���ј���/� Oy`���Q\Gg��Cٝ8 ��P�&*)��&b�W�l�M�@�fv��#b�\MG6��l�O���?����w3.�}��CU(��&:����҇+au*�mDYD+�6��Z�Q�(��������~ʌ&s��P��cP|��M�� 3�[�ǿ�3������E͋KA�IT�`�9�IK0�s� ��^R����E��`J��2_m��M�67n����Ձ�/t�]w����I�}�Y�S����Խt�N��xh*wǼIH���N�d� �r0�� #��oH,B�S�}���ĈA���7��ar�����>�=s�t�D�[g���n�y�QA��A�$�L�N�'3 c�8�FB�m}����.)u#=�g4��b�4~n�o�����U��c[������Q8���ܾMYBy�͇�f�BHOI8�t�8�:K +���|�H�{���Ƞ�Ld�T�}ū���o�ݸ\7�gMӫ�[e`����G�p=���ϡn��O�"��@E�d���Y�s�@�\4�yj��lf��lV����/�o��.�=ٴB�j�:�*����n��%}����l��Nmg[������S�e���JK��n�/T^������P@QQQ@@PA/]�,�Yi��n��m����������������y�Rؽ� +��e��[ +���C�>�yE@��)H;����a���#�s���sE�fK��ϖ��?��,���?_�V3|�~l����EfA��x8䌃���X�H��?B������r��_(�{J��h3[��^^0_�S �3`��p^A�����kO�������o���t�7�$磐����dm���Ð��А +P�+����6/� +�f��^ G�p��1~��)��$�T1�|�RB���.���玦�T�M��I����千�����.Yo�A��7�7�7��SC�kCɦ��C��?��#4w��PO���?�N���fo0��qZ�bNY��Ln���~(�VbOKm�k�Ze�u��8�M�B̵����Օ�?��?��#Ȏ��,�kN�D�s�:#�:'�>V\�9Oe����t�̚R�2'��L�掞8�N��h�mנ镡1�!?mb#�~GPqEfV�� 7UO$��K.�R+�� �\f�9�\cL��u%�u��M�Xy�ߪoNhkG�W���F5�A�k(�9���ԁ������Z��$)9��3�Ε���4��R���f�i��Nb]�6��*M�Z�I�nAӉ�W�2���v �-�&Ġڷ���6��[�ɐiuL� Ye�>�3��YK����@e����6r�U���/"4�S�jb�M�Cb�"5b�@�����Ї���IUB�EI*w�:S�W���.+Է�[i�>9E�ߔ+�U�K�r7Se@p^*6���A��3�x��!�Y��!,�!*y�-�vAN��E�M&A���Cӫ����c��uԆnv��C���$e�^X_/.bm[rĠ������yb �g� \����)�ƴ&} I��Q�RV�������m��z;��hg���y�n4�6,bhغ;WB;b�>���t��v�/��KWt�:A`jNm��g��\}CE���Ŵ�6N��Π7Ҥ}�4E��1�1��1t"���/,�1��Aa��O�\4Fٴ�CA���J�d��2�ȫ(��8�Um�3��R�HaD���� ذ$[��n+A�����?��� +��cSΙ#ͺ��vU�D֜�Zא��)F�������/� +(�F;�Lj!������ +14!�� +�r�f���ס�^w�������Y���]1|�6�Q�HUU5gv�Ź=�uts��ԚSͳe2xRKFE�MP�8��1H�|�Z�Og��k��1����5�zq4�`��.����dz�X�FPV(3�Kd��&Z/��a�s��b��P+�K�V���P��B����CǎOf�{�~4�������]=|�RP���IZ�-��`�� I-����|M������)�z�圾�Ђ���x��M�E�������os�?����Io���cA�����?c)ґ��]�쉗RtI��ZbA�e��E�HE�)B)2��*�����A��W�8/�1�����/o\��#�=�s#��ǒ�F#�l{t%�/N�Փ %� ʸ�tM���~����a�B4|}���M�G�5��qtl^��������4��4r�a������8���((>�����' �) 1�tIDIz��*5+���@}������;�X�p�gӻ�G\�^��k��m'�#����!_ٴ_D�TXr��R,-s4�A8K`��qq�Y��9UX[~M���6�®���QU�A��۠]��t�w�\����ԮU�G��g<��<?x���_(�>6�`**9{".#u<��p�H��,���\x��;Jg��g�������h���j��_9L��q���4�ku�˽N�s�w��y(��ϗ��dyI���K���;�N��$�'s�OM�g�]/� +��$^���y9h�:�жr�����L~�`�v�@��� ��(�W6x���ϛ<{�q&: �YBH�Tl��������)�؇������Kc�����ǣ ����ڻt��K�_gaM�YǙ�q�ZG�u��ֺUjQ���V�n�����,�!��Bd!K �,d�D��PZ��q�:Z�Z��g~�y�:��E/�����7\�ߙ���}E;�Y+�/W�� +��C�A"��f�?�O� /8�עг�����V�:�sMx�#��L]d�ƨ��ӯӌy����.��Z����rp_��O�F�����6ߙ a����^���c��P4����#�@94�p`���X(�^��<��|ͳ��º�<ض��J�smxo�k��B��i�팄�Á���}��C��3Ȟ�P�'�{���$���N}�s]����� +����݅T��f��� �V���;�pd}l������I�m �t����?�n;$T�Ǡ�C? ��E}����e� {,��k �|7�(���^������^���B�|X�λ_�+�'QTy��Zs'��1��]�%��~"��0�����]�_��,p�� ��/ ��P�X���� ���/��O�'7�'fi�w�Ԭ�u�Ӆܲ)���5��6����2]ɞH�iO���Jq>� 7 '8��́j�');�m{��k���&h�ho'��'D�X_���A!NW1K�)��L��Y���[�Ff��Z��yon��: L��㆚� ��P�5ۗ@��+@t� =� � ��YIV�S~AƷ��ST*e�\W;^��^'��c���F�:�/����n���w���t����@s[\d� ���FP���E�t$�H3�>�eOs�J�0)�/(��k��h�@>�Ӭ�n�f��v��hN1�{�����vg�o�'���h9��_ ����>�u6�EgZ�cin�=aq�W�u7h4�(�N~ =�"���l'h0SF�I7��21MG�M�l/ 4d`��B�mȠ8�4'<@s�gV��;5�Q�9�Ts�ny�����*�r��Q�(����FR�iھ�,&#�{Zs�Jg�K�|�ݶ�� ۷��6@����|ftgB��&'=Te���H�[��H}�����U��{˚���6���˪���Zs�}�I/��S9�K�� ��'h߷ +T7�����P���1!OI��=��;s�c��Pc��ƪQ���m%�WY.��(��I���M���7����ـ������� A�d�|L��g����GX"nJ�Vx�+�9�J�%rS}�Z�d5LV%��TH��d���Hm�/6��%���^��A�fdP�] =��{�}���-*�[[|�SJј*�9(#6a�"��[�R��)����|����Υt9Xe*�\of�{{���8 �o@��eЅ��փ�o�s{����Ȑ選� WtE�����i2�ȕMe*ic�A�fa<&�ZO��ki*��QC���P�:g�Zd`"�<�A72�����`���/F�L]8�|ÖT4dHc`JB�FF��%%*��R�md`l�ʨ�k��JF��L�a4����g�!���MP���}ޝ��n���I�#���\�I��H(t�S�M�@� �Z�E�< Y_'����lkW�On�:JT��KI�I�lP�,d�.92h��0�u/}ݾ �t�ZX���i��������ڐ���s�M�J��LGk�6WJX}�"��P�b���y��Ѥw6�[�� ܺ:����y{�����G�=�~b��xH��kQI��q�F�ډ�s�B+GC�+K��U�b9#���2�� Sڲ�uAd�;������ �ܗ�����<r�uz��������D��X��bbu��ȳd53MĎJ}��X[��S�L�P�-i�.^�7���:g�zd�C����z��_-��?�Zs���-w��yޘ +�0o�C츚P%��R_;�!���Ȋ�]DY��K���lC��ɔh����$-�q6ଜ���@�e>�/zn߽����ʯ'm�y����t����Sq��ф������̚�t^����s��4{�g%w��Q5g,lm�E����ڬJg�d����m������?����g��z�������N��P��*��|3�I;��! R��ʼnC䖸5m��ke��y�����_goM�i�#֊NǺ_��ъ�b�Z�Ԋ"�(� D� K�!ـ��!!�@BB�� ���"ua��(nXQ���HU��^���h�?������ܿʪ��@������-g���{��~��o�٦�w7�i��aݯ�'�^� E�Q��G���� ���T�Y���̂ȟ�Ea|1��Hx]&�����]�-E�"͚�`^?�e��ܡ�����aWtL�m�qu�~���)~�?�;I �_�)�O�Ԅ��i�_hY�=�A.3�����+�ݑq�+r�nW���-�n����/��^2����禰�g�l�}'�=�$��qϛ��2� ����&���[ft����C�2.L�?+N +z*��)S��hS��es��s�� +�����)[+�,vU%8Z��y�p�s�� �T z��;v6ُ�.3 �-#0l��&��. ���. x����D� ���ꞏ�|c��es`�"5�^Y{�����JO�D�'"�E�52p!�8��� �;B�����q(���7�n���\���v{>F+,U�y�v.��5�ก +.�I�- +v�A��@��Dl �� ������8p}!���������:�.uXb��,15���(`ռb�Yȅ�K2��U�w �ׇ��� ���_ �yC�7^���R����@�qX;��o�;�w��]8�|�6s�\��F����V[�a��4��,�/����A��qp[��k=��;�\��ȯ� f�+�7�@��!H��26:C6�� pm� �m��l��O �+8{��q�\ׁ��D!�P@r��ԣ�a��g +B�dI�R��&�ԉ�q���MYϢ�hc�.Ɠ�ޜG��{a�87Ns����o��5d�X��`�J#�o;���A���c�c�x�⇿��L��N�HV�<O��xF����62G��F���_��#��yCaC���[yh�����}!��D?�١u ���� ��(�� ���K�d&�̒�=KU�'U�Qjx#$�~�Yx/����h0�_|%|@t)��M�FLd�0�-�/$�m/��ߠ��� ,�#]@��N����4��<����r�Uſ�P]8Ln�"�e�1]�}�}}���I;�"41� �7VP�����@�v���2���~o�i�E9�����ќ",�`8U)J�*�A�W�Z��1]���U]�K���WN�c�K�����j"�p��k����~X�u{_��F�L�UB�� s#��0]"L//�j��(��+$��7����S�ӭm"]V�Weh.�/X�m�kg❟A�/*����vPs���$nF0U��R��6*�p��*�)��g��\IQ��&���$�:)�SL��w^��\R�~���!�8%�A�]ڃ_���}���x��B��6>vL������7(�I���������s�U g� F3�Lc�L�.�S�I�TS���<��F|d�Hw�*��@��4 �7v���l��%�=T'�eY«�,��<���%�n���5g� ��ڦ���fmR[��z�A�ҭ-K�U��A�i�"��2�=��n�gM^�iS n�)<�q},��&�q�,]xQ̐ux*3�@gd���� +cuvu�&�ѤHom9�v�(�8_-ͼ�B�"ΆyP�����a)�!�f���Z=��p㭡��є: +�2E�)˖���*�����kX�F%��Tƨo�����3M"ZWM��M���,�����S(CU�K������i����s��������z2���*h�gʌ���0O��֗��e� +��]k�[�F[� ���TN�M��A��Ag�����6W�鮣�//w�� �ER�$zGu��Y�.�-��*�\]Y���D i,�W��y:3?����i5�z�[�&����1T oe���м���g]l^u����m�;8h�=���Co��?�P�"ՖgW����K$��BQq#�Pn� �f�����[����~�Mx�Ab3Ԉ�n�����m�����#�Ǯ���� ��F�4i� +_���(�J���'�u���q<,2��Z�VP�\Q�JUd�}�=�5@ !a ;�D�HD���Ȏ������V�X�� Et�>'�s1����{�����.b�X�ܛ�|�mz^y3-��9���D�^鮒d L���4T ���~����m��8d{�嘳�����@�_h[;�V'�(�����PJ�I��ki�)%�F��'�\��WT��on��u���wWI���e����U'����z���+�fjo�l���/���c�}I�����6K ���m�+Ψ�U\�f\�V�����nF����e�o����ÅwE��*I���> ���fh:��֥��ݰ��˧֚�.����n�&���(���������袔[������1��Z�(�>D$h��$���k��+{*%��KGu������S[��o�{d�<5mq|셽q�������j�?�?�gpzB9��(��R�F/oeV[�׃����Z�E�-M���]5���rI@�.i��'�7��crk]:�_��Sz��p������q봋s���d�����2h�D�����Ӌ�����>n�_��ҧ��ʫW\���[��1(�\Ax*�P�&��e��~�Qa�ў���w��5�rr,��`����)||�dh2e"�1��!>L������p���W1CBz��m�M�><\( ���W���yPz�ѿd�f���-��-��hxomP���������1^�R�#��g�¦iI�����IV��D6��)/�D��~R��:.�r�����Ь,���N�/T����V �֭]�,[����y��� +�)u�߃�����'/RBHo��H���g�����y��Q0�� �� +��L=��E�D��] +D�I��(�>݂�]�+��Q�[�W���_M��[�f��1��-���c�C\ÿDa��)��5:6`5��������\��,��+���E$�Eq�$���r�V���7�z߂jZ�'W�ۄpN%�4X`�E�3@D�߅P Y �&(������N��v���/���W�m����� ��FI,�ˣF���9"�/*J��~�����?���*\8 �'C��|�� Xd}�5��1RL܁i����k�|s'Z8B����$1�"��۳ u���od����8��:;��r8� ���8�����DC��+D�8C��N@;�)�/S��~����l��� �ZC�D�ݑA5�"�*{&#U�d8p@>�3Nl�]80�� �{�`��������m��a �CVs��X@�s`5�Qd�3��c&�?.��n)T�C*בֿ��$��\�)���/�]���N`��,w[���V6/S�W1���F@�g�� JU�T�C������4��$��"1�� Bg$�*A��H�P�' `�jAj�9H�7Z� $d;A, Q�^��j�C�>�Ak�6�*���8��$l�(|�g�<�59��jC�o�_j@nE��Dio�K�� ���0W�, `{k���X3�_�*��y���B��J�Z���J�EZ n ���$/F.�D��>���y;�5?�5�H�oC�IH>�,��1S��d{jC�<��, 5���uj�S� h5�<��:y)�!j���@�Ky4@��ݿ4��$i�g�>�3M��M�$" q������:��y�;��*C���a���Ӈ,���.1ҽ?'q��L��.�\�|Q�&����$NzE�s�eP��O����N��M%��O_�P��@<Ґ�����ֻ��<e��h@!Z�� �jY�u&�o5�C\�D.�S^GU$ͅ�`̐n1���������p��=����p���S�����4\:�����9�x�� �V��a ��d���Yˤ~Hg�/$���'�g�K�'�d=i�N��%���t=�n�?e5&S74�!i���HC�������J�9�@��ї����^�\Z�;=z���4C�1���O#� +��FI�%��>aOЀ�~��9x,�&i<��4��А͛�l��G6�8<d��2K��^�QM�k��CE�u�:N�U�b�{ӪnE�D@.K����!lH0B�L�ɞA�a����V��b9�*x�Z�����{��������s���?Ua^��W�^�S/OU�&=/����ԇDs(KPٗ.w����F�%���vB��1���.i�o� 3�)���� i�C�[���s1����ZО�̞��7�̯������L"i��J�'3؝�\A{�D�JP�[�uC�Uc�u)t��"��V�����o���Ydϒ\��k�p�����yW��icvR�5.M�ss +�d��V¾[�6����ʺL��:�a�)�V���+�f�ę�L{�j�GJ6;o�TX +ڣ����ƹ��o.yM�G`��bF)���B+�Do�S9&j����+3%*M�F�̹��g��E�� �[���W�>`��H�7K���� +�A��Nm��ta�Ls��)���J�M��� +���� + +���.�QY2%Y��")u"b����b����] +q@�$�8�@��50���E�ڿ�����p�����������0̿b�����v9��Y�C���u�7D��r��V��,��8d��I6����Rr���<ĵ�H i(ߴ�����G>��trÛV�/,أO[C0L��]5���SI ��=��V��E����fKt��XBk����US�j�OL�~Wi�_ ���� 鶅��� �^9k>���=�퓝�#�ۃ�͑Q��q�Mz�ZA(VI�Xb>Y���ʙ,uIr-��Rz����V]@�j +齒B� �� dW'`#g!��ƽ���ß�o=��Uǹ���C;�|{Z#"[o]M��I��j��RE6�')�oTWV�(���V�X5�֝��U�[�+�+����h(��\�A��j��|l>��m��/^������7��K>����fs,�ؐ�'�N��YJdXʮK��2_��f dz��h��F<ߪ!�z��A�=P�4��;A%r�@��Esw�]���k��ЙM?_p��8�#,��-:Ym��+j�QY��ņ<YK���G�*�h�ez}��I�$�jp�^i�x�o\GJ�9���t[�i��v�O��=W�{����y��{7����Q�UmqY��d +݄/�4�s� +��b)��R$Ī8�V}�pKs�ة����U����u_8�t�#Tov��������4�t���_�����6�=s��ꋈ�w]�`X��Ҋs�dU������4a|S�$�$�E���#L���M����aT���! LdN)�σ�M�~k�������c��K�_o}vvo�8�~,�x8<�⻘4j���������̒�by��Ɖ�_Qy�"�Z4���`k�0�m�z{�i��4����hހ������&ǁ���qܵy���� ����9O�"n|�@�F ���'gR�> ݈����6fY�M\d�2m&V�p73pp�,�g�n�W�A����8���vx2�5����������c�/O�O����p�>D�962{"1>m"��S^��gEYQ���ϸĐ�҂����z���6 +v|��y��l��@�j��G�r��j`b�C����o�+ o=]�ޜ�����������3a�93W�g�C��3"㧉1��Ը��k�xI!/���)uJ�Tm��s�E7��C����j?E�X�z���f��?l^��s_)�����;��x����ًٳa'�f��K�����f`cf����K��ʂCgy!�$a�~W��������}g��{�e(]P�������;#Q7��l����a�� +8�� +�����`�� ��x����d�( ��y�B�r&�g�������p�>����;~�`���}���j�uB����R�*G!lu)���)�6<ק�i�x�� A;/CԞPH�i� �=H����1�=�bPz\��Qoh�<-^����(��e��CUM-t��Z':�-"��%�,���X8�.λ����ی��-~����^��m灴�\�qJw�֮� �ud�O�~�q���|�2��P�G(��a�c>lpN��������j2[�Ke��8vGEłH"��BH)$$��{$!�H�*(( �X����.l�"(�3���{��9W�?p.���Y{�o���fF���0����� dI�_���}���R����b/�Wx"x�W���]�^��<�������|�s�8ųq��0}<�N��b�8��!�����cV�x}�s���<O86o7��� (G�s����� �]��p0n�".��K'@22'0.@t��gC���:���u��m�t�vHzI��π/9ت#��; +�����!�:�� ��.���7შ���Q���l���uXk��@q�������8����2�.��y����?M�����*��{&0 a���5�5�sL�CTW�H䓘�����㞇 ������R�L�������S��18�@p� ����I� +,�.`f�@�����h ����1\M�פ���ċ�_�ſ�mC�Dwaޠz����{�q"�&ޏF���qH����-S��c�9����C�A� 8�=�����0�냁��obI�������u�1M��諸��6�.b?�)�'��|?�UjG���o����� ����?N���S��}H�A�� ��� �uA�^�0�Kpt���Jˋ�B.B$T`��Τ���HN���&��6s�ރz��:��hG ��F�&\���ȈqHC�Y6қ"�� �tu�h�6�2� ���@@�e�� �̒G}��ߥ�G���?�մ7���W�-�����1��ۨǼ�Q����}���W䋱�D[��a�=����<�S@�6�{��9�n�]��� +����|����W�(�m���j��$2_�+�ϒj�=���7ewb�ʯ�t�[bs��{3��i��l�E q`��B����3@�{��C�ag0���I�y�&K��<^R���K�e<"�ywqE�Τ*y{b��V�e�u�mus�]E���.�Iv �9�Tҋt[@�@\m�5�@��;� �g�5,���z�y� ��C^��p..蕒�\�Jy�%`ܡ+8�э�|�U|��%���ۤ����;��Ԟ�ޓU&?��zY'qϙ���@Zel�yeH��N�ι`�^:V|`������~�yI�ϴ��n)����0o�$��t��9ͤh$j� �������)Wr+q��e)]�bB�Țړ]��˲P2��AzS����� +<�@�%�e�+r*��볢CR�*�U��q�+���RH��s�����*riN9��$��XD�e��:5�}���k���m4d�O[i��A��K�F��J���y�Hu��������6���(���̌�WˑJ�XUä+N/2X��L���<3�f��ڡϡݕ�h��Z��-�9А�"Z���y +��=V��CM�����]�j�|��bCڬ#�ب�3kel^�P$-�*U֬\�9�j40���sf-�E�h�U1�� +�����gHG�+�@��_7 Y�@��Y��{�U�z���֧u�>w���[�1�,b]�Y���H���Le����l�Q�uҬ`�ZdY-IV�Q¾�gu�DY���@��< ␋������ +��_�x:��[9p�ˣ�!��5Q�-e��'��& +㤞�-Pq$F�D�k� +��(���ܚ|�9�ǻe��nkx�n1��P`�#���|"Ȝ���̍��������j�]�w��{M����E�P�[[�L(�'1�F:רgK�j�J�P�ER��+.4�ŧ�3�M7�X�N-Kt_�>��k�DP"ga^c�'��q���q���K>˞^=�Sgs�ו��G���Ŝ*OJ)*J���S9ZS�X��W +tr]�:ǐ�,ȣ+*,4EC>UuӜ��Х��K�e�"[�q`/�j�, +�����I�g�M��k�@���76|t�Ŧ��ڳ1ѥ�|~y +M_La˭L���Q�M-àͥ�XL$}�9U�Bȹn&�;t$�=)Y�-�0���e�p�D��`����a�nj�{9v���Zk�g�oaG��Q�u�dC ��� g K�v1[F?!RS +�z��dH��4%Y��0��a�N����8�������u��)�H ��d�9�s�8g��[�lI�JŴ\u]I㚚�G�1�h�h��js�P��+]ռ��\��}�x���n�~����sDr�^���G{����TA�PI� �=uz�:ڬ5>t�k���7��ͤMw/uk� zDs7�u�#)y��)�6YA�O9e;�푷T֦�P{@���!AsS����w�ZCRs��?UO>�R��j�&;����ߨ}�����M[����Z +W��}�^�w��76��M��U���K,�Ց���=�8�RA��by������ڰ�s�ԁ����֫� �u��TqZ�V��"���D '�(�`A��^Iyݿ�20d�u���Q琯U�P�������i5w���["I^OjfƵ�<ɕ�awY9���*�����y�;z�Z����]���k^wi�T���4��ل�ݔxwg 10dB���V��I۰�ՙ�!NG�|�=���x�a��~i��w�\p7?��W^��)��m,��m*��m+��w�4X��Ƌ��k/TA�!G�Rpn ���.q�.qst�� [��q�3c>V�F���n�=R����R�L{�� e���"I�bw:C�/��8��hΎ��C���B��h$3b�\�PpJ�x֮C�����y�K�2c�~�����q_vd��r�T�]��p���t��Inp����<!�I�ȍ�N�0Y{،�\��1~�dsR�d� �}�0b�(|��(ltT%4���4��_��+����g��Y���)���F��i���r��M�2�!s��:��ω}����27��, e(�"������G���7EG.�C]� _����5-��;�F���E ��K��xW�h_L9�Z�a�x/��wa�E|-�j��h�$$8r!��B�+Ytn�E��v�xE�7'|��_��B���{Ax�R�9�躬N����5��_��J� +��ai&ܖI�m���UlDZ1�XK�u��ZO�;rpl�@�}v;��nS0�q�)�-��h��._��t�� Z;Ո�^ +�8�N�a�ZVh�a���Ep6�b�)�f1��D̊p�V� qURV@f�+_}냊5^�Y� ��z��4[{།.���N!�n��Q=�A)��Z6�4�X��=&�cຄ +/�"���˼���6pͶBh��rwr,�"�����m�گ7���8���T:�M�� �Qm�_��a�Ά�& �:T���q�����e�_�!l���8��t����C`d�� ��G��- +�mPjb�jR�J�T�F\G�������2cdD�##a5ҥ�H�߈�*'��Bxr-ې�� �e_p���s+� }�`>F�"�S�p�},t�66�!l"F���M�l��� �I���3Ff�9�X��!�A�N{H+��R���<!:� �y?$�����`�{C���T��3�#>ƍQg�S�����w�y�*�w�lHڨ�TG=����c��ps�dX"[��,G��\�Z� �$7@t6�K�H��� +/����������i�m�>MK�H{�� +D6XkB�A2]d� ����(�["O@~bN�{@��i� 9���Z� �F���?x���9��� ϙ��a�c<�M���c���y�*��K"ِ�^r��۬�"/c��cW�������Ȭ�>iǩ���F�9����ݬ��ۜ��{����1�H�H��@���?���������!i�&R�i#g�.���Q�i��@sTn�B����z!�<�y���1v>��eJ�?�Vެ�#�Cb�h�w/e�=(}�z��,~L:���%|H�Şc��d�A@6��}�Gn�R�Ũ�j�=˱�j�*���n_J2}���r�cf32gҎ�$M�I�ٔq���Q~��7���ל��G� �v�fOJ�s�E]�Y�*H�P�����k�P�N�����a�Z���n�Z����we���CI~�T~%c"��7*k�HN����T$�����K�c�͢ܧEw�/�sG��x�vt�'��g��@B6$�7���ϰ&�5�o�T��#�G���:���i)E��ed��Y��$oH I��ld)C@+R�����>}/�Ç�����}����0�7�H�^��0i�ƟR�O~����O$�,�i��,��K�0�)QN|BȢ�`������z�@`�/�A\��$�%�%�!�5�v���_�k�]�7�t� �7S.l����������t�9�nF��f����=�������ް��|܁Uǵ�6�[B��!�ڐg���izn�T�[$�߮�s���ڀ���x�oʐ��8�dg�W�����os0f3iA���p��Z����@��bڢ2�Mq?��n���.a~DX��+"��U��P��"����"d&R���0���w~T]����sJ/�)���h +�k0�x�����Q�bF-��&��*�E ��jQQDkbaĠ8?R�9�Q_�3��kỵ@��`������ �ܦO��_,�Z�_�t86]�a�ɿe?����'#���a <�R�N`V0epIt&����+�٤FI�7)��D�F��P^2�)�$9enUH4 ��q�!�uL(�n�_�َ�+�;Wc��T�����]v�gGjx@c5�FȢ���LG�Ŧ 1����RI +�.IN��迈��< �E������d� ��^m��d��F�1�Pa��]�{f�펎��_.�����h�"�&���%J������L8Y��V���E1�F*dޑ Y��b��S,A�u-�3А��Gr�k���uA���K�[~�0z�d{d��څ� +��U�{}.ο2�HP%G�s%F�(��1/S��UJ�p����`������)��F�V"�Ѐ�̥ɑ�����+O�����湖�vN�Yz��r�G}ú���M����dG��ҩ��X�\ʇ��@�.���KX� +C�,���c L�3��EGD��s��#9�h���h��>����dë�c�V��[�L:�<��W^^r�� ��M&�31��\_.�s�)"�$WB�I)� 2��_F�� ���0U8M_ "X�� ���=SvXk��Λ�����n�ky�^��ٖF+u��kQE�ov1����J̥�� +��������) +11�8)<�^JH�'�HF�'���阵�(�|x'ȑ,��Р����+��=�t'��n������L}��eY��K^m�wZ%.DR�/��XJVlt��K�I����*q��$X�- �b3'a\�t�Z� ��� ����������/���}tzc����Z��OUw�Z�a�2�0Һ� AMx��B�.g�D�Ʊ �b^HQz|��P觪���D~Śx�3N`�4}-�b� �Q �_(Pf�Ziڍ��3BMh�����4�1�w����~�/y�-���`?v�@�$��P�\FpM"�O����.�c��/u��F�x����,��Z���m(��5ۡ_;�@�� Ѓ�=���'�5ǩ�[S���Rꠇ������ݍ"v�;tbP;L��*�cZS��-,�5�zk�z����4M��=KF�V���)[ P��n2�Fz�CC�5�z����_�Z�~nf���:���j"u��>��H�A����������p��ѽ?��گ����i��4��T�(�΅p���U�&Pl����������}�k��j�ۯU5{j��ٮ�W��%/���{�z9��JԤ�#�)�-p�������p�5���4�X'M!�����0�M��x�w[�^}�[�Z@�4�҆��B�:t��a}�~~����o7����K�ha�]�9��ڹ�y�e�|�e�<��o���=�p��㹺�Iܮ�gx:�z]���8����_�i�f����������V��{��Ps�T3���lE�.�.��$\������~ڲ���e���%�3�K��}�p�7�I����8K�e���J���J���J��݇f{��6�;X�����B�ECM�ZPՀ6T�у�>�@�?��}b#�o�$`���W����{���tC +�5@;���A���_��m@�%kPkj��~Cf���eK0���Jjn@A��((�g4�:�I��?|�kX�y�I*�x� ��$%���Rt����f��f�fjj��3Q*jS$�b������Z\�ua�b���'��q�(�����������\�}������� Tp0��zS��s���(2��A����h���B�mT�c4�탱�!�����]�~�^���q��D:�M"��!��#���M)���X�ag� +'�d��&�n,�D#fa$ȋ���O0�K!��G����>(��B��'j����� �m6�s�+.\�I�9��M������D*��9�N`��(�7����Fx�!�$�f���ツ�^����k�x�]�����2_K,GT-t@�B{�,Z�����_��]��$���$��)\�N�a��8X�E= �Ì��z�s���\2���N�l숄���^ ��RMVBd�2�eP�ڠ���fV��*`�u�}P\����\c�B瀿�<��Jm�Qۂ���G0�ց~��Ӯ�^��� 7Pz<����^O$��B°7��y��i}>Ǎ�hc'|>�B'�:8��<WC2�M�0,���oN�X�ׂ��䣮�w��v��k����ʯ�H����H|�;�������č�������WH^: �4�.�x#=h�1��, -G�rR�:"���� `q�'��y�q���~�=���@$=� �&j�� ڐw c!o&���0 *��r4���b�Y�0C�FsȒ,!M[�t�=�N�U�"��)������3`^D��`0~폰I�𱤡-Y�I�|�89H� #D�:��#e�DN3��a��fȎ\E�%�+�!_q��U��7x�w� pN��}!�k�H�) +�'�c��-uh�&���W��/1�(��"B`��p�����7Y����ke�9�⬐˶E������TxAT����GLr�o�������c�?��K���O~K�R�S�S?�{i_��c�#:�u6ᐼJ�U��O���joS���p� +��'r�"��R�q�ΐ1Qc���M#����)'����X����kF/�%m��G{�~B�?d�%�K����D�.������v��X5�u3Q�i��`sl��B�E|�q��볢0H+��z/��}+�K~�?H�c�d��`v�1n��O��� �?dh�=L-�6k�q�=N�ƙL�R� +=d,�G��J�fb�� *`[�%���ƶ��h��>U^ذ�l�`����=�>��ԧ����ٝ�G���0od�g>��$�n�ޤ_��_I�\�2�s�)���p��Fn��[lu4�v����?5�c5�vw�ֿ)� eG�+��˙�%5���oD��H��:2�p��~L�ξɹ��������Χ���}��⏰O��2t.��K����C �7������:�y��,� ������T�z�d��V�G��[ʾ��=�VF����9��P�i�s.��)/�����w��"�`8�P#�~�}b���C:1�J"�n!���ȼ����=�sS�bMs���F���])����c~.SPnrn(�W��%3������ʓ���N��c�Q��[��������=�T���,�BBx�y���ɮ�ht�9��e��5h�p[Ԋ��˓v��ja̭J9�j��s��T�}�vi��.�|o���C�#���$ +�$��Z���-�����2�dA��C�.�q� ���{���'�i�:��&�C�D,{ږ���^������;2(+r9gJ�' +*�GU�Y�s��[��eu-�Fv��A��dO�se}���N�6�V�� ��i(&�A��;}�_;c䰛�p������s������}�V�t�*��Y����IVe�˯W6嵨��~[T�s�d��Jiu���je�j��e��kq��@H[2YD�,%�!�i���AG��F��>s�:j��h��[i~W����#J:Q#g�W� �*J�-e�ٍŻ�uM�j���*Ugi��rY����B�?u�z@Q����5B]���;s������k:���~�#-�����4)�A)�ԡ�Z� �I -��� +��*HDP��]@?����8*��~�Yѳ��}���s��s��v�:��{�:,��{�����~'���Š�B�zj�Z���ƲԨ3�Y ����i%9ՙ������p0W(��D/��D�)�췉���y�@4�!M?a{g6�-KR�.��~��4�q��j4�h����^��\����:Y]�_^�+(.*N�/����g��d�����)����Ԍ���@�:�m�C����y�S�n��~c��+����ǯx��`���q��_��8ΩZAd����� +ё���TaiEfF�aj�Ŝ�¾�#E��%/���KiG�$���I��;8����-88� w�>\��/�~�e*=3rp��AO��^?۶�[cK8������!)��Lj��F��U���^Y��\Q��/?/�/��[>�_�L���RZbٛ$���8I ����rԫ⾶oý{q{nv�h�䘽��a�����^�k]g�O�hV��0q�ј���Ĵ��d������L^M�0�TW���õO��5Ki1�o�xU+q�@6�\ET)�I}�QFˣ���{*�!��ݖ�17ݶa�� �L��jiO$3�#>$�M��r,�ȅ�#q��)�MU���2C�u�6�d7�m\N ;��~��8I ���j�����<z<!�>TD��fl���\��o�,jo:� {�F�e�DzS{�z�bb���#;���W�קj�HjNgv̦��_�-�8���$�t�%d���i�F4;$��ݑFS��h䑎T��^Ŗ8����6����_p��&������������ׄ�!�q쁊D���$���߁!c`V�7�61��=/�{5J�qP)�^^ ��>�;JB�f6��gdt��m�B�᱃F՜�A�Cƾ��,Ǵ�PO��hޝ����6wB(��������w�h�ñԉ9mb%�~�c����PI _}8-��ۤН��� <�F=�Q�+��߬�O�8�������)�4m�i��u�y��(�<��4'��+d1�*9��s\�\g���h��'ع���_l�{�$�2ZhBh���F�I�+�D�>/�οQ�������Kr�k{5��.���T���@�%�u�R�=w1щ�������X�E_��R�^K>KC������/>�/�i���E��%�F��o��Zg��aAլ����H�k��U�-ɫ���V��"W��CW9F��H�����Ք}��B[�Z�~�Z����/9�}����)g�O�rv����e��N�����fB��8�2�Gu�R�bE�|� �|�#�5���l�YwT [��`��w�i�}����ӣ}x����=���{�ɏPc�M���e�C�0cy^a�[I2ކP_B-7:=�P���&\h��Ά80����d��WP�h����'� bp�N'��t�<��P�m�u�༮-t������0�y�'I7V�:V��y�D�8tp|P�G�."�IL0�a��<7y���+Д��_��*���bTm���ҷZA�V(�f��M�Q��4L�_�nHt���� �#�Dd\(�Y�N�m"In`!��2�Q��䬁"o�d`n2��M&�`��� Pԇ�ͻ!��+iC��4+kB�Du����d- �_F( +���T�n����R�����7X�5��7��Fp����.0d�!PF8�;!\v��j�@ndʩ�XNNȫ�I���C�����o�@+����!W2�hJ�Qf�:d������{R�v�O�>�/�}�hc{�6m���@]Ĭ���� P��e���t�7�|��|����ϔA�$����י�T%���OX黀�� ����>�]4�.#`\5ƨ �L��Ϭ�_���9��,���P�-�R��,?S�����@5���"��Ib-a�d�V��p��'E��BP�>0O���]�QM^[�T��zYuQ����� � ��Ɛ9! I�@�@ ����A@��(rUZ�P������E� +*Ȱ�w�;�����9�]笇ظm�@�X� �o#D����/�����a��$v�l����a,�|��Fk�~�`W�e�0���;xۜ��{!p .��B�i+�n� hk�rx�[6����?nn��̀�Q�'q�-���[F�Ö�8ā���h��=н�����0� D�A�q1�O�#pR=���%�~�h��@m��3�@� ҵ�@�<Ex�}��!�3��)j*t�o ��5` .��*{`�^������A8daA�uI��D+ .i5p �]������izK�$�T�J �c�����g�����ȷĩ�${A��'���[�$4e�=p<�A�rȽ�Ŧy�Y�=.������ +����4�/���qN�6KLM�(�)|��1L���҃"_ǽ'=�zC|KxE��N���� +�i~���� ��h/y�kJ=@��+H������p �}F��@��-��af�G^��ANE�;V���G�43�%�<�9�j�S�]�C�k����w�S����ȟ���� �����-0�Bw{P�����A��5��}�˴�>�ez�$�|�e�[IZ w�s����*�Cf���V�=zG��%v?��&��W�0���e��'�w�aO"��w6�x��� �� Æ9��<��c�X�^�O��;-��U�,�iBr��3p�F�m^�V�!�uv3�։ث��ˌ>~/�ϸ����n��l�$��;C8�����T7[�ځ|���فa�䮛 ��N�!�F���#{�4��i�!�U��!��_�ٔ>���oA%��W����;�9-<þ$�`��O�Df�hl<�%n�|T�QG�����wN�::�>r�~�u�.��;Z�m�`�.�W&��<���AȍԄȾD �W�A��3�JJb;D�|��I��o���K��I�yO�����%�^<A�Ok�3k��\!:_�:o���P�z�D�������[���ꮉ�w#���j�4�V�?����Vf�N$q[eqG��č�I��SV+�"�>��H>�J�����3*dS� +�4��p�1:?��,�y��7����s������_��pyP�]y����W��~1GyF���ԦЎ'XG���E��6�&�Z�,���L(�� %�;Hi�{I 2�+F,,�jB&)��&:W��n*J.���e��W��{;�i�4�IsȒ�����VI��T|�(�0g��-�$Z�.�U��íN2 +TU�%�� iC +�nE>rSiT��՟��՟�y� z�����߾�C�7u�27ۉZ���5/[|��ٲ��[��Wj��ʙ�N���[�QM�*jm��U���-M-�4�cR�<7�U��>�4���2�_%di> +35������L���A��,��t�y]l����rx���O�g���wۂ_;�CO=aC�A�ֶ2��fS<�֨�T�hX%��B}�0/�D��=$קU�R:U�)?�R����H����ӎ1t��hk��uN������f����� �G�kf���,�ںkyWS�:s-=�hU��R��*S�� �Y�����#0d��e���I�U��+*���"�0$N��%�ǘ��q�5���@�:g6��t1f��_��Km^t���?��p�#`���:�Ἇ7R�4ԲwVW ��e2ra���S���(�h��r+��F$!ˬ�e�����H�P<�3�Sd[X��1�5@�� ����c�bf�q�݉Ř�]K0��W����4��t��� ���Qr��FVXY_a���S��֗�pRKq��b��\&-�O�+�=JA�]��4_8̗-,�q�i ��O�� +�1P�=� f��<��^g̍Kv���;φ���ڻ�p;iSe#���ݓ� &��ZJMr��`:/�2O_^*���y��Ni7�.���*���a^\��W<ƴH�=�;a��f�~.�a�l̽�s0�W�0}W��u��8�/l_�t.ҳ���Wl����:�j����~IH� �("��;�BBB�@aG(���Vԩ#.�u�Sw +�,�0Et���VEq=�c=���b��ʎϼ�O����;�~��������|}&G���P��n�j����'��Stbo~~́�����Ս����Ҵ껥?eU��e��>6���S9�G��g?2ɃV���Env�K���7���r�k.�^H +��/u��sYq[[7�s�bM�FuaӶ����9Y ��k� +U� E������┆�u�9��&��NMit�������t�In�3 �.3��^9w�^Sǰ�V�Ց|��פ����Э3�7\X%X�Q"���L�{~�:�ܮ�Զʬ����y�����m��dmC9����Te�Zl7$ch�I-��if�+��q�A��3$M��S���c�CV�����{n���Э _}#/��zq|ε�����I��JŕJ���*-��A#��HO�r��{��kJ�x�BrA7좑���ܭ����t�~�NZn2I�##r�ߒ�w���Y���Q�۞�7<�{�<L���Y���ȴ{�x)����}"I_�D�W%�5&��u������}��zR"�Xp"]~�$����ҤG���Hs���a���F��%z�_��� �_�r���|���2�U��^���~���AɃ�B���%�����h�`U,���숋}�;�&.v`��o��?O��]GH�O����#'o���LR9<�|5bO�r��ܬ �W� 7/�b;�6�I��tSh<eڵމ�-��N?���������#?G�k��9:�"�ݻ�v.��:�� �B!����B��^=��)�TL��m����Mz0�'��r'�Lӧ��S�������H�RmEӹ���bG�t�oz�K��^�ș�ܹ35�M�᳝찹�v��� �.5�B�A�EB�"�DŽl� ��Po ��������B��+Mg&��<J�h�����K=@±aI�۬���8h�v�8c�N�-{?�p��o:��L��v��� �s���~B���B��e����2�����#�0�Ƒ�ϋ��$ +��.B�Y�>7�ú���{c���D�����f�k�n�NS�2��K��R2LH.$ &zrX艨���Y? +^��3C�� \�?bY>.�Ԉ�d#h�ݐk��y˰q���o�oLlq�d)jMlp��-:�2�{��-O)zIH�8!J"����HX�>�--�t?x�9��g#��0���e�e:@����i��5�!�e��96�̰�p�\�C��8���h��Շ�" `Bʂ,�R�)��!*�B�k�� �;[����s@\�#��/�x7)�������{�4�<ǃ�.�f�q�q�!�cB��E�1�"S�T�,B�%W�"�=�U��^�jo�3�v��+�w)�n���) +>�H���m�W] �f�{�!�և�� T\c�M�P�C�j1de6��C��!>�Q�D��Hhu���«���)�5�Qʤ�L������@�J��M����������0�&�j�Tً�����H�� �C��ָCR��6�� �� Q�r�q��� Z�لq�鄏� �� gL�Qغ|�A�A��Cil2} �f�l�)2�HϠ�Y��_8!e�+�<�8��!������v�C�K��ľ��ā�I�p��1�\�h"G$���wH +�.Hp�A�F�ڕ�Lw�8(Xa��hS�-��^��dlt�f�'��,��r�w6�&`FQ4%o�L::!��Az;���Qɛ�o%�Cҹ�7I{-G�K�+�D�4ȝ��P�*��y��L�a5�%B)mP���1o��L�6�Ɍ=~�i�ޫ����Ԇ�&7rG�Qo�1�I�yC���W�W�/dc��lL��g)�B�CBt���!ő�,��:飔�c}�!�"LPƷ�:��̚��bϱ�M��r��6s_���`�k���c�N����8���MEqk�K��Xܪ� {H����� @ b� ��B�-@"D@�D� +A�^��VP���ֶ�^�u������9ߞ3�������)�1� ŌyD��>$ �< ������{��>p�}n0��� ��1�[ n32��+�����$lw��}���b�:������X�ۯQ���)G�r���U`�0kq��&�L��x��O��������1������Qf#���@O[ a#����O}k�Tm���=�0���}ډ���}�B��s"oףX��}i��$��6h�W��������ѰV�0�+� +s�~�1��e<c��^�{�w�;���@2���|)ҷ����ld�9��\�:�ز�s�W?� m�U�w�N�xL��yZe)~W#31�������ϫ��p��ݜvf'��eaO�γ��f�_�f�<�U�-"�,���@*2��̏Azo�h�� �;��|��g��%ϋN����o����5�z�%E��O����Hs ]:�E\j�1[��&~7��7n���6~k����G@|m$��D��[`(2W� +㐾�^�t� hX��ݫ�=��)�p~\���i�)m讱����H�^e�WB +�]�Il�.����cd5�N�ĩ[x� _/��WJ~ �����e�T!��r�2�=H���@��F:�+�C��� +7�gU�Tu|�L)f�x��J.ǽ']�yA�oV)��D ��K���1 ѕ�Ji=�,��?�',�� +uҧ��X�K��Str�G�Ð��H�S"2��(Z���l#�7�6��u{��]v�2��ξַr����e~�j�>9�X��E�T2K�����^Q�9A~�E�6fL��H������@�S@�V��@�((C�^� +d�!�o5����n3�a�N����KǪ�]/�wt������9Q~uq���X��N-Q�1��J8y�j^NB�03�S�?*��?g$����z���$��� �{�������s����羚P?�l��l��e��w]O~{G��I�=V��kȉŔe&ti���r���:Nf���Q��J�8Y9$Q)�JRR^�������y�:�m�<$�H�X�|�\^ԯs����v-�K.O����}ݪ��7�r�V��>���VA��N�fgf1�Ӌ�jMOu�^��>/NPJ�Է$��?�I��I��e��H\��@�\�k������X +�:��G�.�5y�io�nm>K�W�g�(��K�����ɔ4m#%'���]ƍϬ�f��e�iƴ$:�7�<�-3.�#%.l�b$�zo����b0[��=���\&:7�;�/�j;�E� �����W_v����_�U*є(�ɧ��B-K^P�Djω��^�H;)���ʋ*|˔|�J� ��d!���"���5.�7���Eg0ri=��{��v��U���M�-�ݥ���:�gv��_c����Ąr5-�4�uF��x�b����$�[�ܒ�\A�?LQ�G��l�2d�����=��iv�'p�o���ٻǩ��ѕ��7���w���6q�i�D>�YP|]>�&�Q�*4�q�������w��� ���m�������WB�-P��A��;�?��k�#�t����{h5h����0ph����Uw�-������uHy^���/;,1���� +��0�i�dҌ�,���M6��ɍO�h�oht#$1�a�-0� ��p���F;0r��]�����m�3`�fouw)�^��l���w+{���/�J�#�E]���J˒B��'Q:*(�v#-��3�>�xJ÷�!�a��m���̝`�,�߷�A� ,�h�r��O-������i��<m<`��*a�|��7r$�]8$>~%�s0ɇv9-�t9�(�a�x�@!p`�9���� l���,�n�0a�ߌ�����@����v�;�(��ݎ�[G�%��];��1M�ο��Þ�Oʾ�\O<J����Y�1� +��k��������5����o�k��z�2[���A�,�4�P}���qy��9W�z��A1��=�R�0x-�'�a[i;H���v�E5}�a���"e"�}_"�� � $!�H�$h��bQ�tܦ�Z��[-�8:��Wqj��v��T�TqÀ���n�|3s3���wr�s��{���S���|��Y���Y��ճ-%�gO���Q��v�@z�a��g(Uz�m����r����tG��w��NB6_a�5��d�Ս,��3k�ќ*k���*r�eUxXs��Dž��l��*(�Z��6�ɭk#e�-Q��]1��C��N���-���/|��/�C�-�5ұ����4�!�.��_���r'�C�̹C��ҡ����Lݰz�z��){g�,�"��FWL�n�K��2��<��4��8~?0q�E`��k����� �?I�/��!���q$pg�1�Y�0���T;ʡp�A�,�L!f���|R2�'��cVz��ɱ��5 ���8��.�h�R�6���Do��<!+���&!�)�R7b���E S�(v�8b�� �OA�C"��ap����|�v�F�S����!�������5��8O]�����Y��+4����{��Fh��(�����"���(V��ӑ��#�'J���0�>�%��(w�Ɓ����f�dl���fG��m�r�ޟ~�n��^BL� Ѿ"4� I\��dL�C��pfb���c�!�Ń�5R�lOh��0��P¡E��j9Nh�8b��#��M�N� �dB�B��gC�b��r�Dd9CV�I�;���h�d���F�o۸�O������@p�Sc>�����k��� ᳐E����N�C����P�@^ᆌE����gސl�B�����@|��<�:��S!�R�Ԩ/Do�/�G�[1|l���h��f�;���U:A=�*�$(j=��'o��s��背f2�N��/d~�~C]��'�^��O�a�M�)^���R�q|m�$� y$�r��ȋ��A��C�rr]�3�CS��2.TkyP���~�����@ȏA~��6���d�J���� +�|:���a9���z���[ gBƄ>�c8�i�8�0� �:W�=�7�9�>Э�vc�4ۂ�nA��P��Au,��l���ȗ��Q����!��ѿ)^E*�T��'*� d#d@�G��4�L�X(aaV4�D{�%1K튢|O��"��Ə��y��%��~G�nw��v?Dsdڐ�T����߳���`F�������5�}�E�=�z�������&L���`�dcn�=� +'�\��y�0���.��+\2lZ�b憘���g�M�Os�N��=ɪ�H�ӞK{��*���+��y&��O�����\�������0�TAt�L��i�/���v�NuĂ�7�u�cżs����J>�?.\�0s�}��Իy���m��9,��?-��w�n�og\�?�]�}oD��|$u�0�R�.`�������a�̥�S�������.��͇��=�/4���[��/��[�$����ɿ��(�*�n�)�1w�����Ǝ�K�N�w����=Rv��<[��7E�)F��$��z��".�5��,u�L,��Xo?�T�4�8˽o�����Ґ���17*�f�hiH�R���R�F酒���EM�s�-�3�ԧL�4'L]�c�;ڣϳۋ�d)�����!�J~r}�E����o�Y��{|�_�y�"űo����2������k�s���k.�_��Y�B|Ʋ.���͊c�����/5�K���9P|>w�Ϲ�%�V�Ke�d�Z n)��J{�4���/���#/x� +b}��_�`F�ܽR����|�~vL�U �k��,��W����Ty�|�zߜ����_��);�����q��c�����2�i�@Vs%dM�}Q ỐOs���ڷ��YVp���3? c>���� t��F�}i�1�\Ci��������`��m�r��kU{*7iw��<狹_��(o3~n9��h�2m����:oH�Xն�f�>��L�0�?I����8X�UA)ғ`B(�@�(� =j��j�A�@P�((�2눸z�Q� 3{f��{vV|������>_���Nn��MF��*�1&�8��xx��ot~|��N��Ό�ъ�X��Qu�TY�٭���9�.}|�gWF>U�VJoO��&51�/�'��&������Tſ +�NZ �� ��4D��#/�C +���+2T�Vk��r��R����tLg����ve��뢰%1Gz�;ry�r)R~1�)�ܿ>��Y��ƪL�a������&�K���E���ļu��s��->��T��C"�{٘p#�W��7��ư�nA��:hO6z�I�w V��zE'�:J���<ZY����$K�_ɗ0��!��Nvq�`Xa�n~�na�?C�3��/�F4�\���U�(|ɺ�r�pz�*у_Z��o2}�NfF��xDk���h���S! ��Uu�]��"Lv�/⓫�rA����*fIvSHA����y%<�?���\�fg�����=0_��#�B'�-��͙���:xwj��6X�ԅG]; ��Úc��Z�;z�-/I"l[+c�ʼnn��yd�0�VZT�WTX��7������p^�Mnz�<�'�;�_����"�Q1�*� �P����E�&|I��с�˦��nk�a��a_� Syk�^ic�MC��c�� ��4o�8�D����[*�,�c��ةE�aI���Ģ9nb�2'E�fz)b�J�?�RDU��p|M�$T�W<mՀ��0ק��&0�wP�j��A�����b�����hqÙ�%�)^�5�>9U���*���%�Ie��Q'Nt=��h��/��L�@�� +�T���P�![ ����ד`�]tk�� �5��]�R��wҗ]&ok��7��B�ۣ�K�q��-I�M���<zJ������W���bGWs���EV�e���1ck#���IUJ҂/���O��0'S��^5�5H��#P[�:���J�zm��c�.�a�/���c�.�u嵧{'_���ƶTD77E4w���r��C�M�C?D� ߨD�nFU(��(ƿ�`�oO�Rax���qC�� ���iq7����\ ;��w�>�7�9�'��LW����B�Ȏr�0y��L, +�M1e?0Y�~�rD���#CdU��V��&z 0��_�@�]=h����x�V�r⸁p��D0`ƿ�ޟ:es�Z���d����j��J��h�*d���AC1��b�)VO(�P����T��{�k���n��~�x{�o�eF�g�C��5�='ݼio�s�~�)wC,��D쏹k5�t$��9ǐ����27��zO�1�7ml��36E���|blՋ6�<�ȕ~W�N�P0-�����7��HP5� �#(^�C�}l���g��I�q��LO΅�s��d?8{ ��&`V`ǘ9�f��32g�̠��촋�������#�:J���R%����n�+Wq� ���g�C5(~��/���r!���Z������Ɯ%� �Y���g�f~�������,��"/��|&��x6d�t��m�G��U����nߣCnO�6�p�`��s���Y9P�@�-HU�Y�.B�� )RyL�����R�7*�71�[h���P�)���,SOe�Nwe�n��6s�e����w,�~^�p\����O��;�Cd���e�.|�-���{��2�!aYb3������V�������]5�+ꊟ��J���J����M�Wӌ�V�}(���������>o;�6kb�������6ە/����a+~*�p�<@������k:����>� �}�K��ې������_|4���kC�:(r�:�k���!��T�� +5�C����^���pZ�>}�w ���� <H[����_��H��h��\�~�:L:�Iv�M�Q�"�� +ְD�{P��9J�ڍr�w�2��I�u�|��u��� &�9��+m������8�)@�g)�k���H��E� vȜ`���� ���d�YT�g������;Av�5&@ �$$$6!�)6�7�,�����E*n8R�A[EQ�}k=ť�ӊ֭�Uq��3_ۙ�x�;�����}�srpig0 b��ɴA$� +�ZH�2E��1ʴ �J��Y�e�c������'6�PT�9����I~�������(������F�p���[83ؘǰ�'�h�iC���z��u����%�i�cj����&�v&���O��N�߃�Ѓ�`�OB�J�π_�.xz��ǂ6p����0��~b�8A\4��u��xg���3��O�>C�|��x\-��,��@�0��Y���ï���� �������{M�;H3��)�W�;��=%��w�Ô/��x0�ȃ�&��|�<B��D��d�,H�:��τ(}�� Xi��ct� `�)����$��������-�?&^[�?i��� >����T��h�\H>��D����,�Ku �� Y�B�!�2����m��@���½V"�i �Ekn��ٓ�W����B�_a5�W���\R'��H#��ݘ�ZX�c!F���](�#,��2S�֛C���M��ʆd�͔dp�G����#v�g�&�W�߉�ڏ�ux!�px.��S l�H`�8�G!�ք`gr{Qv4b�gم���D�)t�0��1&�*4�����_c3�f�E��;�v�7�{�^��u~%;4����s�I�\I��>���{7s~���c +��R�V$4���e�Pͦ�2��4/-��!E:�� >&����ϵ|[a3So�"j����9O�=���w��60�����G=��/xߑ���I����;����vM �+�3 ��"� ��D[1�`�@*��&�����D3>�+�ߤ�L_$������~YT�|?����V���.���z}nF��s#b�{=b�wUy�wTy���ߥ�7�Q�>���v&��c� a$7���d�;3,�!7�#���ў�L� �{�g� c �N�r�����Pչ_Kh���ȹ���&v�߅���s1��D <}Ip"���X�ˀ���|�ăs8�Ép'�4!���ι�t�l2K� %��d�s��o��bɬ��&?�$���3��K/�w)���|�*Ι�������=G��:P�u�i����㟈�&L�U�w( ��dx ��C�I�b��̀B� �R2� +{ƛ*W�I5G�neЌ�eJ�ѢD����Ng���N�˽����^��w0�5�@r�p_R�hh�ɠj_Ȁ?�lw���w�}��K�o�p���[b� RH~6�[EFV�Q��lƯuN�������V+�.��Y�*Ns:���v(���@Vo���?��,�r���=K�%}�;�;RC��˷��W�$�V������Cؓ�/��M�7&wУ��(#��Qo̩G������0�6�N�X'3<Yc}�"����۾�|����sk�}ٍ���E��6��d�~�ޯ�Zz �s�)e����/B;�EY�́_g.���`H�"�{�dd�:}�e�!u�Ō��Α�m3�u�Qb0Re�U��qhE��/�r����y����5u�6��rڥY=�̾�V�>�Z����Ȗ�gaks&%�C�>���_GT䷫I�+&�gR�V�R�ZfQ�6�Q�mv��>��-"����{�9�צ��U���[^��RZ��*^�Q�$ސ�A�.o��9wGxS��#V�D5�\�j�}�\�?!m,DPS��O��;��!oQ�z�R�[3���~:�����7��S�����o�h���U��ڻR��]���\Q�o+��/]%n.Y'k*ڤXU�MYW0Y�?U�)���aDm�{�g�ՕAP_�&����(T����L�f��֦C�n�A��lM���U�`�`��|w�B�mMIs�2<;?��n�-�_[])XSY/^]�,�+oWԖ~��*鏬(9]Vr��UQ�.�r�Օ�T�� i��iQo�hjl5M]_�M:�4���:��-��p�|澮����P���Ѷ[ZT.�k�zlX�����п��Bа�l�iT�W��}" a�Q�(���B @ؑm( ����"��"PYdY���(.P�jg: e��Lm8���Ȣ�TE�g�Ǚ3=a>����~��s����>9 +�f���?pf�ތ���=!)�B�3&�w��7-�����:�í�T~!3߷���1��ײ��~\��bt�q�j��ZVWdx�,Ҭ�d���X�]~a����t���,����^��}w:��}.()�;x{�����B�r��%Fe�T�A�:�']Hx��uE:����L8˄�M|�j2��$�Z%�������&E������Ź�;���i���tK+��L)(�I:Z㟘����7�5�Qp|�o~ ��^���B���D&���}��8��jh�]π�4\n�AG� ��b�y�эWY�oP|&lm��M�95q��U;�U��.�p�u<�c{i��G��~[�b�.n.�.zS��7�dAW��m�(W�I�?e���ϕ@:@��F +���:��@�yc��C̪ns�-9竟�j�s6��@}�pom����)Ҥ��� 5�q'>Vn����T��Uy�?��? ���Ȫ���=���us5:����r%��j�����8Of��.-��lH��a�^t�tz/��Z}�=b]Z�f��x��;���:ƞ͒G7(���=�����:}B��|B�F�:�V7�^��:��{�N�x�� +�۵�W�:?y�O��^T]ׇ�^+F�5);�ǃ�ѽAO��ﺴ�4�B�U\�ۘ�{�>�ȔF|rT�^��^��v�=���#�}�#�mJ�6'jE��V������H�]r�.�;h�H�O2����pl`)0��?�c��Wh���-K�j�э��c�ǚD�&Zn��*���Q��<������ZG�+2�[2��Q���)'��9�O7��^F;uߑ.> g�_�E�̟d�+��?Ā���p���{߆���L3�N�p�p�~����; ơwRL��2,��X�� +�km��b��>�����E�� !T�*<M:���P� Pq�` �RGذst9$��Q�F�1_�iF}�� �ٴ,hd�~�j�*_վ5^�\#U�Z7�WU��\�g&��L�匩�_ߘ:���Yl���,y�� �����|���bB�C6Č�`ӘD� �q3dܓ�a<��7��ߢ���s��w�^./zO6qr��D��tↁ����I��Y�p�����"w�� +p�@U/ɿ�.?y �!6>ք��!�>����8�^��L�I �d����l�T,�q*�+�N�>��~�LW4Ӡg3s�'|:D����x���� ꩻ��D�a5�`��ɿ����� | �9�_����!(_�S�W"�y֑v�uc8��aڽ���y��e=�c��\���\�t��m2��Y���Y�pO�'������-�B�a ��������-���|P�&(P�q%H��ђ�����BW�=iS`��0�F31�� +Ә+��{X��Y��2kY|�u�S�����}�.?�@���O��߁�2����`�`A�a��1 +�5��Z���JTP+Л^��4#h=��up��,��08XKt0����Ļ��7�5L�U$�;��x� �#��0�%�u���j�}4��d/K��P@領�F)�AWJ�) �(����t"�� ��E�ƖF;�R!��"�Jh�`�8����� A���hy��ǵ���H�s��q��'�*.Z��o�ω7r��,�ɖX��D8��(�g����?�E,A�66���0G��\� �Q�J\ �����Y� ?ψ�r�ȝ�/j����:Y��B(�>\Et�1Q��B�0M�Ʋ�!Y�2���P����ͺ(��EQ�K��� ��g�ij�oĨ;K�����x�,(��R�fB�Ҝ0�S�D%݂5�%���;��_�t�߸Jkx(i Z�����G�>b���9<��J��/$/��%�&��Oߒ"o��?B����zQ��o��3��4 �oh""�� U�t %����B 5�@B��TY�X8�V�;zг�c�X���<��?���~��y���qY�A�:5[��tMި �D`f/���^ 4�>�� �z��� }�����z��3u�����<� +q�z�������:O|I��~`��V=���.h�`� t "�7�N �qQTM�ֆ���AH���$2�Ī3�l5�c� ~�[�>`��-c����5��Sf��e��~�� ���#Ɯ�}Ƃٽ�0����L �� Ƌ�B��F cJ���j���H�}�1�@LIJ�Q�z#r�߇�zVM�#�����ٳ�n�'A���F���}x���iۻ������n����zЂ�L0X^���W6���!`�`���U8ߐ����4|�3���-��5���.!q��1�GQk�G�,�7[���V�N���a��{��r�q&��Ր�ΗB�;_y�4����F�=֧#��TX`̿6��M�{�W"H7B���d��]�沼5_g.}ʎ�{��f�k"��f|����*�k1�vW�Z~��b�.��#��"�� �t?>�1>K�g����O.Q�x,�ŀ���^�`3����8�x�ػ,�|�+>I�q������峜D���K����m�%�8��op��ks=���}2f�43J>}��p�Iʡ��^�~��3G�����4����@��x�{���;W`�2@_�V��Bk�c��ڝ"_��!��y���٦�9<���B��4������&�C���� ��{ㇽ���{���H��G��5��@LׁpH��@~�$�{[0||G� +����=/7A�*l 7�)��Y��Q�S��ɜ,�#��9eN�2$nc�z�?�Z��N��5���ӟ<Jݙt�֓tƿ;iֿ3��3�gW:xt���+1��T�{ܥ:h�T�顇U���]�"k��X�Si��DQ���L��y���9B���"���Zr��қ�ͻ��Kݑ��֞~��J�b(�fZӟӕ���� �e�;ƹ-�����{�B���抵�#��#Y�nKuь�]���OI�:�����Lƅ�V#��`��iW^�[��ܙSOٞ�����k�2�����Pdg�3/3�9��YR���\���=��;��@���qݩ�D�����V�����wQ���-��:D\�zwy�e���"�S��ح�@Ln��(-�M����~�>zw,��;XýȒp��>�I����dY>�-���-�\!B�Eݔj�o�BW�h���N(�Ԏ�}��ɂW��D�+�,z*2m;�x���B�a����"4���hR~/C���)�;ªțf���c��?���]Y뫊�]�H��[@�Y1B�VaߩSG���B�:�j�&Z�4y/�#g���$�H�;$l�61ױ�������TW*�H��}$B%M\��(/��,�� +� n����OY x����b ��- �;��j����p�:��D�U�ʎ0��\2�������ck�Y�,ͦ�&k�\�w�U��Eb�ʊ:������NFQ���� �_r*(��VP~�[��|���(B�0�l5�g>B�U t]������*�щvut�c%�߱�0�N��kc,�l 3R5n^�Ԑb]���P+�u�H�<D5���ZoaU������0y��,�h*(Kt#�+~��U}�ͫ +_��@&B/�nc�V����}�4�I@��Оn+�@��fw���m!��mѦ�-IVҦ�*E�S�\�^R_����ڋ/SPy����Ҿ�N�����,v�/��+���oV-P�e@�ʀ�=������� +�N�����ً�o�.�3G��\5��RuZ����;6���'XT��m�ڲ�����%�ܦ* +��އӠ���;���d�qf��3Y������7�(l��Ѓr�f��nE�v��8������w�u9��zk��WHw��{b�J�S��:���;�s�ݳ���U�Wj��7I�KKP��c����ʫ�X�Z��/�%x&� ��=�p������6�&z�����a��G5P��j�W����:j�L8��r��!� ��!�H�Í nA�x_�N=겻�Nm����ƻ��T<PT��� +��V�.`�j���-�>�d����|&3�e����#3�0���x��=��Kv�H����U�=k��i;m_<e�*դ-��OزE�m��e8�i0���,�)<ۀ���C������ @-�?+��m��Z���I`u�'��6���@�pqu������|�'�QU��Y���'W.ȭX��.$�ܠN+�O)?�/o���� K�m +M-��2T��n����4}px;���;�����?���h���WX��ZtLÛT+�U�.)>��0�p�t�n.��>��'�n�_Zm�}�W��� +���>H[�4�@o��Ƥ��`���G�Lspf=�1Z��e�_��L�Rs��`6�`a�(�����nQ��5������S�≧�����3��JӾ��U��_��z�k��;�q�olc�oLc��9a�9��1 �5Rk)�C:�{��P��W�X�����\(n���vW(hd��Dzs۵�����DQ���:�8[�3.�O0�8ĵ}�ݶYٶG�1ֻ�5]ƶ��D��\"ΡK��Լ����� +������*�/= 0���"&\Bֿl!���:�!�#��ԑ��ufq:'��:� �;#;?�����:�k�Xݵ�&��$�F�$��W�1h|�~��z��=�}?����o����� ��? ����n��3b{��XFӛ̊��V��sB��s��>�)�K���k� ����~���ׅ���By����yV������?K�v���@��x ��D?�������B�G0�qL��d�0�%�c�Mc{ ���x�g���u7�v����+{u�+}u�+5=�J��p��_���A���_F�9��\��w`l7@�0��Jt��t�T��a4F1n�ed��8��Y�8�e�bI��e��I ���52@�cs�'��?2���5�����P�@�`��EԔP�\�����1l1l0�1���LF��>�b���a� ���c�<iǚ�����o��ܧݢ��� ���r�-�i�1:��E�� @?�X4���&�RD��F� d�Ojށc*6S�P�B�6��p�+��3�辘��+�g�K���.��&'x��B��:=�&���������~��X�BE$�9��E�i\�^�CϿ��s-��G�m�\�U��#M�<}�ܥ� �!��7��[�G@����`8��3�`�z,Cuʦ1�p�>�/��j����w�JRC����,�Hn������!?����۞Fz0�E�Y�f�&���\TO�a�l>/�r�*� Q���D�('U���DE��� +�尢��O�\�\�D���E���M�0��Qnƹ2���8_B���X=�&�P3]��^"°O,ߨ�[�Ve�J��ڤ��RU�UG�/T��g�s⧪+⇪n�}�Sq����[��{j���VwF@��/eP��`}��\��z�i=u\Ԏ�c|��p�<�˘�VtS�~U*~���Q�V�@d��o�}v�5uv���^��ͥQw5����y2�F�k��H����Wɕ(���a����z{�tG�h.���R�0#�3���{��g�$i��n�u��D�;n�ݽ�����ov�%n����=N7c��o��K;bOI�Ƕˮ�ޖ]�}$�7,5ƣSk<:�O�Q����0����-�m�H�8&�����d��հ�d'�d�X�dY�I�gs3e�]�~�õ�5NW7HL4�\��r�A�][�ަm}^���9�U�3�~�fݐ{S"�6&��d2:�HF'��6�Q7���t�̓�М���ЏyT�b���q~��t��[]͙i{i�B����έ�\Υ���M�8�t���2�&}�w���� }��q����_�GR��JEϺ4t�KG��t��f��m�L�,+z�wN�q��N�x��LdnG�*��/�Z�N~��I�[r��Mu�G5}�q�I��K�@H &�8L�� �5! !!!!�B�-D��~A�u�m�γ��M�z���v<gGۭ[��������y����%��ɺc��F�$���e�Nb���1�|�M�\� +u6~3p:�����7���?�M$!�q6�OF�ƒ��5(n?�`�L<��h�;��$��g�/���坳��'9}��r���羜)�XL�x�s*}���H3�-�)�������䩠Q���a�#� {�����d_�O��4��{�`�{9�5(g��}/���go +�[�#|Yx��ˏ��Bq]c�@ﴜ�q���=<�+��QyOfk}�2��G2)��m���Z�1zW��3�~pGڳ`K���ΏA�`�D$K��x[�.��9D@|"|'!�K�-|�� /�{��⣰��]�k��C���T�q��<��@�=�W��x�n-�zNsP{V'�-k�y5s:�9c9Ԝ�q�)��0S�[�)Q�����C$��5��;�x�}�5��?�l`K�~�q���C�BXRG�ͫ�;�P�]�d��C�>q�w�HE��Ӓ��ԫ|�9��0��������;�F�zx5�Oռ��Q�Q��B�g�C$kP����|��sKM�gZ;����>���� ��.=�w�$�e@�q��<;eb�6��tU�!�ŕ�FQ=�.��Q#����U"t�G�r�V��M�N����|D�#2���f�o�+)��;�i �Dok�vp���a�2�v\wz�`Y�s�:�P{q�G�2�ˬ��6��d:j��H343���!Z�HXi�\�:�!�$;�D��0u��t�����[�8�?^���|��W�A� ,��9�a��i;d8�У�;�^�r�ji��&�������F��7�Q��*�Vnbh +�CJdC�J�,K!�)��.R.�>�H�_�R��T +DQ!�5(�{�A��W�i��e$�J�����/�����wwT_��Z���I�q��<�xu�اB��/Wk(�%�����R�"W�K��Y��{��O#��o�T?1e�(��Q0dkP6� �;�`͈���"v��&'3{�@�x�1��Z}�&�e��j��*���BtB�/�S��PTZ}����.+m �h��D��z��W?�䫿����)*E��2D���k�~[��O�p��Kf�]-��{`��t�R�m-��泎u��.U�il�R�л�ZJ*�R�%�Ɠ���@���M����Fd�>ae�������-�Q�(��w���=|����kXh�ރ�k�}twK���fW�vzoUk���%��ƜyTe��7J|� E��ueTam5-�hf��t�d��W� �R��UXz͏���eDL�5������;h���ϴ�`��!@[�+�{} �=L۪�_9�w^ܧ�Hr+�p�ڸ��V�w�U9)�EC�i6P3�&�����4�l��6m�&���l���bB��&�fBdk�*�=�[\����?ޅ�;`�@������I�v0ʾd �Qџ�\ЛvPԓ}��-<��zg]/&q:+ȩ Tv{;-�}�߾��ԾΈ��f�[�%X%� �1~ּ���i%��wpϿэ;��h��0L9�n�(h�(�T�m��i�x��p,م7�q0k�8}D�:��b�|��. Z.Q���<Ƽ���� 8߇�/�!�ך?����V��������6OT�b�����7(\����7mǻu�!k�S���ԛ\7�l���YőK3Zϋ3�^���N���==}�3�F:5��tj�O�$:��@^�<�w��!���;�;�j���� ]����'pW ��D�����K����M���/nEx���ܲ�����S˭G��<���<"��<Y˯<Xw�z�� �":ʺ�K�o�R���?�������P~@�=T����Cʆ$o�@�&���E�ی����h�ɱ?��s�ِ��(v��0��hq��w ݸ����y����+s �1���~�j�`������K��x�5��'Hxf�~�g���-�l1��v4!z�!j;���ɰ �چ�(�;:{��i7m��!���C��G{��w�5uoq�?��$� ���!� j8*���,�ɢ�Vi���t���Z7����V\�֊Z�<l��":U�cQ�Td+�y���8���g&���{���{����l������ְ�{��o��hG����J�_C�K����Q~=@����S9�o>�b�nV���>h�����0�-<��m[��8�u{\��<Y�9?Y�9�W����<���<�'�<���}+��[��G��6���_F�����_���D��0�w� �F��Bڗrp��WZp~� N]�cWؿ�ew*�����0�/Y�&֪�[ֲ�+���J{_�݃�E����u���)���_����;���x5x<p��f���R�ݐl��A6�X�/H1$8 Ę�8D�)#�"�73Ƹ����H#�7c���/����_��_"~�0�����w�!� �5��%J)�ơ +�P��cԃ����P�uB�!���4t��Р!5��g�?w$��=�!�_��v�����/����,�1�t�ƔiB�jaPN��"�%^d2�$Ʉ6�1�F�t��rlt�2��Π;q�1�gP�Ϣm8��$��9��sh���&I9�$դ�CI-9K.��L:X�xC� �#�ZuD;R��BYT&p��͡<�C�<��$�d+�+�>r�#?��Z_#�3�M/�e�Ȑ��o�e�wbp��8S-�]�Y��r�N��aU�y�,"_�M|Tn'U��ԐZ���\&M�a�Sހ��ׯ��T��%=���O�z{�Uz9�g�IO�1!�E�4�1�C<t��s!5�H��5[I�K �4���ӂM��/�-��cA��������3 +:ȟ���@=eOR�l��A?ꉯ'�?}�r�O����T�">z.銌������hԯ-�iw{���=��k� a�������C�,�C�R�D�NئC�� +G<z���Y�([���� �E�7��i=�b�AC���\A�O��k�B�+���/��w��L��w�<��1}�?d�D������UEԬ�]�@�iv��Y����BQ�鍦7ރ��`A�b�0)`�$B>��g���s���Y�g.��/1n�_n���������ߘ�7�wϰ_�d8"i4���6�[4�X\3<����oq�%�P|�ǝ�C�s��ɔ;e�T3�(�#�j�nC��Lo�7��> �嵄���3�7%_�������A_K�n�^ ,��Pi�s����c�?��\�����t�N��� �� B��`��hD�SE�oOu̐�&ʡ'Q �<��8���H�1&��FT��ȅ�?G|&�^(=7�ت.�Dv6l��t�v�S!{lO�VԆ���!����������a���P~`*Z��p�����ӄ�qt�L�:R͠��L�Cs��R|�I��_��Euq��ӱKO�,���^&?����u���-�Ñ����#�w�6�N�/►*♺2�jw*vE�ME4ʈ�hn +�ҵ�Пƃ�L#�#�Z3�p'S�2'2�����h�����,��ď,��Q ;��mu\�ݾ�U{��w����+��ig�a����ˣ��l�ns�ۧ.���eqhW��D>F���` �}��l��A���mst��l�6+Bx4s��Pz�d�\���y�ʔŊ��B��b������5e Λ�]7�w+��w_��cmB�KI"�K�PU��v�v4����t�6�L睦y4,����B�8��,pc��7p5�aFr�D{�̔�=�jG����|Ŗ��6�\�!u�Si�z�)�k����N>�*�ve�]]q�+���aM�LtX��*b7�2�)�:��F[\�B:��qP��?�Y@���P���U/�bT5?F�37Y�-g�UYv�|cV��t�b��Y��k2�5��X�2}�ۗi��Ӿ�-K;�4�����N�ҌA����^6�r��u� К�H�W?�w�|��98�/�#j8��g�> �̛f����M�-K�e�Kr?R|���Z����9E���5.�fo�/�u��������$�F�!�@�n�� u�lJA@�5@X��YE#����.`ǕxZ�jUl��F�2���Z;s�n�g.��8g>�>�������&�u)��1�$~��*���2~DV��]���Y��$�ILLl'b�o�pk�9��@[D;W��"!�+���H��^૫Q��Mm�G�����3ӭ>�ȵ�NS�W�V:���u.N��L��V���H:.�K�$�M��r�"�9�1{b7�P��.����8E�C�`��{Jm�]��i��nT������ś��XVʳmʲ��Y咢L�SAF�K^z��<m�GV�1Yf�ό��dY�]�3�T���YL<��,�D�x]\(�P���i���V�����ܦ����R���? +���iՅ�g�$Y�(2m�y +qAn�$/��I.ovɒk�ҳ{=R��d)��=�����uM�aND�����J���T�Ć�j@ك���`g�>:k��Q;�k���i�Z2E]�\PUnZV=CU�`Q�J�V����$Y�N��M.)��g')v�'(d�s�8�]ٚ��&�3��&I*`�F�ga�4g˨�}���=�@W�:�Eh[+�������W��V��(��D�����V�erی�"�ԒJiRqì5�M������h�'*o{D���ZŜb����'z��|K}��jp�v�A���H{W�A����L��l�:O^U��niC�a����n�4�:vf�Gɖi�Y6I5�5��تz���v�����++�ET�u���Q�O��L���9DU0�D�R�/i?�WS (���l����� BԶ۠r�W�~>���oJn� +㬖��u1��D������m��R�U�j����Nau�g}Pw�5�n�|�����5sU3b7���%z��Ct�}���v�=7�[�*�J5Pjfq�o��Ez��S:B���L�6�ψiO3�ڐk���6��V��*Y��%]ֺ�)���s`�7-��Z�òf&^��l'��~��L�� ��!�߽�PvK'�^�e�.=ӑ�#Af�'����O�Џ�l�=R�-�4�+Y֕m�Yd�bk�u��f��M��_���Os�a��k�%[F�~����mf6��z�����P��(�h�U��(��(�H�"y�5�������E�/��_��f�m�7A�|o�i����=�3�z���j,}{����=e��{��g�����7�>=���f>�yz������Lwo�T���y���#@��D ��rH��!O.tȇ<�Tg�`�n��J���8��T��y��ʦ�4�.8�e���}��GO����������yb"������u������kh+:d������lX��a��uF�v����m �H���~��P��;_��7W[<�K[g��&CO�#�����ٯ�<����~#p;�n'�p�c4�}�����S�����?K;�9��0�� �]������<^W|1�J �y^Y�y����F�y�#�:.#��#��NW?�K�~��^y�w�4�'���K.N��毛�7R~�A���}XC���(��{���������THoX@zS +Ǜ����C�p+��WC|;�wT����Y���,��,������3���3����nN����A� �_z����|J���>e�|��5�r����B�<�����x��G���hf����L{�'�0yZL�A8� �c<� +���0~2��$�o��a�?O��@�([�@z��0����F=7��3��������0z� ���z9�cQ��- �7��ö́�1j��5�����+)?W$��ïK��(ۍ�(��0�`� +2=�1� ��|f ���L<�B��_�!3z���3:�B����$Ք���D�(�+��;`.e�� ���3e�э)߀z����]" &DD,�=q!^d1 !�����5�.BC�NM�Ĵ[:8�e��1O�M[�1��� "8f��1�3(%u��c[��K���M9AΒ��w�>���m�o0���8qLJ��8 ��ƍc����Gg ����0��H YG6�.����Y�c���\#'���+q/����?d�yTSW���K¾��!/�@� Z�*�,�ʾ�H�HXH�Ը����ТH݊�8�m�ک����^EN�w~������N�������r���Oq�w¢)�^/ �(s�Hl�Cb���h&�M+��_����<����8� ��x���K������K�O�>���N�c�t�f�'��HbG���Z�dAC�6�=��|Gw��ѽ�8}�|K� ��ߑ���g�cr�?F>�c�!S���M���A�\�=��iO�c��Og�#��SbH����5�|'.���5Ԙh�Z��z%�B��S�E]�3Q�Dt���NSEW���G�-��M1f����O���� u?�Ax���}aM>n�ۓ�������O��_�)��S�'z��R�C�*�}I�d+�d����[�}̛�~�?$'�7$�XW<�.z�6�0��s�;pv*f}τ���p�-���#k +�,�I�����K�`btV�`����Y.u˻��w5��2�U�&�߽6]��n|ѳ�����MF<M�y~oz���I�fC���Ʀ���76�#�u�Am��a��G�����������-��Ƽ��\%��9Z�y�%F��jM���0=�����f�a�v�o}����O��O�Հ�)�c>���>����~?l�������������\�Ȃ���a�h<������N�;�:�-4� ���˘'�����כ �[ 0X�4[���>��a�߿���~�}�'l��_���o�0��'([wb+`�5�0���@hl�FcY�q��e��F9��3Й���ۨ(���֑p���<�u�}��ֽ�K�{BVq� +n��n����� +��+�og�Y^G�-�=�w[�k���[?�0^�c���_�t-���ě��:�����a�q�F�be�=��-���V���؝�՜��vk�����No ��o ;(�6�1�'ǖ�g���;����͑ض9 +�|�/�=��7S���Ѕt�>��L�C�O�!�l�/5�ѓc�;)մ31�bG�ں=���[n�[��c�m\�L�_�&X����'\=�*����� 1���X��쁭!�Bwa��0��$Ѱ���ѡ1���&��T�,ҨC�h�-Mfٚ��ޔ��$��7'V94%6ҫ�V�ovZ�C�,n�KC�QQ}܈�.��K]¸c]"��0��I��i<d�����^�y�`��"�!���rF�Y3�]�yT�"�՚g�Q�f�^�`�MWsVK�� i��S��Ɣ����amr�Ku���o��䳮��w]�SƄ�T�קa��I8 +������F������s��r-P�Z�v���s��-9!���E�k�)�rkCFg�\k�tq�C�����-s�L_',����Iw�K�]uҿ�Io���q�ɰ@���p'��؋i��qꞀٳ������Rc�viy�]+!�hf�-yA�&u��JU����t�YJN�2ϮJQ�P����d68�f4 �孢By��V��M#vϓ�t����E��5 +��*08Lz�пd�����cE0��`��]Eƨ���Z�?A-E3ɦ�@�Anܘo^��fU�δѫT�KT�ܒ�r�8�α k�P��I����R���(�ܳ�7ܳ�^�r���*�s�1/7;Lz>q'��A��R����� :J����m(sEM�^��ğ�P�и�(Ƭ� Ų\+g�j�m��܂�RZ�W#P� BU�QV�W���-Su�=#�*x!�Tc'��jLޤQ8�'���\C�T"� �� �R�FM.�P1�h��a�, 1�(�6-+I���d���,[MQ���P�SV � +�;ejȵ��e�=nR�q�4�ew���8]���,X\�i���P��%�28Z��2������X��N��vQS�K髂X���&� �Z��:�\�Q-Q�g�9(J+��F���u�i����W�I�cn����(Y��S����üIw��y����pB{�a4�ܷ����7X��FU7��(o�E�42�Í��b�rkS,�k�lE��V^U�M�*�U.$W4 *�\��ݢX�q��0�����4��k �3���!��A4�(AD�q���p�U�֩�Z��� +X+ +8"8Kl��Uk+���.D���:��Z��u�}_�Z���?����y���}r��?h��<Oz�w��pf&p�{������|Πe�I��SaNJ >L1+�'Ǫ�$�;LZ�_3~�P��ec�^:A?��i�Ö���8�g��~����&�h�;���+�W&�^��I�>��7A�R9�����{��u{��d�*`}��¬4=f�15�����x/��j\j�ѫ;��|�v��� ������G ��X��{E�wϔL���m���n�5�l�����%���$ ݓ�W��o�����y?���8�lJeҁ�5��29�e�g�a�:_�_�q�ڋQ�q���=�C�8���9N�w��n�����X���ۚ�]2�xu��j��8��Q���gCl�s��4و<�+al܃��?/ �b��, q=0���D�Gcr5����04/��"�����~�}T�s��{�r�e����.�r���,�E�v�ܜ����GD����������7H}�z�Q�I���;��q-������r�i�9����Ѩ�� }�>�mm��V⭱��5^t��Wt�S�Y����Nq�̟���X���b�ߢm��_�6����*m�管;�k莿+��g�s����'����v���}��8 �����.B�-��8D�z �6P��F �m���m���m���m��dۤ�}���h���ͮny�c�!�xP:շ��n+�9 +�d� ;�������H�l@��@������Ѻ��EA0[T�V%=вdKƠE�4+�+J�D��u�I�U��>%�K��ſ+� +����T��� �O���ﳿ&3{���_3�[�������_������wE.�R�.uC�K�ɗ�������"�����ۡ�r��AWY�E ]��omb�j�/e�?f�SX�hf�?�� �rh^�U�?�����mw���fp����ػ��>����p���b��P٭P؋!�v��I����/��3x����G�������@���S`�� +����j'hj��X�U�5@��¨#���5��kx�k� ^��]zB/�Hf�����,d~Љٖ�@�ˀ�O��&���|P��:�t^��;5�o +��@]��a��\��:$�d���w�X���<sc���Ϻ�W�����[�����g�Cp�$�S���HO2R0EP<�EY�,��$�<D�ߐ���~�!}ȳ%�.�9R�R�hͥ%���2h��N�K�+*��t�~��I����M��ҟ���#�e�!��Xb?!G ��,�r6}Bɔ�ȢM��v�>���NR]����%����� +RJ<Q�I��hB~l!���u?B�����3LH�{B�̤�)��!����mY��p>�:�R�p����U�u~�ߜ%�H���x���]��/d�����Ϧ�{̽���j� ��~�O�9�^�D�.U��e�纍�.O<��Ot��c� ��BT���Pw��k`w%�襸M��t������l��V�GK��f��#d�<3#�K��w��a��5,Ն�!]�j��r�}�v�a��2v�7�Ἰ�}[��S-.��R\� +�@��!�nӀ\!Cu�~�a/Z�lE�Y`<7"���{���n\$n������ �qA�h�?�����J� �ŀ2Ey�uŹf�)�4�S�6��b*�B:U�l�|��� 2���������ۚ�0�#�Z�ŭ��� �i��4�UT��$�w�T�9S��i��̴MuڴWUb*P��ԅ�J����c��������~��2W ����:b\Q���q�}n�E��%���2YQj�PYl��:e^��Ɯ�>iNs8a�r8�.��h����v����O82��0��|a���j��|�t�m�����GF8BF�"x�Y����;����ը&(�n��1�P�O|3Bq"z����Q�t8�/ǃ�K��G�h�E����2 j���Ī}Eb�'{��c\jl!�B�!�$K�@$6�Ib�ر@���8��X$vl'��Y&��v��L��=i�&�I:M��m���43��3��{�y�9��^�+b?uU�L�$�L�(��8/~�?b.����J�Ϥ��T���J�>�F�I����l�� +|,���Ki� #ޖ�_���LA��YB e"�d�D��G_��Ş�vQ������e�sI��Z���OKB����/yȝK��3��kFJ0��}�n�3�уL̽�{T���� +���r���r\��9��f�W��9e�AEE�r�5����� ��z���!֜l�=+;ŝ�\��2��S����� ����cr��0G��Y)kX��P�!�J��E��Bl��k�d��J'�+RR��D�.0����ԓy����� ��5������L�G�a�Ÿ!�5�G�h@�h@�DЯ$���a!�0���\̜��/��(#AḦ́˚Ͱ�y �4i�ӥr�)uQ�L�6�Wl�zU�DQs���=\��,�+����{����xw�/\����: >�ul��G<�>G~���=<����r9��8�� �z1iV�I��Eזƌ���3�SZ�P���J\ܞ���x"�Y|RԡZ�oS�'���&��>Ij)�{|K !hQ<��� �0�*������A�-3�^d� h��E����0cJ!M�����aCq�G_N��U�{ʭ�.m#۩m�v����4�B�fFԤYJh,]K���N�i~�ɦ�[���ڴ߮%�'�7؇��1wޭF0w]�żcX������[�kN&�U&VfGTF��4�n�QZ��jF���n5�r��]�F��Ю����k�/'Yt�6��~��5�F�_�EO,�g5�0_�.|\�}���D�W�1����y+���Z���u/iВFEtU�G9����*=�QY�h��c5T4sm&���Z�����@b��bR���&��#�� +ӏ�J!@xU&��K���>zpu�6�͘7�9��o=Fl��c� �61�]�A�SF���4[˩ � +���ʪ�n�X�;��恸J�q��ʟp��|����&]ՇȗIz�"���C�G�/�_p�3��u�8mx��8ل���ǚ��y��RH��G�"��^m��Q�lF����Y]g�Tֵ�L�}q��q��:����4��6�Z�G�H�X�#*�qe�_k%xa>�}��g�6ּ���:��:1wv��w�Ҡ�Mζm�֖Ljn=Lnh�G�; +��-����Ze��ij�g[���nAYè��>_b9Qe5���^R��s|�^���b;�Gxa��}x��&ּ��+�?�1s ��[ܮhhw���~�{I6W*�֕I�v�FVvǘ:˩�� +zy{-�����ns�[�� +[gD����<G(A�x�sB����<!@x���!��=��������0� �Gܽ�������[�f��� 5�HU�R��Oa�-�*�-�)�1�������U����uy�J��8�{I(w�����E2�g�,��.�/w�l'� ���3r�,��{a`z`�Dl�e��x�����$��!�v$��ɏ(VG �c +����A;=g��%�pd�)^�g�/=vE��'��� }� /}��J� ��z�:�` �?7���8^�`�f +��T,�||������(�I*�r�/���+�PNi#��*��&�b3&[iRoC���yة�5�A�[��S�x�l�8�:8��0wp7z��wa��u�O`f�0��N��IP8ς�@���2���!�< #�y䌀�"�7DH�-�i�����1�����߿JK�ߡ'����}G�w���Ef�rÍ`��X��`b�u���������dc!#�i�9H�����Њ�V�IW +IV�䔕J��;eߊ+bop$rO�T��२]��Q;���v��.z�2��,�c�)!��+���}s���@��O�5b,+�<*_8��5e��� + ���wu콚/�$�'���!� +�aG�J�j#myH[C��C��/l�A� y�������_!"�[{�e�_D��}d{�� �*P�t ' y `���;oQ`뛌��]PQ]y��7}fPPi�(����PP��%G]O,I�EWE#Qlh,A\l(6tQC46K�b�z����.�ݏ�wO�w��p�w���w<���(v'܋���H�>������dZ�$�E�,��,�si�J����g����|XH�CBr<(d��sr��뀯��hf'07��!�_��R�����:�W��Ɗ����2��B_}�(�VM��* 6U���� M� �Me����0?������;�ϋ���gns�e@�@�Ӏs%`�����-T�MP^q��7�W;A�T��(���ĉ�ff>X�x�kU@�c^_�� �c?��\��p/0��Q�z:��U������e@�+ �n:Ԥn���ZpC��͐7�݀��3��!��/��o)�ca�؉����?�DZ��ڏ��CK���sw�ُM�>��0U�﵀�&��Ѓ�)yo�c��������ܤ���Q}�E����.>o9����G윸�����x�~�Q`����:�ϞWX��x�}�ͼ{��~��⦆���5i`M���"��C��FQ���l�`��.~ �� �<_��� ��@��]�Q}F�i +ͦ��Iٴ�6�6*��TL'���;<�wx���Pß-����l�٦-��/����!�9M�J�%��rh�S�a��q�%��Rճdo��6z�'D+7�l9�����/�6B�B��Ih��Z,����=�eB3�2��X�'(ar9����!^����H����3DG�����z��p���t��s<l9�a��4 ��3�F=��@:^���\��'���WmB����T����~�mU5n���5jmjt�6�����2����њ��.l�?�%��I$�?�K�Qxj������0�������qǰ� p˰7�Pk؏�qT����!�ۿ��@�IHT� �ӍLMD{;���m�����^�hp�g-{��e �;�m�1���j����)�Nq�i).9}�Nkp�y�:�@��^T�E��y�lyW*s})�� +鈛��݄�p#�?��(Iё��e=>1�E;w<��;A��&W��E��8�>U�Q�1�=�H?y,�NxdJ�<��2�u�Q�-R��.�����i������OeE�B��v�W��jz���/�+�/�x����=�K{+�~�rKNX���2Z*�L��-��!K��e�l�%]�ϒ%���#/����X +�|�* +}�)v�\Ul�Sl�}����M�bc#�?4esZ�4����tU�����\q��/���Q��]�}��IE�cd�����O��Δﰦ)�[+�ZW(7[sU��ͪ���� �#���s�5�����oP�t�U]�*������60�>��k���t&T��� ��Q�?w����Q�=F*N�m %�4N�)h�"/����_���W�f�Wdkr6h�vج�o�"�nY�o�̠6AB�m�А�c���̿���B$�Q��~<�)p0�Ea�W������HiC�x�ڰ��ܰъ��_(�{NV���^��� +]d��L��k�$d�>=�H�(�aAh�a^�S}ZO�#��=�vn��4ݛ��jfWpj/�s'Ϡ?FJ��׀�7�G�bCdr#�H91�������Pf���蛤^�'Y��g����i���3l�z�2� �h���8;��8�������R�}J_�#�6{��~f������췏��l��:l�v�ژȉ醕1aRVtYFt�b�aʅ������&-j����i�ّ���"� )+�G�7N��i�q�4%�Cr�c��G ;ғ�=�F�������Y���c�P�'p��Fn����XoEF|���O� v�"-6Q�͠���hfL�ΈI�M����=ߐ�e���41z��W�����CR�[c�@a [�5{�砚}>�������)8�� +|�`BV������`)-��,5!Z>���ʔ��U���L��M����7]?1n�ݗ��bW����q\�>���r�{�c����;ғm��|/�����#Y.��h=?g�o�ÌX<�5��/�e��������GAk�Т��!��#@� A����z@T�Bt]O������Za��]��-3�um���n���~���L����_�|���?��~���i����扫t�$���))2k���89ǹ0��Ւ�J��T�2k7�gk[=Lڃ�Y�S�L�^��&3iH��$���%Q�S�����{��K��r�ٻ��>�5��`�:�d�1�U�K��k�R���$iAz�c~��97�⚣[�X��Vu�������'4i��^�ԛ�4�#u�NpK� J����?��sY�Ij�����e�C?��1���4�Lӱ����ظP\���!?k�Ԝ�s���r2�\�V�A�Z���w��mꔌ����5I��^Z� ��Iz�-Y/(�b�k���ی�8���(b��q��1;�¬A�y<��/��,���Ź9�$�9 RSv�,3��_nvI_^,י*�)� nZc�:Ѹ�#��M��&�����x���`�D1̧���L����ڿ���bI��c���HQbQ��`,��-�-�)�,Q�L�R}~�,=?�15/�99��U�W�H�]��������k���=O�yƘT/6*��5�a�pݝ�'��恥�.���8VrVb���k}9%�`* BfI�H_�P�f���Z�I�W�ɖ�09%[\�K�Euʘ�-n�E{�#;�E�<]UG��Q(�"ed����\�g��S���V�k�z�e���r9�*�a��GF�4�*CD)��⤊E�Ċx������L�ūr��*q�*��/,ۤ�_�[^v�-��,��-���*�TP�[� +m� ��t3�����[k�7ֲ�!%u����NH��@r�Xh���v��或�E�c떈cj����iDm�lA� +����sk]C�[�WQ�T�YR3�YsW�Z�א�眧'J�#�o�n���X���L�m!�Q�%�#�41M�����pQD�"т�qx�N�hrm,���X!n�w�ݰ�yf�a���^� �̨��<c��<cY���<���:z@�-��[����}����,m"[\����mc0���lA�kE�m!^�ŊBlI�Wm�,[�$�V&��aZ�M:��lJK�,��#Y`�w��m�,`+�"8s�9?B�6����n�f� (� d�҃�@�^`n���J�n��,��쁘a����9x��i��0u�S�-쳊&�k�������O���/�Ƿ+��g����o�s���~��dܛ[�wq��:hg��X�1� 0�0{��RL>�¤c>��� �x�c&�;�b|G�:1�S�����Y�Q��1��#:�����������A�s�9�����|��������ҩwX��=|�}鄓���2�v���� ��q��~ �� x�́GO4�=ˠ�5½� +���P��B��E�E(z�<���(O=����z�]ɸ-��w "N�!��� ���t�;��<�����J��i��7N}���7��PH��I2$�9��CԿ����p���;�����7�q��BƝI��S��������0�"��@�!�tI�e���Ko4pe"�WX�0��/�#�t�pL���.���#?�o0�5�w1c�b��z��x��;��~����~ �3�'��M�J��p�T,�=�/^`Q�|9��Y0�y������\t��$o�>r�|O~|F�!����Dϵg�/P�d�c��E]��c���An�ArKĂܑ���l�X ����Y,?`���/�G|��bh�E��E>{F)�[6S�Dϣ�̘.c� x�6o�>����&��w -C�}1���<%�ă�=&�Y�E��y<�����N�� �>Cp�m49q�42�,&�$�� Ud=�LZț�N�r�������qO�?�/� +����z%q��x:�)$�D-�"d�% d+�A�Pg?u�1��q +���x����k������%w~���A�E?4���t�N"��|G҉�X�y��8�&>y;uvQ� ?��u�R�8�ۃo�>�?��pn�A��+r�7Fx@�q�nT�\�9�C�41$���[���1�j�l��f�4�h���:�Ӆ/��u������<��;����H��T�}Pem�:�X5�$�p1$�$"B<��x-�J=pQ�깞�jkkն�V�c���uW����m;�뻏��:��3���̛���~��۴�o�7(S�韮W���_'�}Ք%�CC�P>"�QmCT��oB +~�Z���C��j����]���������FҊ��6\�l�U�~\��_��qQ���B�Y��OU"��1J����� F* �!�zR}��/��&4����w�|���kuW�a\Q�Ɨ����#.hV�s�|�يs�=���1|��Nw�'#��k"�uq����b���$?��-2�z����p��۸�%W���b7;>��Ź�U8ӽ����z4�Þ�8ٳ'z���^m8�k��:�C�O�`�k�����O�]�"���_�ǘ�٧����1�-������O$.E�������&�Q�8�Ñ��EO���g`�f_�BfO�r��2�lav��lp��x�ix�m��7�1Fd7�w_AB>��'���� ]��8\�Q�|L|4h��9�'�6{�6���`���ٮ�f:�S�-ڙL�v.�Y��ݤ]�n�nb�kwr���ܺ!g�5C��V��_>T�-È��G<&�w銿6��Z�Y=��[|0,��Ga_�p�ҍ�6� [tyجs0�t%�z��m��u�:vMl�*��[��/�m�[b�J���,ѝ�.�ݒ6�x,m!J�?��� +O��?���$�[F�M|@���380J�]��b�^��q��!ވ��,fM\�2��]Wʶ�UqK�����i�B}��Y�HҤ_%��o����5�O��W�����̸����O��%R�k�L����!jy{�Io$(�'ClH��&���$�%���IfQ��mN�pM���<C��c���6̔6$4�f&,�'��OK�!�O8��3\P�(�$>�$�2BZ� +���P ��)Ҟ�s�=�n#ڌ2��tŪ�h����1hNMa�f3sR����N���a��C��1,�36 +��K�5����e0��j��*`�� +��G11E٫�`��S�g�����~+�O�fz^��b�)K2��9s�G�1sӐ�����c���7_k*�ԘҐi��:�A�/�OL_��LoWU�P���Q����*�L��,Ch���>��rp:���>�i��B�z�eE6�l �r��1�M4侍��>'������d[�P�����JY�Ҫ��2���ܤ�W(��6u�y��8�Ɠu��E����^�W�(�6ҜN`g!�XK- �5?O�Y�=1#?��o�v����`�� ��UyvΟ���-R�%(�Z�B�e��LU��Q��ݭqZ>�8,�;9,?�y�'ʝQxɷT��d�8��Gڳ�����X@~�*P`���ڢQ3a�6=�$��fb+ +rٲWZPėX}�5 +�� .k��a]��[m�]���NV�M�_j�UTXE��gܤ:�![G������-^��]4�:��u����&���r�D�����i�י�;�����^��Q%��k�}��j_�ooU��wj,��\�u��b�����3���^���w��Y� �G���r`���C��3��}Q�ye��1L��ȸ�f����nowKlE~���F�/zGn)\��)\��*ܮ6���,��x�2�Js�� ���KtNR�S��*�4~�$�'�����j�+텒�x|�Q䋃�7�q�2� ���t7���畖Kr�!Y�w���]���Q�{;Tiޣ�T�ď��Q�V"�_ <�3:�S �P��4v�������N���O�~%��npUF�Q9�F����X�Ҙ��l�Ri�r*��J�$�?I���R���F�*Er�Ve���*�I�X�P�T!*��E9!�{�:��;)��`�Tҝu�i �/>���aB0�H�������1șld�B�Lf(�5�\Z��O N�$�I��2Cp�0��]<��^P�U� ���T��$ +�Q��S���o��&�7h"i4�L#�UOs��: ��{�\?��a0�G!=���p:c�0��66)�a �~nL�>���\�yT��Ɵ��3,� +ʦ0�'�-Dk�$F��5O46�5"�eE�8���H�pj�%�����&*.��TӨ(1�> +&������y�{������E��� +�9�^��٬Iθ�I���&9]h��Bm���^��]�u�KY�+Ǣ�V��w��dX�'���!-'�Y�0�����0������g#Y��T����:Ga�f)�r +�/�lV&�TƜ�Ҙ�Xe\*T�%�R�=PC_7f1�&��y�eVr���� ��d��ia���=�����H����>}��BR�8�Ο,��$�}�o�ɽ��X{�c?&�ؾ�c�~RĬ�v��yw��R�@�Դ���`5�G�Qk��W�I%0��PCi4�K��+MA/�@�tC�c4b嘆HG�;r�X/us�������Rغv)�XH�k�����}/�q�;�z�8���x���@�M�i3_�pz"©G�3�*�ViDhe +B*"�r8�*Ǣk�$T͆U����[U}���V�<��B@_.��S}�YԞ�qp +5�Qod%0�0o��6 r'��Է�%�\:�+���2�A�v���k<]S��ʄ�e��Ue]#9K�@U�����{!�m����y�`<5��X:x�k���7�A�z��>���RS0�\$1θل�y�Y��<�n&� �;��|�&�y@�/�a�����r`:}�@�����O��=@��@�A@w�:(�����_��h�ʹ�8C;��2na�oa�i�&o��-\�����?$O���9_H�g����F��W� � ���c��$��9�ϒ����j6@��Wz�BW6���.�Ao�������ʢw����^����Kr�����N`���'��N��f���nu�N�_����_�o��JV\Wp(y ��es̘|�A%��zp�v�ccp���>��&�7Vlc<�.=c6��$�z�=�0��8�����WO]�Թԩy��$�&ߓ��Bwp_��<�v�1=H"a�,h�`1���0肉�g�0�P�B �D�D�*N�@�#3I�"����2RN��N�@��I<�7���>F;~�v���[�.�vB���-�ӎx�J���d"���%����"��SB� ԩ�N 5j�{���q���|�˿�C�?��N��?D_/����b"���Od +�fRg>u�� �p6�Q��)����\s;SU�[��wh�W��p��}����+�\�D�� �Z��BӅ9 ����H^!����M�?Ө3����m��&�SǎXC56s�jn�ݸ�X|��8���%�:�U��j-���@o���X� �^�z��XH��o2�L�7�7�Z��3�����X�Ȧ� +��F5*p��hf,Nc<�Gi�a����&���U�nO�G;���<#pW�� +.+���m�W��s�)hQ��窏pJ�'T98���Qu�KpH�nu5��uد9������:��P�#�"uO� +�v"©�A;����*<���h���?��p�{��}���X�N�!��pkg�I;��,��.V�U��OuEhЕ��u�]����.�)l�����m� +p�-/ XbEw�(�K�e��*\�y�>'���Y@*������o�1���zuAS�;hv�cG�bl^��;�C�Q� ��T�6`s�Ql +���n?J�p!���!�� "���'��,��Y��<���8�}�h�HBm����cj"G�:r<�Q�Q�ʣ>Ħ�l�Z��D����B�4z�T픊��51n�(�T{G�����UHOi�c�{��W����T^o}�kd4�h��g7��P���i�h�2�X8Pbxņ���iuB�T��#�'�I��b9/a��2a��"a���xF�q�-EN�cEv���:Y��=��k�=ן��@�|��U���߶�^p�Ħ�X��cBI�Xc�զQ�7���4QZe���k�!�0}$-3-����r��P�e*S,1mU,65*�N*$�Pf�)盅"���J��C�ơ�q�s5�����>��}{`�%v��,iȵ��2��j/e[&IK-��Ŗ兖y�%[�a�)�-%�y�j�ť��e�y���ޙ{D �K] �q�D�pFf`��f�����D� +5.�K�q-�5z�X��Tk��Ĝ4�mz�5m<96ij4Iۓd��1��w�=�<��������/�*�&~,�$~#�$����h���������he��3x��9[/ ���)�I?-�8�7��`�s�l�ِ'<kp +��q��J��4u��4�����]R����՟�+ o�z�WryjH"�>�|�z�e�m�A6�G�#�����ulI�����1kLs�lJF�ɄU&��3-���X,V��U�ZM��I[a�(�w�c��m<�+1�Vl�y�+6��"SH"���?�7�w��g����:x��u�H?6�#��<M�Xm�E�%��4�X2�E�Z� +�S,7{�2� +�ۼZ[b~^*6o�]���B�e�Ka�?�����L�K�^��Z�e��}%�s����4���k�ah�E��I�٦���*��t�۲�m�Pj+Kl�b�ͫq���ֵR�u�l�����:��l�sm�/�Ԭ��k�Cz�����u��]˸9��D�q-빮�l-�#Q���W�� +eʔ$�#J�L�HY"8�X���r�]���+~)W�$/U~��Q��)ʅpEy'<[���!�����܃�Y����ż�1t7����|�ۊ��Q��B��Ru&����T��@�j���:�\�L��5��IRԀ�Xݭ�R��Y���Vx��O^��YՐL��ܢߗ�u���J��@�o�/��K�} J�#Pd��c:�9��p��HG�#KP���X&.q�5َ�,G��jo�2�;u���q.,�q3l��>�����P/�����^����0GO�4l��^\N�G�V�G�3 +���w>�<�\��$丌X���]9�b�C��J�L�Wcq�Ҧ�6H&g�ltҥ�^ե���Ou��o�4gH꣰�+y|'��{������X���[�rz��TB^i$��1�qO�➉ŞdyRa�X���,�|!�S$.�T�FO�&ͽNkpo�R�r�����F��I��II��>�KB�^ޠg�S�@-��H �z��������dWBV�HX+' �; �<��)XTe��ʆ�U��VU(�eb��NL��,�n�����{OKqޫ�)��ڸʐ6��'.��S�8\�>����8��4�ʕ�] �\��n�� ��~�OF�o��}�H�Y��S��s >�����Ź�͚پ����S�X�[�����hb�B��ڟ8�t������f`���5����|?`���4Hn���X�< �S1�?��$��0�o�.f��0��f��i�������8�Y���c��c� �1������Q����u@�fύ�CPD�3I&s[�1�ef��ƌ�hLo��i�q�ڪ�3�fL (�(@L�с<؈ �=x*�)����`|�W�� �~���K����wQ{s+=��o�^�[��6 �Q1�L�Lj��ۢ0�m,&�M�S�X<���`*�30���`1Fk��Z��ن�;�aX�"��FԎG�=�a����Q��e�۩�B�F�T'������%`�^ v�����>�ۣ0�}�ڣ1�}�t�'i���;w,Ǡ�F���h?���[?���C����AzdݛX�'�$��b��_f�1G�� D��qrº����+RW,�] �Lz?�]<X�j�z�bNt��x��|�M��=�|k��[=�tw�yG��_�)����h�I�;>�� ��|��d8pa�D8�vs ��0��C���K77[7E.��̹��3_�oI���}�^��3��v�i=�E�W��G���A��� �a�:-���Dr��:���0������� 3�G�_�l�����]�B���G�>Z�{#=�`��7����ԧ�_�_�� D�Q��ԾI�@�!�j����{����r ��a�C�я =��aO�p��a���Ȟߓ{��G{]E�Y�bj���٬5����{�����#����|D�c��1=�GO>�g`�|C�x���/y�=dO��4�� r��j��b��E �20�*��;���o����!���"\>�'u�g�_���K�H����2�������kDT��}** ��EZ��n��nh���YDQ�A@����B"2��b�M0�1��rRV&N�RV��8ff\*5qܢo~�T�����������{�=缤O~���ld�!�H����u��'3�en������D���ٍ��^ӉYD���d��d�"�d3�Av����t�S�"�oq?���x�W���?���"�����~��1� 1�t�K����l�F3�`'5ڨq�s�s��g�#>��mj� O9z�<&�ȿ�?�eg7�N��&��qd�OT�@���E�ꬤF5j8s#5�P��{8g;���V��!}���i�_2�:���2����G;C5��ķQĝL%��_AԌ�3�s�Ө�C�Bj��F%5j��H�-������_�'�Q�B/��/���}� �M�oq�~�$7� � �/D��Ác���9}�r]*|=�c\|ur�QD�UԨ�F-5>��V���9��w�d4��o鋫��˴�����wi0Z�"��6�;ٙ0�eG'�\�;�k���B��q�5��J�N&gͣ��p �y]U� +��D���h���9��Y��ВS��G|��kw�ql���C�y�e������Æ��o$O�^17�����x� ��Ұ,\p��9�b�u,Ǚ�U85|z�6�S�9�G��#�qGF^��Qߠ��1�]��s�h��!ȓ�����x吻|��!�+�ȍ��p�y~���.����)�D�pM�1�lt�-C�[ :����jt�mD��6to��O���$�x��m���}��qo�c<��6�WL7OfRߛ��7�0L.Ot�%wW��|�=^�� ��������}��`��M.Ů�k�:�-S��cJ�O9��S��y�l�vM�=D��+4x�B� y�4�����������O3 ��: +]�&��s6L���*���g��sf2�ϴa��R4{b�W��*��U��Y[Q?k�P7�S���+��}]��s_���\��u��S^���}�)����ZO.���;���v{{b��s��%�}4h�1��' >Vl��D�oj|�P�[�*��B�o��ηUX3��P>�G\=��X6rޏb�|Y,y�P<��\��{-��]�~�t���S��\ `�<Wl�?Mz�a�?��T��ӡ�ψ*?*�ұ�/�~�j�R�̯B(�oJ�w�E������}bA�]iY�b~�<@����}��6�/G��d��&�8��o;蛦�g��G�B/�*h>*�a�R��J=ʔ�X�LA�Ҏ"e��BY$,W�˔�b�r����+-]�--YtI��#e?!��,�C�G�߈.1��0�vƲ�1�-Zָ��.� U�c�6��C}P�U�T:��(P��L��<U��TU �ʄlU����$�U�%[�)=�"-�"-��"5���.�#&���5������C�����4Ўʈa(w�ʈ)(��F����5�U둣�G�:Yj�`W� 6M�����4��U�*�h+�"�*,�_�(̑o$s�,Y�!�sG\�{��k3{���|n�{ ��kEG��0j"�^����m������`���� M�.��r�� +1Y�V���%�n����P�G�Q��o(���D��1 r���q�)jw���ge��g#߫���v,vF��qX���L�l����C���D�ހd}"���Ő-$� �r�d���ۥؘvEL�i�!�B�w�Ȓa7xP�#����} ������v,5�@f�2�Ӑf�ո���`X�j��#1΄����)� �q�D��Fԛ�JѦ� +��G�5]SD���2��X��{���sI,���βoW�Lj9.�]��Þ���7�$L�%a�#!1��p�%�`4kN��l��<!�\*j��b��YҘ�Kj� E��sE��>y!E��_H�����^����X���<�j����#5Y�%� �`J�c�/bS`H �����D[��ZӅ(�RAc-"�Ub�u����B�Ǥ��+Rp�R��9����_���P�p��|� l6� +�iG}�dc͝> +1�c��x����@k[�H��b���[f�B�+��:q��#1��&.��헥��{R���h��2�q��<��3I��+�s��#k��v���x�a�>�Y�=�D��lvBP&-~�����,�"d���%�Ğ�X��VjI �5bԴ�c�1�Z�i�C��vZ3�\��o�1\r�{��y��{����lb�>Kz �4&�Vq�.�]#�4"!R�hX�0�&>������'����dӀ��~��M}��̽������5G%]3G%>4G%��V��hd���e�T��>` + 3��8�E<�gTJ�&;iH��bR�48%LS�h@j����T����6Q}Ҧ+:m��Ҳ����+���3m�),�)t�USh�Sh��d���Ar�Cc#����˰�Js��z��2������gکO��zguStV������_ٱ +ώS�� +˙�М��SP�E9k�S+��c�,�����2L����/���R��X�ݲ|އB���}��0�� ����f�8*��]A� +,V@a����Zƨ�e�|,3�mIU7�"u����e�<-��\�Ga�<�X������|�"i z˗З�Q�bjP"M�1+�X�a��F�J�Ե�C]J}�U"ϲ(y� �{�H����k��r)O�sy��)/�S�f9��C�y9�~#ǒ�r*az.nc[5(�X��hda �V�>���c�F�g��W�A+%��r�:���!����-;k�l�q�l}Q�3dcMW���2U�P�� +#[y��L���@��^�R�E7�_W�?7Hq��R�)`+�5�o�k��Tg/S��|�!��adg,���@���PՑX��uw\����xº2�����s���/���)k�S +܍>i��ޖl�oaHa1��~R=Ci}_�CP ������o���,^�Ç���<�OXI�-�A� ��Gh�Foz�<�^�Òs�dwT2G��vN�I�8E�a�g0?�:Ǚg +�hrM�@-�H���|-�����/�:'������֣��?��<!9����s������������E�%o���*q|�`� N3 �����sѼ��&�'����gS���y\��1)��OI����ԾU�C�l'F h��§p���Ĩ}�j�0,����]��o9-4�^�WB-�I�|�r�v�w������뇮;y:\���X�J��gp�_۪�p��{f遭�=5�����b0�)�T��@��63��8=��/��0q�L�Y0r��C9�+l�����n�(���O=ҏ�����w�v���Wrnǥ=� �#`<L�7 2a!�/�c�'�Dc=Pڦ�[uPt�s��3���?��v�V����Fk��������"`<���g::Ih��;e��EEh���*֯`�M�����b�Fݤ�u��r[���>��<ŕ�l�d�l��l����j֟��%��hMFg&����9��G�E�q\#���d������G��(�+t��|�+e���`؛�����=�vE��Hr��sh�@���:s��t4���C����j�Q�N�F�i-��9�c<u�j5�Y# + �Էc�b��z���;��#�w!�`��sqQ����D�ʪo�1G'���8N�!�#Z��kuX9�z�Z��{���K�B����A�S���y�[�x݈�:��5ud]hA>�]DN��g:�Й�C�GaoA:���N:K�(g�Jm�5���b>���i��-m��P՝ U��|�Ǵ�����U�����l';���c��WC�(�<D�l��v�vڽ�Z���n��dm������ѡPV�bU;�U��&�wܭu��Z��;�r��r�G*u6���P�S<B�+�����������'����I��N���U�� ��~��2\�\Fk���r�� +��Z皠�n�Z�6_+��T�[�J��U�^�b�Z-�8����U�ק�ty�������k�şVۓVɵ�`������z-wV���6z���k��u���F���X�vQ%ݧh��-�N��T-�Β�'_>���N�z��M����=�~W��O���2��|�u{�7W���� ��?w1Ԅ��Z��Y�����?T�}�40VE�q*�����zM�f*7h��+;8WY�E�Y�y!��GsC�+-��)%�)��a��_�ڸŵ7�+x(��0fl�#Yi�k�͊P- ��%,@�=#��� ����^���+e�O���iJ�WZx�R#2�Q���>�����_� +h- Z�E%�Hy!�@$�� �$�BТm����������N�!��Z��ҭ�͵{������3��n�u;�֞vN�Z���!�~��>��Ͻ��`͊�O= �S��&��'�,V�� iw����$���uL�s�������0��^5���K>[R��)�G{Z +6�g�-=��X�a�ڌ +��pQ��?|�mX�� �� +o�^��:"�Y�D��X��\�f�!��U<ຒ�����X�`�d?���|���lΞ���H�)�E�k�Ӱ:;�9:�rLh�)GCN�9u�����]���Q��-\ʰ�Q�j�IY��̡�T�P/*IT�80��Tf�?گ>����8�b팣E�5�yhV-�O� j����Q��`e��<�y ��[���v���&*�w��_�4#2��]Y��&��H�4c�O�79��rZM;렂��Ʊ�� �_3��9�j���&c�6.�N��:�t�p�Q�����æ_/��'EY�QZ�'��̆wd%��["�G���+�����?X�u ;i����&}6��0�(��Ӱ�9�lT4� +a+,����ƕ(5�`1��h�(.z^��ɊLC2�iTVh�#��H��Ec�[L��y�B�~'���Z$[��s���8ܦIp�f��� +�b�L�a5e��X���X��0��QR�Bq�*�[`4����(0z�Od:�y���c���/"ɴfI�����J�G�=L+���s�����3���Y&Pa����0�J�R�si:�K�0��PTf��̊��ʽЗ?]y��X���}"�z\�lo�T����Be��(����me-�r��A/�{"�z`-���]c,�M���b{,��KQhO������|�+��U�A[Y��J�*WC]���[�:��l�1�p�YU�D��+~����g9��� ۀ}M���.�G}\��fN*Kq�C0TGB_]�"hj�!�&y5*��P9�P:+��Z�lW3� �tu�W�H�=*�gDj�U�O!wIB��F���s�/Qw�Z��ǀ'Ɇ5�y���0�(�Ȑ_�{��8���C��A�G�L� �V��;�V߈���Vx��2oR�/#�{Z$y� ���H��D�G��qK�U��(���=�C�$ �s[�*�e^ �O�o*2}QH��GZ�"țR�ڔ�M*,o6`Y���UHj�"ѿK�[�'���?�����m$4�CB���$�!�s����;ڹ��'�Z�g��[#cR3��� Hi�@R�$��bi�,i]�G[Xܪ��� ;�u��Fl��1��1m�an�%� �¼��"�EB̺1�q�}����~��ux��@��s`�3]�9 �;�v<���Y�휋G:㱠3�;���ż�-�������!2x��Ø�����cf�0k��}6J���s��l���O�\�<�N�DI�d �%s��"*���\���$�����1#d���SC-�ڊɡ=��}��c�ӟ��1�K��mc�q��[���g���<؎U�`�4���H�v��f�'`Z�L���p&� �4Ba�����{y�����,�0�`=��z��� +�bc��'.���.��v7u7R�j��<x���d�����L{�}h?�o?�p�l������ ���3��`!�3������n����pHB������\�}�C~�F���3�0��G��y�� +�����daC���8�8��M�/��#<hFXH�L�0�����o�M� /���s+���<�^f �9�ZF��!��0�0�g�~���?lJ�2�Ǜф�m�����(/�Qp������a�AF������{��|�gn��8�N�_��I�fs g�&�EMN����8�/�%6I�f�����s� �_e����K������Y`�9�ϓ�ɗ�[�3�M?j8�b�NS�,돚�Ԝ��q-.#��²b���G�w��2��)� ��&���8�o�M�-^|�x~��w���ͺ��I����3��s���G��ԍ���M}�c_�����3�I�B>#%L-[J������pm�c�r�����6��0��%&^��J�����I$�"��|�H���L����8��x˥^ȩ�I �@����@ ���\*""^��b�2T@�W=j��>gm��t��]�3�6�v[�����N��vݦs����T��|�?D�~���;��K�N�H�#�H3i#ϑm���%��1|�I�1��G,�C�����y�|G���3��y~�g_2��)ѐ,�O��"Ưg�F����Cld���b���O��aj��W�L�����#��>��[_0���o�6��9�aOƒ #5 &�$�dP/�:jT�ι_������72~�w1�N.�~�v�p���:��k��ߤ��0ڍ>$���<x�0z���oD2�D|�Z| k�F ��5��Z�o`�&|B7���q�ܲ�� W�8�_�U��m��/��-V�� +WțO!��S�\�Qs2sfN��KƟ�/~�l�Q@�RfV�_�ǻ���e���}��Ǜ��N>��%����q��αRg�r��r��a�ga��������oj�^ԓ2�4j������Z����}\���q�>���)t�vpg���p/�/^�_ğY�op�j�G�7�0������8����=]���O͙x�ԓ3��I�<�87+]J�j��bf�@�F�Rc�n�)����C���\�v�V��{�k�4���W��y�? ��C~9��wy�D��)�B�8�%3���/D����Q���U��^���j���M��]c:�u�t�=���'�y�e����&���I���-`�S<��m^i���:����?_������|px\L��މR윤B��=�Vt�8��ǃN�2t�T�9�%h�]�g}���w6�vc��>��G����c���h�"���x^�Q��y����1��H���}^����Y�:9?�"���56�qj66Lub�TZ��GK�B<�kW�)hVub�]X1����e��G��;���Kf ?�6��I�:�����E1g ~��s�7ڧ�mF���eV +����5�f4�`Up>V�.���X6��!�QҌ%!�X�5���0�<�_Eu�g��x���G|L�w�� +��d*g>�� �I��ǚl���)X>�#��"B���T�GP����\,�S�Es�a�jTϭC��FT�mCyT�G@Y�̋ �Q�o� +O��}�����ձ�!�|�u� iKd�煕Q~X=u1���cQl2�jPkDe� qN̏�,���Q��⟠H�n�(��D�� +����>��.S�L��>{H�h��%��kS'�F�$$���Ơ\*C�4� z�$d�(�OB܉�(L\�|�2�d�p�:���F��8�7`O�9I�a�0��x��'29g��I���i�gk譞>�'�B>e�`���H!�[��B��IF��lp&9�H*F^r%��K����)��)w"KyU�Ȣ��(S���`����n�:ظv`�`볎>V�G-}�+Ǣ$��t(#�R����#O� +�J��٪\�Rݰ��#+���F���¤�QsD��yUd�� _Ad�����s����6x�����:�ْ�>�����(�}�T"O +�:��X5)�h�ĄLm6����KaL�A�n��6�tۑ�?���Hc�N�A�F?�V'�.�����w��/����Z�����d=�����F�.�V}0,�9�ԋa�+`ԧ!Ð�� +}����Bk\�q=�L�H5��|Q�4@�A�4 "� F��'��Aj?�xK1�#�MQ��2�����g��L�d�L3�a����Y�t� +Z��LԙyH�!�RU�2�d�"9k����^���>d�{|~y�0���B�c�{?�wp$�(�^ �J��5�ř��i���� h�!Pۢ�f�"ՖU��lR��H�qC�Sy�R���H�o�Ծ��s�G�Bl�$v��a�3�#�{/u�+9�Tq/��<����\z1:EP�yC����YHD�# +�rGd�$:m�:�!q�A�E�k-b]����g��|A#�% �9�i�?��wQ{�"��>�9*V�K!G���%�=�B$��A��� �;��y�� ��@TQ ��`NQ#"�7#�xO!��m�9B�!�H@���+9Κ�~/�;9�_ +4��s]�QQXW�e�u�eߑE�=�-����f�Q�(̸ �`T0q�8Q�Ubզ�A�lVMM�`L�6{b�CRc4�h�������o���w��{xm�c�b-��fJ�M�`�P��W��`Ř��Ք�hSE�(�4\������l�dZ��R��[��_����yE�`��o�جloCk�i�Y�Χ6B��}�3�U�XO�|)�uF�(<�K�9]�����$*0��r��?w��rS�%/C�y���{I�y�dȫ�W�{�̻$C�2�0M�icv�E�F����C ����������]o�Ǻ����*_���c��%N�Ӑ$O��,�L�[��f)��e�\,{�d����39�oɥ�.�����߸H�\�y`[���t��C��H�H�okG�[��j�V'k�\��r�v����:Z��u��$��M�ℵ�D����\���C��-i��`�|91��]%�^&*����YH�h�r���U6/�֙4>6����V��vЫ�� +�dά<Ȇ3D��$��ͭl��J��a�b��WS�2��m�zAWڄ�f�_��0'��xn����i�]�'��)�vba'��l�uPC!d��|�R��[Y���p�����1�5��6��v)��4�0���wIw���v���j�Q�:jXG ��.@�Z.�Z�}-����K��b�����na�14���,��tt���N_tb������\�K���K��3�4@o�/u��a���h�j�!j�6p��EN�c��$\bq�'-%��r?�= ��k�g�Y,zA����&Z������@��q��.�I����X��4i�Á=9]�l�i��x��3�o�'3���#MF{���-� ~FK.�w�uN��Đ��v>Q�@$M1p2 u��1(}��\�����4����7qț|�m��3�}�l�d����I�ƿ�>_{�[4�Ү�)���y�W�P(]���%| ��[��6��]?�>��F���C��#�c6�1��q��F�./�l��~ �`0��)`�(�b��J��zآ���~d�|����i�s���Y�;}�/���\��p�e�d��Z����AwH�0���Ŵ��}��k1�˰_�}�������-�� �:��5���5�u�]�|g��u N�������|�OC���x���̹7T�}�c���ضa{�.0��.�S���0��I�����v͏�C8 �Zנ������"�ZI�J��a/`߈����"ih�~1���/Ƕ �����\M��?��Ч<~���b*-��a8�k�7刦��NƠ��A�Bc")��}�gc���f�cߪ���^��N�������*�ȎSD�2����P�-�T+�nK�K���_�������ϡ1�L���4ʓI�g�#?��EhX�����rc�;Y�v��O^�Ö�}�5��1%�;J�U���<�f �ȋc��Q���?=�IBg~�E#�ih���4�S�N1�ehTh���oֱ�5���HUD���R�n�|O��FI���7�c]O�;�99(o4�ыկٓ���p�>�h���i�#:���cFg1v��՜\;���ke��ҧ.���]�:6k �8�q�W:Dy��{�+�e����Pvw9��]���Ƨ�im��Z�q��G��i�V9�h�s�V8��s��\ +��e�J]�*�T��N���u���A�2�_T��=z6k�\F�����X�ᷔ��a�w��͆����SUn�Z��=�̣����U�9R%���3E���i��I�� �*4,�\�J�hX�|���~C9>�5��f��Sv��Vf�s������p��N����_Fъp��uQ��������7N:���s���<�y]Fin��*�KU��t��ei�_�f���,�e� +X���m2�Wz�J:��w4#������^o�c��Z�ן�����R�$��x�(0@s����]��}5'd�f�Ӭ���MVF�TCӕ6[3� +5=|���W���F�jJ�Q�F~��Q�59����6>���h@h;��3�bʹvK��|�� �]9�ʎUVd�2���1��fF ��=Vi�)�=MS�f)�k�Rb�5)�\c7+9�Z��h|�����qݚy�����}�;����`s�آ����#;�E�Xo��jz\���kj|M�V��*%~�&u���nS5��Q�r5.a��t_���7�W=�hTb�F&6jd�ѳ����m�/��u���T@T@S���2�0�]`H�䲨1�`y� ^�K$�Zf*h�Y�)=�Zֶɶ�v�:��k%�ִܓ����������?>����y��}��}��˚���ƎL���}%q4�bb\9\�0� �-�_E��U����G$+7ª��\eGڔY��Q5ʌ��5�E���J��Tjl�,����5����?N����ܛEr��a #NJ�+�� q��-z� +��)?z�r������X͎1*#&U��,��*-ήԸjY���R)��JNإ���2%�Șx~��)S��'��F�N��m���[�q8���8�G��E9�^�2LT�a���J3D)Ր KB�� �JI,Pr�\%ͪ�iV���'4˸Q���2�ː���.���;�����?�^���b���9�1�1�A��a�a�V٦�0�Q��G����%#�d��ɔ$cR�f%�*1�D ɏȐR���fř��E[*��| w��)�<@75؇�����~��gא�2jSH�d����d�8�̓d4*�<S �,�oIU\j�bS��6_�i��ި��u +�nW���fZ�Vh�<��))}�#�`/�ߎ��2z��3��2�G)�)�NVb5Y]�`�R�u���͘���(Eg$(*3E���Y���e�9�F�Y�5#k�B��Qp�� +�>���<o)8��O(�^`���y�R��̳�1��μ�gyĘJ��#���oE�LQxN��r�437N3r�4=Ϫ��|��SP~���55�U���K�+8�)s>�yS~�N�C@�S�K��o���ޖt/��*z�XlȤ,bI&�X�P�,��cR4Q�E +*����(M+N���T���V�)� +M�-Ճ%�4��CJ�ɧ䔼K>�yC�6�&35���JzY��Q΅Zz-����X҉oya�+�>J��+�)��5��I�0=h��D{�&�3�SV$��_V�q�Ojly����ʳ��<��˳�:8�e���,�\��~Zʹ�4\�S����H�l�2�y1�����!�P�&�JO���ոJ?���HyU%ʳ*Uc���Qe�{�"��n�[�F�V�KիU��F.�w�Z����V�mh�Ƞ�F΅ǩ����zr@L���I�����1Z�(7�T�:B���(G�F�e遺 ����:;л��X�_�m�Qg?��ߎ�����I�~%g#��=R��b����|J�� c��ʥ�UÛйM�����\��\<�l�F +�H��-4���9xp�!̖�bhpj+�ވ�V���Jx���m�H25��?��F���5�m[m�m�����%��E��%��fn��WS��,b5:��.�_B�冴��O;�o-�W��e�9�7�6q&m��OI�0|�3.O��o�v�0�na�`���� .��6t�#|NA��������s4�5�{��|��w9>k�1��>$mI���g�iໝ�S�Q;�v���M��G'��$]���0�P���`�C@�uQ�Nw�����+ +}��|7���[ً���O +�FwJ�]��#y����PR���������a�#>eԥ�8���t����4v7����1�q�z��j��iW|?�<g>-/҃� +�W�O���1xN��A^�S�I�AN�$'g����R��,�Y�����h��m���y����u/`ͅ�3�5�b���%��Ұ��>�Z����҅�\��Opn��!���p�8>c���"5�ec���,�ý�K��K�f+�ų�`�����ߐ������o���O�!|����z�-�Kp��\uC�ѫ���7Rn�Wos�ܦ��Hv���;��;� ������PeP h�fh��(�M����EyEև������b�7:g�����Kp>���5�HCax�$�q`�\,<���u}��[���rl��w�q�8�%�����̾F^F)^Bg~I� A��gX�>�?�Y�u��!�y�aM���Z�������`{!��`{9��)E����h̏Q����h�;�:��.�i�o�f��p^��'Ѻ�7/}���J3�G�����~1�`�9U�~YKm�@k6Ӣ?�ڵzGOѺ��ѩ�l�S��$�8A�Q�n<��r_w�_pY�X�;�|�r�"𓈏4���-��"el� +ֱ���c� ��X�:V;�؎��t����^��*ׅ����5��h����9���$���� V,�a߆};�plՐ�Z|�� �-�]�����ɳ|k������yF�;l�ݘ���m����@��an_�L �b ����-��M�&k��k�^�5�SWU�v��6Ҥj�Ti�ViӤ�ݴn��U�NC�����}�>�}��}.Wy����%z�"Y/��_{�O�b> +ۻ��3>wi���J>EOOUE79��}��!\��+�q�~��F�6��e�������;K�0������"�W���ҽ����M�y���ޑ��`���H�R���sxx/Yڱ�8]����c�~9��X�ze Tt����OҢ���Q�B|�������c��29w��x�z�����8�-��R�L��Sγ�hqy��i'Ooi=�l�f�f1����s������c�`4�!F�?�јop4V��c�:��W�y,=��|��`oŔ>1���D�`1*��u���`6Ǝ��jL�z��a"Ώ�n��h�F�0�pC L��Ò{��_����CI"����%�M��{�M���l���b�dK� ��II�%�LTc,Q�cI%�:0,�APڀ!i�H;0 �E�l�dcds�I^Ew�Ut����m�DG����{+�3����w��L��YfV�3�7C;���1"�#���#)��/ՆC����Гք�6t�w�`z?:�G�Ϙ��2�іy�Yw��z^�ω?�9�B��� x��6`���u��Kl�fi�q�'���L)���(��R�@v9��N�g�Ѧ��U�G��ޜ!4�L���E4�?��-x�o��� �s�@���Ïy����<����m��6���6(dᜡgm�G�J��*�*%��������V�@n �rјۊ��.���>u��Q��D��\���,���Nݿ��{x�m����t�M���c[:�o���C�x�hd�j2q@�F�V�����Z'� +ܨ-�Z�K�g�1TΡR��av�+(7~@�����N<��_&�-7p�%~�X�� �R��ud���h,L�G��z}j�T�p�p�2Ԣ� +c;E즣(3�@�y6�uX-/���>��K�%�"�Y�����=r�`�w����p�s���:���T�:��&9�&*M�p�a7�Qn.C�ŅRKl�m����$��iX�ga�]�������GQ��"��}op�K�c�m�*q�-�$�RG7u�2V<�U�5����Y��f��j-B�͆b[,�n�K}0�u��l�����ۯ@g��Ǐ�u���W�9D�($^#�/c������H0�u���G'}�c��1f����I(���خ�ٞ�݀"G ���W4��2�]�� +�&��ZB���w��|j�'���,r����<G��������^��q��q���i��j诲�H��9�08��w�Q��A�2��Umu5W�GnMԵǡ�=���P�}�u����W>�P֊�&�E��&�.w��m���l��i�&��I�X9���㡭�BS�����5�u�v۠�T!���ӆ�^(F��p +��Ho����"��!R�䳈�=�%��.p$[;��x���u��w��I�������E덂�99�r(���ݬ�«C�ׂL���:��|H�u!�7y�I$�lB�rҖ�Hl�I-_�Y�̷�۴���?7�7��s,� ����i��jڥ�Z�Qn Y�8���H��!ů�ܟ�d�2��pA�ф���;! � !����3� ����O��q�F�_|�g��|���Af�Y��㼓#��VA}�FK=J�}� io{eD$� + B�� +� +D��!L`���0���!J���{��e7�#b�ɽ6ɼ0�X�a,L�|�q��zJ�]PSSm$;���8D'!b8�� +��-,F�I>�d0�� �1�y7ȹf����{���5�"�Iq�[�\9 ���N�����98��<j���%"j:��Ùn������}H�WdBLl!p���!C���m�8�݉]^|v�c�w��G�x����K�zb�����%\D ��~�" '$D߱ ,��[L"8[.� [d�_d�]d�]�-�t�B���F�d� {�����,J�&�Dl�a,.s�IJZeN�HڶΜ�Al�\�D +!�{����\� T���/��"�;����&� + +AW���F�&�%I�Ab�q\�����ZkԘ�U��$�K�xHjcb��X�N�Ԧ9�{��,�|�{������� +#�9Y�e�����4Pl ���X��&p�?(�^�{1�O`b#=iuH�h�2ë�ϵ�+&n9̠���H<6�&�&t4��-F-4�fP3�h&�M4�����u���b�C���ɗ:Kf<�pd4K�Ͱ �͒�V��6�~ +0������r����C}�eHn �N�s���B:@<@A�_Ơ��}G�{|�|�>�|���_%~ �/.�)._��\Z�!�,8]�u'0���B�(5w�N���FO3��朜�>��d�P�g���<��Y�]��qp���8�����{��N���!d��Թ�^Z��>\Ҥ���}j�Ct����r�t��\�\�ȯ�k������K����8D�??8{=�<��<����w��rx\��O� ��&5�y�� v����h�}���q�����-� t=��!��� PF�j0��ؔ��f�/���T�d���V� [�=��v�]�������K�u�_}��K�7�펝ץc��+� XA��S����Z�Qvg�+t�B����-��l�7�?c�k�n���c��g�����X����>Nth���o����+|�������+{n�* ��^�k踂�?��t\B�{l��u�m���29�wt�t��"w�7�1p�����y�����G\Vx��塿ۏa� +��]��x:��k %��^��i op���tDoq�>!;�p�(cv;���i�� �w��|��-�8�8,����~>^���rlWa���د�����@�Z�=ZA�X�f8Z��_m&:-D���`�k�wp~ >s�������z�K?�"��'f)X��~�v�c��N^��F[4E��т�&tl�2����!'���*,4�2�"�^��q�6�Q{�r��ר���_\1�a�#b��PGcᨆc2��p���Ӝ����.E����(>���;�����F��v��f��|��¤��n�����3�a#<�H�#�8��� +-F�"t<C},�\=�;�:�':�4��:�����S��p�Wh��������Ͼ�8��ֲm��;Vʛj�g�?&xlx���\�G�\t<�Q�T�S�Y��^M�ӈ�T�5��M�!��m*�Sպ|��.�G�H;=�_:����)DZ�H��������>��)��r�k�K��w�մ���Z�)�e��Z���T�m�j�����KU�}�*{lVEσ��F�]W��=�x������2���u�ndy>�у�����n����Oun�5�W�&��h�{�j�3TqCU�1Bc=�U�9^�=���� �y.R��J�x�h���~K��m*�*�qt<O3~6�+W<Xma�`Z̕7/����L��Z/o���*o��z�j�w�ʽ���w��|�ԧP%>��S��>T�g���Y�B�*�ݨ|�V �{Sy�+�����0w^����s�6�|���;��:rT� +?O���j�_�J�#5�ߤb�*ꛪa}sT�w��+?�\C���o�������50h���v++��2��*3䞲B��#����u ��j��v��}��L��$7���T��A*2� (F����588C�B)7�P9!���_���)���t�2�1����RJ�q%�ڕ���P +x�w�ۜC�^_���������IqD7��g�� C�"���De��(#<[���J��Ԉ +�DNRR�l٣���Z�w�}L֘K�p(щCp��`�<�9���k6��d>��F�B��r�<��̨~J�2(-*F)Q�J��+):C�����׀�r%���j���"�ǭ�ٴ]&��gzWq��2����}���6��1�d�Z�ʧyo":*�1CБ�T������Cd3F*�'k\���T%��b.T��L��j���e�<�XK�b�*:ᨢ�����::��P+�������֣yé�Ԡ�E�� r�f�.��S�_%Xe���l��)!Aq Ɋ�f�h-Plb���)j���@��۶�`?�P���-^;�m�&�-�¸������z��8Z��2>��kJJ%�<d��(� �-T1�(E�͊�������<�'�PX�XR�*4e�BRW(8u��R)0��ং������ˣ苌��X���CK:J�7�8eS#vbbJwSt��"S��������v��Ey�a��f��]NE�1j��'�KXuw=pD]P��h@���<��0�vbM<���9��t���$m�8�Jڤ�\�ʤ��a��>����������Q��C�<f�����K�%�䪳e�:Y)Fq�;��kŌ}���������o�#�f}V,=r-����MM켓B�C�I�� u���jVk����J��Vg�@uJ��4��Ҳ�����BE�*d���dۡ(�Ef�|���<�ɔ�����nǦ�Ǚ�KT�u6v wk��l�2�8�\zfKIv�2���X{�b�=m�'�}(�ȔeWT�$E:f��X�G��-28)�q|��� +ˢs��h�o]!��l�0=r-,������R�e�����"�w���E9͊t&�d]���p�(��2dp�➮`w������"?�A��Ip]~�/�O�N�)�7��8OZ�5�,E�`�l"�$�\Fy�^3��$2O���d�5���T�'F��Dzz(���=, �g��B����5=�:����to9tq9�s�o���\�Y��{�\�W��m��!TWj����e(U@!���C������r�x9��l�^��E�^^��Ǜ��MC75�"�k�C�OM�w%�U-a�x����Ԁg#+���ޝ��H&r���Q��ex�2��D��R��*�����R�R>|�`jK0��~�a||��}�X�z�f��X��d/�,`0��o��JfJ�j��_5����� ���� �T��E�� +�WQ�%+@3��T.¤Vބ�;@_K�ڕ|VK���H� ���F�7�D`a��Lr��_hvȣ�<ȣ�<i���F�F6�w������h�e�s-��*�*���1��2eX�I��3b3�I��s�m2<h~~�泙Ư�<Zȣ��pk{SFS�]��͖���5����e��ģ����*�Ro\9M�G-��mR��R��3���p�|�a����kG �A:@C|}��G�hcN��p[�E+�J���s������3�bƖ��1�<OWb��z����x�o>���Q�"@�z�cn^��N�VN�����$��)�I&��O���/\�T �yp��ײ��� ~����h�� +x �Nw�8^o�7h�:9Ϛ��Q�L3xm\����|�p�Z��+��>V�4�X�9�np��9����� +����%p��b]7������9��E�|�F�k�.��=tq��ߣp_��� �~ @�z�! 8�d� +�%8�b&q�O����,��� �7�G���;��[�s}���F7�}�#8���>��oD�X��x�o��b����E�.!�}F���'��W\�G��8�?#���} +y 7{�//�x���8x�����B�/��?���x��x��d!�]ʥ?��8 +��J�q�q`��2ϓ�9�cʚ��v鷈�uX���i�<��^�^G����~_�[��'22�8}@-��1/i��� ��z�]@�"b�#v9�1��:�:f�)d�̲�%�8�)=�`��A��}`7x�#vL*%����x[f���E�A�>���N�lb��=��Ӊ�e��2��į�~�xV�a��v�];a�A-����63ڧam��F�n�f����:��i�y�Z�G����1��c�W6�����!~>�g��b��E,C� ������%�F��3��QV��Xn��8ױ�wl=���>t���3�m�I����B�6�wh=�X�)p��1�b8�{�V���e5�����YЕ(�އq#�%��Y�/��>�`�ݍ.��F�(��$���p< +G +68��jȣZӴ�<�G�� ���UJ�\ #��J��7�a�́{6h�^b{?�v�[�!�{8v������ +!J$�����D� �@�2�-D�ʂ� �x�P���W���`��k�,@9��G�Y?�[�ԟ��0G�^��m���8r�К��.5~a��_\����0�A���O:�YT� W*�N���.g���d �m�$�VM�{Mn�+rޓ+����}�GXo|/������D�A]�U�9fy�;kf��T�W���5-h�r�,�lSN�C��ݚ�;d�\�%��X���mh�#��aǕ~I�w���w��[��~�8����:Z�ڲ��E�7*H��Fy�b�����=41��\��� �T�3f(�8NY�ɲGNWfd�2"+�Y���&YM��j:.��,�/��>R�+�ц��hkk����nт�ҖQ�|�k�9T�(�ƛ�m�,S/�M���y�2̣d3[�n������\�F)%f��ĬШ���W#�^��w�h� ����8��ӂ�%m�h���Y��y>��̠NSi���kTF��.���+�_���l#�03��ΰ�l +(0.�D4D�wq�;hc��9�&٬i�&VLlk��XS�i�&=i��Zcܲ��U�t�����=�����}����kPq�QE!���0ԩ��,��+7l�F��SNx����1W�UJ3nU��K)��rF�7�r+%�.^��nr���n-d��<Ffx<Bj��B'e1R�i� +�A�7�)���M٦$e�Ҕi���QJ�,Sj�K)���~T�r%�7+)�)%��Dv�i%X���_J����"uw�w��&|m#�2,��E�f�J� �J�Q`�U�9@��a�0�f�(՜����1YrX +4�R��؉J����ڨ�2��6�f�#k�+��;���+��˳[6����~v#��R���Gy����84R�^s�+�6T)�`9�aJ�F+�jS�-Yv[���_���dK��5�^��%��o�9�IE'��Ȥ��eE%}��$7�è���l� +l�`��|n�K-<&�Fehek��V���h���x�Iq�X���&�(6)G��"�$WȜ�����T$������N�;_T�����;�p�e���Nrn{�=N@�`!cp\��1��;�Y�d���T�9��0��P��,�3^�N��R��R(S�XE�NVxZ���(4}���?!C�g� .ʐq�w�>����߂Y?=N���#�_<&0��ҧz����s�+&�OQA���1#RV�g&),3]�Y� +�*հ�I2d�Pp�<�(0�C9��?�(8/���<39����A�M��֪��l�Ti&�Sy?����;�pM�gq�$*��r�kPHn����Ȑ����P`~���˿�̖�qHA�>+��#�C *�B�ܼg������9���G0���s%\*��(��E��Y�X�'bt��T���P%�b���_q������q�-��OI��,W����Wҍ�1 %���g����حN�ՠ�:iV�4��x����i�|��U<}��/!㤀�A�+Р2�|ˌ�)�h`y�����r�\�r�Y�X +0�嘵r�CƠ�S�W��.j�B�����豉��4��/Ɩd�%���ӛ B�M������� +��0wE�=�\�.�BD.���"��c'1!Mdb���6��1�;��-s8��K�pG`O+y�ɇK*�����a�@ȡ3$�x���\��\�5\t5\@5���д��!`u+�-M�_M;��"88Lu�m6{�������&P���\����� �U����jb�ib�h�[6ҋ�P�����@/�D��G=������l�����y�C�2�����D��-�\X�:���` +���X������X���G}����3�5ã9p�5��X�ᲈ�XĢ.$��ml|��|��<���[\ +nm ��5��ʡ]�ֱ@!H]/Y���@�&���� +�Vx�ҏVx�£���%����R�Z��q.|�j&�UL�+q4+�ZO�X�9Hf�F$�|�6K[������w+�(��������� �<�����d۹x���vzю��(���8�r�96����5�]@�:r��;zgA���K2>A�������b{����婋�t��}����A=�=�=���u�h��$߽���V3u�"o%9Kɓ���FbvI9V��������#�=� u̐�ǜ�c@E�?e�b(�E���a.�^z����C�U�>_��Z�>�QA�\�%!��Կ_p���5��5AG���y�1�~ ���[��/� g����?�>�q��&8Ǣ�%�Yzq����]��9@��"g �5�7��<Ǽ�=f�/w�9�Q|P���5�X������r���*�����.�S� �8��y����P ��q������-��M\���p@�E~��_�).�:x�~B�>�G����"Q���U�mp�����A0�ҷ���x̯5��c�=��U�����K��+<.�$���;�?�1?R�>@��k?���e�����έ��x� +^�?ni 5�3|�5��ezqA#�_L� +�^.��{�8�3��w𗿂���8�#=�C=��:�n$�2���y�?t�,���Y��?8��Vr�����E�r�?�أ��8�G��:�rX���D���^��]M���2m���~��A�馲.�= ��ݠ���&�救GZ���q�+��YȑL�LV���8��D�D��RK�������X�%�_�"6�c�v�v'���i�P�6Դ����l�_����+u��:�~��G-rE�.9�Ϣ�B��1į �D�W��c��� Ğ�2� ���Y�N���y:�߰Z_j%yWx�=�19��v�-����{�E'{�Cf�$��I�l��q��1��� �B�jrԑ��d�kL����7���6�`0`n&&`CbH�'@B(�HB���[Fi.�K���@�%Y�e (m�fi�6AZ�N]5mӺ}��m�6MӦM۪}ؤj�ڥ�4�G.S� =z�?��y�9�9��『�wf���8�����$7e�l�{�W��('ߡܿ�$x�q���Ö����8��� ��1Ua�#��f<ߦg��3�q�;�������cX5�#Df��=��� ��M��S��w)��h5�����졅p�$v1�i�L.x +8K)gY�B�D�i���m��`�����$���]v��>N�K<��n���'���2LY�%u )tY��='�e��*�����\v/�<e�'O��7sKZ�ꄧK�{�lY��s���[Ȩv2���o�V�R�Z���˥���_��^�mOa��h������4��� ��rx�\���j��Kmq�j�֦�iE㏪9ႚ��!����Ր����x��ږ����Y>�q~J����� �M5�+ɢmI�ښ�Q{r�ڒ˵9%�M)aES՜USj�6���1m�"��Z�~D���XR(�j ?R��/�1~ +b����:m�:r�"8��+GS ����I�ږ��V�QQ�U��6��`(V��B�Z�7֫Qu�6�Mݪ5�R�i��3)�yNU� +��V��UX>T��3S������KH������'�bCط��E��ȓ&K�"�L�3�Tg�U�\�Z�_5���ZjUm�(h���ک��_��Q�gͪ,��m�Ub{S�����g;>S�#�{Lo��&����Yg����{���(�C$;I!�Qk�,��ek�ͭ*[�*m媰W��^�2G�J[���SI����3�9O��Q��sWޜ��������w��6� �%��3���3�Icu�KZ~vl�F9�{��IW�3S�N�ʜ.���*��8'�"WH>�涩 �G�y���v?�<�U�<w�������+���\ޘr=1��Htދ̳�[�p��3��h�]H�Vr��| !�)�*v[�sg���E��T��Y+�7"�w����*PN������(�"{�m�|�+��[֏e������u �̲'����4�Gx���:�q�j2�#�% �f(��,O�]y���-,���T._P9�z9�Z�(�i�JƕUrT֒K��_����L�_�\�O���g���|\�e��-�#����m�'J�֓#�Ħ��䗥)�oR��*��)��+{i�l�3�4,kY营�_��}2Ú�2V�*C�ʨ�%�G|G�U��9�8�1�x�Y����:�fT���[�s�Z�O��;�$G� [�YY���<Y>��ʬ����Q�5�`��Q�)-����[J��&���R��Vj0������vƟ^�Dw��;�X҃][�K> �'������d�MSf�I��,kr@���ʨ�Vz(��P�RB=J +)1<����G�C��F%��-*.����E8O#��wr'E�Xw3�n�y~i��jl���q0:�R��ި���F���()R��H��#��k�����/���-�� � �+`ތ���Y���tdw�������S<o�/u�(@||��Eܬ�Ÿ)Y)Q��4�(�%J!�r��$n�b%�Q� ���ME��PԂZiF56� �c��yx�&F�)F��~�o���]̞���/be��K�LR|' m� dI4�^Ť��� �:0���'��)�~�M��v�[;~h���^r�c�6;A>N�����0��u�R�;���Hfb��M ���~f�/��w����_�ዾ�K�����ax������e����"�'q�!�a$�|�:�xĞ�qb�M���G�#���a���{i�{�s��p�� �m�x�A��Y�2`��͐���ѐb:� �}�0q8�k�]��A�(�n��bL4�n"�L���vLa�vL"�&i0��b�K4A<&��?åC)�{������1���ǎJ���w��ցJ���9�>������c;�c�ܘ������ɋ9.��?7Fҳ���B���_H�������x| +�:;_ ���U�:G�;0�������\|��H��v,b�b��,R�(2$�y{��8G^��~��;��?��o��س�Ei㗩���W��H*�_��%p p��Ǎ' 67��%�X�,�e +�2�X&��8�ҫ��>_{���Ŵn���a�"�r܄���*�_��a��|n]������M�>�g�V�c�B~�P�W�� +I��ʊt�����9c/g�g�TW6\�ۏ�_ݛ�¸���o�o=^I/�G��!�R6��\�{t��Ɵ�6�%inmzK����4I�IKK�EZ.��E���\�1AA�Ƞ����� ás��)�`�e2�q2&��s��ӝ�Y�iO����s~�/��<�������Yz�,��G���G��>ۇ��;�h +{mf�5�*c?����,k����s�5�����1#�ꋚ��b��>����_�8?�@}^�Gn�x7��u6v�̀��/b@2�(CAw6�ڦ�q-gҿ����������u7�g���8�?R<7�{�{B�G�e�E�R?.�������j���K��?�w�v�T����=:�u�ч踂��8��9,�C�%t���zgz��@�{�kz _����>���/�߈�M��_�p�귪һ�ܷt���ɜGG�8���qy�qa��6��W�qR���6��K��'H��z����0�v�]_�p|ܟ>��ݛ�����,�:��:���)��tG�s��c8��8�#����8��Z��ܬ}�d/ ��_�R@��m!B����#�_�y\�����b�3�e�'�"֯�M�z���G<����S�q�������?_;���Wh������ +9�1��%c��يP9��`-� ���ђ�o�c-��^,p9�=�R ����B�N<��Q�?��[92���t��d�n=L<��A��ȑ�]�Xe����\�h��E������x8z��'��m�H�2�G>e��k=:B��t5��J�R���=pt±�n����ѽ(\��S�ݰt�*�O��.r�����?��b�̘�C"�f��'���Q��~��m���m���I�G<�4�����v������PAo��� �ɠ�y�#�y�����n��s�mE��o +�����8�����,����OU�B$�����P���]����*��,�����Od�_ 2��\�G�{?v�����X�-��s^tS�sd�+�\x +�)��c�:����h�������_�P�� +~����/k$?�f�O��yF��>Oq�m��r��Ѻ�!.s�Sc��>;\��䱧"���p᪇���pMd�pt�v����Z��f��^��w@d�G�\��ȝ������ +�-a4��u�AL&c�jHָA��9�ʂ�͞���*P}LHu�ª4Z5�����9���_'����`�K�0\RE�-U$Fp�+mw�����_�ղ����q���lI��&&c�qjHNQ8��:C�j�U���`b��+4$�JUI� +$5ȗ4V����H�%o����U�q���O��xB��wU`��BSDE���O��ƮG����m%�#P1i����(��bP�ɨ!F��t��9�4y4�T*��R�j�����ܤbs� +�*H�W��5r[�)��\�ʱ\��zD����$#F���#ϯ�w泥��8�!7#kȍߚ� +�Y��J-*���R�BK� +�U�X�)�:Jn[�rm3�/T�}����R�c�����xG�i�3-»�����[���1n�Ō�s����JnFS'���R����*�U`��cO�۞�<{�r%r9|�I);�AY�㕙>MNg�ҝ+���*{�^�2^�5�M�l��������k����H��=S�l-~�@��F�����y2���4+�iS�ө̌\P��� +93�*=+�4L�={�l�]��< K�7���#��L�_�O�̔�z��vx75R�x�eXՅ|���v���ꤖz P#����6(�e�3Ǣ��49\��#��L��*Y��e�k���.�{�L��ddHO��*�sLI�s�#>��|�o�� �#���c�`�;�3 mc��HrSCn|Ĥ����*� Y�|���vY<���TO��>� +ke,�K)EmJ.����+�x���U\�Q���y|�;�r���Ȼ�������chiCG3#�t��2���7���^���R�L%V�J�e,u)� %� VRYH �2��*�ۡX��x�K^n"/����˴����2K��-p�g�]9���]m�� ��jF_-CF2�֓b�$&�@��>��*-J�L����x_�b}^ �SH~��gC�����c�c�~�c�U���E���p>4��q*=�N�s�����aXF�h����11��+)���`�b�A� M�h�P���i`��0MAC��?��V��j�)x6����{�Lz�Ӑ����أ�VB�V7�q7�������$�K%l\xa�0����t���\x���� Ǹ�cB�Huh�c�C��걓z�CO�N0yy@�0���"�d��F\��1��R����k�RivHMdM4p��ġӄ�&��4���5Go�L�Lk�.K�hh�h�k�\��ni)![� �9�<tѓh��24����2��<��ù����.�ˍ(���ϐ��D QA��`� 1�X<�i�1QH̡�3&��Ĥi�f�vjb�N�1I�4c:�Iu��-lgZ'�<.����y��}��{�C<Vrc`k*c��.�rɗ��rQL.����i&�ԣM�<H���"�\�ٜK|b��ӣpoA2Mk��:����f[|v1���TR�&Nۉ$_.CXL.q�W3U1U��JtQI.*9<�ԣ�VT�]�`��0�c�0͗1�����#�Z� ��2��hB� �x���D�*x�X�9S=q,'��ı�8�IM��\�r�j�G-�e3�Z�$�s F�!�a� ���V�_s3u@�5����7S��wv�d���p�)��� �8�F#�[#g�]4r�8� $���7� aj�aT�0կ�����&(���/��\�$^�����?h��A���F>�<����h#;�?�;: ��6������+X���y�#�t��p����30hs�1���;��� 9��tG7��&�4�nrх���U]Gy�,�A����U���Epܳ���:^J�<�a�<2h6���ƺ �����gG��I�'�M/u�E�賏F�G.�Y�'�ṿ�����; �1p�a0�p����{�Lߐ {%�W@�Ca�!W��қ��O�c*��r1@�����_R����qpf��L�tL��R��l`���u����t�^�o$6hV�Ӑq� �-��8.sf�p��>�rF�qخR�+�_W.0Y�� āt0R��οgj��s�;���������pH���}�A��#�G�G�s�"^�@�� ������a��G�>|��T�p��!X��4�T|�p���Ʋ~k��g8��8�K8���G����<����N�]<�E��D4���(�y}��Y���Z��Y��;b�6����ԮO���}�<� +��n�-���qS���M�8��z{���S�x�8Nk{�M)�(�3H�4�z�~=���1p�p;��T���_+�}Xኁ' �,�?u�� +��q�@>z�S'�u��/�� >�z��:=E;��N*ңn�<�7��U�#��`�:�.��_�OR���ܠԍp���/���h=�k�!G��!�^7���Y����J�g��z\��h�����Dt�*��bn���6���^��489x,�؋�h2��G�����M>:p����6��N�v4����#ԥY ��E�f��U��R��0��we������m���X��u���8#���t��e����D���t��2�!�U�e�/�Z"\B.j��(f��mV�]����O{�j���ȭ7��\���~��t�� �\�χc�9��)���2x�Y�ŮC-�Z@�泳R\ �,F}������9�(�48ĵ��5��x��W�:E�iU5YJϨ�.&�j�$� +���n1 �Bx��S����(fYj�C(�����i>'{��og������G;k�}+�l$n9�C�5���r��xx��K<����s�G��Ή��x*�j�]�r���~"}�nwUL%o� Nq�O�*c}��e;W�&�YC��%/��P8�f�fc_1�)��� k.\�p������ṕg�����t���SO�Y:����o'��`��Q:9�-x��w3Ӑ���Q�z��>;\�p%�'/\�p �k4\5�h�r��#{#PN. +�i��dgqe�d�����Y������1@3��z�MaL$?���r2��C�&�X5>ȡ1A.�%jTP�FgiD� �a!w+'t��C��V���:��7)5�C)�O(���1|!O�w�D�t�.���X�m�)��1���PAN��O!��ǁ紆*�dT^�U��r.eGx������G�RZ�y�S�b��dS�<��J07*�������/)�|Q1���{�Z|z��x���-��k~�k��撧��f2�KmF�i1)��Ts���8%���dɐ�2\ ����(�Z(��L��%rF5(��.���춗e�]_�[����}��vƭ�I�����m3��l�4�Lb���� R�� �͢�(��b�%�e�*֖�[����m�%��TvG�l���F��òD�(S������/��t�N����A���4�8�6S��42��dS�w��F�8�r:��v��,�3��木������Hf��\���R��W��~���M>��d�{�����< =�Z�Q1��]!��2�Y��Q�,j�LN\�r�,���r���Ni�� �9~�L�SeL��Ȅ*W*,q�B=�9� � +N��UH�O]p�w�L��,�X�ߕ|VLl���)�f9�#'��CN��PEyL�xl2{�2y�eLJUD�0��(<e�BSf+ĻPA^�����2�z6����$�����;�݊%k����K=+��NǦ���G,�h6��GN١���f��u�u}����-��m�r��-h��Q`�r��*�1n� �"ʘ�TT��W�1��h������۹�-s�n1N��M�O̘ۗ����������{��sE���H\��Gʐ��i(� ��P��,;V�e��Yb�/9o�� C?��p6YMw̕��8Gm�7�;b��k�R�'��џ~z�I�ѩ�Y�i���i�?Ҿ;R�)�KZ�f���̰ef�2ݧ�Qj(5O���Y6�l�[�_�s���A^��-�//}>�-U3�Ui0��v�|:ɮL��1v� +ͥB+�t��r�)��D]᥊y�� +ݸ�~0)\�*��ָɽ�û{��Xfm�հ����2��V��|�ߵ�=rů�Ĕ�T��M�T�۩��jE�Z��W��j�^v�q��q�*�B�˄ΆKZ�[µo�5�c[��_�U�`�8,���G�� ��bK�^2ٓ:��hh�5�i|1�/j�Z�V<ji�V�k�P��V�bi�l��lZ��sBcCMk���U;.���n��X�G���j>XA>��ך��_���,N�7Ѧ _\���[=_�i�u�`�x��D�@�yy��_�2%ʹ��x�>r��؏{�Թr��`j�f>��+�T�e$9 `c���U:�I~�%����ٱ�/袁/��h��_��s�)q��q��l����������K�3[�j������M��L_�>���7\;ֲc��4��Q�kTT�((k�x��[��w +�ሕ������Kk4��U��@���{.�J�1P╢4���ŗqE��`��Ǝ���U�n�\���ɼE���i�]l����'$���{.�y����ǵ��1�Ja}�����!����Ϛ�:mfG3m4�I3]4�E35q^��'��$�;��i츎[�u� �r@ +1�T��<ȸѹm� ��a���-��߉MKvǀz���(j-|�BL�9���~����3�p.�Q3 xԭ�G�n�߶d���N�;�|ܛ�}��6��'Ѷ$��3'�qR�<%&�4�S|qJ~�DzR�>���ދ�x/�9���f �|�ʸ'y��j= k�âٱ]��0���!,��ڣp~����ӳ�q�0rN�<����Q��ٗc�;�ޥ��`|��<�\�����^�\e>����P��F<?W��O�cq|��x�����i�o��r�M��_�a�{� �u| ��=��&R��K���忚��6�����W$�dv��}������*�1?��X߶��i�{�#_��\��Y��3Nmc}� ���6�>��|d������)�]��;��_��_����/����9�Գ +�3���%�Ol�OI�' �<!=��1�9��G�c���&�}/��>�3d,��mB��=�E;��bW8{�;� +�,g_���^��U��*Ilt�B��t���l�� �x��������(���� �$�/����g����� �:{��'�iv��6�l`�����g��v�;�����8hûC��������Q��O�)�͠s�'���I�=�.�\�x�������������)����9��)#+����y�J���9���ۉ�xs'5��ۆ�� T�x>)�3�tSI���/WB�)t~���-�v�����k��~��ƻ�Fv��NZ��������M���s�Ep]��z>�Dk;��d�����dI8�,y�b�i�|EN���b��W�V��f{�c��r�Vրco��5�(������X�e1/����s�SG j+�G��Y�v������ꎣ7�b%8�pTȊ*J��3�L<s�,r��X��y<3�/.��:j�M���o&�8c$|(K�UV���u�#���%n�4���xzȂ�8�(�eY��O�L��f�d�'g��t��*jm�L��c�*R����o�� �]�; +7i����]��Ɩ�q�Q�,�.n��/WO<}��S���2�c;�:q��&yb"'�D5}V�d%Վ�=c(�B�U�����r��բ�����Ξ F�5��T���2g�{��̞���@�%��W9�*\�p��5�'��"�-�e]w�H�e���ϡ5N��k�Z�>�JY��ٲ�_h9�� +uk�<���q쨔+c��v��0���j�k*�z�/jW�PY2����@�8~�R���5�3~ަ�n�0^i���5Ə%F�9F�|2�fƥe��ƙ�W���~�5����U��b�S����'��RYo9Z��RmU��N���uo���ֺ��{={V 1��I=�L3�N���9)1�k���%��ҩ �����Q�2$���(�"�t�ӦGQ��(L_=�7E���(�8��#/�|$2ގD��#�U��y��l�u�j��6��EW�m���lq�b}'6�t2"�s����D��D���E]zG�.�Q�uX��::zdVEAfm�g]yY�#��1r���H�d�����|���8���Z���#���_��y�)N��RlF��0�)N�EQnf����yQ��3��F^��H�F�����;9rr�"��������L�.�Ñ�8��#-�*|��ָߍV�k�Z;'}�^k�\ʖ9[C����k�(�)��=;EaAz�%�p�Fn���IAq���2�������Id"���AB�(�7Q\� �! b���)D1��Q5mQ㫚�ؾ����UZ�E�JI'���n���[��z�^k�{���9{����w)�ʢ�c a��eZ�2��R�[Xh� s��q�����$z}&f��D�U�Y������È�[S�F���8��0�*�\�L8������V[F�8�k'OaU�OX� �u��s3�qahuaq��u�1v��te�u9�2_�<��;�}G2 ��KB��#�� �&`T�q�&��I%�Yw���4v�6���NX�9 +7ga�V^h�a,��ӽ)C"��G��`C��������A��N�yb*��c�4Z�̲IhW�G��V �L�gMb�g�Xޅ8|�DIQ��Nh<)O���z�D�D�F(��73��@t�i��iN�i6���3OLf�1�;��CuI�م�Q��|��{b _���?Z�j`&�ޱ.v?._�Ə�������ς��(3��8��яWҗ�>Tz.��?�����.��7�i<��%�oD,!`R�8��\��)����`.� .�j�ȥHB�@H�1�%�폎�@T��Xb��/&f:���.c�K4�#1�wsb��=�8|��L��f�Җ���xxC��Cx�t������ �$2N��(��mt�5&j0�T?�Cp�mG2�a���E�h�9K(�U/0q&{���@�Ak����X�=������ =���Y�&zfͺ�u��Э�>H�V��^iPfPwމ��Ћ������������������lxH9,4�ٲ�5���f`�,�x�8�08�!�q�M٠)]I���l���"�1�0B�TI��##P$�Ccb�a�܍��2�S�c5#&��F��&�G;Τ-gҖ��H�#��D��� ���>[3�F�5�b(�A�b${��i�z��з9�&��l^}�p"F;b2!�{as�E��� +D&�x�#�8j$,by�b!p,d�L�Y���]ّ!1���C�H�l�p����������\q .�������U%N�LH��-R��dch��� +�^����@�D����3Hv�gx�q�|�D�p��*�жhc��H��u�}��6��7j�ʌ� +?R�#�3I�3<�� �P��S�,�>����� ؞�E�q�����\��=�-�R'6���;��9IA���zɆٜI6�|XdA�,@��W��־+Y?��[�ړ�C�iB�F-����(�ӊ �-A[(������o�q@�j� ��ȡ^s8�j$,A�E$�h�~?�Xhڊ����>�ǁ�-��a�0|�!�St�+�R)5�D�@*zm�ah�C�F��nl�V7q�m�͐p�n�y�Qњ+�{��O�#Ok ��R�>����5y�]��Nb��s�0�;P�^84~��E���J�c��i<r�g.�� �8��`�r���E Kkےv���h��]\˹{��������W��*U�ר���n���z�6j�4�Y��Z��l۾CTtL��q�]�&t�ѳwb������������M�6bT��1cǍ�0qR��)S��e��YΞ3o��E9��|���e��X�z�ڿ��|��M��l�b��]��|�����?p�Б��rO�<u曳ߞ���?^���Ͽ\������n߹���{����gy��������1�[ɔK���L�,Y�ɴ+ȼ+����<@�^��Cd�ud� H��̿�DH�I:�A���D�0$I�%�Ab��b$XdH02%��1M��d.�,��|$1Y(�$*����V �N��RB�Obsp�KtNKx���� tEBtCbt�H�~�0=�/HNL�.��\�}�y� +���)��.doF�X�^�Kh4ff��``i%Q����JفDiG��:���"$`(�,�B`\z �B`�%��,%*)6�kB�^�I��J�6j�����L������,�x�r�EVˆ��X��k 8QH +�$Y�&y�(��ꕫ$��uҽy���ܽ{����!y?z���ߟ����������UQEUTQEUTQEUTQ��!�`�y� �����bQEU����o����n��b��}S�V\+����e�:<=�c�o���*����oW���gֈ �����W���G&��;��D�&N8:<�͂[��ߝ9�qt���O� ����*Ʈ�*��Gr��~���\�13��Ǧ̏�.�K?j�a��`[ᖰ��=7%��¶� +st�P"M8<�[^�R�6��+;�k� ��k��ke�U � �lY�j�9e�Ks���b"<��.��RE�?��<wx����c�c�e�0e�;����Q���_�/��j�n+;���P���|V��lLu��`�]�:kfp]�V��"���C�]�C�bw�Ê��Qr�[�+� ,|j�w:����e�Un�3c����+:|�a톣�<5aUE��"Wv�M�qФ���>���l�)���%d�t�U��[�PY����#��Wq���rF�t�Gz]����(9dj_8���`���]���భ�K�J7H��K�ws����ؗ1TT�..�(r�ۮ�����ѵ}�4f�>�z��{�ϟ�ࣵ�L�A�����ϻsƌzf�zkfL��(�ք���C�~�h?�j�}�CJ��3��E�%�/c_TV��J�*�p��T�_���xE���y\���_�^H�ڨ;Wi���� Y�A�"�ҭ[���l�!�I�v��^يR�9�$�V�d2���nq�y>��=/�����<�y�;�s�����+N��w $�ӟ��mWy0����\�*c���<0gל�uN��@�B����!��� ���+��G[Y��u�?R�|�^��rr���H��/�坑�������,�~$���K�]�Kn�`����l����=�Z�5�[7�q|g�Unr���"~��F�8�ߛ-cY����đ\ೖ-K1�Es�����)�`[����<pb !zٔ�������z�{t��@�E^�~˷Je}yU����-�#iږy��k��p��?���0Z/����j���,�bh��}��F�u���D��R�����%�H���2����������v�&�����e��u �Y�N�N"�{B��^��{~ݾ�V����>�>��zy�H�����]P�F(볫�ܤ;�dq��F��V �Lk-��z�PߔJ��K{�w�W�y~��P�'C8�d,ߴ.������:���J��@7 �d�z�qF�@���`�V�"�� �6X�� ��#����#��� Z������e�W�Ŕ����ԃ��N~�a�~�qfu��#E".�l�йy.�?Xϊ���;��m� HK�=�`(tu4�G!g��n����_��:���^!��B@���zh�C�L�Z8�l�$@�� +��+�<j�e�2<�QQSS}?�4i�ǀ����(;�jv�,����_X��?�j�_�Xr)z��XK=A��T�h����0�B~[�)��ܦ�����bU�q OՆ��Fv��S�����@���g��6��_8��1��>� @�e���!��O�������Ax �C�8���~ⷎNs]=�/��I���֣�3ѡ��M*{q6l�j�K~!}9Y�����m!���!��_�7�Hl�ް�(��Qp�p��j�`�0G��Xs,D��`+������/x�G��F�@��ҚSШ +�s�=�t��##URuM�T��������?|�����zq+[:����s����M�n�ִ�������䂹3���3�o�\P��7.��B ��<�L0 +��wz�B��F�1��2 +�Ȇ�� �DG�r�<�6��X��`3 +���83�|6�~!�]{=i���5�$��>�*�OE�t�O������1����o��,N�4����GO\ٞ~��pc)��G�R��0X���QA�l�(f�4�� ��M<�Aoc0�n�`������"��0E��>���)h�@<L"]�N��JY���s����r�,�'��%����hݹv +��� ݆/�U�)���|���J��n��P��W�� +�x ������k��F�E��Q��`0|�=t�[� 1x}��f�p��c3��A&�����ŽpJ�� �~��7%�1�����,۰�PRN�D�,^�H�U0u�����f>�����7웻ñ]zQ��ZV�����q��6S� ��d`��0��XA#����G�V�J�[�(���9 +R���WvH��o�^0�x�3��bx +p`+gQ��(^���1�����ױ���>���9��ږ�騬��*�^���x���#qb ,Y2aHwc�VM�O�b�/f=-��ȁ/} ��-���`=���瀾�}��k��)��� +���4���`"��C��!�)�p3�:��m���u�@�X�oQ�v� �����n�gn3������w:s��+*�����q���BV-������M$Nre�O{�}�v� �R`�� �8�3J�yM�O�4�)X���ZG�y��Q�j{�<E�T���I���v\�5�Y��8�F�a���j5�X���+�~6���yB���UX�D����C����j��*+�j�߯�X��9�q�x;�aV�,�;�`g�\��L�Z����[�� �6�zx�GP��k0�����ܢ���@+8MA\��Z ��T�����g����P�⚖ (�U Ͼ?�4 �;���Ic@�����S�l|Q�gV�e����O��H\����GI���s���}-:�l�-�P��� 4T/�數H���1e�N1��@ +���^�Sp��|�v:Q � h Z��1 +��VKȘ���1�>DM {��_π���Y����̸�Ӻ�|)�we��Uef�ᨈ�����.A�]��]��dci��I~\w���<����8�/�t���P���g�+���e >*7E`S# ���3\�G��HpχH��n aKS[��K 5�u�k;�mɶc���V�ރ iE�HD������_+�߾U\�'�9GVXJ¬���9M�<~̨�����փ��I+���q���ij�L9%��A���0p��cF"((�`�77�Q����#�'�q��� h[:�-H,�n#*Z_YXO� +=�V�y�!�p�������LY���zY*K;�x2����}{"w��7�e�r��"Iw�:G�Sy�\�V[�<�6'R��չn%�:溬'5�m���Dtb�Z����L\�&$ +��ܾ��~v���ן{��}�����<%E��&�g������IN���DH�J��"�NƄdD�]� Q�!�c�@ +�d *��>7 �8P�W% \� h�`3�^l:�9�3��c<��xWo67��!����ʺ���[�ЈZ��I���4�z{z?c�vT�g���C |ޮ���X�.�qDh\�1�y�X��C>�M|;���egA��� ��:܂�8XJ�[7X�I�|0|�����N�7�����w[{�Ekv���c�JȬ�����i%J-��Q�#�u��|FB���ѵ�<~�ԠV�T�w<k�F�K�};�#9a�X!���ЭѨP5w�8G��ĥ�eb��5�@� +ݡP� +�`(d�B�G $��8������&��{j?��S����p䴥��W5z��N�K6��V��i�|Q�Ah����4�ݪ��(����d*��i��sZdD(k}P`�͏��Gg��墂t���5R�LT�c��+ʻ�#��!� �1M��e�+����ƅ��xoBj�0�ǻ�8���O�U��N�������☤�"ţ���>�|���_�JvV��{J,�͓ɯ)��l/`� ���R|Vx��fm���96���pL1c����3Y0��ߜ,��/���N��P�[@��Q�t�+eK�T�e�9ۏ-p� +�Ȯ|BpW����$� ��%IH�Oy���:�~0?_(g��D��,�rE}K�cШ+)�J_*=��I,�?!�4�l=Å�[�P�ծ�=�Ğ� [������ �}g���OZO$o�!xL��=�5�dbBC��) �O�մ�>�R�I�r�\���r"#;�@V�2[��k������c��lz��i5a#*�X�m�?�;�6�2.�#�:ĉ֙Li���������_��8L+ endstream endobj 12 0 obj <</LastModified(D:20150819165053-04'00')/Private 25 0 R>> endobj 25 0 obj <</AIMetaData 26 0 R/AIPrivateData1 27 0 R/AIPrivateData10 28 0 R/AIPrivateData11 29 0 R/AIPrivateData12 30 0 R/AIPrivateData13 31 0 R/AIPrivateData14 32 0 R/AIPrivateData15 33 0 R/AIPrivateData16 34 0 R/AIPrivateData17 35 0 R/AIPrivateData18 36 0 R/AIPrivateData19 37 0 R/AIPrivateData2 38 0 R/AIPrivateData3 39 0 R/AIPrivateData4 40 0 R/AIPrivateData5 41 0 R/AIPrivateData6 42 0 R/AIPrivateData7 43 0 R/AIPrivateData8 44 0 R/AIPrivateData9 45 0 R/ContainerVersion 11/CreatorVersion 18/NumBlock 19/RoundtripStreamType 1/RoundtripVersion 17>> endobj 26 0 obj <</Length 1075>>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 18.1.0 %%For: (Evan You) () %%Title: (Untitled-2) %%CreationDate: 8/19/15 4:50 PM %%Canvassize: 16383 %%BoundingBox: 0 -400 2118 0 %%HiResBoundingBox: 0 -400 2117.03660504686 0 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 430 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %AI3_Cropmarks: 1413.66666666667 -400 2113.66666666667 0 %AI3_TemplateBox: 300.5 -200.5 300.5 -200.5 %AI3_TileBox: 1385.66666666667 -488 2119.66666666667 88 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 2 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -128 113 1 1323 793 18 0 0 541 471 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 73 %%PageOrigin:-6 -596 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 27 0 obj <</Length 3392>>stream +%%BoundingBox: 0 -400 2118 0 %%HiResBoundingBox: 0 -400 2117.03660504686 0 %AI7_Thumbnail: 128 24 8 %%BeginData: 3254 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFD11FFAEFFFFFFAEFD59FFA8FD20FFA8FF7D7DA8FFFFFF53 %84FFFFAEFD21FF7D5228A8FD2BFF7D052E7DFD20FF7D2E2853FFFF525228 %A8FD23FF5352592EFD2BFF287D5253FD20FF5228A827A8A82E7D522EFFA1 %A8527D527D537DA8FD19FF28535252FD2BFFFD0452FD1EFFAEFF7D2E2859 %FFFF522E28A8FFFFFFA8A8A9A8A8A8FD1AFFA82E53A8FD2BFFA85953FD20 %FFA8FF7D7DA8FFFFFF7DA8FFFFA8FD1FFFA8FD05FFA8FFA8FD25FFA8FFA8 %FD05FFA8FD1EFFA8FD09FFAEFD1FFFA8FD54FFA8FD0AFFA9A9FD1AFFA85F %AEFD06FFAFFD05FF8485A8FD1DFF835F83FFFFFFAEFFAEFFA8FFFFFFA985 %5AA9FD16FFAF3B3B83FD08FFA95A85A9FD0FFFFD08A8A2AF3B5F58CAFFFF %AEFFAFFFAEFFFFFFA8857E85A9A8A8A87DFD04A8FD0BFFFD04A87EA8A8FF %835FA85FA1FD07FFAEFFCFA85AAF5AAF7EA87EA8A8FFA8A87DFD0CFF5983 %843BA8FD07FF5AA97E84FD0FFF7E537D5259527D537D835FAE7DA1FFA8FD %05FFA8FFCAA15AFF5AA97D7D537D537D52A8FD0BFFA8527D7D7D527EFF84 %348458CAA8FD07FFA8FFA15A845AA87D527D537D7E7E53537DFD0BFF8A5F %845FFD08FF85848584FD19FF5F5F5FFD0CFF855A85FD1DFF843BAEFD0CFF %848585FD17FF845FFD09FFA88584FD1BFFA8FD0DFFA9AFFD22FFA8FD07FF %A8FFFFFFA8FD44FFAEFD07FFAEFD4CFFA8FD0BFFA8FD1BFFA8FFFFFFA8FD %07FFA8FD25FFAEFD07FFAEFFFFFFA9FD44FFAFFD53FFCBA8FD0AFFCFCAFD %1AFFA87DA9FFFFAEFD07FFAFFFC9C8C9FD1DFF7E7E7EFFAEFD07FFAEFFCF %C9C1C9FD16FFCB7E7E7EFD08FFC9C8C8C9FD18FFCB777E77FD09FFAEFFC9 %C8C8C8CAA8A8A87DFD04A8FD0BFFFD04A87DA8A8FF7E7EA27EA8FD08FFAF %FFC9C8CFC1CA7EFD04A8AF7EA884FD0CFF777E7E78A8FD07FF9FCFC8C8FD %0FFF7D5259527D527D527D7E7EA877A1FD08FFAEA8C39FFFC1CA7D7D537D %527D52A8FD0BFFA8537D597D527EFFA853A277CAAEFD07FFA8FFA1C8C8C7 %A77D537D527D7D7D527D7EFD0BFFA9777E7EFD08FFC9C1C8C9FD0FFFA8A9 %A8A9A8A9A9A8A8FF7E7E7EFD0BFFCFC9C8C9FD1DFFA97EA9FD0CFFC9C8C9 %FD17FFA97EFD09FFCAC9C9FD1BFFA8FD0EFFCFFDFCFFFD3FFFFF %%EndData endstream endobj 28 0 obj <</Length 65536>>stream +4}Z34�l��ft����e"�&bV����ew���S���_�Ą�.N�屶�[@<���}�mH>;�R���R�f}��κ��S ��'���q*�rP˄��xG�E�2mV�����|LL�H.���"W����Y������<��1��V|kП�#�ƃ���A#W-,�fm��8��Iyo~����M�:�U�$�I[�r��VdA��:e�N�D�>%��9����*�{^�X��ӭ��clʶ�\�f�T���% >kEO-[41k���w�d���?;�B���W���u1�^�d�I��j^K-hHx�K4���c�A]�!R�=��c$�g? ��d�Bj��_�l���?�× 2|Ӆ�\�@�BC��+���@<J�G�GdE�De��cZ *۰#��سV�E_[�=��>bRZ��F�|g�6<�U�{5dBW~��m�Qek���U+2}�F,�v�k�]��p92Z����ڟ䊿��_&G3�K�5 o��� SZV��\{}VA��w��wm�ћCU��Z�%��5�*���(=�`W^k?���>8U7��gzr�� �w��u�'% OBJлu*;0����ܚ�5'mZ�+Ft���h�U�ڹ��1>o��F,�������x�-���j�OK�"�����>?����D.���\{!���0x�]�р�>�˺<.�8"̽�Bŝ敄�R����Jo�R��Z�z�Չ���x�ag]�p�I���[��g:錑[p;��_a�W�1�@Gg��'þ{��=�0��x3%-�mU�����ݐv�J̽�Ce�e��_4�3 +���/ae�/��7'FDO̬�Ǵ�'�i����LN�k��������Mi*>~�A^u�I���nَ��bh�8'�D����6������4u������!fQQ��k����3aS�L51��l?:�Ղ��2�^��U=^������e�9P�G}��OqE>nAG)��5m:��~ +��,K�y�AZ��ny�U��k�F|iЀ/ �JL�� $r�A����l슑Q�u��E�3���^�[9� +�|~V�Y�1ʷ���M�&�<,���P���츺� �3'El9�5;#L�!���$��8����6\,�������Dg���/�Hkm�Qٟ}L¤�<6��ܰ˖ ��-&� M�U7}���{nl/>���<�bl�I����ߗ�o@��<�`m��e�qIG�]1�J�-��|,��8��c�M�cR��c���2�"��y� 9;t4��@;��p���N@ɮ�!O]��;6f��Qa������C��~d�hK�Ù^~ɴ��v������%��o��^]�o~{�a�w<Ě$f^ K�:�o9����<����\��vFY�=����o����V-��U#�|A�I��y��\W�.H1��i�)�Hay����[���'���m��{ �ع�ǻQI�>X���<��ONuտ��T?���~X�fr�_nnٓ�6���nl�Cy�͏������]?/�zTս��.��zu���� Ok�]9��f���q����� +k��%kP�W���N��_�|p!����㼺��YQw�C��jֱ����@�#�8���sVX��������)qN��V3n��ʣ�D辋�\7��w�����Gfj̟]�r�[�fJє?#����D.Ja�w��XR5�[�W;���� �d��c�}���AH���|�D��s�/���Qpڎ�6+-�:f�����آ5� +` ��q\�� �������bDdssQ �صS!�ZD�{�Lʼ� G���%96iU'B.���:nӪIDXT3kT��e5& в�s���!\��0�8/��t����E��sZ�Ր�M'�ucl��(�!hl��p����<��H�а�!l��@틑��[�����&t����0I���X47��x0FE���ވ-��AbV���u�&t林���"Or���+�&U�H�U;|0�f} pX��Lܾ�� Z ��~�p���1��;��~%��8�ū:\��OS��H�����0��.!$xİ�y97� ;/kx�4X�bV����]�p����[6.�L��CZz��Q�v_�à��͚��j��L�<�K�_�qY��O�:�M'��a�[��L�UG�6���� ���T/���+L��[r��t��1夃Qg���?ڎ���d]�",��(O+$"��g��(��CЏ�DO�5G�������������5-"u�D)[�i���<և�s��_�ۡѻv&j�M��|���� +�vCG-~��&�ȹ�'�܄����R|��\z�[��8%��1l�c��7�p��������#��#s�r�cΪHט�/~�ac�bOɐ��*�)W]��G+:B�G��Hy�s/(��?N�W?���;���n�#����|iA�*�$�%�<�����<Jn<�b�TG�7�V�?0�g� 9Ԫ�kUq����l�9!%8r����W}�Q�o����SS�^8 +_�� +���K&�3à�3Al>p� +6��4'��xmZ������\�L�`��ޱP�-�Óvmؒ��8(����@s���C�Iً*b ��jZՆ�ްn��NI@qC��kĤ;ǔ�ħ������[Σ�=6m�OG�3¦�٩0����6.ET:[j�U ���+KO����{�eKj�'���4u��DЪ U2�y7���rY Mܴ����L������%^���iǕ|c���3��L2��r�?�9��l��i����?��-'��)�f�������~����'s=��Y��%US��1b�_A�YRS+w���U�6�ƧM�T�t_��*��,G��*)�N컙^��M55�z��\��]v�/���)�Njӎ�����Ec��������>�?�&�� +>�h�u'<c`�e"��+����ϩY=��N�ͅ��7K2\�l_�{� �ʢ�Z�f�>+�07���nMt�__Tֆo9��������� +��?�\&��!.kV?� ~�8��;:[��a��}B���R�f������V�db֏r�l}�8G'2bZI+�ɨ�F>����tGG��p +�了0��bT�_~lc6�W�*.x5w�����ܷ����?��mR�IZ0P˂fl�,��z����?m���k����y��i�QOcЇM�j^��rJ�ꅠ�++&\ͦ�1f^Vv�ےwQ�=��wZ�H�}��.||�Zܔ������U����%�����s�/���O�r��}:ke7>�0��^g�F�߱� ��0Ae��vV�-U��{D��P,8��YZN��>*�����"ׅtM��ѿs��>96%.y�e�n�x�����n�K�n[9�94��O����3=��1-!��l�kRы�N��g����ߦh�]�h� +K�|0DH?;�Ag��?^�|q��9�x���1(/{RV<](z���씠��)'���� +�~��6��1�~�s�{^ +l˅,ڰ�G����m��#TF=g���f%�MuZ��t��Ϫ���!v�W?�bq������ O{2H�{����.*!�!-"eہ-:p�r���V,��5�)hf���֭��M��D@߃^��K�������3ӝ��C&��Q�t��.��A��쥂��i�ou����i�jrU@]rt�NhD���S��2�̈́�:��C��r 2wl��3 p�X��0��Bo��_T� gl��s��9�\\j����(Qq;Nr�_�=@C}���w��� �1�^�(���m���>Ыu+�i� \Ć�����4��u@�����~su��iV���"S�����Q +48L�@F�H��*N՚E�z47cy��5Ӌ�0�ROS��rTƕ i��uo����Y5�xZIL[0���&h�Ȯ]01*wG9�����xŎ�4CS��nXw��|Ԍ��=o��-[�{��~?��e�5V,�Z@T-khE�zJ����C���ՏV5�,��v��(�7*����'eM)�y#}�w/{JE�<�а�&Y�%6kN�L]��W���U;�����/�i|�2��m���z0�Yy{V��VCʹ�����bW� +��1��~�*(��6�)�8���|��9jN�O���RVm��-�q^�L]5a*�M��Gg�w���9U��i��4��R�O�)0��Ie��̘�q��3�7=��s.v�EoKEx�����[<c!;����o9�����Apĺ[�b��j᩻����\�� �yu�<���-;��8��!��;�,rn|�#��XG�co?6��ݓ�5q�.o��Z~,��?��c}|�=��sf�GG�����:z�H:2de���#����#=e�ߴq*��Ē�!ji����W�b�E���[�AcW���%=�p�*"�8�[Cn�t�����%���J<���.j����| �V? վZ7���t��zŽ��sc����OS��Og�E����Y[n&f�Ī����y��Q~�I�Xuኖm��iecĪ ���F�:��3T�����T��/��iu&Z���Z���A.���Zz���>�`�E�2�}�� +���sRjW�Ăe=1wIC+^6�@c��w�rJvH'�M���²��ݥ�畵����=կ6�z-�⑅_�bg���eb6t�]�����x}j��}�����ZP"cL��y� �M� ~\͆��7J���0���iQ�6T��M@� +�I%��>�q��G=�W�z���=�q��-�� Z�����R!�&8���`��G�ڷ||�Q�䚇O��R+C\nHOܲc�\<���rT�X���KFŬ����!�N�Fe��Az�[Ĝ�P +]�w�v�Q� +�8�ѪfTؤy-.�hM�}�.���l�.�������;H�{~65���C��Y#�l�Eo�P�����BFlɪ ���$U����>7�$�-XY�U�P�h8������������� u��a�[����=�Q��?�j�fY�?�h�Ҝ�iF�Y�����qYb� ��h��3���rܜ�깍�y^��?�Ť\�����E3�f��Gϛ���KV,\Ȓ�Y5?H���#RDԢ�\4�b��� +f���(�&_��VM�: �4l��l\��]D�4uR��Fߠ��Wv���:_+<fY��ڴ�k����Q5G�-�M���M��I�i��ᖔK��EW��E����l嬍�x�2dc�V�٨'�Ҫ�l���"2V����!B�q�qb��lز�1kfæ�ּꢀ팆+�� +�DŽ-�~�-ԣ>�;.j㞇�aa��Lؒ��3ч�\bT-�`w聧���xW���_�*k#�X���Z��oN����F�u;�:�W�j\�u�p������]? �����$m^�zr�Z�e�]�u�Eq`��ܰ�-WSҶU��#�n�IUR���y�'��<ؒ-'�l��?��X5�'�a��Z�Τ�g��c�\̶O$>I����{ԫ$'h��,����^qϨ�9��S�2L��i�u7 ��+�TЊ]@t��_{���Mg�p����U�r���Y=�l�Ȇ�Y���NѴ�[ok��M}�@ۢ���,h$���i�]�q8�һ�����8Ͷiv'��5 ��g�WG���a�7�lڊ��00ʯ��Qy+.y�L*���a�F�^6˗�t𦿭o}�cp�'j[t0��mҽ A疟]q�j}�O~91q�h�_��l���l���L���P������ +^�� �bA/�m��]ߦĚ��1?� �Ab�$�s*DW�]s�����#R笵�%h�C̴֬�Sei�?�t"�L�q A3�i���^��H��<ʦ���T�KsH��6zѝ�>�p��ꖨB�ne��A�iZ!#}��)�����H��ҋ�´�V�5?�u"�M��e�f!�Ӄ��'̪����뿌�.y���Nk��SC�� ��ݭ�UW+;4,����Nno��^��G�dC$�ąDNi�_#}I�(���yy�_�2�,S�� /�=�ڱ=�m�vt�x]�j'.j"gU���m�l��rj� ��� �f�#�4���~�+W{�@c��vR귁����U�R��F�����)*�p�+Xvr1��b���[����X��E���s)~������O�Lښ��r1Q�V|��PS$��6�����.j�o�����&�W�B��h�j�ɣ�9�ey�rbʼ�\����w�Bޖ�R�}!8�����i�� +��Q6n�@)Xvp�������q����U:f� +����Ϙ���VL@� +�5��L8i���},�����l��m{�M�����6Fx���N��4W�1&hٜnUn͵�w�D��I�CC�[)�!Rn`H�d�Sx��������7�X��v�KǬx�ajM�ˀo��c��� UC��`o+�f����M�ۿ/������iА����8f����!bp=��>ww�ײ?�:�5�*]t1�sVB���R�:�!.ڈ�AsӇã�����@��`�S�`�4Ԍ�!a��_P ���v`���ֶ��]5��j����ٰ����N��I�\q�Ď��=��v�C�)�L��E~9+�#a��T�*.��\k]��e ����l��(;@�?�'�hd�M�D�~yK�����n�{�`@�/����Ff���O�T j't=���Ps��-�Y��3gkgϚ�M#RD�� �aN/��r{��lo�Z��m$̐�O�`�dN�P�K���cDО��:�����wx��j^"�.jh�����]�~�E����5w��/[�h�rR����Φ�V�6�F��9�u�3'�H�c��o9E���������XƗ����uW[낡�h���۲��vȢ�K���W,h@ +�v�T=Z1�J�<l҂�Xa����mz}h�nO��l����0�2�b���z�s�/h���%��9s'wtp�>����:�ޓ&!|��-�7�w[Zٙ���K�ZacR���b��l�yw�up�ϡ6[:�gTn� +�{���8�z�!�LX����5+�^ݔ���$��R�v�*������J+��b��Y��l�;w���w&�A/�1��mO��;S��B�kk�A[0�3�肠�C�0��]��g5!�§�>��KNl��Go��${�]���v㊯M� +�fB�ڻ������ـMZu�˷F�Ż�4��X�������y#�q{�]�vifZ��.e�I�ߞ��Y�>qmD�ޙn�� [w&�M�:n��!�){�~ ��mB*[d* +�帤6���G��tK핻S�4= i�y�C"{oK�A�}��S�:t;�bي�O�i�y7Ǯ����j�L(��c�X������e�%n�ts�F~]@�Qe�e���i~_��x�-)�i���z��-�p��V�}�1���Ì����i�_�j�K�Z���^#zD�R{-&����i*elE��t�T�x�Y�x���'�D�*WgO��Z����3�� +���<��*{��|�SQ��n͛31+�u��%3�b�%��~���V�3�����(4 !ISJx�Ђ�3�1�a!{?Ц�1�n|�1�,:��u�Ѳ��uD�,ы0�eD�-���n���^����l,�O���H��sJzI`]��|\JJ�c�g�E�!'8, �[x�i]|D%��ֳ��|䒍^h��Y�ԣno4)�U�����Y���-��u��i�ճ�f'���{����[:hA��P�]r��}�:�%B&|� ��S�������2���o�������|E4�,}�k�\Ɓ�7�R+��W�ީĭ�3:!$�`��,��0�fgJ�u��jJ����+#\Ⓙ�3�S]�n�Q�Ui詶˺�'��� ���)녺�X�T%pȺp>��0�����ԕa!ys�G�1�?�;�iݞh��M +��������r�� +�_��S��8�1��l�4��X����VR��J��3�"��$��4�-���C��-�e}�U<��&��8n�Qn��r��1Dם�Fӽc�O��DÐ��������r�-j-�MY��E�ɶt�e� +���5_�{��?8f��� +�&�Op%]c>M�ZF�$�E�zk���)�.rI���VCY?Ӗ�!Y>�`�W�#�B�y��ؿ)h�)k�����Ys�-���d��^=\&ub�{=ې�#i0�i]��&ۖI���* _�. _���<��i���Idz���F�E��Ϊ�.%4d&J�|��q#�z��/�����Fv���4RM���;�#�Κ�1�����ߠ��۞��Q��I��*P��� 7d��n�v�����A�.j��,�ܽ�V٬[;9<8��J� +�Ba��ד�V��c�p��'�:�x-1���s2"鍫�+�J�[�eͨ��AckJ�*X��Ia1�J>إI���>���5C�ɍ6H� +: %]]�zV�b>�$)b�>���EUnd o�'5_(�B]�Ƀ<bQ�Ξl�QΟ�w�n[r�jft��q���˨�#�C`-�Ѵ9�P��b���O@p���ʶ��Y̟�s�?���Ǔ%�s�f��� �&�M�%�9{}e��X0*�ʹ +�I.�j���>U��]�%�4U�8�xA����H�C�k�7�R�U���C��e�^�����"�����kh�{m�K� +p�����p`��ۙ�2mNv[W|��w���Pvi�8y������q�GY?4���D])*Q[�y�%���L�0�P����X��j�t�N����ͳ��j��Iq�_�6���KǞJ������=�W*���;Xص;9�߽�>]��:�As�i;�3�5]�I�B1l��TC#�l�/��D�d�F +��{�n��$@uw�p�mL����Z�Ͳ��K�Ž��%����ݾ���@����j�7�e+�.ɤ^�4�m��ur�R=�g��T��s��̋�f˕���_Kz�(�P��_�{2����ws���c���@ +��:�׳���Fԟ.-��A�ni�%�36v��#X-��uI����fڣ����r&���"L�q��L��=�l����7 +��ܽy�����Ȳ�J21w u�pS�=�7 .9�!���R�<�q�ɬ���]R?��{���g�$�^"� +��B�!�O�FH��b橊̯U���I������[x��"��%2�)�W��_���V��_>`'��y|�x��}U�0p�����ND�4]U}���y%��r�zO?yQv�jJؕYa��Ǯ>�{�=�A[�����<���yogϴ��p뤼A����o�@�d�P�[1 �S�_Ԝ����RT�8��/���'��Ok����E&��]�_v7�_n��d�N�+�)��"mG[ڨ���SR�J)R��Gq��J���f��naE��*���:��bB<᧧O��]���~v��h؟7J�N��v�n��ՕO��3��T�����[��_w�O���{�� ��ѥ�w��6�z��O`w��xt�To��B= �]��8dz���k���dd�HI��+#1﮼�]��p�N ��:��5�t.�7�@�]��->�|<1���۸氛/��~��M��yaQ�o aW�f��&#O2��犎�r�`g����mU) r��(��U�D�t83���2��麘����ۏа�$��,�O��a7�k�����°goa�#p��E�\Q%���n,p�e�9sg�*��{�U{y�l�����(�M\/�x��k���/9�4�v�Vy؝G5a� �c�ޓ��~�v'�"8�$:��=���x�Y�R�$m���:k0ݦ������м�s��������#�'�;~M�i?��ie��נ�R?�f ��q#3��ކ�}�4�a$:�e��~�����>��G:g�ZǜE�>fn�k��3�! US�;�M���:�ȍF��͚F���B�ɏ���)Y'">��]���$�:���ӎ����a��J)���DĊ����r��� +y��|�p9x�W)��O�G�OO���&�ӥ���^F!�}�����]{P�4,��r2���;����2� �{�ˣ��t��l�)��gH���B8g:J�ܫ�/�u�}�|�ڽ�c��Շ�o���>��G�� �Q��Y��P��s^[���� ��5ܱ!A՜�Q��B�>]���Ϥ������� +��q�쓀����{I���!��� �a��a�#��/=��t� �xB�◌z��E���"o���/�P�Fj�K�^�#T�����q�SEh�hx#f�N5r�z)�~.5��G�`a�#��_}$;w)9�����g�N}L@�-�����z�s6aH�[+�`��Hn�d)Y4�g��W�$��~�N%��H��|�A��� +���7���b��xh�Y���Ȉ�V!||��1�"g:Y�j�����a����t�#(Z{�j���r�����a��S�e�_c��'_�N�$3�����qҧ�vλ1%=eVGL�h�>r��m4��)2i{F��fu�bi�����8�(�Vu�u�ק���D8���9�Z����Ar������(����\�D :D�ks�o�9֩m���K�;%F�X�l`��� ���r[{��:�, +{�i���c�����{�����!���^$ +��K���A��d�#Ǩ��,�:[�Ԩx��ʫe��Tz���[�A�n��f�W6Y/�7��H/j;}�va��;%a_B�n<� +��wvX�{ı�lщ�"�i��p_Gɜ�Q�d���۱oM�>���fr4o����Ď�|({6��RX+�V�����J���0z:"v,)�2���BjU��&��k�О�?�D��;!�V����=��?b� 9����%�Qٺ(2E���R���JdV��I+f��*a݆1�Q`��#�i��T1Z��ʡ�z�����3���� y >}d�Q�h�H������J�h0�T<�1̯sj�nDg��u?��˵ǵ�^�aO�u�_�w��YF}T�|��4�����eJK̚�{�b+�G������ںT�@:RK�����Q�������J��{/��9����j 6��L�� ƈ#�-�Ony[͖�[����:M�Ik���>�����Q��2|s4�8��|R��J.���1 {1#������Ф�$v�_c�/9����F��5�������@#:^�^��H�����<�y�-��o��"�%7�2�¡�WQx�(Rq��D�y�.]�y��|�J-����Gpvt����g���H�LP�� 2�C*�T^$�֔tu��9\m$�����Gbza ҷ�$^�-���ӟ���8Z₩�����\h�7g�Cǭ}�.���bT������X��9�l~Z��=J)��1�u"���ɘ�����?��J(k�#�QqLp����q�zK먊�tӠA;�,h#To�ٔ��v��O���Օڪ��1�ʰ,O$��|":Ge2�]��u�����7��c�Qg���à�<���E�_>9HΜT@�ͤ��j�&B�t�J����@[����X +�̵b���E,Ov ��:�Y`��]#�M��`K��=��B���¦����q��<���2���G8����t�T�Qۢ7�iC=Ū��4yw{J_oO�t@_#U���C����G�$��d���ZӁz3�����E���l��]��7�Jݚ��Xr����.]k�����˭�["D?��̧��� ���ts~)�=B�%�X� -�8V���K�!הY�v����[����k���<{ɬ��L�S�N�K�����݈+�mq�� $�Nef��������D��<�}_籵���@����cS�jһ�6�]�Q�>N(e���ɡ���1Hg���}p[ߩ�a�j�����Wv�H,�y�i|M�5���S�=̅qz�rgq������,�xa�Ul�j�/�����mP�hW�ZT�vW��o�i������+�?N�gz'��>��X�2َw+;���:���i���#dWy� �M-iMRS�o*��;� ����ѱ ����aWK��XK�j����@X�4�j�s�T�,��ۻ��pdlj����W�K{@�-fκ���1��1μ��&j +�䭌��N�V�T>с�7ڂ�5�Az4;Ԗ??ً1L +'I�3� ��W�\s��.p�#��Ip�"b�iF�3k�;�ъ�����+R����m�������Z�a��Cn�,��{�d�߭����~<��{ e��CΊl��C;2kS�4�J�G����˝�L��<6k��������\/1T>:D�#w��>�Ƽ�8 ����Ģpo��5� ��B��h��3%(v���.%|������Q6&���H���<_7T�� /9��_$�����ޕ�&�z��1�ϊ��"g�I:i|����j�a=M����O7kG���#qdd�\Zz�i���������[����K����V���g�6T۴|�y�]�3�)5�[I��~���o]�gZ5���h_ɅX�)E�)���Q�K��C>��:��5薜_e��%��]�je��p:j���R�~����S�2�U��b�����l�n��#Ɩ����1��QiSRs�k����n��f�ֳ�ܽ���+FJ#5K�f���]X�x7xJ,j��Ռ�J�"�(I.j)�Ͳ���ͭ���m!,r�5��BOiܦ�Z&(���d�l��M�*6�o�%������*�%��XM���)��q��9t�(`�ň��Q�3���*%$�Ҳ6E��IN�}S/"���W2���\�<5߯g�l6dk���i�>Ny��L��K,2\��<)ͫcVx5�*���ؖг�s���%�|�G:]�1R�� )rm���龜2�XE[Ӵ�-%١`UfH[%�x�.aX{�.dc��.��o�U�{�"���=�3!.5�kZ��Ր���Y$����3WGh%�䄥~d�R?!�8�H\������Hc��$7�6�7l��h�+Y(�t՛���{n1߯k�9Yi�;3����Li��� h�[QK��|����j���l}��m��UO��;�a[�:�}�g�1��2\�[Ey5�r��������utg��`���? O;]�Ty�<�c��^�/�V������j��� r��*֫���>�?����⏖y�s��Tb����w�3�o< +r� սV�Z�r +������wC6)>i����j;辺������;G-<���R&X�\tsk_t���6��/�K.,�c�/������k����Z]��@G� +�g[]�㕦ν)蛵���˝w��*_�0��;�C�%>�x�K���<v�^�~ ÕD�Fr�lA�O�������PW�=�)��x�j����5��ht.��l蚈��"b�:��ڮ�-e�<_�ޛ�}z^���v�g���=��l�}~g��SD���?���|{����-f�'�S\RZ�y���3N�YA���y7���K^K�Ѳ7z0�n %�HE-9TW��O@-�[+^�MYS���R}����6Y��<�}�`�"�%'�zT|�O���ΰ!{����'�Q2�}jr�u�"dg�,hأ�IB�YDI=6pЇ&ģ�TȰ�;����^��q���^�:�3t�n�E��aT�]LN� Q�ky�nv�0}�x� <�<IM��K�~w���c7��vQu��2�>����I��YR��0��|c��r�wN)��|���P���g�)~ �Ss\Rr�WɪXF�M��<����L�b�$�8�&ɋ8[��4����<T7��ʦ�E-a{��l�.s)ᩞ���PG۞&�Y&�)^%��2�|c�(��Ԟ�=��̢�*�����iR��,5˥���bR�_�D��X��Zx &$��p�_�t��͚:`���ML�Bk�[S��(� �k���3�d����R�Rl��t�[��QA~ 6�3�8dA�p��9J��J㻳����)L䞈��U�q��%8����il�[�M1�"C�&�2z�[�*�)H�_�Y�s=��h����!��e���Voᣝ��� �k�u���=���H��Pxj��,aAv9&ץ"�f���� �2r��`Y���(֣$�N���%�!��H��k��8�J@:^k����:~����Z����j����x���h�P��C�α�����=y`6��y�? +yi�љå~�Z\bD��4.v��������F�uKXy�Yf�i��|k��< +}fdž�M�3���/V?`^����u#��b�,<Z�.���>���w�7&�Yn9ec�Z�@�,�eO}���#E wc��X���� ��HÆi9(�4t{0���H��1$�-����hŞ9|�M� +w��� ��XE���a�@/�ѵ��Y�*���_�p���#6��Q|�s��ܜ��-�� b��Ӕ���soh�2ښB�*{�у��+�r�-e�'1�{#�ό���4�IW�i?�t��qI�%�B\���v :�=KL��#��c��3Y�y����<��Bs� ^�X�d�-���ǘk>8�DK�>RQʼrJq`��SYGt��H���#�ճ`���;ON;�Vo�@�6� O�B�-eW). $t�ꕱ3���@�s�_�|l����i~�g#��X���,���X�%a�iB�c>p�cy}��3�ۗ��Z6̣�U�WD�J����^�+�{��&Yİ��iP�MRy�����e��п68�#- d*{h���-76�匲>�:�O�_9��u�b@v+���`����P�^>}���m�*vw���s +q�!V�WD���=8� �~-{�'�{4�D��=v�3�zj�OK+7�C_��P��1/�j� �;�|����s������՜�� ����zS�o�[~��!��mAӹ_h��w�*_ڥ�X��X�%uW`���SR��4�_E+ d�o��bRh�Bw�5CG��[C���]`� %m�!��Ӝ��IJ�mX�q��� l��G�uS�խ|�B���`�z��L��:�@DȺP��.4��5&yWD���=?Q������q�O�+j�~� ������Q��x �\5 a��|<G}^��_,���jT��d�����_�Z�~��G�ѓV��������=!*q�?�]��]�|e22�?`�zao�>�H�N�+�����e���g�f�g���~: � ���.�%]R�$]2�g_��>�'��:BDO���5�����_�d�������ü ��!l��/�2r� ��� \�EH̵O�1N))_Ċ�A�z���>�GSO� ����3KM����~T�_�5�S#��R����ߎ�>�(���U��MT��"$�>��.�c�x�kH�4Ì� ��O���^k[2�EF����Q�����ah��`�c���允 +x"F��,l����UJ�?2p�5�|{��>�w�䜨|�CF�-�a���G�K�?/s��ZbPk�~5.}w4��vo�M�dIЩ_����W���WQl����Ʃ��pI� ��g����&EE�T�_�~u�sM!�si����a%^�#�������Ʉ/v����/V��[5�^yuޱ��� p�Rg�������T��@��N�] +ѫij?Y����:���@�م�轡܇ƶ�+�4 ��>̱�G:z���«%U����#t�#�����9�sɁ��G��f��{�����[^9ǥ��8e�d�j��ҵ&]�����2B�Z�� ^j���{W��������p{�a!G��b���l�B�Y'�o"�����K��?/����3z��Δ�G�*�B�t�i�N)!�@{��=���1���������j�~s�Y �����0��e┢�����wz!O�� 1���+}��o7{�.)��!�fl� C�u9�e�����U�[�'��Kn"���2f���YN�K�\nϼ����4ˉ��m*�{ ᖟ� 5�)�dz$<�k��v*g���Q�����'i��7g_�=�"BGk�3~:�¼�:�&�z�kH��ѓ�|_Xj�+���]r��貋:�ډ��ft��Xԩ��}8���L�^{J���������r��$�c53�vu����`�5�L�*9�����r_`�=EO�����j��11���N���`���[߬����h�c-.g_X�x�+骢���#�W�ԽK��*�f��E�5���SM�Xɬt���۽�W�h�����~���.� +�1n9.�Ж�XG�:6��o��MX�V�-vd\������E[Bț��߬Bȫ�Qt�e�Ǥ�I������C���,�Wl,yd�=���)FD�fQ�~���3�huCƕ������b���`�?��)\~_|Gۘs�l�M:�L��<d�����"��e���%����U�퍀B=3�D�������%q@�?, "�>�t����m.yu�y��&����'ߩ�2/3���z@o�5؉�U����)���x� �;��t-������!L�w룸�J��Rn���qj��(!b��L�X|[Q�U)��y�����$%A�Z�Hۘw�%#g㭣�7�YL,P��IX��O�� +���3C˲M�"V{�.��~��&�k�.�2aD� 1���w�P�f˷�ύ�O�� �� ��o2N�O���ڂ�R~���t�RG�=EM�/Ǝ�ߵ-�7'���}�E�] �>�`�]��>a��S�4��Q`�3Rp�y��>��7GH�S����}ȔC�KoU��(}j�r!/�5ɗ�H��mk����]|k��0<��RC�1,�BK+=R1+M��7�����v��������U!��y���v�`@��s.���չ�Bl�y��`A���JZ��l��[�.f���J��g�LZ�j╆���rKŽ�����n�;�9e�*�Lu�f���Dzg�!���'��7����iE!�y7L���CU I�Xrk����㯁��c�"��0����`b~�L2�RJ�8-�r}��������������>p�y�V�w�S�����`�����"x��x]�O�Y�Ϲ��_�+ ���{��(�V #W]�uEL4>;�mS�� +~�7vQY��,�]FL��XSo�sSO�W���d��#����_��s��{l�OK*_�-��A&�.���.�k��$�=2�s�a�ö�`a>�z��6���A61&�%��y���.9: �4��c�a���C��c��PC/s�S��u8��7��>ӽ�}�C���1�/��j���𫶄�7݅�ƨ�ߌ�������e����8=y:p��u�H[Kv�mą/�g�VԿ�y�-�������Nн!6F�V�xs�={��^pu��������co�ο=M{��z8�%�k�./v��qro�@b~��\[��lM�Fy9קX���N�Ru����Q�A���8)�Ӕ����{����K��Q?:�t��1",�=�a���ֺs�[FK�d�X��Ӻ����UD{�Ϲ�Y��<�蟾�[���_>�_�����i6��)rү�!R�����m���[ +��M{el���iH��ȴ&����o*(P���;���H����7�^e��o+[ot`2o�W������o���8UR��3�S/,J�L��@B�ڟf��!��Ko߃j�n�u?:��GN�[l)���]�����Wۋo-�f^6�������v�5�3�m�� I��o����yw�x��8�������>���������rj��=���i�:���=8b��7�^�V4��hG����ۡ� �GF�9����K�����Qh�}b!"�aї$ e ��#$�k�W��?[�*}�9X�*��H��c�E0Ob]�,0��W�������c�)������-9w����n�1[���iA��=1:�&o 2Y�i�^-&�&��:�!��A���ۼZr_����)�n�9�FJ��lU���3��xs��_C��.�T��l�#���,YuZ�7�#��x�`��:mw��[�pkd��s��4=mW��Y�}����'�F��_o��cV{Jo[��g�-]om��2~U7%��7v�)Y�*>nWJΖ7�]3 �����ڂ�$���$�����MQ�������u˸����+�9E�|k���x�wF.t�-vVݱ�����-���4�)���W����[��� B��;]x�ڋ~s�n�f �Il�k�vN�ể����{}E�W?��v �"W� ��}采~�����Zw�#�;���AL��1y�� `E����ehN�q�-�'纱9��P���z�㑵���6x��9Aiȗ��n�<>c�����yW�zAwM}UO�z!/e�w�R�� �t��Zv��.��B���>�P#.���}���U��~�J�Vu�o�E�/tt�G\��'-zᕔ�����<�}������(ِ�~䋍>�k���x�����#du��W���m7*��B'��(+���Ap�E�L6�B������@�����N�c���W���[È�;�p��I 3u�WE줟V?=v~[�!���w�>"^�g����҇k�Y�WZn�zJ~�N!B�Z@�kXpcO��9�$�����v�����O�:��uf>pH��9�p���w!1��y���D��:�褅������ƾ���x����բ�>@��U��O&��m��-6��:�Q���Y7 ] �-����mgn�[W ����x��5F����/p`��OG��CEXƉoRjơ�;�PR<�ꌃi�W�s��c%��1�.2��J�2AN\騼�����聮5�}}��(6�p��^�>��u��!<rR����]D�]x��<}�9zh� +X�RzM]_x��^��<{m!�z�E.1��U�d����w�����,�7����=� M[ճ��ק~w�U����/l�mN��LjQ�#�W�m�7�+��~rJ��GZf��$4d�7�6zi��������ӌ��渉?)�Ie#eu��"�)��9EI?t顖Vr0��V7�6_S~SYW�EBJ��S,SH���e�M�g��S�r�v�4r�3@�M�灙���W�izѡ�]�g��ы�P�!^��A~$�|�lZ�Zn�,{l/x�=Z|�(��w�>T,��\�е�c5�`�?��bC������ۃa;���LR`��0=�GY]q�_ņ�h��=r|��=��xu�N� es�]M+�����qE���&8IO��LSw�ݕ����oM���>�=r)��Gj������ag=��!���l�u�"�ԗ}w�}�/+]e�7���MBܛ.r�/�a��;Ą��Yx8KH>���l ���E�~%*֯%f�?��[x�!&g�1iGJt��b5�|����ȩ�wE�����Lu�y�1T�b���(=����u�D�>]f�oL �9IW-Rd��{5�_�94��lJ��ؙ��6]��H��0C#`IO���?��l�<M˧t�_ �].��4P��4��F>P�/�"Z�g�]�Rq�ۣ�p�!�1 ?�cbd�������6z+x晥V 5�ԇ|aŽ���4�)� `���䡌������s}��)'&ۧpo"R�r���49�=O+qəE�:��7��I)n�lk��Yzg�9��yn�w���*k�n�g��{Bj�F/:�d�O��eu�S�N�+�逷L�Oc�bx����<FJ:�q�~%9�b�>ձ`6&zw��6y�S�E��>b�O��v -�:� +�������}@{���O��u�d��R�v��`�RMC��v�˵nh�W��Ȯ0��%g��z-�'�Ѓ�r +���i_�y�?7��3 ���m��^Yf��u!�>HLҷ@����W�GK��g^%�o��$"�X�%�,5�YE��'2~�O���olc��?�E_7ٔ�!�k��_����z��J-�b������c%O��eO�<�s����oۧIi�y:�9G)��^�5�^(��,���~b ��E�����Gjާ� <*.�m����������x��lRN��&��Vx{�.�����瀞,<T3+�3�LYS�-E[a�G���G�o̓��9��1��td�;7������KC�X)�����ȩ��X������/�]�z�h̼��SxH#��XM��1�£�Ź�̒�h���t}�sţ$d�u��2u�%�9t���U&ɧ��NY�K˶G�#��G\䞬��|�C�����ͺ�7P���z}�c�Cڒ�˜3�+���e�����BD�Jwލ�Ih�y�Z۔��r{ƕ�ȫ#-���0�Z�{�S�3�ze���D�C[��ʺ���@_!��@ޘ���1��#�H����f��Rr�����%7m"j��(1E�\������_�7:!�K� /w���^�h_��3�,r0���b���vZ�HE�>Q1A9�xz��V��p�^��'����(�ᛧ�;��$3��r^揇*&4��h,���Qt�*B��N�_��U<1�>8�2��D䔝Ib| ӧ��X'��;��̐��s� +�4��.�V�1Qk�(���Σlm:�7�n���yV!��v?�UJ.X�rჂ�gBN�M���OUg:&�I !�:����P�|ܡ���>J�Y섅��b�������T���d��w���u����yX��Zr�JG8�d�Dy�o�u8)!��~t�i������9x��^�#�GJ�o�Iya7��A�k�r>Yx�w��g�E��b�Yf)������У�,��)j�b���$��&�Ay�9���i�DFlB����H˨r+�h}'��B{�-�<!�i�.<��2 ���K�2D�E� �m���R�]�����)p� �� ����g�K�ed�嗆�&9����司W��}+���1��cKP�i�M����� +B�_VA�'�q �&�|��>���^qx��R��z�= ��������ֱ�["ԛ�)lԮ���Jw�ϖ�����K�Z'YY-�<�*�3�]�@mO�g�q�*\ꅎ��)����ԑW��7�Jnn���/�g����Q�ε��=$v9��=W�K�Bk�emc���1P�U��B���N�j�S7���ʽ2^�W�YG�q}�K���f ?����5<�z?��FW�����9ijr�_�K�?��_�-��ч ������O�l���]u��:$���gƮ�_�u �r��L*R�!�����,��:�XêrH��@!@��g��/V�s�v�`��1��qtȉ�Qr�= +H��c�D� ]�>}�ı��{� +p���{4GH?��.<��2�/#�6���gul�nV>������+{�S����#-(sm����(�l#�!�s=�WcӶF�� ˟y�pY\����F����&�l��9�`�Ҋȥ����7�?����)h�+�+-e��pQ�z�PǢ�X�,.�:Y�A�{d�T���7ݐW�\�Ur�~-y����.1q�+<澔��6�d)-�v���窳]2J6�wN�4�+4�_E+]釾X�?��X()'���U�.���7�U9���Kl��JC�.P+ơ��@���X���f��,{f�&��U<�K����K�x�W5]Ĉ��:��#����x�zY�u��sN6������{*�U͠{���-�X\�Ś�zb��H��q�3���j�;S�8�,9é�U���{S�$�9�>MIz��AE�>��x�70@�|��)t������>i��C9<�7GH�)�H����V�K��SC�q�1�։�������ǡ/}��_�&�Kk��C��Ij�MN��c���Ϸ+k�r����v��D/ �(�+� m忍SR�'�j|_����%��̜�?T=����:�Cy����ov����1\��1eu>_�{٧�AO�j[C����_�r�Y�`�n������S1+�2Fᮘ�i�k�;T�*��9\vO^���|c���QX�g���X��:��d'PK 9E�XxMS�xio����"t���ɡ�\|��&yU,�OU�:2�[#��M��� y�j�S/ote�:Q`2�5���~|��9�2��^��I���p��?~�?�q�V�;�xU�nL�{D���2r��y��wHtJq9[����snڦ!��\/�/�Đ�<�>O0K��2T��2_��,�+ �����֩����*ģ��Y$�D�,)70g�b�K?��P&�ŷ �8��G0��"W�3 �����<*D��u. ����]Iu��Fs�UJ/_�~�n������ߧ��/m@�O֚���:�������2ү<��C9�s(~=���r�6���Jj����nOB�=����* ��Ħ}ݬ�83���y��Ub��l�Z�����IF���=��XW�y�e��n��x�dz�)E�j�k���V6�x>_����ɕ1,aw��_ �.�k��]�+�]���'ۍ�� �$>Cǫ�kb�٤а݉��n"�DK/=1� �|<�㳏���gq1v "b����JW�ýAd��qlֿ;40!%�(0�� x��1h�Zwy��("�6�Yf�[���-Y�<IM^�?]l��e��𭂛|�D��=[l슛�+����Qv��#�2AM���UM��C��a�\w�a�*)��)B��-ۥ�A\�kͺډ|���G��6���l�Cv��čQl�E��p˫���<���ݳ�!��i�m�?����62�&I1;�ȽIR�e���א���8���>��6�f\��x�C@V�Y�*�Mv�!�E�t��2��w���>��R��_�J�y.�`�*�5M�M"��j�~5tTܶ�ky�m,�m��D�O�=sL�_:Ęd���x4�Pp�x_�5w����JO郕��vF�"���e&�b] p���-�ǹ5�j=j6�HC,8T�GA/�JD�E��Ϡ�Η�ȍa���iL��*���S*=s�4�Xy�Ƈ���]y�H�ydž��,�L�Xx�:���)�%>%&��5 +4�.��� ݛ���5wo���K}��()q��2�)%�,�BcӺ���1I��4��-��Y���9.ç��N�蕟M�ڳՆ�m@��1)_�}Q]t�$�z�1 ny {�Z��75�{��C�ĕ�s�o����*��Y�x�ԅ��=\�!�V�ijU����C�,�g�t�He���v|ޮ�?]g1]l�S[]�[������}2�����U� 蕳�֏���M]G�(ə~%&�+G�8��q������^�eČ3}�@J���>S�ϸ�i��d�<=��� +�4����w����n�����81��چ��l�X���ms��b�6"�%���Iv�y�v�`��C���q���:� g���żR�9vOH�5����zf郾8����#^��#�%�*����]��Ô�kcՑW��r�.Ѫl���г= +>ҭ`Vm�U>���^X�+^��r��a������M%��r���ӭ�%��'��H�p+IY;� �@E�CV]�7��ӵ!H��Z6�!�&إȈ���k+m�7m��p���2���e�7��i���MV����~�kH�Y۔q�:�Ov)9��N�USEp�B#��2��S~����,�'\^�P�ح�c��oǘ�?�:*��T|����l�G�����BX�>�-�jF�K��b���7e�|V�K��=Yf��:��BӼ*T�e���>����m���:��MA�<s���%>�lE��G��}����M㳖:r��'+C}�v����#s����x���,�o�� ��_����< +}㒓�}��>�%�/��_7��t�::�_�K]]�'�����d���ģ� �&��~��b�K�k�U':�|��� +���&���D��Aث�Q��j�[Z&>m��'˴���\�u:�DK�v5�>��2t��n�!��Y��&Ϋ�.>4R���d�_w�)h81�H>-l�BF�萯�_[��N���ݚ&�]FͰ���k�E���!�}3���y�<�t����sv����bR�S� /&�_l|L��k}����p��a&m�T�o�UJ�o�g�T��M&qS + Sv��5�V�r��qVqm�_3�S�PEc��+=eϼ�w\�����T�������"rȭ�%���ږ�{ZA�/c��lu�.0�����:���%nsl=���~5�F|ґ��i�Ss�E�.ͯ���������C��]��`�-ߧk�8Y�t+j�2��O&&�t��q̓3̓���R�i�e'E;�%>-i����4�KFJs��@�=^|���!)�W�3�4 l���a��|I�R�ro�T蕑K.�IJS��M��U�,ӴR�<�d����W��A���A��O�ȡ�V�9���?7��zkj:\���V8�#=>�9�K�X��ةk��^>�KP��?s+��S@+� �]����M�1Ww�.�����օR2LM�I\�u��/�u� +t��X���� ����hU�+u�[�ب�h�w��s����C&�: ���aq65l���&�~I k.��@���6�w�"d�H��:|��Pɳ�.�p��sm���W��x��<������f}籁����C�곩���b!7��!�=ŷV��n:d�T��X��/�W#�|��yT��Ot���?V���Y|�2�t��+<��Ŗ�֪��-}�-]��ڧ����,��Vy4��x���GJ���Ss�v��*a�?Bh[*n��W�����}��O� +��c�z־����]xsN���1�G#�+�����OVu0#��&��w�/,��-�%��r_�eU{�o��H���n���OQ�2N�k�r������b������~{ B��.6�=�z��4;�<�!��Y�����SV{�oZ�~uϢ\*L� +y����D́��X��� �<����1���+�j��ӕ�Z���d��$�a�jl��"}�g@5����2N�/�b�GO+�ɉI�yb�w��~�eT�.q.1�>KH��Ň��ƽ)t��X峹��#���Yh�5���Z.���c�(��G���X��3�u{���)Z�U� x�֦�Z����Љxx��!7G���y(���@�m�<&�t�C�Xin�IIf6�l��������@k�Y6Q����k�9b�~ȣ��f����#b湕�l�\=ѣbWX�*��@�:��-8Sc��u�G�����s���2�/c�V���e�o4���s�F*�Vz�n�^�)��o�V���)b箍�,�Fʶ��L�U�����]�=Ra��m�i��lQԢ� +n剱�٧c�=��|��'������ϛ5�Z��f��.����ljx�ߖڎ��T�o�"|�/�!���"�@�X�$$(�K�1 ���8�u�[�� +�p��d��^�N=�9�@��i +�+i̸�e��ß{-S_6��>%2mw�̧c�}�5ϭr��� R��5a+0�y\Ph��!��:�KÁlN _���� +����b���ދ��~�a�ό\�Q�.�g٦���v�M����:�SR�̣D���Ȇ�fYU!<fg��C�N��9��a���o�x�8�>������6�0]*j��:�2M�3�U>6vd��`b�3��%���PC8��3C���Rr?��i9�c�Jt�_G���I�gK����iY`�<��p��ѿ�X�W�`��,�u��!�E�$���\��qN%�HG+�����쓣bl��W~��4����}�o�2�c#,zQ�K]rf�W��q�p0��/|�п�7w�, +��yr:Ћe^��@��v��R��Q��<]�-}��v��[4�c���W�b�#����Gz:as�l�T��u�������KM�'����ŀ����ĥAl0 'L�Wŀ9�,Ў�V�ѷ�s��9^5�U�K�RT�c�p�����8�QJ]���cm�\[}�_MȴNW�������W�į�?��:���wE�5���#��.�@�E���c��gm��!|��}�2J��xʅ� +s�����Ş@�����w[�7)%�x��<^f���y̳u�p��t()y��@\��w��Z�W�OwϢbܳ�'zd�9���+�-���-1�x_B-��^cߧ 6sod�\��m���E���A]��m�:�����9|cU��D�] �$��t�����8e�륙FP��rV�m�_u��E���V�w���= !�<� +1ul��E[����qN�{�}�XGx��T���\��N��bn�}�Wj�3lbR�]�9Z �{u���l��(4H)H������y���!P��iFf���Z$�3g��s=1�3��3a/M���)"��Q��Ix虖 ;�'f�iHy<aw8��}��!FD�,1�yb�s���2@'���@����N���V 4�Z9'�Þ�����}��%y4��%|�����uү!8dȷ����E� a��y�[��I�B��zS۟Ɩ�SC�r�N ����l o�"X��x�+�O"��ȅ��zƱ�����>[�vn�e��`������o��K�Iq�O�ڣ�"�f����G��Ƴ���S�̧�$m��=W4']q̔����O��Z�"�x�ȣ~��ϙ[�{�U���*^�M@B <��Fc�Ѣ��c�׃?-�P�Ռ�C%)۫��Z%��A���64]����~��)'��NB���U������EM�]��̰���F����z�p��s�^�t�ůq. +XF3G;��i�Ex �m�k��G�,+��"���Xa�l�ԝotH]���H��!"�l��ݩ���t�"����RU�}r����.��s��y\��2�i�C>�`b���u�ʧ��8���O���?�5��9|����{� <3��������ȭx�H.������)���ot=%������L�OU�� ګmd{��o�^] À:1 +'��S��s��܊}1+o[X�b���E[��7[�UAV4"�[�W' x5\�[��xT�d��x>�UVI��뱁�p̳A�"L�F_���Ί����'�IR@o�:���ΧF�h�Od���i�y4���(P��yf�G�,;��`�ڇ̫���։������96�=G/r�9U�9F�O�ø�:��?�N>rȡa�Yh�k�p���M�=�Y�f)%�d�G���֙�'>5�1L�e�1���"�rw�Y�%BG8:ѓ�s�����# :ew���G?��3ͧ�*n�%�����y؛�yX,�3cw��V1%ի�ϖ���%�d�k�Tt�G��{R�p��Js�SSO=��9��Y��T�g�|Bޱ����6��u�I��9����V)&�b���t�[}��i�~!ۯ����X_7xl��27���nU�dd�{xԯ�Ԅ~%*�H�+��q�z��>�t���������Ix�Ab]*L�{��=[4�an�cO�j��f{LT K����=zl��#EF8�~���ܨ6��8�ˁ�M#�M]_�x�c-.ߧ|�9�9�K:7ұ_��]��=��R�������vx��5ժfAL"J�SI����摿�������E.����Ǿ����w�F��0��Rl�SMG]���>[i�|ϣ"ȉy~Cu���_�b ��虦��n ����WWE�Tش�F��"q���zﯕ��/k ��*�{R�F/��I .�S6�������h@�l����*qi.%)ݣ��}2���?|554�.�Q~ ���B����7\J£`�z戩^%��t���~��Ῥ�k)`��� +����U��8���9%�@�O�C���qo� +j��Qp�e�Q�2�^f�&&��Q�#UO}rr��JC�o��n�WgZ��d�� ��=���Y\��6�)�D> �z^`��J��k�Un%��1O�r(�.%%gk�.���L��@��֩�ǎh�y�ڧ&f:?�3�,0�O���)iU��!(�;����E�z�������F��pk��R-ç�¾������EJ��M6������P�\��G:e������O�l�K �M?�K@A�²����~n����ڝٝ� �y�� �� gي�DEJ�(�s� ��s��,KV�b�9�9�F#�ҽ3����iϾ���n��a��5��BQ�D����Oh4p�:/c�51�\3qۓV+Z)��:�5ٙ�����z��?l8�5θ�ɨ�'��<b_>��&����$�\|^���[�ٹ����6!euR��}�u8㕋R��J�Y7�5�.m�V���b��=��eU��(۷��0�����O�d��?��R�{�_�_��b��/֡ނfQ`�0锋P�\�"�۲�;�T��m�. :+���I���!���M��~mFҌ��M�ê����_�|2Q�'f����Y�6�~b �{��'�'y�r�D�o�!����8�<���n��5i�~nc�U�p�H��%�;K|��4�1 ��u�%���P�������q�VfhWֆ)��=}-���H�Oq�4a�5�� ��ձ�<����_�����3nFm�KoL�)5;�"V�-���$F�����|}�^���5���)����?� +jg����OXx�q��3f�So��Z��O�oF־��W������f����_��y�K��U+��j�=⏦ ����*�a] M�j����o65�t��͋��� y����8�Z�=��i\~C,ޚ�5�rr¥�^��̾��\�`]����-楸�Y���U�{�"3� +�Zr̨`�O���/�"��M�.ƍ���1v��k�ɸN܂��=N�>��r�q��ɶ#1}��M��G�Q���t +��C�N5�L�9 �~��+��E��^�>�����ژ�G�J�ѣNy���V�~��>]��O�7�"Z������aZ!>Gxk�_�Gmr��Q�!mO�_Fyg>�{�R�{S�~P���ӨQH�,Rj�)�l����9�bc�[=�����v}LBZ&����NsT�'e]R)p�`�*���sj㮾����Z�"hG��⸾�����C[c�ZԪVb����S��!��[�Ō-yq+�b��nN��Z�7 �_@w�#!)����%��8�����������?_k����/��~My#����+R^ /3��Ƽb����q��kǝ�O7�iE�L45P����I'�}�+b�ws�Z��׆���3����ϨIJB-�:�ή���oj��;��͠%�"b�&h��kf^}@�yns��D��iM9���K����ϖ��Ѯ'���AW��u!8S`k��p�ά�����2b`�V�>�y2�4lN��/#�W �i^��^き��U��p�bA'輖 ��-hT�7�J��[A��j����G��j~�LS�6G�E[Zq�Ҍ�}vX<,n�i-�c��M��=o;��6�+S�++S�ʀf���ۀ�ZOԬ⬍v��oW|�`^E,rF�+������AK�,jS�����O-<��>V�5'���X�Eu +z`�[��q*�ӔK+���wY~E:Ո�����~��k�7O��ȅq=�BD�Y�9�|nm�z!h�G-���q�y����B����$�rk�r�S�ܙ��I�+�+Q�Z� \�:nD�*��$��q��{� ���>��p�B>���50�� +L���<8E���������_�N������pz��C���bFn������R�H-���=�"bP ��zu�U�:J=��)T�G!K�$����7�+�zvb1���)o�͜�{ �I�n)/�w!f �}��ȥ��� � I���:�x,j�1qZ�;�v�<�5�x�����쨝^����#3� +���/&yo�)�WS�w����g�l�_�Կ��B&!!���K�!��O0J^���_��������Z:�&iƺ���x6�1�6vC�U���ࣛ�G�^^y�A}��`y��*����](���^^о<B:�>N:�5F?�▥]�;������vvmX�,O�+�f!e�Qc~m�,h�����ل���W7��Z6쑠*a����BzQ��[�I��CS̒�]D +&'M*^�*�I��t��������4a��|�,��NBkx q=��u�|��F�g�w"f�:%l���Jz�(eE��������\�5�v|�,jte]��֡�3b8?I;�\h���t��?���~�����_6��N���kQ�c����$4F<�5N��D�O���q�}�ui���z�Ǟ����/@�`A���!8!iF�rb4n���p߽�Gם�?�t��=p7�R)#F^CH+&�-�нܤ�U�l=72+�Ѓ1����|x}-d�D�}}��-<�, O�����#������)y��0���Ӫ�W��}������+Υ�7��Ȥ�9��/� +<;�2>�y�uˡ�7�3!�q��ӳRI��+f�n������ނO����/niȅi�e�'�oRnu/jQrs;۰~q��x�6������!8>�e7�ܪ����?��Ҿ�;�K!A"J�-d!v! ��X)W6�[��N6Gh����6Ƙu ���Χ��%�0iZ6�(�?c��=a��Z���v�f�a�5����Iđin���� �����C1� Q~�����˶S�W���i~W̮�NC���Ԣ��v)=�s)��n�8�PW�)��ϛ�Z|R�����#��X����~�t{V!��Bb�nx��Pd��DTC:�8��EH@���� ��vIYi���Xx =�b����Ĉ�G��e����"!���Z^U�ȫC-�v�.cD����K>�{{����03��y-1��� ����[���������OV�\oIy�in9>5e�0����Dd�����S��SJC��#���o���}��/�ٻI��[V��Q��O˿�o9�����O���^��"Y甃W��D��{ _��]�<i�]�� �yu������5�얦��JZWG(�{��0*��[��I��x�-x� ҹ�]BA-"BX�,_~Y��ҳ���-��6Ag�1t?a�UGbB�,4�uea4�'��Z"x%n���4��V��f�Q�f�u�{o���'SzU�+FM2��$�4�SR��>~H�+X!�u�.���F��7�>�^�M��{Q�\���Ř��&���삄��s k�̋a����^�^EX�ǿ�-=;�$3��۞��'�\�k�J�ĀEꡤ]1��H�!]7+aQK�J��ɕ�Uס�"��Q�i{N.G\r�̪�Z�2+�n~�O�ȸY� #�b�e�[�s;sʡ��U3��n�ܓ�V^����?U�m�f��;� �������P�t�s'�9��~D�W1�1a���ce��XPϭ���-[��S��e�Xn�����l�+��T���f�bJΥ�e\je�ȯw?i��t��z������?m{D��Y�b{N!ǜ���˨�׀꘥��ë�~\y��S`��7q�w�R�ά\�vJ� ���ƃ�FQ�yک�� +A� � �p������/'��Ҙ�U������4���x!��4��5�?��j��=)i +jz8�c���S�1zQt�V�����Fz������1���y�} g�PȤd�͐/,�MK��y�q�ɭɎ�+�]�t +ZȨ��$��{�4ZyՕ��9n�C����'I�3����ߖ��jC3]gݿ\��}����D�Ʉ�U6�)�Ӣ���"�c�i�����ɧݷ+�2��>�}͝��I�������^����� ����)�[�����*)Q�`�$���<��]�� ѱ�m�h8��P��o����/�� +*V_���~���Dm�s��Z��K`O�ӭ��wȹkӢ���˫�ɧ6� ��>��Ua�@)�̊y_�5�)�&�֤Kʉ%�! �.8ɸ�9N�鉅�KH����K�]]�p*CzV%b�w%�|��pW��n�a���VFH%a�P@�+v>$�����Y�{��I�٬|����]5b�Г��_R.�@DO-ޜl;�>�zds�p:j ��x���yeK�v|m��(hy^v��>�3)�~'�2��_��x�ܼT�Y����+S�Z�3���[k=���Ѵ�̿��T~�1C�+h\zC+4U�i�I˩� �՜S�K;Yu h�ѶC�YМ�*8i�Z6��Ϻ��~rޯ�����y>-��we�B +b�7g���Q�F���������_{F8�� z�Ŭ�ۜv�(I��sH�h���z90�~�t��z�IZ?n�tmM��}�~`�E�7�ϛ���,��R�X�] ���qs��"��9���kc���9W7'�uqm7�̛�N��ZU��G�G~�����`hΧ�Y�z�F�U��º�I�A@��iXn�ie����D���3��4 +�V)csJJ��!IW\Ϯ�k=�5I8Ғ/&��nmTC>�!��!�A��j�:Ox���&p�洠r}\\�2"�X|J:���Ÿ��Dž��߯�.e��e�����~em�|��)n ]N��{���c�iNE +�j�� ��ŷԳsO;�/=k=�j�EI#�<�ee�חx*�����W�[?L��ב3>)��Q����z�r[b6 )n��5�dx�N,�$Yn>�Xi�i�+��P6v� +`��(�$� �F~��H��ͱΓ�Z)�b��_�w��a���g����}�}�:���'ǝ�s��$����r��kb��~�7���˹���Y�]zI<������X�����$�"��b�]�%. �\�$_������O̴�h���S��kڎnLu����J�F�UЊ���_�L�����R�0Sʣ6~g�.� +ZĝA-�rk�tr�a�~獒�=��6�χMl��6�cr�n����E��Ω�RV)3s���Ԃ��ױ��26!!e���ҠNAޚ���B]���i/�<��g\bz����pk�Zf)���'5Ҏ�$�d�Qٗ&����}e_LG+N�Ĵ��[�� +ږG�z�!4^�C�D)��y-��3 +�����O"p>�����P����)�尞W��+����I��3�e]�{��Cp�V���d�&cXo5|j��~�<<��J/_}S���h�����c}R\���b�ܫX�] �x���O�O�DL�e�����{A8�4Ͽ�k�������L�x:fe�) ���rJ�ôӡ)�E�&�B��NܫF:O��n:��B� �"fP� ���K�.��D��͑)b�i��V^V|�1�v(jd���*��� 4�k@� +�w.<�89,��ɤ�����SːÖQԾ6N9�U�Y\K�����3nN[����o;o�Y���#�qĮ�uq[��eXӼ��Ƕ�ɔ��os�_;��v<%�!�O���O�N�:�|,�gTEL�F�^Ҡ�U�Q.ƭ�j��k_ڐ�OY�NoM��L:������aUPø�uK�;~11P+<7k�]�u���OB���w��;��;Q��e}�q��2m�6�fnsp����H���Ѯ�!=�"�Q���ޛ �=��n!�,��wA��Ǜ�`VF-�v�]""�p0�Ә����*2�B1hEEn�E�y� -�x� �tpFД��YW*�oL�.fXW���Q���y�r$���m�����st!�cC�L��X;ϭ�5}��?4��)NqH�*ݙ��mE(�Ybw�\�����c����Mq��3����Jx�x�}��S��K��ܴ���w���I{���K�YUq}������L����j� #njD�W8+Í��{���ah�\��P!ɸ8��_�3n9?픲z�套%_�]�h���脊�H�&95�s�$�ՉI����ys��h`����o�����U_OA���椓ׂ�^�u��'�f����Mҋ���U��Ӑ� +�Y��3q�ZaC��ZO�����+�@.}�V�1����p|�m÷��ؖ^��,��_iTԅQ���W�� F��(�p�-��mN*�������4�4�SR���s�q���/#AKNY�E�J�:���IJ��q�~����Hۑ��M�-�j�~m�=/eW����!�4�bGR&Akt�����+�߿�!�������j|�U� h�a=��Iٹ9UnN}��yjc�v��h�MD�>i�>aQ��$�y?��d7�۬L���Qq߹:�y|y�z�����Y�4 +�v\����t��"��� +�+>�=�85��������ȴ��G������k͏����nA�~�(U�6^��������]zB����ݧ����~A"�^������/Q�X��v��~��q�L�3H��V~��U��%�,a������Td<Rζ_H�{�֝]xr�����nm�����\�,"d-����ߚ�p��6�e��u5u�N:�uKo)y�oD5a�*��v��l�Z4�s�R�Q�5� cV���Hg�d�Lq^��'���}��S.'�y�)N9`� +]��S�]�����Ŀ�1a�7������W'YE�o('W^1�߹�����vQ*����G.�p��άL�vK١iJ����}�����NE`g\JQ�ȫAmrf�5p3���� +;�F�Yz^�/4I:��*��~�5�&&�v1qg^՟v ��S�s�*�k��>p\+�� h�m����<7'�_��d�JI�v�®�i��-����o\�8c���1_/���bk��$茶m�J���Z���1��IJI٥���[30K_5}���n�M����@���k�!�k1�� 5�[SV�n+�j���ϫι�[!M�O�#Q;j�Pr�4��H[ZF1~�KtF>�]�5�rp�I��K��M�ĝeOfVՓtK��~��G�v���[�9�P4��TW��d� Ĭ�&���Q��s�I'�nenA�ֵ�{.�����"��Q3�_��V������>Y�{�%�7���i�M�'އ� ����C!�����{I<7")���(�����{�������o��vI���^�_���� x�Q�u*��U�2��b�����?����S�� ��>K�J����������5��m�����[a=J�;~j85Y�E����_��.�i�U��_����$A�������Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/�����(���$~�!�X�!�������k����I��>���S>_X@��8��l_�����S�����8r���O�����]Lҷ�~�CO�ッ��;�� �?q��GN�����G��y��'�����O>q���C�X��?��c�;r����G�1��;z��Ǐ���Q8�?�u���'?��r�����#�����A��*?8��o�5�CV��x�=�Cxr���%����@�����}�SIL�"]��X�����}�-'�+��'8����{*'��k�w��}���/ �� �?��'���'��8t��=���������"��y�N;|�� W���QЌZ̸^Ak�u�i^m@�i�[8�i7�5��D5䢸�U��[Q��1��')��ƕ�4�1�;1�����^�7 +��iY��ҮO��F���Ʌ�o��ijA|�Z�hWbڎSI��3_��\�%l�g$��q���1b^x� @<��b��i{ʢ�Ϳ`���V$̂֠����$��շM?�4��ɬ�k�#�:i1����8�q�4�c���:�j� ;���MDJ��Y�N�傄Mر9E/X~�v(0J>���%MrV\'!D��ͷ�6T�+ O@>����j�j�i�ǡ��cI�3��)���2�~l�a���g-V_�Y~Q�ux�#r�L�̨�S���Q������I��'l��5*�攸%0�k��==p>���ݐq�h𠦬����S�1Jcz~]H˹7�j�VV��p�w�� �SVFe�&�m���S!DaO��(6��ňE)D�*QP�( h��QX��[�L�e�]B��2*�/�~BMR�,$�̊�O&�Ωo�<b&���N!%�t�M�� =�R�B+A���/��[����.��mK8xm�j�̪��"bcצbzƥR$m"�AG�)�&�bf@O+�Ԓ/%,�v�����Hy�f�7w�u�>��v��f)=`v�i;P�C�C����;i��Ӵ���+�CL�xd|�5��4%����W&��91� +�HhIW���[�����쬪7��w%l�r�A��[)%�ps�Z��Q���>� b�S%m��eR��k���8�R�k�U)Q���t��Jq�Ĭŧ����N��8���$� ���G�g�ӼʤjĪ�!VaGTG)�h�A��e~Xx������ސ�o��縞p +3� +�&bA�Ī��Ua��-aW�bI�����Ӗo7��E�;�Zfi� 錛�������=�bbw�f��V^_���h�W��z%e0�����LԦ`'�0�����h>e�H/N;x-)�-�V�s� +UҡB q�ASxFP�4��Q���$������_+>�tW||��'�jNp�~q�U��������;TC���hW"�����l(��v� +~p�pr�Q��_�}�4�/$ ��s(��]BI�S!~�8�-�����n �K�P����zƧ�Oڡ�M�ژ�[�h��i+�)m�4d�����]�� +R/iaT!zꕌj�&&�]Rf�!c��JQ��;����AB��tԦb^�4�p����:�{qs�|��?οm;��o��{n��JUfV} ��(�);�-ecV ҅��\��R�����!�<>� uH�`N�̮I:�U�&�f��M�K���� ���u\��\�t�(a�tKG:0�����=�wzW������<�_���������bzi�& d��v�{1�Z�9�ܬ�O�ے��� +�SBOY9 ��t.�;�� ���OKϪ�'�cc�������6��iW|�����nDX�?��E�$��ӫ4�N1�d�2^�/']�N�)���Isn�4�q1��kc���1��6��Vn��@�G����?���Zٍ+o��\[�uD/l|�&���UB]�����X�MY;�1i�� Ǘߴ��5M��*ث���O�_2�E��uq �*��]��P.��t�l�Q�Ǖ7�1��+d��n���n<��K�nNj�Ԡ�; x@������)GO7jU���%ieVg=��v*��qP�faGҪ�D�Үऴ5��I��is����ޅ�_��{絺�c�JJhJܴ1���zC?zC;�jhE�#�?x�|<���{����|Z�cf);ؿ9N<�����DDž��V��t��l�r|RA� j�+����y��m�L�����̭��Z�6Ak�"l����)c�Ŭ���K2�D����1m�� �%�iB^�-a���-�2)��ɈM)H�^HؤTĪ`"�3��U��纇ҳ�}i�\��kjQ�xz�zf��<s�=w���o�-�=fc�D��<�J8��v�� my��(�A�!��6~[��nƜ�ⴓ +�~bu��똖Ӕu^{�v�]�[Ť���3��;���:2>� +��I�����������9$���V�v�+�>^W�ˣ r�V�Z�f�+\���I���g vN}�"l�:ٍ�N�$�g�,!¾P�ށ��[)�kie �)ag�D,����y��e_�<�f�wf�F��˯��'(�3vnc�Ƭ�8�-��הv*%)g�:iW ��7�q[����j�u7�>N���YFAk��(�h���Րs�S����߲:fm�v6 u��'��D�*K�� +�&�D]J��r��^�端h��1�m�b��f8�I���(�th�^�s��������k�g_�<��D�s��Y��ٵ��-`�]�JB]��hz}g�CHXI�}G^�H)H�eI����W� +�S܊���y%8�yj�M��ᮟQ-�n�-���k���8�h�-�bdXP����kӍ���Z����W��(�i�R��O��K:�ݽ7��MǙ�We����~��<�2�����1a4erAڥ��<����B�����"b�5b6Qg�.�ea-sFy�C��t��N�}�Q�A���� Ov��}�nN�x���Z���-�M�D,2* +����Q�;�W��,�oa�2�K0���b(��6����=�Po��d�Y�0��=7�$�U�� wQ=�8����b^�/��fE촇G��(h���]�O�Lۤ�C��l�z�B��vp[��7a#�.b�%�=��K�ŧ.%l2 +�w�Za����NfN&K�.�-�=�̱�c&r�q �`Tg�<r�ª^��Ycd<����8+�g< +yp egT��cc�7��g�.1#7�{�����7��k/����X[ϫ��B3�si�*��3�ꛡ���#hn#�,j�D4����Y \^�Zy�-�pcZP���&1pkz҅�t���QR^`�_5K�+S�B�Ê?c��IԤMB���1#p��Z32˒Vv��4�����C ��c��ۛ§���a�R��,���������� ���o�EJL(��VA�O���3ij��Ko���{ִ?<�.\�"�i��)���~*���1�k�1�k�9��:�� +��u���1r��HЎ�m/����OG4]��Z�٥���}�~o�S�}ʤ��M����C��j>[|R�����O7�ɧG�y=�C�0�^�mU�R��<AUXO����\X�ybZ��=�^�-9�������Ԕ[@J:�Sa�S�[/���>X;2ft$�̚w�An�ו�6���㜲w������w��&��|4�m>ր�5�/����SH�xd��G%G�}C��&�]�@ġN�Vfy�ʪD����_�J��<\w�u_�%�=J���R�nAٻ='���z� �j9��L��}7Dz����y�,3'�b���5��ߞrH�I���s���B��$̜j��S�g� 6Vu�@��:��Y�60KSn);�뿗����OU�^T�d���jL/��T�p�'���x��|����L��:|���V��=�B����dR�tu���I�>�'_�詅q�j��nB�0�����ګ�C)�Ġ�{��{���S��z��i�Lje��W�#>A�"hM;��Q}멕VFk��v/O);��(g�w�i���k��92#n}T8��凅g�_d=b����-�(� �� �Y(�fbA��rl�e�'�/���D�)嬏P����ڨ0�ws���������ޢ�;����Ĵ��d�D&H�#�]��3�K�Zap��$b��F��Kq�"�0"zF��d��t;��RXG<�9>|�3O�K�_,�/�������:Qx!�(0C��� +#3�����#�'�߭�R.%A���I�VeDC)Xi�~�Y��1�ٕ7���Ў�ݒ��0`% �LS�w���6A`v+��i������CJ���Q-�������@�'���i�\�Y�1g�����B}bn~'b��D@�,���zk�U����3�����������V�Њ�.Fu��%��'��c�&��O�P�b�I=�r��,C��L�"8G�B���}�3�����B�^�h�쬲��SBKXA_���$�?���(��_Q�,*z�n[�B.ħ�`�.��q�Q�(i�q���; +�2aaW'��s^c�ª�x���_�H���̼B�|���H3�Juz^���N{�`�x=�Pv�{0���4������i��A�nښ�:�Z�ĔS^�S���P�8� +����2��_@۩c�obc~/j�� ���4��^�J:���ʒ��8o��C�L�3�o�~:�������~��F\������v�7 ��%�c�G4��1�%|Җ�I�w�ô��>�t}�yys�]~��<�rxk���L�w]ӡ�Dӡ��!9kt��1S�( 痰2��_V~�W��Zſ����x��êt�-�|�e�m;����Q8ύ�֟V_��_yU�%�@>�C`�Y��E����v +:b���W��q�/��ʳ�#���4��$xx|�]D�.�h��[�S�)�9�̪J�y� ����+���ߴ6�v�y��o�������[Bt��m�\����$�JY���M�L;d숉Q���_�uK9�s����Ӱύ�A�{��PI;p���x�L.N/qI���n��;�-@���:����t������"f��j��e�/��W����GM�X�yN�eF�;���[��xz��=}����>jfU�l��-Й�c�?D�Kr~-� +�OPP�u�0�RwJX��do���S.1�=�0�E��ߞ[�3s"��N�'"Nn{��^� R�c&F pH �7bb�4����y5�c�CƊ�4��)�+ ǧ�ݽ)�\�y���E�2;�{�̜�Z�_vN&�|�3�s�G��I�U��ٴzůP?r�n^{�ȩ½Q�!��h%�a=����3��_0��53��:F b�Vg�=�q�%���^O���p_��p<��5!�J�Up�V��[Rn 3ju��Y��G��W_��b190E<�a�Ǧd����i镤|mD�}���z�H�A|�⛆o�Z����i���OIC�G���Չ��#����W�H�"Zn��� 4�( �Ӌ0�������*���/ Ǡ?�P�2 +:&8A>k=�jn��K��ۚ�]H�d��P�UJ�hH�������X�L*L[�R��97xT�>a �8�6a61- ؗ��i7�>�k>����J�dV�t�vTǫ��J0)adVmL��Zz��f�01�������YJBM���b�_��w�r��v��([%�%�2f�7�+j���Wص�ULO/H�جB ��H���w�Z!C�����p�Җ�S�7�6���}1��K�����9��Y!3;O���y��5���W_�įM���2>�0�Ա�&����O�B�����^�����F�Q+�+�ͷio��O@�<�ִ�۞�z$�#��4�}�2�skO��v�A'0��7���ʄEІٻ�=1?��<:��v����:�Л�h*�22��[��< +<�¯�y�f��O�i�۠�2�<">�>7�P���eL4*>}�V_v���I2>�8鐳�Iڎ�?^�ל����������v��i٘�_\Wfz�)ϭ�謤C!HXo��X�#�/�Q'ꔱ0�J��u�$Lr*jUKQk�:iS?A��)ZJ��$��H�i����\�O �Q��@dF����֧[PK��[m���S�Dž� �֩���@Q���+oێ��%i�J����'��&t�v̨d�zq~])�!�[~Y�����"��|T/�X��y�u�єUJG,Rr\O)\[���Ò?FF�y5i�����k��4x����\d���t��qM�Ԉ�-19�py����ێ��R�u�{�[K0������ 3�!�5�����P���r�� +khW�_5}m;��2�P#�5e���B��s<��KS�g�)؏���[�O OA��������k�0��Q��w'�빎�'��G�[�]io�m�Gi�*g'-ݒ,x��_�ż�V��n��r;2���|�m�S5h� +��n�K�7vfU=���r�89�K;s��)w������I�J��%d����zP��U����l +N��-E\wV�%�k��+�]й=+�@�_RdfŜ�t��[�p������&��2^�'���Z�ۭJ�T҈�R�n=���Gi�Z1��F��������w~��䒤��j��s��$�Jq4+ +{��뻿�_k��+b�Na��0�j�4da ���G9���_� �bq[`�S�uw�DL����5j�1�20ݟ��o#n�4dbV�M� +��Jᦵpn�~�[��d�$`*��d������^�j%�i�J�v*D��t�i��n\C5�K�inU�ܣ\{�/�NC]�ڤ�*I� +jN�ᓮ_W~�꼐�q�����Pm�zO�v�ig�"�PI�zq����ē��ˋ����&9�yX�1 �rƎ_�S~��˚/�|����1�Ok?�x��cl�X��=����\}[wh�I�Oa �z�Yہ�0�B�"��x��u���skV�ۏ�5�"��qfi�)e�=5 �z��电��c�o���Ls+�v�������n)��� 9��*Qƪ`#&A��ײ�ܷ/�91I��0�;�_�O�4Rb�ԫL�>j5iVN��dˡ--�$���� D� +���=h#�:r<?bu%�jA\w�n¤``1��S^!57/�[�H�/�E��Q�D�j<�)�J���\DZ8�R�������7�!=f�*ĵ-f��#%5w����^���D�ɾ��QFJ8U� ���}�>�0�3� ��Q;�%lbU��Bjf^��<J�z4Z#vpW��W¹�%$�m"hK~�%�&�J^pF҉���ws���|�}�RIn^�����!��;q����U�Kyz2s}�2�C�R������y�g�B�2�u�6�@P1 W�����f�'ea�s�b�+��״l��o�L�L��<Y������zL�)�!v)'bv��}���� �5��}i���� \�Լ� Nq��;�=��-H�I�����q��3��V�M�� #��r�a��0�eg���w�tv?f��bz�չg5��j��4�hXX�aJw�����EĨY�5��f��o��7'��g���D�?�|M-����Z楡N6f��d���s�4��bj�4�t����1����J�q#�2~88�q|�iŗ�Ϛz�v�?������h�}�9h|1�RQ�hQ�:�'�D��R��m�<�۟�q��-�U��OƯ��~��4���8�\�"�m�v���O֟JɈ���>� h�90<ͯ4�(�����(���4��TO�W��p��D�{�e�$h�y%fbW�Lv� h`FH'�匤��p�5�k��;ǹ�.�D����VN�ze�/AK���m_��m���K�A�n�è�Z��l��ԕ1z)<�1��*���6�z����ƹ|5!f&�E��2�$�"z�\��/7�DA��*1� +��q���4�.�}�>�1���`����q���õ͂\��? Zx��҈E.�E]A#�"�ӡG��O�x�n�9 V ����@X}�z������jN�%�%���nLy{r��zd��/iϵ��g0;��Q�� +yPK��]����܃��Og�����A�7��o�xԔ��2�����rY�~�媡_���a-=����ì_���-�Ӵ�����2�;�%�7 Z+k��'�2Z|���8�����/� �A�İ^N��t�Y��o]��8������$�97�s#jV2�f�7����ы;P��{ve\r�_0}�4d���Ҩ�W��)f4&LbB� '[w�����ӎ+�5tĎ�%vm�H)ܘ�̛�p 2ɸ���8�MJ����}�ഠu�e�a����$h�̼���Uj�[���������9�S� +[9uq�-eWr��n�E�k�����ʙie�YN疑t1+�i�g�"!'t��2v�L/[&�At*Y03��_�Z�K�¸^͋N���Ӣ��NB0<m=̫��_�J)��:hP��_��F`M�n��~�#=���y>���P�B5)XQ�J�H)9��;ha���㝗�v�WdF�����AlBR�-���= ��w!�=r��+ʅ���|�������uk8f��kĪ_�3�=�=� ���[�zn%b�t�V=��f�^<u�y"��7��I����.���El�F�)�m����ݪx� �~�ĭ[�0K�ƨ�&1iv�v>a�`��������Kʎ����]>��x|kBҌc&����p�_�|�ņHy�ʬO��`,��k�����R�+5;�4=���{��3^�$�����r��l]Ӓ.%]��P�=K�yk^��R��fU�)$J�p� �J�x{�%�C�S��{�[@��a��݂\��ٔ�m��C��pe�*�H���T�����L���������(�zV��p�O�Q���^�uDN�w���E �3q�h�,������ f!h����*ܱ:B:��x$�6�L����W��Ca��[F~d�W��-����q� >��v��]z":a[Pë��U�q�9�hL˯K��\��o�w��}ظ�Q������I-hm���ߛ��Q���vg=���S��ם�刉p&�VlN5�t"�軕��(��������ٞ�v湔m���_�¬�����3�rw��|3�cm�_����<�G>����Q���5���"a��s��'®���L�D)H�i���pp�b&�m����YN�ߛ �𪂀g+� g��a�)�dA���: �O���P\����'��݁)�Սa�y���i��1K�(j��pޅz}�����$��m����:Q�rP[�m��n�xz�#��X�07�kĬ�Y!-��Q3�h}��������:�d�K�<J�V��C�JY�."͍�����x>^<bQp1�jU���ʹE����p�&�$\�'�y���G�L8���z���nc^\w���E� +>���v+�����l��,��뽝��۽w���n�x-*�A-A�7ߦ���TC����H��KH �ɗS^�,5��Y��Jr���W�M��{�b��YWO?p�Y��/�S�כs�2I��%�� +�%��_�N�ɕ�����EBDmJa¦A���{�P;�}c�t1�c�%����2���,���^CM�l�Y������|h*�⍎�8� �XE��{�@ ���z��{���J轄��A������v�}8_B8�g��~e﵏��n=��h�)�ݾIw�1� &���M>e��5�o���ѧ*z�O�#A>d��`�)�b�z?+a}�e�?[鈷^�:��`����} 9b�n���/� QV[AO���>�b"�䔸�1r���?���?��؝ F�6�X���6��gj&�̄�Rto���Us:-�?�R�&Q>�2�ߑ�=U Y�S������$���f�a����$)�1'Z2� c$'�\v��vGh�X��h�A���Ju>z�H�ƚ�_��,�AB�<��&-v�d_A�0~;T�b� +JioZSؼ3���7�_�'���̯��p�`�O&�)�1j��7�*S|��)=\4�o>��9#L��ebN�ĘC6����5E�*0a��н !�D��Դ�g�;�R��T�{�dc�_��Iu�W�����vU<�^%d�L�y&�XE���i���꜒]z����z0IK:R�c �A���0��`J�8á��O}8�TȁNl�*�d:��l:���i-�X'h�����L*���_s9զ����|ί9�-c��r%�P���W����@�o�ҁ��(:����p��S��8���ܺ����� +��5���>�Z|�ɔPpj�N�c�9�WQ�;�Oj쟳b�GB��{2Z�i��3 ��C{�����4�}a놄7ӌ��7$��5x��&�K���X�Ŷ�W[=)n����c7ߖ +��s���+]/��n����H�� R؉`�N��5I���<�d��&ޗ��������X��q +�T�%m���(�3S���O��|����p�w��d�ح�S����(�ok��\m#���|���N��g&�;�D�h��=I����T�#e�LO�5MC�3MM��c�M���ZrҞ�7N�8��;�\�^?�;D�8T�y�iH@�p�G����p]B�� +�G�����t�V>@�C=���s_F����6��?��1M����|����9��U��C-����kF��<�A����SF�iM�'�ε��S5���JF*�c��.�l>��H�]nZ�=��3�e�3�"�3�$&R�7�c�6�a�A����pa;�x���L�_u�L`�c\��0=~c(�Ӡ�7�b�:�Fua�!�w'�|�&��t�C%��4���S�\�AF�9P�qgӢ�_����ڨ!�O�ч3$(���cm�ء�Lz��d&��|!�ퟥ���yQ����:�p�����Ǧ~a�8�Y��*R��z�#/C�]�F��G�!�IF���g���0��t2��z4��}��2�tľ��"!�g�+���3N@|�w�O��C ����^*���&]���6�Ϧ��S��� |�H�D�����#�h��Sp�����|FɱN ؑb�7��@��NT��Q�qb��8{,�,:W�������9m���ę�Ӂ?E�K��O��BЦ@�1���ؐ`|6��Ʊ�ʝ�����C�2���&@N_�>�q�D����@.�<�Q"ɳ +��Yy'@�����AmK��g:RRO������ɸ�{��l쾂�����7J�?���h�3Mk6�V��s�'��g�NT�� ����21�@�9Q0�2Rb=��i#���q�K�5'��Ϝ0�9kK�Amɨ��>������%a@��Y٧��sev��81|�/��jg��~0��P!��r�6�q'@c���*��c��U��U��C%3�hZ�Ued�)8D�����|�F�?1iK��hb��$6����9�l�/4�\1*s����5����IJ����:P��gS���g���D��@�z��m��1�����������u��f�39ۓ��'eq�q�-l5md��h������CMV��T� ���5�X����2��rj���=-!zOIߕ��u���)SXQ��bn��Lf��۟�9ͧ|�)�x�=Ӛ(��c c�@z����N��S5q�e��3�a��y���4�k��=))|m��p��b�C~�}�r4�e'39�'3y�{`܇Zݨ����� �y��db������2.fW�������r����a����smf��.=��=ղ��c��?Ng�+��D����!ʹ��4�qe\�\��Tv��T~Ù:��\��{<)��AM�K��T���o�����b���f{L�ؑ�Y�>j_�ŝ��kٔ95�����K�_q��� �C�P�ŀ��M�x>�.�^�1.f������q�&'�P^[�H�����+����2��T�g�Am)�g�ܪs��窼�����i�R���(����?��M�:�xg<�G)Kmi��/�� �&y�}� ��X�B��O��)�%lN�R�'���!j�O۟���(٘c�~>ͥ��}��:H~$|O=��|S����OܟࠏYy���#m~��tN��B����7�=��٦T�smF����k�M;�eQ�1�M��8�}�5� <|��.=���՝'��=Ǧ3#�#�䄭qR�̓Q�.X��� +��%�FU^��b�>���Pt|�6���,����@[:���.<� t|֎��z\��O>�&.������G������B~��\V��|��)�Yq�1ІFuV᮪|�p��Ө�*Y��7e<̱���9EN����m�|~O�_PW��q��F�QN��������x��i��)>����͏�mF��J�4�.87����^�Eb�z� в2!�0Ɓe�Q!��y$���Ǔ8��$���ñt�A�I��m���z��T� ���5�<�������y��B�x��I6�x�� +�UޡJ�5{��L����o��2ߜj�ڙ��gؑ\�����h��y��#��})�KF�����ɟ�F�1��_S�̙���}T�<Cp�N���5�e�O�Q�]`�rl���5�M6��˙�D���R��%���1Z�9��gZ>�@ƀ���NT`|�2��D�Sv6�Q�s��ؕbM=�@��M�eTf���Ӎ��o��'�P�W���k��#>�(����!O5E����*S��~�w�4��ӡ�K6�o�9���a'�s5�i�sc���v�"���]9�t>�X��=Sg]�d�q�瞂��9��sI��L���ʹ&�?�=O�9���R���;@�����w�����y�fbO5��9q�����BF��lF ȑ���e�3�O��)}s��8�H�S��2vY�Ǻ�f��& t4��2�s���:�k_��k���%�����#]f�>�z<�f�f{mW�����z宲B���,��;�_��<�\���tB���ʁ&#gg�Jz�ɫ>��S����h���ώ�/�%�3�������t�P���w5ࣲ3 �r�����I&��qN�3�w����<�m�>Am�D&mx��D���S��}d��z�h^S�����;���$Np������N��V7��V��sj�6�a�o��ǃ�A���sL�F{rnW�7�s��HE��p$g#M�Ӄ��J�1F+ms���CZ�l�}�Ĉ�Qr��%z}��L�ϵ�;�����w$���J��Xp�d��˂�v�v'D��1!�2C��ٌ�f��VhS���`� �ԇq8A���e��/�������3a�0P/�jFڡ�w0A���GXIg���cu��W��������1�H��ؗ3S�T����=��qr��:���&���D�3�'&>)d�3Ň�/�O�)�Z!h�,��q���OT��c x{>�Pɀ���J��.�d +lW���Cy����S�Y��0�5i�*��B��\� Mq����K���&x��yq��=a��6��d6���4�s����N���S%�`��,��k^��s>��:p՜L?��ƴ���������������é,�9�k��9��5BΉ��:T��v&��= �ZU�ʨ)=��T��G�PC��+0��r!�0��WUܺt����ٜ����l���r�ᒎt|��/�X�Wy ��Og��j�K�R1�Pͥ��B+�i'J�)@��O�1?�\*�G�?�ϖ��2�N�8�oi +j�q�s��B(����1�P�]v0h8ޑ`��M8�P��X��f��j��r;�c��uo��7D����<V���Ͱw���Nd��9 z(e�0��B�c��C)=�D�J�b�� +0F��q8��2J8�az�V���9lo��3D���=7��̨�n��j7�� ���J��{ �����8/yU�#M]ܫ����B�q�c:�@8g@w%/�P�ӡ��=J��ꣅ�I���=�|8�����3@���Ÿ�`d��_:6�\����ޟ`�mRB��h1?��?���7zR>/4A���Q�":�m����t��qr�� ��8������JN4����F.<c�瘴su��&����߱J�3��ā79���=T����4�1�X�H2���$��6@�؛ �) ��"~i���Ifʑ�����<��,�i]�lV(87���9���������ws,OgmX�+<�baϦ��s0����� R�� �cW��;ױ���20�SmV� ��3]V�鴀gT�< � �g��C�^��Dk�!a�٬@t��&�H�GJJ�>��c����0���mn%����l��4���9.kWF�n-�.a�,�R���B�"3gc��Ԏ�r��O�~6���Qb�&� +qW�I]�aF��xt��$�3H�;������S)f�1=��*=��*1�K���ԟ��O��2vw��֝�y��y� ��x����*!�X+��{�tWn���y�������KuX}����Ӈ��`F�v�=��-�J�.�C���Mg���B�\������PJ�3���a�mt�M��=������0#f���X����%���f�A��� 즫a�gj6���/�abЁ��҃��ԁp�!���㤰�>��Z'�WS {��M<�����GPn{��/۽����Q.G��� 5z���=_��3�a+���+�� �X��qZ�a�c��I�]D��a|�?��9н!l��~�m�-�v��ig�;�6�LkW����Ir��L�O�Y��a�2�1�ϔB桌�8S3Q&�6q�q�b!��g +�c8�qQƱt�Q���fD'؈� V���˴� !�,u���t�\��/��F�R��ǘ���ؘ_�:�f��щu6��ε���C�Lr��QF�q��?L +��¹����� �"w���~^��8a���7zH��]������6�Ң&���?@>����]� v�\̾\@֏Q�דBw$�`�{�`�M=�rZ�?SL����� ���&i �c���>�����Yq�O-�|��$�L�p�ZrOF���Yl#��T�>�ב�������rkڗ3��g���~%h�� B���5D�N�iù� ��@>�6�I�' +.�3�� +��(3ޤ�v�E$�D�xW���ob��k����^Z(����}H��^����'�����F7�T����/���@k������; �-�O�H��6��J3#`����D�Ҕ�_i�`k���|-`,/��z��(a�o�}A��,� V[��[�����F/�_]�l#ˇ>�X<AO0��R3�>fk�6�)��!��q4�U?���"��B$��T���w��Ԅ��ֆs>�0N�Ė�,}%x�� +��s��e��n�)�j ��zG�ǥ.B�Daؽ��ݹ���&-��Ӛ�v�f��y`�a��|8���L�1���q���ة�T+ui��Lm�;]M���.�㩌�z|8�s��aJ��$~��`�$,� �5�3��s$g��O�@�� �w$�h�0��=�n�pt5x���Ј���E�0����C|�z�>[=$��v��j��t ��\}���:�C-�Z����C��^��F��)�c_�E���.4�}ϋz2�#��V+�e�.�z�.��|-��z+�Y��n����$y���*��)��gk��@{ct���h#���~z�r�{{��[%���}����7{QNz��}@k4#?����v���Y���������Է�Ҹ����'�}�����O2��x� u{����Fp���TA�J��杔��S%qOwwlu���B���)�Ǔ����;�_�屏u� �6:P�[�xo�ٮc���+�"���(=ȏ�~Z��="��ȏSi�su(�������r$�&l�=c��c%~��sۊ��P����F��b=�`�� =��V��F;��R#�VS��R���r���P��$|���}^��}�-G�.7�\f*Q�k�x��v��&��a�/����.z�z;�}�1��Tm�����[���[���K�H�mP���� MxǙ��+ Q�5�~�����|�r';fo���2�Zn&M�ܐ�~��n��x�TD?[jA[j%yotR��=���d��v���;�Aߋ���C|H��ܐ��S.��ri�1�r��~��كv�u��l���Vې_ CB�a$���/J�o�z��P\�+1��0���T�����-j��z4���ˡ�5����)�kH���,�a���+�m���ߟ���Ӗ�?�*Iz�+Oy�+��Y��|��1��$�Q�]�����Z��TE�s��oԅ�g+��#���#��;]�3��\���ե}��J��,�|���*��Xo&���$[.5�~P�=��F����\l�9i����Aܝ�l��]�3[�$����V'����b3��j9d�{��I�q:t��n�>��\}��47���(��\=��h6����~8�qd&,�a��R,��'>��?��!�M0�u�p��nf�q,?���k��l&8iˠ/F�A7{�>�O�$Xȋ�k >��).?���݉�;�mW;R@nŽ���X��v_B�9~~W��lJ8)K���4�ź4۹ꤷ㙡f��+ͨϚ +�c�0�q�z8�4���/%E� �WZ-g+")���V��&�m�����J}{��Ҕl5[�TVh�Ju����r3+�v1�l����HpQ���%[�Wa>��S^���o�����)��w3��=���nv�|=��R�~� ��Dv��LU��&���a^ċ�F�v3|���4]���)Nz�R�r�G��Zm��Z#�A�=�G�6��ֺX�3��w���;����p3u^��l �u�0�|��2_��ҕ��^jH�YiJ�YlH�R��^���懲^��c��Q.�CB�N/��M\iǻ�:�2_��^��dA�9���vV�\#�s�;��*�_j�zMW�^)�*�Kr�����m�R��@>mt���[Q�@��7�ltUI���Ꮴy���"-�0~' +so���օ�6��BW��j��a�đ�h{P+�V��{ݔ�M��k�X�����<�b��Xfؽ�v����6�Kڒ�p&o�7��_�zr$=��DF��<7��Xz�e1�E����.�i��x�ɜ��=����x�� 8��m��S��f���$��v9`����gz���p��ͱ�����g�|?3���F ��N��/ԧ�W�=��Dޒd�=�Dz��ˉ���ú��qֻ(�sup�� +����>�c�ꪓށ繿�̈́��d0U�D��z��XN�J#R^�����{'����4�nO!3� �q�nj�"�F�CH�{�?�����H�|�v?=�0&$� (S䯺r�{ݏ���'�5ɶ�j�� �C����4�1��2�p��ޗ�o�5��jK�+]i��|u�+�-���|�s��J'�m�.�j�(�\^xw4=��xv��b����WV1��������]������k#����T��X�k=�[�'%��M��� +��� ��Dv��$3���7�F��ʐ(�q-9�IU���˭�^~�# 9���#�WjSl���w����7uUwi6�y�����K��m�n=[��)M~-ω}(͌6ו��s�/U9�&|�:_���h����>�*�uU�O�B��U%�7�� � �@���J�w���Ҋ��ؔf�Аb���}9�d>�v_[Ns�T��H���H[u1�BS +{%�Ox:(�R���L����\n��(�OF3��z��7G2���#��G<[�H��!�3o�{�o��#��^�����؇���p|�na��F���lq0D�]�O�]��טl;]�p��b����l�ۋ�(_���O Y�,AZ�Wa�5�S��T"큿�ˍy���I��$\j&{��V���ʒ��3 $��nV�Ig�f�ZhD9�Jᖪ�@S���ߡֲ��g3?R�L�Q��iH�R��b��H��M���&~�,�X c�IϦ�1F3_��/O��B������x�9���ȋ{�����F8��#�����_/K���V:��S54���ė�����Av����_��N� ��X�iv�Z \��y5�u�:,��[W�PWi>U +}��B��&���aV;��ă1zw�����T���I��V$�]�p��`�{�і��d��qJ,�"��c�,T%�Q�ƾVO��?(��2Y��܄�N!l���:����H|1��X�l6�rww�7���)C�WQ�Ƴ���"�mI�[��}�8�IܗGz���;}�4M�s����>�����v�|���o�/R��D9<���Ɉ����z^��^�f���ez]ߘ�M���]Ǹ��,�H�;�����ȯ���7����}�п��Gң������6*�}�،�Ί~:��Z������'ץ��7�k",������Vڈ�K�$�-iv�6l4eqO��7�\���\��� ޯ"���8S��<S��^j�|^h@R��-p�4 .��NW��x�m����D�Xm#����%���qB��:���/��j���ʍ���}S����*O�Z�C;��`�2��,�h���꤅��=�K�����Ϻ��7e��V�lk"���C���[�Ԩ-�-��O*��_�Q��5}�����jG}���tg�����2�����`> �G�J���\��e��ES��BS}1S��A]�ה�}�̠lt�q�겸g��8�6����x�K���G�d�e8�E�3 +�i����dy1�{7���`�]�(N�,&�$�~�<���R�N-b����M�,����ڴ/��Ч�$�#���A�R#�i�9�z�.���<�m��U]y���0:]���-�������K�]mƸ�WA_.6b&����~�\���hw����p�"/� ��R�vw�ԅr�Js�A~wY]w_:ZU��l�((ܼ��vc���3 @��p����1a��<��D^��A�����[����7G�������Ġ��zA��$��hN��^a���t�E-��L>v8W8]G��G<����J���JS�,ԐG�`/sS������J��N��>�~�����R�F?��J��oD�D�^c�|�KY�>���+�i�g�S��1@����ߕ��,�����/���L7���7�R>��Et����y�G��?:��ח�Ӿ�S���Ž���M��oD٫�bɋb��㟎��<���<\�ø�y�(E�������/�o���ͥ�Hz5�q���j?��l�&�����p��q�����S#�7��m��lD��w%�A_�b�z3߯u��� D�٪TەF�ו�7-�h��P��H��vz����B �e��9[�uշc}�;�H�%�A7�Ҿi*"����-��TUh��Z��~A�y+ⶶ8��N/�mg8\�����T9�g<a���kXl>W{��}����M�w���1/4�I��"�\=�o��0[��q�6 �x��$/��t-ʽ�����l���7����z��|��z�����m��A���������q�p��қ� ���*4�\�=��l���(z��k�_�_�'z:�p_������ ������ P��~b@3���Xv�c��|$��7:���y���x�~A�]��ˋ�in�%Hס���Q6n�� +0a���ށr�(�~��z���i6׆Ȃ�^o�E�"7z�<����#�L~�~�5�NQ6b]T�i�6{�qkm�Ѕ�d�&��FG��u�mU�i�V;�d}a�|�0FQ�{�Ï2��y�9���t���"Kg�g �:��6|��謩H�PG>��b�u1��"]/�J��Km�б���3�t���w-��R���4'桬0��8s]��N��i`�����صNv��n)ώ}0$���ˎ��͌~6]��^n�D(��.�������ca��ّwW�7�QehWyY��az�磌G��wR�ׇ9]3�ۨ8��DF܃������ܘ��-�Pe)�v���B�\m���4�]�ZɆ!qk�������*�3uv��(-~x��>R����3@����mv3�����ķ�^!m,?�U��$���Bc�>��_��af�UX�a����w�kq�G2m� �!mt���^Lf}�:]��pLH>a�0��B+�g��lXz����w ���㝉��'��m9$�r��a�7 ��t3��Flv��#m�k��) +���T&Xl�Gb���'9l �"V;0Γ��f���/5�:��%X��+�R����J�ֺ��B�sx}?'e��>����K��a�~����NJ��s`.�j`�+-�O��^�ʓm���+�<f� ���Ҭ�Nj5)_V[n�>d�a� +7Jȑ�]i_�Y�g�n�N�F�s� �i$+���8�lDq�W��l�9�s8?�kF���*r� ��w�"��XF�����-d�;��x�MP���oV�A= �������(��6j�z;?y�?��7$�.�b��� ~[�"�r)`� a�.����F<X�x$��v�Y ��4U�qw8?s{HL^� x�Mgm[av���.[�i������e�{Օ,�w����'ea�+Ӛ�R�AY��f�i�k���$�4�����SmV�)>kmd����\#��R�3(�|����!L<�zD�tT�t\u���ŁN��<dE��km�I �k��r%����̠�ͨ�ۃ�ĝ!p�p}��})��.���/v1�4�/���J���i���IXnfF� �n�Jb_��S���G3�����$YLUS<AN�� ��B���O�-*2�g�kk_��"A�����{�, p-�n�;�0�@�~�~<��6�S�|�������'��ǽ�儾���������d� ��7A�m�<v;PN�}T�����&�{���vGx����g�,�?TeѯF��w �,��ֆ!6b��4�;�Y����L�Ly�+UQ��a�Ǎ.η[s� V�=(��Z�t�'�tk� �K?�J�'�ifx���T�żV��x�ٍ�U��t�oPa�_�_���]�L�$��kKs�kN��ޅ�Zi��yy3SG�ܓ�WzX1��T���4�^Q�v��n�Ƕ\̟�#'��X�R֥yR7��K�x��6����}B���t;����6�}�-7��6{3Ik�Y�^>lw��j�ӑ����1&tkLH���ܟ,�����7DĽ!n���XN�n����v$=Q��?gs�v�i��������YN�a4���E^�8�w��XFu���B����:��^V�Q�HZl���7#��xq��������T��&ħ�����1�{��}?=�0�ǭ�rb�Z8���Y)��ݟ��13�7��k�_eU�/%$�[��0��a�j� q�4ͺGr���w[V�j��Ԉr��cF�4���eɯw�����4�Q+��F��n5�����3����w�ϵ�L��a��=�Ѡ�Z�f/��j�� n로�X��o������|++|<;�q'��z77�i��^��r��LV��������<\l���QC@���>jg�����_��oK2��CY��vn����|��B%�f����M���C9,6�ݗ[I>�=|�J'=HR|�a��AZ��� �{���!b��)�/ߚ(m��!����c���E?V�%���c����� �'4����:Y����/���'겄�s�T��6v�FOe���.C|\l"�:���'����k�֣�a�{��n�t㽶G���LU���5$�n +1�D_]5��B}����$��~��^ʂ���Ԍu�w�w��>� I��2�ۘnws�>(�zf� �9CY�́<.�U�z7-x��^^��n��e��짭#z��3ֺI�3���2��b+�kc���O[�%���IՂ({Q§[˭,�A^ھ>���4ăϴ᜴ �/[P+ +�h���ai���~ӏ�.��H��mU��Ƙ�ʰ��*q�q2#O ���09�(��ߑd2��"������� +]hd�h�n?H�G���[MŴ�q�T��L9��b �g���5$B�� J�y�>����Gltr��=\�ΰ�1�I�视/��ܖ[h>�m�����$Y)of+Ȏk ���N�J�0YW�����_�T�}�{���&z�h^���{m%�o���=��w�}�k��4���5U)�������da�vF��^NԳa1���<S.�M�zS�.!'�)r +M�E��)v�)��-h��nr��8;mo��(�|1[� ]�+i�a���'���5�|�t2���"�(K���$Q�ם�$���Y}? `y��r�a��~��)a�7%�Z��#���`g@�Z�a�-��Z+죺$�\V��`���7���}��2������V�)�+����Ar����,�^��-�c�:3 h��f����+���v��\��|�kwX̒�Y� +�,t%)v���8�$��5�C�밾�9��V�X1iN�Q����M\hA~VV@mF��^)*bwG��C�^F���j_�[��8u� +� Ɍ}�\���֎��Pw���[�dP�I;�ܔ���q��^�߭^��#YqĻ�^D��o��_lgDm���@�v��u�N���a�߭�D˕v��������� +Y�gG�m�7�w�����*�mf{�~3�4���d�.1(�+VM52��]`Awd��&#�0)�����T�����]m֏%�'s���;0�K�(��b�z?5�@)l��P��������vr��PA�Zos�M���Ap�R�I�hL@�P���X�d⽪���x�}].�k���.�|�n�:i���`��D��ٴ���T]#'H[MuҔѿ�Tr�te<��ꇌx�� ؘ�T�����~�d�i����f�m��Թ����b����͡¢�t 蝽���;�B�zg�"��V;7f�*=b"�b3U�r�p]�Gl5� +2�'3�}z����L��JyF�j�0q� �u����ӷF�[��ry��l��4�jH�@W!��n,!骳�Jخ���Щ2q�T �c�J��cm�c�5�S�+�t̴�z������R��8�eP6�)���ii�{���![CB��m�.Jz�P�YmD�n���w��е��<��8]��o-��[s K�ܐ���'@�"Ꮂ�~q4�6��M��cG� +ҶG�)�Q1U�/@�7��*Ӭ�������%J-C�_��D�R�н����z3i���Ϻ*ا�N�8�_i��/ۓegnpS�� {�c|�Q�'�����7'�T@-��ᶳ���B��Y92�ј�l�T�K��+��h��͔Q\�k��y��j~�xN��r3����d�vF��ۃ���,�]|���Z�����lS�,���������-����Bt�m�z�*i�#�#��7�Ey �N��V�=���2�ޠ�MO�7-u�c��(�UI�p[Q�m��U�\�l�{�(���"��Z?�_��aT����� ��iq�����CiA�z�W�����6���0�ߠ�Q��n�:A�@�s-#�N9)��Đ?�����9}������9��ݿ 7�\�<��w��'w.P�>��'H|��H�;Q 9G!gy�7RE��WB�ЛO|�#�<k��T�ng�����=����~�#~��]a�;�F�p��������d��bLȃ�L��\'d����P�t���&a��ZܗE���c��Qw�`)rC�.�<=.&;|� ��$��B��r)����_A���C�^=�@�]�DGߝ�䅬td����s=y-�eԲ�</v4/ݭ�CxZK��j$��k���5�O�q����D�L�p����=ȳ[7 /�^�y^ka'=�a]�o0v�l�^��.2a�J��`~���F��X�x���%@<�㣟�f`��2p�B�miZ���p�Kx��~V�/�<��I�s�B����=�&n�r [�t�\/%p��9߁q��{�K��,c8��3z3X��|�e-9�If������)��.~�xymv����EV��Y%)�e�(�IW���� �F��Pϋ�ȅZ�ֈ��'�6F�qʪT�ጤ�y���섐�P����h~>�q^_.S�\�d�x]��f��B�������y�W����#b��h{�C�8݀sQVAf�0��r�����!� ~��BX���\�$��@��̈�� +���c��7�k@�����ŝ��o6�w��]��O���[��hMC��XY��Q�an˳������Ӄ�ȁ�v�������M�nf����Y��Oy>��^#�~���h{=3��|�_�T�@?։ +�Y�l�t ��n�.g�oga����.%�xA<l�A^�߂<�y���]��{� W��y��_7KH��݅2d�MIV��#qSʆ�[�N�f~�@�ػ%�nUL��.N����q����9��'�P�w�x{�ӫ�K��!��/ �oC�_��|r�����>�d%��"īAʃ�l�U�g�P�Xɠ?�%��bB�.ĺ�@B�?C�ZX@������}���'���� ���� ����2�u��#s��ߺ��'�J�g]'Pמ��t�lˈ؇?H8��8� vtإD�m?@��>B�� ��V�� wo܀���o���2�"J��}�c;ׇ�Z���4M)d%���ɋCb�D7�=����7=2����������| +y��bm~r��U��?.A^ܹy�����˅HO����K=8���T��.����A]E�ҙ�yY�@��GB��.�y8Cb�C��_Cl��@^߾��s���M���� W.]���?q�����į{1�8������b���>z�T#�s������������{1��bs�.�����O!��^��߂<�qby�>���5ȥ��A���`�D�ܖ�?ϴd���s7���2��܈�b��F�Q:�&%�����;K��}3ȧǏ �ϟC���}�2�)��gw�A�_����.���{?�b� ��L�۞�M8�e4���n^��]+��� �_� Q��8�x�-���oA�_x~� � W��o�nC���� �;��;���9��/E5�}���#��/�X�;bl�Uf"�212��/�7G���ݸ�b���]��O!��_.��cn�����N�J��tC"��:��ԡ�����t�<��耋� �(��Ύ��OB>����[��W����br��������o��ە��G�����FF����m(��~���y�;ߩ��|�G���'$��lkq���8�| y~�b��`��{f�G�oC���Oȣ�7!ߞ���܃�� ��H n�zV���"�ό��c;�p����� ����P���.{ھ��4���yfk~������G�7nC���zdf����� +�ܟ�y�<�KZ�@�MxgUe��J?#R�%L����>�I��A~�����|�x �y�z���O�߿�yi�r篛�7�A|�.��~�� ��� y��������3Md7U���Ox^�%=�B�n@==.�~� �������X=z���eȃ�WA<�C>ZXBn��7��O��b\?�h��lr�v�bގR,ؖ )�r��8P�x�_D���M�sw���$��Բ9���;\u����ε� ����>xyz����3H�����P_��B�שQ�RWi��P~����;Y������3S`B</�Y��X?4��?��<���5P7!/A-��������������'�$��y���j1�W� ~G���m��6����˦/��Oug�[����+�@���m�.�Yۂ��Al�<�\��;������>��y�b�2��̘ț���*�����G�͂��|�M{.=?ӣ�.�� 2V��s1�g�0��)^����[�x�F^�_~j���9����ЗM���oc"?we� gj �8�( +���:5����|4��w�ȒOy��z��}�t��� +��)�Eꚨ�S�۹f���p6wa0���̧*۾3ƚ +�Y�Л������^B,�%5a� +���}�� ���[ ��C��~� �s���>,Ǒ�NJ3#U�l߅.a�r_q�'�hA��aw�aW�DD��L� +!�]�c�J!�q����9��G7�Y�@\������b�G�EXp�!2�y��^UAw��f-�a�Bܞ$3� �)Џ�f.��$-�ME�3��'���W]���xg���y���ֵ�������Hs�dY+�~�s�5�����¹N�t-���Wz�Q3�Y���"�peF`[Ӯ��JJI3K� ���s���+�� w�@n��7��H�[�o�0�y%#=@ے�[�V�Y���ឺ�Ӡ�-�U�� ��F��P=ϿF�xQJ�>O����cbo�?�����k[��`���&M� ��q33�l��,���e��,Yf1�)mO{�}Ȼu>�!���ל�֜�/@�_�y����n�����gd�L�[Ϋw�|�����}Dnk��уOޙc���N�[Ԏu�M��r� ��a����މ��r;Q���Ee�x�a���CJr>/z������?x����gW~����EiV�?�5M_q �k�cE/���]v�<zu���Y�@Vz�S��ߕv�EÔםX�w����{����A围��r�����?�_��Aޫ��U|ԁl�y�IL1�� vR��>�k� f����ڍ6O��4���K��ql��֑!����`�����$y��S�E�F�R���e^CG�SɄ���C�E�JX�m)lY�@n���գ�T�3gku���4��Yg��� ֙���RfT�G���۩)��-����{:��e���{_�EJ�c����L�*,�=M�����G:5�_���]��$��ɷ;Au_B��7��E�}���#(�� �:9!%�1�-�T�ӷ�(��1ܻ�F��*l����F;���Ւ��ҵ��Qww�:��b���Y>�]"��ɟb3N�����]I�%e�\z�m�\�=~�Z��f�Y k�x������Z`���_.���[*_,��!.��{^��G3&��AZ�e��ig�S���*rs���������Q��:l�=<`DKjtl�v��i���_�#Ĕ�>j���SZK�� A_���b���0�b��c �Г�+�\�rJ���aK�Jd�{>h����Mx54�MF��Z�g�������o�� �+ڹ�f�!E3G+X�$��:x���%���g��إ֍vD@˥�����nb�*"�`����y{�Ĭr�`N��5Z�a�ro���pWGُs��ϗ����e�ť����:�/S1-��Z�';$}|���ݟ������,�=������ACPOn�ȈU>5��'a�m +��$S���ü̍��\���t��U�<�P���6WH��E\�i�l��=���$�� �L@�ڗ�I���B�qX�3�Su�;d�7� l��,qwӣ���_�ELDP�"�װN!2ݾ�x��*!��th� �t��9�w�aaT?�v���n +� +�.!�n/@�W��k�2@+4��۹!e'(�b����"ZB�]��w˨MAe�g���r�����;D���O��]���YB������8v�;���]��%n��)�+d�F<�G�!��}��z� +,���<j�S�l�-1kC�vJH�gx�lT@���ts=�n�]�h�]�������"�*6�%a�����q~�W2����i�p VK�2B�OK?������N�<�O�Ƹ�BP�9�5�L��z���C�{���=i7ms��f^���;�6)�.b� ��\Ɖ�C�o��Cf{��WA�����&���x=tl�ё��pb�� +J�CH�wB�33o�q!U;��E�F{�EJ�0�(u;"8���]����&bj�Y�uQs�KN�4=jt��[%�ͯ�W�%�ɶ�)�-��ޞA�1�\ߞ'��i; +̮�Pl*>m�Srͼ����5 +�rhVXԒ���>X�$�D�� �m�&#���mK��g��YG��]�0ߞ��x�� �l���)�.�b�[���/���%P�'�KI{�E�\v�˟���&6�k�bl[��䑑ˋ��$�g�VڒuC�nN���o�����90��� �쀎� A%��/A��A������#ꁙ�tl6 ��&�Jj�_�/t�`37��Ř�x�S�@�m�.˵�� +(����'F�U����X�.f���+�8��0�JB�]�ɱ��n �B6P~{��q�t�c4���T���Xjz�\i}���3 �K�EV�c��4�� �����A�� ���]ߟ��k��$��%�Nx��Q�����ؤxO��]�ZmH�M�P�뢺���KҌC^z�tXH�� +�:�#�vjPFi>X�eڄm)1#���9q�q�� ��\�R�Cj���(��A��"�,��iI�Õ�{�D �Ԙڀ�-��@B�n�ځ�h�+�c�(�ջ��w�zu=�ug�]JjtI�^9�%�eac&�C�d��mDK�F��S3�:���z�����X�d�|2Jk(�l��������B���r�������[Hk��:Ƃ����T�p�#;ݫg;�����;�'�n�T� 0 Q��/f�F�ck�[�0��*8 Õ,��=���ѐ!{K�:�4ɳ�+�計��Ŋ� &������ �/����h mvMl�j���-�����L�İ����W5��%�4��+Tw�c��T |X��:����en�%�=��Z��q% *o_��ۜ�dx�֘��u��-th����K�uD�{3��`��rB�_�̶�4<1 �_�R����o�5l� +�z&�*6�%�y�[|�g����N!8��}ްOʀX�i�c��#U����E����������SMw��o �Mw��B�":�-D�̵>��5=���Nxo 4����l�:#����8�V�J�r\YPI�;X�g��4�}oF�]�> �_'�٧[V�'J�'��僘�Qt���)p���� +ə0�����j�K�.��HmA�d�tQ����9]B6�-� �rL�WK����Nak�c�.�-�� I��S�7.�3���봻��g_�ZiKܝ��i_���SbJ4� ,c����{(�C +.�+��{�j�:��O�ʋ�������r�$�es����gV&�Ȁ�91`��D��d�}��?���*�:���p= +�%c ���=1�iq�H�9����^�(�ƔG���}������?��D�_۹��:����^0G:|mLKl���s +q%GF齅�s��ҝRDQl�O�)�_Il���<rn4��p G�x��s�)u� endstream endobj 29 0 obj <</Length 65536>>stream +������ߧ�Á߂���8Ұ ��*DaT�(k�����Bz�=_|]�S�Cr\rT�[�*�*Q�Q=�9����ݴS�!��I:1AGT��xя��*xiW�4Ė���;\���$�^7$t�/r���ޙ��ڜF&��R��o�\U����Ԅ����3��_�nuLD�y}�V�q���S31�Ydr@N���D��b2c.=����:.j䏞�t���qz�RS@Ej�Y��c�M�����?v�Ŀv�ؿv(������.��)���o�OAR|��u��9����3_uco�䒹����H�=�22m�W~�S�����X�N<S�0'4������s����r[o�j2��6�#l C\bT�S������<$EU����f�4�·L� �E�%T�}��[���2���w��~r����I������ɾ�/�]B���bR=�����9��A]bRe<����s�����X�W�;ֱyk�T� �e� �g3��A�������DCl<Q#r#��D���m�ڶItK�u�QT�W�#����!5 ��:��%F�g�ݰ�vf�5���ሡ�'��W�����Ӽb����-!`�����<P�72A�ۘ�w6��������"��8�!� �yĢ�yD�k�T}��?�^T#��L�_�.:�m{�P�+��9l�W{c�o��ݵ��M��4����ו�́7�F�TTpK0x(��+���lF��������>g(�CV�-�<1O�>�-c3�Q)%v�tD�\JD�D��� !o��E���_��*��A���~���+�M�f&�m6���b�����!���mvO�7p����kۣ5�Dd�O3���5�V�\�kcg��"j�7{�-��F" �:�ے�,���T��G�܈����'���(�=�sj!B�zګ$�Cm�S+�yffR#j|�8.��a\~f��Y��M��^���܀Vpl�4���>�2)���M����CT2�a�5�&7{��=26F3��dk�z�p�ZSX�/���Fn��X���wg!�G������~��ֻA�=��$������ޜ�px���F.g_����d��3��m�s�x���1����|Ó5ڛ/������K�X�w�e�k�i����Q���_������k��w�P��T����44��WHi�H���� +Hu�up��T�M�ZsbDK���D�]����藡��JXfL ���R��k��N6>�ؠ�o�-���w�ĖGd��]P`��"T�m�����yo���X'_�d�Z� +��}�� ��6�XEj�i�q}�<6p�g�W��=q���~l�����0���S�� B�е1#�P�=bLY@Fj�m˼k���3� +(�&4��s#������Bl�������ehQx�m��P�[�b*��2a9S�`n1��!B�xd��c��x��-����E���AU[�KԒ`[ny�\k{�Z�&y�����̳���I�a��d�j� +<�6��6�a,+�l���-���3k���& ��@�2T�S�/��o@��mk���\�}�T���n�yd訸�?����\�fz7�����^)�����9٦�"L]@��sI�_9��/N6���m���4��4�?"dj� +���*>��G�xPP�؛m�o���2��ldR��T�O��Xi�3+ ������X�=���2�+� 1K�������=��brR�_Nnp�a��k�x��k�η�+�����#�wӍ��5w���o��ό���qEڡ�G֡���b�CH�י�(�o�i�v!�\�Qx}o +Zp��U�4���Y����ŷ7�����2*��s���S� ����Y���^���_pX��5�;��t�Uu'����1�_�Y���v��t��^mM�lʾ�YoI�Y��Q +~ J� ��'������9�Jo�e\P^�;Ry3,"7�6�m[����:�S5u��R}bB�} �l��%���y0z �+y��<6�|���w��uw�+�.6>��V��;]x�H�m +�0�<;Ľ_B���B3#���#+ �˯��tcMw���Q=s���Xi�C$�WQ�%ȫ���Wr^�5Cw����R�4KX��1�@����_Yꮚ; +�,��8�ZRm� Ϗ���v�����D�k�Bk��d�m�D�M�4�W�s��$���R�ۻ�7i�x�_�$�-���D�72��{��w��[����w=�5(C��������$������2t�zU�>0~7��*����92uO����W�����v���5�^P�����w ��?��ȽҖ�I��l�3�:� f$c�FTMD/��5��5��-�X@�*��k�H���ȯ��} +ZkDϢ�X�{=rdn@��l r�2\e����,�SC**�dkH}��1٤b=rD�} �v0{�?M�Ɉ5����B^@5�P�t,xHF��j��_���w&��yY��N4?�6=pN��mOlc@>��v�6=��0ES]%w �w�=�ȹrb���9������p ��7z~���4��0=��Ҙ��<��y�ߢK�|�p�;�+��ꛎEF��89Cά��<�,&�1K؟h�g诺,m/>�B��|��_;c�z��5N����c���b�3D����懖���1 �i�3[qC�M�L�����_yӻ +�:��XA��� �����fa��+�\�.Ƕ��ڟ��<��=s��� #���O�����Φ��U6X̫�QHH�H���ʿ +z�Yn~�^jL<Ւ���[��[��ؕ)'z6�#lL8���R7'�n�R/Y�+q�����ܝ)`�j6-����jw���2%����GS��~�m�{�iWGѩw�j�`���]�qJ��q +��^:���/]Wʏ@Cm+Ԛ�iL�{_�Ӑ� laH�xo ���TDTˡ�9̳M��dPL�o8��� +\i�Yޅ�g;=�m���cRD�W��L!S��T�::˵�ʱͣ�LA_h;�oXG�_�$4p��&��ȦFTtȱ�K�)Р��vl�u�������Q��y�4��2 ���N������BR�"�[�B�#� ��i0�9���U�2���M@��u�A�Gly���^18�`��B�(�8�����ii0@'�Rd�k��=z�2G�amhS����G���!��:*¹��tC�[KsK��-���qP���6�}9��]�d9��o=U��{]����n�K�[��\��:�.Y��o�皟�x��6�9_��~8�Q�G��n�W��5�BH�{�ω33�m��gi{�n���UǛ,�� +6s +�tw�鮹����Dポyd�<��rޝ���L��<�e��'mg�ECO�U���������H�����Σӷ&�@rY��x6pU�ն�X��y��7�~�0M!-���ˣ2 +�D�"��ȥZ��e ��<.�C�X�í��dž���EzmT���]��m�B�,��?��?��W��_B|�y�6]<�z�I�l{��=�<���������k���i���"����0��HGj��;�;U��_ +δ�4%:���2*$xbyW� ��ZT�b��vN���9X��4�1�H?U��!)�L��Qάx�_�"-����oWP�_��T��,}�w'�y�ˤ��?� ���m������3e7��/M9�8���n�Ia-�9E/|�y����xcQ�ٽ��h���{%1�S1�����+'R|�q�U����y ���� i(�Ɇ{^�׃M�>3��G�$x�п��H��ѥ�m����oFR�o�ڳ����D���r��fߠ��Ⱌڴ7��H�˿��g}���9��lPS��W���q��-�կ��4� ��'F���|�z�3�s�P魈� j�h��Rw����+i���\�Ä�=�DL�( +H�e~5t��1�pz�jB-��[܀�v��A ���L���t�KJ����{�tؑ�ǎ�ËʙP�*�ʹ�ʹ�6�R�Hu�D��=���3��x-1;���1|k��Gz6�.f���2�k��*��H��"!�[Ʉ�Md��r��2"-��#�W�E��x�s�'�"�r6�'D�����9� \�G�k��%f�/2N� ��������7�pϻN�v�\�ss���4>:յw8�`�LCU7,���# ���z��Sb��k�l�"��7S���PHEi6����5R~�:X���ny� %�El�������mHBk�/�� �%ܺ�{S?�T��x +�y�9K�_����+|��BP�t�$7� +/�������k�G�f*��װ��'p�a������:&�������"���9��e����*�-����I��!%������IP��h�]cW���1X�����Յ� �k�2�ʵ̅V�ف%d��<O�^u���ſe���a1���ܴ��]%7���LD������im��ڗK��q���=+�t�<�Wi�Y@�L4�5��o��s�g����*��[���Wv0��}��w QQ� +�<�1�&@�,�Ӷ��ſo���ix�|Ճ���5�l�� Z@�!9�ȥ)�S����>�?���ַ�R��.�w� ��f��O-t:�䗿Iy9/�6)�� +U�7��$�E�zD�L}_9�o�Ϳ��-��}�ww�pyS�jt{P��6�ZoI<)��3\t�2T�s@�V����A/�ZlCt�k�l������c*ܯ"�G�����eJ���&.�X��kظ����ZA��O��pM7?�ɩ-�E�[�<�����Q9��x�[i|�VF��['��֩�A�Sb�B:X^@Ӝ?b���� +Rpb���H��ޖ�j��4C�ǀ6=pֵN�v_P0s��p�n覰�������~��`���;��W��?�����}�NJ��p�)�����͵=�-���:�+fC�R|YX��ֹZ�T�[�}����1pj��@�M��p� �BL�O�T1*ױ�{��:a�������ɖ�\���P©�$�#��S�knO�3�["�|�3Ֆ�5��B�+�^�(�y �s�������h𘖎2�4?W��{ofs�[9�.�Wlsu�m�OK�_%�YX����t�q%A%tl�ux�ao�GkoHh��j�9_o��`�:Zr.�^���u�%�u�WB�w.7<R r�i|�9���?%�,@��*BR6A�Ӓ�;��$,����?����&1��W�e�ܰ�P�W��edv@Ln:�d���Wz�5X}u�)�Clڵ������ ��� �s���ʢJrñ�� �0�~5��.4�FKⱁIo��ɭ�S�}��c|W�?�� B��48��N��i]"�^`솾����X� �j���Z�;�2(}o�橔��yP�Z�.|0S{�`�-�|��PLK�a�oߜ^��ܢ���-��|�m�2���5 ���\}��:$�����L}o�Ԇ���mfgl�[xl��O6-j�@�WT�ʏ�n�q5���6)�J9z�\#4i�L�2*}g���T�/ι�־�\�������<�m��y`� ��r����������^��S`!��: +*�����[;��<���'Xg[_F�$��f�ı�/8�&,#TxV��lӰ�� t�q�R�+�b���=\��R�>_B�����l���͑*=˄���X���O�x��r(> �ƽVqgk4�;m��/�i �$�Ҙ� �;�x{���1��Q��" +�H�.v�4>8�k��]��v,cޭ��/m�*>X�4�9Puo��Yd���/��[��wJޭ���r~��k|�mk��_�Obr"ZCT�+���$�� +ol0�\\$'}V�����>�_�!���6?�(1��h�Ɉ{g�U�hpXM�V�����'{��7�ut�O�+9X�d��n�!���,��czb��?�����W�����w?N��^� �X�4���ǻ��/��c����:��9ɱZ��/4����4w�� �&<���+#*ձ +O���]7�^]��k/��Hk�y�,(�:���^��} �QQ {3M�ͣu�M#UW,�e?�č��o�Y�eR*� +j��&���m^OTCl6����d���쫾�^Cg{Č&�0�IH�!sB���=Pw�� ��E����_�W!Y�{�t�!���{�9fѥ�]#�ҙUu��9�+�.���ν�j��V�r>�)$U��#':��@Gǔ�������L�]�j��߶�}^���)b!����#�V�*�7w.�%� R���}�Qs�k�|����S��t��X�M5=8��z8R��^�����v�@.���0�**Ӿ�ʰ���Bh�W�� �i���w"jX�{gO�=��fn�{�<r#�8����T�J]rJ�O��8\F��I��t���t]�+>�=\�̱�2��>�¿:�4�O��u�K��C@�ε%X��Fu�:?����j�����~b_���d�l��a��)�g:�P��^�A5P0�!��j:<ޫ��Dls +�����k;��D���`��&�Z��i�v�=)���5B��rA�ME_՝1l��bV�S�2��2����U��k����p�So�e�|��c� ��T�/�SW0YGz.=�g`N6��#���K��3OT��J��=rb�w����,iF6��ߝk~�3[qUߗs~���)p��*m����PÃ#-�Q�A% �A"�%��[��)�+.�a���d��[��XǤ�7vO�G�� +2}o���W_�����BBy��%�5*b���h �<:G�˹8�ϸ�1P���| ��k��!"ffRO�L� �a];�p�T�Wp��uz]TMj�J`ٻS m��Wӭ�㵻3mik����s���yL� +����Qz�1~�@d�(�a1�7ې�5V��:R�ӱ����9��YP��L������%�틍��[�m@>�G��,�������V�ұ��+����! ����*n楃ٚ�?v9��)p��J�k�'�w��|r��44�wg�Ya�d�"�z�:R�}��XD�9W ���:K}����~��R���+��?~r�� H���a���NM��S3�P1-����1c��� �>��.�����9ܘ��iy=�ҥ�Whfo&�� +�!OB)>�W��o=��.!�~e��յJ(��r �?Oߝ�_�&�lLX�ƅ5���S��`�d�`@\�N��1ۺ��vl�ʂ + /���߶��-lΉ�/��H�h����{��(���]�ZoLt�7�x�� +���r�D*���L"�m˼0����ᶷ_�6&}���8g���_!��w�=�Gf|�;���ڱ���t�2�y@ +z���k�! �S�G[��=�5��׆4��U�SӰ6�6:Ƕ�?��7��˼��z|<���::�9Kڞ�'����/�؛��,`ҭ�]k���YX�y����R����#N;��F�Su�|�����x�H ���-�Mu�A2]B�y +��鵰�Ŋ9l�Sl)�E���FD-�r��s�@���Zd�������n~ +����k�t@^�YȃUR�C�h�@7wg0a���5ԣj:�>M��5UR�>�>��0���s���o>0�T%�a%����佩�;��ҟY����-���c���_��^�_g�R�-�������G����n�_,Nڙ*�3�����f�lBH���4,�I��B���GD�Xp��Ћ�Y\�����{0�i�t�����T���u\ ���a��/��8[_:�`����@�Uw���5Ww[�-��;Xy�9���p���˿<�~���S{f&���r����rly�!�3Bj&���=qb�N��Q��L�� ���Jj�n�v�R{�<MZgU�:��BJ�x�`�=�tZv��YP�.0��4���v���3�W}����<�W_g y�ZG�,!R�"\��6W��k[#7�u����^{ōI� p0^���E��x��i��c#Opl���}�#j@�/����3�7���땯��-����"s/�M"r7���n ��Z�e� ��\��0Jȹb��Y�ѳ;O:X',���̳m<�Cvϩ�c2f�u��=a���{j�Y��"&Ao���X���UV��S��sG +>-��.ǗE$��"is��'�@���-��딆ev�iGխ�кj��j� +[�W���2\���D�U�$l�MƬ���P�� +=2R��� �;�+���ױ�[����xKR�[�.ܙ���j�팷$,��9W[S��%v�/3��������:��%%�t,�K΄�6(5n9����^���3�^{%�*�2�`�������$˾�lv��+/lOֿ�l4�6�d|�ȸ�5S���L��W��m���e�o�"sd�w]"���=}b&���mE^I��E��/�||0W����n�[�䘦0in�zf�i��k���͊���[���� +����q��[�+'֞�c#�۵�ζ��_=2�N��]����`l��5�|�@��� jv�� z��!���9�>b����`˓m��B� +>�+��4�����tl��̝S�M�`H�D��Xt�:�0��c��A933I^5(b5;Vy�����uf��uo>\D�^,s[��D�@�]w�7��������������#5�]��{����I^��s�%Iޙ������}�����Br)� ������K�Y1-�3��?�Ķ���z:�#&W��s@�%�՝�^)g�&N���#��]E�]�{����u�@(�i}�3y>��<�F��ѷ��rop����1\�7���W ��SR[cz|cԀ� �@\��|j�OK�EL�Mn�����}+c�P���w̿et�8\�0���:�.�%����-�+�S�WZ^�72F�W�ޒ��S-����oֹ�����sm� +�c�w̓�w��-T�F�g0"���ӃnI��$�d�[�� �G��[��������10�^�G��1M�H@Fiv�й��-����+[Ӱ$���pdfw�$�j�,<+���V��_�D�uL�KF�w�3�{��~��S`�PkJ'����;�rd{�\���,ߞ���V�EƑ���{w5'|���~��.lKٞi|j,�پ�-�r�EZ�/�'���[�"���w���9֙�'^ �4ll�Xfe�I�����c�WQ�� 1�PGf^OD��}�k�D�,dH�FF� �:r&�-��=bb#p^ �Ulf`�X�� ��W�i���˺Ί+��>P��謯d���+����Y߬r�5���t�`��}��,�����GrJh���E���gA�SN���=I:\AeI; +/6p�a}�`|�K��3t�_iy�1K�'U<����뇦��$�S�#�}bT�c�%yk���Z��; ��;�5���Ҏ����+ۣ���ύ�5/�Êo=1���j�����������5������/�>K��1 0ӱ��5���b_$W;יHuo�3~��j^���_��SG����wK��1���&�)��`����֝���k�������)�Ky����£���j���/��b:�t��;2�a Pa} +L�_In;��^o�{�:.mg���P��/i}�#�ðw��+�.p�m�Ye�o{��L�z����B��Kv�y�L��U>gU<��9GEU]�5x>��W����g$4Y��� J��}�חN������(��~�{�uK�$�[h#�����(��7[�I��i��\��K��Ӛ-Ө��E\e���b��,�(�jg5\FPGG�7y�~-�m*&ܣdB}����56qo�X�W�)61�V��r�~���u�� 7�mu���d +���s\3P�1=�7iԨ�L�P Υ8�� +b&�@X/s�)��}L���pHI�6) �4G�(��{`_H��["VD̓��iD�i�[�(�j�+�w7h5��4��g+�]� hePʀ����Y�[ۃU������ܒ�X�?������W?8����W���֑�[�S�wm�շ}��l� �Wq5#���~1�ѯ^v�G睲�Π��:6�".�2�J۞%���*�����UĻ�a���� +��2p�n���?#��\�ٜ�YFfm���d�,�����~���ܫ���?n�7$�&Z�t��}e飕���!)�:�������ņ�����%��X��y%����X����p�e����# l�(��;Yywo���9�@)��7�K�n}h�)�Q�K�n���eO��/xE7�&��(dU�dU���:T�`s�)u{ +��Bt�{�\�" +\"p��j�3��"B +~gPFE���z��"ao��}��u@ �F��[X&���[#g\s��-�K��߃2R�c��=n�!��\�^G���ٖ�)L��s䜟7�x^�V�����v��E�DB��hr#~d����$x�l�S!�*�u��}�t�c�%��l�_ʦ�֑5�Ep�s�%ǻ�,_d_�e�ޙ���-a�,�$�$���2�.$�N!����\�zwӣeN�3���+�t��68Y떓��@��-\�_��k�Q������J�^����S��e}�'�c����a�b��}���_�,O�m�(Q�n�@���s�t�ԧ�T4xT�嘧�yBZ���Qh�W��G,�������$%��J:Ĵ@�>X�7z�x��:�8���92����{W�5dP�BE��u�d��(�*���A��^�V��ۧ�/v�on�����i�9N���1��?���w�K�4i{�E 3�k�HÍ���_}��WG*:$��T��̶��m�k*�� >��8j�9�p�c&&9�;��(%S�MYU����o�Kɵ�t�}��aB<�wC�( 匦�9b���P�YrѶؚ�=��p{��c�h�$�2$ek�遤���f�D�E��ʹ�:��ZR2ȳJj>�R��z�#�g9�@�# +lEP�*��@����8����W�O7�p.Cr�Wй=����Բ�;�d�P�mu{����o����_��9X�O�=M&q�K^�`g�!),�{�;�4ek��p��W�z�#�J�#��R�5Ֆ'��p���@@�p�#tj!AN,D�O�v��R�L,vT��~l���KDC�F�� +�r�+�P�u);����eS2MͿ!�,�վ�,�'�:O(� +����� <~��4"i�zl��M$챉��q a��g�a\�u�4��S`����Nc���v�of�6��b���������d˓��PV��E���At�w�\�� +-� ������4�j_oMtI��9��p��k�:����k��� �2��T�}�T�{����E ���雃����/FZ��m~r�_���>P�g}����E,ܧ"���2�����谎�����k�R|�y�B�Ws�0��r�v%mWb�|F6ӡ�����f�����%m�۞/��W�i<����C�`�DAo��~�����K�y}�s=�he�5f��<>���rk�P��pk�G#m��ZA�}�Y����a��(9�;�!�!&ۿ���� �òW���q\����{�J�X�~�x=�I��tl�O�%9$¢���]�ua��Q���~��>1���RP˾6��ϻfow��9��7_���^ +�i��^ �u���5��!�+�X�m�",y�]��$�Ƨ�����w�G4~�� +Se�hx(��?�?[� ��� �S��vVe�f�?<{LI� +˱�� t�m�js��Wi��������;�2�m8/�'�aT��>]ƭ���1�SA�ÿ���ڮ�ۺ�ҟ�BXzP��J�EG*Bu��0���������۾��5��a���:��(�ޥG�0 �Q����~ SN$��R_�a(���(������bk$����o��_�쳈����"�,}�����b�Q���2j�_o/���s�~p +[2�o9h���!l`�~�m�%��GӴ����_�w�׳鱠���$�Ls�Vh��O�w^��%�{k�b�s_x�s!��rTG����[<��8�⊜"\�K��lP� +66�fN7�߷Y�3v���Lկ���5m/gH%�&��>�J�gO���뒾�lH�H���yD���솘Y|αF��x,ݻ�(�e �����5S��M&ծ��d�5w-�mo�w{%�-��W�¹5<��Ĉ�<m=�$"�BH� 8�ۈ���?�`5�s�'�g8������ߍ�QU�y�A9���zV���%Z��&Y�.���J�PN���=S��p����pW�^y�'nM0�T����i.�z0��ԿB�~x��-#d�a}z:2b�~��h���> �)(��Ǥ,HL���aRv������JcW��L��*n�/J~�5)�伂_���6�'�a�JZ�m�ξ�H��cp��kH�vf�����ۤ��ot�59G��%��X�3 N8\������WU��=B|������4��H�= +��XKn ����7�>�ޞ�����O��߭���g�uV]Y@��p���?F�I-�������OU#mIϯ����Q �+�j���9�ˏu����2�ݝ�{���mg����;��=���������9�`g��ʐ�nj�K.N������e"�D��Ii-�ul��tk�:�x������l�:����p�=���Ie� t�_�.���,ag}�?ٜr�aS/���r� +LY@Ejyo�UthT�$�PA2A��Q����7~�ON�7��7�N����?���Z��W_��y�_3��gg@\z$�����h}T`�sK�y���r�H1M� $g� iA�ƽMִ�]�?�L�U}��w��ŵ�F��Y�L���)'�}"��^���@K��M�/�8��6xU���AsʍO���"�`��Zmbt�e���u��u�����z���i>1s��5�tϟ����xc�[$�1�Q����E�+Uo��ix�k �f���O7%N�&�V>+X��i��M��hEW��Q�������_,��}����cc{��d�}�D�}^���^�Ge�W!�j~�U}g� �b�]���~̀�>�d�O,������C��W�j�䈂�� �z�(冞�[������{�-i�6������'S�̯���+�H�[n[�����<R:ȯl�D4�F�����=��:3��͡���%dFD��y}��[#�vFX���ב����g�Ţ��Q@��B�O5,|T�&:VI�a%�V���er�= �d��[�^��I�˃%z�RP���Y|i�Ztks��6�C7����F[��#�����o��s��Wɭ摆;j~�uC7����g��HC�F�{�LhG[�'"~Փ }�EA��%�FhΑ���Uo�rY�'��{a=���st�}mf�ڧ���L�۩M�]hiK����-��@�w�� �Z����'�����Ν��Z�{%{_k�ϟh�=-��l'e�F){p�y���8_ê}J�M�05��p��k6���u���v�9jx�i�w��I L͋�fZ����2�����h�}/�lUמ���Ҳ.m�t��\�|Ytoۅ��ek:pʒ���U<ӡ2��2��_o9Hp����@~�Ѩ��et������%m���ٓ���S�c��¢��fE�%K +dᆕ�6���x��oG�#�ଠ��q7���������\�KLEH�����Tۻ�G��_�tt���ꞮX�swG�e��b�>�1�g`��H G 1~���͈�_f�}�i��i"�CY�e�x��Wm{Pm���5�y3��|Ԓ�� Dž5��XP���Y�NեaH�IF���|�Rً�JP�� p߂,��O��-igi�)2�7F��ﴨ�3��ηs�Ƈ^V�^ٽ%yœ}7��S���<)��bd`͍�^s���LԞ�Mذ�*Wu��e <e:�WaQ�}QG�������/|���B�i��R������|�DH�s������ܲf&�/i@��1�����Gkښ��C%��u��;>hޞ�����"�[Х�fH�g/�����r�J7���ϣ��M�l&�ic�ٹ��Q���ҩ��GNz�o&\Ω;]�0�Sb��k&W���x���TO�h`��rj��4�<5�o�都]T2�f��Z9:��d&oU�lYQAS7M��u�|1�&���JgL����>"`?H�@1M��aUw0�n�<���o�ka�_g��u�rAՙ�AR#ð�+�t�Sywˎ��F�ݒ�蔻X�b��Yة�.9Y�O����>�P��8�7����KE�}�:�C V?]���[�NJ*/{٧���kfL���������^&Ϗi��\�#�~e���NP}�茨���ݰl#�%�<AoJ��яE�{�������geeW6��_'قu j�����Ko~ ��v���<wY~l�3;��0���aK_��ypbLR�~;�O�5���������[�]Y?SK�~g"��]3��o8 9K��W{>JLo�e_�{]�1S~�$cu2���_&�����4�v,��[��q���at�&aF��&p��ap�*Xu� ���p����������~F�Hs2������0�K��2OB3�|g�Tޞ��x{~���A������/ũ`o�*�^{����n~��G�|��-���=�r��@��U��7J��ʯ�i%�&f�FnYTAS�y�Gh�gt�쟌��ߧŰ�RP��� ��j�]y9"�z�0ؒ����^�v�p��ED�O� ��m&��a�le�i~��O����#�]�kʎ�I��-cl��� +@⮭����3i�ڕ�a���yȝ{#TȒ[�b U-��A�5 4�����z��(9;ί��g�b�S�-σ���ՠ�Sz�����ظ�w����� +�.��=/�U܊*���X���Վ]��"����)98a����"[��,S�秀�ؼ~ŕ����Ŵ��ذ��j���;��5{��h��+~���ɯ����c��{�`���I\�3�Q=,�`���<����e#��ũ����� ��>��Ҙ_�{��m/�q�JhX6t��#�z�Bm2s��}|x�ވp(�%ia9?��?�G� k��8��x���K[S_� e>���¾MQ��H־��y�$A6=Tز��dc7<�f�w���iߵ��-耯���+��g�|�6> �O<+x��P�ᄖ�)ɧ\��3~퍠�%~R���V~�H.��):�l��}�b�7}��5[[�����Vm��M�����22R��Ŀ�۟d +��q�&)�=�+u�ϧ5w�í�SzZ��t1������-����Mm��9=��6_q�*�tP��p������`o\�����Y? ��3bj���oNJZ�-+/�M���p���ʌ�3}ӎ-]1ó͈�y�v��D쏳Y�:$j�iO�d��al�p��fBŴ�#^�������!�,��?��M���zz&"nK��������!A��Qn�%��IV����?���K��'�}��?{� 3�������~f�oҶ�� 4=��O���,����ϸ�����X��óF� +��_G�=�lIQ�|JZ}�ɫ��,}�{_k�ovl�,�O��l��vÌ)�#VN���%�@�{~l�W{�J+�K*yt�v�~ݫ_���?��Z����+���e]��O#X���������n��R�b�x;+&�����8lֲl�L��Ц����B�.iZ��͉��Τ-7�l�MO ��4���!�;o7$IOi~6ʯ��U=Y7��x����8}�b�T�@(�t�:6]��� �-B�~Qp�nDі[�{�]�dBW.��Q%"%�&�p-�F8�m�b�4.D�5�sf��=1�~a�^T!2����I+JͶ�Լ[�[~|{����1kNT�V8+�oy��;�Tć��āBd�^�I�����.B��QyM ���N.;=#m��m�|P1�h��p{[�hBdmy%�PND��fي,�����Vt����4�v�g���u����')�%�c�Ai[0��V,��/��ƭ���b2�M�u�&y��Bʧqn'ȢFu����~�&ҡO��Iqյ��^���{���Ԫ3c��GsZT��4a�������rZ*j� �ͫP�aq��q~�����~J�5���4�����a6{w�E��Bל��1z/�a��;c,Ҫ�X�j&�D刌 Q���[|Z����T���\|�J��"i}}L I<�o�?�L��ɬ�ꃥ����վ�}J��zB�p?�G���~��s��1����ב>d�K�|�,I��X��Ԗ�2'����j~<�Wys����`��c����rj�唇����^�:�z6�m�nEW�����'�<^��b\ޭ�quO/e5�;����Q`���S��8������ +�.�0I�����)��\7t���al�� ��Ձ����&\ŮU�8\s�JL�}B\�dՄ��!��O):Jfd���Ƅy)��N�&T�)vz�yQ��2B��Q2W��d%�����`��c��;.`vDZcІ�/�"��l������N�@�����&(�3� �0��5��]'�������Xqyע���%%0aA�L_5�*z���ٱj�a�5Ԧ� +W��A�Ǵl��0�����fa���¾��s&r��O!F�����q�8�3�o]2w$m���AsVy���C�W�Ȣ��G�ݙW��-�W-� [c��U+�|V y{0N�~��ֽY>-&��i�#X�y{#���Y�a:��j6ݸ����kՉj?��>���A*j?HB,�1U�A�C���6���k�J�<�m�qa+V ���X<M @���+�nT�S�I���s +|Q���Ŝ��Ⴚ�QD��4��x{���nDάIٕS���e=�z�p��`��%E��53�p�ΜT7>J[��3i���XuQ��x�O��z?MT��-l����,]�.Bü]��Cdؙ����'Em��]��k���1!�� +�f��oct�����t���fNzc�ĉ�΄��.�i��b4\��ج5=$k�B�^���� 6c|�����8(%�:����}h�և�-�U��Kb�mO6I΄��*J=9�Y{#,E�k�Ug���r�Af<?�H{~���'vy�CІ��´S̚�S*\�jţ� ��_���2h�Jd�y/��ΊS�v��d��~��r�0��s�A_1��x9%*��I��+���O�q���O���K>���b�sJ����,�2������&D�O�jL!�>�B��[��1���L��ee{®�n�X��@H�"h�{�I��{=�Q���_T輄O#x�?3�?��/�t�ڞmc�^� �.L+:�a�ʡ��MĬk6BɃ����]�rYI��%(����pg���� H �*lel�r5�� �u݄*����i�i��(�i�'��Ӄ-/�<���褽 �`НQ:y�I;X��u��R��n|��j}����[���m���]�����Pʂ��� �j�UN�_���/j@i�6T͞���f����X�A27��ʏ������$����m���<A'��Ѿβ��e�oyе�L1���a�|�`��/"}��f�۟De�/T�>�cۂ +bႆX���RV ��% :{���f���¤����QrGz�/go7,��0����t�����Spv�ؕ��!v���ԝ �7���d��M;6.���_�1��|��랮܍s,: �6V��U=�bV�ɟ��z�g�]��w>_��2#������s�*b՚]@��YՆ�3)�W~eB\rq^��d˅�YwS�3à�+1h�dRc_�lA�Gd]�'��ϫa��V�������`&T�9��m��f!5/X�-�jf�c������V�J2b�� ���t\3`�y8��SbDڴ��*�k��v���jO�p�) UW�E/Nj��~?��I"=j"V/YY�Y���@&�@9�;�5O=�"��gay��iš�1�ͦ W?g�y��.��܊ոikK��U��.>#%��o{wR��eB��$�&Vt%�����q����6���Pw� 3�/��IR�#�������[cJzs곣����;N8�_3ʒ���������kw�ݣ~^�o? �=��)R�c�D��<�l�x?M��Qr�8��ޑ)A�C=��Y�۫'����{#dж����R=�s��7ߓ���c��D�j����ac���g��,��� �뇔���٣�[ZLΩ���x{6����g䀊K��%y��ee�����[}�Npʮ�p1Rnl����O~�e=������k�I�bs����x�-߰�$����e���ԽzО�����2�k�<#r��*�������Ap����ֆ��ו}O�)~��e�+���zH�Y~���+��_�!r���%+�9<�~�ngvn:bь��{�����\rAޕ��to˳e��'j�?�����El�8Bl�$A��)�� +r�L������₫�gB�,9{�;^.uۊ)ݱ�>�1�[.HގQ��b!�c<.�uKO���Aՙ����ۤ��֞�I\�33Jػ�iˋ��&��N��;AB��;&����o{ѵ�A��u;��`@���þ�1�i�����1�:c�fl�U71c�� +�4��f-�Qe�cВ��26}5*�zU1��l��þ�Z\���*%�I�wd�"�垛�v��=�E,�=��[mD���Vb��|��� +�1ӛ�J���9���ŵ�8ay1�бd���{H�{ +lƈ)�����ڽ����h1�+6RSL�/�H�FBYD����_ح̆;�:D~@Pwۈ�>礔��_N�����AV�o�U0����I�/�4��?��f-�e+Vr˪��X�ѱ�/ ��=_Q���2�N �ߚ譻�w��� +�+�r~��k�,�� &� �s�Ωz��FT��[n��m�;_���YRT檃и�'��i�Y�Dݗi:�����R0���?�����ͼ WP2JM�35��ΚQ;#��{FTq�O���K�;3�]�$,jx�h@V�Xx�^h�߂��˱U�!�������vd�U�we��8f'�f�(Ay�§?�$�=��Ģ�g�!����qhM�榄E%W�EUwG��E�/�o|����(���k�c�^1����9�툤��d���<m ������ܼbƗ��>�PO����ڻ�zl帖X5��8oc5<����^w�P���`Ė-�y���g�'�NY��~��=�U "��_2�.��҆�ڦ�릮�Y�n�\{Cؙ�۸�,:}?��rFZ~g�ݞ��"f-��I-�t��"m�1�k\��U���N+��W-��=�b�/�1�ҦM����sv�Ijް�6lĆ�(����QeBOnpv�$���fX�O3L���{Bӊ[�h�-�H�V`|��2"',x����>n��ɾ��sʦgNN��P�� �EϬ�cc7<����ƨ�M�}������c�%k�֖x��ш�XVB�?����Q�C���2�Q�.x���)�ϘY���������[���WKV\�nL�xi�C��C�U�6cd�-X�E+�5j"5�8H�{#D�� }'�"G�L��_�`3�O��٤Y;�nن*Z6t�m9%[^����x��_���&JmD�͜�ዦ���1>cBM�X��S:B�W{5 �Q���da�X�T?�B���Q��c�`wc�{�ӥ~\��Y�u�a/H'.{���Q1���� /��\��եe3�rՂ,����혊� ]Vⲣv`����{�}�����χ�������qm/*�����$���� +�v�.BcA�۶��M+�l͆i��{�C21DK�z��J��f�o�jܬ��������rJ��<���X��[)��f6|� .�jɊ� \0P��Ը���<!,���7���U��!RiDOl��^��Q=�x�Bi����nn���s�p��^�O.n�e�R�>�g6z�����M�i�I�S��ș�_�}��%#�$,m�����kz����_;��b==��Qk�O�.;��7��w-�I�kD����d�䮌�:F��|jW�yd~��M3�u��F�٨��~R窗��wRZ�v:`���l�s�7�4T��}<w�Ķ=?�?JCn����pb�0���ϛ��>>�����nH\�(�ڏ"ʦ�%8g�Kl u��S��(�u'�!<��4$Ϳ�a����Pk�n������0�&V}�?�t+>�)�-�`�ۑ�텕��M�>\�������!�k��#+�<����;��]��+&�� �.R��$��ˢ,9����O�!ē���[N�WIᒓ�8oaw����������7�}�G���p��vtݚ�Xqr�.^�4m��Í��� �h�H�� ճf:h�ΧϹzy�Ff��Ox7iV�M��y�=6_�Kflպ�� 0)&���,����_�;���I�[A:~u��qQ��T�F�NZ�� &J��q9�x���/Zq1nXq��ؚE+�}3�\��<���Ҷ�K�&8�[A,hŋk +c��ش�Þ�~t�?����e�G�q�+���{��@F�찂U3�f�F�\�W �2%�-�a�sjPrx�<.錟UA��p�k..ew��o{T����K6p��AL�����^��I9*u�J�X� +髎~����9�Ys����$�r���.w�/\�IT��>e�$�t=��AZΔ���R2#Rr�����֓����;�^�� �z��E�� �atjD��S����3�k>rZ�.��"Ӗb"~���^��З�<Ҫ���PP{T���mT��0u�X���)��,)5{2d���/�]k#T�?Q��`������G{Dۣ}�/��G�ի���y]kBD��t:��mlԈ�X�&T����x"� 3Ý :pRh��+l��Ϸ=���X~�Hu3jB���~x����a��Y�0Q'����O6���ظ�y'��d�B,jg����M��5 ���V�貨�#!��R7�-o������m�71��i��X�^����Ī���a1]V<)�f���;N�AHdX���*nr�����p���n����4FGM���.d1�`k>c;$^��t��Z�{|}�M�s���D�������JƝ���cz;l䃗c�<j@,����~ +t3�a�����Qi?��ښfr6�9ݛ�=ʭY�qg��ܝd�W�$Ȝ�P���ZN�E��d�NǴ]�v����a�6b���2BGF����J�F��7��H�P�>Y����Nh���P{�l�ׅ�_���ZvѠ�!�k�H��b�c�C]e3wC�������鼗�5kǔ,z -�c�[�d�x����yHb����z�Q+�#� �Ni���!N)PujD����ж}4䪕�z�g-�7vx�O$�(h�`�ٺ���v,D���4����<¤�\�� +�zV@ŭg�~�iι����w���Qa'V���7ӛ�T�������O�� �DM��E+�f�LmYq�1�*Nӄ��� Aa�p�ڍ��%�Y���0;F���5�u�(a��z�sH����Խ� ���l�F���i�`�Z�z���b�}+8�^��:�Z|Ѽ�T��&��� -[^\�k�E�z���O��㲃��k�6R˚�_�1P�^*h�Ii��� +�cl������B�v�Yt�+W�T躗�5uc"F����?��b��G X�1@a)8��]gŊ����qQ=���n��xv�nOt�o��e7�d��,ٰes����Cϡ ��=�NvJ����^�z�<��4G�z�ړnW��ǝ���z�y����&��Ƥ@�����u7ң^2ȱ5[5e��m�q�{��v�0�0&l��{H��0L��i_���/Kɕ��z��,̣�Aj�W2��U��C;��ޥ2x#DEmO +4;S�n�5I!E-]�sfx��7a��x�ș�AbjX��^�����ࡁ�Ll��8O�7-vnM �+�li�ÉX1�.*t9 �ۊ�������C�l��+vC$��@��X����93�m;$�l���;!:)j%5�kQ��|��4 �a�&Z P�k���t�lw�۳3��� �Q+>� ��x�t([������!�xV%#�J�9�n�S_/'}zX�:����-�9�]f� _z�]��E���@��g�:r�K�,t*ep�(�JR�]�kv*�dY�۽��l��93�9,���F�@��=��CPn!+˾S۞mz�d�ժg�0��]�!��o��9,m�U�F�p��GZ�0�G5^�_m�Hm4KW'�+r�m���jȝ��3 r(����{{���k�A��4�w�+d;̗���z�H^��U4��z�g-��i"c���]�r+���]��+{?8@)�p��SJR���1ke#��\�~���Zb1�pC�?L�z�h�'�UR+�<�Cu�#7��z��~�p�Ak�(E~ 6kVI�\����~��r�C���[���2��윍�6�FU��i#�~�ņ.8�-1��1Q��a�E�A���R{o�W��nh��tT뀑f�Q{q��]�����9����e!���|�a<�������~jׂ/�jj�`rk���i�!l��ҸlE"/��ꐜE�s/�g������T z�f\����\��"nB��G|�}�?%0l�iԕQ&v!(� {D��i���l�� NY_ˤ��:a��=��wH�tIU�L� +�8�WT#�V�\��X�a#44�;�kߞ���&��O��Q2�?�鿗8�ϳ���)c=Ĥ��z��ցn���5i����=� �l�ͣ�L�nd��S������������ �p�>�Yn��1�q���+����a�*ME1�S��0P����b�����l"~��0�4j쁭�|s�!��}�gVK;rX&�`J��@6I�LFҥZy�;_����{�Z���T=Dud3p�75�ȋu9��֟]���$a�wP�5�;��I>9��!h��dRbh����M�,��y7ř-�Mt��<Z��������t�{�K�<��~4�E��$�`���w���e+�lwV�@Յ���p�`�jH� }��W:��I��W���A�\2nֈ-CC� +�������iOO�Q�����e��gc�W~0ŏiq^��j��U�7�#����n�����K�\n��՟�SX�&9w�:��z[�Y�I����dX�s�H\,�6�x�3�>�YL�R�J�ZRŸ�4�d�{5Z�[+��5�P�@O����h�� ��*��`)��Po�q�L�X�E�^b���B��w��ȇ�k,��"8�L��~��=��e/Ƹm��k�1 �B&�k���f��c�a�����C�$�Ю{�.���:���|��E��o�L��u����R�o�N��~ +�C.LX%�Y'���fQ�fL���T�ȹz��<8���U��^K-��O�ado�hQH|�T�y����u�8x��������a.-A����q^��o-$V�Ƹdw���y�;�?�`�̈-��}��@�r�'�\J�^�F����譶_٢�!e<q���O�w�Y��9�n�vX�؟��=\���+W�轲9:G0߀����v(�A���ց?�s�'��,�c�*���p�%8�µ£/_4��ȃ�Ā3o�E¼�N���)n�àҎJ�QE-!��K�̍L&p�i���c��W��Z����+E�T�V\!9y�IM��k�qi��� �%1�%d6�V�bɤ��1���r�R�fS�g�`��a�Qc��\AYϏe��Vת~.)8��%����㞼Fy�w�^C�ƽ�o9YU����J�f䜗��)�k�"M���)�S��X�����G��gr9��� �yMÛ�`���b��/%}|91.'����<�uL3�Ed�O-����l�!��bͲ_�[��i�)��D}�q� +Nҷ���8s�S"�`O��<O�+�'j?֗���w�|p;�����Y���rC��9��%�85ɲ�C�a'f`�aKB�H��ӆ��KM��uq"��U{��ӆ�V/���\X=p�ޣ����gƝ���2�x����g���p����Q�ߢ���v2!>���V�{D��w&�s\IJşx���x�;��Պ�rJ�߿~O<r�~c܋$̑�t���7��?Aŕ��~t�/�Њ +��\/�g�))%!ۥ�B%�AC8[��R;Q��e����������3�)����+?r�lb��q��Aq�_��;~�z���YGZU��gQ�y������2�P�Ҙ@�?�=�>�$M�m^��ϢwH����AY�.���Ȝ�\(�|����O�(׃����/���������gnZ�uy7�v��C�yh�N� Z)��"k6��UФ�9%4-��w�q�������۷��^��n=Ɲ�^��=N�**D�����3�*�������p��.�ҳB�V�{&���oAq��qG��9߽N#�]~��{�Zgo��=x���:r����z�����%��g�bƜ]*Z��&��f@6\�skPˁ#��:~N)���D���JMܵ;�q���#^�����w�IW\B&�H|:�����/Rh���X�r%�3�ޞ��C�Y�i��1��{Af�ނ�c7�OƧP���~�*�}�.��3�������G~�����/���Qw;���#/ޠ~E � C����5k�ǭ|�N=b�<��rQ���A]|������f���Lr�m�xf��X���32��=i����>����#/^���Cץ�mW7$~�A��y�}bmK,Ap�Ů�4�F~�^"�Ľ��#)9ܣ���'¾��zɑǯ�G���O&�]�Uw?}$��v<���K)��Ol�vk���$����à����.�t<���n<]R�{����cnT��%�Ɠָ�Z��E{�J=��@z,��z���K��|@�F��r�g����*��Ɋ���`A0_��,=.�U��.�~<sGSG�&`�n�k��~�1��qO2�qW��G�������ȣ�Ŋr[|���oK���9�<o�eE��r�B���Uf��Ǫ���r8i�Ib�Z4t����[V��;O�q�G��������_�x{$%�u�m*�Tu1��0��u�0Z�@�Tf�CPf�d�7��ER֞K-d����;�������#'}w�Qsl���T�~A����D&�G'��ٹ]!5!wL���iE��C8Rz�H����Pr^~�ˎ�"�ћ� +J9'�e?&�?JLʠ���,��EI醙���JrfĀ�Yr��66t��l3��2�0�W�h����!I�g���Sؤ:�,����m߿M�K�g�*��^�*�Xѥ�Ў0_#�oz��"�DZr�Q{gN@ݙ����BiM��H=�T�'���������i�^!���C㑋�K�%!�<K�ǝ��W�F=J�ƥTyNT��7�4W�Y��w���k`)^9�鈞^�R�܁�Z��t#|`���yX�a?]�f�5����ղ���*�n?�]�U���q�!G�x�J�?�p��AQ嬑R�� 6��� P6hi�2t/��HV�Z�G�j��{eM��C��p���ھs�@'��Gҋ��S+����{nv��(\g�а>j�ιh��L��T�ШU�Uk]\�2L�I�D��� �O�)wa�*[�o���\ˮ�^ϯ�]S�ک���%��S%�5�z�~�4��t��i�x)��9�ZJ�B�͔��+��Lut�:MU�S�� +�/%�������Å�MG��CO)��R=�G9b�r5a�N)L}��j-�W��}6aJ�͟V7�\�#��G9��UD��M|��O�HG��w`�ܫ&���Z��:���ڎ��Gf��7b���hB��v� ^�-}���\8p�֍�tb��$P���A��^(vU��\ +ۚ��j��{M ���2�/oӑgrK�W�0(���I����t(���c����� ~���3��x(���^C��g�ɒN�7��Mr9;��T��<���*.#кD6S],����5Q;�foۼ?���p�� ��#:�'E&�e�r�AM�hU�a��\ڧ��Z+L}?x܄"�� 1��$E�'y+�JWJ����6�<�A��ZvC�g�dP�>��5�lf W�����If�������pǝ����o3i�2K{~|�;����>��}�}y����_��c�O���(���3�b�o�H�%'�zɁi� +� n!V9����Y=� U�F�� ]$�C��u�U������x�$�ybב7���k��A�[,���M2T3���M*�/������R?���N�RBz14�o�z%�2�I ��t�\�6�$��c�/����p��]b��W��4��Z�q���{!�����E:��,�;�';CD�Y�m4kH��� +��7[�'��ϑ� +C����A"1��+=�A���4�D��SFr����wr�f���|�Fh^aSVƸ�i7��5������%\�mѐ���cL���o���%U]�4 f �mO�t[��z��YbM�H���y���`_��(�c� �X�"��&�{�b��X��m����ð!��Qد/��t�����cy��Np!��|����Ld'���p�M� �P�!ay����ڢ ]Pb��:6h�(��j��< +Q�W-ns)z�U=��r�<oX`��kU}�vK���78P3��/k������ly��&^����2�>*d�D���X1)�(ĥ� �B�i���E�4��[�����Z x�>�^���<<욏����,�V>)����X6a +��ج�1l遏h�%Svz�&$���j��㺂�qY+�ܶ w;��cJIP�N�Z��M�̶�c�?�a%�ζ�%S��}��Ҽ�4�{�fdTK+�(�vYw��o�Lڭ����/�h�-���)�bp�kd��-�G�'���J +&���M�ܶ��2M�ڏ��=_BB�aO�M'0/ �����p�w���p����*���34 +�3�[��6���� �y��g�!Y�]�ƅ��y�|ۃ��vc>�Ra�C�o���>A�Y���A�Ȩ�c�3OLT������x5���lc_�d��3�%�W�D��K�)ʑ~��R>՟è֏aL�U1����"�]ʝv��w�y�͑ޚ�K\�3`k~R�W5��WF�<Ȍ[*�x�I�:f�G��Y�e+nB�^��$�*Z���f����}��9;�>�����Z�]�� ��������R�9t�"��֣g�����i78렷m���O�<�]��FLQ)��{�>̊����ި� +r��.9�d<V�,�A4�ztF=sXk%+&�^������6ou���1�Qu��/�|@\�nV���J)�;�O[�r�Kb���fLXq=�[{QO���x�Q%�RI<ڲJ��/A +v�ؚ��h���nx�j�lؐy�zx�_|#�ߚ���x���8��ND��(���5�9��+>�a�G�^����~Ų��݆��7�������G �Q*o�Am�2NA|!_�I]�NdŌ�<9y5�B���^G�ز9�pNO�ta�=�WM���Δ���G��gd���jb���炗����>�b�]�þ�U�#d誓Ҷ���L)P��rdŬ�2.m{6.�+Щf>$�v�əE�ZB��s@�����X������p��kW����y�{�k�/�|�3��.h�^︨��Qc?@g�9a �tմC��%T���`B_�i-�6z�ݰh�,�� j�|��}���s��ubӼ�2&*��bh�������NB��P˳P���$�^�[6���5'$�y�5��;�G0�+6��e����-B$l��Y��«s���7�.h�f���)2v/ ���_f9�kfP�l��I~� /��j�����Q�q�ܵ`�4��e�@enB����P�P_�Ո��������o�����0�|����Ή<�&X�%]ӛ)aᕐ��jTY����e�=�=N�|�& �w���6M�oX;+�U y�ը��� �� lǿg(������V=Ď�I�f?"r��p�����iJM��c�VƄ�~�h���/8i�K6J��(�y��4�����WE�~]�;�jon�9��_,��_1`�n�q%�ZXƶY��D�ͫ����VRх=3�m�BW���qǫ��Q��+^�4�tss��js�K��w�N��W�i��,��0�>ܶwe�zH��>zՂk\2��o�Ю]���j��+����h^~���g~÷�aw]�� +0s^��|����� +�fˎ*�j}1&�����fL����Fh��?%(�k���B����l�9ZD�����%u�I�!���������Τ;$s�Ɉ�Z9��ʡ駶���o�Lڇ"h��8�kv숂m34}ύ� �ڳԂ��>"�����.@ڞ�����(��8�a߇�8��>x��7��ᢂ�:H����Ŷ�%sw����!��e-0cύ�_ֶ� *����XZ����o>������ Y6D�в`���`Z��q�-;�t�N�wt��7��w�L��q٦����x;>2hׅ�Y5�'�[�髖��74��\5�ͫ[�~ `#���h�ْ����3u�/�g���:M�Fu���]Y{>��-CW����cf,(�◴�� +�bDž��wAr����b�?:�rf%���eO��Ko��Jo����m +�_�����μ}�m\�%�Y�yX�n�(��@�=W�M�([Vh��Pի��,y� i��P��#�7MM�7L �S*�5�i�-�O���8�`o�h��Ql���Ĵ��0M;^<xՁmؙbq��9�%��v��y��E��CGg��)�mck�394��x}ʂ/|`�4혰E{6Lid����P�E��e�Œ�3.j{4)�x�o����2��b�x���v����(=��qN�� MWގ�X3��5��U��m�䏮þ��I����Ɂ��8�>���5��˺���P�Ey� c��;,w߃,�u�2��;6b��H�zprT��(ƋWG�����/OK�o����~_Q�����w!v�_d�)M�۟�䟃��~V��s��d����0��;�inj.]�v$/������}��3c��&W�͘�Eug�B��M��;���UUۋu%����=IK�=?�L8n��w�����4L��� t����K:��j�����������C�-7�k�N��;@B��u�b��ϣ� ��臕���4�]U�w̸��.pζ�1~EQ�$,,�������`�����[_~ŵ~а{6Xގ�����!iU]�b��~��<��H�N�����+���=?�y׃�]Tվ�V^�29P}��$�ll~��9z˷6�v��}�g�2����vf*S7*��R��5�#�./PZJ����@p'$!�@mf�Z��o�g�[?"�y���.9��IH�y��OE+ (���L���<�OM�l��_���r�M-)��p��`B<���XŘ�_�U��w�WFx�Lp� +��j\B�VO��hU�^_��xud@E��C#�zʯ�5"�G��y��� +�d��En���s�L��^�V3*v���4�=��j�Щ�b�F��+o���f�.mm����x�K.Ъ�k����������5�E� X��P�}�4.�dz(�fLR�rZ�Wx�����aH�u�H�����e���>�#���4JN��A�9&y%c�$�8�������o���g����e"�q��R��rj��1�DA�?Q�cJl��1v��n@��{�%àO����M�?�R�C&����?^ŮP��pr��1!��J�GY�p0Vqg�e�ϫm���� Q+}���ר��#���l��HM��6�`�x�ry���e����������o��ߖ^^6�W�v���b�LK�>B��М�b������+k���5��r�{�'���1�L�����Jp��Z魸5LK�z���ݼ(�>���쾃�sH(�f���x�)�2��ڦ����Ĝ�?j"~����ե$g٤첍^r�^oMҟ+����hW`���o��n�+���Yq�<QW��GL�x[rq���w����1��v +���+�n��io��Bw������öߗߴ���?���*WO���?���>�T�*����#�0�h�]�:���D(;ro,�-��h���jR6�����7Xpm�;��e�4,�#�;! �< +��zm�U�)�'�G��Ⱦ2� ��y�&�q*����5>�s������6�T?Qq��L�"�U ���y��F.��\_{�8YaS>o�6���|��Zh^��*㗭�«�5:ѩc��I)v���R5wj��Z�3?�x�$f�/��R{ڙ?w��y���q0> �ʿH���d�[I*:Y�A�r�N_i�jW��>-��3ݧ eF�k����]pѥ���e�\���b#�F+�4mɧf��1в��b��+/i�W��l�8�� ���G�������c� ���wLc�h�>z����bG�Om�?�@n8%��#������ܷ��ib���u���K������g�8W[��]ʁl�����G>0#٦k��`ww��om�c�ygz� _ov�#�Ӝ"����=�~���=%��|�����K���G'��%����Y^�]�|j��:�h��~�������H�ȷNѳlӴ,��be���R�p��YA��c��j[ru�0N`bT-�?�c��^g�G��h�ήw��=�>��)����(�z�i�xٰ�A�ж`"�� �� +b�wo��_�*��CH�� &�Q 4�j�l����QJ�����9gBϫRҘ���k�9�_ǂY�11�̤oii��\��6���>�Z��"�t�nX����j|��H����䳲�g���[�<�g���#��j����~9��!�Elw��g<�J*L�aZ�~jo��3t�W�F�_��(��>��H�S�44~�e� N�Y��Z�5R�l�u�o������pM�c��?�K�%���P���@/gۥ�����76�An�u��Q1���߄�:F٘yf�Mރ�v8������>��%���r�-s�~�g�7�fY?�O뵍v ,�`8�i�d���9O��Q�n�NH2�������;�����v��Z�;XtI^�]gխo͙7�6AT��b$گ�!*N�{�У���/t�Sv�/jZc�����?}��߬ ��_Ҳ���W\��'o #�zw�M%�d�g墂���*/��m���sv %�`��`$>s�b�@mFZ�����Zl/:{(�3��6��D�t���5G��'�g�>�����~T�{R�W���Ǡf+����.�,�0�L��y����!��!�e��ҋ�?QWxiZXxqk�������6���˼�֢�̔o�"b��i O��n�r�Om��?�����I��)V�y��i�����]Y.fs�7�Ȼ�݃N������y�2�:R}_^���89�P�m����x]rq��s?�����)?;ň�5�̧`Wn��i!c��.R�m�&�:Y��Бi����^�83���Xo�����"v�h��L�c�캱���fOɕ��w,b�2#�Ѽ����.�3+��*~��V�}{�M���Kڗ�7lf�}�Z�����������ȍ��[�ΛC��?ҷ���� �*j��ҋs���@��d�F� �<��X������d#fZ�i�Ì�S ���OO��Nӓ�U}X�=ݝd>�ğ�]��A-朣/�����~� �~RsO)��<rb�����䛇2V�i�����>#f��ύ�Nݜ��L��e�<��&�d��R� +N�Fw�ݍ���[]���+S��?5�ȿ��6��_�\�[M�X�.�b�A'�:���-_6Du>!0@�Q�|�5�x�����k�Cbcc�d�k�a�b�� �cz�O��uV<�~tͱ�Cu�U1��ԿgNb6z��h����ᮘ��',?�hF>>�Vm���_���}5@����!������af�d�9,~�)���b�����ȼ$kx���=��RG��+� WvFp����}5Q�}����g��J��CNt�.M2��Z{ {l�╨[ +O-�,�}���kku���s+�a���H��_�9y�퍒�4лȨt����09�_���i +�.u�3P��?GF�`�f�} cX'p�=�O/.�����8Xv�.���� o�E�C��̹�����;�z�.j�SO��=���j�v'.��qJ���>r�FG�Us�5�$|�;��RG�UUc�Ϧ�L�~r��$��F�E��w�Q�\3�x�:�p��U��������חج����K.�+@�|*2(���f�݈�iv귇S��ID�Q}W�Rvq�亪1����~���RR�Bk�Ep�/{d,�i����Qr�Жuj�-�e}�m�w��O��*���������$��^t>y�E�-yC��7�Sz�ORA��$=g���c5��X�f7&b��.k��ׁ�����W�El���y��F���otߴ�Y���L��D��S��V���3BIP5�\P4��w�Eo����WD|\ U~Y�wljq�yh�^X�?� ��Zn��Mߔs�К��M\���m&vk�0)�9�/�d�����L��ҥ�&���%���q��ݥf��P1n%��M!�x�Vu8[q(�D�f��|W|ţb���Z�CJ�Y� �b�P�C�h|j�+㔃l��7� +_뮼��_f!'��DȝIf��>v�-��b���.���4E�]�*�d|?2�v��z��Dٜ���9���~d�]L�*���iJ��%��F?>e��#�+�q����3��!J�7㴈���?��b�~٬0�Lh�"��[���m����5��«�ߍÔD0:C/9J���0߄~`����E�3��7��W��+ݘg~e��<CL4��b�|�mT��{� �ꭸ��S|u�-��̓�i>z�����K/��W[o*���.��y����9JJ�c���H;㐐�u-i?ړ�����e�%/��m��(�ޚ'�Ȅ��De�>Z^;� ��[y�f�ry����bw�}I�rU�����:��˃*j�s��.��=��صγ�~mcb��$������M�wO4L�S\q�=]|�5UzOU�����]|��)�V����� Z������Ӥ<�1�I��z�������W�{�����aO�#������\z���L��XmGޙ�aL�V?*z� <��8S�sv������⛎й�J��vy�-�e��c�/��ڑ��r[�]�L�G5��*r���}���I��Rm3�D�p���W_e]�N�R�Rf�|]ՅR���������u gc����״/ +/�T�]F%xt��Df� ��CA,���!�������eX�a�JB�Ro�y]g�)�$2v�� R�*/̡�V�uL�_O�|ZeQ����� �}ŗ�b��PM�q�m��gz�<��-�)�fN�A<�Α��rf�u�[�;BO��E8�(%i�e���UW� �4mI�� �gl��X��� ���� ��Rr��8!�2A�ӿ(�}w�`�r�4�O��0Uk�9eCѯK�[�}���b�s�Ul� �-u��2t�\r�� +�RF�q��lo��ګA=�D��IN��[b��HbsTX�=D��@<Xh/�u�}�m�'�4%ŧfW���c]�&�z7#o�yMQ_��$+��9~�>Y�*o���S��%�m�ȥ^5��p�&F�T��|m�yy}�o�)r�y��jGo��/47�إ���}�����g6�`a�y�X��p��s��4�,�*��;�j��ݸHE;��9��[r���6��� +�X�����ۃeO��2 T�w��$��A�ł�3�?A���+)�;�9�/4F���2���{蓝��{�lrh��~f�����PSK�RB��#��05�)^���˪6�}iK�Mh��oFy�׃J\�����˭��o��s�o�o�eԒ�ڂ+��N�?��_[�����1�B�7zr./��>��Y~i��pc����p�"�[���ꖰ���Ĕ�Ix�V��De�G^�Q�r�o�` ��)�~%6�'��/P���q���z�>����p�U}0CMߝ�Ǭ�U�c%\d&_=�`���j��iXE% ���х��6}��1L��xys�WY�͓�g>-.s��H��$���fs/`��zL�G��[�/�������(ȑ3�P��-��<�®��� �b�u���bt��ۜK�� +��wC�9��e�)z�F��q���WJ�g��aZ����������X���Yd��R,��g� r��r�p���g�ڥ���:�����ɩ �|�=<l�U��������q���D�[^���c�Y�?B�X�Ƅ�d��uʩ�6 &�#�e��L����lb��C��"'5|�GN�=Y`�<�����4�V߳�I���RƏ�=B-S�,�h�c��_�G��{]~u�����U~8K����,!�m��b;��W_��]���G.t�;���hE��<I}*a�W�d���iM��c��=�1��YB�� �q�_���ޓ�����켳��G�m�;.��7u����FahV�z/�D�����W桢��Hş7���>�C���<s|䱾Ax�\'8Yf�\ +t��P��������d�gc��9�,��t�<n�����,���Ջ�{���k����¯!��-���O�)9���r*��NHP�V����V"(�h���a#t�E���ί����d�WɆZf(Y�������p��W�;H��}_yMז{Å�y�eΕc��h�K]�C�M�.�Њm2|�q��W x!z�]�-YS֯]e�a�{X���j���9P��K����ɿ��c�8��l��U�7pj��|��R\a��ZFMp�C^Z�=��[ ƪ���K���5co���zw�/�2��z�Z�zyK�-�̈́����2��e�uׄ펠�,����p�;�x�nN��Бyfo���O-�:5�i����U��<���>��ӵ��$�O�N.�� +�t��(2��I��n ��2���|J.�2MI_~������y���5HJU����Uu����WՏ�W���E?vI��#��������pk�B>2���A��)�9�� ��k�����9f�s��Ђ������(�"�=O+�M��w��KY?xlxh������ŗſ�&j"�ƐVz��tmE��jv��%ug�����V1JMc���9g(9�9�2)��L�!+�ب�w�(����)okh����jk�R�i�p�r�4M)\��#ߋ��� +�;��e��e#$;����ql�q�&�<C��j�hk��܅W�'���x}'<a�]eBPU��i�\0� ��%��VG�� �C��gW�K�V�(��&�8Z�Eg�����v��I���;}<�G�,�A>�>;7-x�i�(�w��K�]��.9^��_� +N�q���=�y��r#���8=}�{o�_a���q���2R�q����6���>5��!b���w�e���,�i� d�g��JMT�q�84ok�����U]�n����1O��X�"�����}PX�hc��de��hZ��J8y�(� +n�,��_�D�ָd���q #f�i�~���p)k�U �?�p鸨�$.�x�rs{�q��7���ʡᒶ&j�m���F��.�N��؟��~�e�+�*�����Y9�YP�c�h�.ޯ���h����2O�z�J��zO�������Ẉ�x���Ẍ́��!�Hye��Z`�}[�)uS�O�C�0��Շ�X'eo���h�\Q6��*\A�kZ�1 ��{0Q߷A�}?�J��vۣԬ���w�_���g�G:�S�<r|�� ��;��b~���l��0��]J�h�H��[�WЋ�S�ؽ�;K�������q̑r�&��Q7Wz Q�YZ�KF���8U����g�G��Yf�'+MM�9����#��0�Q@�*=R�HN����1����:�ڮQ�����@C���3|s�"/��<��GG�2���\�2�4Ry�8Pvu����[rے��Ӌhs��k�5Q��&��"���[�Q�ҷ���T�q��O�|�������Yj�� ������U��4��⛬���ޔ��yS�l�Q����k��Q~����ph> �ŧ�Ơ�]3������6 +&.K[�"\rڣ棽*fEp��?^��ɩ�����,e�b[g躏c��c��r���ȗeʣ`�-���-����h85Ӽ�o�|��^|uw�2�6���/rI����=P+K}ԸP�{�|�CNL�L#@_��1N�, +ʮlb�LpK�gU�����z��(+5�m��[f�A��U���z��Jm���2\���k�o��9Y�@kviI%��w��aw�Zҩ����ͳ�L��QX���iɻC�x�$-�|�A� �x�yt,Hh���8&�` �z�=]q�+EF��in�m3�rf�w����(�6)6�4Zqs�}�o���nI#�#kY�k�k}���1z�YJ�<c���#�n����j�;�l���r]@+"�O�r��¯��+~����GH�y�4�6AJQ6�^��s�~Su烶�o��e���_9�D>�A�7�c�H�+�k"��N��x`����W��:��B{�9�8"�!�D{�l��]i����Ĭ,�\#���U������W�ui?�7�^�D�:瘨��:�U�K��Z�NQRUME�T I��V�:G=^驸�USJ�.٥� ܊��N@����6g��6���nH;�ޙy1 �f�Uu��^�SEK�)�����Y�c��:�`��`��6KͰ� ����Q/P ��I(ٟ@���9��d���n��\���=o�����*�@��W�J� �d��HY�MR�zb�>�:-rb����i���R��W��z�q +�d�%���?Y�3�x�Qn�EY#$�#w�k�.�.�m�=�ց���@�}\�3�/u�4��MQ3��[:M�̊��������m%�9I��~�]uD`������'k�����ԣ���ѼZͣ�Q<j�4�&�W�����y��gOV5�6��ϛ /��ܿO�)�nN��E%{c���E>{b`����v��6�M �(i�{S�L�|��!olz;^fb��(�F1"qo���!'۵�� �Mav͋W����'��"3`����҄�kb����O�FK�;$��5�,��T[g ��s|����X�*r����rg�����G ��l6<����N9�8��� 0�������{��4�$b�}ݺ;���(i���Sֺ��ZsO�0���S�d����&ў��<(�Y�o �����$�01Fќ��;������؇��^9�`w��=�ȱ�j��Kc5m�g_�o�� �ƿ�MϾ;Z�Q�!i}��8R�R�==�FD8f+^���5Xrۥ��nbm��cwF�O���Y�qJ�GE)���c��e�k��e�=�.ȇ V���U��L�UQ���ˣ�_�_��.�j��6���'}7/���5E�wN�c�����1t�\]�Ϻ��K�\���8uS�%�x�Ӄ��;�I�}���;���ޘm,����4C�[�-���Uvm�M僝����y\ቁM<Y��@?�� ���:����H�^%){r�&G%������c����7�M�-��9�M7U���)�l�̿p8M������ryS�Y�8!�-����ؔ/�4x踀<���?�,����ޚ��,��#7�I+=��l����N��蛚�&y�c�8�N���9����4:�P��t����"��ㆨ�h��ed�C)6��V�/��^9%�9�MtHC���%Nms㡲�w�����y���mS6k��@�N6�|����-�IG+�����p�0�]A.��T���vmCp�ö�py65��m2����h�-�i�����J�ۿ�yS��rJ�G�MpI1��IL<ȳ )�H[O?�&�o��(^d�S5�}o쩾}���2����f�y�_�yY��0)����ͣ�8���}s���;݄>���qv��;���C�����&1>ko��=юߝj#�e�QJ��)n��"t��c��a�y�pg�y0%���kk��Ĥ�������sCԧg���nUf��L3��L�v��U[C�7�U�L��{=y�-b蓠�Y�3qs��|�¥|��!�#��,ѡ99{�<l���UB-ٟ��k����Y^5e��-��H}{������������ag����n�����Z�y�e��d�}�iL�Iݜ��i��b���_U�S4CÏtl�}��Йyn���Û��SS��Sko�7j!v��=���Q��[!��B�A@q+(%�#����&%�®io]��&�7��8+�.��l2�C��,<ݥ��1�W�w���ֱѪ�궼�Q�S�8<�9G(8Z2��E\�=�U/*~�KY�$!{�e���n��9�ҧ�a����W��v%��-��;%�.�����?�K)n�҇��T���y��=���G�D��ؕԪ�)D�C�Kq(��N �5�K�h(e'k|�Gͬ +h8��.����<E��O�+V�#l�n����6��~X�F��m>���P�A֦",3�l�k���!�3��]f�]Zj�w��tjH�5a��1��!��t��8:ʣgVֳpn=� ZZ�f�EBϴ����)���'��j^�݁�����f�0s��) br�M�|✨�8Vqo�m�/���|�ah���;yk����S杂=���M6is����3��Rw���o�U���iG?�5����U~�%}�wI�^N��a̳�a|�Uʁ8�u�=13C�ZqE-�9}8�~䙥f�5�}�Iٶ\�M*B���7�p��!����%�����5�-Rz��D�=���� +�6)5{����v_�U�,$�:�(pk�_�]cY-�PR�a�M�p��yJ��XM��9mc��1L��ͱK�j�2MN�x8���n##A��\x�t�:Uqϣ�d�T�\���q�������%���hI�A �pS�Jw� �$��1�,5t���Txf�rM�Rf^����jts�}��1D������G�<�OKȲ��3NV��/;�m��ֆ��֊;9�Yѣ�a-S��ٺ�_�⿷Lß}X��B+����(�; +2w���C�I����� +�ثaT���qQ�]�0�,��jC� �9��c��X��x���V�ؙS��Ь���?��WA�<ґ˂B�v_��2��]k~�:�O���\��h�p�ϻM�7^�u4���y^ ���F}�C�Ao�!�t�\\~��*!�9��B�_��K<�WI(v*�֙�C>�`���ƫ���!�S�� +u�XD�ܓ-Q�I�O_x�w/�v~���bjx�ԇ��;U<��|�e�OE+<���n%n�p +MS�ܥ���ԭ�_�M��E���:B��*Bs� ��)f��3g�u��9Q�W������� ��LVu8#��DŽ�N �w��`��{��K�yCO�)EG�o�UOݲ&�e�v0NK�Ix��y�!����O�����|�O����DMzp�Q��40�'�yV�V1!��_u�7GH]�ʸ�kM��1�I�+xi[���7�耒��<10�~9ߡ�%-��9�ԙv6t�wp��Ρ�'[$��é�'A%.�d���iYp��Q��]q[;�בʜZF�YJJvΓ�]����U\��2R�e��d��J��֦�q̓���;s�Y�f�i�� +�����V�a� +ũ�,S�����K���?�3"�Z��xm���D�+�5�+��C���9Xu0ޝݾ��;�.�汙��d���<M�ܝ����5|بo�����m�(��ݟq�>GJ��-���T��� v�C�µ�5�� +n�_�A�j�2t�u���Ts�C��X$�D��s*Y0���}�#�~0��d���8#�x��ko���:� [�.���r߫�AB�M +vs���:$(6J�h��rEgi��X���қ1"Χ����[���l��aL2~e`��ŭ���*j�q +�?�x����?n���al~�?C/Tw"o�y�7�������:�=���I:�kL��>�J9�45h��-�W?m������y�_�e�N�ɫ�쓅�Ƌox�x����q|�TS��O��o��o���mp���{��;n �V P�y~�U�*�%'l��B{;��,�z�KUO��x՛��k���{#���Yn��9a�����WŁ-����쀳��8���,&���B9�m��S���jC�ȭv�r��#�؝�һ�iL�[ɫ��G�3O,@����YFk>�y��K�l��^�9� 7N��7�*o.��>��ƺf��9��DWK�5v�P2ݳ����B�UZ��:��ѐr�Jr��"�0�[́��P�Bs�g���������i��*ED������sOV�x�����0�?�p�1Ƨ��5�� ���؛��~mG��0.�8�,y�]�.qIP�vP���۽7O�"槵�����i��d�^,w��E�S��"�X��5��jw����-rbd<�)ϣ����D^p}Z&qs�b��>�h�E�kM/���M��:np!��� fqYؗu61�g\ +�&�@vČb����M��s)�(��Yf��I���$���j�A,��Vf�%��ա���<Jb�i���rW�o�=�[��q���wMğ|^���-�;���5�>�fy��,Jڪٵ:��y�x�H�jy�V ���d���Iʟy��g�W�-MVE��a�3�4-�o��v��}��cy�h����I�]��ܩ��T��lM�cТ���wz��Z���-1��`�^��~Sχu.{f��_�*xh)��s�N��������i��>K�.��K�U�{�� �Tg����1e:B�I�+���1P��$唘�U�������P�V�?E���y��xwc���������B=�����d]�3MR�,b~�eFPf33�br�e�ȧ��4���\�� <L.J�^V��ݾ�^P��IVV��<j^u�g���c-)�9W�;����&l�8�&�8�||��"��#9�)A&���ܶ�B�XŨ��"i�'��f �5X`V����:�4�*LS�' k������-/�S��#��Ta����?6Y��k,�GE.�J���zrQp��!�g���>h9��Ykn�c��UP��Y.Ǧ`����3����p��'O�s��cm˯�W�[f���Ku\w��8��V_�����;Ӣ�S��:�|���h}���Ӷ4��:Z�[�M�*�+kI>c��x|�D���QW�Y�|�������8�kb\2L��8���h�#�N@>^o��-���9.$t=�����W��^99�%ç������ea��_V�OV�j/٤�ҽ1x��p��O+\��:�iTR�����ʱ���^�x@�x�x�����-a�mA�Y�`���ʹ""]����jS�/4�JA/5NTƝ,���6k��_Nە������;#�������V��Њ�J�]A-��>9 ]����yH�<>���B}X�Q���8�[�!ӽ���A��/�� �9B����c�����#h��}���'B +��K��?v"�kX*� �+MWiƟ o�?��VP�`\�&�S)zÆ�4�H`I� +,��m +>�p�Wa��CĜ��j�QL�8�co ��m V��&���sy.���R���کh��T��V9���~e��B�&�Q�=U� ���W^�o��ȡ�UrT��spI��- +I��^ !�9��Xe5�g�8���X����7Yg�C9�M������7�R\�c�Y�P��s�"�F���:�)�n�,�a�Xg�O��ĀVH9�h� +�5�;MKd�i�)��V"A�a�c@Đ�G�ʽv��& +�8$��y��q �\� +��7Vyoԣ�shO��z�y�-�z�o��7����3Dxj��\r����r0EJ��V0�N9֤p8+���nS5�gE�М`ˬ�<: �l�[E��ki���y��[l�[��ݛ�|h��&��56W�T��^�S1+= +b�GI+��9��\�cY�ŗ7���� +�2��az�yM�O�/rK�Y':f��e!=���Jj�?�����q0�|2H�]�Mu,rpGk��/�-���L���]��`S3�N-.kg�xgi9�h��Q���x~C�٦�����O[�_�/p+��Q�ls���%&��nC��%�[M��s_��i��зʣ���� Z�MN)��?��z}�l�o����#�9�~� +�W�C6io�`S2kNV��>Znj��!p*H��RR�GG�:Yga<|��3�\|ס"b��g�=ʪH��~�gU/pPGZF��{.76~ZmlDt�=�[�����D�L�s˛���9��\�Y<�}6���)�����rr�SN���$��hy�y��%h��xT�RPEnE�*m"��"�S�)sΑ�\2Z�����q�>�6�c)b;�l�]YGv)[km�B����}(%$o����h����.ggfE>v�ș���M����ᚈ́��n)%�d�����c���,�4)š�Z�@�튩�ȇ�#ا�� �B��&��V9��R�<-�*�d��ܭ1\�u��4)'+l�滼��қ����1�C���e<�3�.\�#����匪�a�m�$�5�����A-�A���q1��3����Xn5�y���N�h%�7��O �^]{����&a�h~�a�K�K���'KnX� a{#��s��c�5^m-ǫe ��ԏ +�5�6):z�vo�#�����{6 9ϩH� �'���2�d�j��������| �L�O}��IʫZW���z-�d�^X�S>��PA 6�:]r�8Zx��FC۞�Z"y���UI��~`\���XL�L���_S4g���fx�;F,��:. +h"�h��\��O�����d _l�����r֧]Q��Q�T�JB�hUp*�2~Uh.�_M�o�/�]�)�z�!�m�ȡ�2��,ED��{�YX�$}'KB�q���Tq���l�x>=��<KH�����&�/��}�:��hـ���~56��P��̉AH�jEF�2��I�{�� +L�i +���&��8��_e�e�f�ѫ� +/�T�:Z$|\%�}^'A���?����\<`L�G��r�h )�.�V��٥���N�|��|�`�m���g�F'��L���A{�-�6Yg�Y��d>�a�`f��"^\�|Wv�5�,�x��@�-Y����\�u�/��9穥�bB�����ذjo�]`���o��0;�B�AP�t�q�m�1!M-ο��`�c�nM��g��ֿ�ݢ��T�ܠ�RrO�[�(Z��jD�,�a�`a]�#��4l��-�8��S�`A ������k{���)��WUt\�`����ģeN `��\�#▱�Lc�؏z>��n�Ľȥ�#J�� ���x����!���Z�~W>O�z�ҭ7�w�Ĵ�a�,���xp���ч +W4��fƝ�~KkS����7��p��z��2�eS���-�%�C������X�� +��Wӫ<*�ӊ@�<�ͽ�E�T�2�J˛���'z6"�!f�T�D�pu�m�Q\h�;^k��O�sp�k�@��X�o�X$�Z�1F Xmyr����q������wHp���Ea�� +�~x�������^�V�T�C��#j=Y�3?n���y\�[��]|s���ҡ���qSȝk;�7Y�r��@��Υ��JG�e���^H� #�:'��?�Z6���h�> .�8Qv�>����@�0p1�E6|�2��YaW���UQ����'K��t���g�-3�,����e�]���$;d�ls�������g-��<1�"A?s)��� )3�8�*�9�,X��;�$���p���9v(��:�UQ��L���ъ��s���0�<>�:Mʰ)x���ZĖ���(�A� +6�:��_Wyk{��ҥ�%�Ѳ��EvyX���v�&���n�FE^^��R��Z��z-��O<�*q����z^�b�&fw��:��0��5���ưH����d�0��Jz�k�~0���F?6�a�z�\h@-"Z&Hɛ��[����^%.ͧ�&��4��*�<CHv��x}s�Y�M��˿씒2�Rf�M�O�k�K�c�y�kQ@;��eyk�/<K�/=�z�EJH[zSpw��4ޯ�,3"��[�=�8+�>'����2Zl�c��� �2���i�{z� $�`��6ߚ��t��7�!����t����Ғ +�*z�[]��-56�$�l�4!�dCT�&��t�����IE�0���o��<Yo~�y����P�iU���x5��V�rw�����h��0�B#<�,���L��j�K�S��#��c }Xk|��7{J�β���kJ=�}�vg�� ��&�����^�,�������ֻ�#Zf�9���ȥ��+;�UI.�����#9Ӑ���04����a�q���Sץ�{}��ڢ�߶!�~Z��-wi�^-d|R@�,�F��1 6�6CJt�1�?��)nr�l�0GZ�KN�vͳ +�t\�^H��YeG:6̧bTtL��"�Q3�|:ԡ��5b�5�d(��ݚ�>�u�_q�Qr>�X��#m=�hA�ؓ����$z45 !&�~��׳`v0#۫�#]r&ħ"d�t����2��[�C)»� ������ ��¿�˱���Z� �O+�����ׇ2�||���s��5 ��E�7ޥ��� ��)���֪�C�X�aV�f�9�L�M���K�Dd����ELM7�a"; +.��*���}j@M+�-�C=$�8f�UA]-5�aC�Q�o�Y�J�ի���W[���5L�S���� |�{Gzj�[Z��P���z>��V���΅������r�.%�5����L�s�G�ɮ������=X|�4Q~�8�zx0FO7Op��Rv�W�E��Ե��p�Z�5�;���'�qN%�(��D|�����wz� O�b�ON'�%����a� +�c�����d��9��c|^o����O˭>Y�R�}�%� ~ߩ�AOV�>l6<?��1?l4wWD���ʡb�x�{�u8_��ԉu��`��D�P��.�ύ����gq��<�9ws��1@���ۺ�:d�l��Q�q����6��g�X����bc�bD�WK��G�:t�rog�9�+ڛg�x u @��t����� ���:ޗU�d�O0I�I;Õ7�ʮ�F�����kܗM��˖Hx����A�u����Rt�G����E�z2�9�cW�|XP?��=�VaS\jV�S)¸�M�|3ͫ��z>�4ۥ`�4�86���K3���64�����@�0���u*�U�9v�m�9�$���νh��>����3 +�SO���U!3���}*���%~>ש,{�/�e�,��,plh-��ɩū}�W�n�$����d)�֔�1�� ���Z�[ɭ^����λr�!�}4�Q~5��4�J��l�o�7P\ +~�i +�<ߜqvZ���MLI>�ߚ�3�M�`��z.ҥ�G���_�K`���裥��Bs�[�C���9e��u�'W���$�X�Q�?K��/5�;@�m �e��W�_W\ (��N�Hş��VH8�2r]ʺ����~��E{��ɽ��}q�{�Ia"�t�>]�l��D��M�(�e�����*��8qlK��bQ�{IQ"�)Q�Jq������V���)#b�����Ep�}��{����]�6>Q8����w|�͟���=?���{~<����/�{���{W/��j��'t��W�.\z���{�Oli;�g��H�V?ybK{�-�|���\9�������e������}dѺ�.�Y��ٝ�}�7?�{v纑s�֮����5��p�?dN�,=�����V�:�o����y`�>prS����m��=�}e�r�?xv���/�y���y�`ҡgf��G�/�p��s���������ҩ�V]�����^�㹓��-��eM�W/��]tvG��s����o��m�{zG��^Z6���g����� xf��ݝ��ߙ�v��=C����]yeߺ5'���̢�����ϭ���������s_\���C�W]�;�����7�Xx~sOˉ ����/l���Gn;��kʙ��s�xg����U#��w�݉�iG��~l��{W/�]=py/�'�� W�O�~�|c��g�,o9��w�M+������~f����S/��_|��E�;�1�?ƻ�_~����b֡_,�|����O�����_�o�8b~���gM��g���[�8��ɧ�o_�{����@���c��o?��2������i�l����mkο�v��UX�x���G�e�|��mˁG�����G��ϼ����Ү�����|w������?{�o����;�����Vuy}p����~���w���#��<�q�����ǭ��ͮ�O�� ��/�ʞ�Z���o7����Ig7�N��f�̣�w���kݳNn,,<�iM�m?x�����#��ݱ��ի���ۅ&�:���zr[�b���䥁�?��C��s���D;�{�����z���s {.���Z�?���ï�����{?~�c�W�a�cVw��9����W�~������}sŒ�F� �߸b��gy�c��-�w_�W�]=���]:��/}�1���-���U�\�UXv��̔�?�+v���;��>pb�SO�����_f����%�<����CY�G��.�Kv�g�m7�ܞ���}�_/�[���[��?��R瓗�G^[vǩ���r`�C��]������W��`˯�z艟c��K�1ߙ{����3�����ڻ#+����ώ���h��|�g���?���K&����o�������3����`�,�����;������yd�W��wՊ�{{��6�KK��;_:��u�O�X�h��3ƞ_,�m���� +�y���-䮽]�\=P�<�����O���5}���:���o�����z�qjCnڹ-�W��/��o�������o/�6��]�}��{�wf��f�C���/��f�p�����Mk���>|ˇ�y���i�,8�k(sv�`+�������=��~��W�3��Z\pfӣ}x�m��,��Mk����=�y~����ko����]O<vh}q�'��*��G~q�m��P��W[�<��������m+f���>�ad٧/��yn�p�̖�9���D��e��M����n�jc�]�������<��g.�yNlx�9:���~��м���~�?�b�O��W����+�)�x���uiWn敽+��ؼ��ïv� ����{�mx�:��o����u����K������Ƿ��������������L>��k��mݳN����z��m�|f��#��Pxp�����Wۧ�_�q��٫�Wt���v��]3��������=O��7�t��t�}��e�'/.6���ͽ�V>s�@����%�L��e��}+�Ƕ�>my��;�F��⾞G~�����<zbg���-�-����q��%���#���/s�z�g��ݴm��{ϷO���ny���{������w�������~��[������3�wa�`������}��^\�}�Zǽ�v{/�-�}c�wt�R��;��d�R�� �;���j �F�N�Xrnw���;�k.�/v_��9���Y�vڎ���9�vlS���^�z��rޤ�?z���zz��#�ϟ�އ5(K<�q���퉝��W�}�Ү�;�:�z״��W��xkdŕ��e������rl���6<� ��j���-���Y��[��Z~u��O���?�̦��s� +]�8�>�������ؾN��C?�/uzs��K��rW�zt݅]K?|i��֯����W����λ��Y�ȕ�Ý��>���ON�|NnH�G^�|�뮣z�=�e��{��G.\�5�vrS�C�,�α ��/�길{e���,�����|��_ �:�� +�W�������9��B��+ӟ�6�й����x|��/��6���#�W�*\~{���+����e���Ë����C���W>����x�{��w �������O^��q|C�������Cm�]��~��F�Q������c�Vw|����yzx�{��w����ڧl���?���ٷ|�~�~j[߂�;�}�~��㯮Xxn�p��Cm��2��88��_[=�o�f���϶ �~��?y�o�l��Ҟ�����/��֊�g�,�kϏg���_�;���:�����}�����y/���g���>�K��=y��Ǟ8�za��gs��������nk����ܭO��͏�/�Nl�sr{�"��F�m�utsg�]�s��\��҅gw��ڹ��^_�]�[�];��g@�=���������xghŹ�]����[?�����_����7f�����������˩��G>y��>��/��������6���x�<瓗2w��=��[k�]}���������]3/�+d��Mz����]����-���7�~~�p�"���+��ܒ�}�`ql����.�v�g��M=�����;��1��ٝC�W�y�_.82���rS���;�z��}C�o�����>��h��֑���.�9.�����ܮ��}����>����s?ې����ޖ/:��GŁ/>�k������[���tzC��3o������O���Y�y��o|��������`�;��ʜ�:�zz�����9�e�vj�o�x��;�F~Ʃ�+ۏl%?��}{��S���_.�t�e<7�p��}�V�_�^ٿ�py�H��-��~���������ǿ��O����Ԧھ��4���zg��<������W�8���<�j��o>���'����u�| ��̞�/�]��E����������-�<~�k�����Uk���/�r��u���������T\xi7��[��������֎��ܿv�����=��9�����9�������{�o\���K���t���=������b1�����`�I�'�_�k9�y������|�7]Φu������������+�9��H�G�uNy����Y�����������?���[���/��~iϺ'�����so�*��s?ʑK����������w~�� �����yֹ�#@+�W�Z�tc��'���:�{��ڡ�O^;��'��wڜ�髹�s;W���l?��#�>�g��>X���@^�-�?W����]�w~�r���K]w��� /z��m �ž�9�}0�����;.�^6�_��뷟N�v-?�c���ߴ������[r���5��Q���{������5�w�x{ +\�?���������L�?�юG'��� ��߿7<��+���~�;����� }~�G�������\�uD��M��~�c�_��7��VX_��+��W���N�l�w-��{���w�h��?:�~�?��{Ww.��s���{ +K.������{/���u~{���[���:o����y'6=���[�V|�n������Ƕ-������<�|nڕkW����/�����^��<������/7���{���~�� �Y �֞��얮i�~��g~qן`?Ƴ; +c *��?~�w��/tz=�=�?����{+:/��|���9��p�=rN����U�����sڡ�g�>~nΤ���\�weߚ�c�V�;�{Uϕ}���O����b������o椎���ޥ]k +�����w���3��Żk���o sjC����Ճ�6���������0��[��_��'w�̺vh���W=ve����k_���Ч�n�]A��=?�����Xv�����Ӈ�����^I{`g,��͵�/��*ݴ��_nwNo鼴gd��]�No�iy���o����������<�ja1�֏��vz����-��d���g���ݿb�}����_=r��'��}r�`���Ý��Z3r �'wf?��}?ֽ�zc����?{���gf��~�����ڿxo�cW�}�����s�o�����]�\<��O�Z����>ِ���km�k�/�y���w<�|�;���5��[�ĉ�K��x��O?yn�wNnmuO�蘎�}p}���������'V^9��g/��{f�C�}��}��S�|�;/��z�w�����m�������ӗ +��W]���?�o���P��K��_X�x���qt9�U��糷��=~������k����W��;��m�ޟO���O���gwt/���㿾|p���Z�v���������Wv��z�����w�m�ϻ +v��_�����k�������k��A>��M��e�=���'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~Dj�'A��~�� ?3S��'M���}Z��nXxoä)�Y���9�b��0�aR�mS +�i�L1��KV�n��$��ms���-�d +J�*�:s}���I�doM}��o�RzJ��-\��踦�dSw]���9^�ei�eh�&�T/>d�M�+lᚦ���z�!���纎i�&<�oy��x���C��U�P�s] 5�5<��n�5�����`�\\��������",I����3�}���b������S��T�h�ُ��k�OsL�'׃{p��+��mg��̷g��Ц|�?LN�2������*�������B:�D�+��^��Ή�m��K���)��}�E״I��n�ߗ��x.���~t(�3���ڋ]��/�K��T��ߩe����ήb�(����)��N���J��b�k�'GA�sT�m˳����`_;�mj~�R�:�u���@�zg�Q��WV��ʚ�c���1����tkELm�=پL�ҥ�W+\ ��q��R| +ف���E�z|�q���-抙Q�T �zz^�'[�X �3��ؤY�bז��SȮҭ\�D�sE��� ����CU�]�J$З�_����+ހ&�ΫP���}�=�͙�,d�����\�bs��� ��ո$���B�!d�8`3�j�p��g�b�P1B�ƍy�����\� +� Ӳ�)�6-ۑ������Qݹ�f�&.`��1a]��B�ƞ���@�&N�;�����X�%>`�&>`���'>`��9�|�*0�#pjv(�3�+ݞ����F1Q�j0��.R[��(Ұ�\���Ёb���P.���4�ȱGq��fō��0==80�K�M�&k���wtd���}�S{�b�}d�F�պ�S��T���W�#��"��?��A��3��|���Q]��Z�Sy�Q>=������f{҅�G��}پ�e[�űDzZ$��}�� Yzq̑�)�e����&�`��Ph`�Б�de�w�4z��<p����YU��S��w��*P����b������-��nN�2;Wj�icԟu4AN�hպι��B�N��tJ�Ȅ�\qv:7��\BaB�X+v��+���!*�Q�G �1kzG��1jzGFA9��^�@���t!W���+c_wZ?~t�y�z���:����$��[r��}5����E�Qs>�3��ͮ�8U�UG_��'�Uc�G�+Fd��WUOk�\��V�H}Eknn!��Ԟ�IW^|��lc���*n0PH��+����3����|O��ba^;nK�/j\�M��t�LKdZ"�nHTwF���ZŘԋT��_mK�Ƥ|�F�}��h�X�Լ�\M�\�Ը�:tm����kC���I׆��NS*�7w����=s�=�L5P��1��9G�o���c/�G)Ʃ#}\1&�>�][����*&���N�T~�妨�i����t&ۛ�+�H�ןN�M�P'`��W��Ac-��1��\�ެq٬���R�_�Я�bL�Un���DZ�'_�Q���E��V��T�B�bL�EHT~v�;�T������Zᾎ���:r==Ք{��ö�����k��h���W^Gx�v#J�|�a~I��W��_C²�.T%-����D*Ʃ �C�<��O������z 3��3i�byk��}�t&3�;8z�D��+c/6*�������c�K!K>~�[�ޞ+憪�(��ڵ�: +��ʕ0=<N�I�/�[�ܤ3*���.3a�f*Ǥ^ܣ�S6�&e3����l&3a�f*Ǥ^�X*����סlf��xYyW̤pf��SR83Q +g2�p�rL�\��R��T�$%�3I���5�p�rL�F6O��=)��#���0�3�cR/BbB�T��ꤝ�W�"���*dH�le7+��2ٌ�m�Q?{q��1�s�0-#���:����V̫��-6!�O�=��k��y�V�|���ȷ:�o�j"��vw���6��[�u"J��zK�[��-1��V'�-���V�t��Z�+٘`B�b俒|g]e &�����3U�|�D ��hvn$�3�'����㢵X �5����RV��u<�9U��ި'9X���G;�__=i��>Yh)݂�j)��d�������ŕc�l��=ۑ����`U_6]�VE���c��@?���zj0��婏�<j��)���Ϧ<z�4�t� v����F6�bJ�Usy����z9'0�.��d>n�M�uŨ�������@�58 +��GU%�j<�v���Z?G=ڲE��q ͊��[.L�fm7"�j]@T�Iݕ˄�� A�G�41kzGF�� +"b�r�^��ZW��B��՛-Vn|�Ui��?nH㔜B������|�b�)�?_�$�_���?�>cZh����$�\9�{�M�sNr�I�9�9W����smF���sm�s��$tR�9��\G�`�w�Ժ`��z� ){^q�T�es�����w)�ޘ��2�ӓ�Ϟ\gW��1�mo+F3���G/*VX��� �V�~=�R�R)˄�p�����3Ǭ:�����M1����k�u�'��=���B�}r���-+����z�Kbs_��\5�= ��p�.��9 ЍA������KU��c�>nň�W�z���$6���E����lAQ?ε3���m�Z��@�ܣ��f@���SEl ��8�{�Ų�H��1�RM!9�R��8po'z�� +��Uĩ�`��sd膃92�C1�$��s�`N�I�9I0' �$��1��"�L%��?d*se0�~CS8�q��zTcB�-N�sԨl��g�s��g�O0L�2*��5Dj�5G�=Fj�5G�5�5�:��u�B'\w�jm�ZW�Ig�ZS�Ig�ZS�7�P'*t����)�Z����̤�Մ�j5�+ݞN�T�������4�W-9�_S����;:�E�{!�^���_U|�i�(�6X�12�L�"��7��K���q�����V>��z�7�,���M��~�%q�j܉�MmR�t:�k���J>=�aX�r�����d���9N%W;�]Gݣu�bR���ZY�TnϏ$��v��$�Q��X��m�r��G�?*ߔ$�Q�J8 \O�I�����X�U��$nu]g�; +�L1�33�����_�peԗ��Luq� +��x�q�ԋ+��y�\cލ`n1W̌���y��*�����צ�{�����+�}��݅�[c����o�w�ʡ*�.�J=i� �)�BT�]������)�+7K���Dm�T��O�]���?���b��j�$�(�{+���p�tS�)��y�����buj���q�*��u8���a��N�*�*0��*���h�s2�_/d>�FT��X�uh��1a�Њm���@�&Z���.�&x��⒡1�'>� 4/0��b�I�����{����L����ʖ`��%~`}��w��O7�b�70q70q7�Ɲ&k¹�U`TGn�C�|{g!]9w'>������D���d���UϮ�?��FŎC��ט��}'B���"&~���]j :�I���f=�j�}߷���3ݓS���3���۫@W�T�O����j�6�u�]27,�lj��AB�?��~����&��P�T�q���trJ"�u��W퍚5.�D�^��Dr"*��"��9�7PL�vQeУ��7�(wU�h���(������Ɋ+��Lvn&]��z�v��EBu��ީ��:�܄�eW��'��*xc�iר�5ӫr��U$�����Ԛ�#��RMR�&u��z�E +����*�}�.��{�?ߗ�B�_�]Q��Z��q̑���}�71'�aXg�Sb<%�Sb<ud�J�U���V�7�Z�kޤ�<�����/�N�Fs!�O0�M��X֪����A�x����8$��Yӈ��t+��Q˱��Q�"��"զ k^u��bWo���N���q��ֵg�".ў��#5�=+ߑמ7�O't�i�� U'�JN �ho�͛G���D�Ti'��s��:����W����[S7��_Ͻ�z�0T��8�A�O�WF/�?�^��u鮧4��r���Jѥ�*���q�{�0`- +��|�k�TdB:���Rdք?^�8a�p�I(k�w�bG$i�qsw��Ha�&`����Zg�۵��I +�@BT|��^D�^����h�߈tO,�ڙ���=���|�[?��b���u����HUd'�T)�3~���2s�O�L8bkrRZ��An�rrӿ.�m�8��?�]��}��vQ;ԏ(p�{"�p7b��z����%��$rrCC�xSzzn�l�w�Ƅf��$��f��F���4�>]k���ݿ� +ABZg��f�����S�����?4��1L���+{��= ����S�~k����_8��d�)� �:��+�/��/�4�2S3R��h�v|gN�n��ToC#��B6�/�?�>G�����0`o��5� �s��AM�n���\xj���H�h�,ϳ��٤��k.<�n�h2,��!�d �HiM��y~T=ԈO٦ 5R#�4C���;�b�{� �&��CbR�% �ܘ |�-�́�((�9O�ʤV��J �u +V�L,Z���d�=\�τ�����Ql��B����J +^���������H�gv�Б�y���C�[=-�3�v^�bin��gh�郹v��Z�8[��-��>�S����H�gm�k�4Z)y6�{.P�0�4Ow�t�7��|H�i�_t�v����f_i>@�M��!9.���-tӻ�%�݀��&��EhM��&[X�"�&aj���=+���� �I5ZM��h���5��-Я����6Y��2E;��j�/�M����=�raL�qC3�؆���M��b ϰ,z�Ɓ��)�f�i�L��c��4���7� �K�5�&.��5\#�;M��u<�K-h� :��+J� �,���X.r�n��̀��Y|fhK�������µ����П��_���|5 �.�&!L��ٖi�b�G�p+m�G�zw��aaq3�&��a��������L����`@�����H�8�����z� B��A��Xi�I�t�qpWs-��_r�t���Q�%�a� ׄ���b�&N�tl��Q�p� K�p��8 +-�2�����4:��Pd�T�Q��&C7���4������_4&?O8Q�o[�l�$Ӆ���҄F�%Hl/�ͥE��Xv ��2��#l0ӈ&�2MD������0| ��������qs]�6,5P��9 =�A��t�0P-�:�`ՀU��4����4`p�#*��3�r`q`q 8\ +ǵ�����5�OӁQR�9x�5-fQG�m^�H��B���b!;ۈ�4� +bH�]u��m!���;�ĉ�� +�q���f��POvƴh��<��� 1<� +�"�(N�T迚�� ,���m2.�oX���2���s�`�q��5A�Ô{c��������%U�E_N�@k�1L�f�{&��,�0��nkD��2� d˒U�{����L�%18��@��d4�=B<OCl��5Jr�+x���дˋdK��?�9C��\d���q�#��O8h?���� dY�t�f#?�.���I�D��=�n`$ <$q�+�l>T�dTy0:�u\BC�c�:�lu9�a��1P;d` �@� �y���e0�4�]��FV�¶���VL�A^q5�l2����p=�d�f\:K-�c������εB̳�,����Ŕ���0P���C��m�FF͈_ ����k��4]���m� E��kb�|5��5�T&�G��s.� yg�AD��.Ix�^W'SX�p$T�P�N�E��P*|�u9� +��[���P�s ��'�d���]D���GlgѮ�Z�H��㺚���5R� f���2���p �2@5XZ_b-�L�����24I��H���ƻ����X�s@���iKyh)ta�Ѝ���u͘FR���m�CLr�f�����M��b��`�bZ@Ww z�Q��r'��� ��x��IhE�pC��c���� +?�y�� I��@�i�]�r+[����v�˛,�/6��Y�K�eXd����� &.! �Ng�� +�� v4=���h5Z�&@&��k�{N6��h}�Jl(��"�n��X(�<+0�u�;@Zl~�M����co�f+��ޣw��`t:���m�P0'c�B�T��0��vq�H��!��o��^.>!L�I~�n�#5�M��-~3-�m�h��!tp��M{Y���J���,�"��0�R��۩���h����G+��hI�t�7ÖkC$�;o��� + 0T��$���H�b� :�k���Unu��f`�I�;�K�ax��qE�� bE��1��R��pgEJG�L�(%�f)�=� =�� �İĪ��<���z �N\��L�:y~�c���5��� ��4�r��K~�?�j %��v%��Q�6�?��Ģ/���2�+��%ׅеL�#��y����� 6�\3D��֡�ey�P���O��!��%0Q���N,M�3} �S����c����ǚa��gU����@�%��j�u0l�RXbF*�0��m�W�z��l�0�:�"0Z)�A@e(����uH�3&��s2X- +��l��T-+L�� +������o�#��H#bH3X;�Sȴ�)���p�e��ټEk|S\V���{�?`��@XK��W87�Y���� ��XQo��.m���E���`����;��.hv��E�# �E6�]��-��0� I�e�p�e����0����ޡ`@I���5 �.0(þ5��͈��q�Ä'�^���T�`��B�C$�:a�����٭��5���g�7�3��&�C�G<P~�(�Pa�w��Ȼ��E3$9�h�Q��J~��pt¶i�tפ�a�'����3��KN]��f����0���:�9�%�Յ�P�`%�J&N�(�{Z$ɚ�3�E��Y���|`@CB�B���Vg,����H��L,*�`������R�M�0�������1�q&L��&��(��V�١2V.�~D#ɂ�:x +`8x�������N�8�Ǹt!J���QN�;;ʨ��:[z,6Ih��δdN P�{4`q͑UQ��V��6!X��$�� m���%z���h���H�b!�X�5��d F#�'q�8�h���e�� ��%��iR��5�C.D��z�@.����n+�X��l�A6:�.�B3Ч�B��`*�� ���r��3Ҩ���X� !R�]c�fb�[�تfʄ��a�P =Ӡ��X�I�=\�Ce��6���'�) EI�"a�X�5�e�7y�L�Ù&���A���`/�F/� +��qaaO1���A�@8@W s�m=e5f�9�9 +�����kD���[1�in��XKy:a8��G�"�Ѩ6m�B@Z�$Ar��76�T,-a�<D� ѳ�'�x���6���cAm�j���C�0ͪ��۫�Jt��\Q��_vgcc��Wǂ�-e����*e�VE�H��'��m�]��O��(�u��-��)¤b?���X��b��dLY�6�����o��cZ)� _n����*�uo��m�F.�jJg.6)�j�����C~'zT*zWE�1&����b����Э�Z� Q(>�J�\��0���aD�M��RK<�yu���+)1�,Q����l�iwZO�� ���H��@`0y��%��0I���$(I�)R4��@� +��1(X�v���ϒ��n���n����QB!E1p��lR�FHwT`�E�,c�U.�Eh��(m�-�q�!�����e,T�wb�`�h&����q��lW���|<�/s)�D@4YK)d�kc�sT���@) +t��,��]��R�!�H��S���S���RBD��R�.��1�P.Gͣ��H��[Œ[C �͢c�0NҠ����0��Ŧ�!N�M>�系i�8�䫆�f�♯H�)���i!�q�O�d�2��u���*�B�D9h����DL�~����J�%� ��ȗ4��S�B�b)-JE_��X$��\>�N aE#ϕ2U&gNd*(A���1YT�2��q�@�X�e��:Z�pނ���a�E�)M|��ɠ�Ϋh�2P�PE@� +�Dt)8ٵ�mE��_M��)FfQ!��!���u��Y��]�Hhr�!�I�����lb{�}��1eΊ�0~.��.W�E��s���a�Δ2��L|�bk�� �4G�aIA&S0����A�%t��Y82�)G���ˑ�7)J�7�=6XmD��r9���yM���t q���IlW�k�#Z2A�ՀY�2�Ӧ�m#���"ʞZ�A�aI!kk'���B4���q���h�2�qɓ%3�h2���HW��SDC�)b5�<�Pf}�k]�%;L!���F1[,%�,��<A,.?@��V�V��hRv��L�6�ލ%I��\e�H�� + +h)���O��2��(�8�A�UC#��y.��z��f�-*aN +�hڕ�D����P�fbd���2Ú��G�E��d+�kd;l�Y��c��LC�$v,�M�g(-"WEc;�O���bY�zgǓզ͔;"7W�f��n��L�]�6/���4�����v�xGCl��&����@��2��29�h澹l~?��j(�ȍ%{�a^�H2:��.��v���0�b -@�8��=���2`3]I�FJM +2Y&�P�GL?]�P؊ʗ0�k�!:��e�:?��Q�O�I[jR="�2����`z�&�CQYZ>�����7�.F���Ƒ]�%����j��!���X��L��x����۳_���鑍��UlG3 e��%��:+�H�=���$�Y@`.*�� fK���=�G(%�+�sK���1qN�?F�L�h/ n���7\@��P4�Ti/ �/¨�G�-E>9��oS�9h��Q�Gȼ�$��r��#�V�=/�[���a ��_ ����t� �1i�S����3gP�@&�c��vQ���$�*��am2��%"��"��Ua�SgPe��8q��1)%� 9|��"�YW�-᥏mNt�Hy�����&��.��H(H^vE��:�&A�V��^���g��7"5<�b�X�p�(� ?�i�.8��"ҡ +��,U�@�V��L��G����:x��.k'�ǣucpx;F,��$#�0�5�!�Vl����CP��T�a�h���`EI��$Rv�"!R�+ވxd��Ò�IY�5Q�mV͑�f��P�A3)K� ����zǜ#i�l-h�l�B%W���zv�GȐS�c�ØG,N�"%88��(J��E�U���0"�C �Z�X�E�ʀ�4;�.�k�m��={[���Z���(n�|/�E +fL44)wc�Hz�[�m�<�L���},�ñ)M� +�IOڔeFZ�:��"����~3�2I�@�iO�)���H�O�(����`RX��ҡ��yɴwJK�:��j�V9����n&Q�E~�+ " t�}K6Z�B�&R�������:37�|JI�1V|�"j��ե���r��1w��������m�hW���XvFe!�r\?CL+�C�6���,�Ud +D��D�!%�K��\�y$h]yp�|1�;�*��:�]"3��œc.���&�6�~�hb# d,���!���ȱ`<��[���vF�~b�Aek���P�'G�� ��2}�A<��'�$�1��:V`�{gHd�w�NMa��X���l��)<G&:Q� ��"��L Q��(V�-Vʔ��H��99�!d�����5�ӶCYr���g\,B�5Y]�����5��Z]W��J�`-�@*��J\.Kc��t��O�� �Ǒ���c!6�LC�YG� +���'� ���ɔ��,���1G�����ĕ +��A���q 5��Be`_RAUVNj�<��h���d>�����rr�W��7���RSu�%m4��k�LL�~ـ)� i)Fd�� +O�+�T�E�ei�B�%r��.�H�B�LC�R�h�X���9Vn]ˡ�Q0��iq8����]-�"G�l:!Zn��݇�Na� +����R�2��X��ڴLC�z-Z�.~�` �Fb��e,0��G�P+R*�&�M(]��E���p�Z��-R�F�H^�+�6��'҈4���ldG���e~���44J8OK�&qM��l�nܗk�V�����E/EC� ����4jU�b�pHsC����WӉN�=��`E=C%H�*7��Q#%K'Wp)�� + +)t�m�F�نbo�r�H�\sl��S���N NKzt����#�d�KE0�R�L�B��!V������Ɋ�l����(H�T��)a,U��%7��a����Q�G���eJ��ɫ I�8S���)N[(��xf�[��aZ����ˎ6.���t��TU�Fn��ƫ�2 �R�2�z��,|+R���Ue����x��o�2��Y/����b5;���H� s�qb�:1���R`�D#������SAZ1� rh�|+O�w�,��ru0�e�5�Z�LC���x�E�2� +:d�]� ��υ���J4�� ���leJ�dډLJ1YT<g�I-��M@ǓԱT6�P�^z�v�5��bO6�ߤ��I�x�4�@��f$�V.N�#K&�M9�2ކk�VE�Iv�'u��ˬA<G�#ij ��D,iT��h��:�)�M��X��_����pP��D*�Cҥg�y2�1�h���+-) ���%���d,�T�kI�.E�W"��h$*E!��Zʄb¡�.�"~�<�Ba�U�[q�XV���cq�1�?�>�;�i�:�= e���Q6 +�B���v@؇D�.�fF�Ј+�b;v�%r&��� +;GQ�)���v"�EĀ͐E���n��R�v�L�D��LC�p��a����Q��Q�r�1��5��9B�=�Ι� .���LKz%ֶ%��%laI۷�G�fMC⡣�6�lKj�.B7�����X-�Q���2h�RRУ����X�jb2ǭ,<�C���,<�)t� ]T��#3+ؓ�vQй�u����g�}j���W�ȼ�J*�Z=�Ҹ �+�JG��-e��� +�H�6�x@���&�0����c���IKIb�I#�+�5����mTK�O�<ӈ�\��4�6 ��as��h�#F�_���#N~Wm<u��C�y}�p�S��+8�If�N�VZ\|��hO�`��!t���������OS�!Ҁ�>q�(�L8xHf�D��i�ӑIJ��\~��r��� ��U��R�P����jo�e�/�y��Q6��۔6��6�t��q�^�:wH�D[Җ�SZ$!;�!��H��Q�����mA�aP�9ZWl��C�P$�||���'���ju��� ]����}>�@)\����i����2Ke`�� �Y>dH�R����(&R� �Ҩ��a�P �b<!�f��)�e����U�ׇ52�Y%��B6tK�1T���+�͓Ȗ�Z�E�)��2�D:6(��qum>���Z�gW��s�2OQ�XRM��RϘ~�|�[Ҁ�\�N�� +zQ6� :.o�|�� �䢰Ш�-��/�VöĿ��GN�z{Jy{6��P��_�'1���<v��hF&�|�������ߦ9 �fTbI�Y����g��Dۣ%�F��L~S�T �8D|U=���R�-\�l�Z�M��E��]�Z� �$�a�\i���?'?�����A�c�D�����XE������FRE�T�jA�\����)QZ���4����yP��ᢳ*JԢ��yg�i =2�Qz��R÷ĿH����� %�=�@�E���2d�&�n�a��0���Cj���i:�N��P('��蓊T���R.)Ѿ�i��hf���c�-�o��VUddr�*�(jB���:�ص��C_ȕ,��s!��}뿫�?�R�-Ԏ�#��AL�)#�Y�� ��CځAG�Ko�g������n8�j��2J�a��<-�DŽ����u!Ͼ�@��f�E�)��2�d+I�C������L��@���g�7ח.f�S� +��l�n�Ad֗wG�n����� ���ׇ��H��O����b���j�ȅ�4F_m���T��~Q���~%��rj � P�3S�`=n�߇���S��t{.�WL��VZ�H\x���vC�.W�/TA(\�)�o���[�,�C6իy�E3!0��9����dao�B� c;� ����jdz���-�՞� |L������4�L��_ZS�h1b(��`�����װ���X�EsF�������n��w#��C&2�c٘ߎ|��-�7�M���w�>D�w-�S��\�k W�l�0��q$L�Q��0$�Q�C��5 o�6�dH�1�Nl�tƏ!��F������X)6*m�l/\�w�̈́j�^%��2m��}#��1D�&�\�X�Na&�I�?��}U�ExǢ4��,08�[��} +�� ��@R�B&�=��V�P�ԴgU�],�\��#,pp��/Y %���.<d�����-`Fäa�跾*��ϑM��T��T\����68���olא�{ ��l�8�Z��I-Kd��v���G!8�Ũ߸=�ѷ�}�16���\�47�#KH|���Je$W\�47�Ġ�G�r +[+��57�ī/fK/��Bl1��9�Vgz(�d�5/�����6�����a,��;x�0u��R3&�^��Sht�&��C��I�7�<�W-��Zol&���f�҇7^yt`̮f��f���@jN6SL�u�|y�A�:�@m����떼�5���7���RQI� <�'ؒ�Kp�6�1,�O`Ө��a��47D�|HA��CBhX�* �\@�$�w���4�#K.y��h�R��2�H}�U���Bs��iQ��|FA�����*�:Y�|T��aAK���4ۣS�X㢙��0!n�[h�XXjZ&�� +�v�E5.x�ۡ|��S0���*��^lXbVh �ѧ����=$�rx��,�-��倘01 ����2L����y�M8���0\6XLX���d%l~�l.��|n�T��ˤ0n���~�$�G,Y��jyNM ��j8�� +xP9iS��k]�֔*�r#����g +]��>5��ԒB_�0= �Fc��I��|8)ٳ5�� +�RJp6�$gce���.�ݍ�bY����*�Ãa`JX@XAL ��Or�1xN.����V$�������rv�.���T��`���0��b�]E���#�KC8x@Iy��N�3�"������6hpBp�@ �-S��&I �ڞ� t5��XW`�x���'��T��ZTa@7EP�Y�㮐��$��Q��ߕ�M�J�������0��х �a�ǃ0�~i4ր�+z�����!b��5�`�������S�cդ�?'�֖��՟�{��ӏ=��ܽ��lPo��� +��6#ς�y��.U�`�<����&�cĸ�c�)< +����:��B��ka�I<`g�qU�<��%���:�셊%H�ˇ�5��.��01���S�xpHPS?<y���`��}D�x��Z�8w��<�-E��H=�� *�k4�t�fa��j^�8w��UsM>-�r��TX7�]��P-�,葩A��#!Զ +o�1�K&eW��*�2�M�|��l�i��_k��e;\nC�j�Q)�Q��t���g�0�b��mQ�A���Ô6�xHK���L��t �e���Փ��ԍ϶P��j���)6�xl��kd�:F���e��n-��=�+ݟ�ړ�k.�*1�-SZZ�>6#]�t��O�v��٩_:�}��#x� +7<��ԩS2���9�"�`i���,��+��{����1��Z��@����V����� �<��� ,���� -D�S��Na���"y I�'��?�-d endstream endobj 30 0 obj <</Length 65536>>stream +�(@`TP� �\�'�랩�.��q�����l��g��%aJPa>]L��d�aat! vF��ںE=Q-'������ݤ�b���N�S��p�`lC�7Tq���@]@�L�A���4���2�s� ]��ϥ�J�H��R�VW�j$�=�PJ�U�ǒl�:t�cVܮ��F糨i���SW\dܾ����0�Gm��-�g�[ؒ����$�l��dR�[`����H�vB\>4��M��"ǒ'�� �b�T>��՟ts3Uԇ �;0$I�4!��nj����][�|u�0��7��[�7���s�U:9�Da�YA�@U���������L� ��Giji:.1��k�f����%�ܼ��`�!�����8 +O<��6�?Q1���(�I�=9YG�%�,j����Vpt�ב�[ +�cY?]Y�ˈ �qa�Ǜ�w�p��H n�!���Q[�z-��b1KgC)&��P���NЙA~S +����-��)�W'ԕ�o�'']p�mO�KN���v��h������4�Nl�����Dp��u���q7e�$I�NX!�AU�6Q��ʊ�Ʋ\n�#o�ԩ3V*FvH�x�p��L�?�7��i:�-��5��j���jB��nL3e�Kl5����@BN�,���"���}���b�I!�H�#hH:�!��9n�b[���<���M��GK`/n�n��C��q�Y�����A��h�j��a�m�,|�{��65�ǣ�x����mp�ߟG�gqSw�n`�M[�V �gX����W���+������G�Kkf��q���&�>7djԩ +�O��vs�c��ws�X]����+���ɦt������� +A��?uRȐ�í�ѕ�c)�����K��m�5��Qu��3���ԀB�G���/��#t�Ĉ�.�mG XX�C�q���~xNo�<��=j;���x���u��ǔ���T�f �n�9D�B�G��P'���3��0s���`|7���G���dЅ��6��@:_AJ�'�G-_\l}��X�Ď�.��E�*u<��P��(���"_탇,=�\0������1� FlU�yo+5ti"ʖ�B�®^������e0������6�R@�E��P��D�:i$>@��]>r��II�0"w��]���e�*#��,K^x*lS*we��dFa̐N��-����ǖ}D�L�%��P �{�ܗ+FuH���4L*%��9����ؽ�#�BɁJ���G���7��@y�������>� ^x�]6�0���#���t��E5�t�t��b�>A�N��N�@��P|��BW�,�m�� ����c[���a|�{l9L���MK�0�0`�?�t֒�t�6��j��^>�����>N5��u�� t���:EruH�a�p�t�i��q]b8j��$HM�ԅ=�l�C�t��y )�vO��-�c�E.��vu�q�Y��5�X Ŵ�qd�O��3 +=�� OJ�tܙ����$/��m� /�9��[�q e� �! ��璛�[=tjX X|S�-<�jzR��`'�m��曅G���N��G�!i�vM�5�4 +��(��D��!�,��<�|�!Q�h�z�H��Rp�V�؆�2i[�t���.����P��^��J�|t��L�X��IЦ�<y����<��IU 2��q�ڰ�����HM1��'��n��ȸ����A��#;�~jB� g$-Z�8a4G�o�Y�� H\[ +D��>�k��.�'%�{�#>�VV�ԚU�_�e�J=�a��uE�^r�f�U����]!�n��٬�]����ɎhQ�{��1�h�����D +�s���@��V�rO�fYer�Y�R��nS�\>�mP�GݥCb�Â,.��4o,�����w��!P�j�H���o�v��4��'�7)v+�a[Z��-r�-�(υ��P� �P &0�b>H&+�b7�?0��9ynM��E�dh +l��W�b���ݓC�&�"Ď�*��hZ�FY�(��ʕ��=��oȴ��0]#�"�w5��u��rt���8ſ8�1��t�eMl�-N�<�L!�3�'B�t�5F��u� �t��G�i|��ny�>a���R���h��#��]*j� �豍CW�S�RC�6��8���`������2�j���+��Ւ?�Oϔ���9�JMd�� +n�A]Z��$��w���c��A�sP��G-�<�029T���O锔��-�����Rϑ}c�$�%�����L +%}ti��qlK����Ƴ��ʆ�� +�z��1#om7����Cyբ;g�}!_�#&D>���8B:��������曄LG�����6�������k��X�O�Ř$�a��h��y$�u��U^�D�<>�|�z��K���ż� +k��!��(n�ɖho�m�Rᰗ�A �R&[ph�#�t��1�ĝRN*6�qؙy��̬�U�'�γ����W�f�Kv���һ|���nP�)��3�t'�� �qS�jr�i^&_�K!ze�b��ѻt?_�J�yo��(�딮�*-��V��e�ImN,�# +�8�܄�f#��$��tɚ�6�7(�!/��, l^�o`xV���5Ec�C�x���t�� +�g�2^O��z�Ԟn+К�2�s�>d(���eԫ��ŒM���Qy7s�UfO��cn�"c����k{b�����Q��S:�ق��W�=6�n*8�nE�y�p����p<%����W���f���Gn��R^�ܞ\&�ȭ���E�����<j��M�m��Z"��꣒`=���e���@�@���4��!����4�.���l����kU��:u\g�&��[�h`�^x4z �����Zx`�^x4z ���40�<�z/<=�u�M�����{��=���[4�^�<��y��t/����L��zi��9��F��QK�V�6 +����8��O��.� �6���(���9�F^�79&e�S� �?q +��tZ<���G>�Փ�#Rs�ˬspۇo��SQ�I�>��!ߐiQ�*��0�-d�A�@]5J ې�r�VR���zSH���GE}|�|Ѣf���0U�c�B杚�z������,ϵC7�<>Ĵ�&�v��d(�H��1��)�=����l�n�M�J�Rr���m�7ٞ�FJ�h�N�E��S�Y?�͵xI�6 R{a9"�u��Opr_�n��:�E�I��� +E��9 +��: +umM�Q�ݓ_%��@x��@�%�"q�U��õd�� j���8��Q�Ћ��Ί>F;I�Y��|9:�D�|��FЌ=��)S1�l��+�L.�@�R����]�IVU���� �E�M�����A�E%�|�|��o<�=B�@wu2�[X��Ś�η"���a�-��*�&u��X��'r�Wq���-A� 1��t=Ō��xq[U�A�|�7E�9�} +G�ۗ�����h��v�T�4�d��Ds�E��".L-�%<�MS�pKbH��b�HeF5�Uݗiܗ�e�_$O�/���%��h��ݢ.�R� �i*/@�&$��o.1�tIi��P'R +>gɝ���L�Ժ9�*�%��9:ywo�L�AK��J�EA69��r����GMż�?]� �<���9y���g�%�1��c^�Gm_nS����S>^z)u��䠣F���cJ�oQ���� ���%�W�_U#����?p�)�#���29H���=HuP���/C��Ԍ^I��<ru� �"���d�8����Wʩ����YM��!k'���O{��)+�@�}���"��E�J��E�Ҥ��VW�K�#��,�S�EH$ ��H� jc�� +w��a��Q@;���� s�q��MJiE����<�T� R-R� l��8�� �Ў G��l�X�/39b�@���.ȱh'�(�qy%�"U�Z�^uQ_�ǧ�F���l�a��dUyN�q/mK�m�B��O +�S��6�m���<*��A +w�Y8����3j=Rh�o��U0]ҍŷ�#���v��2��d�*L��@��% �� Mj�U��|�x�9�G�����lSy��Q.��%�K�*�В�'�"|�gh�Lf���!��@�Ŷ䞙��*�K�d�'�Kf��t��$�R��h�"N���GhX��������G�\qf&���av2KT[z�g�|�d��MY�M̯,*�$��5� A�}�-�+�2 ��Q�er�n�����>����d�e�ѽ�K��2�/ќ��9Hu,94���a�� U��4���%u�Z)���jIi8����r�t������ZŅ��t��9A�lr�M�ev�j���F�s�!+�d/2hk���3�~�ziQ��j�R�ߐ�&�Z����vn�R��7��{"m���2�ذR@q��K&��A�c��Z�Nt�1��$`B�@�u���TH�����q99���=T[���t5u�Q E$v�9Et"�$���<� �80<��� +�ؔ�H���H0N h�7�`j-M��-�䦬�l��E�� 4�t�} +��َY�Ld�x���}�@��+ 3;�}R�t�$rȊD���[�G@�TJ�X)�ٺ��,5$|�� �L +Mrr�d��3W�LdI(���Q�A��G��] ��$_bK�+ф�섆�~|Y+!�Ds X��_<*/1{ӑ���%���FhS� �K\;N&�`R� V���H�P��Q�k9�O�`�?=l$��$��0�,�7�$AP�X���$�*j���� �2����76���~CF�J��!����kƀ� ȗ}�>��,�Sə��儅�}�֤��N VZ`�����禶��""����05pR�#(�$�"�M�p=m�{��z5 _�~����U���-6,�����a��Θ���ggL�ؙ@~v;���@&�R*�8*�M�|�RET.~NSsS67�E�4����4]�L3�nM���A~�&�4-�M�!�^"���QQw�L��W�#��Y�@^i�J@���O8���\��"���(��*S����i�Y�)����"��rqU�Ɣ�.D�O�� Q�7K%j���T�U��o)Q��AB%j��� ��1��:��Qu�>���`']��*��' +D�Z\�~�/ǡOp"���K����\��Ay?(-���� 7�� �U��F#���[|'3BJ�Y]�@���y2���δR��~�/ +c��lr)-� �����Ԡ�E�\?S��4��e�����1��� ��ש�AV��!�a2Qc��R\"M��E6���o����m��<ߓ����Sm��'j�m3yA#�5�JԘM����J��@���'�Ӕ̓�y���Y��5�<J@ͷG�:�@~Ώ�D��,c��K�:��h:~ƒ΅)���i�9�.�F�qK�#C�Z�Ў\;���de%�T�&�*ej|��25��I�������D�����xJ|i�Z2ʆ �� H�`��o�<g��d�7U��2�J� +%��sטj4C�Oa��M31B�i0��R�V ��R"�Op��B]�aA%P�\��>�@�C�� ͟WM��" +D��O��~0E��|�e���(�J=9��x��R���7��Q�c��R0p�Kt�h��C� ���.Ÿ +r <�� �YS �&�� +�P'���^E��)��Ӭ +� �Pْ_f�*$�18,��&�U:LrB���U��nؕ��Q�E��C��9ʠ�����V���n(š����C��w��Z�B0�"O��"]=�'9�����>(��(U���`B�F�ky�K�&]��R�C/I8��r� �nt�'���,� Ӧ�o��$�@/%�B`�2�a�����d��xq�-��U�+@����RΔ����=������,��丘�P�% +��@�*�t��\n!Y>� +�&��!�Hu��D���<x-�*~��V���AP��|`��X���Ӷ%A:��azw|:����!�2�7b)�O_6��':� o��Mi���^*ѡ �D�S�WD~Q�X���A�2�Mh�0)'[*_�9�6]s!"��,� P�L+$�1�:!�+lGu��MV*�_s/��(���~�G�t��J��jC*Q�]�N� +�WS�RH7��ㅊ�D�e��%���r�LpȒ �|�u��p���a3��T��t��Đ� +n��G.��� DI��� DITC��l�4��Ɇ�FH�m:쁠R6ɡ^ +0�g�������5A�A��B}^�P��o�L���'��1�rBjP&����&0b��K��[��>�p���Q!��8��MN�c�k'�ל#V �?%��Aزp��,��d�!(:�2C�x����E#��>$(bP�l&wB�S�=�y�A�����K�V�9_G�5�%�"/�/(��"�s;��]�{ }��Ah*�� ���s�����R>(�K��*_���?_�yiZ�R�ʥHRhk$���N�� �Z����=�3'T��};T����Pm�`��kI�Ȓ���0����)��f�%{ H�n��[�|�{E�s% �F�8}�(9�|�?8;��āC +W̢$fhU���]?��5/�����Xt��7��َ��R$��`�6۬�)�-�@�*��Q����W 7B�8;��<�;V�1��_��� �`5��>�^.q�� ��V�B���q�����mPpJ@[�:�� +�Aqא ��z!�R���J=�*��6��|,4$�->��g���]�1CZ��"UjI[X�9qI���^R<A����@��,�@�;��+ �Xqo����d9J@�Z�j'��}� jhKV��^�T@�@����.m6�� +l���p�pi��-�R&@������Iz0�9��ՠc,D���ۚD�І�Ć�(A� ����4��'�Q�T +59���)�� ]�?�&v��6�fD^v1����H���3ۥ)�&,�X�������T �S�`�O��F����c�"�����t F�< �$�y*�[AD�P@�$L��I�#�bC>� `� +iڷ�J �T�R��8�]�U�nb��չ�_�J�[Ȗ����l^Z��{fcW��o2w>�Ez+�����!�7��k�� �� YUvP����g�K��τ�a����K`c��=E ��"4��̝.6{Q���AE�L�@*� }�����Od !� [��:�&%P`�J@�g��;��%��@x������(��_���C�#���R_�����Օ��Ƨ�i��u4��5T�7@OA��&A�/��`j��,�C`nj�0��BY!Ar +`$ �b (�0�eYH����M�t4�(��K�a�7r�����w+V�!�Xq���w+Z�!�Xq���w��������*S�!�Xq��b��*S�!�hq�����y�b .��c��hCX��a�)�V��CX��r�%�T�!�Xq��b��*S�zΖ�-��+R�!�Xq��b��*S�!�Xq��b��*S�!�Xq��b��*S�z��;�+�V��aŊ;�+�f��aF�;�-�f��aƊ;�+�P #���aƊ;D��,�f��C���a�)��cOLHD[f��C���aƊ;�+�P ��m7�w�1�R8O���aƊ;�-�f��aƊ;�+�ᣩ\�!�Xq��_EM��,S�!�Xq�0c��,S�!�Xq������Ԓ���|QP������s4!�((I¤�����$�pg��;��ݝ�>չ�RWW�o�;q�s��^ +���\M�Az��!Ho�;i�s� �:w��A^��!�o�;��s� �q��7���ƹC��8w��A~��!���]՝i��lm�ϲ[wvQS��7�3j8�j��Y0�f�[՝i���+�3"�[w6�\��Y�ҝ]�������+C��cȦN옘���l�����ٵ����Swv� ՝�"��l� �e�;N��4��t��B��+�� �ѝM�Kw������U� +Wtg<�n�����(Ĺug<Zn��,���ZH��Fw�nݺ3oUw�i�ug��[wv-��pEwv,��;���ԝ[f�Ύ�5ug�ȡ;�p���@����+�T�[-Tuu�c&��ot�i���-Չ]kb�ѝq�ݺ3�[w6U����Yk +��� +BQ�م<���R�2�wUwvtk�8���be�N��'g��ٱvvc���kc[՝�*���TM6����7��Y�x�ԝy;JoG�pD�p�߮9c��S�@�Q[o�iq,d���B�h�� h���7ˌ8�7C8Fd�"})G��+2k����^�cc� +����0L)JYsLo���A}u���.��fG�$[5i�9Sof���z��a�~^5�xZd���E��Dv!ӛa�����,����Л�^��f�U�Y7!2���6�^ � +�Uʋ��,3���7C!�i�͖aC��f��.�"Km���,f|1��^��6�"]���j��&B���W�抛�b�;j�uY���!5�J�X`�֬��I��N��g�ucZ�U$8�fG��5+�0SmV�K0�:ji� +$��u��f�:�R������L]���ЮuzZj?%�Pdi�p�Gϓ�6�,TM���T��G��,3���B�g�|j��2{�E��,3 +�������҇�5�.��zJ8�L�o��2�-Aغc�X pSm�Y(ߔXj���T��-��Lk�ٸ��$��#XZ��@�M�eJ�*3]� c��2t����c��5vh�f�(�̑ш ̚�W�|��;4f�<�N8�4��1�YaF!�<!�2�ScV�>/Щ����֘�B�Ԙf���4fŔ�DJYMIb��Ԙs;DKv[c&K��J�%h��)ɦ�k� q�S�/Z�l�-�y���%�i�.�:��Jt��qt�EG0�.%2�y��:`�G�#-=�&�r�l��Rw�'��� +o�� +J��3� `ɻ�=����xO۱_��E�K�� +����9B>)f�g�'Ec��~p^#�v�'�l��gH�����)�;��M +�(�6/�7Ha��V�NrPwS�b��C[7ݖl��.q*yf��q G�'���0�1�ެi�o3���ɼ�p��q�″�'���x��:�\#�{}��;C�Ч�3��U�t��M�:�1�ý�zC�˽�7ɭ�^��d�R��=�\��a�k�uv��u4D��d2G�'Ag�/[�QK0p~b�H���h�=��I�tG�e@fk��S�6ڭѸ��;��%�أ��\�3���z������sUh� ~%ԏ,�-�$k?�����(�;���i;.�A����ȁRV��z���@P��Y�eq���cA���3eݘ�|�x�m��[g˷u��-�v��MM��[g9}��BS�3���[�3�HyU�]G +.�D��P�V���$�RYp:��z,���U�2g{��<K�a�����.d�d��*ֲ��:���]fZ�u�̹�LE<7c�i�F'��P��ܖ��X��H����D_�9*C@-��r�Ş-��_` �l���NуF:vMU�y�\'��uA �+LB,̋m@�6q�qA���h�8Cˮd�8.�B���j̾ �:������{���:���bO���y��:��U����,@�むW�w^�4@�!����51G�SL�Mi�j�9xS�qH&�d�+�C����dΗ��]�u���+zm����R�3�uRn':,�L%4��b>���o[t&]�pd�t�"�I�.��G�4N�K��0�͊��=�"�br�<͒���qkU��[�4� +f��m�4������<�K��8��1gku�"�Q�.��&3�ݶ�j&�vu5ݔ�ٖ ��ұ��g�gJZ� x�e_+h� +Y��B��5�~Yn.��#pς%qsN�ƨv-�]�X:�ТG4�n�f�f)r��@�к7֚���4���,½E(��b��R��M�fu��mֺ!�#�9*/���ՁL�"kE��l������tn���fٲ����(h7*9f��Kn���NJ�bn����]g����H��{���HP�r��3�w" ��^���%gNZM��Z����UJ�0�,��g�C��h.AK~�/N9���)�(��Ri�\i)�[�o�F�q��F�����%Fy�/�QJ��=1���3�I�\]V�)L���*����j}M�W����8�y��2��*�E6�r��YΉ�Ľf�c����e���W�_y~u�T�.�s?��N��\�V�A��[S��@�:��⭟YHI��p�����#�ɶ�e|�Mt��ҶR�D��M2�X>g�:a�t�x�:a�i �f#�$�\PjUdE�T��e�G 1�U� _H�]���4�mE���V�Fz>0n��nV�s�V��AA�I�� ����$[��y�kg|���?&�����¬l�Iv4ug�׆jBNP��oZ-D/̕B�g�v�5n�����i������7 E�H�٪9���jR ��]�2��3�M���q0�7�}q��S�8%��κ��F[Ѽ ub7H�t�;j��Q�K���e��Mef��o&��d^XA(+��scd�j�����.��h�n��P9�T퀶��Jf�%F�ј�L����:d5���9H�˙6f�6s8_3����� 7midf'����i/��$�X*��9D3-`L\[h�r��˙��U��v��a�Aʦm>Čz+K�����(-N(2�q7i��*R�wuz���HV^-�SE��Z�����OB��0'�� ��$A�b����.����\Y�B2)"gi���+��J�ɎB�#+4�9�2SިH�mg9�"���՚�k��ęT ��=l��B�0!�$��+DE�� +ue�fɲ�ˠ��w���n���d�^d���X�E�'�^d_�)�G;c����@u��E�@�r;��/�c�18���{����������V<�Ox8K[� +�$n^�h�����_]��M��?�4��ӟ�Q� ��h�):���yϛ~xr��Ԁak<F����-2���}��0gj�K7�A���Lٹ�l�dUY��'�)�m�[�@�����K�7���~��U��W6����m�/?&r�k��^F��:���|F�@�Z�5�po7�#B]T�F���r`�$��]I�����fm/�;7~Meһo�t�.��Ǝ�����b��s\��X2�����Iϒ����Z0H��]e��z�Xem�;wxMeһA�t�.����e��?��_��G��H�� Z 8֑���M.��+L�Pu�8�a;��.�A*D�i7��N�����."�J��>9�j���B�U�%Q�ּ)u2�uU�u}�[���](^{[n��7�#ۼ(�2��H���~3$s�:fh���Y��u�Z��R'\S1�MX�n�8�������:�(�)�L=~շ�N�������5k�m��/|�g��7�z�N��:�*s����n���� _]�uMOΣ�F�X=X����m5����}*�9(o^=`�ɷySq��_�D���v�֜V���9���w�`�9x#ͼ��wN�9iM�5g{-&R�͉X�� +��s��Lj��S�vݾI��u"��'��ǯs����7j>��{���k�˴��V82[�]�=��sH�dO89^x��$/ڋ�1;Y�sj<��U0�K��q<YPA$S�9���tU�Tr=�����fۋ��R�ո^�F���OW�A/m�I; բ������cX0f�FwQ�sԙ/����x1�����c:�-#v4h�`+W�AϘS�#� ��x� �Z��K�(Y�1+��Ȉ&3���;�_�w��t��p�'+;����H�?�I��xn�8O�`G��({n�)p'A-�}\�YQ�e�D��O�//��Z1[�o:)�%������:����x$�cmj�S4��e吠µ���kQtL������QXHZr"ᵞ�@i2"�q�%h�4D/�t��j���*��ƄD֛-�Wr��WX��\8�KJ�O�������� �)�zF�:�s0Ճq�0+6O���B 3�4�dlC�-��+�P�k����H4��ś&U��OlC�����x�F�YS�Rq +�shh M�k���HF(��, +F(�ؓS�<:}��%�n."Q�0�D4�u���0J�Ęp-��]���_0�-�#:����hŃw��[e� R�2�9��5�q�M����Q4�!j�8?�t4�ό��I��X����T,�z��p�M�ED�^�oU�]-�Ae@r �_`na�0f n�$�%D!c�|��� +7X�n��Y +s�kd���cPIÀ�dY��$0� \.ȞK��=]�ت}�"��^TH�b+�����hZG@8�A&RV ��B(����$x�J��q�m���XBF�����x�TLЩ��Ʒ���R~@m2E�u���"�����2D��b ):�Yf��"T�e�#k!ڇ��<�!k,2�βlƺ'�!����x�|Ur��9%�n2�]���'�o�r����u<`�"�"�^�u8]�s ��tI���RE���`M�#� +d3��$ѡ�@+e �d�dlMVh�Obj�`R�]Mj�ԝO�[i����T4J�}�L���L橗֡��2o +�U�$�8�I��t_��gI��3x�&����@�G`��.t "�5� �ĢH�-�D�N�1�&���D�d�U}Ռ���G$P�cFf��+�J�MV��o�0��W� ʅ������4��NPvE�DV1p4ǒ���S?RB�\�f�W�������,�����Q�C�GKtL����O�y�����i���C�}5/�a ��S�O�)!�4���*�.������MG�"�D�kY��k�H5#�Û3b7a�b�:���� +�14�ׁ"C���)��e2� +�h�"�/ABX s�qsaݰc����0S��+h;4��$����0�����I�T�N*���S�R���D���#��d����4�����xI +=xP�o|Ic�\@��X2c��,d#i�zD�����hA�}�Fi���Б6`�phL2�@:����H6���"b�-j(���!U�#b���*4��<D��i�3�Z�h���V$�:��<$�iF���8A%��%*JېP�L�� � +�-��>�B��G�kR C+�� *�4n� +��4ݎ +��c, (���q@x�OօY�(��� [�}(���iG��@*I�� +�<�a�)�}�ѓ���(�a�!Ԫ�]s�t����8�B4;L�$Q��fE<������4?PD�� ͍����N�@ fv#�D"�h3�t�ѦT�����R m�=�osw�:��Q���W�X�p�R1�YxFv�P�b��� %S�B�O�+��v!mJT�%*,)[Uh�7�0����4��`��iL�)g}���*�:9Fa/�D��T��=��aE +� +�#�q�,5H \�sX$e + +'BR�2Be� %BJ`ID���'�#G��jHέ��gm�����z�Q�x�/��@t +吠��3��A�D˄N� +���p�+a�������`&��H�y#T��}N&R6��4����7�P�(H�� !WQ�E�>�x*�T �c<�P�U��WE��[J�����@���C��CCš:�a��D:��yS!Ч�0�$é�����G+���� ��� H +�\�`yx�"��@c(`����7ѐ�8�C�A��l�"l[������lY� 3�)���� c��mW�b�H����4K��bc�^T���W4hǐ5yP���Q�S��� ��ق�~��E��ѶʛH&�רFe�ex�-=xY�T�Df�g�%�ʨ2g&�!�IҐ�#sLC�\�#ГQ�p^e|-*�0�P��E�!<�� +0��E +��a�Ɍ�*�4tLlD'7�r>!� +��2�:s�R������fx��Z��KIbD�q?1ѐL5b�P�p��� �NhfB1�O��:�b�nRc�C���HǨj�`�A�ˡfBj��,��=<O1CEG�dɦ�q��:��'�45�[xB,�E<�B �7��&C�i"�l$����aC:�^�B'\��(RpS���-瑶Hج& U��Pn��$/i�Q�(i�|��̸' Q ֢IB��$��<0zq���)�6;�X=�:L�H�GuV�e^3�������Ȳ�h��/������!W%G%s�C��nf=�!h��t�&�Q�0�����<�,��"���Q��R0�X˰HàLdI#��?9f�F4t@h.4�+�e]a�l���A�} .,�=D ��5��@7c�Af��n��%,��bou�=D�:�onU*G�,V"� ���d8ʘL���Qh�Q��t�Q��~h�F�a`�(5�nXłI"���0V�$0�RrE���B#S��E�R�&%�J���Me+ȫ�d� �͇lfP�X�{v����Nc�I�*ɲ�V�5�t�pn{�R��`w'�a+aP�i2�]*-�1Ű����I�io��4�^�Vh��@ԙ�buGP��T]�au@�lF�i�h�A ����FN��m�s�����l%�@_ۃ��*� ��T1�Y<0�V�eЌ��C���@�)B��z�\Q��mz�H���.Q�t��^�ઠ�N�e4� +�ð; ՠD��m8p�#�9 M����(�[���Z�E�J��z �N���Ss(���Sse?�qT��@ 0�(L�C2!ے�< �4���t"��|d�e*7���='�Άz*{� K@ +X4FP�8�/�J�Q����q t�C8%����,$� �$���1Nh���:�L�O�<LX���,����إ1�?��{̉�=�̒3*�e�A: �m*;Y��7z�b��4}�8�s���#����M��0/R�*8���y<A���j���B�ח";y�- G���E �p��z�y��&��� �$�4 �%��gr�E�4��o���Cȳ�����tB4����S�@�+@\(�>�*�� l����8+��<>���-�C����T�9\j^1-��`��`Æ���=��C[����H�wgx&3u�7C@(Y�D�C��`��� tM�o���FI�"���,�ds@'Dd�;^�faN�J�)l��AveI�x�L:V�\g�:�gQ7`�x6!��>��,J�4��MU�&T`dC+(�6 {� �<�H��B�^(�j�eپI�)�4�6�Y���c�C��AF�ie$}�y��ޱ��f�,�c-��4~>���<�T*�`�;�|��C|\���-���`۩ �W�(8�H'hD���g"ܮP +JNj��@oA�ă& �J��P�����@B�"P��(��I�u�x�R-� Ͱ����+ћXzۋ]k42�uGN1�b�㒵"'�pT��7�k�0}~6<���w�4܁Y���xS&�})���@��"�0�GMՔDC�z( E��xq�`��͵�\�X�U`<O��*�3E�!lH�V���q����6��-.ެ��_Hj��*�3N:���ئ0s:&!W��������%0�f 3*�����QQ1�+�mTS��0��~)�=�=��V�w�h/�B .!v"���I`�#?��6�^�1���p0�� i0%�O��-�)�u�m�� z1\~��s�^D�Wd��U9�g0�������G:ܥ���dқ��[�T<9� x�N���oV�8�u���m�x{�"���Q�����`8Q��d�C�@�a�E~c�1�ޅfN �Bp��h(�����dT�mCe�:PaxHnW���iU��~��L�H��0� ��l,���-@b��e0 ��3x�}�^�A �T�A����˰6^�xHG;�|A���&<K���!Yb���e��:���r�+,%ZLp ᶏl��W����n�]eC������B���6����O� 6P�cD³ +�$\�������;*, +)%��Z�H`U#%D�uV��H�����MD�^),R��.k��i�Oe�q�E:��doD��\�U�L�H�A�#B$�u�ҲȒڀ����������2�� +2�iTX�D`���E z%<HG���x���;>�\�n��?[`�l�Y�I�*e�%Dk�py4k�����eh,���>�S�I4;�x�#���&��0!ԒFPL�����"�H� �0h������A��y�I���~�����r7#�#sӀ&���nاLQ�!��U�7�Z>m�W��J0�/��Wd��ы��~��3�u�@� ,�Z�DLѥ�o �. љ^ *��1�ņSj́����F��"@G���ǰ#�:G�� �o����E�l(` ��� c��FXE�D���&��pR�7�F�!A�*�Qc�c�L@=�"H���A ͓��A<5�a���`W� ��~A�`��N� QS,*��,����)p5^�2$(���L78 +p�t�Z}uJy�.�����Pix ӊ �U ��Ua�`����dh����g,�$��Q ����e� �C�LGCX4t#�-#u�������=��X`v�P<���l�EO��tpۏaSU��û+���j�Eiq���%���d@� rT�D��= +�9���,:�I�A�Gq�J5��P�X�=���Gf�6�����a�(&z ԟ�'�^EL��<�Y[�Q��~����Y@�@����������5j��� +$?��q��8�UN,���U>>ԁ��UV��RF�%e�w7��4��4�ߛKz�'"�2�E�F`�c��)$4��|H9:��aMB�p�0�4� +�"JD��gV���+�F/2�hC`^L�D:�5JDT�Ą"`�%�F'#OF+ +3 +�.��O��㕏�Y���Z��ԛ�TKp*��J����6a0;��*�̢G2%Nf�� @�����9U�N��^�R��a�yy�u����t�p0���< חd�=d0HC��Z�(FÑ����l�i�ӝ�������S�3���[��3\B>�����\Nh��� �p}�A�#�]@f��x�s��{\����d\� �2�`��O���Fn +_4��0\��;�d�Ho�1<��r��d����1��g=c����~�����Ӭ=���B��Ȟ�"�)���<� ���q 7��b�B����Sx��*(6��尽��il"L�\v�k`����c��}W/�~{֝`��'�4�1��R|���߰ 7Xv25A��k�F�������T.�Θ֣�;Vp�O�J��y��){���""�G�D��茐���53���X�@�-�\�^�=�o��=���;Q~n�!Tg�$��}4ֿյh!:vL$?��<`��!�7#߽[��`�D1�Y��_��ԩ5W��� +�D8��ƫ�K;���G��="CQL��~�0��qXG���(�s�7R(x�x�=����!� 㮅=3���Ɖ����{�����Օ�Q��W� $J��o�`U� +�88qqܚ9�������μG�a�xw���/��Ō�olS �ql��`ץ�����şCc�N�'���2���0�p��Z�@3̯�[/C�j�OPx0�P�Z��$9 +A�6��� �m��hw_���h{>�:0����W�mx �l����b6y1�> +?�3V�����N%�;!a>R0��x��O�)�rX��k<.�<����g�_���"@5z�s��s������|��qy�S��7qe��Ib+�|�������l�2�q5L������<����G�,te��;�`�Lu 9����7���"G�C�|:l�I��H�Q�lҾ϶�,zth���{�!zbc�������,��t�Þ���;���H����?�s��7c���p�{���0^]#�${�l��L��(��ATa��4��D��w�1G��E����q�2��#�gv������w�,����'��/.�7�����Fw c�Xw����U�AR��W�Oĕ�r�w�jBR�Zx��46 +���MR�IF~�,?��)���_H�@S�������������G��������rס�/!�?rN�Rny0�-)7 +<*TM����]�iNWeI�g +���R��Gx]��m������q�����o�q2��x�������������Xѹ!Z��~����5c6�i�a�����y?�{����IF�69��!�?''�=�C3��b�@/ �� 8�&�IY�TM�yU�N�Y�e���T�2x6�_T�w"����B ��]��c���3�/����E��S�u�"u _�;�%���d6��]�B]�"d폐���*� T�?�?*'*�Nh�$��7�O����<o��q@�t�L`|�����Eq~ő>���~�<������~�S��ۿ��)?��E���9���/������E�J>��Ł��kߓ����@���a'�D���e<݂�e��k���˿��ӓm�_>��D8z����}j_U~̙�c��D�a9�7#t�u+8o~� +��]W[_[�\���|�e���b +�%`4���[�e�]J� |_���O��&SO���M~��T�mL��t���M���?���H�ޥ����56��� q4�z.��� ������q�ݝϺ�ߝ�WU4iyg��1bO���_P��5&G���.�t��\˹Q(g����f̐�����g/�mJV��<om�;������Ie� @�"��^��?�����;N7*&�lo�������:R���sBRGSz�]B�h�kd�Z�Y�=�B�Ģ���oF�UX`)�d��n{h$Zc�%��2�,��7�f�a�F�"]�&��_+EN1^�b�����kT��x��qHxRs]a�U���ƴm�u8��5�2��6$L{����������+�0W�B�B���?�`!|�`��}c�J?@���?a�|��"c�5�����c�E1�_�?��a|Q�!��_L8dU�xU�%��L4�{<R�,y!��*P�Q�~�]�/���$�p��c��_����Kc27D����X7!^��_�A�W�_JA�\�� +"� �{�#��2��@��'����9����Ν��d8h?��������?�&*���r�4R�$#�CiȨ��ʝg�O�?`y`��"_ߏ|ap��+=�_$� ����/k����0�o�0��Q �'�!���d9�%e��I�?ن�UN��q�������2�4.�[#O}uO!&����$�K��~��/xb��ؘ�=�g�C_e��\C�XDB�wţ����Z{��������ǿ����k�_��CmnHi{9\�}����D��/�1��Ÿg���4/F���Dc�Q:4� +���8ө���4�����c2�z�0���,-!#�д�c�f�S2z���i�������(cc�����m~�]�åau���m?m�M��;,�\�rBJ�'�%5OtΓ&��E(Mfm����� )J��P��EwAiؘJ�&� 2�@�NQ~�!)rw�Px��Q(�5xHp,��1W!� #��Q]@��H�M����]S�\S\Q��WH��:��Z2��7�?w��s=0ю��@{���%'�ꔼ�9��}3Nwˆ��pV�0�,L�y";�xW�倣�&�� ������ҽg�[#Re{?D�5Qv��c��FM���: +0W��t�9[�B=�X�H� )�� +�EDX Z�d�o�F���m��l!�s��l*tƠ 0�]r Wb���J����Dt�ZCP]+*�C���!h���s�\E6���V�~ـ�}�d��Fl����S���>jGz~��c�����n`����=~"匨�� +���%�^�O��˟����e�ME����)�/ @��6x����kBG^ ���,V�&��Mi��j�������hR� +N~�Y�u�-��S �����` +���S�`2�����BvC��^r� �^t���^p�q_��w*��� ��{�l��Ħ��2��"(�� �9[9\y=Ov�2��06��RF�8���`eM�B�IM��[r�e��锲�o��j�o��\�أg������T���; �x�~�)���G��M��|N�]�G4� ��+=�v#������� �%���|$2��e���>X�=zS�`!�΄��+c�1f��jf`����`�t�#"&�ۋ6db6{�C'#��7Y�7X��\��i��xН�31��)��3�.�i��̀�3�<�*�k���2*O֘�=�������P q�Fk���F~��.�� 7����yy���c�9H�9t�3�r82#ė���M|��P��`؛l�f��+�ka�����ڳ��#����6(Y������]e#��~�KW�3���aq�"����� +9�����9�'�����p�}!Z��fB~���g�8�/�����?�ɟ|л��b2�QG��D�����������p�k#�kB:���?�\�!��?f(�N����07���`r�|��WCL��9I�S�}oοz��ӝf�?�K���ބ�h�_�� �s�d���7��dAk�x\�g�[}ejo���I��q~eb��|:�?�D6�l�]y��u�(X@���W+eܚ��[�gOƂ�`�'�_��u~�@[�] ��d6j�G&�S~��]�uB��U�OI3�Oۤ������'��_S�m���c2�a���i9���^�?_8�#���&C���|�N��ލ'�o����o?'��5��͔~�h&��`�l���1M�gad,ڽ�����C�����k���:�K^� �I�n�$��d�m�X�V<X!C����T�m|��Cc��xLy�euϲ0�dN�٢3i�z�_v���q�d��)������6�]��aeR���0 +���Ƌ_s$_�¯�ɹ9Zv��[�WH���@·-/J\H���[��H����EN +)�?�w[;���N�y�5���v����\�#�5W<�l�dY����I��6�����{���k��T�+�&Z��Mp�=��=/�gu���}1^�~3<㏅�7X�;��`�{��-g��e���&��tED�$˗u��?�-<��'V.�b��o^QUU��C;�J6㉶�/O3�`I,6�]��ۦi���aO���W�k62wT����m��n�5��5<�qw��9m��N��)Ц�H����d�3f��r�iO�^�l4�F�����d��e�d��� O%�!��� T�{����ei�Ǿ8����F��r:t ��A+E�~������H�\ �ˈ�2�����s�q2#i�ZO���DVO��z&�Կ��JB�P����U�{l�v�9�;�&�;#;L�λ��/�'�ԿUK�[��k�I%i�R�Ĩo���Iྩ��~V�sK��UZ�O@"w�uL�"��Z�Qx˜l&��9۞f&ݶ�_�}�F�i�{���V�q��Q��i�k�����Ϙ1~e�Wp4i�м�����d6�k2^��_>�q�X��A͘-�����9�!��Uf8LA�1���DȔv�H��sG����|:a3���i��[��ؘ�q;�M!�<<��bby�����#���-p~ +�c9��i������2Y.< ,�"����d�o�Ȃ��=�6������qF��f��G��<��}Qh��2��@�pj�~E��K@a��V�\����p2��_MSTޣ�ou��vJ@j��`�'Km�x�c����?.�9���i���Nq�Q��ut��2iC��ڰ� �������QX-��W�^6�S��nU�[&_�L�3W��m5�ݱ/����{���&/�$f�6��-an,. Y��റl�n ��<Z.�SSל�f̦���&�_�\{�VwW�O���Ҷ�o���&u�kag�.���ܽ� �����e��a� >�x��Y�[{v��U��6���{�}�'o.)#e�����E~0��GĤdR{�v_d��);��{��u1��C}�U�>O���I��\�A�*.۰V��?�xs �ƆgNs��c�p]u��a�� �> �]���a�yd�!H�NX'@<�Wf���;9i����2X +A��-�T�k�Y����?�[��>Y�����ZX� �2�D�d���϶�m\��.��I�$�Yn�w�E� +��5��GH�m_ق�9!W����+�&p[oѵ���m��~�0T8�����N_��U��Ar���7��>�'����};ř��6�xʩ�|ʈ�7���v�rd���S�q9�*�[��c�6����4�4����`a����^OE�����q���$ɚ�^��xW.��#�)��v��W� �%c�Ν��c/��锃_���v߬�+{5h���&^�E�ʌ�yY�[��^7�J47����J�x�E���]�Z��e�K��4�:i:K9�l����Ɛ��sY՜�f����xb�n���$�1�A�?Ss�O�U��M����~ +�,��R����C;�䵒S^{�g�����{P��9�K�*s��'����.������*Q���2�u�쌰a�m?���¡��CSc��N��i��#xE_X~���e0��4� ����0��h�{�q�{�(Ы@3"C��,��î���S�Nr�8����<R��;�qC���� �)�ǘ����G�lyo�:�Ũ "��RY�� >}��:@�'��!��x��#x�� +�w܍/�!m�G�C� �F���k�7���P���;m��'����:�ވ|��<�i�ˍ�wiV�u[MTM���;�V^X����TB�߅r>?�����34$"�� ��d]�rfw���:�Op�۞��'>#����M�V�N�����ʪ��w���kj��>hl�ͦ#�T?��=c>x��ɮ�'�k�Q��z���sJ���U\��v��Yhdi��At'c����0������'����B�H�k�V ��OfY��Z�)�o��קЇ��`~{c4\�¨�f[�����������T��t��,C��;�� �������`�Ȱ�1��>���57��}��N�}0�R���b^��@��X2!� ��i�����l2�D��>�9"�}�)��:����}tK6{���1��`<�b�=�/�[���c�N��x� ?&yf:{��?�w�6_v��(�ۣ9��Ӓ��3�Y�������S�v�}��j�{�����m �.�"�h�+p�~�h��@��c26k!ֶ�R���?�!�Շ}!�5[�����i�п�q����p�.�1�p�� �`o�t�w�'��T��8���4`ήi~�[�@~-��JK�$D��O�q9�~�Q�L����`��xl�%�� �gjDw����P9���b��[��/�<��q�^if:s��붇��*f_t��1�-��?_>"l� ͎��v1�փpt`*ݑr,��������㽉���6������t�\�U�jz�-z3W�Mo���;�����0����E���<�77�v�67��� �����I�ُ�wOC�wN��u~>+&y���f�����e�7�Y��;��?�_k?��?��_��h�>>ȓ�rЀ�������I�V�7�s���&i��L���1��8�w��������n�2f,����;l�r<��zXfs��9&��e����/�Z��/:n����dĥ.kZD�L���{E���sɜ��%�pw-?fI��d!v�/�`8=�^����g<.).�����m���^m��ly#����6ӯ|{;��o�U����Ca7�=����۠������yi��r:�ߍ�"�O�㫃btG F�qȻ˧C �n8)��>��� �D�n���pzw�wrwc��kR�#6d!�ߔ��KI�^�W�q��y�|s�5�����;�oQ�{��y9V������8i��� ���m��l;}+�ݿ$���8�2��H�[iD�R2�)����%��*���P��oh���e�*XԼWF*v�H&ɽR��louR��H+��E�7|�fN.f�f�ɲ�dEΗ�&#gԫ�||z2*loN"��?=(*��z��1r_J^?����\�֟z��z��Q����O��Z`�R�yl���jD��ՇGۗ�T�So�������}�U���h'q��_�nw�~㶙xXܩ�x�n0�=������$q�j���9�Я�ۗGJ��]����/X� +C������b�^�pQ������7N�b���.3��J���\�|�_&���48�Fa�s����|+{_T���Ÿ���݃���*q?�����X����Vb�7ٕ��I�P~��N7��7��*ƌ��}�24��r��Z�|כ܁c������My�}r���s��'��y��LwR�Aw_N�w��#�Y����/��@my9��^��{����~>{^=wZg�A� xqۚ�vRW�����C�Ĉ܅��@���c�����r�S�L�ZCy�h��g�e��T�{�1B����Q{��]_�7�;U;� mQ����"�>�KI��k4wzT�����x\-�O +=��T� ��ϧ���L+�z��C���H$q�F��cBSZ��j켫���!����Z�q|1nV������*�{�:��J"z�&7��u�:z�S��|��9.�8��gv��I��l�j��,��+�\bw����}��V��l�u3�-<�'{��i:P�9;�K���EY�'��(�+ɿS���j3���AG� �������7�C���?�4�����e�����ņ�FU���Mkz�χ���JK�JW��q�� +M��S���]�����Q���;I��u��5�c�����7�'W��=����SX� +O�f�e���r�w���|��/!���b�a�4t7 +���Q_ޗƙ��<�B����r9�r������A���,�]?�-^Z�E����}�rۓ��;����`��g��on�N�tK�U����ϭfɟ�����m�}���E��}�U�e��q����9�t���Yz?���B�O/���V�����Z�v��� ��-�B���R�^�geUR���ˀ���� ��O��ݿS#���u|p�5��������n��� )��h���҆�� �|�MT�N/r\�l���M��������l��B��ë=���Dg��d�r$�㊯X�o����|�d/�������BK�v��`}�<��66|���e$U�5w�|�y�~ܯh��Zb��y�X�y���A&7;��}�^8�"R��T</'��T2T����e�(�*�^�f�z5�V[��Ke��%��\?����F�Pl$��q3��5��V�:�����;������6�O������~�W��}��Q���m>���ޚ�lw|7R'ٙu��Q�;��� _�z ��h�Vx��_ҏ��B�)� ������z�'�����Y<����sG�/�\84�W�w���2e�����7.�� ��t����Idy1ʁ���G���]avR�Rg��XnH@��)n7�^�K��mz����]�o;,�����,^Ow���t7F������b5�_\���`/�é�[����K|p� 앖�������N��Pv/�= +��z�;|~�q�B���gږPw�6��+�'q�͇�L�4#�o��}��P9��o������'u-|9�Ӻً���7���au~�?��GE����N7~�s�k�\�F�S�Zɟ}��Y*5��O��vDo]/"�\���N�� _̿e�cו�m\�?Ɵ��&W���r;�4#b�`r%n��z�Q?Q��ĬӼN�d1�_֯R�#�QZ{)҃��s�"�e7��X��C����t×�����l�e���/\q;R�)V{�YI���K�`tX��iy��ڮ��R5ʧ��T�_�(�jmy\��+�l�!��ϗ��v���ֆ���vo����ݣ+�uy_��m�����u�p�H�.�[��������ك^�#�7����0�F�������M�)�{,���Q���wN���Z>&[�Aq��>G�������n����5Y����q����d����:}�ۑ�l�a��^v$~6;/fR����E2ک?UJɇ�d6�y���v�D�K�O�lj'X����l,y���/|�}e�K���y�^M����γJ簙,7;Js�W�d7���Kn��q��(U����Wr�/��/�ԅp~F�K!���r$)�S�����(�>�jIuBT�P,r�;��\��9zz�.h�Y�$I���/{���Q��_�C"�Bg'��w��L��ossԊ[��ɝA&�������q�%��)�7�?ϝww�ɇP�7�v����N�����_�������aA��헕���-�g;�\X�ӥ�v-�{�D��M�������}?�ݙ]���r�r�+5��V=���&j1��J,�B夬wӽ��̟����ݣVr�P�����C7:�'���m�w3=�շ�/'�c���B'�߈�.E2�N�4Q?y�����d4���|���$��ݻ�s=��������V�m�,���C�8Y�^N��t3ܸ�&ǷRkgЭΟ� _����n��~_��Kl���A���y�^��݄v�[\?�MFY!�Fʩov<��&_7Gͣ����(�?(���ɓ1}�W�ѧ��������Q�p��|6�����˼|�<�]��7��m +��k��vF4�s��崓ݮ�Ō�� +w��Zf�8M���nN�O�d����=���v�!���n�O9"]�#��P�"��3��y�7����(����j+�,�N}�AZ9/:d��i_at m73�� ϥKZ�����W+���I�|й��NΏ���O'���I8���o�ݗ��З����N��0p��_l�vӱ_�R������~w|�tkJH��~9߫<���f-��.x�b�U�Y=����5�~ �?l���ͻ����ps�^I����v���[�*�m���gO�\eIր0����Y��/�ӛ��c�q�)p{�۽�6��Ma��f��W5RJ�����O��M�d�H�b_<~v�W۬�Rj3�/̸���[�������cu��ގWS��2ws����Fr��^�_dv���]�<%�轣I�d\t� _*8۩�����eח�~�w��<�}���R)e_.g;��-_��L��Nci{t�w�S��sE���F�w�?FP����pr�?�/�����z�L0������WK�ٽ�kd�2��ʷG�~!)������Cq'�����4�oN��z+>H���7��r�S��;���e���vL6�©٦��@ξ�-v�����(�s���Y���y6ה�G����*f�J>UT�rV�����zh$��L��Yd�[���Q�2��@(7��ǭVp�/m6g��e�7��b1��(ȕq2����hn�.�{�����A#��w����!ʹo���ݰ`��:�������m�<��/���y7��^E�Oa��I�/*����m� +�靚 t �ֲ7���ڻ��MZ��ѓih}���y�/�ꢚ��<f��B22�'�+�Np����O��C&�;}0��ͫ��c}/kD�>�#W;�V�3�-3O�i5�-j7����A�����V�r]��ۍ+}{���g:7�RN��w��Ck���gγ�^'X����Un���b����z�58$����r��e��+��#~��L��^�$x�-����^A�fJGΔ���D�;>���Z���X����OM_�j��-���z��,S g���� {|qԲ��5��Y-��lo����basފ��2S-��˹qyx�IU�V��(W�k����r/�~G�ő�&��`#����i�Ừ���TK�5�{AotçU���Tur���8�}�m5��{w�T��;���k799~�-���9��՟�.��͇��V#-d2{���y���� +�����r��]����%�mQ��u"�Wj�M�p���C����n7�Y.��JF[�.ou�˃���4����t>����eq,-z�]M{���u��.� NK;Mm���g�C�����".g'��yX�t���l�!{72ڧ~_#��C��آQ�K'UCI���C~�RŽ�t�2����Z:z��9���=_�����x��bI�.v}0�o�Â/�����̤���y_w��$����C8W�D�[ْ�����鏲�.=p�+���J2!�����&{��������ZT�Y�DN�ks�*��v1��d������{�M�;G���dؼ��Ciz�ߥ�\&u1����*��������8��f#�b+Ը�����yf��zz���R�H U�xN���E��8�-�w����$�E�x��R����sM�ςw+���R^}Ю.�ޗ��e�2�m���F���T�7�+N���n�r*��� +��7X�mMS��^8?�n_G�$��,W)pr�0���l89�)e��p|K,2�J����>;�����ls/�<�w���%���N��T�O�/����}!:���Å�R��O�^��kl-���X�7*m�a=(\�$��)I��}����s�"�ݣ�vA���JJ���v>�V��c��E����6ʗ�u!�=�4����L�s��ʲ-�����曄�J��3�ȭ���ǀ�[X�ϗ�g�갴3H�����`8T�Ҧ����6|7���͝\�!x?ʷ�R�zq7.���贰���/終_��W�j����0j �[�T�.EȠ�� T�j=�\��v�����.)U�3��"uC��oo{�2���c#8��{�K�-a7~���_b�-q�*g^�����x�N|��3ٓd��_K�{��P��%×��g����k䮲��]��#�ԏ���Y?T���kb���.�W�^Jp�F�R=��o��;�tR�KF<�R�$��A��+{��xs�zM����f�N��x����w���������s��lG!r��8%��4Kg��ѓ�x�`�67}7���x/�z����|�~���_f"��ye+mxձ����C����u���w�������E6�)���J=�8e��r:��j*/���r���\�N�}qw0MdG�Z4Ba@R����Yi������lu�//���Ÿ�������<��[lF{�=�!����UO�RM�:��-E-� ����N��TRr�|籽S������mV�<֮�i=�O�/�lz_��S!������b+ۯ?��[՜�d.����j2|q\Jۺ��w{��틿xN��W��G��W�������M~|���Tjw¼�~�U/�"7H��Ol��:G�����4U +&�Bi'5��=��f�es'}3Oq������x5���+���a(��h�4��lrz\Z ��6��D���^� &+V*U+�͝�v�0�Il{���VII^ʇ��h\��O���DH>)T'o����_�E�V^�S�9A�l|{�����c��Td;r�,�剤�ݯtS[��b���jm���\����m�W�U�<M�7�o��R��I7����J��x�pɽۥ�9���~�P;�7�zic�ԫG�!�=�.C�뭛Y���M�%�K�,�'�#�~�WG��P���-��ۗ�5y��Wu�����������X*d�������;)� +��R��~p}�扛���0�ٞtS?�]_����b���*DY��ҿ�?����P;!�-�@��oZd����H�������k+:�Ls����>�tu��z)��B�����,tz�pn��k��zyg��5B�Ƞ9�dz���V[�W��͝��d�])ϳ����k��;�Dzen��X>me��@�=2�]��ջ��{c�fV�6| ]�����˳���WS��Gep\�Tǜ��n^���U- +�gr��x��9�۽ߎ��&��f溝/� ����Sɧ������3[q���#�AB���V�{o�{7���~��?��:�QfĎ��$Uc��<�;���/2�.tg��4Vj�ey)MB���bl�t��Ͷy��Äx�[ԫ$��Ɠ7C�u���"H&�w�A�̈́� +��|f��?0o�{�|p:�U�� �%y��fT�'��������<�֪�����_��GW1�|� ݊��]�9�! �.�c�S��`�������H�j��F{���+&ǰ�|�X<ߏμ�t�ۄ�z��$K����P���z������A�8F�wP�$�b4���(�֮^�G�����|��1�F�RN)��ef��>�z���=t?0����f�Qi{�!���q�Q`�9!w�㛴U}-������w��uTߊ6�ı�sf`��(�AFQjң�L�ҏ�?]D�C�a)����L��N1\��#m��ɧ>7�.��"�ė�v�g_�<r����N��cU�.��:��$�z����7�N�<(%����I��;_��Y7�~%(�K}s��y�Z�8ܴK%�Ez ��|�G��L_������w5b�?�ҩ4���K3@�|�R�ZƲvs5:�G�����N1ר��j�%�ǹ W��钛������S��AS�S�F7�kʎY��T��Jdw���k�ʁ��֔*�#u��U/��b���E�>�����-���6��A�,<��7g�_�c�k/�� ʭP�K纁b{/�Q5&��X4�a?�{�ӻw35��2��x�*���j�)�5v��<�R�n�+j�.K���mz���y����hz�x4\�0N:����Y]��h�J�A� �Z㱚�=�9�����2v���[�%H8����L�.����"�����mړ��Rק*�������A���,)^B��̼����6�~O9v��VZ�F�8�S�܁����Շ��U[ %�*���)][��o���D4��VUA�������zgV�F�s����IM��ܶ.��@�{�8r��"+�?�����=�P�9kp���> +h!�!�_J�=�O�_F��㽒�HG}E�[����od+�lo/���Z��k*s9O���.}f>��OI����E�{9G��F�5�j�~�D��#$���QJ�+<�'��+2������hSc{ +��j�O�=5� c 8����$8]'�n�O��/�� %Z�w��{�J�N�:��n����E��\Kh�U8��Uj�;��n OM%�^�.�8��D0*Wސ2yڨtU�k��� Oj7.H�����`/V�� �.Lɢ����%9 ֫�R�[�Tur�Mj���Q�\a +6��ў�j8����$�Q �R��Jݥ�{O�V��a���_�K��D6�n���k�W�����p\:f�v�γ�ͯ,��(� �q��<yޢ�2>[��E�K���X�@�|������K��m&��;_���p�G�C�Y�u�cQ��#o���Y��҄r�hߌV|��>[�6���l�و�Ѫ�iP��<����-��#Q�A$���l�/>�&rGN9y�ˉ���L�Tv߈���� +튇���^��g����k$��+R�U>�_��e��tdp[�)_�P���m�ʜ$���p +.o�9�4��}�(dZ�}�Z�_GS}�x{N��hƠ�V���&��[�J����S5]�fCHE!6.>Lw]D���1.����T���^5JTŮ���SζF_M�}������]��L�/JZ�&��R��p���4Z�����0`��`Ł��err �^�Qw�v{���Q�<�fy�s��f�e���.����ڲ��a����x��/�By�h5��y�fv,u�����8��@*rt����\d+u�i%�D���C����)MO^ ��N��Sv�n�žȳ�3��NU�q7��I-b�Ͽ�<������C��ITH@d8�bf ����\��'B^w��bX��OgO��m��r���� M��>ߤGC)����|8��/c���5�#��r�v�`<Dg�k�]��'ܮ�N��]٫K�T��mm�f̮���mHP� +4a&O�}���T/;�c��v���tݤq�C�l�gm���z���ǁ���,��Jϖ���FC-��qM�h�H�Q͞�$8�)V��Y��S3*��*.�5�M�F�$���[��ʸ���Hզ�Q��a]t���ȭ��gZ��T�2���Fyb��T_M�o�;��$���m�j��&�x� &��=I��uJ�N��X�n�����[I�g?aƥi�<���/<@`��ĊJ�lM��%\��6����c�M�5|�a��(}�=�/U��䞸+vc�->__��=��c��v�Z��+���G]Wچ�7��`^^*�_��X� +Vѕ�i�F��8������w�ZZ>'���¾�]�gZ�]uxE��^����;{�{ȳ�����JWpy�&�����>=_���H�ˮ����^�#�˺�����p*�B2��ްucL<�AX��T7ӄ� +k� Y�Opu�D��;�1Uc��_����.k����n���Q�a��,q���pX��o� kd���z�s<�4����W�� �<O<z��Q��{�L�M��ݹ[�w�{Z�3վʡx�W�%���G��-�����-W�.���R�q��ka��S:>ΐ��G�5��ͨ�`.�<T%4Л������ό�垓��r*�RgJ?H�<�_G��^����������C�w4�!�ٹqalC�V�� {sA�������G�.��sȸ���խQ +�nGm7�yL7J�a������7��m�|r�4���}�����^̴���i���P��,��9ɲQ�)�+�]��1�!<�{��(�\E�d����+_ތl?D)t�ɴ��ͅ_��AI�U�wӬ�aR-UQ{otzl_���,b�A'��m\B����^MzyG�L�x���nʯl�'E�\���`�v�J>�%�b�Vw���MD3���G��Ķt�a��@G���U�ó�T���T�w�, !K��dB�f7BD}lb7y��~�" ��[�'Bk4�lI��yg2�h&���.Kr�p{�55�N�-�b;�/`�ʵ'6\�"J����o)�W&3ㅸ�r�S��t�v�wE�:ɣ���l�����U���]�Cq�w��4L���z,��2*�y��G� 9�:��|3j��hP8�^f�;�wVN����EoX�6Rș����E4Q&�v{���z9������j�^�|(Zȅ8�oU��?�6���0N���BN��ԗW/�G���̍�8��{�}�\�LU-tW[�v(�f�imȹQ�Yn ��6�� *������Э&z���kcU� ��bǻ�Eѕq_ ��XC� q�\a̘����!����}�ܠn���L��{#Zf����a|v�.��?�Ʃ�$��� �YW�6E���y�I�͕�J��m���v��}�pIe���iY������|a�}舵��kC�FW{����cd)LkVD ~�\�'d�_V�>�O�ä)6��֙WD��w���e��3�;OMt�H��P}��Vk�2\��~+� �xB���.�e��Oor�3��8٣�ynȳ +P��F�x�zg����/m-w^��H������<A��s�G"���O9«��.��9ϵR���L�^f~i�F=���x\��zQc���:^,�=&����/l�B�(Ms����]]]9�7>[�/_��z�Ъԧ�;����(*�eO[��#B�gc�k�������_��S� >��w�s��{����p���+�9����J�F�2�i�ؠ-���u/�b���~��~��`r�bf~y"Y̹}J� ���QԶ]��Ay��Ӷ%Rʹ�9"H+�GS07�I�qDGgw���{,*w1>�+���� �T��o%O�\��E���~>�i��h����(�C]w���8��~h���:��ğ���cUrD��̯h��OW�}arg�Hi�?0�ڸaqOA��s�����s�#Cy��R�^'����DO:e.V.���t/�<8��m����6�Jy��i��,/}Wd��<��t��ɽ@9�k���',�1[x�� ��xW�y���fVj�½���$v��;C�`+[��嫯Z��cjq��<�т{B�E���'�X��0��D��~1��C�����p������]�Q������F ,�*|~���i(x<�GuY��wn�*?2���v+�{1Ő}J7�����k��EW������5�{�p;�+���X���vP��o^Qmݻ=u��V4�N���8^R�ʚ��s�P���,E��H��k�Oht��3:̞�� d������Zs��8��}��v��lw� l��O{���E��u�.92��:+抣-���K�@Y^���6b�<T�R#�թ~K�������5�Uꨍe�{���3�O�6[^��b���YO���yE���N h!�}�Mp��zof���{�L ֒�}��}F�b�$/@)g��@�X�*���J;��`B푒$L:�EbH��w�H�X1���Gu5��}�s�H-�/{jyf�2ql��}(z�v�y��{k�+}ru�1���XUF>��� ����]��9�kN.j���^��+qm</�ü5����쪕��{��`ȫ'���ۣai�rY��l��u�'�p'��v��3˄f��vt@������.F�о�i�=��3�d>��.Ɨ��ށ�z����x�<�-�l,}���F�n��p�jwJ�5\��Q�O���&g�y��?p*%����;�^45*��\�l����kJ���u��'1� ٬����1CEmUE��7[�̇�q�;�o��vZ +[�Z�_�Xo�m|� "0Zz���Q�V!r,֟�5�[�3M9���� XNSͧ�˯�<�s������8��4Sj�Wg=,!�?0G5hS�����cp:wAaܜ���қ�:��%�[ +K���=,�x�����v- �e�s���.��lg�zj��PO��F����WC�]l'���"�Z��j���VA�q�A*�r�����j(%�G�9͖{e�O��Ul�+�Rk��ǫ�OV��t�cQc�y�-TB�L��ո�U l�N��W]��R�)�]�S���Lx�_��_p���?��[���ʽ9/���|�2��v��@\����۳���u\Z��Ok�\�A��<�r-\8��o��Ouq,��T��v;����`a#2GY۪aЎ�G��_�k�,��R�\0�h̝^�wv�?�Ayc�K{�د�t�� ;-�\�Obz9�*�kK�=dF���<Xp+WS��ꯙ���%?��Y;��l�c�����zR�w���'x0Z(���ƒW^\U�n~2��C�5��\bBU����4�\ᳪ��QH�>��ڞ����w���Q�'�(g~��� 7�s_�t��"v�o��V�k(��]Đ��U����)�J�(��ͤn'�Q����}Y�y�y����b<R�<�pWY����&�2�%Y��#)l�S6QY}�B��k�>U_iD��s��5�luݣ��>�G�:���\���5��S�(4Y�����X^7�ߦ�(��E^7+c!�s�G��Mc�]��<���/+���3qY0G��H<�L���\�Ę4G�*g���^`5��e�Zx +un�w������(��m$\�^UwN�ފ��qpo�ۼ��՜�~�����袰����+��@�TZ���B'ŊU����v��',��/��R'�3Sp�G���� �&[ q�9�ga�?�� �g���A��)�>���q�v�"�|1��T���I�z���<��ÌQ�o��R��=`�rB���aD��x;\����Ǥ������Wf��79�tD���� +�)��3/=�)�Q>BJm1�����| +����yW0'�\~���>���}�S��T ���+���\Y�*�n��m��x�Qs�G���2p� +o)sl�"?��N���c�Fu�_^n�+Z>�MvĠ/�?Uڦ��3��^ÏwLz@2o-J�Z��H�XO��A��HiT����[*�R�W᮴ +���&��$��0$vidR�I~լ�����Ap:H������Y[�5O�����T]��{ ܋�9K@��MAAj>_�|1w���ZI������D,jv��+�?��̎�Ԩ�ږ��?���s�X���� +��M�l�ܑJ�+)���L�Tj�~�IE�,�,Y��9�[>��o�%�Q=.]v��U/Gm�͠Vh���D�,V����{��Qz�Wr|�ZI +*����9��,5�����狻�@������`�pt+��s�}z�u{�]6�X�u` ��6㹝اΧ��?�b�}.E&�#�NL']l���6MyF2 �cT|�=�7^H��-�*U�_j� �o襒&���Ű����_S������n�f��ޛQ-N�NG]4�x�4 �{�F ^��ۺ/����V�r(�)���К�T��\�Ұ��1*BB�� ��e2 +�fjؗ�eI^�����i�ݛS����u=D +ݔ�*!�r�ݥ_U��1�����4�����N��Z4Բ�+ϥfh'�$�Z_!�㖓��P�ŨQS�J֪_�λ(��������P��=C��a�H|�Ϡn�'V��ᓾ�6ǫ�S�_y� �M���u����M-���R�Rt8=e�G!E��ڦVyԿ���}�J6��d~�����RZ�T],���B{�WW�L�|�㥪2>��@;����7�/��|�������',�u�� �B%�w�λt� �*�CGa.i �{�����߸�Vu��G�4�|Ch�B�^���+U�5OI���`�Y`yeSe�[U*h��LK���~.'/��y��9. ��Bzc��a6�r�`^�d�ZZ]Cg�ǜ� +p�����6�Q�]���J���Ϯ��Q�aSׇ�m����I�;b��S|M�iV��7������2Jj�GW?n|��K�.q����4m;�ؓr [� ���b��!�fƾ��:�V�M0h���0�|ť���z�����9[���ڕ��߫�'���^o������'2��Bs}��?�B��w>�5OP@M��viߧZ�ơڠ��+�C(�Fe.���C�R���p���;ڜΡ&���=��~��o�)5yTe�;r�Iv�%�Ԟys��3�+�8 ��5�L���Qm��,]�̐��P������<���b3P[_5�c�'0*�P�T(6�����J��t�h��#SZ�a�Uk��]�~0�Q�x�����������/�E��:�_jL_�n�'`夺�����7�#O[C��`˙�9{Q����+��$+�5�I�u!6~����R�}D�1�l�}�yQ)m�������M���� +�fwʥ����m)Js�!��}�d��O��M ��M��d�1�>]��}��3|$?:�=홹�nor)�_���l:x��֨a&���" %gl�W�u��?w���ә�zsC%�<�+ �}���uQmϚ��H� +�iw�};�]��S*�pe����_X�>��U��'�ڵ����0w��ٞ��Dc� i|�n����O}�Ҩ�r�:�lL�2�5�|�:��E�N�ebBM��\�l���ٮ�̩�/�ibFk(f-vr���R����y��UK�A�EYNxh:�.�M���ӧ���_����������U�o�g���9F՝��7w�2`�e��~�\���8^����7�븿�@_�˿V�����[���5(@�A�b��ce�mշ`;����/r�{�������Q��>�f.�l7:�9�Гj�-L�]�Ȓ��F)�e^��T�g;�/��f�x�O6Ƣr�P����&�Lc�� �#C�P������v�/�s��a��CJt�%2�����>�]w��^�t!��qL�*�'z �C���Z�x%s�K��I���n$q3<���8����2�O/հg+��dK{Kj^��-kd�� �]��K͎>���t��;�E��6D��6X�c�T �<�D��Sziٿ*�r��S�Uy{_�_��v#����$T��:s���F;\ ��DXZ�C̛���r�a��6�9��J�s�9�B���"3��2w���e:}�kT�U܆�'�c��C�R1��ֳ���X���Ly��-�m�A��;3�(`K������.eA#���f��V7�p>��7_˛P��E0��P��r���Moz���n���S��:�n�,W�� ��- ��ò�ŖE%�C��X�v�q�Ex�.�^b�W4v��6��w^kvo��f�߰w����3SD�ރ�m��9���Qy6�:�����&K�L�-oQ��<m�v�v����>[�j(3���gd�J���j����!n�8^;��:|�A�r����@^�?��-M��8��}�h^��,X�IT��EV�����B�z�wj��Hk �E�P����K +,�c,\��:�zQ�$>���$�u� ���r=�5ƞ�O<`����L�۶�@�w_��,Z���/Ͽ����`uu,�����Rou��^��6wD�r4�g����:TV��X�\+RR�99��[Y*#K-Dۏhc7�����S���f�}�4v;�u�ָo;��A���A�:�7h Fa�.�(�[<wH�A����(Ov2�)J�C�2��VK��8A�g'��ݎL���Q-��<����w��ʺ��7m�{X?��(��Z���j}���1ɧ�eҰ����i�0$��-�/ͩ���q�X��p����H�Ӻ�S�ے� ���u�۶����4^��N����?0�T<!��e�]ӯG�̀�Pɾ��3o1��=m�S��R�d����=l<㔑�I���������S>\�G�`n�o�/~_K���'��[��|-���*��I `�N��.�Hy�V��}���퀅�f�j�"o���LT��@�G�a�߄_�<^��٩}!� � u<�Ç��YǕ�OT,��G�;�_�9s��^>���ŀfK��6�m��l��E�y��w �P��fL�����+r�C��)W�S��_%E*�(9z�p��|�q����<�Z[�i��V����A*��j����"���}E�ޏ7QٙiM�3e�*�Xe��8�U7b +�W�0�;��0��v����?��)�&���ׅ�v,."��{�eʮI��g�W�(�K����bK^=���?v�|�oM���I�bڳ�̰=h���V�����y�U�Ӿ)U]���Z�w�ϸ��@�?�3h��q: +������=��8��J����&�|*Ë�F���l�3��n�'���6�k�J�#`�� w9��kYՅ~��|]����!�*�x��U��w}�?�s�Z�C���^ϝ|^�v��ᄴ8ɔe��)ad§��be���RR���R��x0 +?&�n�.o���xL�[I +۔�+7r_�X��@t����U+�M��y@�����N�/i���q3�Aμ��~����6�F���>�*eD�Z4 ��G]�^��Q�`W�g���U�3n �W7��[$�$Hk0�%���~F T�E6�s��?��3�T����� R�;�=w2�S�Ӣ��ԙr�d�O�3�'��M����/HfuQ�Vv;���&�ά����CO��y?Njk�� ���B��7���������qc������{"��tz.�{��# +�YI�`d��r� 엗DI���? `>$�W�Ф�Y^�3&�ǚ/��Z�ةO�������:x\�_�_�^Ld +�=6 ���� ^>���x��r|i���^X��]��XD�ڝ�>QHޫsqʹZ-��b˯������ZZ���vV�K��$n�H[�}���٥"s�Km��8��@8�%y�މޑ�"l�,�R��e�7#_�+��rכ7�@�[�f�b~iR(��n��U� \w�H��SE���R=sd�!�¤V\���g�e�(�^�敯j�'D[�&'TG#z0J; 4�cai4N�z�}����vb�kO�mK��ѫoIʑ0/�K���/�>�J�P�w&4�ō�y��Nۇ�_3A�-�t����\�R�D��n�&�Ӝ��!.]���v��E �s� ����"@�>�L��W�������Rݨ6�M�lu�ͬ���O��)7�:�������yﴎ���$���:��k���<�^�#��M0�v���g7��$v��a^�������u�K�kd#�C߳�i�{2eƿ�5{��r~�=;�� �>���5��m�gs�B��Q����M {�=�Z}��뭡2j�6���ؿXA\�d]�~<���oN%|��[2p��}�!��f�P�c���s��h�H*�fy_$A�.������w� �.�ь�K��垴�h�r� ++1=E��]����yN�)t*�Ԙ�6t�V;�H��"�� �}fRu�=�6�{Kɒʄ4�M���F՝�Dw:1���iWM���B��$�/��4i������� N�h>j�<U��gK���.�������I��n�MԼ�n$nB ���2�R�+���nc����-�r�D?pշ"���J��F:q$��(��е��v��}lO.�V�i��|���z�.-nҀ�uƬe_<�+����;+~��������e楱Эe!������Cwu�3 ��:�Qt�U�\V#��;�~\��QR�=��Yk?�l��{\�E�]�x�o�N�V���9��:� �E�M�p��)^�����T��#�v%����h,�oAĝ_� v�O0L��|95D�������0S�5{��^���� ����%}��d� ��8�b͏�M����p�]�h/h�W�������������lO�mn��Yu_�_���UE\�;%#i�%��p�zY�){�r�����y�0��X�7�zc��r҉Q�<����r��qe4r,��mи<!M��w��Q��A�؞��+C�hف̧4�>PI�rPt��@�}[U�cM�>hx �c"�I�K��Ց�a�3��-�K�>Z�ק�u?Y�����$�:4.�e�3l����pen���Q�o�ɠm_����q�F�3"mg�W{�5���r���J����$�J��|�3�E���V_bb O©�`K��b���X���b#y�E�v�_p���%xz�ds[���s�KT��2{��?�J$[��,���;�J�k����JJ�|�-H��A(����u�Pe����ʀ� +%d^�K~��[YK$��ÓT:��&����jNvg���I�pP�̷ij�}�.z_������9�Xm��C���>�͏~�4��Q�@d�e����{�cW��N�O�g��ͫ 0��;�}O=���������@��~_�s5��v�>g@)|^��}��fR��Ð�J������T�Π\�6�M. ېg-2R�쯧O:r��Y ͪ`��؊��]K�B�ET���c0�ؚ�@C��J�(�6v +���TK�m�<��I�j�� �Gu_ͪt��4�\�:`�,�/�.��"#+�߃!{�� +�<)w���f��������v�S���_w]ϭ�4����� `V��VL��T�O2\��*��� �j����H��h�G��x�n"�A%�]~3��=�f�¬h��8�Wk?�J�e�����4V������+4��HY�n!�����2��ཱྀ˰�>���NW�j���V$��?~-ވ4=&��֏�j6�0&��Y�<lz�:t/�d��@������ݺ�.^��1*z����&՟MY�>��+bs�;�w� }�\�^=��7yI(�q��іБ�����Zc+�����>1O�7����*L�a���p���"#��S7*�%�����7F����$�� ��5_!14bx0�R�5���q���J����J���Nj]�dQ����\��Y�!��ґ��)nC濪�S�s�$�~�T�!K�Qb=c����r�h{}Ѕ�uD%AN�}��k�lLl�r�/;������X<\�^�(�R�" �k��?-6����ي�X�4U0�6�qͱ=4l��aW��i5t��ӭ&=f�CDŽQ�+��i�`48��4OF���s[j��^��?\�M�t��}��0��d�Z�..]LF(+y�Y�Z�_{���6��u$Ka��.�K�������Դ��������w�s�v`ܚ��S����1������]'�:ۑ>l�WF7g���i�Y����?�ٳ�T�b&TZ��4����(�5�L�.uKC�mp{v�S��툡�["�&��Z���~O�#o���Vl���,`��C@��f��nS���9��$�"ϴ��mϞP]�,j�+�B֞�p��Կ �UȤ�vuqش�"�U�" ������cXe�HR����"����=��z��`�Y��w�ϙ����PYXͯ�M��l:���"��O~�w�� +m��f{��J��/���N +y�~o��ϓ߫���Qte'��q%R4v:��E۩����Oq���� N�A�q*�J��<�2� +�be�Kdl\%Ɯp� +I���>ۍa +[�%r�`u�����>�a;2����;wM{��fnJ�Aw�-�ߐ����z�vA��� m�f�1�vn�+ٸ����N��)��x��ժ+���q?�65��KG쓘��ߏ��.���t���գS-�Z�!���jW��L�9��ϵ��~���om8�� /���n�C��p�~WD� �,����Z�����8��.��#�[N�Dp�G=ͤ�1�C�Z�����6��ƺ�m>3�]�EF�*c��������Ug�霱�Z��P;���i��B��'O��Bq���� +�qw������CH�ִ_��V���j�|������|����l��S�©��n{��-�Uz�;\���)�t�W��ٷ�~�v� ?��ĞC��?�z�_ ;�;���qc�wO�ust/5 ��?��*� 9^n�2�!���O�]"�������d��2�鬹����v<:)?�:W���j�d8bq�Ph���|�V�R��P��ߩ���k�*�����E掴�MZ������'�R6��/gy�KO(Ґ����Qʯ^��1��,�v{\��P�v��yÞ����Zr� f0�҆�h�|���?T��Y�y��Qt��o0꿕��6��c"�'�$�ܷ�����#���("~��LW�q�O��y�������m�>9܍�����KR���M �wjt�;�Y���,P ������9@�Ŏw��7����0��'T~�廧&�����"<�QY$�H�.��`b���8�� B$��V[71������-a�\L���S��P���5L�����u2X⽿o�[2�Q��Z� �,4�O�H6p�o{y~Z��L�4�P ���?p�|��I��kt ��]��2���>�^����E��I]�[B���̭�e�,FVoe�vªAH���)�S]�K�jF�K}7E�b��%`բ���s�E:����2�e�fDk����~�iv(��\�nɲ]�{�*߯&ˍ��c��~"�Y����s]��e�}����Nq�l�F������.��`��厝�=]Ɵ�����ȏ�I�zigJ{�q���Q���]8X^�~�[ڳ��5�6���S��x�3=ԛ�9"3Bz2�]����ỒƧ��Y�?���"�6�W_�庒4��!2H2˒���ff[f��U��}f����jۡRBdTV��\(T���VS� b���"I�-MO�xJ�R�T��1k���5q�L��)U��ɨ�8�(���(�B5g��l�5�+�EO@'���Y�+/ +F��`�`yV^��.�:}��CqU-k���/c�Ҿ��k�$�-������G��ڝ����i ��Z����v�<R��l����c^Be`+���� +U�L5�y����+���D7�+7(��x���a�x����L�k@!�G�`}.�a��Og���?�姙�,�ج���l\o���kB S���<�]�@�p���p������i��a ��|hU��瑨"I������N�{�E�Qs(��'l�N��x���69�IcƷ+��p�G�����o�9���w�3��6>F���烑s�!�g���L�o֡J����_����w�/������IR�%D��(� d%=X������� +�]j��;���ff*<�Q@�gF��:m�-��v��^[^K���!v�m�lUQ�zY���eȳ��؉U"h���e����V��i��Y��>��X*ֹ��ݺ�{�M%��+�.7wE��ӃL~ha�5:��&Q)�#�� ˩^��_�?�7��բ��X+-�N�|3t�e ���\�Gfs�{�T� +�Հ��Uo�˟���N�Ѳ�߶y��)a��l7��T��nO�+HR�A4�P���v�)�~�3�����ӊ8nU>q�B��������n��,I;���xVJ̹��H�N�� +#h��� R6��`� �^ZKk��y����h�2�鸔�Z�n} q�Sl�7n��n@���S;�E��//�Q�կ��vj�)5[Z#M{&d���sb�a���gؒ +��o�-p��wY.ހ����yE��}!��e-*�g�fΔ���}�G'YL�.e��������� �řU��Knr�������F��+0탣V��"��@��+u��23�J5�}�2 �J��Ey��2H_7;lˠ���J-���Wf��a���|o2�����n���� +�~�v?0�f-)(�AZWC}��X���E5Eh�Ñ����yv�ZL�v�S�X���A�8�c�_M���v�iM�O�b���\�Բ�@N1�#��c<mK�����U䓠�<�����������ވхB|�,�k�x��S:L,�g��NNVNTJ��+JZ��K*�i�n�[���K�m�3��ݝ��e�4;ўr���^�N���q���G���?�ǯCgqE~uv��"- Lr�j��T�'�~����J����~�]-�L�Xz;� ���w�D��ܬ�*�F�*�Y��,�= � ��D6�H��~{�Ğ�R[>d�����I�}�z��rmC��3{L�.��ǣ�tR���?�8#\D��P:,w0I�Z]��W�]l}wM��\�F��f&�Ug�\8�,�|����9m�����9���T����#�� ���6FɇQ�FD!Y4� +� +$MG�j��x���� >Q��j��O�\���En���$��#�;�i�VV�p/e��_ɆT�;?R?'�8�;T�*(�VxRB�75��|5?ˈ�(-a�@;���>�t�Ic�qt�Wn�q�hT G�D�|ǎ1L]}�'�a`CC\��Ѕ2�>3�ߩ�+=/�4�s��9R>-i`S�����R������Ӛ47�:1Rﺱx�eZ=W/`���?���_���Ϟx��S6Ǔ��mr��r���މ����ß2\�wL�)���e��#�QH����X!-knM*�$8�e\r?ܪ�5��ȿ�5f;��WQu�G�V+���08�S�. �|-�q�����tP +j�%%B�jd6���<F��F�>g�#�3S��wA�/}^d�T���u���w������Pd�HA&��Q��Ɨ:F(Â��5�K9՞b|�{����o�����S�¿�-،7�L�È.� �k*dB��d�|�WW��y�:���?��@>�O� A�슖�iO�Ƴ�2,���с7�����a��@l�(��2&���e�?�@Sf3�X0���.��*KC�1@X.N�5u�MJ������p��z����-�K�!4,*�~Z3��F�} �FNF����F{^�ߚWb��mT�m�����tΊ]0 +��nԽ�诺֮�<N݂٩Xoˋ�p},JT���vl�����&�c����`��2f����J�.��sC�L�S�-�\����}:�$#�������L�v��z�����ze9��.������u�W���[W�nV��1�ڏ|��~8�֡�z�V���"�*Ia�^�'t4 +�ݚ饥�F�A�I�]�7��˰<Ѧؼ����?.,^S/�/�j�.�ɩq*��}(��B��,'2.�I@�:�t�ibN��D��;hZ�6jO�2w-�{��w��_�F�c�F���>!h�kb��5f��<Z.fT�h=(�,�>��� �⯝���p�wfA|7����h���$��JU���ĮN�6*��R��u^q�*�t�]b�H ����V�ɳ����)/� +����[��ܤ�m��F��hI�Cly��Z�gS�:�����|����iL��yݭ��L�7/�-ݷ���,h�P����G�K03�.W��ꤛ���+�pmQ�`j�gKě������r��_fpG?"����&�Dsv���j�� bib�5���v���f�gي;���)-�d���w���fK�Ȭ[�r��hk���/�V����B�l�,ɻ�S�^)�5�K�� [�#v�_�j܈r�����K�c?;��I��z3�}�93��r�y�O13NB��o���[���p���2��E�3���`�K���gtL�Y_��0�$Pq��G��1���^4t�;iN>�|�jۏ��E�/��l�3�l����Hz'M*3'���:�h��e*��R1��C���RR^��|��E��A�2i���9G,�$`Ot/��g�\_��*�B]h�G�]�N�MNP�,�y���Q����^�˞�ZKy����C��7��*00�i{U������z����9O�.����QI,�cY���C��o�U\F��^5�m,\x��?�FmG:�����r�8��,%�0fcS�v7ηg�t��Nf��z9մJ� +*B�Kܵǭ[��%����c�j�&=���^���� +���ۣZ��()h�:h��b���v�`��c72_�tev+��ex��|�"�KR����5d�xS�N��9ؕ���+Ӳ�]K?��/��(��y�/;se�v�@:ݟ�#J�r����X��\����z��啅%����Ϻ[�]If�y|���)��M�1��������V���x���ٔ���,+� v`)T��M��!E��H�zW���������t���Gl5!h� 6W�]ܶ������_ եIGJa%$3eq<��r�xKe�-8Ǡ؆��d���@a�->L��EjU��@9�~����&/�-5t��.��PAQZ�C)E��|S���A�삕U}���$��%��0?!��=��y�h��痀q��=����x���MCKFq�M���(϶�������{c5:AJ}N,��/F�:u|�v(���@*�mz�L���sKC���`�B�!@�Ȼ,cק���}�Д�nEξ���z׆g����$���X41�f6��v ��a� H�?�s{�.��9/>��}~㛎DB��8nX?�Ս�mDo�L�/�M!�QGl��ߠh��>�P^D��4�l����Ѻ�Ƴ1��.uWE���4u���&�~�����n�f���f�R�kʪ��{��!�;��$^���n��F9k��?���xnc���O�C��=o���kVv�B#¦�>��s&?�@ҝ��sr�v/ Sf�)�4Y��;�a]z��KK��G�3(���#�;�A��RIw%�ɡ5Ԓ5���*c�ꙗ_��.��r����G�o�c�����H�D�?�2�m��Ԡ9��������u�D�(�]�� ������Ci B����� ��3��hr�2{�7��Z}��<{cQ����t +�e�����]�B�n�9���_%ILظdqy<��tv$��Z��$ �1jv�.�3�+�|f*o~�5����=I7�/�`]��`g�z�q� R��P�3�oD��4p=��5��~��s ���(���G���C�gn�)��Oe�U�Y�=�����[��L��K��_{f���r�:�W�̘ |��� +�`�E��KbD��e�4����?�"rV����2�DP���v�'�W� ~(��rd��֔oHBc�N���+M�<��1C�X�2��؛|/���%]���qt[����.�'æ��k1�������?��DQi}U~"��rq�Q�) ^����k�k2䝷�Z�wM���KJ�IJ\X�lmkm��x�sN�<�?ݣ8(;(/�l �ZD�d�V�&��2~�u�Rѐ���i?�>�㩸���\h�F#�o<���Ւɥ�Y�Z�?��t��B��?/�����S\;�G_���7W��֛����aA�t�)�(�T-� �v� ����q�o��(�gZ7��,{���=5��f��hT*����L�G��[�ƌ���L�U���C����/�w{4־)�;Ŧ�����Bw����ռz������E8f�E���̦6��]�^@�e�eHG+o�Ȱ�O�� �#�巨�� �~��X�,+���������l&�q�PW���^EmC�֪<� "~��Q��]���O}�ʆ-�ů�q�)����e���v3�_D��c���ă�4Hy�<?_/�B�Q�M�U��<� ���K��,v�9�^��!ti6�RQ�����n^�OTU#<ȿ��1�!!՛��$��՛G�u���%�r����ő��+3?fȢQ���Pj}���{��\�V��p�����zF����]yR�|7�MZ.�+�D���G�6��� +�Y" l���=2_^5��5��ah��#/��h:X/>8�HV��7���-|�^ΤZ�N�T2��]�h�|m�.���s�W�d\4�<�?So��5~�6��[�=wuy^JC���ת�Ua��ۍOy^w{�Y�T�ns2F,6���mfr�GԿ�D�y��B��l��4(O�#�u�G<<��օʬV,��P4��ק��j�7n<z#B����/*�kZ��wZ�:5^g�(0�%���Ƹ��w����\���큍��\o?>n�Z����9l�D�R����V�W���@2�rKe��Ȍ��̔ܛ�n��(�Fч�HZ=�}���1���Q������S��Lj`���ۻ��vk����m@Ktca�l�x�����uN��U9�'dK�H��%�� +~z����^l�ZI#�jI��A��R� >"���XN�Nw��Q2h/ ���9Edƭna+�N�u�6����^ŭ]���#�.��ƈd��9��4�����F�v�l�{�&�cV,V���T_߲�a�����9� +�W5�i�<fo��<�dq��mA�L��?���#���?5�i<�ۢF��x^�6��k���8B� �}�<=�o=����� +h��Š�I�5(ܤ41Vmt����(������6������ 3�����\W7�=��~R}����H��"u��3��*w����[*5V�T�[R�(z^���\ס^Lh��4-E���)�Ǫ1C��:@4�g����[�@۲b���Pgː�l,Q�˨��6j6�`6xdR��3���,�B4��ʌ�~�[��('oSE��2�s���!u=�ݻp��k�XZ3�����*ꮊ���<_�J]K/ +�H��6����u�)<n�z�J.��@�:�&h�Ş�3ͧ}�LЎ�t�[Q�k\3`��`!��UF���P�z/�+݇ ��� eUA��権c��ة��ۃE�,���"7Г(=+���),�=jp���&����c��q�4�Dr�'�D]�k��#��h���O���h��y�jk ڐ6e�L�/Ty��3�_����|C�=�n��~�q����4�#�QE&����'qa8y�>��ϥ���l뗙��ފ�~c��R��G�r�`�IB�3bȃ��o��L��_�3���~xA�W�i0"0�/ΰ--S T��^�bԸ�Z�e4������4qlJ�1��#�^�/-��U�K��P���є����Q�'���H�ܽ��Y�Z{�=�/����wSV-[<�w7��;��-^e ։�6�G�Jp*�ܗ�����w���J����)�߮�[ɭ�(�������V�L)\���"�z5;�2���u�a�h�8�3�L�_���Ӽ���l��L��KaA@w��Q98��XW��n�M5��0�K��k���#ɳ�����G*�T���jm]����i�����b52��mQ�P֭��-VW�s:�+i�����>�i���Fm��n���1�;��AU��@[��ԊҾ�&ʭ^ ;�a ���=��ԯt��ͱb�"�U�����y8A�X�jwg����<��j f����\����æٚdP(0���ߞ*bֿ8������Nٲ7��%塠����WGύ_ ����X.)�B+R�J�Q��S���Bj�4��c�YK�O�5��u�,��ba���.��:�F�8��g=̒�W�}��3~+V�p �Q}P�)���fX��Aԧ\=��k��mu��B���K<IC�����H b�7=�̀��̠�r�O��O��n�q�AL�*ߵ��<��M�4��a�E1�_;��fQ��7OJ8�/f�,��_AJ`v�����;ń�x˘u�%� ��A߰m��"�P�����a�P�䦹3�����˾ 莴n�!���F�� +y���A���xF�N������Y������˯Rou�ކ[b��q�Z�F��cl��J/ +c=?���M�!����!:��Ñl����Y����u�M�L+����Uu�hl{*8��%>�4�qB_VƗ��h�����k��-�. +o�{��ԃ*>\��iY��ݛ�K�[�W�Z������D/6�/U�6z-^3��=�6�E����1�M��K�aW�:�)������u��s�z `7���&ߏ|��dnVhΎ�L�7��ܞ��� �m�b�Y�a������ �\��� +d.(��Z��E[�9�.�N8��<5;�8m%E5���)�*x-��I +�t��z��O%$�N6�p�T��Pw�3%;F�*V�=���E����4+���rBldz�W]{Q�{4v���tTx_h��>��«��Y�:!���G�fm�äT�v�y�����W�3�X7W j7�ރ���_٩壇/�V����_��~��#�z�9����$e�]����i�U�c+K ��?���j.�L1��w��V�jj6��9�(�JP6�����7��cܒ����/�ys*��V�vP|�&o8�. �Nܟ�p5e��Wq�保��O}P����������_�؞�ړ��r�������=3=��=)���guލ��Y�e�*���*!���Z��_.��3E匃�@��U<w_� ���5�s��5���ow��\����ƻ���a�{���!jn�EΓg��?jُ�U�W�sN��R��$���䥎����-Z8V�kz�D!��D�X����-������O��|�ݕq� +���}Λ�o���3o�ҷ��S���(�,e?z^�V�?�.9{��|y���c3�V�|˝X��ܬ�w���5T���q�hI��� +���FmM;08��B1io�-S�&�=_S�u�]�=��=fφ���M��G�^�L +Χ�~���������O�tib��eϽ�M�@��6�zɹ^�zϠ��A�Y��1�nܼ�`W�㿞��R����%b{H�r��};(�'x�"�A�JM0�{_��s�|Eѫ@Ma�`���X <�~VU�T�$��O�F�{�`�S�C>����ŧ��/��F�YNg�9Yt�h�ȡ�D�p-�b����N0d*�QL�_^J'����=kV�DŽ�l���8'�Bs��V��b�#.���6$�� +�)�E���ν���dF�z{��O���t���jx�A�E�WRaySR�瑇���Z����bߑ�Q����P� k���J�أF�� !ӭ�opw'۫uH#4Ѿ��ui�^+�b�h�Ed8�&�o[m�_��nG+8�hɵ��V��P����*���b���Ғo^#+��������Iۏ��܄;°��o�[��8Ώ�E ��������0�V=���`S@�<�5���P��Ra�#,�^I��K����[`�d�_��� +9�x�� ��U�Gk��[O�+iq.�~�D�5�S����n���78nK��Ѫ������)��t`�vŹUP��_(�f�1�ʰb�9�F'�jCE��_gP.����azN����_�?����?@،ɽ�ז�ҩ��&��w�o�hr<}�A�<���2]#�:��X7z������ԟ��q��e���B��T����t�x���c�N�����u +s sFR�%��D�i�B���kf���e6�R�6��\�熁�rǭԈ�mZ@���3�YD��L�w���E�&9����Ï���a#5<�ݭ?͛8�9A�P�5�<��x�b~�d����%t�V�eZ�/�B����pH���5�O���1��n��UY�W�F���7��Ff���S<*mKj�� sY�:W� +���1�$Z�V�s*A���� ��,����z/���|���� Á�n벤��tŝ�P���T�������rJgig�{���蚪v\Ǝ��;�`O�}��^�"���.�A;������� +���E{e�ܤ^x��M�wm��.G�yzk�`wk�h�wh�W�ic��4v��/�=%�dq�7x����嶝�'*�� xh7jY �ʼnl���ϖnX�/�IoOM�r���_�_��w'8 >��y�<:����t����Ot=��p���,5�'G�Z���qw�����+_Z�!�E�xA���aj<.p҂&qVi% �<B���+qe\�C���lHc����\�\�d�D����+f-BB4A.��>�������r{_�|R�7ӧQd>�*�h��[�b{����u=�cb�s��"��(i�ў�C�٨�Тv ��m��Q�MLqTh���N���25Vl^�LС�eO��^Ȫ&� ��x�d���N8���o�����c8L�����Q����6��'���l�a͵��og�|����F�t�ܰ�u��Δ��O�s;o�t+�F!��W�S���Z��B��ݕ��X�́E�\��S�ĩv���" pY�,���Tm_h�;iqę�H�,�3�,Xf�<����8�S��?��x�˚�Y��H0q���b�͗�����R��m`��[�bR��~�)S<�?լ�l+ϖx�$6��dp��JK��H#�-w�B6��U� �.���@���Jb-)�{��K �n�"��I0�t&:+�� _�\<�kix��=-Bjr����R�~J~������hw����|��S�uֽ*澔�����;�(�7�H�.�C� VVnW�ӽ�.�U�m������HVM�P�c��wO=���IY.�V�ox�^�D��d�co��KV�c����+�#��:t�L�š!��!g�8NT����@����?��)�]�uFz:o�6�t��� +�����B\����C��v���W�Z�Bw�9���4ῇ!StK��s������3�?���މ%M�Cƥv��u\�n�m/>x�Z|�A�]��6���6?��3B��H�A���.��c��v;23�Ě_���MnT����[���nnp_���O�Xq}9�������y ��Ϩ[IHN�M���0ہy��rҭ� �˞0���r�k��C}[���8�Ȣ3;���Bަ�]EW>�Q� +������7�y��Riyl�������y����v��˚�s:���tB`���#a�1�-9l���t�y���F4(�S\�⢸%�Cͫ�Micy�47U���T����;��~�#EAy�f��:���y�j֫�7�gC�h7OSa?��UϣC���#��6�r��X��1Yh{Q�C=@��d�ԏ�� d���dUa�[�����2�5|��K�kHt�P��5�T�O3�&��`�W#8Ly0���浃[s���/S�B�Q������Ʋ�N^w���Th�{��(�k?On��������c�g�5���_���]���1�4��$r��nÃi�\�������!7�2�p� +��z���Ň_��WG�N�:�����4���:y����ډ��o���WR��+��\���O��M~ +<�����qH��k�u` +�?��p��_ q��^]4������Q'Z+G�^��M����i_�Z'�����k�xA�������+8��>��ç���+$[���@��7� ��JKdo5&�bU��hN�R*ɷ�Q�j�oO��j[�^}!��Y�j���c�QwE�2�,��#��W�:�hVT��JoD�rVT?���o&y-���H[v +߇4�/J�~_�x�~ c\����S�������:�g�wV�����d�Ê��V��EgM���v�2*�:u��#�s�Qo��.�O�{��R���\�յk�%��+���2���B_��Š!]�5{S.�or��h�m�.&��o�y����;9�Q.V�� +`9�� s +T���.ۧ�̗�>�"�K3v_�ex���"-���~��ܽ�V4��Y*�(���(��Anc���m�x5� h�[>����{��B���� �o�S� +�C��1֝�a���<{�|Y +m���0��M)�?�X�z������(�%b���7b�����[[�mF-�tKKA"�O3I�}�Z�f��y:���P����ѷ�<�I_k +y ����f]i����J�\MK'���S�i�@,�Yݲ�k]��s8>�{�p%v�kɔ���������29ˮּ����l�:��a&��� +�h ֨)?�(!��lH�nE�j�I.�m�ߔ���b�����|5�����8�y ���c`#?wbL]ۣ{F���(��v}��B=�k��P��( �ҙ���)Q��D��U��)���g$�2�������G��6۱w���$Uu�Y����r�Pn5�@�x�h�B�T��ƞ���MO=r�S<�G��E�A��u��I���NN]����=Ue��P�������jJ�V�f�F�����rH�z�RȔ�k�Z+�8���y�Uީ3DQ��5M-���IŪ���>��|g��n�*� ̮b�_��y��<i����Z��o��f��STHlj%�b����)��P����@�m�9<�q���~t�}�L���>�,����VDb�|�<���s�J����(t�����`�oz-����������tX�U�x�e���n�5y��ҫ�.��X���D��3v�6^�C����PK&0^�׳vcB1?��������"!�O�.70m�G���{Y-ժ��ܠ<<i������Z��*ld?�ֳ�����5`̀�&��͟S���o�\���>���pRm�"��r�4�9�����t��^yVړy�J*���� �nX�S߅��V�����SbdLt�톉�S;f�#�@M��8k�ԫ����\ �5�ګ\��<M��2�$���9�F{i�=b!g�+@��g�$��E�V��hh�M���7�ScU"�/�����{�{Vvy�,�}B'9�9;$�U��^��/����E���|f��ɝhb���JV���i��<J�k��V�/���m':����as��ka�.n럝��Gҗ�H�]|�������=��{)8�u��\'Z"f,Vw��b��g1�@<���Z�{ʼ�q���`8p0�Ɣ�s��}����H��d[�� *:,�E�~hR�,��4��Z����L�o�!0��L�:j���6,��� T�,t���G�����0<+�;���m������t,��Qj,�ْ��|�hKp�7��:����+s�������;�_߮5P�2#�{G��Z�N;qs`]����Y��mav���g�q�]���G�ݎ�X�s��~v�4�k4U�;��lBL����������\ƽ0�@$�M|��W^I�k�̱N)�5\i�Jfu7��9����͵���B9���)RA)mT�߰���^�op,DJ|04���6����=D&�en�I�;�>�����f��'���/��G�/ߠ^�yͻ46x�4��3,����P���l캯�]���418C�ȓ�@ߣ����G�����&]� �s�~��$ +W���hZ���-Es��}ө��[ _C�7 �S3Y�)#���L�j���0��2��[���>�f>��9�J����T�����4����b9���w��;5%=|e�V����]��d���Hh�k��Dl%�+rk�A���jrl���(��.��UJT�d�����/g�y<3_���dn�������R��������Co�Ni"@��Jh5��ܒ�� b��+�j%_qv)�7a|ߵ�i\w4�����6�(�@�w�Z+���*n���O6+uM($���rN�[��������x��=�?P�;���z�xIۇE*�xN�oR-!?���K��L��[Hk�Be�� +�g����@~���-Z8&}k:�r�r�Z�G������C�,ײ˙�k?���dj�~�@�up��q��Non�ol˽(;��$�� �J�)ff����X���?�{�O�:�[�4��X�\�hh$Dk��L����k�rԂ��l� +?;�X�Y���0X��$���h=#ϰ�?�2}������.�r�g�p1(��ʼ"(�l�/��?����[�T3�����ھUY������X[e?��gw���y9���`��k� +�:���Z�CFx/�K�-T,�3�ٍ��6��N}�3}ռ�������p��hB]N���V�yp��h��3�`5�/jf�k�Y�:���Ȣ8��+�aap���P�ٓ���_�ͼ��?�O��'�����)ҙiP�����ܙ����P���ϫ�2���j������� +?�ٻX����ȎN?sG��Hn_�͢jl�Wj��<�Y�+�I��������]x�r�z7`^��A��A{�z(��F��^�'�O,�`��h��h��s��B�&0� 脒M�'�-��@՚)䨳�����t%߾��=Z�tȖ⎸��5�1�Pm��n��GQ>��k<͞k�<��vE���������VC�Z�2��*��,��B:�8 S<�]U�9i���KR0f�;�����&J�ťeF�Q��M#M�UC9��$Yu��f�Lތ4-����21���x���/�5��N`���t啢���C��Hw&�9t峡�]�����a����P7��Zrm�3Mk������izhX�B���;�QW��܄�]��_g��S�=��`Z֓��=Oܶ0��ɠ�)V��8��=��n�윸i�0|(p�^ܡa�-�R�Y�� ���R����f���_'#���G�X�2yl�j<6=��Nh�~ a��j�d!l9�j�Ļ��w�jM�S�+��q��`%Z�,2W�R.~�=c��z-I�q���۞-В�P��)���^)����D��8L)XYzbs��������}�3.p�e+a + 6�&�c(�Yo�Q2�,O8/�\��D'~S��6 �y�6�LVjU���+��c�`��XzBg*���>Q7��❟�:g�?�t�+���?�֡���D�H�P[+0Ƽ�T�q���^�ɋs���~CϺQ��.��zX?��쬌��>i�{j��F�����?��kMy����"l0�66�9g�&��d_���=3���O��>h(I�Uk�J%�7�\��;d]�N���NKP�>i�g��=���3qt��� b�1��P1��,��lHp(�!s�*�bCAʕ����;�y��>=o��O'hX�`��d������Mx1�/��ˢ�xؙ��� +DqEGV�*�q{�X�5����a� �����[�d������?�G�>_�V���=Y���a����K8�N��I�u�#ZTv�p;��`e��Z\��(Es�����M�2����2/]y�+�|qb��[��n��^d��Bm���ޒ��k��b*(��f%�ٵ!��4M��ғ�� +rkQe�{�a��r��J�Ԅ��� d �͠jKX߷�m�(�Ur'ݫ�M.4� +3,���;�82�w�R��˹j�O���Yt'L�͍.�uUU��A<W��}���,mK�_�h�;zņ�yk�����q�t��W��9����$n�b��+�Ѽtd8[�J�_2��'`in���b'��S�%5��Ɠڞ�Tq�2��������\<<�yX��Ү"3h�#�[8q�ۤ��Ҭ�I�˴_�E_ +����(��G�iSl�������f���;���ń2 �P��ZYt8�� +z�O��n�˕W�'�_#����#��¨OL�����8U�b�%Y��fxE:��,h]��|[zm���y)��k��ԟfI?%t����%��^\}���؟��/_��]wy��S �4�Ri|a�2E];I�7��ci��T+4���97o +z�T�����ʛ#e�{{�� �%TW j�i,V�����Z��]3� Av��4�+эኸ=\y��ݑ���Bf��Z�"x.-�*.g��~�LpNŜ�4T��,��nHT�30�)�%�I�Y����h�2Q�Cx:)�+[�+�_�fB"��*̨*X]��^s-~�o�P/:���i�`�NT'��Cg����C�ݿ�o��ϭ4W|�)�L��(;�����k�w�&��nq�{��Z$�g�h��Y�����z��Q7��`�⊭ a�l28K9&�E;�� �`X8�iO���]�}��hs-?�!������F�>�(%W�>��[ߐ槃����8~֊*������_�(�9I�dG�=��W)����OjO���i�M� �����'�[�&�([��O �Uo�1&ۍ{7|t�$D��c��,����?� �����Y�,<���QP1�ĉ�Q`�EPҨ�����(����Iҝr�J�b5��3l��Sg�ax1�w�Q-�C�SjRo�y �sa�&�̧��P��Q�5�C �J�B�*��Y�S��Hw�/���q��R�:�H�V�x�BW$�@�Jj��5�ئWQ�\�^��^��]�9��hrWe����1��]�<Qem�j-VӔ��^��֢��$f� Z��F��M����i}J�~�e��-��=�+��N��.����;��Ru�����d�9iÙ�On-q��G���'��:�K3�8�����Ex����4bX���Ֆ�V�X�e���*�b�>9R�X�KfIL�A�)~Mb�B���җ�Nr2����^;iC[�_6��Q�)�y�_N��D�G�O'o[�X����%ޞT��U���s!��e]P}9`F���b�~ڗ���*�|,�k���<�\�G��q�+�lj������o�S?�����X�D��2�u�<H-���N�oK�G��=N��ª�П�o�<VJM��S�_J����B�k�:%���BExl������Q�gR��ߌ�yK��Z���������$]�A{��hvkK3*������.�)�^�}�)�I���J�z˷ȱ��ތW��s?�[�{J����4���*yx|�U�GZ`��:�w:p�|J�DS�m#�y�/���k��j��_v��:#�`�u��;�c�M�ڗ;�@�'ӧ��U3�6��~ �i��QEm^ь��W-��)�Y��l����p��T���z��`���ʮawE�� K'�Á7�Dyj�����}`��1����������\���c���F��{��*<��P��>��T�4g[6p���)�C/��^�rFI��K�#v�IDN�KUs��\��آ��!&v�tG���E�9�O��߳�<����i Lܢ]r?�nf$e�_�'��?�4>�ځ_�Z�a�lP�*�0��p "�L��M��62Ň}hx���5��UB�lK�o +�Z�Nk�r� �������� +K�-q5��9��X���X��tpIr��Ն ��X&�n��/���&�������!�%Jr'i�Y' +�X�jd|'�e�;�i���V�j�����_H�Ư����o�#W��Jk�d��'RH�����%h���v�T;���qڅxpk�|�Z�m�@[�I}�z��l��z ��̓�lvx]�)W�rf,��o����/a�Z�e5��G�'I'��k;����f���d���^^�+|34�� m�˔�S'�Mͪ���C���Ɠ�[���Q_�4��n�5͙�1��˕�C�-�ޣ6�����&� ��*-��,��/���� ���\�"s,2;��&��O+��߆�����;�:1s�������v�SNr����l�u<�0�gI�6�-�W���_S���lq�9��s['W��ד��Y�]�~�m�mׁ���CK�) �6�0�O�3�E��C�t�+���؎T���ۯm��y�4%җMg�j��9=��_C�� �v���l�❐�%�2�9.=1`���2�'�]y�`b��xi�������qڟ�I��5M���)�z �@�W��|b�缴��u�������o������ �͋v2ω2٥�l��،=���h�ϟRhs���ýb�������d��㗹\��Um���C3}gkս�\r�ClN��Ǫ��MDt�hT����?��]��k�e��P�z����l,�>��!�4�}���!?Y���xvۭ!��k�Z��F��ֹ?_zN|�Na �F:��)�#��̭_�E�zx�O�KI\��RӃ-�9�+;���f�.!�\�Dfw@꧉k�(�N�b��A~,��an�DV�&\����/:�#��x|=E"hH>�9T� Tu���dF�&k�/Kڰ���>��t���0�@B��ze��LĚ9���3 B�i�g���!+X��W���q��A����6�f��e@}k�¬*Iң�g�!���8du���mB����B���()j\�fZW� ���7���'�X�`X�;{��9���uܴ>�7|��e�5�=ts^k���m����C:�54�� {7�8a�d�1L�Z�4�e�@C%���_�d �`ш��������ϸ!>�њ#ϝ���^��/�;�.�ٺ�[���F-�y���!1ظ�2( +d�Z�=�(&҃�����Sl�*��9z�b�,N�-�ߥ��s� ـ�auTI>�G�]�$n� 2+�>r߃_y�y��M&�#�w��U�:���i��.��:��A�=1\I����Vh�@�ϒ�8 �/UX���. `� 5mޠ /?3\`?qu��{�bjИxdGߎ�m��-n��-)��T�R�+r'?����4�3���P�����Lh^�@ie�!m������|x��Q,q:0�4�Zg|l��jEW���x�D<���(;����թ�]�ɯs+�`}M��%�!�HS�Q&��F�9J���Z�q�d��hA��{�XuAjG��駐���m���>S,#�-�;s�Q0�f��L�i[�`Vʀ��9�9/〟��W�~�UT:�x �@b;i�^���ẓE�p�ߺD�H)yWĪ�s��ܿ�h4r��}���� ''M+Mwd���f����W���z�Z�b���j�<�ӏĽa��2��Ic���1�b�l�#��� ј�� +�塝�^��^�E�XoWz��Y����O#�[b��֧gƁ�=5E�?G�6)'�D�����7S���>�0P���<�u'�A*�fr��h`�'��P�7G��<X�_qx�\�����]dȤu�nؕ߃,����T� �g*q���{�Ux�u�2%��В����X��R��0e�����D�%zvfw].,�E�K��c2��o.O��:ׄ�)ǟ����sm�-�C�Z+O�0ԫ�~ȷp����7��t�� Y�k�� +��٠�g�jL�^�����F��Js>��� +�L��?Et�Nצ��d"�^�p<n�����#����bs۱&7��W��E�5�zV�o$�oa���ظM֨����̻s|��6��D���:oؤc�������v�a�*���z������ƌ��@�{�77J�!��<����ό���p����1~����'���7�o��G@?��Z��k�z�50��(�H��\!���� )��s��M���8�Cӹg����[�gg6��ut����W���������´������Ӫn��[�{¼�r��.ՇK\�O�/AB�k�@*#vU`k?ն�z���� �ֿgw���}�U,��z�&�Ȗ��y�;/9|iUn.�M�eo���ώ�"I��[�������d:v�V����ʏ��Dl���r�̓]M�!�\��o8�`�p����8��vy��e�su����S���4�R�~Ef"�V�F�b_�ۘdZ� ����*d1G�����?j������1�0�H^���6G�O�5�[j�%�`��+^���,6Z�s��}k�\Ļ�ù�RB�ٹm�U�����oP�r�1���m�rX�q*�c���%�����`�j��0�ڽ�_U�?��L#h$����-ӷ(`�k}�Jw<��?���o&^6��H�-�.o���k��e:�����f�u�<�JX��E����*t]��]�-�g�(��Ǘg^�+{=Em���jg��k��=�hػ�!�-���y�������Z�#�'�r����"�,AnZ)��YL\��jV&�(�7W\<,$�@���t���O��)Ak!��hř=�,֝��:�_ke�i{x]a��pcNm �M��P�J��rkK��[�}�$�\�+~;]s�'c��XQ{�,��6La��j�g4��]��xRE5��|�����ni�g�~��nPe��d���ӝ���:%=8#���hM�U@}��mUi����h7��y�sJ=�Ԉjh�c�j�b����!c�(p�xC�Z`�gFlu��U�8�u� ��5f�:�i�{蝈���>��Y�n]j����eSW����m��E�.�JDǀ�m��O}Y���#н+�c>c�M��x)ۗ�_��>v�B�VVx�-����Ta:�+�2�b���+��Q�ϧJ��g��Wn�1��X!w� +w~-9c����V;�e]��@�����gY~�"��l,NYM!���Y@�T{_�"t��x�#��s�kA�����?%V��K��;�G�����|�������S�����<��X���o�9_��tEL��V��i@�?R�Y���ŕl�����:'����b��_V�JsCV#@�V�7=����"�F�E5�*�/�bޣ�:�c*��������/q8+9�s>��~Lw��Y�?^g]B:r��v������d�g��;v�I��>'�neL���5r�����oW��^��T������7ڕc�6��6���`Od����}?� �Sh 9�eUHhs7�;4Sx��5W��ư�B@� ��)n�ǯ!������2dh�F]a�������%f��َ"�c��U�_@�a�Ej����9A8���9��6]��'}��k�V�6;�.p�^��a�ؘ̣y��DŽ�k�S��*�7�w��@k��Yo�k�l'� +�j�3h�^����u�1�JE^��rr�y'&�MJm� +�8�ҝ)O�$�ŲJ� +��M��Q��jK�\���N'"� ���������8|Y��B�lV�u�^�J�(��3��+��>���� +SNV�o�,-�����`�W�_���A��7 NF��n"mZ ��ayu��:�p��� ����`^��'�8.~�*6Y��U�w�#�b��HC)��K4D�NR�A��!�`��ٮ~.L�]|��B���=��lm�fZxyp�8]J�ޫT�\�(]�|G���_�=���@��� ^+�~�V�3kb�/��=��f���wX�v���Ͽ�����;Zj����|��c�"��Tl���~^sq��Tמ\S��a"���<{�z���3�kOzY� +�Z9�K&�%���-TD"G~V����'k~5��|)¸��mR��;�8�d�[�[�ظ]��㜳W�M��%�;��ϧ�Wy���|s4�Yd���e���:�X���0��J"CV +���H�-�(lZ�!����i]��5��H����}'����HQXY����vE�ZI�` M�ߣ�8�l~M)�'F<T֊:�~�l�ciMTR ;WE��Y7��&�O(>Ѝ�Jv?3�������P�u�z�K�L��Z��f�����l3R9o�*/�SR%�ݢ�^/��,��D��\~W�8�L[�jS�+�5���^�2�˹�q�������貴͢n��gL�rj���+.�ן��u�"�m}��^i���Yᅥ�wo���c��jFLń?ڰ6�m��9�p�\+6���|_��V<��J�ήQ��n��(��)8��\�SY��h�x����������3�oNK�~��J�����{�� ��$���g�zs2�D)ǎ6R�V�f�˶�?ɟ�����'��zڥ�m���}5�Y<|�����+Qչ8&��h:[wW��W�c�j��_"�U��o��P`�\r�>V��� endstream endobj 31 0 obj <</Length 65536>>stream +Z��g��Yd���x;���Y�5J�2��k>N?"ӿMA0c�,m�z "w�\�<�3`Wª<k +:�,�ǻ! ��|���\��~ ���OeW� +�2o#ͩ���[�g�SJ�Y�5V����3��o��V�8���ў'Y'6��C�+�z�7�}a���WZ֭X[����I�j%��V>6��2��M-��&�>U�0yߵS|N��$n�G����������.������Т�i����dC�L�ͳ"Z��d�~���j+���oC��m���I��E��n'���m���R�1J�Ӂ�����a�d�M��������&��5�ǗgKo�!�,/(��I]����~NCh����F�q��1��k�u�)�_� �X��?���"�1z|�h�~��~�}�Jl�Wc�Q��yP���<农�懅�nR��̡��5{��^m��-П����v�b�_�����7�`�:�������p���BI����5q��.R�+ܜf;����w=9����G�������y.��a���r[i|x�N�x���4�e��8�i����5��@5�c���9�TN�_�¦�E�m����7����_��`�#ԉv�Ց&5�S˻�t��4���]`�.:i����,>zX�㎄�R�=�b�����L��/g~e����&��0���w�-��CF��r<�E�&����������7�����5�Ϗ����b��ӠZ�0�.�* I�U�Y��I�R+��T��#j��x���\��ݾb�D(����r�B�J�a��!�oZ؝�������i��K�w71>j�Lh���$jS��}�2��л;��=�Yr)ڍ����io?>�;]��N�Uf���NF4W�&mnv�k����Bվ��:���0$�2�H{�}�-,��x�.Ѓ�o����|S �mkJ��S�Ȩ�����)���Up��J�v`S�K��߸����=�a"x��E�.���u:�g��v�,4�=U��M*�3��*�#;���xP��nT��3��EudVWô|�i6i�n\$�����FELJ��v��ϔDe�4=��Ln�9����7h{w�.ID-U�c� +�[�@�pݺ���^l_�6��m�-��`�vS���{�Y؟"`wPu=:�đ��k:�,���RT8�� s�f�a���r���U6���ukn�8����ayO���@Y�|��M��K��s��ճ��QwN�����bi�{lcM��*�~N-�S�O� ����v�L�x(��ְ���� +���[�X��W�Ժ�dzv{nvu�����s�n��2��В��ЉI���`�´�~�;��&c�y��N��d]� +<�-�9Bi�])DR{��x��,��r�%�w�%t?��� >ޒ�F�z�.K��|�3��[6�3l�ut�;�q�\z�·��(:'�bU���y�'%~�i�����K��tW��rK���ޚ�ʇ���Ob]���$c� ����4ەhbf��x�C��n��qHA�S��z�����Fߔ�I�u�S��:kU�������Dو�#���Q�#U� 1I��j@W���(φ���Fu�>N�z�O�f�� ��gL��m|��k��xޚ��6�n��}��^d�9��K�����v��VF{���m+]o��1�l�E����rmgLo��$��!������ƺp<Vn���\�3�[��@/\�^Qkm_�:q�G���-P�~�}�3�g��k��j/�8�>�y�+`;��x +��q]L{�-� �ݶK �����< +��ΘT�0V���O\���>�bL��|)�"��:Z�:۟�:�ƫZC���61]F��;lI��{��6I�p�D���ݶ�L�S�'�\�,������0�U��^�:�����D��c�n�-�>�r�o�&��>���U\,�ʓ�2�M����$� �ų+�SU_�)�[RL�܁�X�����ڨu[�ʚrU�z),W� 2�}�<2�KU0�MZ��v�Y�zܵ��~t�)9�����h�W|T��=��0!��@������4�0��oQ���ѥ�ƎC��̓�ڹ���B� �(���@���}����|�y��t�^ŗ��b�4؇9Z +3�2�5;��P��yPq�Ef�0�+hL�,��Z&=\���dGb�ד֮�;[���v����St�d������e�����?��r��iL/���Ҏ��>`ns`<�c���B^�#|�ǥ]M��aF?��r��� ���%�]5��2 �B�|���T�'e(�)E��\��x�(��ۣ,�ۥ�I;a��I��W���.kRs��}9��M��/N�/�l-���%ԩ��Fm2��^OǨ�y�®��mZ\lU�r�5@����� �6X�]�K{�zRƥg����H�`�݆z�u��i�J�4��w�B�����+���Z� ����LV0���{���4�8_�?ޟ�Bo�}��+c�� �T�����D�o;��qwE�ӗZ��/u�=�58_���zЅ�:�[�k�f���Y�z�9�h�{���q �l� %'l�Q-����<�9���e}�|Ƃ����$W�aK�o�/��<���\8��H�g%+sp�|��z?iD���Im�S�vYg0��g�ea=�w�sR�5|2Wg�Tz�Y�ڜ�3ݘ+k�Z��/�ؙ�Z:��X�x�z<��9J�8�O�ж�]�۽U�vA{���Ί<�X�=쌹}��$����<7hb%�\�����9�������C��\;>�Ka�*���D4_/��}��Yv=m]^���&C8�Z�0Lc��5��=�R�(c>�?MR-_�>�H&�ocd��'���N���3td������cm?0w���rzm�uK=`�3?)�7{�S��6����h�� +�[oϫ�7���̐s�Ӱ>�Ht����JT0���Z:���'Ψ~s`�(ΏF4q{%��/~��y#}L X��f'{+C%�)�+�̩߯���Ck�QC=�ZB�.��%$R�E����8�a�t�2�ݽ"����7n��V_�3�gv�����A:���5ݢQa�j���`W�>K��!ȝ^x��4����m�����Ȧ���I6��N�S�_Z����;Z���#���R�ӱ�Ӥ%H�jR��!�l��9����`�=v�h1����43lD>ű��g�����Xse���3}n���y�7fwؿݧ��É�^^_���Z�lc�q��OT��g��uo��WX(�c*~|�O���� ��s=B���Ԏ�W�Cn.6��м�7���Pk�o�W RC)l���If/����)��v��}������n���#x�]��+��Coh5�j}*Vo�p��U:�/W�X�>�4?cY0'���Fy��������Y��r�M��֪ �j��mmw��>y���y�~�|/�:x���t�� m�њ,?-�Ӱ���뽭r���'OJ�DUs��q�n�lg[P��n֛Q�����V���ȿ� ��GA+� D�$���E@�6�m�h�۱}㌣��ݼ��.*9���hZ��v�K�J6h��V���M���vX+�3�>��;�s��v�,7h���L��ܛ����D��[����C;b��IA7'ݶ���eexlMSؒ�:��At�j�}�̻]<<�*��^єND�p���i4��^@ϓ��-L�{�n +]a�$��lx�����$GJR>H��Ld��UM8���Z�tH�^Q�uN�6�waGܛ��j���O�?⋔�@ǧ�Ҥ�vOd��Ç �p|�W��Q��c��$[\D�o�����Š-�p�o�)���9 a��m�fG��p�6�4�G1��V�%B +ֱM�.5_�#�"!���N��}+��� ���9r^��f�^Ek��{�=;x�u�����d�t����Rwtv�x�ٹ�}���N��2K�j�I����;w�ՐI��_�ʂL�� ]\Z�6g��fio��4��P�3��n+~6�t1���Nv���E]o9&�$p4L����YMQ�zD�D�o�[s5�ϗ�ڭ�bN���NN��e��7↑]�F�+Ue�/@ih��ӣGDJ�%��v��E|_Y��w��-~�1�(��".}� +����t+��N��nFf�4G>Vș��42����kӖu�:]Ƥ�a���֪GL��v?��Eх�mxv��?�����h����[6Bk�����8|�*�f}���J��V����o��L^��htq6�^��t��[�_s�l�%:��nMKـ!�Ku�aߪ���O�p��Yu�I��>x�A��@���z�e��VӢ��4��n�?nv������E_�@lg�<7��8�gA��7�y�)��A�Cn�f6L9�n��~�{��#{�V!������zi���%O�W�饭U��c���@7K���TK?�N}@��q�]M��� ��`*������pr��l��D҆�ˤ ���]����68�;!���^M�f-��Z�A�˱u,�'�������N�V�{�c��E�G�Ԛ��W{�dKZ�����V�K�h���į������WX,�:]��!V�n��U���g=��l�*ٍublZ���Tv9�ݴ0'o��uW|�Z2b��m^���)YH�(i����v7������W&�Ť�g�5��|�Vc=V�t&KWw��S��������t�T��wvk���I1_��.ƂZ�ed�$l��ץ�)���9_s>L�g�q�� Vvj�o> �i-E�b�=x��T�����)"���;�����f�<ļ�b��gT]���>T�����.�����(� UE�FW*��J�VK�음�ӵh>������vr1g����2��@1&'O�|��E�2=1쫛=���5rK���$�"3�����ޓ�&��LS�n����?d��O`��Hw��Pm4���*h� ?p���_d�z�x��C�Bן.|�惻��O�;�x��'l�,��j�~��|�U&�<�S4�N`y�q-�C`���Lw��D׳@2� +���ُ�/Ǽ���j������1�a����$������f�Z�� GS��Sλ� �A�o��˒V���FS'��Mѷ�D-<�3�xD{���:h�a5@�\�a��<��Z��w�9���R��g��*���j������(ZGY�s݅��)���b:�)J�KŅDZ�R�@tk-�"�Z�uwm����Q����֧UR��+�Lml2o����`�o�V�~{ �x���0�y�����QڴI�R���{Kq�\u��\��3���,I�#k�Dl'��j��#���+ \�;ê�$gʷW)7i!�MT��z��/M�Ri*�N��A <L����\��C�90[���ܢz� +�n�2���:Z��-p}��p�m�'�sl���C�3̕� +V ��>Y+hx�S;Xu+�����7�k���r>0��,Dž?�5������%lL��;��Q��@]nK�l�9�>�Qs{9[Ĕ���E��cl��[�� ��9�>ㅦ|{1�@. ?%��o�8�A0;ʌ����:#+����v\X:�=��m�G�^q����xjt⎸�d]�� �}hy6Xk<��~���V�w����o�W$�e�y;D���t�����1Ur��-��RC�X���І����N����#,��F���̏�6�y47ڎ�D�. m_����"u녻mU��P.?�|��z#8�A(��C���~ +��v���w)*�V���c��;��m, ;�F��]ę_jv�����:��^'�!6X�q�B�r��u|�y�a��O��w�2�j�Y����o��2�|��h4���E���j���Gѐ^ߣ� ��Op���VetK�������{���J�����������6�� +�(r~�ʖ�T�����V���ުK.�C�I�4�O����P�>���@Iz�Չ^o=���\��v�8v�ƣ�}��VѪ>� ��8��W���q +�džH ��ل��� ����I��'f .�QCqj������yZ����({� +�'N�z��xnF�0�������A}�&�迼�<c??V�ՙ�cc:�V;���P��杸V.��5�;l#��<9�ɁZBw���G��� d��v}�"��=�<xF��`�*IȲ�ڮ��\��D_��Ӎx �L���Z@y�v�qd9H;�~V?s��Ae�����Y&6�p"�\b1$�C��*<���Q���'{B�=-�c��e,�\r�9� [�mB�6���lRIk�:�_�@�<˽��� ;�##)����6T�Z�kL�������}P��覍�`d<��)%�ڎ�2u��U�T�u�K�������].H��~��4������n��n'=!��ZD�]�F��s\�y�jU�1�{m{Qu�<����3�_,fC�I���tE�δ�?G�@��X��Ӥ���t_�uٕ2_�"��e���g�aN��M�k_<�h&x�����\w���@6���5r��]ǡ���&�.Yn��J�^A:��S�(,>_�za�k�I���m2=�c�:붋���I�~�/��\tEk5ݡ�[��X�l2�ՌX�_�P�����i��2� =���^�:Tڂ�,�������I[�g���`����o섇x���sZa���ԂW'�G�{{�.\�;�x^�ނ���낍�k~:�nj5��Q�up���m�����і��U x�8|@}���unVq�<w�-�r��j�)/���(���=���4���}��Q��d�a�z��Q�Z�g���:�am&e&��+�[���F�7<�O�Fp��W�0��N���"#�����l�z�Q����6p��P/N�]me^��[���y��{�Pc.��2Z[Ed ������6��d�� +�����u?��#����Υ�&�t�����U{C\&�Yq0$}{�ڠ�e�:h��K��W�* �lWQ?]��y��(�/��z{#����^��]����$����mN'���ѐ, E��Z +r�.��� +�k�7�>x�뷷i��FeÐ������8c�`�lŸe.zyU`�r�VZ�f3n`���},�n�(k� ��г_�_L�p��G�U�� +D��E� +���"C��]ؽ��]������V���x�lюF���* \��q���=%ab���*%R�T��;YE���>3Hb�ng8Ts�D���0zׁe<w#S�^r<���b�6C���A���M/��B]����n�c@��k�T��VI[nma\����袣HRP�i�j/S:���{5W���� +���j���Un��TC�dq�*.^ZC�;� 0Nj�P~���o��p���q`��u_KF W-��6+�^'��ꤦ�/�2,yԆE�)'�&r���fzTo����+Z�̘l>���ߋ���΅]�|�ނp�����6O��6g��0��?h����Ψ�M~P����%Ǫ�E�mw�o^�=��jm\���:6¥i�š��Sz���!�@��r�r ��t'?s¶+��$�1�] �B���m]�z����fS��'��֘�a�Jk�8T�8]�<q\���)&�J<���RU��HC�t�G;������̧r��/]�9!V��<+�)�cs*����|=)�?��w}f���^���s1�w���FW���u��ZPJ\J�\s��)�?F�Ӧ��V9�38�PZ�3�({5Y��$�k��]'����2�����~)%9�'!�%ݹf����ki(�i_n��<�~:� +&�����E��VW>��P����Y��'J����Á�2ia�Q���VTM@-k���ok塚�$���֢�͈���M��ƪ���o;Ik"�KҺ�W���*9$��Ӑ�Sל���6����˪&�N��?��~4�����2^�n4���1��~މ�j���b��R4������q]��E���N��[�Z(_=�w{;���n,=MV� r0��E�ZHS� +��q�DӠ����y� ��ݵ������t��MlCLJ� u��r����sJ�F� +r�!؇�HM����:�uT��CU�/=���d��H�*/������i��/��l��+�Yy�q����c�p��=v�<G*+�>���/��qvRՋ�������*�WN�f�����ʨ�H��M�z��y��Q+�>�������]���q*i]�=`s�/���ן��u<���ml�������u���m,�$�N�Y���.�kICR~ +�k�e�9����\ve���9F���k����d��Y8�Q��45�s���cW�v�ӓ�d��T�چ�KX�A�B+�r��w4�b�}PC�?�(��V=;[=>�M���a^�����l�1/�V?��j�^RQ e�7C)i�|���.7zd����G��ډ���j�[��?v������x����b��������Z,�[�D����-{�-u�~�m���h�ѧ`_�ë��ZX"H3���]9z)����y� +�ze��g���v��y]�Ɔ�ޕs���t�Z����LF�����Mr��Q�'t��a��}��^�+�i�>������o�@��Z7�:C�Ֆ���Ϳ���%u��ki}��1�܀Y[Y���>���(s�_v!W�r�2�~�Ʀ*ꨦY��i��\ +5�L5��ނx��5�r��W`.�D�Ǜ.�*?F��\| pW��M_�^�Hm6;,Gʂj� +�.�Īv��4h� � +kon��b���f>�~Ј��لJ�0��m-�]��U^�����q��ʃ��k��ӎRP�����x�����ϥn+\_�W*�����e��g�����[uC�%K�Ը��\è7ۛ�w���c�S��34�q���RtV�=��k���v���Ͽ�b��E��bY��9�T,��9fa���|7>�D���ݿTiXn��<�nP�tZݎT�O��ib��;Tj<�b����=[���x�~u[x��B`�L��s���Ԃc�l�}%3�z�}r!Ƽ�r .zO:�H���~���~uva\Z�<ZN&� +��� *A\𣑡��j��.��ؔ01zjb]VkDG������0Ƈ��>Z�g���m߲l�:fϥ�#4�5|װ��#����f\g���fE*���Z�x��oN�sk�{�O�z-��o7B͢}�Nnz2K�ߤ95�/���<=<�E/�* 3�^,P��\Nv�E:Z3��+�.ѽDC��F���j˰�o�:�8�H���������7�� +GN_��#���/�t��sj��%��ez�bH�˒C����RTД�A�髰(&g�T�p�Y@��6��e�1�����C8�.���:�5PW%Bb65ԟwC%l'�2M��V�������e���/gț&M���r�>�� +�+��y�l�A��z^ki���+�ɠKެZ�t�݉���w���<�U���Z����Y�x�/P�F��TTQP�t��4�~� ^N�]厯� 5I��� +oQ��5��_Ƹ|������+��DN��x��;�B�j���jYo�M��[ ��Կ������9�r~A���>*�N���`��]s7~����92�d�k*v))������qCz@v0�M��J'1�QSoE���\��(I��upT�嫸1���YI�u�ճ6��ʖ2�@�?ٵ_ҥtu�b�GX�����;?�Ь��[+�b���5sy�;�s}�������S���`SsY[��S�_�D\�%#�n��X����\��oo��~k��?�!��[tp�}����0�I�\x�}?ʡ�>G����Ύ~���Bm��fn4�Ln7�Q.t�Ƒ>�ˡSS��XZ��N7�Օ�D����Q���Ọ��=�xvP��Q���3v����#��H����4�-@���}��Wk_4�ԐشNQY���s��I��ӯ�8V�ch��<�5ew���;��\����� ��|g4���/]�?6�C������Յ�Ti���*l���̆�7�:�P_�K?c٭N�\,�������V��7���'��(�,��#zH:ubV�k+*W�朐CsO���ս�)V��VC��Cl6���E}�D�ތV�n������6v��ub�;~P>=�fD~����J���G�*�SΫo��;�פU�N�� S{ߠ��y��N�γ��]k]����C�m��A����|��Am����S�;Y�EL���^�~�_,����9"6jx�Ad�j�v!B}�����(��}k!y.��Z���-�� �˧�Dz�h'����aT�@�Za�\f��q���n7��q>��,ZS^���d��]14�?�oU���b����7P١+Y��� ���wEO����P$jkg��ߍP�%-~6����\IN�ׯ��ً����q�Dm�0x�~pn�hu��(��x]��/h����6SD�L�ֺ}�c| +�@\c�y[�P[< ڥ� +v��=�htvK?l:!���|$6��� ��\W���lBNw(�?`/�;F�,w�IE�T�{�f�ҟ�g�N�5}�<����!��UN<����5n5��A����_�dۜ7���DX��V�~,o�y�b�,a><+��t���G|���"��f��U��z�H_��Ͽl��D�!�9}�A�����S������vO����|��e��=��<�*m���Rc�@u���>��7EQ��8�91�r~q��gK��l��~�iMO�I�0�� ��g�n�NDzD���ٖ�*�t�ĥ�7���� �����Gd1=�Uҕ�B�����]s�����5�k3O���M%�V�t��.,VN�JRC!�Đ�7���.�q.C���7U}u�3� 1;���e:���h��OMU*N���?��Y���7���F�^�.�4|�N��HZGa@k�8M=�E��ᄅo�9����og���$�ܢo�������ǐ��6о��#�%P�sG&��G^�*"!M`]'Da�|lT�w�Kܵ�P^��� ˬ���qc@�Jw�f��T�=3�ϧx�#/���:��V�A��;Fgd$��qHeSFF�����[Ϡ���Xo��6�=/[b��_�����i�l2�\.�^��^-NSc��$vO�?��Θ�������[��_���;����ۑ��Oޫڰ���Vs����)���-��Q����u,FW���1�]�JQ�b��Y,� ��i�;Ϙ��������l���| +N��)�9]���Z�w��ϡU��a�1KJ�t����@���W��Ee~!ڻpu��ݺ���e���RS>��Fb.4q9qz6~?v�P��U��(r���HgrWq9�N���[hv<�߷�[5�pI�U�����6����G?����f�g¨�.5K+�j�@�<-���&1}�4���-!>��Uu��j��GS�N�'I�RF�o! �����n]�����-6Zڼ�Ж������O�|���ʧ�����dN5C{E�1��"�:j���N#���FR�8�MU&����4&s�79�����h��5���a�$������gZ�n�Q�Mq���`[iT���Q���Y�%�&��ɛ����f{m�H�.n�m_���]�n�w�5?l���>��4B������4;� ���S��&|<��I��k�6�4�ɼU����8�o����p+۷��ee��@�Ĕ3% ���J�k���k��U7dq��]��M|u��F?1�6���^�s$�N��,�Z�|�uti�x�nt�L߈2]��u��&Ca0�{��K�/<�b>C��~��ug�V�c�{��M�T��a9�%#}�[���o����f��Yw�T�\N�.p5I��}������S��@n�ۙ �)�.�$��L�**>3U��`Ch"�Pb����Т6�S3dib���ZtLY�jr����8�R(�/�9��IY����a���� ��六8����`����%�\���o����+�Z�2��G���V�x��"}f���o��Q��~HF�@�v�Ļ��n9[�2���Uq�?.�E�-e��W�Ύ4��g*�Uq��B:�P,��S#ѩ�%��O|�aR�b!�Q��K��_��8�V��F�Zu-4�=]��L��"oݨ��&&��-R�������Q�W�@�y���� O:�:P�f)K�S��~������{��A��O�I!���]���C������f����Ύ�u��~:�K^�$r��%��*L�l���r�JG�S���H�� +�����f�^�u1��F��ev`��ǪEV���O'v]-�NWu����'�Rh�U��AX��*<��jx��q�[�U�J��S��*Y���/T�+�y���9'�I�d1⼇�.Pu�"�/!(��%4AU5�7�����P?e�f���Z�LSѕW�fʛ��̱+�e�h$�q9�ش1�j���F�G>�h�;��Mu��ݞ�(�~�!D�B�ܩ������@q�n�?v�����X�]P�?�.N���z�O���,�r�N�6/?V! J��w֒��I�Lkנ�3��|�~tT�v������_(����ِ�ߢ0��!���W>8)c�Շ�?Ѳ������)��;���P"�R�����UG��������쌛f8�Դ�x��]�:TW���Tz�ÖNʰ�`�i+�{g#�z���f;�>;�V����7��es��S��SF�l�n�ܣ���[k��|���(��N�ԯ��ņHG;Lg̩��(5���T���Q��t��!�$nIOdE>< ��~�0Y��=�wךᴷS�7��V�Ք�5���q"���������'T��+�)ek����� YL!��NS�5C������˽"��v'��SS-Zi�����5v�U�2���N����="M��cʭXȁ���nG��VZ�=�ڙN�桦�A���)�d[E��.��-���<,m#��_#]�J�q�CS^cӜ�V>�7%�i�r���e�{������&em��.�H�/��G�1lL�P���2=!ZCD��W�e�A5>��lc�o=Ukm��%dP���&_ڨ�<��!����,Y+y���j|����ܤj��g~�O�R���zu3mj\�L[��k� O���Q�BX钺�zr����!$u�)^���ޞ �|*跶����b���V�*o��Ms��Y�:�i7ў��80�Pf�8�>��zB�M0X(M�z|z%0�k4��]$��)4��^����ȓ���3'�nrOݛ�7=�( �\�Ɗ��D@K��tb�S2q��� ���������T���?�'�r��P���u,��:_�3R}6C��d�>jg��Q��j��k6Z���Eg��z��� �F�h�köOB?nf!���|+%�ڇʤ�o���'�����$*����m��]�[������M�ڲCՍgGƃ/�]�ޥa�_�����h�6��2d������(��ɹ�6����:��S�|�����m�or�B�ǝ/.�R�m=ҳ���jkX4�����Mv��}�������7��<���;�y���9v�ϼ���iR��G,60����_~ZSǵ�d'%F�M�~��w�m�u7t�ݫ^��;��=����>����Z��H�W�Mh���OrQ:PD�?�zA��֓ec��)�VP���!<٩�����^\��^R�6jc����i�>���%�c��;hi�Ka�ʹ��ٵI +x��R������C�0^r +�jF��dc#j{w����s���)��ٖWiGq*�X�i�c���hƖd%����^]�AX�;O��cr�[��E��r���`lg�Y2� +���7ki�<'q�yo�5�j.�ϰ�܍�z$���]�v�oi(D��@=ܑ�3�嘭r5��v���K:���n��h� +���Q�-����ih�p��ï�5�b�b6r ��˻w�-Gm�M�_�x~��ZY����L��w��%��NEWP)\{.�s�Y���|���SBVM��[Q-4.[�Aߒy�dj�@a�nqr�+�� �K~���#�NY[���W�5�����d� a|n$Ρ�������i��2]�3����`i�)��/�#�+�p�5;�}A�ZidxW� {{Pi߇��,�������yÍ��N�.���g�>+������+����\�^����M��k~��uu��4�w| �[��A�o�݂h�C-�{���$�h�[ �o?�Z�eʜur�?L�^�N�l��Q�x���[�/�<�x?�$iìДW̼�|6�~��{[�����9��u�}VvE�gdI�n+Y�T��;�c��iKR_k�q>�D�9�����#��S8���9���tAWK5� +uX�����Ճ��G�H�yd��;l���z�r�d�0��YRp��IsZ�6о�^�]�Oۮ}�7�~����p1��H[��"�� ��Ɔ-ل])�"�q�By]�k+2��bMz�����5��p����Y��n ���?>������mW.E���ed����߬G�P����v��9�x�j^P>�A9̆goh�Ύg}b�)e��A�o+3��5�W�X`9cYݽ��x��u�����w��nµ#+���7*�,�KpK[�{��z-����&؋���j..��/�B;~m�HA[�]zk#!d4�N3g�k�:� _^V<k"�1Rk��Je4W�t�����-{Ph����"��*Q�������DЛ[~���e�W%�y��{/_z��o-���Ѫ�Q��$O��Y�q�I��>Q8y�6^�-UI�avEy�`��6���ES����{�5�䎬�6r�j�C���&�q�n���Hs�T�Ci��}RFѺ���8|��U{�t�55�ʴ��O�UU�I��k� +i�����Ϧr�Jz��V��d�{�"i��;YW�"~-�i~���[�P5�C�g��������b��y��q��a��Z��^��d/,8!�-�YD�gzUd�\j{A4k"��f�ψtƦ��I��8�����mZX�d�F|�˻J�bHv����W ��H*3���t/Gd9j��W�i}3�\n� +?���U#���������^��8�;;���X#hV['������|��e��k-�<�N��Kd��|=���=0��ES$��[#/iK�:�:3�M�����Y�.\@.6���y(��!_���[r�.N��x���@��.����Ĺ�\(9����:@�"IK.8�=��r��QQU��T��һD?�k�$�/��Ϭb�ǍE�K��{"o��Uʘ�4sr�e+*J����=yM?�l��E퐿mtLG)�⸭�G���%�4^bU��ė��c�^r+u��sF6�ŀ��0� �����Y�ko�v����;�b�\t�ѯ�� +R�ԏf[� �h������O/�#�F�S�N� +���� ��?���$F?���i��b*���(E�*��*d��aNcQ��%䘾���Ѹy#?��l�݊}ka��������PCK��VB�"����)r�Z���eJ��ۧ=�AM��p��t?��]`��\o؝����g�7�dž�88P����z#��}��|9�na�,�A��Y[�'j���~����k?W�9i�]+jmg�����ȵ�7�lJ+��1��۱�ղ����r�R�g� �ufxe,���=� +��eU~H�-��>/�J�D� ��vS^���?o�>����b@�ѵW�u���gsk5�Wm�6ʱ�0:,`��C�^��ܯ�����͔� d���k��w���R��w�}#��p�_@g&�}*�}���u�҉��M�l�V��u�d4�.7�M�g�f�t}�Uv8������B���Kw�|]4�;em���I�e�����q+��}�>��Ph�^�q�TC�̒�����`��w�7�(�!aMz�d4���uD��Ot����L9�m����9���5���t�[��j��e��RG����j�2�ߌ���m����ޠ^];�*����N٧�c\��_:G��\oT1�u��C��j�r֦7� ��O��ssf�c�J�]��qL�Eo#���ͬh�Ǿؚ$�j�V�E�۴)���o��X1�A�u�V��o����Rx�+��*�y:��e�y��_�t�WX��Z��;)�%�fC��p,t*�߭=������5�}��|c�F����������Af��*�<��d]I3/��#���V����8S�i�1uz���(�9�+�8ↇx�td���ݞv�w9�KA�!�ObUT��N�T� �ʴN�c�1��z<& +0��x��*++K�M�r��<�+��"�_ݘ�c�qj/%�:���٨�Q����������x�5m���*�jo���dL�����]�jy"pj ��{�t L +�3?z�[�#_�w9>'[-��c^]o���N9���#&x�8�֭f�0��sb#���Ѹ��}ռA}��:��<9�����A ��lt��կ�����϶�%��k�ٔ*w��I�g�W�U�("aA6�t[�qw�w�o�����ech���'uC���o�w�]�+��Y���g`j�Hi/�lW�r���z����5"�!�;xjDk ���כ�BLawT93�}�V/I�OD5�G]�Y?�jx|�mN���Om̳�KڏO���3Q�����rܔ|i��F}�Ȭ,�'���hcl�t.�kƉ�������5�z���gd�?�#P;Ԉ��Լ(#'�����CH�/*㽒�������dZX֔J;����A�M��P�R� +�k��ƜZº�>%�_�k�������6�P�5yɣ݈�bR�P&)��ڬ�v���G�+%��͍����~!���H��w��i:��u�� C�e�Jn+;֪��߭ݵ���R1'F�,�W��-����Ӿ=s��0� +%?�b�s�lK��.�g-���r��<az��z�V�7G̢�3m��RWB��a\A��/���P���=I��W������~ ����?�=m:W��͖�4u<��~P*�Z�5���0�"�\��{U��0����?%�Ѫ��`�Ej�tؗ(�)�-�7�pq�H�<��7w|ڲؘ>�K5�����V^�^��-'-�+��mn$[m��E����j(kͪ/�ڙ���'�s��?����(u/���f���^��{٠p��9Ԣ�U����3b���F�3$�����аr�XNa�ho6��o��ZԌ�l�ӓ%��5���ԛ9;?#m��F�����R4�5$57X\|}�%�7Z_�#c&�ƛ �^s��ǡ(��մy:��og�#������]SW�]��^.�CCM�b�c��='&qa��8����m/HS�b�����"]�?X?Oe���V�����D���Q�4��Z���Mr�� Ԍ�����_����T�EW�2��~��J�VKR��{&��?V[O�g>����ݶ��㮧��H._J�&D0���w�;P��b1�;������ԏ���;+і���������R6,g�W��X�k� ��*Z ���{��oo(�.�@���] M�JRj��{[�ÌS��֣D1�����"�ܷg�D��98)�Km�ҳ���QQX o���κ��g�L�W�X����� (w|��W��@ANE6�g����Z鎂�6���Ph<Ts(�t�G���Ӫ��b�mW�̡_e|��NV��g�m�6����wt�v�g�i �>��Y3[���X�(�Ei9~�����x��F�%�����OW�F� uV�%�:�����$J�� ��G�y(tu�Sb��{���a�B���k_�}�����(����Nz�p�@fr�Rఠxݢ�S�雉��{��aUp�_30���Z>���e�W�2}�����]oAc��<�1�q-i6kq�}�ͷlA��6&4�:f����2^�]���kGӶ�]g�W�6����f���/I;��>�Zѽ:-�iU(Ԧ������`�V<�f5��!5����˻�u�:�[S�F��;�&��'�'��2t�%��+?�bj>��ҳe��j�Ts�}]��N�����8M���p�<z�sel4 �i�":���v�@}4��3��HnѳP�k ����Vk��j���uK��s�����o������:�F�ڎS�Y�s�YA�2�1,���k����L��d�z�bۛ\ڶ%M ~�� k��}Q +���8a�iy�r����橖�Xw�� y�;cz�~���R��w��LC ���\��nr]�Ċ�zO���Ԡ� +9�&#� �B]��l;7��{�Oc�.�Nْa��M��%�3**ϗ�0�e���o�ve��U�I��۠�:~A�[L���u�?z�ͤ��������-m�Z�L^�x�6o�ӧD�?�s"��1��`������E��l�U��mDc��w��1z����O���}�Pst<ӡ��/hݭł�W��he�- +�f�#"6����U��mb��`�V�{2K2`���;�����Yy�4���7�{�7g�2��_~H�ps��0h�Tġ��eM���|�o��"svS�|*� �D��������x�L5��Ԡ��"%!ަ}-�`m'�w�:hZ������:�,L��Š� ���x��,��f�ɮf��LjCaj�A� /$�|�:��Tk����A.�Q�v�FpFr6T��}Ҩ_13� ���2�0D����k��E�^�-2�?��KJz��w�b��K�ܔ��x�Jc���I�ށtx��_nJ+ҟ[�A��P���֧�\�� +�p�|��NK�U��)��T���q��asq*+�Av���c�Q(+����qf��h����zݮb�������/= ��ș6K�!y×�{�)��fA֛&V� �w�4U(���?�ދ(���.���37���p�{���0ԣ�^�ʂ�Ƙ����cw����H�R��4��p��Ђ�8�m �շ���"�Y�.7Hɬc��T�� +��ܵ~mrk�!.�t�Bnw����B��o��&��Ӟ��*����F�~曊�w1����a�5`�U�+�1j��7�OV������{=kz2<�.�����̺|ƈa�[�������� ������H���?y�U����|+ci�V�Qy���\NG�98�'��z�(�i��GH��)�%Z3C |E�ݏq�z��bxt݇��)�n�*�;6,��Լ&�Z��|.U8y��ʽI}�X[Q�Š�6iaS�M���\7;6Wt��,�w\Ll{�<�}�-�v +͖-[|��S�a��r!��2������OϚlj��p����FyNFR��[�Ф��E�꘨�u�4��U�ަ��q��-/r?!ܪ�kS�J��W���e��\�fZ�� ��r-���}|�&���BLr>'d�v3��LJ�<�������?������a*U��}�����w�˿̮�h��7��b|4*�a<����âR�T�릖Yԧ�a�p��+����9���i?K}�*_��rk�z���L�����V�Y���n���O_C�q�w���p�� NE���U��������ȩ�J���|v-�Y�i����7�wj�N�#����u�{M}#��5�7���ȋq_����ߡ����`B4B�M�1����A|Tߝ�!��֮�;�}4��'5��P�Kz`���?���k"RQ�w����ŷ]��eMzc%W�.��i�4���8�bJԏ�Zˍ0Z�W�D��VK/��L&���jR���g�N}�|*��*7����x[���o�wm�3���O5%V���R��쓇���N��o&�Q���_jRq~��sb�1�'M�`U�]�q���Ǭ;Zuփ��#�S��b=7��7o���NN���$��d��*\ͣ�3��Я�_8�K��GN{ +պ-�h��Ffs6��A���kҾوv�[W�9�mxtP�BQ�:�̚t�Yv�7����&�X|���\?RtAV;� +Oy���p�Zle��K�,� ��!.VO��̎��?J��CF�sU�Zc���� ��6�c�>J�����l![�uǝ�$���^G�O��|��<�2<(z{�` +�4�~{������O~7���W��kRǔ���i� +6��7�Ae�&�\C���� ��|:Ow�w�9�/�i�}�� ��:��@��s���wp���9��D/����9�� +�֙(��d�^l�%� S��,��u���`���DrpY���3G�QE^���?�:�K��YZEEIDL�)�g_�."#�o1>�<�_��G[X@�v��U�a��vT�Um�ڦuC5�R�Nϱ�H�_R��c�@��B-ߎ�0 G끤^-C-�+�*�F�Pm��X~�6g����&Cn���m���������C��������䧽����-����_r��.3Mm¤��H�bO6���*L�ħ7�ƪ�ߘ[�@�w�`��V]~�9��}�@gH�����%�Z�7�dcv��Mg��nIY�E�e�?)�}���W�ʊ��lSPz�|*�����E�����"��o����,[�4{:R6l�34^G��|ƹ�*���W�*f4Mb|k� G@��p w���䞜gq�EШ{$��zh=:S�n�Wk����9��lkjg���ޅ�X{[�Q�ru�Sb�V��{� +o�AM\���M �"R�.���FV�$'-(�x�#�~.)���y�R(�����vSp���ֺ��4�艸���yn��Q� �C0E���`�9�����9�f���U��%T����f�ϴkR��<s��6)X���Z���^�K`+}J0�xm�٥a�� ƽ�= ؏�y���#�3�9�[�Q��1@!���ag[x�@�Ξ�0����������8;�.u��O�6(^������Z����/��;�V8�`e�T�ҥ�v���w��H]N=�:j���,w���7#��+�x�&f������^�we�U?��Z� �;ˬ����[ +�/F҈業P�{⛜�����F<�����.��XȤg����ft�Ǫ�%��~���O�"�(���xk��Z�.NM�W_]4�N�$�= +6 \��Ƣ����x +z6z>�˶��=���P7��������՝Y^pWQ��WD̨���%�6��P�&3�F�#��!��~�e.7�AZ5KS��EE +b,��b%rʺ`��~����85��%���U�a�Z�ٺ�wxM�ɸ��1���Ȏm�}J&[�qrs��:z_ �d�D/.�����h�5ME�GO�r��9�:y2��3[�6�v����k��j��|�-wZF���Z�q�y����KE�n��ϼM?�66�mɻ�l䱴g63erw�:WM�K9���ν�Qn#czk^�S~Kf��ֻ���;~�-RGK8�����WB�6'v���������������d��m�A��<_���D�����7O��S�N�&��ʧ��f�b4.�֡Fmy�3'W겚�>!uCo��]�5]{ 3�u5���Ήv���Aj8��m���`��s��)��f�� �z�;'��d�j�fA����+6�/K�-�)���~'�G0�"ީ^|v�}���C����bv[��2�nC��ZC �L[)�� +�`���Sn;�k��(��5 ����J�1ʄN*�+��2w+��o/�Oʮ�_����<����H�<��5��VŐ/V�m�sۨ�3�3#m��=�:Bg~��?��Nu���C:�Z<�>XApؤd�|���dkm\���8mk�����*�D���&Z�۶u�dT�g��p��>��j�ݙ�^ϴ�W��q�K��\-��$-(E]+T�G��n@a�=�ߢ���m��-�u�Ϗ���T�g�/��Og�HMs��>��E����;/���;��;Yۉqh�b +w�o;���C0|���-�&�G����N�L�'��P�®�\��;2k��"X�B)�&a|s�LZ��8%Y��BF�Wf�(�Ui��s�����z�Ϧ���\�=֭�3��Cr�|�aI, �w���W�5�u��7LD?��«�R�� ^/�g��mƎj�%w\k�\� �h���mԎ�'AW�EK�����J��V���?1S�%l�Yt�nh�4j��D���\P��������uҽe!�"F��OjᅳIK�~�^�y���\r�-���Km�����n�MVSB۷p�6�Kf����`vՇ���]�|Pk���~�=Lj��i鳤#��;o��/nT>t�����x�0=�5̠�:ˬ�b��H2�s^R��A�����@�?ڿ�8Z�'x聉�ÛU���#��_�ʩ�GK��� 6H�:�8�?eS�{�v]�����5%ޮ�}my� &N�y����������l90[:�7"��������I��S:�kC_�������ظ��CxF8��K��K����\�v݁�A�Ok�VpP[�-*� �W~�on��*�J՝=s�U�rĐ��p��w���a�� +wu�����{���wIbWt:2��OQǛ����}G���usks��!� +D��s���v�3��O��U�nf���IN�I�%\������Q��V�����?(G +�{:�r��� ����ތρe�����Y[3!O�1���}&���uf��g� +�2٥�&��d{}>z��nl��1ԡ���/~��� �O�0ߌ=�WAĜ�5͏7�;=)���fD�����ڪ��%�D�G +��7��6��lΕB�4w�\���7s3l��*Af��x+�c��VP��m2 +G�ָ��x�f�f����z*���k��Z?7��n�u���Y=�uF;[hg�.�������9���n�rUy ��a��v���td�����q�����iʿ��>[��\r��)Qt�*��<R��W��S�� ��k],�8�S�B���|�9�b{�����r�r�����m��ch��iV��0V�zU��Ff�.�ӟ<�|-� +{����3����-��C��I��X�;}�b-а�^E���wo�0�&��3W�k;枘{])kǨLTѧ�o�S��"��+9�'0}]P8t�ʿ����'�s�y���[G)��f{�"n����,���r�t�1\�f�b�~m�~9����z�:��8Jc�_[���t��CT��]�w0 ��w���wHA9�6)�'/+i[�^�����}K�����RC�;9�&i��9�w +���n�̓ �k���u���h +�Ռڴ6��N4�4������I�0C�Rбn����$�Sxc�E��ӿZ���q��+ׯz�*� +�<��/ʹ�U�Atj�u�~x0I3Oa�s���� M[��<]anU��9��]�;��`� S��8v@���s,27s�l�� ��P]��T|�R�1(�=�":a9�|qf�9q~�&�e�t�b8�T?�����������!�����3�%���P�ኵk�?56)x�����M�I�2��$gd���j+�|-|� �z���I�]&|{]}�;>a��;�p���`K�_���-03tѹ�Ȳ���|-��}�`m��X-GC�H(��a2�*��m�^q���M��]H@\x������ȟ���.?�~A��^���qt-6"�5vü�1��w�N +�Tf�I��������p��~+[+(���o�����{M���2<��#������ά����������~�]tK/�4 +��q�Z��O�t�,��=���b.B�|{ܚ�ijq�J��m]���)2j��,!��4�dL�D'�n�^ڛ�,t�V�|�[�mX]�{X��@�G�cK�z���qˀ�M�r/�z$|3���vMk 6A�ݤ4(\�Q���� o{5����>�o�10n,��FiE���+�z�q�V� +���-�G�a�/[$gR�wXt �}d_BXdZqZx����ѧ�F�.^G�ʨ���ۨ����|-5Z�6�O��+�u:%8۹����� �b7�O/he�M�HRޮ�c�}8{��|ȃ���;�I�w����'��(���_^-O u���.����pB +�p�Q@�fw��M�I�^@���w��M����o��}���8|�JY�F1�!�O��h���]f?�G�˞##s�_O�Op��e�#�@��N�;y~I|��T],�m!�R�t�~:�p�O�z�L���o�7��TaC�����F��ҡ�`�朴(It�Ŋ��ϵ'�m���%Ճ����6 +;��Y���Ȓ�s��<��6�*�)wӎ��)͚�(��ی� ��ԇpK�1�gk�7�����A�[%�RQZ,�������$G��6���7�=l�㦤��]K�7�����"�^-�j:�4��h�E�_�ǚ��\o�u��G��Q���gp���Cx�rs�u�m�v�Ӫ�?��ɭKf�{�]�z���Vx�+L��=ٲ�?@Kը�O<��D�2g�\;�%���U+-fi��������G^r�}�Gc� �zQao?w� �h�`FP��$�������|�~��dr:!����A�N����=��E/��U���bS4̾�<�w�F RV���9��λ���*Q�/q@1�?�S�B3H�i3Dڡ\�ŭ��Z+��K0_\탤��p$��례Q�c��>�9(F� ���4d��/�A�7���)F�Q��X��q��oKhZɸ� ��30u�_����pxմ�}�oV�{O)LV��; P�x1��y�yʙ�?�ܑ�C�&�����~_��Ԝ�!]��q|�&1Y}^��o�_�!���ޅ�vm`wc���-f�Yf��{%1Y�UZ1O�}3�vk�|�3����Y�^Vbw���t�����n����g^���6{:����g颕[nmW;E�h&���gϊa9���M��t�u����}��zE]���E�J�5gü�x�`_�E�'d�L�VM�����BՕ�>�����e|v��f�z��Lެpm^�؍><I�O��O�k� �Qo����Ɩ38��ü�G�l�~dd�"5�K���Ӭ��Il��+���u@糭�u+��U��5c���B��L������_�Oӷ�#�UC��L�|��#On.Cx�� +��#Ř���+�a�R�ճ2��└��z��hȟh�p��>�Xz��>�L�/��mQm*jn ��H=Gɶ�k����s'��p��X��՟Y��}�:4�D�;}��|<I�� ~03���QD1�o�3��k�D�=۹};�X�t�P���_�;m�"��VQ�*��{9��9H�~W��0P�*��+3���%��3D4��<+���R7���/����P�f�9xlW-��,8J��'��J�TV�N�K1<�Q���L��ov<31�֞�`��!ט�mK��9��@�P>ⷪ!���_�HS��������T��FC|M�UP���^F���E8��\��Rh4ap��z��V��vu�}��>�|ȍ6M�� aĝ���I=u*�x��AE��!�g����HnWܞ~x�����T�; +��ws�����.��z �����8���}�5��~�����&�=��U��@��,ު�<:0����_��|VK߃�Y��ЉЂ>�g6���l���F��=\2/�e��H��y����E��' �o\�r�7����h�t� �(��L3E�/Pizkڐ���]d�?�p��,�4�i�R��l.n��.���XEl%W��=����B��ifiXv����0����2�b�vfj��$�L���k��G��nO{�2�^����v<3���F}��N.EQo�J��S����i,�2���o|���^F���1|c��~����(�Zk�.�i y^�T��y�Õ����B�^���$����_U>��UH�p| mGJc�r�隱{�vƺ��1`��n]ǽ�KC�jʅ��[\�(��������<��]���4Wׄ�ge�q�X����S(TSOo�"㚴���V������c��?R�٢�W�:�Z� ����~���݃�n�kӔ>{hnkq>�<d\�̣�~���jɼ�o�"�����z�W�~���\ߊLJGK��e�]�(n-�m#m������s�M �8��� +%�o[�R;e�F3T��� +ˊ7Ղ�6�k��m�&'�}ӷS�D!ۥ��rϮo�a�ǵ��F����m{U�U||F���&(K7k�q˰��<�%�wn��O�G���~`�exk���m'��,�����%T�ƪ�M+�f�n�xHN֤��l��g鷿�Z����G�i�u���݈���+��?H��nl�A�mJQ������Ԟ��֕"�^6smN|��S��`�,$=j� ��eǀ��aC�����y{731r�����i���NS�f�����ڂ~C`ߺ#ރ�bz�&my��U�QD���u&�^gpx��3���mg���a�����7�@;�|]2טy[N�S���W\zGXؚ���ɉ1^���V���I�_}_��E�P �gg �,v��E��W_fYvΤd�u�����8�mN~i^a0�����U+ 7aa�{e��v�)%fk�����U�koj�7���M�����-z�dw�� +''��x��{`�d�Ȩ���%����ñ�=�@ �M�!f�%=��H�_�X:E��4�y����c���⼽����ݩ�i�Ol��8�Z-��ؗR_n^��<��ak�q��s�f��p�5Qv{�-G�P{W���8���3�B���~���M[��v`�������n`��o�;T-`�6W�h{����Y!_��\�Y�ߍ�ʚ���J5�a~�6WqҴ��G�Og�-/Y T�|�L�Od����y�-����]�ڙ����MH|�:Fh.sz%%������i���Y*|h��"���߅�~�W�~=^����0/��;��f��֞\3�[��K�j��\o����ƭ�ؖ�3y�1���&��i��]��O4b�%�����Vq#������A��]w~a)0��~�n�|1��f���IU�j�_��)7�n/mg�7�5-����f����ҞM\�Jx#�e:��g��џs� ��qu�^�2����?f�BG� (�>�5E��i|O�����w������t���RkeRg6J�dp"���;L5�����gb�}o���e� �V@��ؖ�N�Ʊ�C��ݜ�},�����5�V�8S/�͕l,N�(���(�k+کm��̪3@]�i^[c���m�0���9�����S��g��'�p��w�Y��w~�ڜ�$ꌠ� ��k6^h�]�m�7+&��#[�#����]a�{G�"�*ұ=Pe�i�ہ\ +8���q��%�u��W��z��>:U�!���3�P��*nx�8La�����ͽNJ'{W���Y2�A|ؓMU�|���gk�v�%-�Ҳ�#3D�$g9�*�~����c��<�B�k�F�0r�����my�z�jl�Y��85�vh�<b����E���a1�\��M�=]�U:�Cĵ�ʡ˯���_���͖��?��������7� Z�@K]�����hl-�Q��I����OO��]l�UOͺ��65�P�[U�'�J�>�IQ�Vޑ��L�գ���`y~�sӸT��>F���^K�˩N犭PF�^i`~��?m^oө<H�v��tv�k\BW<�!���+x\r{1R���l��e�����O�N��w"Î��I]�U٫ү�m�?c�^.��Vg\���rnN�I7C�_�mm�q�;����ss�۹�)̈���0���������N�~ Яu�1\�nƃ*��|���#a����=z�ܽ�iOsqT���C�K�\�{�6���f��g�v@�������N�WݍK\gu��c�\ԕ�];�p�U�6�;�Z�&(l��;��o��MO�\w�.�h3���M%zഗ��x�q��ڏ���%��N�VýC`z��N��5�]��3[����<�b2�z#��6��;�^��9�@!U�� zF���&�S0�G�� +���sz��b��(>��}��?�{>�#j�頁q��3��I5��<4Zjv��O{�p��ĕ��7,���ٮ���v�\����"�~>P���x���m�KMѡ_���~ӣ1>\l�k~S��E��?���m) @���C�����sJ�. +��]��k^j��w��=f�]��~� +F�-£���n��Z�#����_- +=}��~�Xڢ��Gs�a�#â�3�����h?��Y*�������}� ��ٜT��{/�S���<��dP�R�]���w�����})��>AU�X`��S{��{ ��0l<u�A��M�61}r����];Z�X&(ӥg-����)�-�+�#h>��xh�M�:�-iv82Mg�}`�����5�]�{`0;K�/��kq:\L6cT�X&��m���4��F����\��[k���p �y^Fa���˕�jé�M��hZ��82/qbZ�oɈ����X�K^�VJ�.������q��Z��d�D������@����])���wG�=����w�%M�U�_<76S���M~����e>k7���ˊ����s��)�!ђG�Ĺ^Я�CR�����AhM��Mzc��iw��L���K�q�V�U?�R���G�w��?�����1�[I�A�p���U9��юVM����l����"Tիw�&��,��y��F��2�O~�jԇ�(�բG8I�2��_�:g��ٮ_�K��N��$���aj�E��n�eKfU���u�-ϋX��+V�we�s�C��s��b3�vXY�Q�ƜԔ��^-k�P�A!H8��c�:����fY��&����`Э`�z�P�K4�N�o�Q�:�j;�W�2 +͖)(%Q�ߏ��Hy\������RI�V]�m�hT�V����P:�eǡ�� +$������#��Gu�uIR��Co�p�aǔ@4��Q�x� +����A��N��_3��S�tk�lk����ה�[����PSa�*�M�{D{悿�S"(=!)P)�B[���N�ț��w?nsq���� x�;+�a��a^�ն}�����_��1�ɽ����~�S>|s��U���u�dE o�dL&Bdz���䅏�,{���Vw^��v�ҩߊ�ZF��f�&)��GF!b(�w�7٘ꭕ�����8VV�Q}�Ѣ���gf�:�:r��S�yb���O`���������V��β�!qox��t�f����,�k���>����b6�i!�ۃNK���*�|��2\���Y/kѐ-���d����?(�Ν�it٪�i�=k��^՚��?�;{������Ŷ���0���i������r� �&�Wܻ�*�M;���`:"��ȿsF����C�c�J���g)uX]�7���t:&ɘ���\�~�%�۸y�3�_kC���X�66%q!؎�����O6���wE髹��� ��T���3�w@�!���j�s��K�m椋j3����@�k�w��!��|�1�牥m3�K�yQɥ��[z�G���h��eφ����t{��9�cvjD��ɒ��v��uK�o��*as�E4��Le����ͲR.�9R�L���h�Y�~�{�"ٵ�) x|����ꩪ�<v������ѭkQs���d��;��%FN����u ��:�W��W�����xU��g�c�;V,|��t�5��p���{bQKi]�9� ъ�-������#Yd7�պq"����J�_�Veߔ�:<����o�AP�R4��o\ +y����E�̲�Oy��s'N7�|��>d�-����C��7>��~˴�~M)�zϵ5��w"����*wgA��.9���Z�d��F~�"�$ X��_�5<79�OA�H��$�V�!�@��M�W��~�!��aˣ��9�_�NN]���/h�f�͡�'ϗ�ruL&0���[��O����[����0��^uf�"}��{{���x�w됃ah����&�^�>���4����TIJ����ˇ�r�)7���~,��v�0?��}� �w�A_��L֚�U`��Y�8''}p��=� U�����Z� ��Z���9��g5� +?pxe_��Py�ʳus4 +!e�{@s{���x�0ۊA����j����YI&��#���\���IY=�u�*����gS<�B֛����64����}�Z�vj����i����+H� �w�V�1�:�+�UU����;W���d))��mZ1n��Fܵ������i#gpnA��`�Ld� ��z�8��|T����Ώ�v��G-��8����G�4\�'/���T]�i�%�%�J�S:(�w%gd���u��֪��8�¢!32� �9�T��5�s8|`��w�~RR��9�^��Xl*I�h�/��:���9o>K�M����?(-�Υ�~U}��r'� �jn:ݓܞr2z��X4�j��������Q$?5,k�@��^���!��~��N�Ra����@kq��ļ�Tׇ*��Z�,N��"y�H�hvS�3�A�+�^�>?�7�A�"���Ս��r�0�b^s�C�>^b�KV�������7���ϟ����W�7uU]�ד|P���l�Fi�ݱ�Ao����)��m=�$[L���ȎV��e�9oxGR,Nǝ�X�������ۣ�z����.���U�\��G��L 붖w�c��|�8:&���5lW;��桳�us^�p&�����y�1��8�v�����.�٧@�+ϳ��~������|���,��宭o����"�ٯ�Z2�����v�ܧ$��'g����Lmܧu-<����|F��%͑�A�]�`=�jy�k~��a�ͦK9��Ѹ�����-��� +ybS��K��j�`L�Ɠ|[�Q�h���S1��v���n�.���9�Z�F��)*WliHq�Nj\Q�Π���_}�d��iϚ���R�J�~A�xi���Ȭ.��i�J��<�?�=p�;�C��B� sk��ʇ���8��"�.~�4�*|n���>@� +lI@�Uc8��ʔ[Y�U*u�S?R���a;�:ڄ'��*ʜ�#G�*تt*ݮ%Ôz��L!��s�o>ѷ�uc�����W���5� ���;E�WͶؚ�0:�@��IZ�|�����בO3�M<�̱s�:���m�I����n���U9w${Y��*V^�N�N�sZd��Y���)y3}��UG\�ܪ��9�w +m�k:�e/�k�:J���֡�F����Y���f��@_��U�Y�mu�jL��]G|-�v�u�DA=�5���|�lZ��}q@/s2^��3r���;%3�� }s+�>o�.���muԧ]S��d%VM�h���#~I^�8���lˬ��~���KyS�}�X'��l���OL�����ɂ�֫e�[�u3�5��!ͨ�� ����%��`S��t�U� 4e]}z ӆ��ڕ��;�s�y7W�(�B߳*�c��=�^�����&�}N�*�]r�b�s�:(/%���6r�W�Y�� ]IY��ڑN���m.��e�N`@/�B�����M^���&O���95�ߡ9d*c{�E���䁜Xg�hQҍ�Z��f5�f^1[43v������cַ{�L�.KZBT�Qvu��U�kw���A�;�����H?̴��\Z��*�fK�-r%�������o,-�L���se�Vd�5���f�!-�Z1����q���֭��}6t��<�:�kY5K,�W�����7mXT�\�~Ь�5m3���ͨ�z���Se�6��B���P�0���3����Ӷ���ɯ��J���%~o�:f�(���ٸhmj*�_���>W�����S�3eA6��S ��7����@W9ʻ�.��.|����m��(���.� ���ӏ����+c�Z�26-�U�?b�+��Yw�ͼ���ǽ���o�=~��r���L�a�c%<�1���D9�Z�p�| +�g���_p���똳�9j O��� +gMc&D6��`$v�X^&�N�ĉh�>��n�B]��o��&]W��_�>A����P��%��[u0�����S�#�����-��B�f'���Υ��k%kD�~�,�����o�瀞��ǥw��U��r��Z�fT3��m:\~Q���%���3��~����jO�|$E�y�;�yXU���s~��Dz�o/�������R�SKS�|�Ѷ��R�,L�1g`�*Rj.6GZ؋�F~p�*v��Q�@��Q�2�z����=ߺ���� ��+;ۼ*u�`nMS�k��y�qܶ{�,9������k��i�qŁ���~ԆK�»���SG�����A����0U�-�v� +�����E�*v�c|��E�K�0�g�cσ-�=%}�,��T� ��B��?ڀ��[U_�w�;vW��~��x���5a�U�����3�!���ᬤ��ge��Y��D>��g�� ,Jx६�G��`�}[<�G?����{���բ��t�:���~uA����+�� ��,�>���<�Josz �m:�Ck�p��ƘK�?�����n7�,e���|'cw�{<�g�zQ��(b5�hg�l��;����7!m[��>w��H���<z�Lv@{=�c���x洣1�;�Ğ��z3$�f�j����W��kQ��6�k�}����g���W��Cl�ݍ�*�����6��*WS�1q�2���\_�t�T#��YI?}�AW������a����]1̉R-������9�����?@��6�7��Su_l��p߲�h�s�!��Pwl��C3L�����ڞ:P$��#��O�0uf:W����-���������V���S ��AL�'���R�o�%��!r�L�4���j�ǁ�Β4Y�8��M���D��kU��5h���g�)���gy +VO��7�,�f�l +M5V�L���|��V h������8߱Ǚ~�u�k={�3�Su���nQZ����4�c�2t���_��^����iw#� ev����+��3�����ա�����[�F�a�|�;���n%~�WԿqna��z�����{;�¢:)��M�v �@y��Z��F�_���r0�bQ���鳢3�9�Pg�S�Ժ�k�]mEZ榮?{4��>�B�"�5p^�bAFe<�%��C�q8sr�|u��p�ΰ��K[�/s���K7�>s5{�.M��~�Mn&\(��y Х1E�B@"O�����T~N���B��.#�j!Ӣ��m=��ߛ\cz�,w^ۇoXZ����q��7�V�ʨ�&_�`W{.�⇊O������N6���!�߳�x���!(:��Y��A,����^��<B�~$�#��F|"�F��]�a����T +��ڕd���ɦ{o��:��:5ЮD�>�7��GF��@���XC[K�-N6��u��N��}��{��N�2��@��;6(��Ԥ=���G��*K����*Ϝɣ���{!]��'��v������l;6��X�ܫ�P��:��d�uY"�֞8�37k� ��S�ˤh.q�Q$%�AO�YvOt˟�\U~Dw>m�М���>��T��A�#8�w��{bא'��$�Fk��1�";��J�]�`^Sm��)�`1fVÅ1�ߤ�#�^#*D_k~g��c +'�S�L���ەlE��HU�v� Ĺ΄8�<�8���/ ��m�n��cم:����F-�`�q��&l,�4C'F�p�=�Z�x雽gw�贍�B��7KM6j�Ѝ&���]⇑�8��Y�.Z�"��s�+:)Y����h�'r_���E��u��2<���Y,�����F�X��]�5f�w;9����t-v�iس6t�~У��̾n?W��*\�����I�SgR� +���{����h�3p����O#xH�v�ጊ�_^�w:##}�s�G��J1ǂ��^1�#��~�bWu�y� 0qi1������ v� V��H;�@�"xN����)90�g��?Hd.�__E�pcC)������*�i��{�Z�ȃ���F��/5�Z��3�ͨ�د��_�"=n=N��%\�_��}�b�c�x��^�=%������)�&Zz� ���M{�dt�l嵣�se1-�, �kյ�8�Zsi64W��a�K�φ��1������2]���kl1{�n��d����a +����(�?�7�5�O�n���3�ۮ������ �c�_33;�;���W%%�t��֎|U���r�Գwm�g�{�, +SWr��&��܋�C���P� h��Gۗn��d�>��6�* +6 ��H����(� ��z�˷o�Ȭ�<Y��>�τ�1�"b- �g��~��RZj���:?A��;Kf�s0��)����i� ����5����\ .Μ@�)�}ts�x0�P�u�-��pB��@;��� ���(�)yֽzi�ùL^�6-(�s�'��nA߇��N��6�bU�6�u��Y�ȇ=�r|tF<,�ݐ�>������v�S{*���%�.�եZ(9]J?7;+I��`d�:��d�q#���Kk)����I"����W��:t�g��88�E-��D|x��ӊN�x͓;�Q�Q(��t��^���3d�z��Bu��*�9��*_�m����2k��8/L�+�~m�=yU�7��1;���LI�?(l8u�R,���T_��kv�ei�)�_�8��P�E2cL����Ս�ǝGu��"itt��R +̄�����Vp�w�U�Ü��`=���1F^<��!wo"��ꄶ���X9��t)W["Q"OxE6q���GO�*J�/&��:����Tn��"e�n�� �و�Bs)(ގL��:xV2H��ѻq�����j|z\`��I@���UдO���C<�eK�"7��Y5�s���UVܹ��$���6�TFW�Gk�n�ө��8���g�Ř��/��Sz������)��R�1��g��ē��rw�Yu]�&�O�sl�Y�E��PC���!�ZF$�YV><g�]��x䌾�=W�4��Y!�[���2NE�2��y2�`�-�����Kmj�|/�/m-�V�Y�"�~tMP b<F�t^8�|�br��4��n�lD�VC P�wY�,/N�|���:K�g���蠞(Yr��>K&�������Qd8p�`4hv´��O�#s�^9����8�EȊ��tV��l��F$|��<�{0W�U�T��������/3�ד뙌 +����;�g�i��R솖GȑȰzT��f��*Pv�dW1;Q�&��u���i֙�����o�Ҹef��̵���Ne\�K��i��7�|�*�b��:��q�Th��GRM��<�9�5�ǚ�G�,!'��t,͆�� +���d<�-bE�vjԴI�©[��A�����{�6 �,p�_�ە6B��H;�qT6n��i~Y�e�x12���~��m��e��Z�wS���sh�d7��Д�C��$!D]7��*�8.�y��^�W}2���;?��t���u�6�q�lDB��Ϥ���v-�zti�ڞ�?���W��P�"�JT��ͻ�u��5EW]�� �'��R�9\״��?���7����r~���T4�kw��+%>d���-4��Zk���ūFdu��(S���O��`&� �������p�Y�2�����!���G�s�R��J�vi\��A��0���?��z������D��\���X�S��kb�-�]��k��;#H��Ll�Sy��f��K�ThWA���#�Sc���5�.��`�&y��-$BS��kf� 4^�K(��ˁd���ok_*U��#!�W�RQ�_��@���Js$����fײ�����TM��1������r^���Jc�/h�]�����![Pb�C�Gݒ��[�'�+��'������ �e��xW���{UY�Y�ۄ�>x�z���4�>j�l�+�����Y��S�@�G�t1�f���C�;��w-���� +�H��*-Yf�ػz�k��@�KZ��,�+5�A�}ayn <o�~�6�}�h�wN�ñwQ�X �1���� F��B&�u�7%�ν�H�a���,z�m�� I�$k����f�%C��b/<]�W�K���x&�Ѡ%!W���;���^*)ߠ�1��&�uv��-�)�%MY��hi�N}�k!�J@�0V����3����$]����#^�.ZB���qs�o��*�ƯG ,V��}c�i����;��2�υ[�!�q��2�5^�q��� ݘ+ +��I +eX[A}{m�иy�� ��[������s�l��-��M_��ZA1�E�k^���F�� *�x����.�N���Tg)=s�8�=Y��sN�[#Rn�b��W��ާ����g���4�P��tt��<�������aճ''n��h�����(�y�PT��N��� �.�lIj�>ѐJ}Zr}�E]�s���-Km�M�!!ܧE���>+C�wR[�+���8!]�zt)�r'P�P-�`����YI�iR'�7|2~��Tz�q�/�}��-F�Gy��,�.g7��A�S�K&O�.��Ec�@A��.տ;L`���!��Ji�,���P�2-ИH��R{�y�/wDZz��k,�4� ő����"���[��F/��~Lf���,S�B�J{2���0I$ O����D�z����0�:3T㝰���H^O��XGb �ҮA_�\`��C�p⬅A v�10����~���>���=�Ƴ[aǝÛ+`K�ނ�/&w]x�~�LSA�qE�zP��z/a��2�3��F�:!���Sg�=(�i�s��&%��x/$}w���JtO݉xC*#�s}i6�r܉ic���$�^<�b��/��X!�G�vo�<K����V=Y֟��$����nKIgȾov����9��0�S�)(�y��ˇ}���m�e?���� +Nx3/]�������KM�{<���3��l��r���#����7����=������#o �h䋧�t$�=u1�)�<F�����]r��l��MjjAQ�<�������*����n���>�ˏ��e�Ԩ�ƛ�YT��V�f�~8ٛ�����s걄�9�V�Z�ؑWwd�z?�s�r��Q��Q�����G@N� kb�?�SZf�F�[�%H��u�%�{ g�ɵ9y�����2�s26( �,)��5�]��,%.�R*z�烕��[�i�x�B�*r�T�y�����Չ%QU��j�*{&���e?z�>�'�D6��NpU�����%�����֖B�撵9Ĥ4���4��Ĩ#�h�� �\�I�z[�v-�H�1^j呱/v�@�v�:#��>�wh��T��~�̋2�x���#+X��M����^�p}:g[<�ۦ?gR��ʲq�-4�d�v��}�d�|2�Yh�6�h��s��=st�䒴��̐�Z�g�*�볜x�.�&}�;�s�\��U���b�*�q���M��Ř�zO�(sǎ5�����P��6M���':��s�'d�a�c�ɹ� +��7v���6�̜;������� �����rM�,��M��g��pj�P��ƃ�4��������vFڭ����<ݦ�\�~+HG9W$#냕77��%WߓD���OT�k�� ����3v����s��I9�ٛr��0x��C��D~ ���ze���lkX�<��PxUU +���Pu�]k�T����Lq������3n̝�'�+��G�46}�aV���������<�ݍCE,��s�:��^�r� -�jGBe��dD]����)�*[�@F�3��r��pn~�_���}?���o�i7'�Е�!�E7��},�iQ +��7�lY�_=�V9^�7���˳5��� +D� +ruW�x���M��?#���z� .%�Ѣ������I�'g�z�9@�4��J� �*o� i�F�(�!-n�R�|�j1kl%Q,�O�\R���őF��F�����m۔�v����H�l�-G����{U���7���o�N �Kj;�X��'<x����3��|�M��;q8��s?M�>�Sz����_@�<�0T½r�C,�w�q����d���S��P���n���B�BC�#�鮥#��&|�&���L0���<�y��N�<;C���Gu�]Y�uA��4�s��̧�����ˠp�1$�+ŔFk�9��Wa��ꈼJQ����2�J�U_,d�u�����*d��גK�,�^5.�B��p����p>cd�M�b�wy�Q٭wqջ���;|�I.픇��f��S���r4��{���t��Y�m�=Ź��U���n�����m�c�Թך��'�-�!�am�RUqu4�)��\�/H�������X�?�<?W��օ"����R��Z{�q���Ew{9_�٣����m�hr��!���E��*��>:�N�O=DW`�6��&��,w&�w-8�{R�)�hXj�T��߿&4�Ku��]d��R|��ԹP4��UHe� ��{c"�F���_�5Ɵ�Цc�]c9�+k\�Q}��%�L�Wg2��e��Zdu%��&ˋNVb�{p���ܳ.G�����=N����z�3aL#���|�g��a���HDooY:^XqRT��,�n�$7�|���@�u�K��3F{���13��ZV�5��&�`Fx��*�@�1��|�����l�aV�55����f}}�ř6ŀ�7�r�WͮS����{�DE�[|�Ks;�<�'��n��oZ9������%p<�?��0Lڇ ���NÄ�@w�!��@9�E�s�"���ƭ��:mk�!�V4 ��4 ��hU��C���GJ7lդ����`����_Q�8��3�~IJ/(����� +�Mچ�T�30��j��̀Ä>.B<λ����n�x=T�^ѦZ���RI���43=�z�%w�j=��pУ:�Q �W}��*Gh��}�5�X#+��<~]�L u��w��N}R���\��T��Ɩ��<��<U`��玚U�m�Q�������[��p��4�����I���Y��V��q�jL�жQ4�v~o�����Ho�����ɫ`��a�(�m�hIZz�\���X�μf�[~�<��������i��yo�og0Mo��M5����P�� + /���y�}�j ��_�p8}rq��:##%��7ff����e0������@��T��M�`f��a��'tKXN�+�Hj���v�������$�އ�a%�Qa�_%������eE�P���Pa|��s�_�ƢggE��r��`�k'E�����^K����<J�ޚ�W�绫�yQA`i�$h:q�P3<I�z�Rڷ�0ҌF����������������f3�mߖ9�ROܩ^jTYN�����ik�Қv��"F�s�wU�M�D��OO}6�Z����49�Rogw��>4w���]@����Lu���������;��7��z���z{:���"{������ύ*��m�����f��_҄ss)k���nD#Z�N����� �b� ����k6�/��f���;�G�s|��c�Y?I�3Z��8�$<���/v�>|?� ���Xo�����E[ X�%��u|�'ҿ�%X���2�vt=v�q�J��&+��A @�F 'w�[N�f !�Y��s'��Xd��(Ģ���sJ��6�,Px<[+ y�vuW3��=�ZuwƗ�}�Y�3.2~�@6�i���/�ڐ�� �KW���b¡�����pJE�so��E�Q� �)g�W9�L�i"��ǔ�Dģ߽�Q��ӟ��֬�G�žy�*��d)r +�Jl/�K0Sk���@�f�8Q��'�.k��c��4�]�y�H[��}��oR-/�wa5,�9�B-_ݟ�^'��)�ʣ�MP�7C��R*/gw�@h�q��+*�OБ+�.ԧiE��Ф�Ԙ�F��xT�D�+���������3��nkO���2;or��{ +�zO#��*Z�F�e� ȋ����WDY��vct:u2]�� ���JI,L+=��V{�Ay�f�=��]�<���� +��,n�<AO�7k|�ғ�!���|ϵ�x�ڐ�ݔ�c�8�p�#7���ZjoI��ܗ��g�f�(���]�1�Ehq[�߇�0��Mmx�t?�L���H���I 1��0�Bt�.��h�ɿ+��z,@1��j|�ћ�z\��� +^��l�m��j�%�!-�,�:�1:n[k��G㢃,+��.{��Y��c��������K%�d�2�n�DgS ɵ�"�tߕɩrdžY�! +�t�fjp��Iuz,RzO瞚�5<z�I��C;��� �K�)�e������ђ�t>��T�0����(,��eAs�=�&E+�T�� +x>�Y�V����쿟�2�H{b%Qn��r��Nh?���9�����)E��8�}JZ9��3K���¤�8�\<\%aH=��\)+��hG�/f��:d��@�����4�<���Q�>�9j$ܿ��6���W1w<$栝��'����\I�����=C�wMxW��戯��~�� ou���%{F�7�"@`�>Nw<ШN{Vph��W��j�S����!U�xΙN�Z�a���!��BF^�fMR���F2���}�W���(�}���p�Y��:¤�mP}����~C;�Ey���6�fOfyϓ�< �^9�C&�/��|�#�2s�ȗsEv�^I�T!��Y)��X��{L�B��<�c�waV� +@�U��-�A�鯅�^�� +g�4�O։�S�~���N�R�ax-o-I� �cԝ��^O@8:^�s' \�#Qt����9�������_������q0Nb�n��'��U ����d���؞����y~fU�Fg2�K��4%hB��K�u��LN;yl�K�'KF������:����X��(\s>^����� �� +N��0�� +�:�ؚ�0?V�xA�%�u���YfYQ0t��x��V���</�,��ߋ�>��$�2PAF@c�Z+c$�ބ��8���%j�2�Bކ�Ч����٭ik�ŧ��\C�2������/6p��y#�Q�!L���wqL�B;�����Z*rB���f�tb�Ѻ�+�8H��Iן1�5������Q�E}� +����r�����G���qs�;�|�:�10�R�c���T���M\a7�'h�W�,����f,DX�y���#G�#'���K�魄�3�2�� ,�gz�ej�(��+^�V�����ḍ�(/�� �y�ݵ0{⡕K�V+Zr��e����\��DzF��F���E(&��/��}%�µ��o|����`��[�~� E���a0#m�v�(����8����卋�n���+�Iw!r-�ǔNr��t�iY�=N܇I�Y��R����rA��$�4���굨�'�|0�LJ:Mh��HG�ecB�_��U��f�C̓IJ+����7�y��e�n�Wb��VY�-)"~tS�+�3:*��D�UnJ�WԖ���l��+Po�O�e+&ee�֬�y�Cqa)&������x,��, !���{�k�Y$Kb��j�'P��LA�7W���"כ�ߋx�]���E�o�a�����9Y�����(�� �ŏ48A�ڄX���>�ߵ۽������t��W�"��\Ь���Sh�b�X ځO��Kⱚ4���0������;z����>,�2ʼ �$@5��t�#q�|��BCݺ��=�|��I>�W �Q�s@0����g��2�5�\+�!d�����v?�E�A�I���٠�����Д#c|c��ܲ�'h��� |�ȹ$ 7�� �ZkdU�l.��u#�QG��]|�����$y�t�%\� /��n��U�*4���:۶�N�V����u�Y��G ^v����XQ�yK�l�����Xp����wݐ�Z�g.R�`kT�Ne(����c��J��F��i�� +�.���J���� z����m�$��R������Ө~�O��}� +�6E�z-<��=e���~�~��ᤞ]EG�'���y�ڡ��+��%f�6�?��k�>��~�n���$?��v��Z�s�>=��,���הEڮ��|�d ɸ�w�%�~?��y\]�0�,��w4)��=\,��#WQ�����7�3k}4��~�`c㒜�Gx鱪�j���/�?��Q'�������ݕ���h��,?�PX^���p[�p%..��� ���mP�c�w��ք�B/�J%C��m��}�cM��o��Z>z��@�s���;��[�H E8�Y9FxzQ��ܶ��ޖ�H(���8)�������}�R�����F�6�P||`��W7!-7���R�.,:�o5_φB��+���EqS���R��_h��܆.���(5�m��J�l@xKK:=ϒ��[��Ӄ�dLö�V��s%~hLġܾ��|�$*�QR�p��� ��`蕕�E +�B�Z�?���M�{���zZ�I>�,�Qz%X��_�� �a<<���5�g��~�g�v�x ,�t��K��f��� !�H�I+��֓C�Y �88���X���,9d�=��z5bWW''jW2O�۳rX��f�䬮���Z)�Z�q��^U�E��X88��X� ��G�G���{L���f�#�W�[�_ʭ��N��u@��$���GlcMjз7�U������Ԑ����Ak�f3����ld*��q.�E�{9R��{�^_sŔ������C�i���(Y�`��!���eJ�n��;� /\��n�>�7A�kR9_t*�Fg�ͥ�(/��W�u>v"�V��ң��^%�Q�Ֆ�զRSO�Y<n�%�W� +�KY$m���s-����PX,r���7 +������K������P�$%9}�^�E7`>��L�ݍY����d$ktZGu䊷�K;9g�8�1m�p��{�v��]��+r��ʹ��#��r)us�Z9�_��_�c�d�fV.�>h�T�|��%�e~N�+;�ש���yO�1��C3n�_P�"5[���mm�p)-l���v�9��$e�����0P����v��U�w����+�x�T�D7��8�/�2�6��8����o����{ +�4\`U�C%���˩�o.�4�f��t-�@�lȞ�k�,N_�Eguz;2���NJB��Gb�N䎷Yv��6�ǵ]����Ȗa�_k���D� ��\/|��������MO�KB}�Mi}1GT'H�$�?�^#a��T���Kk~K����(��D(N����U X�t:<����*��Q���L�Vx���*Rĺ���_y�;W�k\r� +Y��X�S��ӂe��[^zX�������JJ�$�F�a=���D��@;�˖����Q/�}k���ZVg����(��m��g*�@���$�$^��;����/��&���%��ʟ$�}��u�����W��.�+v2��W�(j�J. +���p?RF7�z�Q�Hܷvӧ��d\��O����Q������_�b6R��j����Ϫ�B� N���~e�q���5wk��z�/��������/`�՛[��L/�W�K����]iQ\yp���fJ����>J�����S?K�'h~�L�'h~�L�'h��~��O��~����-��?h�NJ�)=����������~����-��v��)=���l�Җ�P�/�7����[�����C�_�o6�O��W������c[~��������������_�o6�om����U��7��z)Q|��A.�I�kau�]9%�����NwZn���~���u�~Xo�ʊ�؊���,�����G�?_��?�=tRp����d��;�|n �] m� +K�&���tw�7߶�R7����צ�H�}��+kYY^un��jH!�g���h|�?���&�`%|\{��Ɨ�Cs\T�J��(��'Y�����V~5��=7ы lz��#�_��� �A4�,>�,=Fz�}�M�rFl�}*z��p� �p���n�&�`���oNp�=Ze������*TN�~X<6Z;*.�C���TF����E��-;��O+�����3�R��`���*�e��M �y�E�G�Ofily�b��n���s�WC +��L�0˪���=C>��˾|�&x'���2>��V��R��-��H�=ۯ�3� +��ިڌ;���B� E��������h>����Wh���G�tU�'|���KOzU�����)��Ϟ=d3P���2M�,�ޞ��w��,�ʃ(��_��:�B�8#�2������ݫh�[������C\Ryc��G�g�e˲S���9�z07������xc�Fs����Ԍ�2����h����|.���=B�9)���Y����Bg����xi�[kx�������E���lI�r*ت��b���w[�����wR�Xi��� j)�M^.�ci��m�[���c��S�܊]9���m�;�J?6��T��sMsK���l]���!k��<�Bf��@=m�כ�<淁k�;o��_�kx���i��.npL^Џ�M��B<��w�]q�V����<;��K ��U��_)t�w2)��3�p��LB6V"]�]����,'����+�D'�T-x�M���:L�n��T��4�9�� Z)���?_��~���|����&}�=�p���[;0��;̌���Smv�i�����|�Z�>���}J^v.��G)�Mc"4F�^e@�5��}?m��V�~��?d���^��ON1�C�b"����� +6�K��C҆-���j�UEh~�� ���B�M�������2$V���0p��(9ֵCZY��)�2��u�@�@h"���� +���·��\����k\�a�E�Y[?_?��07C���T�-�Ƹl3��pUJY��,US��>���|`�tb�qb��W��K�r����B�'YȬ�JM�B���c� �V%G>��c2 ��8�ؗ�RσB������{�Z;Ez��@�[���;f"��Ew�����v]���m5����?V_���/ÿ���ȿJ�'����z~�L�������� �_�o6�����虹�{��A����j�_���ꙍ������-���f���v���k��)=���l��i�_݃~���4���l���?��~2}.�q~���C�}�1<N�5n�q�N9O�I���pkn����?�ťp_���r��� +8��eEcr�sE��C����߈2g!;�C��g<����-�48�3�=�/kc����ӫt�����f�{5kB��Uɹ��*$��WQ�Ďm����?����&��/ �)pk0u0|��qS�/��������>o-Ä�+��t�%�d�{�>N:�m+�?�OͿ�!d��=�O����Sf<dD��3^��� �{�:8�?>s�{��Z�����_���\_��S-��nT\y\tD}X����1WN#1(�8� +|�O����D�䶊3��Z�&���ٰ��i�+1>�,�}���kky��:�Ik@y�ec��ϻ�cj�zg�˱*\��G�����8��X����i�|�%� g�̱|l����;��������i=�l�G����r\�^:k��6����D�����Q��E袲{u` #�� +Q ;�����v�?�{~�R�u��s���_��������"7 /`��Y�6�� +w�5D��Y%��ɈZY���L�]�{u�z��*r>b�\�r׃0��b�[�d����O+��W�z�=�f��A��Z��t.���Bz�̬���eH�d�����o_������m��\U�5:?bC9�������zu�T\�u���n�l����!�����(��Ӓ>��%����' k����$�7��ŏ�x���rѼI�~A�����ܩK2��(��|�� �^���`ngT˵v��bRC��SC*��_ߙR2ό�g +A]7�b3zΰ~.&�>xkc�TRz� (v)�4GiY���X�q�1˝������``g)����:S�`���^����CH!����g� ��*m��k�Z�ܽ������p�'w1]�F��~�ڸ�Ṱ(ZfY:�OW�ޟ�Q���A���zդ���i�n˿;�B����LO_���=x`:��v���lZ�/���藺��W$Lz� 7��q���M��Ř��=KET�P;�s��*��/�B��$�ٴ�U����&N�#�o���N����� �f�� �ӨB�`/�� +uе�T5Ի�ʓ �rJȚ�m1UZ�k���b�������)dթ��n��9KA �^J�� +B�,��l�wJez����q1M//5�J��@� ��/��K��I�[��zM�S���2��L���9�@<|�x��^�U8�ֳ�1q Q��)��s�c�6վ�#�H����5�\c�I@���+cT�p�1��S\�[��R��_�Tlg�%|:���u�Z���:ǂ�0��k����^q�i,��㢴�U���𛂯Ƞ�8@>� �R��@��^�m�î;���9��?ikZ|߫a%������ ��Ɏ5��Y�5����YKL��r��>KA��_T߬Y��,��?�������9�T����Goo�y�P6��x[��F��۱�4F���(��B�����ۃ���#3*�z�E!���3�W����sKO�(`�F��C��8�IڮVu�yP��Z��Y��`}���)���B��fg�^c��8�9U�?r'^�d�[�'��p3���cx��!��a� +��?<����u�$m~�a��O�HZ�O������v)�N09��e鰯��Y�|@o�Bꁧ��mT'�m���x� 7�o\6h�����\�|3Yc���O��O�<џ���2џ���2џ�����D�f���5��������A�����I�E�/�7��m�}����]����f6��^���_�������-��(X��2��y +��y�'G�v84�q\�M��{V��%�.gz�q?���(�X���M��ŝ)p��p�"^�,�]n1��+������ft�hb��3����Ŷ��IgURK�oc�_~�־� ֪{�`*�l�.s�X^�q\�gw8k]���X��c�p`��8�n�_��?��D�L��9#����X�������ιWg�'�i�~�Lͽ(�����у��m�t�ﱲ��-B\��J.Z��ח�!�m���iv}���YO�~�����Y +j�0�O�PJ+�3���~>>-W�{<f�Op��)�y��0�"{��m�|b�w�"��\YJۼ|��/���?�DS���2�3�0Hz��;ۭ�OD�Q笲F��p, Wց����|��c�0�t�R�&�E�d�g�r�ǶZճ�6W{s�ڻ��/�O��7;w� эwF4@*7_t:�Y��%7b������K�v�R��E�n��`����Ɨ�E�6��z�sl.�~`�#�3����h~�����/�qF��=%����W=��jw��E�88o�D�s��A���Y���ے������sx +�\�1J�N}�������|��S�w��-�X)�BOI����`T"֩�����g�ə���py��m��c;`��j���Yog��>X�����i*D�E���Nk�������3Q�4<&�M�ЯF�ѽ*Vmr���4M���{��iع�����l��yOz�%�d1f���n +���z+jW�=�^ Rp�e�9r��T���?�:;��X��ʽ���7poS#YaZ��Po�ĉ���=-��r����3v˝J��Uu��)� +u�gnx���u�w����O@F���-G����㇗�W^�T�T��O�5�{�� sW+���4 6��/A��z��ܜ�k���K5blG��s+il]wҸ���q���)�~:�?�#�]>#*���%��S�]q�F����Ol�iQݮ�p;�ўk��嵱���?�1*6���ϔ��)���\��띰��_�����h�*z +�bcik�& j��z�^�HB�<�3ݡ�m�fᢱ�5˶�yfҨ�ЏH~�������.uGK��.����ws�O����Q.ӓqG�=T��V�ܾ����{������a��a{}@�nق�E$�\6�,uM2��Zӏ��9 ����DF9E(MZퟪH�3M`٩��3������Ÿ�^F���m� ����a.�Wᠵ��f�`��{�6p���Һ��T�oS��k�S��r*���4��p��*�K�L�����M�0H��PL[�}�kt���A�����ڎ��ܚ���z� ��ֈu�c�&��;�D%)U�Y�x9��T<��솂���r��� S�N��0M28#i��OK�i����,�k6},ճ���{�e[�j#���d�����4VF%h"�!M��U���pȧ��?���9tk�?�/��&�@3#��'�:X$�V�x�h��������g���;kf'�V�[S�<ӖǻjO*D�� D��&"4 +E���a�;/��/�k��mg��(�-�'�!l�žD��AE:E����ڹOխ�Uweխ?C>�/�0f�'���,��q_�A�����9����і�RjZa�I��x�?Ԝ5O���٣������Hy�b �t-]���^O�S���L�wBu��Ӊ� � ���B\����2�#�5D��r�j!���҂�j�%���pcE?�,vtef�-��u�6m��G����s-�x�?)/2�-���R�Иf�$�g��{���Z���-nc�(i��Xi�=�� +���g\�)��rj��ɼN��9Q��M���D���ǷW(.�76 +�?&m,�>��p+S����[�]��/����Y�eu��,�G� ���R/��p1�&��F"1Qb�V��2،���'�g +�����]0���`16�NXu� ����u�N�5r7��h�.�u��ҙUs<��ߚ��%� <5.��>ß,樗9V{o �$E@��$�M�Yp�($ e������Ag��=��eF����?��+�G�&f�xś�6}'l<��z����rV��!�GZʛ&��[�u49�}�lԫًQ{f]ݛ<}�k����}���3�>�&�D�� r�*� ���,���f�Ǣ���D�_ �������K3�ˁ�����1�_� ��n�4�������_o��/��%�J�7���l\�C\)���#�τ4-{���넓7q^����~�+����#,U,���'�:����ܾ|4��{��ӅB����SJ��ҵ�o����<��[>+$��=�T:�wZ�;��k��&��|��2��bQ�rw��eV����GДr����ћo�;��:<H�!�%�a�ћ ��|VG�� `���Z\ު�O�>�,��H�+�p?��~i[�\���:6{��M��[�n�;���Y=܀��^tz_�{{=,1)8t�K�^��>����Y��10�� >=���>�� �[w�HlS����}�;W_�`5���vfi�h{d��Ѭ�K��xGo=��p��G���w�ǒ�:�j��������f��}����� (�9n�r��o=�m�ѿaN/;aϩ���I��=�f'����6������p�i��c���Hu6�iժ5�;J������>�3�^�m0��� ��q��Ƴ��6͔����.6��fq�ͮ��}藦Mۜ7f]�����vL'�M�����o�-[�`i���a��H@_/@�z�=���?���ѓ@t�M�E)�ZŮW+���N�5?�MC=���i���b����ײkK:�F�3K�F/{%���_���L��N����ot)�:P��թ����T��-L�z�5_C�$\bt�=˫m���uPsWc�K[]c��A]���(0mȈ�8Ic��� �܉�LY�П��� +R��m|*���:��f�#XЩ�pp���t�J��\��dg� ����Ѿz���S7~�) :Uhv�˛�v��JD�4��1��7�K.��&�֓5�O!�WY��l<��}�h�C]��s�M���U.)���Xuwx��v���5_�V�#�P�;�����Z`lb�� �&���Ӗ_�N����5���1My�<��M2�bDW��ϒm�z���i���E�7{L�څ�(+y=���F�D+y�NЗy��h�.�4�Y��;���O����}�W9���V?��9�@��]��JE��_�AW�ܹH;q�V�KW���S�Ӗ�T�<#& �� R���Wc���VI�SK�ܣ�j�Վ����oȵ._�%}D�+�u�����q��"5W������W��d��屙����ٔ��S��R㗹I�j�4;�K�9�����9���iu`���v�����ė�M�J��9���ȱ��؉�����b��YS�}.�z����);�*-"Vp��B����f3b��v�t�2Ӧcw�ic~�k$�?}��A�<��ƟG�Ÿ�Ef�V� ,<�)W���d +��m���d�>՚�QP?`$Z��o�@[�w�ݑMz��u�).�s�<�IS�m)��3�&@�[_�_;�TSx\+ �S��m�l�U^����]8�w�u��^OVB_�����$CTh�S8/�� �&���p2˧�)Stw4=k�<]cu:�8� +��������O� +�y~���Oa�sve}���c`��Q�� H�eA�;oX*��"`�]^>nF��-�,q�g�c��hL��;r����]q��� |����ٸb��������{z�3 �J�r��Yͼy<��C��SKO�1��B�����ֹm��fǒٝ��^bJ�d�f��`����)J���������rt�O=pM���}����+�[�j��P)s�B�wV�,y����w.�=�2����K&�Uh���*��O�%%����w&=d4 A�B�����+����5%��<m.Ӂu|xd6���Q�Q����W����౹g�ɜ03Is>��.�<�,�i��e6/L�дD��.L���*����E�� И� �r�}���I�-��F��hŘQ?�.T��i�=�/�;����n�LV�˝�O�A��XR%^�!SDFj��z��N%�7WÕq��yB�3#iA&� �su����p�Ms��i.��kS�|�R=��'Q=���n�K�B@W��:&ߔ�[�0��N9�K�Z����!���_�陧�L�UC��m�]W�`�j��QE���2c�bf1�]q�DY����K"�|�c�{�p�_oq��>ఽ���2�e�#V]a6��g��;�_B���<~Do�K��-/��C9J �s�� ̂|t��Ζ��N���cB� ��O��W����9G��z� +���6��r�)������v,b3���߅��ή�z?�4��%w\^�o����n�A�i8\�Z��6�5�1��{�[B���h�`#�9�^�@�z2TIe:��)��P4�ٴ)� �H@?;�3�e�V�r���=���F�����g��="j���gk��RթӞ��Y%r��|��������"�׃�#����d����ӱpc���YM�5b�V?~ ��埈~C3�c�oh�+�?����'���L@�r�|�9�_��������L@�r��߉�3�迢7����|��$�<��4W6��@�Z}i& K�o z>�9�8R{<RS����@T���S~�|�u|i~����q�3A��!���e?�]�:�{�k~������&��c�gDi�'�x\�Ф��H��?��~�<�2O)�6���x�LO�|�f��}�f�_G\���Ml��6�O���t��3�L6�-w G��e���� �t���\��)]<�6d�;+�>�i_5��hl��u�r�;~�M<���m��bf��)П��EY�.$h |\��q�<�����RͰ��nם�6�#�Y��� �^Ěe��h� �<�j�ќ�&g��]�3�w�K6�}_��-��_4�1�~?4�j�}�C�m��P�@��Gt�����+W���\'���p��績OX��Y&4��5�sN�gܳ�5������E+�+�}5~qy�Y�����1�P�����ц��m�a�`R9v?��z���2{�G�p�މ�������@S��i����J���H��\�ӊF�V�m�X ��k$�����4e�O#5[z\� +����eooX��-����r|��{y4'�s�25;W�&{���8�~���e�F����E�V�v %�Ѓݲ�_��m;�?����q�z�=Ȗ��!�����J8���1�6V���=V��VV���T��j�{D���t�4�9حgF�P���V���^�������/!.[��C4 �p�z�]\��G@���y�����2��3I@� :���З���_����y[�f��R��uY�IC]���V�z��r�J��/,�$Q�o ����E���SȂ�ā��������3�����sdir�<r�4��_���@`�[2��Z�7�Նc�9��S���]V�4���I���QG�US�u�W���<��T��������t���=����g{^]��˫��[�]��;2gw�qu����Q�'h&�p�]bEs.�& +v��.�c�Z�Z�����o��@\�Ϡ�ڽ̧��وsW��&��<��T��=��Ai�躢���!E`��q��aX�O7V`R�?^N��@&���;�+5�h<�Z(σ�I����V_~ ��ߋ6��g�H�|��k��},��� 7�_ ���oOlzT!��"w��'��N�W��h���m\,�bQ�c +���$���\`��j����)�����f; �Ij�m$".�� +"��D+3���d��s��$�w��V|����͉eQ���F2�F"�~��w �w=m�n�j���sƨL�3�;R�䒔��������?D'�6�*��v������f��p����꜎10�oq�3�:���~��(��i Q��`����y�#lz<1�]����k6e��BӍ�ʐ��%$�������r����Ft�:צ����3�m��<�v�R�k�jZ�����y�������ݻK2\��z����o��f�S�)R���q��3���L-:�6e�#���_�hϫ���[�q����ysˠ�쬫J�ϓu˖L��5����\K�)0��F�9�M��-���:��r0�� +N>ү)9 +"�f�Ig�k@���? ��_;0��T\��50|f��Vrؐ�H������.Zޱ�8���#9M�8E�ђ�L��ăw*\�,�f�j���E��iwr�[ȤtǤZ0��Y-��%l~_�%A{�9��gV8�i���P����sa8Y���yޛh��)���%�N���4�����������٧n��;��=�wd�t1��b���_0�|]�����JД��7��p�ޱ�J���?6�M2�'%�=^��pPi��� I;y"3](��)j���er�hU�7�Y",��D�l�Ƈ<N� �O������m��AS�ҷ�V�/���M�s�Wt^[�Uɧ������=�L�Vsn����K0^�C�Soyy�1>O�C��۠�#2�Ra|�K�q._j����u����>���t��Ƚ����x =���&�TF�[�(��ԊOv�5[8�6kv��8ߜ���L��%G�m@��Fd��hLvj�8Փ����$ �h�����_>]-�y9ï�D�Z�ʁ�u����Zb�K��>�jUy��זLm�\Sw��&kx�#���@����d��o�[q�KQ����f�U�� ���':�g����oŵ� ���:�+�y ��JSr�'p�Jb�4��9�dK����T�S+�ē�}��V��2Pp�8��%�� v��V���·��w�h��Gڹ��t��u�G�o9��3��æ�p�^�c�=?��*��!��4W-r<=">��46�����9*`��J�4Z(y���0��pw�a���M��a]j7GO���݆ծ2�_Q*&u>���ebB�T'j��Pk& �*����&v1��CPQ}G����z��x�p����}VB��i�g-s����b�� ��F����;Rv��W6�#���6���C�c�n{O�%;�ئW1� +�$*u�ّ����ۖ���Ԑ-�4��ŵ�_9�Lw@�L��P�7����1��!��᱂�p�c8�}j��!�rY����yr��}�k�B�F�F��gě>{c�R6��GwfN��,.��$��.)�{�huz6Z�I�[���OH����ک~��DI��?�~C���T�^�����74�?���g��_ ��[��w�4п���Y~� خ�����G$��DW�d���(?�ٚ�xtuL^����c/a/^���J<+�L9=������[}�)�w�bٯhpXFV�]��0%���f�xs=�,�C��d����n��MQ����y-�r��G�,�\��!wYV��Y W���NȻ��o&�7Qʴ�y�b�d7���qi��! ��/$�ߎ�1,���1�.ex�j���3�B��݆�]5 ���G�T�z=}��w��.�j,����|Z�~�������&';=������4.C>8H��e�<`�w���^~�*(8��K�y��W�y�G�F�ݴfD�V�cZ��a�������S��S��m�}��i�?Z���I@�1�Lָ���ݭ����$O�/!��p�?L츜Iͭ��\�4��uK�2z>Z7w��Z5�d۳�+�VM�vĕɟDF<iKA�w�L��[Dΰ��p�M�gDz�����?m'��(����?��E;U4��}?�ʢu�+���!<���@a�!;~q�G�Z��:R&�'���P��%E�+����m�E���l�{ޱ�����T��T����>��s@���=�!���ouR��"��#��B��w��]E�Z�/���1Xb�3�Np��w?���I]4O�diԮ��v��^���8���o��86��v06��ǯ �ה�2��f�y +y��_��ju����P�ߟ�B=O��w�V�U8��y�oi������Y�e������~%n�&�j���.oS���m��r:^�+���������='`�g �+���6���0�WY����b���堰�\��B.�"�|��������>���WT�n!y�hS���+����Ӫ��Gz+�䂺Ԍ@Y��_ė�'�_�[��y�{����X���}F���e���_���Wi�#��g�i�/k�h�~3��, ��l߈�/���|�g�*|�K�� Hڽײ1�R4ʌ�K���44yx-��i�j���Uy��{2��2N@aN��y��9}kٳ��3� ��k�lo��g�Y��:����_�]n"�'Nʌ,XdS�zS�� �O���h9-J���O}��S�8��g}�l�<�����T�g\Ṯ��~�y�8�yx¯��ͶVI-�<yv�����=��X�cL��p��Nc�wS��_o� �5����W���/_{ �&����Cz��7|��|6�M_�Ŷb[�s�G���7� ���֢R�cmHzSi���[�j�p�w7�w_~�y�vua.e��_B\��@�|�-'��r�v@�q:���u��������8 �Ȏ)Y,����:�[���+WQT�VYB�*���/Z���z�Պ�&guz��Fv����3��9����^�A��*�����4����]5=���� ��9�G����~��Y(�Y/.u�(���}����Z���h3zt�G�<��R�g�Be>���_C\n�S��c��~}��jǵҊz +hN��g����� +��6�,�����wy��]�0;+�Ӭh�����έ +����i�Q�S�f{ρt�Q{,���bt�q����6�L_�`��O�e3�M��+�|hv�+�U���nG����!��_�����gҒURa�NsZ'��{<K3ҵ@��X�HܤC*�q�:'���b�{��_#��p�1ઔr?;�@�뵸�E��&~M�͝�K?��ꁩ�w۞�B�*��cip,4��s�T��o��肞L�H+G�l�Ў|g�;��g�xG�%b�-~ qYD?O#UܸZٽ���+ 4����s^V�<�KY5�X���u�Č(�G%k;;��9�>3��]�1�>�i�^9"M�+�Y2:x��1̮u�`2��p�������]��̈́�O�uuvzƵ�P���W���`XE�~!���`����^�?;Q���m�7��ev|�]�>��Id��U��m�11Op�J��"\�a�x�rt��@��8.���S�jǵdF�q1���;Ѷ�6� +6���� +OA�eO��L��9�&�3�<7�F�|����Cj���,0�Ǻ�w1�HB)��I�Y�`e��F�>��\�ѿ����/�jw��^�q{^ߞ����}9J�K�Aw�0!�� �X8��t#Ԧ���P� o��c���xFnu�!v�g��l�{���F��Ta�y��H�/$�ߎ�qe�ASj�}Ó�r�Tn��/���Z�5������v��8�.f�y_��������$V��Dv�nǓ�V�i���K��`�A�Ey�� ��D"�Zq%3�i��w���^@cV��@��KF��fT*��3�k��}˴�U�2G�co?��ؖ�[��N4#�:7��T�\���^b����j`��.��nX�_�Ih�uҝ��t�aϫݐ��y��Zs���W�i�/6 ��9=t��!��(�4�j��+<���'(���6�qI@&ص�������č�s�u�4\�y8H��H�t�������?"�i���N���_M������?O�S�q��rd��}V�h����Iz7k�m��ƫ��lc�Fe{��z�� Օ2"ui�lh�BP��!�� ���b��Cq� C�o�0���K�q���p��{�8���q�ͳk {ڻ|��ķ1|��آUM���=;|n���0�� [R�#i�i~�A;�}�#�}�F� �_8�=�=&՟���p�Kؙ�&���@��u�zN�y�q�`F�{e0�%Lr��\��A�.�z y��>ޯ��}������}�����c��dw��e�e�\W�w���q�]��@v�? ���o�K ���&.��)p�a��&*8���٢���[@�P�mƶ{>QF�đ��Z/b���p���z&j�u�V��^+S�p�)�`���eѷ7���]|i���?��&���S�oh&�,� ��E�� ���>. ��O�K���� �wx �o.�K^~E�ڃn�F��r�f���~���ْ��ghn���Y)������:�Vy����#�緟.~Uy����Z����]�%D/}Dٸ�~;1�]�q93 IY]�p�m��_Q�ˁ9����(a�=����s�Ղp�͐���"w�撂sՒ�×���ϙ��t�!��_����RgN�ǟ\-r6.MNp\�..y�k_��Ϻ-����:8ț3���8���^wYG�[3�R��;6�@�Q&��a�U.f��pD��tԋ?sv�����N�� ��RrvF[��<|q���qi��A�l��9S��X��,�V\ơ��Lн�;�ÍTo�Hx��s]�\9��8n/��3]��G�|����c��,�^w vI� iӶ��)��w�Ct��A�D=Ѐ����2��-Vx���|,�m��L��n�#ТG�. +�[�A���͙����E<i��v6gѬs7�n���9����rln�hk��qI �+��>h@��2�߾����W�������=�������{<���n%s��5��^��iq�] \a����N����S�qI�C[4����mHS5�A*�E����K����|V+_+$,� /!�P-�/����=`�"(8��eͧr~�eՑ#���)>M -�h +mƴ�o�`������aG��v;��7��R[3X �`U���⇨����l8Q�<,=�<��)b%�畚�Q�:�n�Q9��x \-���pڑ�=���o�Qu`�ZiT�q�V�龟:�;�yZn����(_���KY-�I [���H@��L�?��~�(�B�,�V��svx�!�ݑ��r2�U�V� �|�)��Ѯ��?J�ˠ�����`��-���,�H�X���_���^V�/ɫjCX��{�]��|��ܾ~v�`Ḣކ�o��y\���ѽۺ�Ҝ����r$�?�7oM�����&��S����҄Z��w�9���\u�,S ���R�<�d���Y� �������Q�?O͖>?�2�l��>��nw;��D���駣���ml����J��J>s;��)n +� +��Dle%ܞ �Q�:�����ɷDK8��E��8�\q��P���?/����FQ��_�M���{6���=��AQWV筻�-����������:���Uv] ���M�2�d��ɀ��h�aW��ɱP˳�`�9������zW�ϳ���§W�Kp�t�3���?6���T��r�Qd.���Ԧ�6�5^�y��^uH$�|�$��Ţ`ݵ�N[<��Gs�=2�'�S����A���O�C��ѠD�M�So Do;&Z%�RH2)��[g��Zٞ5���`n�C���=>��F���<�Q��rx-)���/Z�¼��j\���.N���l���� ���.>�&T; p�O��Y��&b��ĵ�3�k��<�3)� P�xΦ��c�_C��ml��ՠ���k5�I�Z��|�Mo�┇�e�N@�L]m1�����.Q3�њ̶�.�]��6cX�.�`�q�a�3�~6em|�=Zt�Y�$]�|�i/y4���������<;�̢u_`�^��.ҝ}u��g�4}�4rӓҨN+9~8��� M]$}̤~����KUc�����5�R�ƣ����Hύf�ˮ8Y��j���ܚ[j��8˙Y��K9{sx)����V͛e�;]z�c�d��/d+�� ��>2�9���c�ϽF0�Fn\���qm���_Դ0����f�iJ�e#j��99����k(���(��Ց��� �y��f�ӋNzT3]z�J�$�������5��MkJ<�� )���w�,����I������OO�K��[��Q�u�+�,��e-���C�8ef�Z3�ݲ@�������T:N�wt����%��}��ݓ�>�p��t�|ҟ�z�L�2�?�|����B�N\��U\��g0|jQ�f�/�ۜ�N�f�vUm`�z.�;������2�RUaa���a���Q��Z���q�D�"�xÂ3O�!^��S�DJ(���huQ([-qX���}1|^w����N��4+�y�N���AS���۬1,%{;�#���V��)/ֽ�4ur����t=�n'��r vH��F��jj� ��y.��0�5fV=y�p��".��>�yI�kEg������]�۶1\G�s�5֊t$ �\�q!�Pj���f��Tt����"���pZ�L�Z�9h.�Gb?�ބR~ؽ ����P�<� �ϐ�~v6.O�H\�G��[G�0�����1�녽����u�m��4�k!m����B��ZDO;� +Kb��O g�-��a�]���(@��Ὗ�W��g��A�3^Bv�A.�} ��4��Q���N%�T�v{Eu[}M��\��� R�9$ÃYE�@�swr��M�Ga�Y��a5�Sj�S�H��0�;�a��Y�3�\�a�a��[v�`�e黈���(��k�.�gw�������{sy)��BOm��Y��1.s}�z*��Fc�Q�rk�? �ѭ�У�|1�,FD^iLAF���$��a���� ������ē�� �'"�G���۟t�����gV��x��R���9��uc�@Ժw*�ԭ��Q�%����wwԓ.�Pu��+����(C � +��5l�7��?) �~~�mzV��{�'e}vio��p��p}}u�����;�b]D�J�{fQ�](�I��I�B�� h�|'G +bf�kl]@�$WF�U0��ܰקjذg}�ǔ�d>��e<d�Us($�nu�-���K����+Tj�%������H1���O�H(k�`�����\a�X�B���<8L�o���_p���Jh܃�U� +u���q�U��@40�y��`{�%��5�o�6R'�7�%��_�� ��®��R�Ә����>�=Ѐ�h�ܘ����4��T�&��frٽHѪ[�<�㮼]��:�+;̶���v'�\Z�����ϣD��".\�~\�����q���<\㒀���1m��cW�K%�e�y���#Z�_�xؗn�tR2� �� x�h���d0*?�ARs�I�����|,��~���n�B�K���9̹�%�����~C3�c�o��,�D��`�OEh���q�-�R��ƥ#4=�D����辏�g��p��b�@��]�[@T��:nw��Z�D�v'�dtg�����x!-�ػ��3���r���8��=�Ԣmk��7 �^�q1��q�L����o���\���{����,X�K���p��T�н}?÷����X�T�N���A +���.r�>N^8?�ۂ�Ӂ��l��������ԹX��`��u�@����� D�jÄ]��UL��lQ#.m���������;��S����N��C߹>�:L=���=�Jپ���s�������rG\�T{y4���`������mhv�-�5�@)�c����zv��/��+ь�<<+�� ]<s��k)|jl#�<�� ����8c����h�%����=*�=�z�EX�{��OǼ������zP]!�v�3����\eД�-.g�ڏ��䣍Zv>+w8���hҏR���z��5�`����!g;�H��V��)'m�R�rr�����x>浔�_yd��Le߫)�7���kYEf�����b= ʰ�^���؞�gUd�Q+\�oѻT +�G�`�F��2��+�)�-]��ke/��,VϷB����wG~�0tio�2�^m7���E��w�8���K�����e �lªM� +4���m����F�Z�~C��+����ϦK.q ��;�K{7�@j?�7�JX�;;=V�g`8i����b�Eg����%�r��N���y�ŭޏ�l������ϸ����쿻�+��! +7��/^p�#�>#�+_��R>NC�W~�p@k����4��ׯ��u�9�an�S���9@��$r�r��L�z���7��x�U���@��� +H�}������w^�}u!Ig�D8�u�H=��͍m<�%�S�܃���N��5��[W��v���4>g4�!� h ;~�jgV�X�V:������g\�As���Gq�!ß��?��].�����[0^� wt�����wx�&���<�����k�O���օ��Ƶ���XY�"�V/�����:W$�fd�l��u���C�N�`n���q�.ѷh��r������_��y5G�]�d!̎��������W�g/�2yrt�hx{u�m������-��Y��^y=;���uE�*fO�/��lP�t-)�ڒ�>����4K�$����6�u��/~*X��X�n�6��[z�.��� Sk�< �=;��zَ=��=P�<tSnY�)�f��rT�$<�k�:�abΧ@� � A�t�| ��8.Q�a\N�k��4΅O�j/�/��-���,�kg5����[����2v�}�<�U>�:�,��r��C 41ߟe�Rk/f{o���1��8?7C�O���p�袌��6�ن�ŕ�����wF�0�)�ī��E����Шj���v�Z�͔����E|k�m�?�c�k� p�y�r�=��¼��m�a�m��>о�5���dv@{��gwS2���T^��˒��pu��?v�j�=CUM8�X>�Q]�N&m=�u6J���]�7D�q��E�_����99�G����=��ͻ5���ab� > ���T��q鉍����+�,��czn�z���_9��ko���Ӱ�ˡ�y9S��ڥSPV77��#ڈ��]84���Q�f���2ۮZ!C�Ko�T�0M�!�u�!3��s�T�?E���?�p����^�ܹ��g�h�/��e�<�ԑ��UчW���TIX7k�� �Q�&��.�sw=_z� �_��f��MOK�;-�փ���y�v滔�2SF��������Ԙ&cx,��J�����ʍk�A2�5� +`x_p;�}�D������~\�0���U��,��|. +\�]��mIf7;Oe �M�Sߠ�k�<i-��U�A�[�ҕ��0��ē��o .!3 �71�9+@?:�Ź�pGx��H;�*Z�8��ч���!�*��d|=d�J�>�;Fu�n���P�J�r��6 �ƞ��X�@T6��uj��Uct) $��)�� ��%.M�T\N�6�ֵ�z +OQdx���/�n�v�NV�͛�ٴ�'N�j��ͷI �$)���in�M���\�O� N�mH!��f�Y���Nؼ�Q�6��j ����U�㇈|qI�e�`�q�ך�~Om�{��|�};O������)=��*� +r��uk���otX�1���IƮ���_g��@X�"�������qD���]���G��Q�S#'8ch�m�\�����N6.��ĸ:�.��d����Ά:���8���w�-�{�~]�d^�/�������R�yl*�lr��5ws܌�K���[Э�֨�¡d�ag��#���ۧ=O���̔ƙl\Y�'q���� O:)����3P��r�n�>�~Z.�JA�ӕ9*�3�W�M�?"_��Ѓ�q�S�ѫpZ�|�����S��8'�R�f����s���բDd�Y��#.�8p����#��`�0,�zǙo�)�O@��i��S��: +��g +f��P���Eb\�;���vy3t��Q��IH\�m�d�x`�a�׳�d�0Op?7*��9� � 4���gE��?C\��K�_֑s�0�M�u?��0��]���f93)g�h/�] �Z/��c�WI������$ ��ڃ� S𡚧(d�`��/P���I�c��U��;�RԛRN�WJk�Ӿ���jy\��-�d��T/����Vc,�HW[/T�x�&����E�Zg�9¬� +8�ca4`�Q/:C�1�p�`�`d���L�P�/z��#'���m��5w�M��VNfԹ����$ۓ�ٲ��>gTM 0���R�,S�[d�����4ę�הK���siUem�>�� H2g�*A *Q�(���۱V�s���{������1��;�m�L�ý��d�k<π���9���5I*wi�;�r��>��n;5�E��6�Mgєj�U�z����m����ߵ����/�cA�v/j�y�HY�j�}y�l������q��q��Q��>�2<r-�_}�7L�S��糧�x����w���=�|m�l]��*=��NOoV?z�����F3�R��=���8a��$;����y�Y-{p�N�<�l�D�E*2����r�1v����2_w{�ާ��j��F�+����[�U��J�uݔ��Ѭ���w �[��s]��z}$?Hm��M>3��#��!�6w��U��QWn6WSa���g%/�nZ��h?R��/�o���a��Hg?S�6_�Z�f���V�n T��~3um j��m\�LC��9�gUsJ�~1R���{]U�f%�@���7� �����s#,�O� f� +�h����|�H�Oem�Y��ux��dD�g�rƓk�+%����A�2�k�~�1�4?��Z.��U@���vl?b[8��v +PL=\����_�o�����+�/4a���E�2�\I���[��>��"A�S�BE��h��&�x���>�N5��ވ��tO#�B|#�KIY6�q@ڝX�w��V�M���<��R�V���|�f���O�8�"=�"����������7�m� �q� �]2��I ��L�L����>-��'���!e�Q6�^�dR��8`��.�l<z��~t�l��nR�$ӛ�6�C�|_��1?^���l���G0��p����}�̗}(�6q@2<��� �S��&�����|q"����88�+1��Z�c8���?Fͩ:{$)Oy�f�i�����t�l/�·��l0����zB�`��U��s��H���2� &|�:< ����ԁU�~�W�#Z�"$�,�|,��j���v����#������/����a�8 �l�~:�݂� ʳ͞���o��up4��}�Q(@��ȗ7$���F�EmӅ�J�_y��͋�q82�q�k�2vɦ��D�����B��n�L�r�'块�-����V��섅��g�GG��[0 �8���9r^� ?���k@�2�'���i�DqC[��v��=�ۧxgV�zh�f��0g4�?t��O�ӹUy����ikN�,-��j���(ZVS�8L�}(����r�ǀ|"� /̍g嵱c��X��Xy7�w�R*��˨O���[Qҫ�ʀm��:sJ�u�DU�C�c{W��5��d��FÞ$ܟ�����C���2�$R=��2��P��[��(�w�S�jܶ����m��}<��0{�m!_��}Z�����K��ڇ<���]O=k5�]Q��Z�˦1,� �s�6�����>�x�wB�9-�aaW��1���馿v�m�U��|�_��ܕ�p��?��ݫ|�x'� +.G}����Ǟ�u���i�N�S�N[��h�]H��N�[�0c��79��(� �.-�x�O(��@>�X�`V^�CC��s���=Gm�w��M�k�Zݞz80~k��~F�G��/N��k����L��� 3rXX�N��`��YݯGcm�[T����|��E݃�����A!/~��/ endstream endobj 32 0 obj <</Length 65536>>stream +ߑ/�~k��|�y �4f�}�B�d�����3mw�ԭaw����4���@����x}~Oh_��B�ҽ��*�C�C���F�3+S�w���QG@�Y�/IP�6(��b�.�F �/����m��E-��ۤ�yl +v�������ѡ7��ܚ["!��"Rzmڽj�V5V;�ZZ٬������*[q�ˑ���ho������EW�o�i�@a�A�.���%��,=�~\.┺ƌ0<!^f��^�۔��e�6l��������r��j���}ﭬ��/]Tz.Q���Ә�d¡)�4j��BPh��6���%9��;CP�.������lHܧ����E���1��Tg�����z������2����`/�群)��1�n�td��~_��}|�`���X�]�B����)�ʩ�/�K�Դ���̓Ps��_��-��6�#��f�v��֡��{��)-���lփ�Yr��ԡ�d����T�,=L���wBݔo�����I�1k@�Y�/� {��~��YU��������� +�����p3�'���ܕR�#�s��jV��tc.���z;�:�7�A�l��/��T�J�`%,oc}��W�����f���#f�l�>K'�ڬW�W���9��_�-�����6(��~�)���a���p��v]�W�8�rj��������h��x��ᒸn&RY��Bs0���2����l���[���<�ͱG6�q�V�xW�`���>a�_�OAq�2AII.q����s���ԛ�<a��wwz}~��VO��n��n�˔���ғ�I��Т�9�Wf�۹�1���+1t&���a�퓞��U���FezQ�������S@d�g�~��2����E�sQ����qx�����i 7�U��M��������#��-�G�'�{Eyď�7�����$L�V�dzd��O�4�x��W%'�2~�b�_�y��m��E���&�fz�T��K�t�Y{ڧ�vޯ(9��g3k�4���RV�M�*/^jC�<�=�ג.���[���d�����C��l��l�8���d��6J�� ��I�_�=��j���%KYũ�S��Z������@��M\ ͣ����%�u8�ˢ�Ŗ2��-Gj���j�e�؝4Uc0�<z�0[�������D�q���e�+���q%6��ϼ�O�A���^pR+�2G�����,PG�d3��K,�[Vʴ���Q-��+�YR��0b��V�<���l�����%Ǘ�{����M��+�������-��Y�@IH1�d�`�e�π�����/�Ҭ8�Axf`o��|��Gyg� k�[z�{N� +�@��B�E�"�)���ڰ_��2�ĭ�`Z{���͛0���`��؈]��$�N1 �c��Mt�5���yd�"�/�2Q�/��}��;�o?����ac�z����9 +�*g�gp?�����E/��C��<9B&��u���-=�yߚ�ʉ���m���U�H1V�E�gV�Jy��w`�[� ݃�㕀R�+]�k��̓�e����&�]u����z_^�J�隒�9�^��!M�1�g|'5��h��"��*�tlϵ�����"�y�ΈF�J,�����T��:9-������ +@�\5���j�r7�ѱ����l�R��m����$Q�X`x��+��mJ5��u�x0���_�NF�M1��e�65�@�3VS|����ΙhZ��"]����j��i�iV�Dw�gܖ�D�fŕ꼃`i��K_��sW=�(-C�0��0�v�-��a�!�'��|�\<(��yO���>]��A('�$;��-��(�j-rĠ�Ok|�����d����\�7x{a��������8��E�M2��7߳5Ņ���>�r��1�!�9��\#8ʓ~*���xӗj��h]��~ܼG9l|��@>���[E�4���|�`M!_��Y����T�����]�6|M����p;Qzd��n_��hu��9�}y<��k�����l;"Z�Qv�\�^��j5F��wa���b�:R��eW�E�7%�d4V=˩ǎu�wP�V۰nT��(U5�o��/��j&h5*�<��د˟a��WG����jff;�{�]/&��Wϟp�Y����~����2�º樐��gn��W��wOo�j6�o���N��] ��5������jő��Y�,�ʥ�?���q=~����"j+>��§T���l�`c �ǣ�\f��H2f�c�vT�T>��Jpm��4Vյa�Y�LӠ�9~��~!��x%^����s�2������|�3(^�-�3���;m�_��J^(Rr�j=����`BRd���#����(�$���6��,P]����: �v� �șH +�x�~��r�q � + +�ڹ��c��陵mrvkn\�?܇��nh"��7��������� E�g:�K���Nj�٧�߂���+��[.@����_{�rf����eJ�v�x��~MkE����fR��n��O��&�CE�?ͫ�?F���e +Zl��#K)�cu+�� +�C�����0�(�`<��jp�AM�;"i�Z'^�f������k�ϘN�ܓ[>�$9_ '�2�����0�?-�������b{�Vj2 �9�w�M@;g@ �t�K�|:�3u`MW��������f�}��k���4[��p��z�A�齷�g����7��q[߇f�t�ici^��E?ş��~����(�Xt����9��Ph@P�������n�E�Oa8���0�z������� �i˿�k��<Ru�Ʌ��3��b2w;��O�{�Q��{�v��Z�9uxt�`+��}ta<g�ݷ��eS�-0�Y_�H�35g�``8�����*�@�g6|M���E��ȓ_����*���c�¾���V��h�3����ν��q͔rpIF�O�����T�Z�=�;���P�Hb�r��� I�U��w�5�"f��������.I��<�ZD�H�吨)���fe���3G��ji����(�kx7��L�FQ]��pc�8��~��=���-�]�����r(��5 A�!���j @�W�WaCp���r���ۨ]w�^�߽��Pz� a� �:OpzHU|��uo�-�.Am�=җ��?Ӓ+�'3��SK�W�?`��0��`�c�o� _��G����Ϋ�*FZ?��i�狳G*e�B�������9��i��V� >?<�sJ45w�p����AK��P�A��Z�YOҜ�̦60G��3��E7��a�6��+� �A��_�J��46t7�VX����< bW�S�V����3��}~�<��>v��0ٓ�~f7KE�z��}����92`:��xc�ސ�����?��(�N�0�j�ˡ�w�]^&�y�D�м�2p3up�h�)�¸���������dֻ9gZ������Y���Vs��Z����XU3-�-�ʽ��hѺ8v��ߵ��M���E���q�(刺VHT�d�%4�h�7�#���DŽ����n;�x;���cg�ܝ�l�OW�����d)�@���v�$o��6������S����^CY?K�?`���Z��1�Wc�� +�q��S�'b��P�RG�gP6�L�[ɭ��6hW��>��ij �s�H�i��n��|�.I��^�M��rg�ո֭+�A����8|�kK��T� ?�_��u�����<,���(v�{�do�95>���g�*b�Gw^+ +�J�]>�-���P��Rzۃ�mx�rz��0b���R���P6���2;������r����#U��hZ� �_�3`�M����{.F�x���u���E��~�>��;��c��-��^!�������]�~]��9��-W%;�[y���6>V���Sh�#��T]���%OU�&_nZ�͊x%Q8"��-}Q�3��a�"�_aB����0�u��l�Q�-^��-\�C39�����[�I�%�_�loZ�gBe��oM-:W)��K�� +ˣ%����IQ$�:6B�o=A.^B�y*-k���~q�=~�_���?��7�/Պ��䠨H�����Gn?����|�g�����kר0���qX���U�����|���j8�P�7�����}ˌ��|��ie�{EgNq�h�n +�w�!!�����?[�X��d~H�`�\B��`��n{K��0o�;����P�5"��@?�n�g�E���J�I��Z*�F�EU�ӏ��lWht��|��q3�1d��M9}n'�I���I��!���{ݠ����T�����Q��+�u�Q�z,G�Y�v�Z�n�s�����zYT�?��.����̇��(m��"���nl3�C��d�X���է�8N/%e�Cg�����}��;�(=m�}f���2(�C��<���Hm�����6����.��_-��D1���!�!��DY ȅ>h���ΣL���Ŧ��O$1�����a��J�I�X�_2�iic`�<�6 ����{��K�I;���$އ7U��p{�i_�TöB�dn�`�dK����`��մ����?3��&��Jl��kL�čj?�=_���B��ui�!:n�����o�K݁��� +r\%�Ʃ����35�+����N���-��F>��S��i�<%�|��u�R3��"�1sƦ��[�4�:Z��ΰ�Y�� ��1�;Ύ��~�X�>L������w�J�hưr�j/1y�ïߴB�t<>�ƾى��(��[�v5��v>*��]��P�Tň��M��NU*= P/7�_ bD7_���i��~� ~�ޑ���%g0;3�ʰ����ǒ�g���� o�OPڕ����.�s�u:��A��|�j���,p��Z[��:"��W:��J ��aC�s��1�� �둑��66�_�>��4���ا۟�u���>�s�}�v���"���/� �� ������X����v����P��5�9a����Q�D4+��u�ߊZL�sgW�˶w����;�c�J-:��g�ϸ\�����ҫ��;�^���Z�[!��TJԚ'a:�{V�@>;PD7��کx�dξ��w�u��|7�M��k�����9 R+��"�L���vSE��L�x��i< ��Z�S��.L�0�>�d"8�w�q��*��c��J'k��N�ou��\��R�������fG��6���\�/;�j��\[���1q3���~�_r�j�{�ƙi�0ą?�l=�ٿ��些T�@�H�Ee&�3��b{�J��)� +��_j�҅iys�~��=��ǠN��!�;eq�\i l��X]�T'V��,kAX�G�?g3��ݮ�dKU�����]������4��~�.P���ڰ)*{�z�m����f�ۼ�JS�f��<!�F#8�̟q�� +쾶����G?ȶ�Y�FEqu�$w�u�P�� �3��Y���L��x6�����D���^/^n�W��\n�wpb��E9�*uu�)��z�^��FC,�?H]���z���k�Y�Y��ҟq(�����'�枾�ZV��K Rw�$�}���>w�N_*��\���e {wEd闉ϻ��.S#��:��o��G�i���C�����~'�kc*]{yc�F��Z�\Xt�_N�j&�(g���wu�=��&�ڄ�Q]u��.��-f�kw�w���_���#����}��3�/t?����ht�ۃj]VV����q7X8�5����A��a�9g�j�gO��cv/����?=�tܤ+%�����m�T(k��U�e�,-���]OF/���z�G��,��݃�灦��+5"a�(���vh�*p?�fz��;9�m�\�jκ�j�֮UF�n�<m6z��ޝ���P,g��R��.H#�T����gh� +��"$��U�b��|��l��I�4'P�P#���|�Y4} ���*�7�� v����j��SG���e�T�c�Z�;��x���b9�{�!�ͯ�Y"�$jUR�u��������~���ANX��yK������)���M�5�s�e�&@��Б�9`�An� �Cx��W��P@�� ����5�8��#2B�q�T�@�� �H�p6/���,��h�;i���Q��"�{�ߚ;|�s. 0f����-+�z�1E�u�e����W�QW�3&�<hk�6xD��Ж)@W�5���ܻi<I����%��AmB���;Z�q���W"�a+(�,�`(K�m��BF�!��uXe���5��9���Ԛ�T�ˏ-h+���m���B�q ����v(���^A2�[�0�T_��S��&�>ޙ�#~�_�s5(J�:@[�f7�w�xe&s]h{�,��*�J!P4,�@nIA͞�B����|��V0��V���_���^�֓3E[Q#w2�R��]' ��G��������)��^��U�%����2����_�{�W�`&+C��ԭ��-��{���*P�s�P9I^�K�yM���ޕ�kP��Y||�^�(��ޝ1��WגKp6�N��qӹN���&� �R� ���]g=@S + ���]�O���Е����z�����y�P�3Z��¶��d���_��괋EwB�E����o!����?���K�����(��!59������ֱđ`��[���#�!�B7�> ����~��|���ad���t[̳�C����f�z��-�G�����пo����}K��lh�f�{+� �v5��Uw*y�v;��}l�^���-��o��Q�e�0�vH��-� �)5$��\�_���/��� ��T9���V�N�����w��K����[_�:\x�T��n��_/;6}-�n��S���^�d�܍�]�[�ܤ~Koo����}��w� �q�{>��Xk�C� +H��I��6%rD<h�[ �ʥL������܊��t ��rV����d��M��c�^�}nJ������]$�������c�M�&�@��o{�j� �|p�Q)�r/MA���/s�g��I��K鶊������f�*��Yu���m�C�&J��M>�����I�lw��ܻy ��ɋB�~l͖E�$��A{�U����iUֳK��[��/&�c�{����#�}����(��X�^B�'�<" q�y�n� zi! +� �]������P�9��b9;q��af�DE����1���3�X�0�\�b��_��zMs�y%��0�?ȯ�?��g��Ŧ�)�J ?��/'Zn��>D���N� �KO2�����8�<��]�w�����h��5Bn[]�H���{d˷�v��� �26�3�<�����+~XU#kYV��nA�v��������4�\�}�0�=��e�SX(�y�Xo��+�vA�u8]��]pt��ǁc����23N���M �f�*��b��pL����HWw^[ +�RUW�Q��e��w��ʸg�K;���h�����rP���a�D��� +(4��3Жj�L.z�z5�־�z>�%�# +��_X䴱��J��1�Bts�����*�5\k��Nw�M�L��2,�^��y��V�<<.�>&�d���r�~����l�%�!��T�`��P�N�ʏ��\��^�He{+��~g'>z�ճ�ؘ� +���2I��#���5?<��1��MZ�����wuY�X����i�\�3!� !����`D[�S�.6���V����I�N��;�������g+�swa��3{�i��{I +7sϊ�%�~���"�0B*�tU��Y��J�5�˫�@� �|� +���h����̓���P2�z* 2���4��S�n�D���y�6��{ezܗ{�^�i8s�Wkg�\�-jW��w�ղc%���rBn3ҹV�D���B�a��I�dfଲ3���g)px�R�zf�TZi����,���+qP������P�_��0?<���ѻ�J}����|����>>-�U_�u�F�ZG&oJ��ݗ�'�%��|�Z����$�TЭ���R�G�� 7>-W6�_ �n|~��]Iqn����OZ��� �8OP�_�$�%�>��۷sm�\���օs6�ae��vs�Goq'O�f�yy(T}�i�n���v�N�P��C5S�p��`�Y�?�OJ��v�?ȴT3R�9���g�z�����{����@~�@!�U���� +yP�RC�x$3��N�c�?�E#�q��n��j��� +��t �������h�ט7�����:�t������Ǎ�q6���=���g�B�Ϥ:�ߓ�`���{�+yp=� o}�(V��wZ��`�������: )��]�m$���6��Zɱ[���X����{���K�αL���U4>����M�.�����V�S\i;L��k��3�Q�ʀQo�~���q�����U9|������A.�Y��w/�S��=�(�Ҭ�l>��fʲP" qE��Ew/�g�����Q�6[�}���h���!�4��)��c����Qf �N~��X��Y��~Ry���cP�I_Aa˧�����x���u/y�c�;��͕�:2�-=pf�S���E|�gm����j�\!o���t�4ֺ�`��d��;���P&a�Vk0��tĔ��R���^��# ����������&HZ]'�lz�u$�9�P6�.]��ִ���G��}F]j��Gi9�o�X��{_���vZ�XΘ*C�����=ড়:�#�;-��Z�Ak��B6Ԯ��Dݦ&�ݻ����x�{���ڠ@������q�h�^>�5�#|��cMc��ʹr�o��L�WC�UR�@��l�.���_N���>�n��֮��so��L�o��6�n��Ԩ5�v�gQ�/�{����y��x����9����G<�fMa/���g�� +ʶ��n���iY>JEak�ڳ�:=��A���2��������>����~�Y$�j�7�6�F���F�/��N�W��n6�h;�ֆIa�=�f������b��Gjz(�u�I#�ظdmv�p;Q�����@n��G�r�Yl��gn�dmwǣa?x�t�/��5Z�V'�Sw��T�b}`��eH�wz�ٞ�g�6^ͮ[�ݏ[��D[䍮6�b��[\�61��;r�ݒ1�T�Ywr���������LI��pᄵ4M)$���ձM����g��3�<��sv�����2�ɾ�$ɭ�'I��+h� ����[a�e,���`6�4�ֽ�4�b\�-���b��m�1N���jtK�~���Ч��L�����\Hh�)�°1¬K�3�o�B�H��Ѩ��t ��Rv� tvtAk{�l�'�C��g�f&:�����g������3ɵ��j��&qD~WC���$�iE���BdزԲ[���X2f%�?��it�dz I1Ry��*�b��-j�Î�����6_#��E+5kJ�Cj� ���Nb$=� 5:ODUs�JW3��8�]5�I%k:���-�)�,�[�6��I��N%�8�-��3��|tk=��E�?���z�dr��L.������o�����M_/b�_��R�wrQ���>���������J��^����U:��S���Q)�9���,��_��Z��p/�P1�vs3O�slto��q�ˬ��V�=O����> +[��h̶�*��F3]�C/���ݪ��V���Fx�2���ٓ���R-���S��>�����+v�囤������n�!b|�|g}�JO�I�Msx�/U��ڜ�3����"j7}U�+��v�A��œ��0��,�e<Z%����M+����1�I���o!;���������"�IR-��-��>��I'@<^9*ށ�����T���k8��������p�g��H�W���=�}$���@VnY � +G����2��@��� �,�&�,�����\��0�=���`&�?� r�� +�u[(���-zPtخ� ����N�����Ԍ�(t�נ�HΛB�7�䠨ÿ%{`l�,� �d��ĩ��B��!����e|�d�G���w�FN��jr��C�|w��n����Q{����c�m��#�}�O��'@�"Uw=�# LZ_C�\��z?�fHAu� +5���k\���yFR2땥�>�.���;����1R,,�������h���i��O��� :@;E� ���"�8��0��>@����Ȉ�Beaq���J��Q�k�Y�'�8��S���%�H��;�+�D�Oo����o�c�9l���P�Z�s��>)��`�����Б���H��ޚ Ǽ �/�S�k�/�0���y{y���x��-��(W� +�7�ѣub��-��?)O�k ُNQ�2�@B���$�P�60[��o�Ƃ��J���E������1Ù���T�5�G��?��M�'U�}DUcqm�Qx7�ђ���Ƚ�uRB�k^l�������an���ft��spr��o�O��(j��0�� �'pW�A\%��)�x����,�E�{ډ�-�5%߉�T�h���_�Q�w��is���.�_�-�1%�O�M閟:�E��S[O ��|���cD��k� ?�_���k��m1�3��R��z�k���"�>/\rM�����W�A�~O��R�ݢ�`d%=*Ʒ�i�o��Z� �R��/R~�W�u=iy$s�V��j��"��sm�}���T��4�&�Z�w������_�������ykV������=3F�d��|�R���S)]�Q�8�a�Φ�;�Ju♻������Ͷ���5��gPU���[p6ޑ��a�[���F�M��L�C&M� �n����k�Җq����LY�8+�}^�_����sn�f���Ƴ��q��X��۫5v�E��^i0t�j�wjT�W��c%-�e�i�0�V��E=��!b�\� +�O����+'?�e�P`�$w0��:��/{���I�t+�;����m^V�p��7Bv���m<ws��v+��:u���[�jQ�w�Ƕ�g߰�'od/m;.[� �#����� +�ĵ��FU�&"���Ԝ��ӂ��rH�\z��8������>Jf��o��F��O鞾=�p��f�[Kk����� +���k��1D{��8*U6�>�^���@�! A�L֖&���TLY� ���ޫ|f��|ҿ@��`N�e��Y=�ˡ�g�1��T>�İ>�ը w2�e��@K� ���(� {K����S�o�J�9g�����.�}B[�;Um�;�SM +��ћ�����,��}Z�6)y������E_��ph�HQz}�CKq'�w��w|a��`~�{{���KJ(;��ѭ��f��춄���ה��Ҥk��(/�ʮ>m=#��)�e���䉘,d���c������[��J@����oP��xɀ�Kj����U1b������ʨ���{(h��]M��Ø+��͖��ֺB�;M��G���}%E���ٔ��~���$]/}�#��'Hx���M$T?�kq7�pD^��N�[�����C��� ���U.�ɇ�ܒA�����]�<�������6o:s^�r�V]Ws���T�k)�X ���ݤ�Tpqa�S��q�b%�k�8:���;�Z8�Q[H?�"�-`S� ��^��wU�A~��5���w�zo;�d���a^I�rN3�5�M �.,���Yj�c�*��]!ۑ%���N*6��x��B�`�y|rp6�-�+�U�2|�֬}��L!��1�� ~��y�1��py;�3Ȅ\�L]5|����� �b�E�c�e��� �7�����j5��u�S�x3��P[��9|�fۇ��q����&��{�%��K֘�J�;�Nݐ=lN߳��� �- w�+(�K�h��ϠD���\��^��L�qg\�l�kn��U]��l�����̳#8V���X wf�ח�~�I���n��Y��~O�X�ܸUsR�f8��a"���6��iQ����P���o�� ���1�۪պ��:w�K��rh��ɵQ݈R����2PnIf��k��\�ڜ�*[ޑl��"�qz������?�˝ڨ-;�Q{i8#�N�Gч +Ǎ*���q" <��Us�'Juu����8gѪ����M8)�������˔�xF��L��[r��X�L^hIYa�P�wi�#,՜.������/#��G�����hy�.�����1>�b8�&��~����l������>����3SG�NEM�����D�fw�~MRKa��jZOw%�_�y1����?��EX���Y�V��z�\s������s����G�I���4�c��"�{��G�{��|�����y�a�t6��ł���)�y3���븭d���QNAc�(ȹ%$�=�O�C~Zٲ��f��`��W]mhs0�>����<��0�O@� ���wiq�^��0�ѷ1�E��[�qS^s��V��'B��k�s�v��&4�ڊ+�֟�.Pv������q���W��y������xF2͎��r1�=���^�/]f��>]�_ݕ��T��)*~ UJ�����g�������@�Ǻ�`j����G{�;��yhzMn��z�\ԍ:"��"oƢ���s�]��U,iO��7b���`�Ta^�gÞ�+.Jk:���nT�]�g���[}��}�T���j���K'M��N�,�����?t�鶪:Ӷ�`���w���*� 6�-* +vH�����3���5��s�S�M�J��"d�P����&�u�}����0�7KUCi�g��Q�mo4˖.�&?I�|������"�V�N��v�`���cz�sfk4c���a���%���������ģ����ѹ��Ѥ!d�?q �3���ksccl�ݗ������_���� ~�02��{_�k2��.����Y� %�-�+���p4?��v�&ge��<4�M<��w:�-��>7�Z��说L#�}��S�l5���U�|�9/�~���B��o�G��Ė^ZLFq�Fʳ�q&��h^l3����T��Y�o���%EJ~u�2��uε�i�kaC��� �A6�w>��+c6{t�k(-�X�^ʥ :�uz<#T�ħ�2���\���]�nm��zq����v����&��3/j��QQJ�ɤ7�3�S�l�}vt�R�ٞj��� Ʀ�I��9t����a��rGlxI��EiJO����ϵ��J�s���2�#������Y9T�{�O����_��)i��0��� �g�*�S��[BG��\z,Bw�.����L�����[��T�gk��?��A�ڙ��G�Z���L��|5�0�*��O*ns�V�]t*�Y".�!U�Y�F���% +$�o�>Y�e0�v�vB�b��r��B��c&͆��:��^��~C�K+fݫ�-��F`���ޜ��r֞�ᣚ줤�ed�"x�[�;�J;�K��x�f��at��)�P5̇��;?����� &���5���ki��B���1zq7���O�o��ܹɬe�m�Y�Q|\E��pz5���Յ�U\�6��a�*�WjQ���4?�B�DN�R���8rf�Nd��^9k�k.�\n�,���qf1���fvJ�!�O�@�����°��sɢ�1k�B4�L�C�h���U�R��z�,���w\��z1�ڷ +�ό͏�)��m&b�N{Y{0T3�?�>�jQBm�kks ��~#zm�ѡ�LzR�O|�]��Pe����� 0����VyA���O`�b�tk���/�����Д������H��rj� ���đu� 1�!�E�l2 ��96Y�L�� &�7��g�����P� eZ(��LG�2����.�8��>���p`^s�\��9C���c��h�Y(�5Zu(��h�4��!�;�"�@�S��m1�(�ۯ�5�Ƈ���Q�i<�S�� P����A�FF�_Y0��|n}�>z��;Pk�����_���hX$��+�qYX��w���~��h[ZB�}�ҥ£ю*���܈�ә���W���-B{l���o���}����k}pi=��yD��������� �g�5���`Z��M�g����$+�J��c3�r�&����+���^�e��v�Y +��cR���}Zfn3�Ҍ:�b5B�@�������8��|����g �*�5�����M|(t�s�]�<ͧ��rɶh� �3ؗ�����t��Nj3���e���y>6Ώ�b��Ss���6���}���V(�?��0�?X0������ +�����Nq ��%dM& � ��> ll +�Ry��j��k����铐q1�,>Gҳ���؇�������Ln/���Hw}��W��%x�-&ŋ_M�S��O��^�߫Z��$���xpL����3"��0���'#@F>�+�����d�lX��q�<��vx�b�~:��-�Q��.S��s�+�ݙh�C��B�� �!��ˀ=���.��}�s���O�6+�]���f<�9�s�o�c~�V2`������PD��!����d�H�xԻ����`y�δ��[j��&#��ݥ��O��Wk%=���ι�u4�CR��8�����w�Vz'�����q�Ixϱ�xvU��ҟ�/�,���@�@�� ���]�{|��M�WK�Σ��7^G�\�faV��p0<��2:گ��8���ݙ���U��ŜP��D��Q���U���F'����6x�̦�z�Řp�FuP�Z����^F�L�U�d����a}�}s��#�Q}��N� +�Vb� +�ɩ�|[���~Ǥv{�]�d���l�{Y��eju��J�z�iy�l(��;��7���.Z6��h,�EFl}f�j����ԯ���$�=@��e*� �ĉ�L�g�Ɗ0<�V�c�h�'�T�;rݫ�w_�p�?w�V�q�My6�G�;z�{� h�.jGx��H���x�.z��6Wf3;��۬t�>v�5K�Չ��������?�v^�B?OP��d���4N�_�r� ${����m�>q�<�o*��peݦ��2��ˍ��W���Ȳ�Ǽ��?���Qv��U����t�-���L!��3����ix�t� ��9���z/@�9K����٬E�uWh|.��CO��e|�x�� +2ή��V��Y��������8���\�و}�(�C��������7���t��2V�=��lR�O������f�u<(��.Gb���,80A�U����N�"���z�M"�@wAJ+lj�\-�w!�\�\���j0��l̄S�^+s�9i������' ,�'���c_/W���<i������b�Gfx����F�w �H�=�:4���l&xU���m=n\� O����gh,��\���|�U�.5m.��?�XɾK��e�hʵ���\�K���z|(w�� C�O +�yA7R�i;^��L9iOɼ@�� �n�"�p���\��W��^Y\{��?Ouzwؘ�e�'���vB�C�Ta�Ǎ��b��Q�����S�!^f�IFh[���-����M�?k����&�R�Ũ\vm_�r��|�|���t� �8���� ��*zi�d?;D���:-�k��2�㶖�?V\�@����]�$ =��c�K���*�:��䱪4�Q �'�][ʹ�3���%�&?4�����4�n��W��������i���Pk���+�+�ΏT���D������>�֯B!�Ј/�۔��~�Z4���FzM����X����UJ��i�kLo`�K�*�`c���~�_����9��S�pҨ f1=���H����b�,s\?-�Y��EQ?��u�W��O�n��d�j��g�O�y�aP{V����V6z�V}�c;��˂�l���yE�b�d@� ��Ճ�|ɮ�r��|K�=W�&WV�x�?�4�1�}��\f%�7@cG�І�S�F�0X��i�D��Lz�}Q���I��xx�9.��>��i+�b c?X~��V��O��%уSݮ%*�����۰��K���+�.�Ob3c�ݹ��@<��\�/��s�1�k!v����{X�B��::fS��as���)h�[��UW||���ws�`G��q���IAW���k_���F��c��3,��37I[��~�����Zv�w��/�.��#)�9�#������~������7���@�ڶ/aa��r��gפ�5�[~��X2ܑ{��X�՛c'!����c�����y�s�ʃ�nT�_8#O��+�{��]v[�p'f��*��ޭ~�3�o=�}l6����l`$>��.���mHS���@l�������G̚�*-w_ƅe)|j�YŜY����N;����9N��X�@������V���������Y�'l�������V?� w��B�<�P��rM���&{���\���r���d��j�I㈶����i������]����b�9{D�����xV!O��/�U�]�Aިa�jϡ${˖��Н�d��b���u�����7��f�M�������`�G$g�J��T��5lj��F^��q�V6����P\�.q�~o6eG�m�#�NKuLj��諭J��s�"���~$f�"�ލ�u�RR揧]�=�n�Ql���*^k)�/�ԁH5=�Poz�c4���k +a����i~Cx��部�ŭ�&%oM�s˒���w�AM�����X}d+�.��H9Xp�׃�lӽHtk�W9�&�,�x���A�}f�63�.�sXOZH��5� +4��q�!O�tC����wVu1<��q�W���Sڝ��0+�U�,�풜1$�M�p��M�%���4�I7�B����7C��hT?v���ʟ�YҞ�(W*�+L�������Ǎ>�;?X�(σ���R���D��'oB��`E�z�Kc�+�Lɯ紘u�)>�/dJ���ؤpDG'.6���Owv�S��uW\]�z���P�f��.�u>?Y�X�ޞS��dTl�+��8�+�d�a�����(l���b����R�v�[Ú��5Z\��'�~kG��_�<�vΥSl�Ԕ���om���A�)yq�+Zיn�ou=��m�u7��{t�<۷6���ܷ���8��F�de��(ӓ��Ԧ��T���I��Լ +�{Qeie�J�{lB�OWR���x�������ϟ�����k������~���t�g���<�~�Q�c.�ʬoҒ�ɬ�}��Ft��J�s� MzԬq�]MR���� +/[���v��x�`%y��J����j)��Z1g�:�b����=�pX<6��C�k2��bw<;�Sk?��~�=È�D�Vy2RC�J����t=�0k-�4�r���8�|S^�~�:�R��>����B�|f�g�����w�U��n~�͙�v��玟\=�������,a���W��i��.�W�no�o��a?�apE4�� S�J�69�ZM6����Vy�+li7����b.���5�\Uˇ^u������SU7k+�>�����o�5@��o��C�g����d��7Q�aRNA�� +��������6s�<���g��?�*GI9->�ݸ�.*��ĒD��\Ȝ)��Y��2�i^�pE�F U�A���6��,��>s ?�W�'�y��`�V +!���{i��� ���u�l�,@��.@-O����[k��� �����ۖ�ߧk����t�� �C +�C��P,@��kN �k�\�!�>@�� ����t'�Ut$�6ž�_�������w�?� �AyC���0$3�з��q+Й��t���Lr�1 +r���qW1T}K��� �2@:ߺ>�l�t1B�DDO�3YK��Be��������$��2:5`W���Ӥ�Z�l ���q��P/� J`�������m������sz䎠4��\�p�x�.@V b2K�"�v��#>h�w�K���Թ�,���#4���63����� +�Z5nD�9 `o{p +9B>����3��0�ư�������#� +P��(W!�Z��������IL�bZ{�ƅi�L��g��n���L�w���ui�ߞ�~��r��0��6�-bM��U�by��N�4�o��l��N\~�ɵv��)6��P�H$ٿ���^�� ���0���<��s�"�Ҧ"="I?��ɻ���|N6��l����F������D�G����j(�=�BT���Q�x�h��ov������2�w]>�e4�5�p;����W�=jZ����}"s{����Ԯ ���6����T8 7aѿ�����r�`8�}~��D7�q:���w!z�8/P�~߆�X��<,o���2��q��/�c��� =̖9��iqv���5����K�u)�n2Jq���L�p�5��>%!�����H���Ջ����������A}���c��_���Z��R�Uz�8���b�����t�W����{Q��@��zX$G�2��rvQfu֢�����D����2W��uv���)�:����8�� cG!�f��˦�^]ף���!z�� ~�&(s����}�p0d��ږ`�V�2p\O4$n�^�E�Ʊ~9ƍ���8ɧ��Va����,|d�X�Ŵ}���eG���6�*����P���֣cUZ���k��;��������rZv���o�X�A�q��'Qa��O7��4�=���qs �Q�=�h6j��ڡ=[�|�uw�>1�����8�臙�㉻�]���������,��˥���6�庯�����-����8�g��Y����8����^��^QT��z�ǧBp�Σs�K��sT�Džƣ~w����u��-x���Z�����{��e�.����2��A;�͒`��Eϔ�?����y�g�;�����ꨶ��[v?���v:C����p1j�T�jŨ5��~yx����* ��e荡{��ꋇ��s%|S�&��u ��;r7mɝ�6C����Ϗ�ژ矋Ŭ��z�Oִ��Ӹw'����2�-dl� �3S{cktj2�J}��o�kQ��m��֊ A)/_g����M� O��=����8vܩ�౾��|0�����xu10�1�хY9��vm�jVc�SF�/̥{��& + �C|&�0,M�����p1��?�qVN�щ +����&�����_��1�LfO��{݊�u�pu���}�s�o��VLCx�����=+G��-��$W�i;�L��'��װg�m��6 kBYg��ˇl�F���R;e�#ē��su +1v�+��������|������: ���g�������L��6ݎ��^���*�Dz�o��yt��{���l+*N�̄6�y�1p�}��F��j4���\����N�f�*�֬e��>j��/���{�/�!ԡP����q5^�uvv��nóI��#����<�36�������w��- +��kV̴�dnzU5c�s���M2�=����,��j�Ne�&l�SYwpV���R���*ȸ�Cxs���~�!�L*}����v_^o��p;܉#K.��� ��*�]|[�,���<3F5/����e� �1>��hH��C�4�z�U�����z+HpX�� G��3�I��)��^j�בlu����A��dŒ��/#��8-�G�>m[��7ho����v��<\��e�����DS$�� ���'6��ʺ���fQ��>��F"\Mi@�=�����rr��O�ʲ~5��~KO!��|���������o�� �G�mv�4���V�3�n};�)f���$�����/������L>���> +�dT���n�yBc$��)��]l�J�߷[���/)r'Li�����3#q� 9q�W$��L��-Ր����۰?O��#�|b�Z�Ƚ^��+ŷ���[�j�]�[T�ݣ�e-�����q���hT�RO�nM?�K�J��eT�W��yZ�,��d�=Ѣ������܂{eǡb��dB���Fδ�,W�o��h�~!-����pX7+�ݹ7Sg\X�'ղ3���jl�6s*SLp\h/��ُ& !�g�讥�R���O�ؘDO��9��U��92��g)v�� +��f.t�R�oc�Ǝ�bE��B����������߄pZ=����O}�ܶ�V�+�@)�*���fV�5��8]m��}���u�[�s*P=���X~�U�ˑ!�Ҵ��|���M��F�O~w�h|&����!zl���t;���PZ;�bͶ�ɿ.�8�S��WGrW*Ԛ� �s冊,�h���d!�g��`\ (SO:cG]=���?��~���3I��Ku� :��>/H��e��.��\ZZ�d�l�6�?[��[C��a��V_���*���"X豘&��꤇ydYTRd�`�Ɍ2Ƒ5��������V�V98D�U/�1�\GqAk�.Ѡ�k)�?P�l[��*�ș�,�ʌ�ܛ-�vo[���b˟~��X�7�`�(�y�μ���Z�Vin�,O7�3���d*e��d���QJ��2ٱ�4zu���&�d!�Tr-������P����?.�a\�ޙs���^���G����)حMm�^M��5�[��X�#�! +�7�kz7����f����gNG�d���'���?��v1�Va�T�W��є ?Ӟ*~R���2���� ���v9�\�ڝJ�Ƌ�Zo�k�m�hv�%�!#ܤU}@V�u_�?X�[��Y�j�'������7�\ +u�W�3����%�ޏ��ڽ�j)�w돝���aNZ����V�n�7'����i{�t\����l����a�-An���P�4zR�V?��N=�;�h}Hyt��>���t)S��BO��ƍ��~�]�\B�Uj�^����r篻Q e�1�>+�z��O���t٦;Y�U�/ҋi���5�ӈy[�ͤ�U��Mr>����j�ѧ/ðZ� _3�����l��%3���cjU��� �W^��� ��b�^�������P��h8�vP��z�����-F��M��Jl`��1 +�B��P -<�����`�P�Ѽ��+:���tUp�NUm?�V@=רp��TI1�iY8�|�W���Y��f�_F���78Y��؉Fލ#Ç�����F9]RrVmc_YsL�y�m~@2!���G��P�v���K�F9�6�Г�Kh�*o��V�W�/��AT��Χ$a���z1�ȅ��a4I:�d��_n�f�⥺�af= +0~1{0����I9������-�{f�9�Ѵs�jQ�F�ʼn���i��֚�g��a�" �X�]�������\r�t.\�C/��K�C�9�'���qQ��m�Z& O��bR2\���)Q7��4<*����fc��g�Y������I����y�l�Qk�ȫ�ɧ���X�T�0�d�\*�C�)�(C�L�ie�A��I����J�B ��A���C���H얙�k�U��~X�6��Ƶf���r\,���.Q3Cl�tM��Յ��*�1ޕv#o_T�ꡠ3� ?�a�N���V� +�%��O�� +��S$��cl +?8�����b�a%2�Gǃ��Vs� r;c!b����G�o�i�.�ҾU������dQ�!���" �z��$ ҏs�������uׄx: -Q[6�iF�C��D�ۄ�`�-��jp��lo@�] L#�����=��~HX(T�Wry5�d��ť��HD���]2٠�{�� +@r-x��3�@��{��7�������s��� �H/�:�~�tS��K.ħ�E�xPٟ��a +�bE�s�O�@����k���)a�f��>�"�h˽��8@�uxCθ��N����`}s�y��ܾ����`��B�3أ���������:#u��L�����c4k��v�_�X���j%�bW(S�6�9�'��~9���,|��<��JTRh��w"@�� ��b���\�nl�|�M^��!���O�E�T)>��V��Y�#��o,v���9y����\�?_E�|eC#���`W:e�1]X��X����v�<��S* ��z`��{�1�yJ a���<g�xzq������sy����#�` 4�T�G�&f�5���͐��ڕ�5Ud��i�B�S9]v���ғn���w���{��3��B�2�W�{��%����\n���@�5�׀�鸠���r;�{Ԋ��>��-��6k��W0��9v]V��k +�q����H8/�ᆉ�����g��S$��O��c�;̰���ڪ����Z� +�h���~ߗD�7v ̸$�M{�EEFx�ߛ� }}��5=������Y!�*;����9O��P,_�a��:M�J�x���c����o,;�������1�\�H������n�}��f���_�2 �.�o0���=��~����$��u~N�$�ۡ���s�����ˡf�gmA��H��M>�c��%w�'k�o���� +w�{��w�lّZ���.����xN���j�a�=��³���������Y.�����ڀpC�U�N��v�<?�ۻ����^��� +��=ڛ^���2%�O@s�=��<��[�6ն�����6�4��/�t�� �����ᓸ��y�˖b�����\����v#k����o��2E��e�R w��_��ŝm+�h�ޝK��ٝs�|H��^�'�]F���<K��ap���bW��=�h(n�3&.�3�yY���3?-�^,v�Q���a�im<�^esV������7�l�.<�Ӏ��]@�@PE�~<�����x|)^;�1�XK�+�.\6�<��u�6R^��.А��b������R�la�s���`��yس�^[o��J"�D�2�v�����G�i����tG_���� s��%Z��gd�k/=ŏo�4a��;��s����˭DgSQ�ê�k��S}<����,%E$}�����Tu6ģ�qQ���}ߪ���iK9.��%��H�{/�ڱ�����_hb�V��e�y� �Q�e���9Q���A&�OV졃���ʥf^���.һ�������s^�Gi�ڜ��#��O�W�b��4�y�ktȴ2��9!�������q�)�T��2��-uT@ux�ԕ/�� +=� CJ�C�ٻ�ܞ��+}\�r��o��Mt�+�V<3\�&�e�cl灒;�`��dq�I�5}ɴ�0>n�h'?�Zu�ev�m�Q�*����Y�Q����8e�Z��i�쾯=jw��o�>������,��|�a�<)���!y���ۋ(0��<�]�g��}ϟ��[γo��[-���~3���5�>�鱿���ӊ*/�����W��k�6��R�yy�2�"��珦�^t$彛������^$���ѹ�]�Ϝ�Ɓ<tn&��^�9���P�e*8ғT��h:�!ϥ�: kӽE�!J�˄z��ð�C�[e�՞y���� +�|]V��V��z�#����k5�w����<��_@��5w�,ڥsu��4;�����m/@���Wu�C�[��kv�k��4��]C�ov?��H#}��Ն�О��GM6U\�8����Dc�O�N_>Շ�C�t{� ~���a ���*}!��%�hCh�[o�ݱ��W�S0_FK�N[�Ȇ^L1��t�吭��n�v���S>�L �v_��oi5*�{��9�6��7�� �"� o Z�\?S��~����yY���i�Bi�� +�Xor#Q +��t�܂��KS����� �t�K�sD��ܺ��j�2�K�X�[�_��1^�~����&���t^ڣ�����4f.�t� +�}���-��S�CRԲ4�TF���^7������YF�B$L7��p��6�/:�P�z�'�\0)_z~��0�L�宯�d�D+b^]�*�↰������Gcr8աW�T?c��'��?�K�s?��o���h�⃪�/���Ɏ�i�S��F��mQ���v�N�;�v��+� qՈ�0�8.G4�g�.��!���8z8����O�t�f +Ta�����muFQ���q�=�R��L+�;�6���vGy�Dw�q���ҝw��v��4�� X@vx���d�x��<yPh^����A������F�����ī��z8{^�����b�>0��k�3�{�6.����'=-a�"aδ�e�4 W��E�k���y��r�G��S�S������W�W\o�8kU9->�v��?؟�/���=����v��s=tv~,�v��|�v����">����:/Z:`: +�]������[RC[;p��S⦛z�O��D�|���������I��1�nYe���c��>Řo�ʘW� ��w����.v��?]���8//�A�:� +N0�ŏ?��]8�M@O\�R�<S�7�YC����I�ct��9��� �]P\���ث���z)�^��`-&l+��8r�Nm�n:9��t�5�\>w�o8��0�OW��z���}n��W��I`��C���5/�^U�) pM�/���֥�����:�$ +��9��n�.�K�Z����d�J5?',��Z��� � 1�.�#I��,�w����J7��#8��qLSE�����'��s1� +����'C���ø�Z�d�q������6�E'ϖ�?���ëG��.˽!WS�cR�e�A�o��|���K1��~�����Q��qN�v�I�bX��o +�������jyHV�{>^�v�j�.���#>��4U�hXNu�촐��h%�W�������xPnW�k���v�IEi}�⤅�f7�� Fr��C��9#���^���U�Z�*��U��ڵV��Ū�U��ڿ��8{gv�=�������X�jc��/�c.�qw.(;�nG�zծ&T�r� )��8�iSB���Ls3���!�����<�t9���&�{���;Rm�J���҅ +�B��8�+Ly�)�A��B��/~��ݍt|̍�;�����8*�{ͻ�W���8��%4 �!����9�l�enߔ��8 w��f +u�Z�ӣg���DN��{Q���vV�+�f�*l��ned%dKk-dKxTQK8xo�;�wB�T��vBb�¢��Fo�I�k���t_���y�W��'�|כ��p�P�ܶ�?���D;����t5�<����Reٻ7����.�/ ��^F/i1[��:��B����ã�˗Հ��r�fw��$�]������Q.�j�r�/XJ&�c���mj3�& ���М������\2j�X���~�Rq,� �e�h��x������-��v���t>���|e6���r��s�I&��������Jȧ�ߪU�[���";pH�c^�Ͽ���4�ҿt�B7�Ӟ���\+��s�9�ݫ>��N�o�ͲX�oK�m�/��aP(��Q~��9Sl��v���$'�pE���j�0�zZ)���� z�,��RqExϱ`� � ��j����X)�J��_���Vɂ�+-Lc.���b�W0��Wα�J��t���5̇ˁ���x+��U��s���眸r V$�t7D���}ĕ�:Ă�����8b�q>m��zj1-uR\��`)�I� F��;ŵ��_�i$ Az�@���@���Aڔ� �l; �!� ]��zyG�ڥb�Z� ���1�_@jR�A�/��q�C|� 5��g���R +_���AJ� �П�6�d��l�3;�������/|3�tH@y�i�B ��&@Ri �������*8�t�@�[ãH���@�Td� ���keR~7��?����:���S��k3ǔx�b�8�/XOU�N���·�y����6�P���@FV��g���қ}�����I�. }R� �:�a���颩@H��9H3�D��1����I�E���b�q�Sn�{�|x��W�}��]�^�d��h���o8*�P�ł���+�m~��ͥ +P<����Y*W���i�Щ@r\ �)%ݖ��` ��K����8��o�v�qoO���bڦ�ټ�Y\��J��՜����������������w +#-��6�U��cօ�C��9@�����P�^�U\xQa\�s�{��cw�Y\���8��<*Sbv7ऻ�����d���t��vM�#re��j����CQ�PF�<���xǛ�)���d�� +�P�w���66����1��}8�`�~��D�H���;�-��:Y�����u��5��J���+\/'$ҝ�e���r߿�J��?�a�u4� ��b��0���'�ۻ����b�m)��PX�a�^.��g� � +�X��W�r��^�4�.���=���U�pُs�K�c~�s~����&�M=�[��X_>g����u3���{4Uى��o{��`sl|����[�Y�W��c��\���ER ��px����I������ofW�,��|����D��lƧ����80c��/�^�OcKfߑ��n�.�;�}fcm3���ۨB=\����jb� o:�w��M��l $�iG��N���-:!3�thh� a�{坞v�UO���K�������,�M0��.��]�~������ߜ�yvS���(k5W�^���Y���:���l缹��I���t/w�W���&�`���;��F���ҡ��ނ�㞜�����_T���bpH-K�=!o�[e��lJyZW��uE{ۗg�v0zu�7�r>���Y_��[bO[^ȭ�h�/��|�˗YH�r��v��x���-�nr����`�7 �V?�z��[q3�WAj�7�@�/�~�r|�z �aןO��DNVw�_z�����u�[�2]����/sBP��$ +HV̂������g�xϟ�t�r8)�j�l��4�.I|bg<�<�kG;%�f; S�9�qA�#���مz�P �FG�����a�#�~��z�7�/R0�Bi�w�iI�"���?�#�����~i����A�� �x�˲��KTEo��4��>:v(���~���ڍ��<�.��-�ø�꽩%��~�;����t�K�3�[�Y�k3�,!�J�2��~�z�_�K +�m(-����+q���]��슟���?;�����֝�[&#k��+M�aځl�n��1��i�@��N7'�,��x�T����4/ѵ�;e0�R�6�,�An�������D�����[H&|j>�ܨv>��<��c�9��0X�����.��E��_���>e���7��s�X`s]�Wm��Z����l�8j�T��,'�4�*E�ѓ�q@�z����b�im�ύ���̫55gm�K����Q����U;��:��7B�-�����9�����y�*ZuX�ҳ$��2%����ѧ��l�UztX���f|��("�d�ӹJ�S1�-P��j���.u��!W+z��������U�����%[����iѠ�ii4/<*>h����~ �WxZw�\�t�^�N�|ٮ���q��`��4OC8����U抸��b~<IU�a�ciw�Z��\���+ܩ���IRb��mX�v�?�-_�f0v���h�!�&�g��+gGe���V�[�F^G��ae�����>@>h��Ama�����(L-�_㙰P8�U���ռj����.�+���;~��c���?���4�0���L��������2M�Xf��f�K��Ρi��<�����n��uڜ,��#ru�̉����WK����K}�\vԉ�@��r:Z�J�B��^H������@ _�\��I)�pak�4a��wq2+T���dB���Sg�C4��,8�*�֗�~��(��e%br�s���%����{���=?o\�Kl�f>�w1��ITR7 +�wXi�".��"=M�>',��įG-�c_O�����H��X��X�7���Mz��1�6�e���z�J^^�K�HK�~������s��ì+O���Z}���>�T��;��˹9�����v��L��+!�`��'.rU�3�OhN���߶�~�\L��P�B��dr@ɂ3�k���cd�MsdA#�$y�_�xD�x�T������c���]h���U�̅=��x���?�l|.I�4�������qn�(V\xFaN�.��yO=�m ���.$(�b0�����*��2��Qu�F�٭e���x�M�(�뷣���GΡ���E������{�pT"�����[� +��� �4`�%,1�n��� �"m��*E{&I����U�4����N;���Xo���%��I ����Q���!*�W�i�/���>.ݸ�s\ܘ}�w�������F]���V%3�������O�kԌ���)p:��c���� e",��}���%��fK�>��`p�ǔ����ぱ\�c�%?��Sh`�K��1��8]��#�z���ֹ�W|�����Y/F-֙O��&/FoMtgwoZ�G��O����\b�c���@z���h�#��N�ѡ՛��^[��f��+����c� �yt$(-4Wx���4��-ݑ��YB�\��_�qB�f�M�ڟ�^{t�O54�S���b�RT��N�[G��jp�'�f�[1�JhB{b��ЭFB�e��mMl���4v���n� ^6�R��>JXH���7O��g�*ч��އ�� � + �]uk�vQ��!���*��O.k���47:8g������Yfܩ|�1�9�)�t����=�I�x%���Cԟa��y��,q&يt����т�А�k����������ZO���ԞtK�^Kij��j���Y�������dE��]���?m��l���)!3�@��'d��)��O�)$y��2~���b��c�|�FW��lld�@���W_����r������C�r�3�Ŵ�t�+��A-�A.�j��ڕ?���y�O�v�eC +T~�/ec25�_�̽vi������h<L"�|����[�A���R��@�E.��%e�_�-�EU��l�&���d��ks�c<����b���{� ��Z64��,��9�߭B�Sj���bTOƫ�TVJ�:�R�lσ����"s��m��: ��ڤ��Yo�>{�ޮ}�.��{-l +kr�t0(�m�Zc��=���j��[�r�5�~ll�:��B�Qc|�Qc7a�p/?�"����u��0Ӌ��F��Ro�� V��9��$qt99�`]���ݻ�gc�ڞ������[~� [�����,�mV�X��/��F}nu��yXo� S�g�{��WU.�U$o+��+ö/V�k����z3�}e<���,���~@6Vx��{�<� +{n�d�D��'hI��I{�m U�U�����Y�bV��z7+��������\�b>e�}�5!����j#��b��ɥ��J�r-A�\�5Oh�O�ȿ�m����y��_�Kbbs������q6��O!�c +>k5��-p������|. ���.j��#���Y��q!�}]�}��������.>�����-��Xh.�7(t�&=�F^��}�����Z���U�ܠ?��b��_$�m��y�5�D���}KPNn+<j{(�o�U���f%�J#ȓR���oL�x?q%(q����"x\� +(QN��/\6����d;߯�W�A[��V>e����Ș�Hl�G�CF��A-����O +% Z.{e�ߺe�!����I�rs�|bQH>۳�|��:��9c�&�i��1if����|��N>t+�=�e�f��O>c,������d�X�Wy�U4�ѓ-ēIQ� 9��$|���J���\�/do�x��X+t +�)���$��2�nP�$������A�Ȍ.��J��qu�ϣf�q�O/�W)�i<+�b�Q������wI�dL��8��_gA��4��@�S�/�,Pn�9Md��Is��,^�:��٥� �S`6������")����8YV�BB��|I +������y�/��3�O��B��'\�ݢ�ߺ�q�!���w32~ +,�u�/i�Xdan�Y��@��4KiS���(���J�Ks�����*͉��[&��L��^M�z��M��)k�Y����T��F���O���.+]�]ǻ�ܻ��S�D�z��F#��_�q��P*@^�ލ8����d1n�i�g(E��[��KE�H��4���E��J����<>y!�>��;�/gw�ۏm�����]͍��#G�/����`8���Čܑ��rG >o�C�]L�G�;�<ܫ�-��]twwU��_��\���ia��~�@�d|�ˋHJJ�^�;�u�M�������h��v/�F^#)Dy&�\� +Ծ�"|�&v�������T96'�uP��p���6!���3��B"�!�_y�z������"l��ia�(�`�� 7�^��������Q���p��xBQAG�sw�}����y�-���zY��~w]��ek������D��-C�Ha�L:�{ě +X)��P7[W��z������j&�:�nk��C�U�@��'�q�{�e3�5����]��Q�Q��.��Ж�C\��{�[�a'̲����B�<��5!���!�p`�7�����n�?5ݡ/]��*�Ug��b�/�!���6�:�a�f妳�y���^�M �μɟ���Zr+-J������k~ZH�z�r��=Gn�a�6�k�َ��д����l�6��WsK�/o�D�虦V��4�:��qx|8���v_��ЂUm� s��u�7��E��'��W@ᨚ ����F���K������~�*n�e����B��ƭ��g�D��³T麒��P;:tnv�7���噜���Y3 �kN�)i��}�h/��B-ҩ~ϲ�PGnZ��K�?� 0Ϻ2��^�T��xF�4�렗 +��,�A�e���l����x�S�\�����r���υ�k�\���7f�t��b:�"��d�V}!��+z#��N8���9*1���6�4+�i5-ϋpT�CvT�ߧe[���<�/agw<����i�;�E��q���%�4-���A�ߣ�]aMʪS�`\�m����N_�n�^k-_�3�_Ub�ʾe���ײ�Όً�s��'�Y�9=@>r��,U������d]��_�z>����~h������-|�x�^~����/wկ��6��Y�.�5�M[�����֊ל�(k���j��9����X&K�v|S�qNn�ٚtqw�[�L�빼5EO�>v.|��Y�%��l�/��mU��Ă�A�G���-��{p��P\-��sW��foC�c5�I�P��"6}͉L]�:t�ck���B�")�I�+u�w�a�,�v�_�g3*M�JWH{6+���|�I,�L羯���I�ܯ���<Oc�sqnB헻��k�@��G�v2���\�/�y�r��F�� +� t���p�P7h��sR�(�-�/D��ZN���Np�����0�6z�[�%��N +����+7���7!j�IZl���2��q{���T���������>�� \viC���'����돖���<��Z��(��J���w�0��ؓ0.O�0��Oya���QĆq���~�<�?��Z��L���3Vّ�m�?��1Dk�xڿ��:d6Uo=��2/��pծ���]��b��#��'�y�@�Y��C�d���n�"*��p��KB (��i��8�O-ح��́����L&J��c���c���c�q�:�d��}S���F��a��Ν��Զw��s��-!c�T�7Ɍ��b��kX�Oj�h�g���#�vBQ�[�ir�ڂ��}�G(�:=��իs,�*�$�ޤ3n�Ǫ3̎1��[�h�a*)�gTR��i�����^l��<f��un��aK��j}9��e*B�;�sK�缁 U ��N���[O���r��R����N�Y��l�%��q�Ne�7��J1;������6mt㐲����̚y��Z����xtC҃����E~�b��k~�ک�2�!����H����Nu�ύ{a���-��!h��=�cjq��xL�����ȅK���^���W�{����C�EK�`aP��ڐ���B��@�tk$UnD�&C�����������/{���q�[���d3�dw4,.��cԍ�g���+��%�aSׄ�x?�ߕl�T�������G�zz7��U�AZ#Jz9��� ߛ���V��:v�4^��|�~'c�~���j���)��֯����/�9u���3�G�hE�Ϥ��Z���ɦ�L�:f#L�]�\-�̅���z-�ƨt�eg�ۡZAIgH�A0n�w�9.� S��a��P����iE{��r�Z��<�_��_��� +��^=�����:��Ē��G��K�X�3;J�MOֵ`��Q�bO�q`�:y?;�����|6�l+�V����8�%f�Y���v�<xz;@���[�bk�b;�Am�uA����Z{���=&�M�k�����tjӼk��j%���3�.����Ҙk�� +7qg����)���1���0��aUMY������ 1�<�<͎��*l��Al2u�HA���v��ui��`���_�G�?��?l��e�#����$�o^���/�H��oQ*�1'�!ʨS�����ӟ�^����*;+7�pG�s'���+31[ +�4\(hs�b�>���vx<�Z�)�>��1\=���Aڠ�������٣7ݑ�/��������%�;ll ���tLZ*��Uy�Sa��i�;:�8�d�Ibw,�D}@��ֈ[�]zz��8u�a:�D�VC�u'[W"�2:�Wj����'q�{9��ݙD����v�O�s�ƻ�U�o� �e�������;O[/SC��j�1��r�ǀ��%�w���n�!�y247y���� oP�ʝ���|G�d�ݯN�"<�6�s �w�Fv{?�臕�~�r��M��P-g+�,��ֻn�-�.-G�]��~���}ku��J_:{v�d]�Ю��63N�=Ar���l��k�FW#}>�h��K�<�7}5��J֩{�6�.|8|:F�Z��j�#l����EZ��A�x��@���\�6��q�`��Ԁ�G�%�%��[Sb�pÛ��)��ל߽�����cr��8�d`�/��Ħ�� �m���ڣl�Tf�� �-���%|m�̻����kT�k�~�`�ޠ�vn��Z{6��� +UcW�G۩��dW� ���>�ԭXwd��������S�I��b5�Q_>v���v�Unn�`��l�K�ѯ)ф�u��P�r�V�j-� +?�m�a�q�ޕA��@I�����&P��w.�ˤ��|��K��@+�^Pӏ�4�Jz +��BXQg�~��D��qt,?z�h^�:p7*7��X���B��4������dh��|y�J��^Z�n^i��o��b�R�.ZZ��O<��>(V�,�x0v��] +�D�NoP�t�+�k�?(Wrie���r֘;���MR�pM�Qhɂ�^�Wi�sZ?��*|�� |S̗i��/EdT�fC�(�#<R�)(5�9�<�Fa����u��~��t�ܠSxx�Q�p:���'W�{�� �P.��~0���X��;���H�V�N� �`��h�iњ٨7��XP�|i /����k� J�)\�� ��|?�8s�V�Df�L�"e�7���9�d̛Y����!���J��]m{ζe@@H>�����5�qK>�1ɧZ($�;�H�+{�������<yT'�M��^�1M26�Z,k�P�ƪ͌a/C�>��t��!��3��d���_T�瞓=^~l���^��R��daҟ�]�ͿH>)�&��,%���N>�d�|j0������/y����-c��x���]ˠ�:��%��$�%%D�5~����'�]����AT*���Z��5�8�K +H�,8�����}k�A5�y8��|⅘���=/��P^}�ৌ�|�`>�m(�3��ˇz��¯�0>�G>!����m��y��\�땗��a8����(q��q�������f��j�(�yIs0�Hsı���N+�h4N�$̗�L�JHo�y�M���a�����{(�G}��~�y�U�KΦ}�r��m���[w��Zؘ^��l��v����j�<��,q�WN��P9U��,.8�PŲ]�{?��{��y�[`��N��n�4���צ|���FO������欺���n|E�gl*���k%��8�թa�a�ҝ��'����^�s5���~��}&Aak�va;�g�?d��Y�o��V��-��-/C�;dt{�O>VȻ�@���|�����Y�N<3������̔v��v�N��.9��}�p��⡽���*uvw&�]�۾���l����d�QZ�M9���V�rk����~I�e%J�� ���GZ@�oy9���j?N�N���j���˸] ��*b�G|-:��a��w��d�M��v����~��-$= V��������ϝ 4�a�]I��c ج��/���g / +o�<���uJ��Ehea�6�,��+-ܬ��j[�\~��x5�n!*�N���桻{uw��lqC�Br���X��M�M��xk��7�qC���D����V݂�[j���?�gh6���)��ϧwr +���Oډ]*�_������%����g�M�ķ�wfr� �/����k8��P%(w��l���^6���L�Y�T\\���-�rSn�t�*�u�=;d =�u������n����b/Ǚ9͡�!��� +��"b��b^A�y�����?�B=��¾q�Wû���d��JxP��r���c���c-N�*ޕ��z�<��G\�h��0; 2����Y�uj��V��y�T�r��v~1�5絈��Ң�nwt]5'���w���>����:[搜x-VG�}�%�������������'�x���G�?��b��Ps��ߟ�/��C��r9�/�!{s[��t�w���NJ6ڑ�-��B���b�#��Ӭ��ojsQG��[ͱhmN�]��m��b6In;e˕�/��W��҂� y�lz�V���xY �����B����7��$n-*�u�y�b��e ���f3f �sD�`Փ�f������JeNO.��ƽ.gP��W�I�.�,(���/�O�LR��Z�`���Y�B�����k�s<?:5�x�I��h5\Me�g��auq9Ho�[��6�p�扜�F�m���y�k�����T�W�7/��[�Sʎ�>�P>��t�����xE����g�u[St��DR=!�sG��N_���9��ޜZ#��.'�|��Sn��pi�R"'�ܒ�M�ko�w����,�t�ƺ�Y�/U�})j(�� �[�r(�f%j�#L�:@�+��s�έ'Ov�>���Z�_��e����������}�]�l�'<:[˷��|�!��!ms�7o*����K�Rܝ���|b��1V�]��)4R��@R�B����O�&8P���'������$`üse�u��V����w��wka���l�r�Q�/,��w�/��TT|�k���4b�<�����*:6Rluec�y��mb͏��>��b�ȬZ��{EM�m~�QnmlȬ�J�A`+�,%�6߫�iL䞛��Cd�uu�.\������wx���� ��R�����CY&P�wigBY������Ӵn�I����>KEt�P���x?��S�y��<�x*��V��Ew�*��L����(�q�Gݏ���4��]�N��ַ�O�q����j��q^]z�$Vu_]����Rev�MXO����?�9�%�" =[��Z4����<�F���_lOS�ay�V�T�f�ؚ(ts0V�ژ���F^�MY�Ŏ|k��t�E��,�o���`�P����C�Q�l��� �B[�!����cR��8k$�cs���ʩn�r�g �[��o�k���j�#���d$��y4��@��!~@ +��)�� �����Փ(v�:Q��=K]��Zb�� )؍t�Z�Ӛ��Iv�pϛs�M���u��k����\����[�Es�Ҧ������s�۳uuM���*�ϸO]K��j��z$�60��}�(��-�6���o�P�Wp�����;�|Y��Ue��y�'�-h�M_�|T��Hٞ�B�@�gJ-�"�QG���@."FX��Z��0]2�����Q���>{��ac�P��%�U��Ph�B��*�y������%֒�h�.�aԎ�aq&�bn����?���x~��_V䢺�� �!��Tw�r6}u;Ң�էD����君�Ȋ�3�2��>��-���\d�+l� 6}�C�e�<��do�qksc�[�]͔��x�ȨxB_9D_y� }� ���_����]_ƌ���f�ݙ��9A+�RV�g{�G�e���=N�3�� �:Y� �c�K*�o�D�Q����QMf�x��θ[�!+�D_�$��sw5r1�H�h�4�(���?l�`�]=�Ýh�nu��������ۜ �%f�e�����)��4 �S�0[iD�,�Ѿ#��S��g�XK�#��b�a_��F4�����E���#��4�)߄� ��Yv�Yn��,ܞ�lm����|���T[��Q2탩-���CE Ԙ�o�q$��zgrۢ%� �E +Dv ��|wC���E(��!l����}���g��ѹ�#��FV�~��N��~�*"�����3��]yi%]ye ���̺���T_u[�����;��N>�e^ၮ�_�4�"�Mq���[0Q!x���B�>��Mv0صGC#�v�2C?\b��1�B�Vq�z�KZ0��z�n�ֽ 8��d\G����\��գ�H��"��v�mv���?���찛�o-l;�Ԋאd������L�z��5|&��|!h��C�xv�ҢB��d��+���ӊm�NS��z�u�����%�ܴ$��_�R���V�iD��!��%ߚT�j4��t�,���,зe�O��/�hz�a���ϕg ?����Ƭ�DM���$�A��}n �zmwt{�s�s7�����k�m���6V/����[Đ=�ro�֤�ݧ�Y�3��m�˲�:��v��\�j�Ŕk�bj"��-r�`^c���H���,,����mQb:�;C�)T�r ��{�jy�����uO�J��nt�.�Z�#g�v*V�5)i�����Q7�U�֭�]��ykW�IA��U��yzWN�P��ZU��*�VN��Έ�������ּ�MT��T��S�v��8�����]��F��V��[��{4*��Z�O�4��gy�B�r.�˹h�)��a�&���5�T�����9����Qd6�R�9Gp��%p��6�P�$`�����h�̵�������Rһ�xA~�a�@��u#[��J��@~���c�|�0��zZeS����;��-��T�U����R8�!� ��Њj~>:�������1��!�3�<2��a~/Â�� � �E8#��ᠱ�E^�U5ۯqb:���C/ +���F�Ɍ�͵3����� ��ĭD_vp���@��k��;��h�s���̡]�`�1�a� `Mt`���A㘱���p��H��<�X:�H��6_ w�ٶ|!�1�+�CP8��#��v�g��,;�B� +���G�� x\��Ԉ��}�-�س>�]ʐ�^��2�^�6��5�^g�!�g���&cy�>RʈP�G4���:cs�A��AW~I>8���ɧ� +��v�w=�^���L��<���[=Ig-$I��8�*')[�:c{HR>w��%IJ@��}��T3^�$%�h�L'Na/%��]� +yx�m��>**����8�O���C�,P{�:Ã����{��'o]�%oj�O��R#y�A�^�,̨�d�Y��j�ݖ�uLҸ}˘��|�J5�'�#n��f����=�v'�#���}>�7Y�]�QTH�sH�=�����4����˷�̶�&�\�u2�Ek{���/��S����l%�ſ:x�>�X؉[:l�^��p~����ܔrɳ���B�V|p���XU����ED��v|k/@5������S4|�ϋ�M��Gn��I�S���S�I.���6��js�$�H(���u�_$�W���Of�~�����E���/�tS,�z�?��z�'~$0^��j�N.�����˧N���{坂��x�s��Rn�+1�_h:�ϊ��XY�/t���\�sHsy���S���2JzO60�:�َL��S?��<����Z��)�xsa!{���/��y���)�u�JZ? +b��f�ɾK�� ��a��C��O!04N�������m����q��O���9c�Hs�5��DF�~�����n��ִ���R�PԹt��S匈�����>b�#s�����f����s��9��Y,LC�:\\ �c ��^ޔ�����*:{V��z��u��C\�9'Y��2�O�C���'���[|��1VM�#��-��wT蠴���n{���3��E*tQ� s��P7h�:lm&/�۔-:\s��H�,�:3Psվn�e�3<$��]�,g�J������o7�d}W��~�_/�i�y��q{u�]-|����?�Hk��6Y0iHܺ��h�+H+�������� +��M�D��c�_^[uy��]�{T��8�7i�N.6�ΧW(9�BBm:�+s�$��'��Y����|��I�&��^m[w���+-�XZ����$g��,��c��E� f_�Y4�-�C��=�톛宋SՁ�y�I��z��km�����\�{����gK�z��d�\\v%^�>IS�Lc�����=���Ҽ�\e����w�˄}I�����f����e���4r�_�>m=si�]�ҟ՟|�L��G�VŇ�洄"�i㆜�'����� U�����6;�,�w5e�����|��ڜLnYNe�Li�fC���F�W��l"ʘ�G��;�*�� +˦�m[&�v4�hq��D��9��Z�q|6���8���"�j�Eo:�^ӫo�����6$%LuLi�oC�S�����u5+���n��� �@�?cYn`U;��Jg���!-���|U�s�����;+:2A�F�cy���=���K9~��l([H�b�,� �o�u)�5��HU���q�Agݘ1�V�h�)U;b���)Kg�b��R�Ʒb�OQ�J��]���b�03V�I�� l�q���R��g��q�`��� {�.�θ��,����%,f۲Ш��%^�R?��S���</������¯zy���!�|Ri�EUi��u$L��T,�Y V���@<A c���o��/�'�d���^����0�]bv�A���;żw�nʷ,������Q�1;�4��X�R��+� �����$7_��Թ:�(ju+?5�*$$��0��^i;���K��c�a����21X`!�6b!O�e�/�/�/�; y��h�o�ѕ_���.���R �cW�YňD��?�LA}f�����=u�n��!�J�u���F��`Ҿ ��Hyχ +|>���x�l��fg�#��l�W�n"�0i���I�]�2X��6������q��p|��|Q�U�NC;��uK��6����5���� +��Ϥ�tb��v����4���}s���՝+�6�2�J�p''�E3-�����[� +h��x�ڽ�f짴��h_�/��_��eZ���sgA�b�+=>�Z���>c��²6�����#Y)R��D��+���8�2Zy���n�0�wl��g,����D���8�����PZc��~���d��d���d�|F�~�~ZL�_"�O��}����rK^�C��lLV�G[~�� +�4��Ն�� T��@jj�w.;�62��ƕW��Vl�4���D~A��<���{�Ј\�Pf���&P�H�b}���T�JP��%(��f�sby[��I��%cX�c�<b S6>c<�[�j=��j�9/w�.$>�Co��W���]��D��8ew9zΈvm1Q��;�_�������.W +kS��ne2��.u��f4���+/�����N�V�k2*o��/�_~��I�VXz����r.NiK�l0=;�sH-�2}�F�ωh�J ;�H���y��ԔI��������h��)��I��E? ��Q�p��&�R��]m�Ě��5GI k+ +=D�D����C�y�C�*-�]�s�76���H����Vs�� �H��K\Re��|�9���d�J&c��i�yT)�X��0�d���D�'�G�(=p����7�X��-���r�4����]hc�h��4��Uep�A�����u�f��xrv��f����&��#Py��q=1eN�8�nvk|wC�}��H9'_ �[M!��lA�K�;���5>��&��0��ϰ�����u�f�4F疊8#D��P@�*�#���@�������K���c^]=��ZoFvo����@9����ٌ�\���I���R�h���(Wc���b� +�hk��Q5kx3�ۘ���ڭow����r�'��:*!n]�"9yO��]![Y�5�i��>H�XDWBln�?l�Vq��;�l����@tp��g"�%�*���'�a�ј)���j�d�ߗ�]��>ĥA��.Y����2���10��Ha�|�� !��g�~" �'MR�D��^͜��G�f�^������Zw+��׀��?���^��N���Y�!���j������sKUem�̋(̨�$�0�"0a���k{����`��c�R^��iH�{� +�|�Ю���ܳ9�nX5��mI�l��t��J��ӤA�v)��+�d1.�ʪp��%`G��`�ÖC�R��b�p�ua�uD�F��� Z�"������Џ_7Qwԇ#[ĕ$u8�UU���D��>x�{��j��9i?��t���j ��B'ɵk�d�9���-|?_��F~7��y�^�����J��b���Ts�յ��0�5>G����9�1Ggrc^> ���2W�;u��r�64}A6��l�~�I�FR�R��;�gJ:Vc���q�)��ħ!l� V�S����d���Fz�A�i+��;7]6yi�o,6�{�P�a$��8Rl��9'���8ջ:����O�S/O�zy���.�h� l���O�9U-��he��� 8����;��������m���I#�Z��ؙ�P�Z�!�SG���#%�Q��od�{;hZ�#���?Y�28�� G���J�80fW�MWp�Z����.���^��������q�e��F�����JWP��B��i4�3��4?D߲�(�-� ���k��pSE�����Bx�w��pyRŐ2}7�R:;%�~h%�H����8�YO\���B$��>,�|+�,�k<,W�,��_�2��w��/����O^�8�m�0´�7D�E��t�Z�̡q�lz���,�A}� +���mt>B=�p�h�Z��7��{a�BfjD��HW��O��#�s�܅�9��wrx�܃q��_���rW�/�S�����j�i�r�̕n�0Fh�2{G6���z.�Q�I�U�o����B��n��r�v��B��w0ɽ���j ���-���5�SO}�P� 0t�����F�Z���ی��0������F�w���o�;� ~D1���Ixny;E*��������v#X� +�¡�[箓^�v5�L��^��?���_�\�`>�`�$X.�;f?�d��v�l�〽�>`��p���r-�*��t%��&���U�X�B���-�v��w���2.���2Y�X���|�"09�+���-`���?X�3`���+��y��U�QCpF^��q��"�����-����[l2��O����I?��"����~��8}��Q�f[�4�(�4���4ni�v����bQȐ�����3�(��j?;�o)�Y>_������7��t:T4E�Q����zx����v�[ۛ ��?4d�/�����y�βX�q�)P�O�����t�M�jᚾ��7M�v%M�s�� �^F���g�.�eʥ��k�7�W>��2T;?6j��(/��]/�s���Tn�hH����z^��Gatq�Yx![����D��Y:��"�ro?���i��-�?�v�yV��(�@�=}����=�͂cT����R���_ۯ�`3~���l�x��>��Ge����'MnG�z�5'��u���(_(��2����AK|�192�Ħ�=�|z�J����~I�^�K���(�v4����/V_���O?#��O�O�D�����U�ع#�N�Y�ٸ^r7��K���^�e��d����+l�Y�tH>0vI�]��*6t��ֱ�cʾb�;���b�@�c��ͣ�U��a��/�7-N��띅y��ُu�7��O�,N鷛<�����/��m`|�W�rB.4���\9b��~�$��{��r��kxTIh|����a��}#���r�_��#&�1��V6�r��o��t�a{����t���ɿx ��]p�`�d���"���������^���9�AפS��'��q��; �fí�������Ih� G�P���A�zz2����x���M��7�p�������ڜ�f�/f��\��0Z��Y�7b<Z�����{�"���M��]�k��w��Hi�]��l���w���jg#�>z��e�^M�[��F����J���6�W�j@�*�c'�7�ٌ/���������u/�%}��m�ŨW���q�����~�Zs=��p<9��"I�s����m�ٳ�}�n\�7U���홑w�{�Gl�o��n�.-�hU����e�4�S�AG�Ÿ�o�_։��Z��h/ɟY V��ď�{�|��B1�F��M�nQ� Of8>���x��c�T������vm��$�`�=dv�e�/M����W��e,�>��%XLJ�h��OYk�/���Ϸ�ԓ���K��L���i�T[���nH�F���Ie0���rtm �1��\z�j;��;\b��w����m�֛<k^st�tg݃�p��Y��v�xo4�&E�����ݢ-� &^VыYw\�L�A��n�ˤYO�����r�z��>�M��2-�uҨ��T�5�O�K��<� �u�t��7����t+�,����͇e�<����`a�L��/���Y�V�;y*,P?�'�W���t�������ݑ�шeB�9�w.�`�o�w������p�hW�rba�-���h�8�gB���8�2�fY6�3�؛�7�nn��d���B�B�Z5r������u:���Y�+��1�}���ioGNNZ� [�p����`���*j]���[H} ��Ս��Nx=��,�П���O�Dg;oD� Î���Q�r��[�쟶��}����)mrIx2��\ȇ��w��Y��r�7F�Ч�o�/9�\O�=j0�FUwP}!��\s�9�}����|����5裿�r���[��ͫ*��Y�'&�Q�{��Z+]5c�j�T�j�WP�r}*[�p�$m+y�v�8-r��8ėk24���c|%�����iP��jã;�ыd�l���Z��GQ���賥�Ѿ�v��x���$׃^�jW�B�XRk�0T���Z1�'8{b,:���M�/�_.�f;��1�ݔg~�?�|�j 3}��M���ꦾ�:�dPn�2���լ��Ir�Қ��5��}G_G^�Y/DӠ��qW=��j���j�e��q�r���2�<�JjKɅ����%"Ö~�����������fs"|��G����M&ӳSh��a7@��m����2H������K�ljj=Y��nWw]5^ =�^rW�)�{9 w+�?9X �#�Xq"Ot�)��4z�;�u�w�%f���`������ ���[S~Ѯ� �Z;��#��� ������bY���db�M���75ݗB\���)���v�Eݑ��Yl�4��X>�@�5�H"��E��m�y7�j�>������3�3?��Tmf�f�W����>��p*�˛c�s�?#���:bu�c+ �hW���=�k���z��5�4{%�!�ݵ�)�cATZ�b�$�՛!���#>7OOd�`��±6X�=2�r{%N���]ܘ~�#.�V�!�b��3N�������}�< +��/�kLN�*_qsV�=軳��;�m��|m�$���}�T��F��)������M�ƹ�"��]_d�հ�������q�}[Y����U��@|�Qn��J\? ]�#��I��O46c��v������D������8O�rL7*e[ŷ/�Hq���&Q�W.��?��?N���-����)��)�9�9)�;ok�2�-z���M^#��OW7�\�쀬6����0�Yv�8�"flRf.6�d�Y������%Z�_=���4_�~������ҰF�O��X�F|����VmL+G��a/�1!��r����N�1B�+B{#����]^��}�w�(>���5�έ3�<�/�`^uz|a9�vv��� �Rz�� �� x���_�Ec�-��N��q��\�Z6q�_�����#��ha��](=sA,���9��,[AN(�����CZm�>�Ό[:{��6�)��!5<�'a�H������Q�D.�Mv�Q�,����p��d˳��k���~�{�ӫ=z�blGmȘ�s��涉�3����5��VA?�Jl{���*w)��ŧ�� �`/����GdF�\�~� �fhD�!����H(�< �������^[��=���{d=������/ |K>�_Bbzs�=U�g��q;���2T�'�u�//?��\X��i�z|��i~�9���%��`�Uf<_�t���4'�j��g�O�s�>)I/�XoK��C"��7��a�^8:�� +:��>:`�/:hy-tP����90 f��r������ͦI�M֔���dC�]G��%o�K$�N�ښ������_)Ց0U(J)�4��� ��s ����ױ�3G��$�5�aԥ厜l���Yݜ�R����&��&�6��#a��!�������g�F�7�e��`Pz7�4/tU�.͞�A('�5�FK� +�tDSxITA~���n']q1���1k�m���<����� ��*�FMV�/�)wh��/\�"��"Q�q}���U6���쐪�z!����������5B�N��h��ö��]��������Ήo�F��I�z9v'-Z��4?���Crm|��1�ԡ�0�덼0!�0g-"�_�bPW#uV/kQ\ӎ�g�f��U�[� w4�$�~�$ �R9��lf�L�L��7ܰt��Q��;m���[$��O������y��=�~Gk�^�s�#���&��]���mS=b�S���gC�\�,���<� +�4��m�U�#,��\cYz.��[�C���!�@E_C��v��)��b�?aX�_w���۷us��St���6lK��負��/��u�����x5��xQ�n��uR���|9�Y���(Ԡ��;P1��X�����KJ���)�cЅT]Ae�-D/5-h���ߤN�C��1)����.�ݱHeԙ_�ֲ����H�ɺr�:�T�Dx�ָ[�Y����<i~(tS��μ�"�Ii�,�p�^�Jc9��3˛�<�7�S�;ù$7L�W�?�a�%�dX=@��i�w��Q����R�\/M@nz@�{p� �x��ޠׇ�Y�b#Z�Y���E��~oE�[�T�G�}]���<�(���{��~cf��@�5�'�P��P��PI��t�t���4�s���~���LJ���şU~?kGi�7tT�f�o@�.�ҿ����'�H��� z)��`�|7���\;�ר����(��9�s�Y~�_&�������,���wd��r�Luz~~F� �8~0q��7���`�c���V/�� `��##,e$�_zf���(l�ګ#(�:���B��k=j�w*�tw��窰��a��s>`�=��Zf��s�o���-�ӳ��TV�ة�T@~��B&8��n��� �� +�/l)�C]���*cy|���h@���>���ҷ�i�#�4mk���,M�v��{��`;8�1me<�4I%ch��p__u1}-����7�3��O��8<a�{~l���Qv�{Lv�w��@o��܌������P��-��+�:m�E��N��W����4}k��}�'�h�ň�3�K\)�ѯg��[��/!:�O�p�����=��ӹ��m|��o�^��7�]X�~sM���.��Ņ������jv��>q�Ԅ����.���"���0�����{��h�Vn��[��D��*M����^�U�«֟��C�1v!oj���S�:���+�x��p7/�:�jir���<Iuj�J��x8-Z��wN�Qz��a�N�Cy���:��k?{r��_��U��hK��C���CBzV����=�o�U`����}�sׇ*tkR\�r�����F�[�o^�Pk��ŁPO�&�e���;�*����<�ܙ������c���F���}.qk�6JY�lާ������%��=#�|�,�k뇶�d��{���[>��k}k���e���y�iϤ��'硣B3�C�ǐ}_����q]'w�r������uF�nOӌ(�u����߲�7��+�>ik��B�B/�}�nX����^���w62�/�H�'����`�~Օ�\_J�m@լ�˜�I��'�Ҩ��#��:���]����������6o�=�����zi��J~��lyUS=����k�J�4��S��*兓����{ʜޙ���e�<�I�����SހZ�i���.��]����À9h\�����眝��w���C��6�+Z�O�S�s���@�K�C�dŕ���!�kd`W����c/g��=���k���ln~F�(��i���L+f ��~�]s��%����ܿ��p��<zZI>r�Pe74���Kk�z�������ˣUg�6Y�&�ł|7��i����%q�}Izf�W��>^�B^a7��V��O 3��<����ř?A`�2na���^"�{��mw����@�w����=��+{�5έ����%M�y� f�ܪ���ek��q�#�ل���<���֜��J�n8� +z4�+�q�����ƃ�6?�����>[�]kfg~t����59��CD�\��v�(�C����>�w�� ���O:�B���oB�(��2��k�{v��R~ݓb���-��^jNН4&�5�}gtŃ��w�k'ł�3������l����<�׆R � du�4����v'�y���i��ll�/ #��/����|@�;�v&6+y_�j�n��6O7����sVɿ��i���F$�i���Qo��;��l�#���p���7�� �(��)�X:����\*����n�5m`�R��:��O��C��nU}��)�Q1�_ܜ���*j^��h[��j%u���T�x���O�G�:����}zR�yF�T��:B{X\�ʠ2�5���-�(s����a縥�-����Y������yL�-]����:w?��v���W���rI�/mo3:�Q�-ty��|�5�����Uף��rpY�t��g6�\}��^�;���ʴ�1o�Ӎd�|��G��ԟ����\<�|7^j�y��D.�X�[*tu��9��ҦZŪ{ew�����T��6�����p^${-��+���Ѐֿe���)�;?_:�)}D��ZF�S0x�f8t돱��f�k�AS��W��[֛f�0��U.��F��Q��~R�g� ��"[��[a�I�XIN��Jzid|Z�")N/j��l��N��L+3L�1a���S�9q��zr]j�Cl����p��?^���,~#����z�hG������VR��NSk����q,�6�@F�Ž��S"`��.�x'��w^��<��鼞�zƼ�C�/��Z�n��Y��ek��l��&$���o�m����Zo蛨�Y�b�{h��-H+�Y���؆P��5�%��rrB�%����ġ���3q��F��{�:ܨ������S��b&�{�S"���6���h�=�u\��`2�������o��t�K<������I"�@�Qi�'8�����[ɗ�j���f��C�J�����JN'���I�P6���ed��뽵Щ��v��@[.�~��~3���Xzd�e~3i4��E����quPz�»�َ�G���n�yd5��lf�|��Z�דC;�v��A����b&��<��a�}�+��5DƝ��:�]K��s��嶳�h�o>�#_F.~�k����\]-d�>W��W��O`N�R��_�oNá�S�ZS�]��v1� v��5���,e�+��D����bѭ�l�T"�v�T|���Hd�Z�����.�-�m��A�]<�{|�����}�s�Cn�M��6��2sv�c+����̜G&�Md��/lsw��� a��Z��*��:��s�����eY�F��qOK��|���t/�B�E~";��;�E�#,(,@ +Qk+��G�UShs������f��`��7� ���wz�Wa�2.$�jZ�j �4�b��a��8�B�fn��M���I?�� t������ g�?VĎ\���|߫�@�!�\��|Vڼ���#A���:���r�[�5-_����5�e���s��$�h}z�F�k笨Y�u%?�@λs���F +5f�"�� ��N�J�I�ڶ�ʉ�du�B��+�M|w5BqeQuqýN��ۛ�w�.O���#w�\c?�f%�I�E�k�q�F?F)C�i^�<���uH�-������ ��� ]Uq�]����oJ� +����6+������b����vӴח��tV˓��u�J��]���� 7C����3��Þ+ɂ��p̸)zaȍ����a�fva��M�jHf���M��W�(~�f����Ս��_�X&������� +=�&)z��K�a��v��=m�#���i��{�p�O�Rv{�H��>__�Y���ޥ�/l@��<������nr$�P�A�k��*�%�"xT7q�w\�ؾ��%&j�^�Ғ����^�5Gǥ��VAs��f#��h��3��樻-�2_��0M�9焋w�°~����j�ť�6�q�Z�M�NM����2) 7�P͛�G���n��i�;��k��<���tp���+��-�1�&�7i�1ixyb�������eD�;",�SD�7D�U�/^<����Ҹ� *٨�9�^�^�{�G�g�ϔ�!=�u�$<ߩ�i+]���&��Ew��{��i��6��6|��o����'�x�G +�N���Y�_/z�Um�6���P����Sݡ�l�����k��2=� 0c����R�Z��(�{�U�ֹ{�#DG�<�M�hn�?P���2�,�{d�u��K.ԢN?�i�\�����^��F�V��MTN�Si��F�23���}O�{�͗��(���,Q�UR��j6�,Q�v�4��*��g��lWoe��T��ɧT��$�o��uYP�ݘ��X�[���h�+�nM�hb=������c)8����%������i�9=�y\����^�*�5#}��7 +#~���@�"�v�"܊ 8�e�k��l�Wr����u)]z�����^,X�oa�=='>kB3�9J���F>Y5}���7���~�Ё��)���J��.l_5�Лq�B�3���w}��wp>��%$g��t�5���@��Y3���G��}�&I܂����l���N��-� �Y��G=�J~�ɷ "|2��.!��O��04l�yrZ��-�<zD��ĄхֳD.�:a7�:]���ۀc+x�!��qܿ�+KiK$|��h��YW����������k!sl��|��^�����K�S�f��b|���t�k��fYCn�i�� 6VTNP=�$��O"2ZW���4�^���;��U����@uO�l6��7=���ײ�>*���@�)йw��t�R�E_���?k��E���\�D)��>�?�K.��j�c����&�lߝ��p;>���~M@��!�!�45�Z���6�-��� �{��|���n�F���-��2�f��澬�ѓ[h�2�=`��+C�~�ޖ�G����Z�����ِ^�cuh�?��ϡ��5�[�zhDȮy4����7o�C�����0����][*��"߀UF��f�ؗ��FM�I�%�L��)^�x��[�S�m�=���+����f��mFZ�.�R��6M��v���؏�T�6�5M;�|���� M�J6@_7��E3^B��ϰΌ�ұ3{<6���';z�ď��I��#��L��z��5*�uX�����M.ni�ʘ�����%S6�4��,�+�EH(?��f1V��O&��I�Rz �<�C{l�-�Q�q��m�^��ہV̛���k����!���U�����C��t�|&i�-&�����N����[��p���H��r������?��i�N���Y9 tc9��m//�P�_�N��w��ތW�&\�]�E�yqe�B�P�<)��3�R���n�$�hJ�S�V�Gx,eS�t���`~ޙp��kl2N�)V>��]�ѵ���s�IY�|��lvh��[Ӳ@��ہx,���Y_�e|8ӛ8�s>Od�=�;�(]w�Æ���1�7�����̼��\��s1�]I�[�iۇ���>�x�����z�tѵ�0���eV�=�ҏv�B���͘w���Jv3���M��~��rEK��4+}::����ǡ����m��}�ez�z�c��{; ��� ō��6�<k�;��Ze&���n��QXqo��N��@�q�F�V�H/����'��Y��~��,P-�2^���B�.#zJ�:����!>{j7��������]�ۀ����"kD���8�a| ���3��ܝxٷ�����������R����;�D�K�伏C5��G�\�BgK���K�-]��|r�ſ`�#��$Ⱥ +����:l��ol��Җ]��MΑ��Z��P��A˃��uG +toq �傀&����4z������9���0�b���v�����3�����K���a�9������qcm4~%����~Ւ��2�29֑S�����;�Z�}]�d-���(�R�$}��p9��O:���)��}���u������Lf�~��]즕|�<�M�5�7��ش��(���0�d�V��.�Hgg�O�?����u�/^k6�����~_G܁<������w���˺�Q�nq0���|Z +>>��J^������DM+ɩ=�cwe|��?YY�^���A���{�Х *r����aˣ���{�nS��0���PT��`�F�lt��z_��<V��~q)�s�!��ʧ��v�Oh��$p� \P<�s�+�)��uZ����å�E,7���A�T6lwfuT�?���a�9G���C���W0PȊ���di���ܛt�D��8����Y��>�Z3�%�~���cM8ja�.&�Ҫ�ދ��|�� +f�6�f��r<� �?Је������f��3fc���`�s�AY�t,m3Q�'��L#�Fm��&���Q��W}�2sZ�m�ж��^���X]z»�=����Ņ� a��G���K�ɽ�������h>i�W{�b������T��P�����r�.�J����F�0+��ֲ�*g�O���O�B� +��Ʒ�����]�:��� '�+�����\Z�� S� ��Z��@�_�¿H����e��B��h��&�Y�ԋ�6&y���$GCyY��n}c),1����:蓫vQ��ĺ��T�C��E��z���b�[4���Mv���A�R�;���� �o����B�ΚIgI%�N����G!�-<����>`_L'���hm��:?��b�����_G#���F�4ҧ��E{�ϩ�˝r=���+�T��������f'V��9Y>��܂�t^�+ /oO�_��e7;ϴ�t��ں3ݮ���Ov�T�u��<�en2�z�>!��s�gQ��Fw�vrN<���a��f� +2�_2��7��Uj߃��- �T��Լ�G�����ߗ��ڒ.�FJ�s&�wv�)g?��Ҽî���Qv�Wk;Q���@ȍ�{�9c��ˎ�蕑�������\�@�,���*��,d��bO���׆��,���h�^����� ��UΚ��t�?r���XNk"]*����`:\M���90��y=k/�R�jC�ɯ'�2��J�W9yΫ<|�P?�������12..<|nGXk��&]��T�:�k��r�j�2��j��q���H��*�Vr"�$>j��H�λ3;O������7�<������6���R�e)�p��q�ޠ�j%�=�+^F�p�>��j"��/?�����<%�Nb >|` +c�1Mlx��D*8zZ�+�eZkw��WV�O����ב�V�'�ꤓڮýѳ�hO!����P��Y����o�Ηw�ӑk��%�˚������i��q����0Cvrb��4��d���F�+D0�$d��y7}+�A���Bԣ� wG��+�4>öt=Uqb�F�[�;�Bgx���-=�����o�ڇ����|���r�5g]�mr�.���活��;����Գ��Գ:r�g�?P�|��I����鵮�Z�������gq�,s���}:�n6���S���C������&��Ͼ + +�z�V���i��v���կה=� +y��*���7��P���s��z�{�u�~'��m�C�6�I�]�3�'�7����D��yg]C&������7���ׂk��,J��t�� +�m�]*��7ן���K֊�m�n���ɝ��͗]v��z��N��a�6ٞwu"xxB��1��_}��,.:���6���� �*?��t�;�/_d4՛�`���g�{�iſt9�R�Ϧ��5d�|u�c9���֥�c!�����U\�t�<P�y�Jq����pT y[%��%�ܓ�U�������z����݇q��]t���ѽW�bդ�����]�}>A��|Y-�����8S���)Q�Aj��;�3��\�/���s<��%��ά����M�N.����Y9r�|�� �.n��x<mb�tˠ&v��ƝqZCz�����{��{��+HR��*a�/�k��y�����?��'۬٥�u7�D~�[[ǩ2�#���od^;�X�:E�;M�3�3��|�\4���ll��3�����=z�����o�����o�[k�F=�9��b����)o.���pF|�#>�h#~Y ~i� �g{G�Kp�ŋr4�ʃ�\�o#�tk�h"=��)�EO����<�DU�,$c۽�b4�|R�ZNan���i���~��"���m3Һ7�g�E>�W�s-�-�.VFZ7絵�Hjjˮ�V�=�Ziy�k%�����}�����YcaЎ��&q�\480WJ2��"(k��']f�;�2��xu7 Z�sm6f��,�p6{��LìKoaT��μ�Uʦ֭�N������Pՙe�Z�@L���J3���U�P�J;P�.d�t �Iݗ�et)>�蘽�2�Dp6N։V��k�sw�iZ��B��ebc�Qse+�Y·�5�s�)^/r�ZߑTŢx��|�J���dS�1*��t� ��h�$%�ڧ��3-�SOE�,a��p[�n��}CAP(�m\�ܮ w� Z�_�B���ͻ䵕i\�%7�%���FIr锟��f~�����^��qu�~P�Ϡ��rn�������ÂUQ�|�1��g8�8, i�� ��]���գV(���⥞���y�X�g�T~��"����\���s ��e����n�����|רrW�c�Q[x�<��T�����c��&�ZW�SI [�P< /�7*f�ɼ~��Y�^�g�/�:��� �=6�p����e\��<��JS��W'�m`�:0�;�|v�x=~��@���(��v�ҏNQ ��7��U�x�N�^�8�oF�^9�����.W�>t��^��O,.��dU��+f�<D1�Q����2���� �����|�P���ۀ�#@�l*��b���6�jQ���䅞_�=~X:�3]�H1}�+�������u�� � +5R�k���~���/���u��$:�� un Hw~��X���C@Uw�jr��z���4����Z�2�X���Tr�h��O�3A� +�I/�L�}�����zU�)M�y�Q{nQ��ԅ =߬�* F����j�bcP���9��jm��:-C@7J{@K�;���<�V0��2�F�"�H�0Ɖ��92�c5��� ���ߵԝ�O�9����K]�R�����úB��^�P�\�b̆9���e=������лh�����W���=`��+`.�`[ٳ̪�g���Blʹ��?1��K�8�ON%͌k��tΈ����si����� �Ռ���f��4��?w���j��K�Ֆy-J;��3�=�'l��Ǧ��z)N�1Q��ڣ���&��f���-k3n�an�!�_ܢ+]�(���'5ny�h6�=�%}џ@=�����]3+��g�����_=^�v ��~Y|�ɼv��e�^�֯��[c����^�͎^z�p�_��kx��^�3��ī#���b'�b��! !Gx��g����j�ˡ<?��=�_�]o����m�^A^D��(J]��� X�(ֵ(V��9��s��g�xq��CA�h�e�Iߚ�53\�i�[�Qz��f�J����N����8;뻕��7ld�rj��~��_���iK+�a���_�&�rl��e�O�����2Ճ�m��c�t���O������~5��Ӣ� �/����!}b6��KS߯f-�㿝��*�|���f��5���K��q&��?�Y>�7'�z;�`y>���u��F�]����m�<���~���6��SoK���ݝ�K]��g�~[�b�o��d��3\����?�����H�雏�⬵i����w�+U.����qv�xO:�x^�c3��#W��ev�ކ?��:���Z�U���U>���墎�Kx��fKȼY�۰Y��>9��k1�1؞&�t1�K�m����q'�p���~�؟���=Ok��� �w�N6��_O����r۾�/m��X}�=�*���,�����N�|�\:�*{�͎�g0Å�$�w�eD��ݴ��);�_���ͅoyV�7��`dcA�q!��F��F� +�s��Σ�~P�Ls�O�u�SDHNzK���b��z��zB���һ���8�����;9���t0�5'�|N��;�+�p��a�dz{{1���n�L7�Q�|��֡G'����Β�c>����3�&��7��?Po�B?��7�.�����>o�7�5[��w��������&�i:�_ωX��C��E�*��F���i(���l��C��z?���R�F����3v����O�M+����w�ݦ�˯��[��Ӑ0�����a�ԥ1�W��)�ހ|^��h:�^v�()2�I��0?�/Gk9�>�G�� ���7���kR����zA�otӻ�t�a��������� +2�4��y�lq��1�)��,��ʽ�ꃥ�)���������ɍ�S+�˛ic�Z8����������x����\6��i�ݢ��w�ܫ��;i��q���hV����Ɇ�l�7�S~�dw?.�n�[u�N�8D5X���ݩM���Dn��D�F����v��4�0�[krӓ,�O���_W� +�g@�mӽ`TIBgع������h?��x��������i]/w����n-x��!����=�F����C\i�@֫�2�1=�[��i���Ѧ���wS�l zh���C�ЯA��p^Y8��p���Y�9i6����c��Pv���Y�r���P��;���N�2u���n_�ܩ�H��Ε�Ja#g�����ڒ�=�漩��Mc r�ā���:s�Ng�H�@sn�lVj�|�UcM�d�^�Gg�'�� +V����>6��rp�&�^�?�|�yotv��p���;��r��l�6��4ߴ"c{��Z��!1���e§o�0�/���yT�Y�Ԏ#�������t�Q��=T���W��M���Pk>�Լ +f����p�ŞyI�?��������4��{����}��ؽ��ě<�fk�J����N�@"�Yd��0G�F�}��nO�D;�է�k�W��E�j�r��Ha���ޤլOz�<�Vr�(<d��+2�,iFڳ��a�J�E�H +��.C�ы��E���Ǵ�\�b�~rA6+�Ʈ/� +�ild�������M8�:��L��J��I�������g�9��M�J�{m�T��e�OLI���T��Ec~��.y�F)�d�Q*���!Ct�����i;����y�뛲��]ms��Y`��.TY���^ë�Fи��<�S!;n�@=�c������>ʒ�^��xK��I���Ų��h*��눭=3��Y8`$$��,�/��о6���?8�q]�L+3�fY��!���g�M������\�&ٚm�#��ܒ�:�S��HR���l��SG�ط�,��iN������b���QО��r��Ҥ$V��l�N�, ��ݮ�;ɤ��N|y�:�u>�d����ƪB�*�(�������|���y5r�q�i� �I�iVՈX�f��P�����r�ٶ%UȂ�j: +H~2���Z�:�(�ś��؏�1-��#�N�oߛ�������{nx~����a�g���/���(��X�U�2�3ln�h��7�h��vzے^6,�@h$�B�a�)�_�C�y��H���ƶb�;�vE4P±ޙd=�M��z,�vu���R�����j\@Ox�ZlXoX��2�)�2�����g����o��_�7��u-V�L�~�i��7�<tbm~Y�Z�KZ\�J�������q��\z�h�Ӻ�+E��]���n������9�� ��'g.X����ʱၨ����@Lo4�@{���h-�_b��:��<eA/V���� oXe���w/j��n<��wso�~�P������������A����1��%��~lr��������KSvҠW��#3S� �-�_zi�K�^�PԦ�7�V��Q帾 ���`n����C��Z���}S�P�H�R徴�P���ƫ[D�������an���7�%�W��w�]��������L)��ǫ�,�-F�{>5���^�sZ_�vt��.Tk����=���錓5�h�����D������W�+.��k�<ů�Қ ��?��<����Ori��e�2ˡe�7K䙢b[s�zw��~�u67�K������]z��} +-�y����yc�+����oTy����{�^{���.�����"�sm�{�j�ٷU���:\��"l1;4�%���J����������V���D +�Ʃp�U3�S3G�r�H�X,q� ��x��4+�W-����� t�V��m-�ϯ�p���u�\�&=�ڔs&�X�#TӞGT�g0���(>{�<\�@���/�k�*����_���|�Ӻ/�hJ\lT��*��I\��O�@\��{����=^���x!kR�*Vgm\�*��U-��nv��x7Fu1]�%@+������T�`Un�C�\�@}�tl��K��i(HGH�ɓ���W�����9��g;�g�F-�x����S!du/6��J3\��0zSM*$�`a����Trh�$!KP��ʧK�y$�1��!����w������ؔz��Rb� P|��p�I?�"C�k+x<;�aQ�����{�XKf�k����^uW�p�[��2Vũ�Pw��v�x\=%>��8f�(�L$5�{�Hu~�A���~ ė^��#=��u�Z�ߕ�A������p����0�A��A��?@�I� +r),�k��-E'��L�y3Ⓖ���ys�y�1���|����C��t�#;��m���mW*w���Tv��"�=�1Q������A�.!�E�hv���-��)�ߒ&�J>�|eP��\��9�ڸ3g�ľx�0���� u��s�hU�7����a��f�t���Z�.|��d*/�TV�|��.����v�k���T�;a*��A �rS�?G��\������UyRkz �W����Aw��@��*CpT�\�R�*���>S@!�P@(*WT�yO&�|�Ʃ-y��8�2Q&�F�����L�_h��d��(���03���� in���J��Y�C�ȝ�t��f�@Sm%ìh ��ni@w�;@��;����#��p��c�怞gʋ^0@��:��t�@�3m�T+�vS���F`�����#�z��09n;h�47v�o�3���'{� X��÷��P� �8o 0nf�u�s�����wz�,{O�8(`�R#����\��|3�`ǽ,P�� `��)��a�[8�N��xm������P�㍭9F��Q�.�ڰZ����W�x��~�\m�5o�5u�^������ ��p1q<.�>hS�_u���#���� +)�d�ȀO���TW���|�O���E����O�-�B���-������zw��q�h�m��5�Z�+��k��9�����r�q����AsP��=��fP��LT�% �U���ڛ�B'@x*@�, "����>����{�icA�:���:��T���c����a�U{E%�z��T���c����q��ݱ��}й��I�椓������č�*!g�õ�o����/A��ǩc�q�ţ��ji# 2�ؿNh�o�?%��4�ӛ������È��ݺa�ۑ#�$�jBF(qM�$���Շ�K��$�qj�������u�g�����p~\��a'A��QR{��S�=�!�_��V���i^��A��� =r�:6��.������h/�ް&Rr��:��rt;���,���tZ��� �O�G�9*�O��?�b�-:��/v�m�)[水6v��.�X������*�G���W'.�ϫ?H�����b�w��b�����[��xY�}efz3N �u��B�^���J�ý��Շ�mb�W[f7�n�����O��:$V��x=��L+ɯ����e���[[�e�Y ^��Ş3;Z���Eg�(v_pw*��B��ZX��[Lb���(=ˇu�����<b��8�yX���bs�햍U~���w�n�����|�ù ������3lG"��^"�d��>1(L�Mu�?��i��Q~����@㨹z��fa��"�gg�k���6�k�3\��Y�gu�M��j��ۇUD�oK���,�������ܢ�Gq�b"�`է}�O-�){�$�<s���Nrc?_�`��h��^����`mЯ�D���nP�m�9Vy{38����]/�7�K�Vו{[`��9��u�6u���?�+1q,���"�}�0����$8��0L��4�k�ާFڶύ�����������Ggp��`�A�,��_�Ч��{�Ŋ=r���� +�m�H<�'I������,qu��:���X����%\�Ncgޞ������۸�L��\�]d���è���AE +^��|gx:�}��.x�{{3�;������W7�¬��?�`�K��ʛ���S� :+%!;�x�q�n�}����A���F�o䴎&��[�U���uj�_���|WC]�XX�=�@g0 �A�g�ɦ7�o���s��)���{�ϣw8�^�����D묮5���B��廦���q.�����]���W�<Q���Q�f���ϗ�V`6��Nf��6=�������q?뱥a���i CW9S/��{��X���G�y��/�ȃ�U��JGw��\�L3?���88���q�"m��`� LY�U����*�U���,� -Z�9���3��n�fa���,����g��8c���n���:{�ChNv�g��������LtS�����а�a�������fDm�%/�l��m���֨��,!�����Z� 欗b��b��\��뫎��~B��o� +���4��i����]�g*�t�z.�8��2��c*��yp��?O5R�ra�y��X�|���jM�}�6�^uu�E��%L��4���r�qa*��ƄZ�����%�\䥷�TN�L4Dsr>��IC�p�R��5Tz�a�0y�0U�n���9��(�;�����/\��Z) �����7���c��3.V6��ut+�C�YbqO��ʥa���0V��k �j_�T|��pc�9���0�?�����$�H��x�W�\m�u�ɷMNy8�c���K�ߤo+˛"tЖ�jy"ɧr��*5��,7K�w�r�.S��^~dK�t�YU+����[rW)��*`bJ����,ӜW�Tcq�d��*Is?V��i�|��u�O +G9�S79d���]�)�o���U�Ƣ�w���˹��5S��ʰgxF�zr�4��a ��>�/�;ah�ݩZ�F�?�H+�NH+?�����u4�V4�y%�,_�+}j6��٬�+�} 7�V(�|w.5�A�a�Bqsn,���(2���~�j����bYgm����B���2<JBup7�'^��p6��h���uS��!u�������ŵD����lV�N�(��_͍<�R�+lϩ6�G��{(�@�*Rs�jI��ih��(vK������ʵ�^$B>�z!��������b��d*V;���d����wMz�w���_��< ��۱�<}��tZ��E�dcC��v?ʭSy5GZ�'u�$�Z(&�5tLl�_���Ͱ�6g�B[�B �G�S\�f!^��[��wgW��U����D�8���n�c_L=ǾXYa_�k�}�*!ǵ���?Y⸋r��hv�M��a�fd�`t����T�����WnK:m +��.��#h,�a�Q⎨Xw�ЎbN�)y��9�F��x���V��~���Ϋ��+Љ֔��z0;&�$+�$���=f���F.�%F�}f*|BfJ��0���2���]w���*�%�c�h]N5����)t?/i{��~�R���r��إ�W�k�u0Y��5����rC;os|���I���p�����|��3���/1z��I�j�;4L�hI�nQJ���4�^�Ո��ӀV��(fnxu+�(6z�{p�Z*qz�>�6_Hsu�l�n|"VȽ���lXܣ�W8�b�;�M�Ί�/3���d����[x��-fJ/oK���Z�?_���U +�nErפ�.,#]5�$�69�.�.i����.Ɛ��^0�=�h�S���V�]{<�&R�Y���<��P�Cp�H�'r6��x��}��|_d"��-��2C/&��I�Nsa�ZϏ=�t� U���D�]�DV�yJp�p���鉶�S%������gpp���.x|`���F��}�����{ϒ熢 ����%�A��&>�Yٷ�W6}7OLto��%�����S�mT�ʃ A�UP'�p�IVq2]��P�~�s��#�J�vwE��!t�9���Ve��?PM(���H�[���kO??�=�t0r���wwz��o���Dd���٨A�F����J~q��:a�{�6!��v�+�ӫ�!�.�W��_F��K�t#bw��a�W��q�z�6F�IM�-6�O;�T�5-_��Y����Ω�U��# +zUN��*ˠ��#��/�,��z��z�� �v�����SrA�W�S���/���ݨ-\����<�Liv�xf9����~K%�:�rlUj����q�����e�bl�s��OyW5ke�6˨���c9�E��F���RF��_F�f�} g�j�ֲr������jB56ֶR�vZ�Q ��ƨ�gF�s��Ψ&���zN�*�c*elX.��^��_�J�&r�I-ĝ���&%�Rޕ���,��w���b�uS~�%$ra�gY��'8�E�.�~�o��-���_�-u��K���b͝�<�z�L�_��/��o�FotA��ұ���K�m�%�yN�w(_����3S)r�A�/��ãd���[Ł�Y+�>�fM�jI��ZU�0υvAY�Q��e��� +�թW��O�ё����ub���ԇ9�rc뵙zo2��ߔm�y��>��Q|�z0��k�R\��zX�xWH���Pޚ~3<��E������ȯ���GzW?�c�L]�g����� �o���C�9� `._�vnL��$�=v�i���pN[V�uY��lM�c�6�q��l�6� r��,gq�����#���F�p� +��/��$2���R�5��g0���������}�u!���M�_�0�� +�������w�[���ZP�������1�F��~DuF��4I\�� +j��"r)U��6���ƥ}�z��� ����{]Ȑ����%��A�I�%@�P+���q[��l^2� +�l�, -� H����9x��p@�a1$��Ze�_�O��Mu�w�2��Eet��f[{`ݨM�6hq�4�pQz۹/��y�(��3X(��cP��T;'�j ���M@ +���&���]�@H!��44�*���EP����Zf؞�K��4�7���"Es�;1����T�)�Ɇ��뉀4��������,P@{����u�̠��<����5�������f���ܾ���9���G}���3`>T)ã��������y��U���dSʢ^?:!��}bؽtj�b����'\�>+�k�%��OV;٫�^�k�� ��@,S�k���^��vz��SӁC�%���p�ip�|)��XD���"�V��a2�U��g'M�ӿ�t{����jI��t�5x�`+���?˂��OU���R���������\�z�ۿ�]�6܉ �W:gPo�SP�v�@ ��b��1^���У�oQ���|��g���qB�� �`�?_�����枆�xE�O��+?�v^�d�?�}G���u��;:��7'-7,$ډ/!g��ڇ���0��%@F�8�/�X<���/h爲{���J��ՙ������v���#X4�07��"x=���a���;�'7l4|%�'�D�+��K�-�q��cqX���� �?g�C�ŕ� D��x�������n!��b�<��]�l��Z�2��!kR�P-d��|Яb�OuW�������#S���v��]�5>;ۅ�9�y�Np�r<���`����� ���_��)�&������u�������+���X��qG���� +���&&����� Z���>�ݭK%���|�N��*yR/r��Ee��ؑˇ�e���m4�C|=X��8\E�1Z击�r�'�%&Dž ��NI�s��fG�Ef��$#�I��G�)s��'�!���@��W�����bt�ܜw�S�9�`�x�cS����� (�b\+��Q[���0�%n�k��9�,5gn Ң�ʙ��V�i▼i��?����&��֗a:�B1%㨱����\y����o�~�nE�������_��� [�[B����\��c}��ȹ���F6.�u]�������|�bӺO����<<-?����V ŧ��#������F�GڟoV����b��Z�p����ř]?�:�>y?�?P/ �r�/�z=�Ӟe�~�}L;�W���&�~���]f�etg����H���-��ibm��ýxaH��q�_f�E�I������� w��>Dw�4�>`��Jp?�J�OX/�sL�yJb���zi���>{�'�����D��,ˌ�YR�qG�Y�8;D�����7����o^��xѺ�f�ݗ��s+��1�h0eGEr*e��Vǹ���ra�[�-{���W���\���ӟh�Ǘ�V����S�9�u������n6��V*�����N�^�O��&��e_Yldw�����������b���S~�kc5P�`;�U�$��6��q��_�7���肴�O�9~N�OY��Ϊ,/;��ڹۚur[���9��S�"�>7��6�|����6�X�5d���*Qkl��-���?��͕uSv�~����1{pZt=+�h�v�E���ܕ|���l�;V�/�����tA���VY�qF��`B�����8�_�|ٌ,���[|wwn�����ߏ���%Sޘ�����>`K_kF���k�#�a^�Eݦf�~|�Uk��/���|_�7 �_&��v��� U����>�YO���쯋N�� +j'�6m��Qêc��Ƨv�A]|3�=�f3&�b]\��o���:���~h�� �,4{�D�S�ʪ+.�*]X])�&�n�y� �怙t���S�n�4������s1��!+���[v���iS���f�}v'���*S�ơj6�c,�R�(�k��B8[/�OkW��z��c5Kf*�Yn���?+t[��59bD��oA�[s�O5��7}J�t��b�4)Y$�_�UH�ME�6�OM�+7�B��X���C�Kik�W��l�=�eD�V����U�i5�ɴӢ'*��XU��U��4�m��W���P�+sY�({iZi_%�~R. ���6��i�����>v �2lM��!�_������90�Bvo]��7�V�o�[���i���E���~o_*qX���K�{�ś|.��cefTij2�$�UW��z��|��4`�W��I4�V��u@k^cT�c�0��c\w�;��$��a�����]`��:6s�q/�̎�ʜ��hK�9�Kw��X�U�+�瓬�����{� }knY��>ޘ'�P�cC\bU4�_KD�#�H9оՏ�վ�B�{;[0{g����S�4䒹v���]�%��@�����Y2�ǣ*l��Q82\GY+��+&|���*7����C�n�Ic)b�{c!<� 8�gE�P�;��6���Ǟ��y�.�ku��|�H���#!OƆK��+�<�6=�}���e>wzl�/����B�z7n�����E:Q0����}m i�[9���=�e}��|�xqO��9y��z#��A\o��XF��P��ߺ�u�ޣ�?��� ~rܭ��\�����wا��QY��� endstream endobj 33 0 obj <</Length 65536>>stream +3o���JfB05��YI�h��5�kz��J�L�K�L�;�0��0�?�WWT��^Ӧ� ��ɬ��r�K��e�]���Հ:��7�����n���Xa�~�Ǝ�� +��`���LT��H�?`@����=Ҋ�4�{T���)ݽ���,�ف(���n���yl�"\��]�� {����X�&����n���ߎ7�l��Wv���m�w�۞��'��z�Y�>�0#����Z$=;2K+�BC `Q+����w'T��ے[{��4B��剃4���,��@�⠔�ās�}���k�"�M<��sy���ٮI�5�(�@ +'�Ri2�X)i�zg�<�Of�l���=0R2K�9�Ii�y�S+#�PB�Ti'��ߕH�]d����;&�_�$�y߀~ �k���vM_�������dq�l�8�4Z�g�Vpz�V��]�ڃ�%�����W����j�{$�{yj�e���!a��$��������gr{U�5|IT^���8���QxL�]'��6�ȗ�/T�����C�j�S5���:�6W�a�^���/�Z-(T�hY>����2�8�pgFes��{t���ដ�g�^ܰ��lIϿ�)e<�S��ׄKx�.��q)�l��oY%��DR�q?��Y� 'e��6��b�[ 7�i�aQ�*@�����D +Z �Z�J�@WH�ٚ(hS�h4��}�#�3:��|���aRk��S����l�ĥc���_�%e6+3�C�����mj���X}��ꄻ���.TA�TЙi��R� +ha�*Y"�Vt�=��Ӷ���_喴G�r%ߐ�}��; ���}B*��-����3!Xj�H3�G�P����ʤ+������ W��E��&�#h���ޤ��z���Là�An++D>WJ}�Q�o������(�"�d1$����Jg��/y5iQ"���x��b�G]�E�n��=@7��r+�������ӭHZ��E�f������R.8.���{�v�����ܲ&��)�V���;F��V��w%r���DF�~�2��"�Xg +~t�u8 x �CJ{�)����l�x����/ۅ�Z�Qe](|e����]���]w��80ױ���|���W��(k<��9e�%��J��.��kG����� +]�k^�K�I�w����9�v� 4��C�8���]�P��Zh��P&r~Y������F�ns����ʋOv-��( +�N�C`'���a�+h=�ܴ'�Qר�PU���4J5���'��ϯ�Mx��RK-�.�붜I�U��|���E�4�g�_�Bw��*�.WYQGp0� p7���[�`�3$&���A�����#O����^��9�5s� F�Zב2���n�^�`��TmJ����|���"],L�`��U����ױ��:;x��kHnū��6���v�;7��^�'�R�8�(g��^�㰜�jg��N��'!�a�����T�9�s���`O������T�h��m�zR<�l����U�p�<U%��/&�{��^�Q��BI=��N������1 *�#��6s��� Z_=��0��U�� f�K�%��V���k!���^����/f�͉N�/�)���}'7ɝi��k���ʿ���N �Xg��%@� +z��ȵVȢ��n����T< ��7�/�V�R��y3�|�$@�P�i(����<��@騜����ĀjE@I@̰��aVj]����dgeђk^��s��<Sk�|�RMnh�� %X�_p�<���篟�E`@���_$^ P�9 +h*G���m����g:�7�?,��O�SB��!�_��<�����F�a�Z�X��2|6�2Y ��<�py�Т��bR�iTΚ+ �n��Pnq���k��L�����p`�����(�������J����%`��+�ap���tg�+���?Հ��e���(a�����>|�Cz�4}|<춫��` �܄gc�Q�� +��M�mÿ��K��n��oK�������S��o%�q�!���uu����Դ����>��m{B.�m)@���@`�M���?>������up�~��?�l��om�WT�<��J���@|�[7�zGC��zL��x�a�4�ʵ_����>o_��ʏC��>-Z�#�;����?O���������d���� š���;6 s���װ�T�X�a����c�膍�}BN���,��~<������[�,�/�9�=�S6S��5�$�gI���'y�߭mbU�[�h�7��7�uM��>*�C6/�@������rB=��t�ܭKKb^g�I�-]JC����{\3���J_���]��;ruXo��v�m�� ���:��g룰���R� �b-��Yx�|���9�==gG[(�ܪT�/���@����&"q����~Rc�}�^xa�E��\V���*������?�+��ԗ�i-���Yߋ�@�gn���QNg.R\E�]�G䉺N�D#�����$`ND��(%?�t�����ں�?�W�i����ޭ�{�y~~D���6Q��:m���|�����sZ��}��+Y.6;jŭ<��|u�8(9eb���O�&�!�f�1�8yg,��h�������t8 w6���S��6p��x���]?T�?�����xG��)��d�Mj�:���bͻ��T��G�δ_�����a�k��ߠ~���e������3��Zm���Ý�F~��]�V��������'���Ke�Ǽ��n �k?�v�߀��]#��^/{u���2�%qx��;�Pq����cSϢ�4� <L�99��!7Z��f`��p��;Ct{\�<���u�'/�M/�=�~?wA������O'���ȡ��d�k��Y��F�o��];�����±���A�3�A��>��/����<\�ޜޞ6� +i�8�Ƈ�膂��SE{��S�ǀ�����@~�%Z�wgw�&����3w4!�v��b���e49;���◀}��Qj�VH��1nX7����7j=�ҩ5�r��H�5[Vp������~ghq�TL�7�9��9�m�OO�wo0X�z�*�������Щt�r�t7����iK{ө�n��>�m/v�[��4�/~ k0���7ϭ��}�s�7'�w��ao���4�F:�W��A��^Udm+��%&������ۧ4�=�-��Ϳn�.:��w����n�^OA�s�"v��Ŭ�xe-n�i�^��Ε���hה�k��R`�}j@��Z7J����ݞ��Ұz� ��or������x�d�x�oI!՞�L���/6�䮧�u�jW��z�zE�s��½����N���f�׳��[K�__S�Rؘ_��d�=��W���!k���k�fh����S��j���u�x�Ҧ�Ht��WF_�1|�rPW�^���tkΤ�o楆�p�_�@�V,B���4��r�/;�����$i���C������[C+2'ݬ07m74���E�m�Q%�|39;�P�,[r0�2�$�q(�gg&5���1гќY�F�}g�%�����C�8I�bq����S�"B�yg0��Z��� �9۩�Zپgj�%�������Eo���G�y.(���� +�"�H�A��E1�9���������Tv�,��}G Ɯ�<�:;x�,�hW����do����c�,�ɶ�}�4'z�1���l���Q$?�[K���O:�AYmsnZ%|�GL���F;�]ݣ�bmk�{.|u>⨻/�^sZ,KՆ��������F�P$\u��'Ѥp�kC��3�_gW��I���7'q���f��#�l9"�b�����Q�K=`�F��u�Ze��{�0U�7f���r�3����"~�P��uR�L�IZ)z�צ5z����i���F�Bp}/��<�ek�w"����=�֫���Ȝ�� W��x����:1%��uT�"R��ENm�-E�.KK9u��l����HL8���d#�y�%=3Rz�N^$��d�'�d4F�48hf +��b8 z�Z�u�y��5B<o^�9��+HJ2�5���c�k�����=+�ŹV��u��U�=�fk�vxE���A��9-Ȫ�ץ'�q��yS�� �?�p%F��.Z�.BÏ.B�A=��c��b��n��t��1�͕m}�B�z�\)� +�b��¹�$�Ӌ�y�� �E������1x�6��DirKE������Xz��4̕3�qc⧽e�Ȇ��*��Z��w�5乀|����k���V��Yx��uK1K�7��]�>9$�f\�Y��Ӆ��㑒ukw�{Uf���`f,�~_'t��mS �yO���c��c�d�k�s|D[|_�,�}�8����)e�"�8>L�����q���6�}�;���pԠ&�;*����]���;�$sT{d|�=D��ם����w���������X��BOm��vz���vCzI�P��� 3����8��������G�m��U�*�Q۱��W��kJ�e_�1s\�{�U�d�V� +�H-|������n�YZdZnQ��#��F=OͲ�T1�oAA^n/� v����������%��+],�XC(�L�_v�!O R�U|c��x��������; `9�2'�g���S�諘�ѝk~@+��zh��G��W�K�kfD��C ���"�}�~Yf�zt����i������3��Y���N]�SEɾ�Rު�D�%�� +�+ܖ>���8�Y.:��S[2�L�k�$�]�{��g��QBP�$Pm���~�v���P\����AL�u���T�pܤO8��ELm���O�� +��N�Ѽ娃;�\�X�;�z�VO�f*��kO,$�6�2?�]�я^�9��&}ˆ]Z-6��4�RF{�"?�mO��؍�f& �b-GĹ�%��S#�����<n��#7ñA犭M�011rj����+�I +[SU9}��4J�N���J�2-`�CW���:ݶW�՟L����<��j��`�|�J=�l��҆��nl�p5vH��?��fZ��~)>�8qx`��ł�Ib�J��u�s��ZG�dw�6w�1�6� +��"��@.tF��G�mF��V?�^�pnJΩI䬱��Z�*�Q����(��cȓ-���[��d�FFo��/�c��vn�Yvsu�2�q�@�9A[�{FE��F.��t���i"�z~`��2p�����ea��)��}T;�N�S֑���.$W�����EV(t�):�T�/��U��m����,9��fW�ҽO�&'E7�.����T�WH�hu����h9��k 4~H�?���Ύ:k ���\��(����23^_O���^�L.ٌ3�����x +�+[]�v❷>�1bb��Sk�n'yX�7"�W�\�������Sj�!rm����{� +� +����lԻP\/�!�+�3�ve��ŗ��vۜ��^�|�H���R��X�b��}���.29��9Kހ�kd���c�g�p[t�|�n ����Z��ϗl���+��R�Fƭ�ӳ;��-x8�7�lf��bTH���8JQ��m� ��j�#�pVJ8)>�h��4���ˈ)f�>~:���M��e�"[�L{��N��~�ym}�#{��� �QO§�)�Z�1*/�<��_=�8v3�l��Se���l�b7�����1z�0�Ƥ�t���r�A0e1Iq�&i�)� �(�%`�s�?���{�a߾�)�Lk�i ͖���%z����;�D�RqG,���0k�<������?� H������4;Ka���{�g�V��_=�+d�;m���D��,��-��&)���>:`�v�����J���N���n�]���~�\yA�^-BrvA�g��C�x:�+�r�x�}@��jC'i��9�&X�NXl���5�;���#��֯7���� �9�np�/�u���Q�j�b��Uz�>����zO����4��M������.���a�=ę~�I/T�&d�Od�[v��_��'�����w/����?�`���89 �����8@4����9|�@l��@�T��Lz*'���c-��KJ@�����Qu�h�eЖ؛t�(�*P�q�w-��>�3̚��&c��z�?����Ł������7ѡ�4�z�"�� +dr�r`-�^o@�� o+ū�[r��}�n{�ǩ �iצ_������)O����5 5VKF���;�?�δ��߯x�O��?2�?q��s(s�Tz?j�p��j9K�/�V�]Ŭ"�@�¯�tk<�mƎ�֯��cX��A�������|�y7Š�|Z��ӈ��*�ۂ~��k����s�ޟ�����;��q:�{��p�1���0��,���H��>b��.��%��q� ��m�iӛ��؛�W�8�n���(;�<������u?�yS�#A�p��ap%�������S��cq�!���Ov���a眩s����v����>�Z�]������UH�Ҳ������{��0矮��[/��C�@��y�/܌&ϐ)+��u՚-�k��˜�|���0�u�x�)���sl���Sr7�����SYI�s���Y;tC�6�Z�hn]ϳ9���g��y�cS�5 �$�OOj�Z�U�����W�k��8��X�v�?���1ޝ{=����`,�M���r}���*D��e�@��!Cd��%�͜����������4%��UG� ���C��E���q�J�\8��p�^��P�$��pt����ǎ��]���ᢷ(c�YW�g�?�7h Y𠽒���<�j�P��i��Τ����,#~���������>|�8w4;��,:��81��,��:��GbM���fv�%�����6�t�j��0�CZ|���jۖ^�Z�6.D_����b��IWg�D+TC�E����<�1oy83�A����\�����aq�]{ʴK��e�F)�����&��B�T����ʻ-ݪP����Z�kL7����4��Ո\�ܰ�V��v�:�ȷڢ��?p��R��v ;�Z_�Jf�cz7��P�#� A�~��|(����pa� ���Zm�2�Z=%�4����4>Q��D��܈�CԀfI\���U�Š]m@����u��V�S@VjR$W�;�M]m�{;+��1T�\�᎓~�����Gi��Q��ٙ� +���7��a�ڡ}nP�V/=͡v5��n@q���(��%N�a[Ѭ��i�J�~%i+�R��N%�JgP>:Q94���-:���g�s^@}���glϦݴ4}�E1�r����Zt_��>-��É��o�L���]�d�md��u���6�i�o��<?��~��}��'2���ɔ�*�z'C+im��_R�蛽j�����i�eK�Qѽ�E�W8�%t�q��8�d:��R+�f��}J�!��CU�b>m��Ѡ�2�ՁE����]���ZUs� +��������o-��ߔ�5��Z���d|țLC̃�]�-b�Xl��{�]^�[�<�P��S���O?����>���nrO�j�q��?4K�V��GM^�:���)"��i�Ԩ ����{n��a3�.�Bm�G �%����t���6��xmZ����]���%������C�vpa_���e�S��v[4�ڗ-���^�� +��A9��;2O��q�|6�\�5�kU0�p��ҙ������)d�Hf�Jw���ft �j�D��Z'����p�ٶK�-g�����&J��]�v{��Y7��n"��OV��c!�7F-ڌ2-�Ո��e8GP2�����L3ұ�g��k~�9�J5[5Y�#�V�_)&��~��j��#s�.�o.֗>gs���/g�h�Bs5k��D���+Z���N~b~�eZ"��t�F�ټ����5��t߄)m��-��F)W� fU���r�kk�y�<����E,��λr��=�_�R�y����A���.W�-����={9�����z�ٗսk��B#?¯A(ۚi��m��2{��x��6<�ӂ�rQw��Pkw/������DV[Q����ܑeY�.�R��/�^L�W� p<El����GI=m�v!�f ++���OPT�99al夏 J+��_~Y����6�|>O��[2гW��U�*���b�n\�Ԙ*�x�RDt�ȗ��,wZ�t�A���1Iw˜�f�8:��b~\h�kSJ;������sj��|�$��=&����t��e�Q����+�7o�'��ǖ�#bG����1��/?�V�A�Z_aU���4�+� e�����L%��/ŷ���1Ҹ�������� �"F NƑx;w�y ��֚�78r�U��*s$��q$�=p�jM�g��4�2�mˮ��5S64�S,�O�B�s[�?Yt�ޕH��e~Z���)��ڑ��EIz���Æ8.�]13����'���o+~�A��W0�<�2<Fnu@�<�,�4�6IO+[�Nv?0���9h�i���i|� s0������X(�#Ԩ��|��j�:�� ��!�240G 5F�V�v�\�U�Y��uE�b�g�U��~����ϭ���+�zs��' �p�3[����ˬ�9T0�i*�2�?�}�<,l�пh��p�-�}��7�L} :,8�?p���ʙ��l^N��-�ܜ��h3���R�E�"��EQ��b%k���u�U���Uc�>�a��0dc;f��p�d|���9��OeS�hZ.4�1�[w;��!V�K���cHs�+���$���/�$�h:���8�a�γ�]ޖ���]���Z?�|[I������[�l�6&GIK�eݙ�4��*#�.-:��{��C#��jK���;J[���uɐ# ��<H$����&Q�MgD���v����g���Ϻ�9�M�w�' +Йh`���M;q��~���"� +�Z�,��KvՒ� hAv� w��:�7��ֲ�N��Q�j��S��o��a?$��rHf�%&&[|C�ډ����=w9�8�y<����*s�a�ؚ`D�q��z�my��U6x����;F�}+�zx�V���i'Α���?�����_�[��� +_��"�[���UL�%tr�p1�p�R����{p����[56K�̿�qa�#��vJ�\���s���~��F �<�> ��DR��]���|xEy�EІjb��p��i'�x�������}�p}�j����\�Փ �ȴn��h��dt|���u�Z�%���UO�j� �6z��ڸ�(?�l�sqsFB,�IQ"i�Q�[G�ឲ��i͛����k��j(�g�؆յ{Jq��=�c��<�4���:��]��8u7�p�/e�F�/]�*˝�VٙC��E�@����6� �r�Y r�[N�m�w�х{'"����L�?f_����\��W(z/mȎ����ef;��;�pw8/g��n�����r#�S�� 푿A'��7�8�M�ws�is���7Y(������E����nZ�@U;�F�^6_�J�Q�B��� ��Afv�O3����D���R� +��nI@h���X�ތ�3�g��1Z���md ��|����g�a�E�'�8]��<YRC��X4�a_H�>�N'>V�=�Di,X��]h�j�2�'���)�z�r��jH^�(^Rl!@J"�b���5R<�T�o@2֯w�d� + s��Q�[�_����$>�0g��[�S��K��^A�"fm��U��mӊ��<�e?Ҿ9���*����0�n����b��P��H�ڥ8��+��KP[H�h��ր�3P�� +��N�oE����+��0����`)� 5�?�7��Ft( H�u�m,���eY���R5EbBk��P�̾���4��-ƀ�:3@��[@���Q���>YOOl5š�7�t�Sls���m@�.����-�t�1�h�&L�%!5<c�o� O˕�l�1�T�1�����.<�/azWf?�v���M@��&`r�6`�z7�d��k����L��πy^�ed�j�Vì�:`uz�bs��a��v,��ɯ�Kl�%W2`����J��'+�v�C ԑ�q�����%N �9�靧�X�M��B�?��Փl���9�ĝ�qA�����������J�p�a�mр{W5��>�R�8X�~�O�2�!���n��!�= +2��x����g�� +��狙���Ě���ޣݰ���7��p5Y�[OA{����Y���\���?��l_��C(�O��I�&_�"��ݶ3Jq; +s@�y �D/���g"j[@x%u���sR��o(�7�� ����<)dna5�������u�~��A�Z�!bc�o��?Z�W;E��ԣ�|Cx��UW)N/ �]Ȍ�Y�')���Z��U�,/�6TF���1O-��e��:mA2�=���W��ҟ���J�+�����o��� ���^�� �Up�ܢ���]:�Z���G`@�w&Pw��o4Dŀ��6��Y4�>�&�G��>���A�d���F(W��̼������l����n�d�8�Y2��.?N!d�NR��w�,;���ϺY5eM3Y(Mw�6��&���o��9[7������Bz\�'c�k]�&����U{D0KݑٻzIė}azTp +��~xz����z?��wF�B*D۵&N7I>7�0Sx�n"�v�/��*ĉ��V��Ku/A�!o`�OX���}��b�Z�!Qq��������gq���e��y��z�p;7��Q�O�}D�?;�!�w��Mb4�5?Ӥ�Li�g-k.�c�0����W�j�0���K�wM��O�y6��0|6���y��}h,����'k�H}���9�_�C���3 nC�9ޖo���/��{8�42�9�ۙs�.16��Ĺ~&�� G�&A�!�cifF=�����M>Ï>4�k�����0�~l����m�{��t��V������t����$��S�������{�c�[�f%��j ������P���syW�j�����u�C) " ���yO��?��/p�a�����n���Tr�N����ਰ���9��P�y�[��h�j����i��L�3�؍�o� � �W��k��9{��;̚��7�1:�t��O��C � �D�$��٩��j|5�|��R�u��VOU��s(�͡i,���iD��7l�q��^�]w�5Z[7���I��n��*y^����,+5��U��ά0/���q _=y��8r8 �G�̵���s����i�w�Y�+P�x��Fd噆 U�z���:�lٵE�_�a�~���NjՀY�*Is֩Ԅݰ�\�Ӡ��U�?�c94�g�6頥^�.�4�,���Џ��I8�HX����j~�:o3�$�����pg�.mY?��C �6����|����*���TI���]$B�;�v��s���қ�J�1��z�a��Xu���|�ּ��=�X��q��,��xv����u�[�v�}�u�|u#�R,�/f�:_�����tv7��|cԡ�#�y�b�G���� �^�|�����&�����d��M8�x�=<ۀbl�K�"�{��]��g����],$��Z��=����v3�^lA>�V87D+\dKn��%�F��W(��&�o���bᭁ�k�Ri���w���f؆?������{z8�v1>M����.�.WΆ}���v�,�!*�q!g��<a�o]Z�R2+����j��:cs4�Nf�!c��:�(Իe���o�d?)Z��Aq�ux�6Y�T�ff��i=D`���}Tu�1ṄE�&���1�.p"=�[]qj]����,*��R��%��'ϼ^��Mos�x�f~H���Q�T\}N��zn�i+3H�2�}4b�2�F�j���)&/�j�h�� �"�����M6>�ϥ�n��Co�$�M�Є��n/��-�m���o)s'��j�|�힙�w�f�?�S}�������{��s;�ʜ�k�{�1�j�u����ҨB���1or{}!d�Ҵe�;��R/�H1��葛���"8T��ѷ��� 6�� ��M�7|��Â瘟�'��L��Λt.�.��<��1 �j�6�H�����Z��e���Eil�/���������4d�V8�z}4�g\�š{?�&W� �3��E�\�H�}>WM��v��1_��P��ʾ�t��pl�=����<�LKF|Fl�bC�Y_�֥ZA#���2���aS�/aG>w��,���L���ZJ�� �M|^��ԛĸh����`7�U!�'"~F����p��6��Cm�O�{��/B9t��?�< �~`���v�}���b�f�U_/A7[���֦@R�n���ݒe��J�}6���_���P���̈́Iv����(dГ��2̻�������ָ-�9������c+�*�VJ-��ɠ�V�"ɰ��i�t��W��/���?��'��Y�kz)T=�f�^eM�4�i�'�þ,i��)���-��� +�$�g���]�GO�1�l�s�d�G��zWv�\ҁ�)������s����=�����`�It�E�5}ґ}�Ƈ��=�,�k2�B��˕��B'�1������U���bɝ�]�t�.��������D4�+�\�%9B,T�J����Y���X�z�2{]��yb�Q��O�F�IA��[�R�>R]}��TL|����#�]�R�uB�������i�Y �G����k�Qz�LK�P'�݊�Ϯ�e4S��E��?�`�>$�^U��?Lf_y;L�ɕ�S���mSStƴ���u�T��=(U� �y�?09X�6i��&�1�=��>f kP +��!>��A|X���ї�����/cm BaļJ[c(/P$q�J�&k���H�=��M�1��\ L�3U��c�ђ7�������Q!� +�J������|��u%"!�%�ˈ!�n��c'��.��8�\�EY"�E@�8�a�?0���;�ë�ﰘ���9����;>���V;�"�՞#�/����%�M���C�M���>#G%�v�$>�r����2as���$�ӣ��an��va����[���o(���jn}��\0YD�`�]r�����rs���傁{ɭ��gE�6���ž)���wd�X sR ��+�����V^f�=O��*CiI�f����'e|�#5<mm,-;���U̿�C����娕�Gw�����Z�~�JC������2�c�5���FiI�9��9���:��ؙ�54Ҧ�gï�-��d��E�h�I�+�� +T�QfI�VJ��vc�R>r��A�U�7�=?�>"K(�W�)�=�YM�Vo����آp�R���!�)���C �l��ه��`�vI+XX�i{��N� +��]��A5-J����r���d���R��J$��0��#\�$�wzr�$�mF"��_7O�V3�a�Q��(�8���A+w������-�{�Yڮ����eƱ��#��̴3 3Ӯ��2����+W`߉��D��Lc���|Mq��?0�T4�ݕgy�S"Tr��J<VFo���(����p���!�Yc_3�Oc�@�.C����� +�˸�g�yw|l��؆ɥ��i��mU���Y�8}iV�6(76�-R�X�|J{}SFcU��}�5�6���V�6s�ȴ�E�[B'~�`��!�ևGB5b�#�k����PְU�̢*�븙�tS��)��7�I�n�f� �a���(��5�<������ʪp��Mq�����N���g��nٙ����/��� +?TYnMy���/���屵=�rl�R�0�$X[,�,��L�T@Ȳ��6a�N�E ���w�b�S�瀨f)J����:�Jq������7��)q@X�9E%�M;1J��N=���<���d��/�s���8.v��OM�c9:���M���C�����$+��ʀ�: ��. �� G�:E����2N����O������R�,@�F}@�� =�;��3�x�J(XH�}�ތ����� ���s�B���Z��mC�Ȱ@�� @>n�E�a��(�QT5=oT��T̍�T��m��� +��)5ET�S�\���2�:�=@�� �6&��,��?�M;i����lv{�Y����<����s<�W������)e�q�>S��̠hq��t�� 7�=V:�^U���L���A�F��!H�[\�� �������X���$�t�:`��*�3����0s�Vn��(��ي�r��z�ƈ�rq/���*�:L���[`�k�(����b�z���r����?�����`.���%��$'�^��\�@�mi)�%������p���:~p5+ݪ���ӷ$���� ��K���3OG˄~B�Xt��\:D�^j���A��n��;������?V�߽,��_���`�������P@��I���b�B5}3�z��֣�P/���)3 ���b�!�����n��3���D�/n�q��1��*�\o�?���A�䏔���.�����E�鷍�oo^�u�"��\��8if�R|�@�OU KM ��Hm4����RdT%�>D�C����f=#/<w����︾��zr e�7�����Eݾ�(���p���{Q�!����/��,=���PٻT}��b� �@��"P[\������Я����pӟ��=>��x@���O��_�>�<���$M������u�~����}o�{�]��3;$�#Izq�[r\g6L\�Mt�_���_�j��R=w���������k]�ʡ�3��98|wV��f�إz�3�Ƴ���f�w�,��[��O�<ؒC��a&F}�ϙ�*��py�G1�ų�LƉY�#��Ρ�z�9/��;�o�16��i�|�IR��'5�t�0�\�_kd5���a��u5�i��!6�4���*�M�0�o���e݄��JZV���h���#�#g�B�3d��o+�O�Y&?���Y�^�$�_�*\KG�3��x���C��9 >�Gf`g�����F?.B�^z��ݜq�d�_��]=�,'N�������`�����=Wclx�AM��G�C����y�l��C�vx "m�����s�ߡ}7s'{���|4+u�%T���v�jP�m/l +�y�_�k�܃�v�g�m�݊�I]��k]=�13Y�py����kWر�}p�gs.|�@���w>[��D�z�=�.�:�;I�u���M����{�>�3��t˜Z�^��R_Ļ��p��8d�3H��(���q)W��D}T[T_�ڢ��5�[����7�au.̽�{܅tpmd`ݻ����<:5<y����!�N��pC�z�+�KK}Pf�����'b�����z\�ku7Ƕ��J��|RD��kΫ�1�Vjbx�0��4�,�/W.���X�!�[���S�6{�ۼ�����Wr������ؑ�6=��& �-���5�<��Dž���,2�����B�m���a���!,�ASn��s�j�C�m��e�=(�n�yPҠy��o���Y�+�&KgJ�٢�l9�E�l��E�z�x2��H_�b�V���nږ[Y����z?p [�[���AS��*���,=�q�6�7% ,�sr��&|~y����GQ�d�b\��K�|�k����b��u�8�}�6MkK����C���YPY[�OE[@�K[@{o뼼`_DG����w��ұ�VRV���;t����4���fV/yQQ�z�Jo]2�u���v}�>s��h�b��ٹ�t7�BM=�����ML���SQ�d$��o�N1�ᛆ�ܲ�9����ɢ�s���4hQ�l��y��c��g�W�T(��{��,���!����^*����q���v�Ϫ��P�)�oR��?j�:GN� +��8�U�|��^��81����6����4m2cD3>g��*gd����Q��Q��Ֆ�}��{����n�uIݔ�uS��) +�� +�s�1o�+ c5���^�+�:��Q�����m�i�5�4�K�i��V��kI�#vQ1��eL�s�(@����d��\i�Yo����E+���FdX���Ҭ�(�㠨�ǹ��OPi.���M�JAI��<����q�4��5)��;oZ\�BX8HJ`݄���>�9.����X٘݀�s��r��h˧h������Q��7T+�x���d������5��|ԏ,Nj�t�DI9`��h6� ��{Z:����{/ +��!� �$��������L�z���Ϙ����նe4SΛ�Q0b+��ʊ:&�X���i��Duk�d�^�L�AM��mJ�~����Ғ�a�/uma"�Y{����� .� ��,��(���� +x��q��{�-��i���s�n�b�fD??�y�m=�9�������?2���n:���"�̼B+�3�+�M�r�����$�����lq�}��+��Xo Vk� q3�c(��?p�q���A�1%�z,�C��I��-S3�S3a���&EI���p�Ż܋ޛ"�Gvj5� ��u?Y���*Js>��0)����$�8ȉCq����CWL����6�L��p�*�3b�]7���K�e��-zgj�̰ꆧ�����eҡ����.�P�}�P�c֣.����jx��T�Lg~s�Z��$~�����<��Fy�XEY^W8I�gHq��h�f�x��<�K�Wx�]���4,�����$�q��E��V2]�HsimI7�5-fg��%o +4y�\,���MR{���k�~��#�u1$�3�"�����8�����p�����������z�fʝ�Q�t����m ![�mB��7� �O���g�a�g�nAg��N]�Cu8�L��v����C��sR��u���ќ ���1�����%������<�B��B�h��fAdhtWi��W���}��}s��Դm�,*��kJl#��"��i�Ca+�:�ԋa�>�b���B���zt���_=��*��n�&�:��U�D����4'x�Tz�p{�asYQ1/{�b��;ɭ��%���LnU�7�ܸc��. dr)�����t�s�ZS��ӕ��`�o�/ �U��VHg+���hq�|(%�aR?��n��ѹ�,��>u"w�������[R�yby�cXf�ɭb�+�U$GrݞZe����3�(�2j��V{��&���F�gl��f]}�ͫ_�[z)C����e���<�+����� Cj���lG��'Ec�P1�t��4�\y�.��ʳ�&?D���e��3r�KY�I�D�IK��F���?0�2�}���Kx�����0w,�*����m�vE�����.���ռYwZ��$v����\�̇/p.�w94 7������0*#��`��yH���#��#��,��=�ᔄ`����;JSl��X�e5�d5�Y��&�a�v�W��{�n�95��|�)����7$u��%v��3_Q ��NP"�Lw�,�p8z�ɧ�A��E��O�c�N�(�7`y-;�{TR�;پB�?pV{x;hdL_P�$&�|f∭L٭2ّ���o��L5L1�~c�-#4'��C嬫�d,����6:���4/=$�4�M���hØ?i!4���� ����G��g�r���䈇F�F��e8��LNf#[��C�%��s�!r���x�A���A.o�v�9KP@��� '{�7�;��H� ��ܳ��h�f�_�7��h�>o�,��0����J���hd��g���Y⦅*�u_A.b�{/"(b��{�]���%�y�y��'�0��5����F86H�h4�ijR_�b>%�F`oO#�$�c�(_�R��׀�K���Ѕo!��I���@��i$U�P�8��./�j��p��)4;Ǔ�ש-^H���x]��V����P�(�� I���`����7S���Q���,��0��Ӏ��( X��6���}y�m��݆�s8�~�ڀ>8{@I�����1�*sLM��6�WF#��Ϛ:�B_%�N6��&��\*_W�ܑ���6�k�_�xf0E?0V�L�/��S�{���36`���%��攞AYs�"(K0���+��f{̶ �4 �$�̊+�t��Aۛ�eXIj��2Z��Z���>]*�,'-��lP��u�2��%̙�"�H�9��#��S�����$`��ԗ'O&`�A �w�8P@����$oP6�Pxlp�=8�7�+�����෭�;�n: Y;k�����h3n�a�Z��y;U�5{S�E�"�b�Vx���n����ʀ�� +��Zpv��\~n�d�)����e�����k�0|�y���+2_қ{[���e��9�S���F<W����[�U笍iޛS ?�:�hjB�ȗجW�RG���+\�&��hX���~�t�c�L�_Ix�靈��J�`�����a<������>��0 2�e�"뵁�"�U�D���O��a%^��ᵨ$����Ӄ�T�֕�D����otH�D<�r�ҏ<�ճ%�&�ԩ��n������r��~m���{zqc���й=~��Ȋ2*ZPf>���H��7�a���.imπ4F^P���սZ����h��v�ҕ��$�κ�`7�H1�V�>�k��3����|���c�؆{/@!�!P�3����93���9(���[��$�@y�L�l�M��rG��((Ӆ�c{�$t�x5�3��I�R�g�_��s<K�-$���U�Nd��o�CLpcl'���S� +@k����4˪C�N���߁n�,Е}�Lt�-�%(�\����]��#[��M� �Ekd{�g}w�/Ύ�]�������������9����u����� �s����+�e�^�9&����� �i�f�S��m�'#l�W�9���������u{����*�.��L/���<�;i}J���q���a�����{t�R���Y�j�n�ݘ^����*��2��2���#y1wؿx���#���/ +���ߴ�F�U>��� ���~�a]�X�ӄX��CL�*���*�^z�o��N��j(9�eԴ���C�.� ���B�7_9�xNO����7�Cn�'g�L�)�+b���bt��(&�x<�Ў^ѿ�տ��V�czB˓��^77�6Y��z�؍N+�4z,�F�5��h�":=dEr*�9f�`�o�*!��"���m�w"9�����W�8��^}�N��~[.{�<r���<ޅ�X���˝�'���9�_l]}E���k]E˅ަ�rK�y&g[��Οz�e�����6w���#� _�FC;�f�t��u��g����揷�O_�.�}�;U��t�N� +˷nmMk�ό��%;�f���6���n8X���hEx�Ia����y��{senN�����oxo�n=z�c�>9W:��6ѩ���n��\����~j͞yk�t4����AÎ�q}������:���,-^�+?V|��lk+���P�|h�*e���������c�?�$���a <y|+n��<�=�ܪqj����NO �ݼ�'�NPGg�ʋ�e�_]�J����P� +w�S�C�������[��V+�Z�Զ3؉���s�B�x>-�h���2_Ȼ�m�w%��2��̒�,��֎yr���7X�tU���Q�X*��υ�rU:��s�<����mJ�z,�-�^�����K9H�B�Da�t�! +|>ZU������讑��˓t.+��U�V�T��m;���K�0$�Lթ� �����cF�H����5�56{zf�+s+�[�X(��ڗ�f��$����M������\��O���U�������6���CU{�<.��̡�b�M��y��n#�QӷY�J��i6�.�T�h�R;?:�Aΰ�R�am�r����6$�A4�F���W�B�;SX�aT��X\:�UW1��YLzܝHe:�_ܗ�&�n��Z�W��ۤ5NXk� +�u����S�9;���p����qx�'5�`mW.��yk�Jf ��$�呵�OV��aV�ql����P�ki��-���>��6��I��+g�͗��5���t�z��t�t��+�`�i?xʂ� +'\3�3,Y�aݒ=�8�M=W��y�=Lf��,Iܷkkչ,���!�N�N�4ӞlV3aʔ�|�8�3�Q�FI�p��U(ۉ�(s���>T��kQL� +��&�*Ƙ6��Mg0���Gޞ6FP��dcBFJfmYNQҰ +n2i1X�Ml��|¯�ʰ{��E�<|�]SJ߇���F�h������g���lH-���f�*c�=D.����(5-���1PG��1��KlR�{*���+Wx�L�^�� ��%���hm2�bs/�bm�I��.Q��y�^eS�<��BlC}|��}.��NV�u�Lյ������DKj��:�cg5�uްC��dZ���z�(/1b(�ݓ�PJ� +fʥ/SEuY[f��RB�G��s]s��8��s+�_�jb��q��P���1�E��h^<~.Z1O�}���JI��犮%-K��㴚ꌳ*�����i(���W�Bj&��ͽLu����4BbWMU���Xц}Qăp� ���p�4(�D�u_T9��/L�����Jjh�361�&,nwQLx���7#�D�F�����l|�V?����3�"��̌@P�E���<����$���Y�ħK��6�}?+yj%���Y��g@PLV䯯�˷Vj��� ���J�x���~sV���m��}�6���d�g,x�?�y>�d��qV�-B���HE�2�y��ӡ�\d�LS.&�J)q\�+Ղ$���N�#�G����� +����g��@�\�2��K\7�M��:k��% �7�����&k䉯oOk�غ�t���|'�cw�,iorC���5�W��K���M*����Ń��� "�^A�I� �,��y�*��� �K��"��&;,�#�Ѻ[�ȓ��K4�~�8�ɝ=�1s:�ކt�sH��J������k\���*˛R7�V��䚻�R3���5P�ʂ1�0$��x����*���3;����C.��"�2;(;tH(G�u +�^�X�H63�r��V,�酘^����N�M��֩e�*�f�b��)�����7���*3�PjO��N���v�y�T_OC{�Y���K�k;B%�Yy�Ҙ�;����=q}���w�}��� +�)mD�{+��(2P�2��� �\2j]ϖ��2�Pp_.��Ի����;]�:q<JD����� dCՉ����2(`��"�n��8�#q5�Tֺ��qA�%�k���ނ������{��Xp����̃^L�'M�؛Z�*֒4��9��}FYS���p��l���S���τ<� ��QT�6��G�6ǮP��-�%��J�~��:���y�iSt���5���۩�f�W^^�Ӕ$T�\�7��������E��%u<P�x�˄c@V�cH +� N%� ��r�Qp���Ư�7,%�6p�j��D�q�DX�IX�le�W����y}D�2���~K(D;[v��ԇ,6����M��:��iʒ� +ҞIx�Ԏ+T�Z���ۀM� +7z���Ԧ�;����L�ދ�/���"�������P� +He��p�cPEô3@��d�D5�L�6��#�-� �?n��`n�\�0�2.������i3��F�b�g�Vgɔ*o�/ S��� ʛ��~��'��;M+̕<��q����ߚ������� �36N4����� �`����23(� 9��ڀĺ @�� $�d����n�6�J���ZB~�9�VI[ů�*����tj�q���(�z���� ���8�v�vYܰ'�x�#��F�j��`�<������X({��䐅���E(OX�:��r�rӠ��S��<������^6��N}�A�S�5#@VY-�ߓ +��Ti�x��B)>Qjó�M���^e&!�EV@\0�߭�{6�:�,B$S�|�%h!���̘���� :�rP����Ճ2_��P�,���ӵ��_r�'@����-|�ao4�'�F����0��KJ�jK��\D�Ѽ�3٢�R�r�!.������^�B������7ߒ��`�� +hp%�R�����( �tڪZ� ��r;(�Ц�C�z��C@K�;�W�t��h�Hn+Ş�Nz�\� +���RZ�I熛�ed��v#ee��� �A҉д���2\����E�!8��2 �Kn�ݔC� ��X +0��w���7csS(�#`<�ڕ��%���w~��~�:�3{Kr�a��1�l�"6ֈ�[���bA��l�������~� d���O�K@�5a �&��"`O 0O�,�8�5�Y��a��D�?�`�X��66{���-������J���ߎ��y/�]�9pu�� +�~oS��4*�tI�$R�<�cTsL�E���)�P9}��"`'����ւ�����7؎�k$*�[uۀ;�����P�/�m4�. ��_�T�nF���/����?���t�u� +��V'g��[�d�*�x�<W�iƕ��X)�B,���VLpc[���_lZ)~��>��@�s �֛/����}^By����!�_�`] ȣ� +���;Pso�!)�[�T�c��"�T����D��-�����%��������?77�q�-��r�@2緿��P�R�s�,�@���@�c ٗ�wTR'M ��H�H�1"��E�|�t*�ڛɫ ��A�E�w݃{G���WGK�9ȱ�V�&���[���Ӌ��t��RS8�,f �,�"��(��(#�J3�Rڌ�b@1^�ױh�����T�q��><\֪h�)T~+�ͻ�Z� ��"~7/^��?~;_�����?t���/��|?-���v�P� �>�h���^Z�Zw�׳�x#����a=��7@���u��ɿ.��4������࿃����w�����K���/��&:���s�,('���L����/�}$`��������e��]��m�逮��J��כ�^�̳uҋ�i���ǹ\Vzj�/������?���y,�������N���P~}�%�$'-�q)5/`H{�̓�̧GҌ�6�����!T��j'X/���w�����W}���Cr��Szч�zv��6m�-������#}������,'Ġ���\f�u3������!W�O�M�3Q��-�7������D`�C��W�t�3p��m�.�ص��Ρ�㠁��[��&�p�Gfu�O��}�7�y�_���tA�f뙏T��*�?������ۂ����%n\4�*6��9�$yf��b�6�/�5�v�Ŷ����n�*����Yy��@�Z�~��j'+���i���w*S��te}�yr<#k����7�����QO��á�7Q�D]�8H�f�OL�f�^|:]��:��k��Y�!]�m��ش��u��������%>�f�-D�aJ'��,/�]b`��G�F쓽��<U2oV���/u����zl���☁����w����>�϶r��[m����ۚm�;<���a.��$}I���ѫͳw���ů���j�����m�ݭ�9*�̼\լ���w_ �H���a/V2�B���n��E�/�psҊ������iKSe�C3h�u5bY�T�7�����28U��>(j��,^�Y�~C)_y�\�mEbI�j������V!���C��|�����z�<�sY�ή��=[кd�(���.M�OF/o;8+�d�W���C�yr�Vۭ��*>7���&����XLD�Za�[w���>�GK~�wi~�G��9���[�8Z���~���f�k��|����t�̡��3�{g��1�wU�h�o��4m��)l�X��s�T����z�� +�"�A��� +kY��� +��]r�����e�b{���w׳�C']��md�欛_��۰7SW�N��m�ئ���6p����Gʢٷn�3�K���=�]S6z��y�;�d�dNI�5œD8�$��f�$>� �M�~�|���~�iT +���l������n#I����iŔT�{k)���4\�9gX,�~p�a�U{R�6mWltl��$��4�U��$q�֪K\-:�^�����3��4H�U�+�q�ټ���m�a�w�ʔ�4<?�5L�o�B����]��6�R�4)8ιF9@�1��_xr^{Pɬ�b�� �U�լ�!',��L%������B�����aܩ����cJ�n�e����P)l��6�Mo�:���֫Y�f�ۚf)��f��G r +ʽ���5�ckmY�4ۭ���nsGX�GWew:��>!��RK�O�J�(���H�{����PԔ�4�3�3^B2T"��U>�L�т]%���݂f ˪��mu��G��&�Jt��" +�dy><z?�<�]9�&r�%x(��$[��i6-��X���Lj ��] +�yJ�Q�*�oC+<���~ +�{y�эA��=��G�\Q�X�����ͪNm"�@^i��zH(�u�����jr���I��~."�$1�f$�ʈ(��fF��d[86�[�ج±�P�ղ��ƹ���n�ɧc�l�2eά�ND�r�^��KK�*wu�utK<�Q;�R����lC"�eP2����Y�T���Ē=[ܭW�X.�. +�K *SA�n���|s3�y�����X�����r�Ġ�)�y�RW��R��%e��%ļ�z��i�=�Q��z���_G���G9�BYO.2��ܥ��E��-�W# +�5!��+�voI����_N�o���p&u���|�w� 1{�ɷ�2���a��d�g��}� �5���a�I�۾=Q�N�lk�>S�P��X�0u��� +��w���g��l��L݈�ي? +��t�s�e�����I��G=�s]��pf4����`,�ڂSf��j�I���A�}��̜� 1mQ��B��9�/Y���$�ܮJ�(t�[�Up��*��'�ײa�Fs� +o�P��]�F��(vݽP_�5�M������8�s �d_�镵�у��3��ɱ,����];6��� WjR+�7��Zp&�v'}�$7�������!���u7I�_-���t���m"&��#閵�U7A#�j� +%��x[>���{L��V\���0�Y��8�a&hrǠY�@{k�L����P�ԕ� +(.Q�^}��N���g��>֘8l�'��Û�ğuB�>~>�S�Y4��(Nu����q,u*�usIF�-S�k�6�,��q9i��^b�y� ��=r����,~�b*9c\���*���7�� +�gG1~����L��~%�!y���p���G'��GH�E���o�����\��v������� � M���U��F +���寳�a�S"��L� +?�'�5�%4��+o�g��-��jK�-ɰ���X.,���۬�������@��NH+9�/�4�7����CHa�Y^a��w�a&i���z�B�%G@��-�&�Vy���^ �k�:�i�:u�u/QCԄ��MQźyRf&[ J��߽������㖙R�<ƲjF1������)Q�̖�������k��=���:S`f&M�/a ���5�&B^J�Md�$5+�$0#{)�sM���_�`f��@��I�F/S�� ��fj�%(��X��HhjQ�Ǽ;����^�r+j�d���N�s�*l�أ��c�myD�����s�@>���� [����<~��DU�o2��<4��?_(�_`���n|��|�P��ԻIU�]����tu:z�r� _�\�G�}\�Q����tb2�����ܚܓ쒨����_�:~ݢ�hs@"�{@P9tD���rF�r,�������!���g���7@T%�z��"���N��d(�3�\ˉ�{����HW�Ȟ��zS�����'�,4n�h>�Y�)v^�����g���Y�z���������G@\K'@|�w(�7 "��R�I��d��Q�����z���y@bb�c��~o�����6��fi��Ա�ɛĀOnD�,�{y�Mݫ�_4_J���h����L�p}�n����d{:�lpdnvd�t����K"� ��.�$�,�P:E@^@Ju�+��f�m��ȩ9��c��{�����%#A8)Փ3��6Q���p��~�A�x�Am"�J����Pޝ�D2G����Ty���\�������P��\G��Y���~x@�LJ' �]�<ۇr�~I��Ԁ��<|@5�K@�J��\{�P�bQ��Q�-S�����Q-��^�OR�;�V�_⽸��n��*{�n�a)��{t>�f6(�S��zTV���%�arP� (�Г�J��z���MU]巀�>q@'o����`{lP����ߒ��|��Q���t��d5�� ��_�گ�l�V���.B@�_��o��ڃ�B�������3��2��"�P*K��7��+$`֔���{L�����/��+nuG��U��Nɾ�1��N+drT ��� �JB�,Pl��d`����A�^��̡F&�Ѐ��7ؗt�N|��yptT\�Ԃ���.���C��5�ޠ�\���������)vÜ�I�-*��I6���$3�ꍧ�}�%t��1��#�l����W��?�|S��oG�?���O(9�{� +��7�m��� `5�/��4�N���>�}L��� ��Ó�!�oz6�yg��Z�G�2 +e� ��j�_�S�?��E��e�ua);+�9pc~���[��]����Kc$a~RB$�% I\H��kjĭ@q�y@쬆@��Jq�*�:������8I��R��%;�����xr.�W�����p��16�ވ�Bp����Hg(}OJm�����%���^��@a-(�X�����iU�˳H�d�xȧ6�w3�O��������.��_��7��Bx�3F��w���|� k)�]@Jc� \�h�-�v�<���hs��`k�����V�YƢ�Y���z������ ����c���wc��?t����F&T:qzC��m����6=��)!��X�������Łя�CB_�E���2�xΩ#�������(]��~����%Ȕs�!�*��G�|$���~��v��؞3^k�,�ݍ�U����WC��/':�Y�=� Fv8�gb�[mZe���\M��p�<����� �>"[W��Ы>��iYǹ�������kW�\��M6��P�e��"�����7ۦ��\�ʴJv���[�;pƷ����ei��/�á������̽��OtoUX�zv{��k�;�.�?���4��l�s�%&?x<�i��*�mn��*����aϟ�`ޜ2���A�c�X����j8Գ�A�s���۹��)nq���g�{�*�t����ve�S:��n(#�uk�K-�%u�=��mZ��C�Um8pG�VWu�]ٶ�xFVl��3Mc�7 +*%|�Ct����J�(��+`"<�{��v;��m��D��\�ʯ�5�D�f�t� ��FSt^wqbS���c-K'Օ�#U�8�+�Y�C�������ϣo:PlY��O�e3����z��|l�{�D�w꾥_;�F�+���x�OR�k�E�!�+��]]�\����ʶ|�*��d�������|\��~e���}��VKm[h��6(���.�������Iy�g����͛4���e5���3�9 +GX��;�6V�C�柛V�Wn��N8}(�)������c��ܮ�y�����]���������� +��#N��-(F2K� +����>��L�W� `���YW�OYW%ճ��[q,�C�1�w`�jˇ�_-�~���T]�������� �-��b�>o�_:zA:P���k�4s� +�L5�m2b�<��a��6���UA-Lߦ$m�c2,OBʢ?��̌������=i�ﶫ���^�F����;j,ޱ��~x�O��0F�qy�(N��[Or�}�s�/��i^M�d@q�T0/�P��T�� ��3,nێÞ�v��}��J8�]�X'�Mb��j�5I<��Zu��E�1��v�O�� �g�a���b���|02��)�f"0g��7ͯ���Wy��u,��3,��=���"9���_�UX)I�d J.i���U0��Ķ_�'�d�Op�~�<�m��>L }ό���\���6���ۥ'�|�ւcP�z��R�5<D�5���r'Zp�-�c�����¾�L�s��8�"�\��*�S��v��%���a��Ь:�Ȕ@����!�"k4<]4T�V���3�v�d�Sw�`7�k��MC�_}�Q���'e�9~7�4<��|�m��1w�瓴*ϧ2<����a��c9�^���fo! "!p��qY=C���z�%uC�NZ� /Z��4��5<o(�k�:��(���+�^��> ��<� 9km�2�*�j�t�B�2��t���Iy:Wy��+v}�<G;P����8�,�n��Knh�%(3�2������K��T��T��W�a�W���WܢsP0�8��t�� �&��V��G*8eTb@���'���,��3!V|F�\_��a�?����7���Z��.-��]�w���v�E(�ta��Lm�9Θ3���t���:�����%s���:��6���l-E�����b�N9�E��#6: ���&H�ݓ��p�۸Q�NL���E��`#�3����[-�o��l�7�=�S���-(��k+��4)ƹap �Ǎf��v�m{�[J��w��G�+?�NҦ�݊{,Ea�� �[ʶ�d���/�̊o�2�>6w\'�:q&W���C'd��ٷ{MZ�y(�m2�*�rb`Mz�,��L�v��C@�,*7�W(��p���jv#��ԫH��k*���'����Vf[�.m�=��+���b�_�� ��ו�1g�>�l�s��~l��X1�cFo�̤FڃAR�=CZ���j)�*w1=����&�MH�P��^l_��"�DEIT a{]����y��s>סiqf�7���WǯM(�0�&q��A��+��nθnM���k���f����I���� �ք���)�O�Kj��<�<S���x�#Kj�!�{W%��W��xf���%�כ;�� +�葏+�`�]Ou�+��d��>��;(��ʩ���[�+ݗ���k����rYq�cf������M�A�R���C�w�C�M�On�р,���heI��=Q�+W���M��ϸ'������g��+�Z����F���yx���9���h7�B4P���<��Zz��ֆ��*Ķ�����"4Dk����l�KN���1���ф�����n�[,h�\��%*�C�[�?���?� ���\Y��حvư[]䱶]O`ztʡ�Tk��0Z"��;� 6vⰖ�}��|G�Ŧ��R&I��h��N*"�)J��̷̎�����?ڔI?NC��=*a�F�"�C�?��Z��� v;3�]Cט!s4�x�7nE�U�1ț�Tĩyi$O50��S�N�7�e�,�Lʡ0i�&�ٔ}�w��.<V�3"�5%��9f��V^0��0��͐Z5J=��'�$���D5t�������y�����WS�]�.�{�!����%~����b�M�mʸ��9��l7�6s2��}��^��Ir\�H'$�jo��č�x������������Yo?��둼�u����뭋�[t��h4Aޗ�Ii� ��zs��5�� ���������� +p�<��<�\���z9�s���8�h6��S�Z)�1]fڳ(�z�.o��>w��S\����Rkb?&���'j���/uX�F����!�cx�!����6��l����>�PJp��3�@��O���B���k����`���x�uvR�֟���b� +��Ke~�fo��Z'v��w�{-�h����]a6&�����\�+�� k�#0kn'�@�S@��% ����J+�r����܄_����M@T�|{e"[P��+�H~V�P> ԋ��inR{MI^��a�$�Y�8��E���X�'��~ݝ��N� ���1a��}���1����������RQp(�5H5�����Rs7�������$���q���x@\��� K�^qQ��|��9`?��0���@m��F��P�k���f��Je�L��d�hH��2�^2W��K"�� X�K%�P(3�G��IAY�������PTd$Z��}ڀܭO��-D@���8�[�=N¯���~p=Y��\ijs<��lqG(Em�˼���q����a5� �� ���P� +���jZ�:���|� hM��L(�o��[u@s� �y�h�L��� ,�u����&^?N��K����c�cozyr��A�_b��� �,�eL���P�:�z�+�'s��|������b2�!k"`�05) �\�����XB�?���Y�hB0=}}�qb�����D�i����oƻV��{`��*��:�鯤*7F/@�/X��m5�KL�<��g��e��F��v��[p ��n?�?�vߌ�;(�"`k�`�U�N�,[�)����*�I�Dzn�JP;�?}����T�(����Hw\�D!�|y�/J����v���T)耫O,�-�� ���l~.��4���{�����I��y�Nex-Me=���P[����{��b�&�@`!���y:�������'����/O���r�<������"����oS &�_jk���@<3Wm �#����f�t �`� �L��~�W�t���_�bN�5R[��#���?��8��O�g���7-´���ޯ�6���1j��ҹ}���7P�( �S�"�<�йP�y��nM����w�>�s�E0/�4K({�<�E�,q��S���/������Q q qzCo�7�!Ε���?j�����F2����m/Fh�� +h-� 4�P�f�*@}5�@]I����������>�_��S�ؐW�cX×Z�����|����I�ݶ߀�_�������9X���0��tN<0�N�4�<x����������KBK��)�+� ���c+���, +w�[Ԯm�%�C�<���a���=7�3;qf�����Iq����P�V�Q�����h��]��h^�����{�i�^������[�����&���Ym<*v������r�I���.y�zX)�xWy��b�@��m%�6�]WCaz_̍�c������"�����߹Y &�Ʒ�맳0�)y����~�`b��:Qj}b� {j���<���C��t�;�l+��&ơ�y�ԋݡqy����=��,��a̸�H����5iP}g|+M��6w)�zұ1��� v�����Ӳ��^�-��|q�嶹]���O�X��r�ٺ�jQKd�g��F8�������I�8����6�Ϲq�;�C�Z��ɻ�и��7w��i�Kk�~��v����w��7���>W�j���F�g2�8�h�v����(��9�R#6X��*1�*}`�?xe[5���n�U�z���U�+oF(�S�T�@�N1X��8f�0��t��~�D�)^�5�84v5VWy�_-���w+�����C9�*���*W�k�[7�W�3Y�����oB1r�_-���*�t:��\~R�+yt_��`�0���-hu<Kl���}���v���h(�������C�_�+��e�b�qh��B>?əe(�:�~�e�G7�ſ'��t��)K_�7o�O���O��ÑL�Ȍ�N~���i����t�;�i�R��p��8%r�C�p�Sm�g��ߏ�L{�4q�gw��1�-�윗�K�lAD��f�gAv����6��$�UJ�w�XI�&b#�v�N���A���G)��gN��VΰT�;ؓ� �2X��l���y+�%�`��V}�e�ӍEG$����v6;@�^c���1�.]*��O�VS��I8�JC��{RƉ�V��b +Pr +�~�FOS'�UFn��-r֪�+Y�R��糙�@7���(�E�¬��Δ���8/.������+W��-�]~��t���uC6�z�vX���D���5�o� +�mkV�<�����������������ZM�$�4gJH^2γ��u�z���][��f�`�9-�m|�W~44KdjxN-�a�R��Q�GYT&=�S\k�S�d����+���b�e���sY6m��m繨(�v�+�"P0�s���� +�(��\����v��]�ߪ�?�6�nƋ0��eZ)����3���� ���u|U8�<ͳj��jVo�mW����5 }\��\6�ҊVx��T��n��rǹ�D.K�A ��c7�SRY{T�^�R�?kT�1�8��b�C��v��St^X�ZJa9g���\v֕�=v��(7}Ժ�ZK�̉5���V��s% �]�����ryPq�0��\��J�fIe�=�ܱ4n�R�Q� ��(κ�W1 ���N&R��P.rȱ�� �����|1���ޓs��x*/���v�s�*������.�F�R�/���9T|��vW�f��z�h��T�f���UCN�8�ba��ݫ-���P�� HU��ZU�o& +_L���;[�s_�/�J�xd=[�e��)����R��6Z@�Y��`*Ӫ/������]-�y�?I�BUI��<�~�r��<#�z[�Uj��d�k����ny����M녕.�yTj�9Ǐ�9b|��*��P��%��Y�Yp@)s{`J��#���>Ӫ����zM� +��tG�T�s����k75�7�@�| +�vOIUu���Q����Ȥj�>8�J�����t{,Th��\c��{%J�ϥ�0�V���/Q=!W�F���Q�{���v4�3�B�I|�I��tv��Vq>%�rjp*�@���aNR++����B� ��"��:�H��6�v`;�'8�_���}����}�[�L����AfB����h�}'���b�P4�XYPr�c��� �ɴ2�3�x:ڍ��t����TR�tr�V�d��#H��rb����yJdr�[|����=����E+��^�)��"�ޱ�@#Hi��1VH��H�3��i�n��<6�^1�{���Ʌ8d���D�6��6�T�T:ʧ������z�@�I�BV �sk�%2�.?ĺ�%_��_�g=�Gc6r*�/��bHI<琒T�J�]�3��'�z��c��r�Ř�xc�e5ְ��^��k�̩�z��eE�y��|sȗ˦���=)��m�_蓩Q%�%�9u��P6��X`�wX��:V���lz���`�`�"����R`�P- /&����Ũd�z��v��f�"�w�mD9�D; �=���9� ���~�Ui���T�E��x���Jw�#w��y$�BZT&�M2�K0p�n����w�l��� �G��]�`rp-��Gr�z�@6`��Hv�9zܢ���E;^�^U0�o�5�g� +k��\��(@��e�*��2L����&>��W� J���ɟ�]�V'T�yygޱ&Ƥ���L�vhb1a���Z�9��5�mr� � \�CX��D��p�(w�ю���kAR�u���{A1���W4�vV@��T��P����_�C10��b�-֞�~�N��J�t������Fz�mW�;�N��5������ȶ%<�&gh�P�n"��� �ӀQ��X��c�.bb���$4(�(��"Cu��y� 8��yt 8�m 8WҀ�#B��3�4-(�+�{�Xc�\�ݘ^�T�s�����)�w��2��%K&�3��,/�K�n�5�m�f-ȡ�VƢb��0�) 'C0^W��{ ��D% +��Z�`��b�?���9�tЀ� +���#O��{}�*?_ ��`q��e)��tKC5;�`f�4f#&���T"��x|�dQ� ������Veki4 +�|��怕�)� $^��@pB +�#������!�iB�Q"̓˂ !� ��L� !� ��;ث�R�v�:X���'�K|vʶG+-�U%�2'��'��T���p'q�,(��c4 pN�B��AH3 �B� `<��B�d���SrCȩ �����l`��A��g!���!d5l��#FJ��6n�K������ 55^�b2]Yl�G$E#N�F!kGKD���A����4h�4��Ϩ�=t(NvP\���q��� (.�2@��3S 2ř� ��D�onC(>�(��^�d��uN�Rzw����?b��q�KË����-1�ۯ�0OF:R�d��{��D�"EA��Pc +@�'T�h>d(�,�P�4�� ��oP�K@Fq z�˚�v%��p¤w�LC�Ag%yJ����{��b>gD�|'n ���4�D��O��}W��z4sX �Y�R*\�#��N (q��P�:P���A��� %�V�3��-XBI6�a(�.Pr��dG�C� +�C����1{�^PB�(����7R���Mیc���̻C�ј���D2&}E�_C���+JuA�RD4�^�!�`�m�߅Rn}De��W����@)y]�RL{ �6�=�jCI(U���u����Љd���{��?'�/�7�Z��Ìб#f�*M����Z�#�o n/����P&���u�eL��¡�j-A���e�$e����2I��Ү�,�4ͭ?V�&';$�|���5N +���P��Ąf�M������;�5���p���ba�m�.�t�]>�O��[��C�Gg�F �ƈ��Z�=�+^P����+1��ޙ��2w���Eʎ�h�^粏��]���npG�I���� }��z���f�wD��]����×%���[t��RA��mێ +��*p�*�4T��m���aP!z5����P~��By�B��E�p�{�l五c1�~]�#lR�K��%}G��Y���[x�%��~�;1}/��-�%��ڶF*��Y��\7��YA��V�J�J�[�A *�%TZ��Y�S������� �%��������靎��}�����7�� A�w�ڇ/��~�mߋ˾��wN:��>~��z�P��P�{P��I� +��PEOrP3�t���X��R���� +!Y�o~��#h�����hC���~[�� �-@��PB�F�G�-#4߁m��A�?�� +$�DN`�kd���q�Qm���������������/�Q���0q�90b3�djegR*�2]�g��Ipc�< ��B6�)�-�2���5������l�ekz���-�Wo�8���V�����k`99W���rP�-Ƈ�����m���<Z+1����2O,�K%h;M��}����%�G����Rlw��~@*�m��:�"�4���r�e�M�����K��i�W��8��8V|\rB��j��sx�H���M>��|�5p-��o�۵�=�~�k�{���"�g��_q-�|�h��"�g��_q-���u!����F�FOح�<����ĂG�F�VN�przGg�����t^�k��+�E�bju ���0ԓ.Vw�e���жK�S7�=c��c�/���� ą�wcrZ &�L"?�ڷ�|�Y�B�n�����wS�_h�]�����4�L��SL�jLY��f�������)lFbA�'�A�2�7e]��M�_�i�ƚm`4���х�Okm�0��[�B���x�����u�qp���+�����Ajxӑ;y��{��Y��4/{��ck�W��#��ǿ�<ѧ&�+9m��D�\��k,��v��י�H�F��5�NʵV<<�Q9%���x\3�r*y��{�����!��N��=�;��\����8r�Ű=�����c�4�ND�<[ֳ�q�KX8Z��@z�Gpns�F=���b���P��{���x���-���Ւ�+]��M +`6���XL�ך4�����;^���#8��Q�1{e�[�V��wKǵ����ʾt'���H�)�f���о{�*����������3�1�@�υf�c�'6�]��%�sN!%�"���l?X�KxC����I��i5�=����PH��&I��J��V`���niqVe��*\ϵ��t�,���y���Y;ӗ'�j�� �Z��2�\A�cg��Q ��g���jh�G�R�,� Ŕ��]o�2y��}���.�#��P<X�4��1JV��x�'�4����*��ݹ�d�y� +Ǡ�e?���y�ջ%��y �#|�����������<��]������]������]� ���]<v���k;���%���y��*��'4��n̪G�-%��2%ZK|*�Ci��L�?ޢI��S��s���~�D�o���}�_�Č �����$�'0A��l���/�����A�p�?�/��'�V���ٗ?\��U�O`F�?\�O����T����A�p�C�?�g�Å����7~�����¿1����ת�C~F�?\�ٗ�}��#��g�?[�����r䡻���J��m`�+0�?CL�+�ᕖ��T_\�/���&�����Qƍs�YLpUh�b��#��A��!8�R�-5?v����Wy�`4L�W�Ay���}��T��3�>.���8�&�C��je +o������7�-t�L�n���f��{�u�AeLk���"m�/9��Ңu��+�2~�mpZ��\u����\��vI ��<>!`_>��oy�����T����hY�,�7�#S��p�ڥ�_�S��6 �k%C �x(�q_ ح��A�|b��#��s{�#���e��)�gǮ�Z��N�TR�{&��Q0��N�r�=�sח��ڝ?�{�gI�Ҳ]s�d�p�A�=�e���{����W��x���~/�ݡ�F����<�]iz�A�}'�c�ʓ������o�ض�zL�?u(��8�s��?+�yP�^ǖ۹�-O���a�t���Z��(r�i��~w�"���sm��e�+P��?]��2'�d���v�JoY�Q"���0^�;6,�� ���>�کFuʨ���Q�eJ��b���+�Y�� +�˭J#NGz��$6�Cc��rZ�&�o~R�B�}���0����r�+z��eU���`�469S�����Ab/����m�K8��i�$�Դ7�EZՈ�^�1w���D�O���x�Z������¢bmЖ��w���Fki�4u��c.�����<�COL,i�(]m��[tm�Xq/�V�����Oϐ�~�$�ݪ���"ˊ���䄓Z��N���ݙ�H��>fډ���e����_2��yǸ����E����M"�������[uK�U�ղ��Y�(|Q8b�9���"S�l�e7�3# ';:.�cP����,��i��H�Ƞ��ЛGQ� � ���u��5�[�A��ee��d1_�܅u&�m�aؠ�l����q'��;���M5��x^�bTy��-s��q�M���-&���"�A�MfDI�U�k�K68�,�O0F��7h�J�\���`\�X��x��$��� ?�����ߓ�/}B���Vמq[W&m��S���ړ�(�M'��%ev��1�,�e2��?d��w�X����^+��$��%��~R����K��o*Ҩb�l�Ye�kR{����d#N}�EmqE�l�ŝ���.�,��G[�ox�m�Z������@���->�����x�ޠ��7/O�������NR�~�S�d���W �u�{�T�r������Sf~S��M���CX�k��$�|o�'��'0#�/�~B��/?� L0��U�O`�9�-�OW������������¿1����¿1�,���g���~�Qߟ-����)��ϖ?�'������`������}�s����?��fBL�f���,�1#�NN�����z��'U�@'�2Jo�@�\��'����G>F�@8ȿO�Z<Z����D���L�g�U���,�e�u����&%�iP}�0/71u �®9� ����f�;����w�*@�_��tT AO�!+���ք��v��c�Oy8��$���f)����v�-�{��J����LlIW|�%�|{�����/��[ko�����3��%��Ќ�v��]c/)��RƟ�Ty +���%������}�;_���;�,[#�����ߞ�d������Z\@��i�r%�g��)O706*�iM���L�r���h��9ǒݦbI��Y�~��D!"��y_=����Lݶ�������+�4�*�g6*+k��n���g�O1$�l��}?���j��G�3�D��m�!�E�W�&r����3o����l��W����f�䂑�+Y���..M+�����'��ƕ�� +���v�>��P�� (͡���?�t��&��z����� A��q�&� +�l�ʫ�������ARX�P�/)wh{�L��=�w����7���x����#��f����xp����u��{=k�g��*kM�@�N4����b��َrU����a��OΥ�l�DZ�d+�{�O���o�c����-���+�n�~g:�����ZVN���{`�&��:.b�Z��Cרq� +�ƥ}a���L+�ё��o{��8�%̭C֏K����V�0TGW啿�b���[d�tv�|~�S������(17�q(�׳ve;�䙉Ź�����x=�y��bn���ױ���Lz��u�K^�#�6��Eu�����2���L�@����Q�5��`7�;ed��a��ӁFn}����F�K��i1��i ��$�����#���.F��]�z��Y����h�,�z�ZpxY �����7O�`l�e�˼�="9�J�*q�K~:�E���z�����۟�� ǎC�����ny�"����(l�=z�B�E�K#n�gm�rTmve��|�դkPS{����C$ +C����.���:���#!�&��r��p��x͵�%8�v�E��G�%��7�Ǐ��ș�m�'f��M��+ +�Lt$b�q��b^g���A�F���p�L���������Ae +�\�c��l9%w�R�.�����z��`� ���B���ǝ|�'�XR +sF?�g��m��ui��%¨�Bn:�F���}�����s��uK4��i<�QF����ք0��P��!Y�Hg����2�1@��VO-)�]�(��?�ƏD��=����>m4�ݪ[�:�y�������hmX%���Sf�*�K��b�����(N�Pp�hk0 7�6�m�m_K��H�(�����q�0��\B��&�,��3t*�E�9ʴ��k����J��AR$6��+L��d���Q�,h�����>#6�m�@�4��\��%��`V�Xܠe\��*���[�R��9&x�����$��p�ȍ�*���ƨ�B�o�(~���6� t����Z����r�ևV���ˢolR���<���/ʄw��N{�F�Uk3��� \�eV��-w�ea�%+��چ��s�X�c�Y���Bu�Atu�^������H��ŇI� ��Dc����D�*l�arb����N,��v9�Z=8]U�:����(���A�W�~��m�,���I��eG���+ɇ�M��@����W$��2�'0���WA?� �ȿ +�)�~������o̰���r��� ����������-�3��-��U���������}��gPP�?Y�D��<��,�P�@�|���S�4Z�\T�<���atQx���/i��}-w�c��YR͑�Wԕ���"!M�!&+��0���oA�����{*(%����?)�gm���|���I���Ou+��LT���"K�ҕc۴+�ӑ�Q����"N=_�����}�T��� �*?k8m��t��i����[�����b��<�𫤢�'L�o�%5��B�\�"/[w��~E�R�0�9��C��1����с��X�JEM��%/�moԿ���q����&%��U�e���ZO����(�M�Ƕ�{,3.;0������>�ho淖S�T������y��R[�yvi/L��tF�������ҋ/��������#�u���q�q� ߞ?��L�V��9��(���(M\��C����Kj�Caj���2�˃������f|��8x�Ǧs���ͥ����+�p&�p���C�'������O�R��.�W=Dך���Kn�H�0����������#c�|�̥��~�g[�9NKB֧��Ρƈt��D�|�o� x���-%��Ojz��`r�ϭK��W`�C̿��8'Ϗ[XXY�_j�ȶ����.��j�$�Ui� ��a��'��Ç&�?�=�[��+(��?5��k�<�]�/ʫT���᜔��VB���ޢ���A�v{ +h�-ߨ�<P�L��wb_f�_�GuFc_0�^�9�o8b��b��;��:UkJC�:��d5ˈ�>���G<��Gch�6� ~>���L�ۃȗ��{��?J�����Z�9�A�F~k���|*)#[%I���4��Zy�븆�M��ḏq.ベŶq��1):42N�df���Tq���� �R�<���"�~���� ���oy���펞f~�P9���p�h�����ޘ�v?��-I��3�<W sP_C�㽁^ќ f������ӗ���@8����za�_��u�44γ�̒.]MR�R�����Nj#��rr��D������q�)�k��F��6\o�n����w �{�ސ{�{c/8����۩�ud�i`��S�,�W�Q��r���[N]y<)ݷM�t�9P�m�c��Y�P�/I(G����u.�Ef.�����uFJ\cn�{�owH����+�IVM40 +l3����L�Hg�v�zl���'��k2���0 �b�%̢ͱLo8�f��aȬ��A�?)���ޞ���� b���u�it�]f�J����-�N*A� +:��z�{`tdb��IͲ�B����3�K�^����\K���+��H�/����;n�r����M�b�A�G���qE�]��ۖ��,LF��2ĻB.ǘH��-^�KL�j�1���"�y���{b-�b=�ҿ$��Ky�1#G��Q���Aj�OMN��ލk��ۋ�\A�$z� Urw�b#�8�_L�2��͛(K ���/�n��2������Tą�W�_8Nf��v�֢iz�5Ɋ�;J���Ncʜ<1pE���,��2q,r�T;v�?(����0j$è������w�h]�����ٺ7: +tH����Fg��u�B�:0��Q���I��u�@mrH�qCُ�K�(e +��1 +��g��y �0�`6`���[��"p�J`�"�e}얯gϸ&I�.��6��[� ˫�[mk��A�s裺nm��T{�/�z��w��v�[M���|��K��,���̬���7Cُ�I�ۆO�y6�7\4{��KlY�F�Ib�jb�<�(�!�֫%k=U�Uz���2���د��8'f����Q3-5�C���&��)ۘg���$7y`�<�^�$��m�Q_3��Ġ�V�p���Q��N��h=���VV��Lݵ#.�)7�&b�v�DW�3��1ҙ]F��&T��F�\��G0��OO �ׯHP�LV@��pMv�¨d����Ҁl_*Vͥv����J�3H��4J��Z��9���vT���ܥ�Q����l�œҞ$�J��r`AW�2���o�/�����{���� �� ���$�'0�|�WA?�A�p�����g�Å����¿1����¿1�������e?A��l��`.�b����\a�7/�\|��e�j�& +�}��2��+~�Q�C�6O���H��p98*�c�$?��YLǑ��ɽ��A$y$��I������9�?�h`�K�s_��f�jK�E���D���m/Z��=�=�]���{Q��/e���yt�hUv�hT�I2�=�ĥt����G� ��:`��?g�9(f2�������v�m5�n������5Lm�jK�{ +�y����� �1w����,)U����ʓ�k�.&�U��]�CI���W����#p4�lВqA.��!�]*�q�m��������r�S��ꫭ��t1ϓ��̑cؑ�t%DYy�^��D=N��|�r���Ƕ�ݷR��|��~*U����`:���F��r�7�a��-� _���Uf���!W�W��8m�b��B�F��.۪�<� 3��w� ��`DA�q�Yʹ�����AP�3���/4.�g4Pe���w����*ŝKxg��^����E�尶r�Vo���/��@��O + \�~:ǰ�o�C�?�������GJ�2���Ja�-� +s�@���4�Ǿh8�/��+_��_��m�6�1� ��ϋ}�� ���?._@�8V{�7� 0�̜��PZ'S0���_�$Q�wࡏn��qΐ��&��P�R%;�<�M�� �L)wvO���� s��l�/�L���߇~�!h]_�q(�����nbU;����֧�ª��hA��W<�晠�����Q�z&��rON����ѯ��RT�pm|���f~��,��G���5U�:�E�X�KH��������r��a��hY5T�~�䌓\b���IJ^7�A�=��|5�4���y�=bl_2�Keb`C��I=lb�z`t�v�Q4�C�R*]OywsU���[�?ZW3y�Bf��'��(?�6�ъ�g%��m�_A�j\�چ7���A�_�P�t +�);�]�[gb� �0��q���G��wAw�0 ��a�yÜ������'�����8����ś�pp�l�3�s���ޅ�4�ݪ �7˿�A�2������M%�ۗ$��U�I�z��:;(m�oA�����+�� ���{�=�8��Pƴ�ўYl�k��$DE��m)�X�߾��A�m�+�Y�Ot<65�,�*� �"ze5asq������� ���~H�t��s�Hσ�#8E�Z�Ѷ�M/�������&�`l�L��^e��aj +�U���.v��X�jQ�VY! + �� ��"̈́}}� ��!�ں���O + �R�N`·���`�g���ګ��ī=�$ +����T�s7�������ݔQ�T2Kĥ���kT� o��֯�^�0,QCn52�oA���{���-B{@���\�$Fc��xfn��֎������gKܲj�dy>��=.#�۬%���>�-���}�s�X�+j�&�*�Ϲ�/�ãڝOՙi<��Q�Ε�PK�N>�� +k�y����_�B\fX���<�i�4;ܗ[�����<4��E2L3�R������O�U��������t�=�Ւ�n�1 �!����u��g4_c�Y~��t��t)ЉiO������;�݃.����~Kl GMb5m�+��z雜�, +ߞ�*�w�L�bԳ�]�����+��v��=�OOY����v�M���n�gK�Zc0�~#�;�ɏ�K��b�˵�CB"�V����>/�K�t�;?��)$�ϯA�&�j���N��8oW>Q�s�˒m�LpӰ�r�5F�%�5b�M��-7�:��@�r����b=,�+�L,�c�L�X%��O�a�Ѿ���/<~�_Z��o��N@�9��jh�i�6ҵ�����:������g��̒��bmC�Eaty�_V��U?�/�Q���y�%����w�\�ݧ�nQ{�cs���L6S*���C��r= &��:��a�q��xs���f�����[A�ۊ��4 �446�rxu���5�����I� +� ���mS��3���!n�SU�Xkm�f�Uι��ng�D��)M��K+����u%��=���y�ȵ�a�Xw��~��9p����'Ũ�;)�v���6ؐ��b�[�Iɯª@�����cl�6c�^/F�jj3\!gbp,�Ԡ�ܰ}^�}|;���@�ynK�Qd]�Q��٫g[��M���.�_ + ++dd�����ܕ�(v�Ɩ�=z�ߩ<��uW�b������M�yю����A��������^^,�uR���Q���Ui����JKl�?.�0�q�/�~3��2�'0Ä�A?���}���c�1��-�T���_���c��؟-���0FG_A�\�ן�]�^b����D��(jl�(֣��c`:"����:ekՓg��2o��� �O/�oPW��Zז��g������@'��� +`6,�y�����ڞi���r��%*���O�Q\&w:~L:z%a�5*�?j�f0r;����jc9;)��Dky�����6ٺ�݃�`�p�A�=���F�Iϵ�0<����:Y���W�&5h[&TZ�$E +�t.y�l��;`>����2S��ܗ�c�,���LxJ�Y_ԺsW�#��g%���<(�I�*�T�z��>��3��l5-3��Nw�wC��?�x��ꙩ�����=��p��Iio�g9���a~��B����y������寘����W��=���,��} +��.ɥ�y��CE � +�]�N�<ՏN�0?+�nsR:p�$��,�z�'C��]���M�7��bs�,��&�o�Q����/��8���R�������uk!-�Xݑ��^�坰{�>/�u���Y�H��,�p�\�9a��U��0F=>��[�6ڱ�D��!� ���� +J�!h�������u�Vzw�h���N��x��h#~ؽ�)������h\�]�Hs�s#%��䜭�,��,�^yh?._1W��B��L�K��$�ZU+�zN 4���i�\��K�]mg��G�� � ��a���*&�ɋ;�8oK�:'���vL{o���Կ ��~g��0&�A�B�~���~�C?E.n��݊�I���=��[N��u�?��I>P�1�X�Ǘ�c���&��;����[�L?eâ��S�t����#�K�+�|�}�L}�*���*Y��sd�rO�:�(ڕ��m顈��������tu���Y'���d�tf�3���B):nR��L#��X�q����g��l&CLPx�}@�;�-Fk~�����]�$iW�}T�m5P��,#x%�m�1!wu�w`K���#�j�0�=�)�e�\Q%ZZ��D�|�-�13�w�g�|&Y��z���>�[�x�o�d5�á��:���C�)���~Ɠ���.�����h���T2Z��}�r�ܠ{�m-m��6��������0�6�� +eh�)u���5vl7Y�R]�0kl���z^���K~�ꢐ���˃K�C�ej�����z��uĜI�-1�t'.� �?�[�yy?GI�g�s�R�(td�jf��OZ��4��i��N�s���Wq7[B<fm�~:��)��iZoh75�iO(S8(-�(�L��:�?J����K��:A�c��\g(�z\\���:�����P媕3�íUE$5q�����zloc�c��}�o9�Ւ��M�_?�������-�6m%�m��������"(��?3A��S�-������]��{��*X��x���(&�G�w�ݞ�,��v.�M���[��M��Pf����X�ױ�e��a0�\�������+�c5�J��S)�|_w����C�$��Z�u�Gq�?/x��\}�ҷ�V��ti���Tz�[�[-7�&�-�+5>ٮ�8*��c��3��&���06��L��h:(Jԣ��� +<�����e�H/��\z��f.�?���G�2vQ������e�9��r�����#Wqc�.giTX�.�����פ�8GRa��U�A�禷C;������.w]���L��ܝ`��s������0e�>�-[�:��},l��V*C��%�O��tZ#���$(��j���IE����� +f#�`�w�7^��ў�W Z�ݻ�������)����4]���[R�"�a�e�K�$��c��ZƗ�yK.g��~B������x^��Q�N&~o�����-YK��e��F�v' ��D�j\�8ެ5��- +w��.�B�oihk'��|k�Xil�e|�X;��,8��M������ 21ǩbWp���jN�W�m?�S+b�ʖ8���"�1���1�A�u�����Z���5����[,�,4XΕ�`�9����F�|w;��21}K���r�ς����Ũ����'�|@y�g9=ʾ�&8��`�����a��n`�g��,�\��Fj�K�ӋM����Y(;/����7��ڞ�Oo�Ua�"�Ҵ� ��ը~V"ȷ�v��#��pɁ�2�yNʏt��o�[��p'�Y��]eG=}q�=�s��g �p�n���Yٹ�ފ�&Q����1'��W�>ҤV0�ԋ�(qL��&��\��A����@E�q���M��D��>�@�"��z�C}0_��>>�_�kq�.����F퉣��P���� ��F���1X�֠����s�b�11w��E�D��m�G��c�߶y�X%i��ph�q!��]Z���hƝ����e�#����<����jP*��>1��~���e�azti��խ�������nKmi��U7H"��A�&]^�^���f�h�c4,`�Z{�:91������p����5���1���r��v�Ԩ#��I�_��;Q{�l+��:���1�]����WK����A�C�A~����8 r�����b,�\bR8ۣZϾM���o�[�@��֣�QH�{�4��u��<�R>�B���I/꯳�tn���I�|́ +O�:��of����{��� �� �_�f�e�O`F�?\�OU��� ��g��f%���A�����Բ|Ϯ����,�7�r�fK��>��Y+��uî'F�e���X�u,���T��5��3�ޘ��Tb~X�t*P/9���� +06�c(ȧ�i������y�.�?�N9<��b7N��L�4�`?m�:���O)�5��x�5��;iDj�hɸh����vHؽ��r�'a��?���j�?%C������ܽOٹ�����،w<�����1���n��Q?�~�����20�Ј�w�lgk��tR/K�U/u� +wa�ݽ���w���H��6��1��&���e%=�[�T4{r�ց�e�C��,�Q�%m/ZG�<_5W)�*g����ՋD�U:��Tʧ|�}���q�*�I�#��I +��g����ٱ@�w�O:[��$�l��.L"�5�۔�!��Q�:>vO�W}��uj|d�j���qvU���)C��3 K>��?J��� \��T�|����e2'g���f0�fr�46�U֝r�+-��y��)��*S�A�?���$�(�R���_� 4q��=pGR1����?$�$��VjP�z��E �r��ɑ�C7�V�.��ƽ�aS�^�l��Fͱ�G\�xQ��$.��B?� �t������>cm�Mx%K�$��d�fhp���/��;�;��I��h�|� 0�ؗ�b�ɻ�;T�KSx}θ*[��������W=��I�q�Wm�ȕ��ݶ��l�W���%��D��m +0� +��>�z��[���#�ĹD�( +��TZ�4���.ci�c�S�9���˯\�,G�=[Jõ���%�%�Ξ�͔�l/7�~6v2��U��+f�y'�&v���/?w���x\�?��r� �*]k��V���7�SUW���.�{ľE���^PDE��&z�'֚�̽Ǟs�Zg}�?�Ư߄�� ��ŭ��)F�&���<3Wu�U>�e*V(Ͻm�n�]o��dE��r�}� ����^?����/�_�=�.�W�:G�����յ�57�Q�cz� �S,���6������8L��m�0�͚�"iO)�x�f'�pu��Ê$��*��*?���9��c`����E�> K�e<���:�I� (��l���ifb��h�F�~���P۞� �8S��̦�u���e��_�o�l= = +�zJ��N(� +ʿ�����x*��<���v�2N���>|쩷�mLS��N�\�']t+�SW�f�S�n��}e^�P�+1��[._�e .0�G..{.�_ہ�7�X�����kY]���kX�2�CϠ�?Vvǩ#H^�-R������Ȣz3�*�M�&k�����Z��7�\���s��m_�+�Z>+ ������k�(��l�z�O�|�mH��S�e��#טX�!U���:�k�Swl�5A�#�|(��I��o���f����稜�~=P��9����KK��s���#c�s�#����g{5�jv�곞i�'� ����"�-^j��v'�q���d����=^�7纹>H��*��={k%Dz���ؠ�8�.u4�6��M�����I���?���w��2���a<�������*��r�)m��3��u�h�D�����뽵�U��ֈ;���U�������0f*��OZq��_=kI:�I!W�D���o�3���a��.,}��MA�8�< Ɋ3��2���X$T��J��lm�4Y����]$�Ǟ珙�'�����IG��"����a��c�,����i��&�PS@M�5��TLI� g�:hw��X���Q|�k�zo��Y����P���gI�k-x�㖻vR����߹EJs���Vt䅓p�s9is�;�����`��:#(���0���c]L.B*?��t�;�Q]߅���!�(m��_��GG��T`7.|��[q�g�g��g��[L/�ܿҊ��Y-�e�p���y���E���l�|����g�E�^>���mn�K���Hֶ"�����I���u��$�1��c&Il���US�fz�,b�dA�;rQ.�1���s�2�y� ��R@:�R����6$�W����� S��C�C��AFL�������@"�a=���;�R�'֖�}���������V�۳�v�X��59L�`4�.����Q���Y�*��ٴ�3�H�>����~ݐǭ�XdQz�w���J��#��uz�%EX�E����@�&���\R你"dw$d��v������� 6� �V+c�-�Ɠj��o�k�QPy~�Up��l��m:�.�V# +"g��|oS�0�~���0r�d��q��>[�i��W��t���ɱ���[^�S��9���r�>*V�O� s��z�E.=�`@�-x�����-�ξх�)]�3������!E�KX�a�3���S���YZ��J �l�؎��fG��J`��6X\�U�֬�;��uo��*�֭����z��y��I�h��W�@�r�D�˚{�z3K�Sf��mE�䡰L�U<�b8*�� Q�oӡ�g���,��A�eh�Qe8\�f�b���l�� ��'@k�S���o���N-��[�P���td��[��L^�vK�y���p�N��s�,m�����������+���OZ����Ԋ�{ZiI���d��Lf��&�.)�tNJ���Y�]�߂J>��Z�,4Doܡ1��6�n-k��l�&؉1�J#{솰�?ˠ�:Ь�S��ڛ�ϮAߓ�|pA:6�w��k�}�<�ʹ/�6���[���k�}0l�Y���B~��J����s���h:�����@�G�A +Oŏ�F�߽���gO��k�*�{W��FS�����$�ŝM4��b�ξf�6�ni˲�l�Yc3�X�=r3I��0J���S��&l��S�h���*��/�?����,�������?,����a +ju�(V�Ә�.����n�T�}��(S {�ktH/�n�tF�WW%g��d[���vz,��j�d�V沵Lc�vMcp��FÍM2�:S'�S�|VB~?�@��'@y����V�J�bq�| O�}��F���џ{��º�JB�B��U��궽�N�xoMn�f�ٵn��2Ņk�G�7�5w5l�tf�xj"{����2�>�m���<]a#��@�~��q��p��q�B� �� 0�9;�r"��+鵓�$�F�Ճ�K�Gs^���mNq���Їu����f�R�C�S������ +X51� ��?4��:��+V˃cd~5K�x�-�����Y�<�_<��/ ����5�r�qs<�I�wl��<� J��(�����O~>���e����?N�7>��?���4_�����I�#ڀ���#���L�8%��Do�|�=>o�<� ��3e���������7��`l��t��L>�+|&�+8�Ю��&���Grv����)�����o��C(�`=�P�XCQ1��/��Tg���y�=r�N;)岱H��c�|Yٺ��9��=�Q{�'^M}���"�ax�>K͝]a[5�z�?��|���Pӎ���[���x�����ͪ�|����tR�em����8��xٺ� �ϔ��; �sx�������l��'�-[�5������˅_�Pa�����?s��$=�y���y\<�;��M��X~��1�5���c�L+��K +�dz^uk�I�F߳ �֒7����i800�����'��]�i�����-���b�&A9_�=���(ד�#L[�x��gC������{iq�i�� +m�`0ˢ��Y�;����)_ky��A��hW�w�6��g���B�HBG]?��~�����[����,�x�Ϸ�,g>�jį ��B��>���=˶1uҷ4gTag0v��y&N�q�;>P"P��v����4�\鸖��^z�ElmEJ�5�|!w��5����*���� +��PT)�O�^~��M"��\ 8Fo{�L�t��%g�ygkx۹�h#����2���%�ݼ� +�F�f�e'8J��������5E��Wzk��)���m����2�h�� +�(���F��6�ӑQ�`�nt���H�C5���ߙt#k�aM���q�R�Yg3gi�O�8�TW�WV$څ[��F�؊Q�1�z٤�E�\�3�_��%�2m `�t�w�7�:�ta�/D�KS�VU�M+�n�?֛>����7����w���= +�izϟsi�w_i"���0��(H�/���!:=.�h��M&?�uz*�\5���tL��JT�*����D�sj��FH�}u�ms >�[Z���5��NJ���F����IO�j�'s5��p|���"�� +�d�%(����WP��l=݃JËR�J��z���rI[��#��WK;$msW�W'鄌��X:5�� ��R�*�5$��cE��=w��oe�5+vL����dVH��C���ÒS���Tv�H7$�U +����[.���Ck}½�f��z��kq؊����VWX����%�Z꒤Q�U�Ӄ���wuA�.m��L��_�/@�bg���Pt�-ڎAe ����պ��:�Io���l������+��d�)'��Ϯ���ֆ������/쫺��}�\XI[�����|K����T�)��<�;����u�{���T�E��J ��jx�X�Z|NCnX�W�^EN��-)�;C�_"s.N�,3H/ij�^�e���s��f��j��}V],��n�ێ�_����n~ +P��r���PT�����-:��˒Z ��p��깍wJ���=lj�ocLDQZ��i���q���ԔF�]r9{������^ֳ��ٓRk���%���h�_������u��;���G�g�zT�R�j���7L�Z�NH���y����'�܅:W�p������.=n)���@�EYQ�_ȼJQ���Y�3�-��i���ru�'E���)`����+#�~>Fg�,��9� ���?-4��N�&���${��[�% �]Wz1w\�3QT^.^D��]�Y���d�:�G�L���d�o��^���q!����\�B�?�e�ō�&S�g�K������Bh8j�W�/*#��(2���w�فM�M�S�����*D!X0�Ir^���UW�d���x�W��Fm��������!Xr��<n�ߨ���>��Ec����� +��5��M�&�i4+\���ޔ3�6�k���[`41���"�-���WՕ?koJ���8D�ă�OFy���2쏍��� +�+O8�b�X�-�̇C��������t��[r$l�^̟F5�����/qRk�ܔ�r��r i�S���雩�)�y�dʚ5��w� &��݈(����+^�p���e�]��Ǎ^�_�_��������e��5��@���&�0oC��{�� +�_׆1��E��=9mHֱy�͎���HxyeCT~7�����s6����n��w@��W�g���?Y����yJ�c_���Tf���l�Cs���(J-yT��;7�C�$�?�SVD��ƥ�pU&�5���ǔ�p�Ű�Ws"�L���� +���&~���{:�vw�!��N�m�J�waB�lH�AVb~�ᆱ�������䚇���sy��l�������ඍr��`���iS�9����voRb�]c2vI@�;���uqw�)�]�}�&R�6&ۿ���r�h�9K�.�p��T8fմ�`�N3O��Aw~p�Ldj�,%9��o׃M�����[��@�M����tg����Y֙k�,��m��|���j�}*۪��b3:H��H�������{���� �?'B۠%v��\ +�J�Liw��Y�K��n�R�z�VO�g{]�N�;˚9k�E�ncw�o�Ԍ�Ҷ)�C�I��f"[�nV�����4�:^<�jo�{��#�S�bؠHJ)P��(� +q���Ef +a��yT����Z= +WeG�"ú�8 +�6ޗ|u9��2(�Z��NPvo +k�,�<o=?�[������E{���r�/�T��_�,�M�S�OE����?��i�]��g���B���*u�!v�_~���z���Y5#ս�= +��l�����*��e��� +�<�p���z=x�uZ��t˃����q8�L���������1Eu�Uc��A���#����F�bXӟ��P4��d9Rt+������A)�g>�B)/��#�)W�:��J���*;�sC���Q�:�sv���Q`X���4��~�Pܢ����f�/?���}P4�*(U�(�H��Zpo\w��w(V�р�\�Yj{��3���6iƫ)^9���j����]�%�mG�綯�u\��x߰�|�5S�rO������>�YP�h����Z��J��~������_r�ס\�B"d��]��(@O��_Y�(��ݹ�XWEw�����9�����~� q���k~3��9H�њ+�8v4��w�B~����:�r��(�ZJ�� JwZ��������7����z�Ϸ�K�Ǧ>;���B��hx+wCQ��������E�~�e�~�a���θ�{�����`��������P�4L�A�c�r�v��l�)�(� t�y>Y������oWB�������|ղ�+'��>�o;�����ʈk��������T;��c�6�o3���I{���|��PN|�X(��8`A�2����?Y[�K�|z��[�B�zক��1�gza慲Ɯ�s:���$��M4c�Һ�i�M�7IX[O|�tQ�g�9�U�g˒��Qy����#>�m�<��2��(�o�JN7�8���pdj?�:Ep�RD&N�%,46q'`2�a���>6��٩��&���)����iafI�v +��U}ވ�^sTcW�7T]&���Ud���j�`<�z��o�6+�)��On<�iP.$O���jm2� q�BEZ���&^�|��3�K����v:B���f!��F�*H��~�ʦ�Ԫ�-���P��6Rc(��M7?�(��u�JZ�97��H�@9�I����g�ۣ�H��T�hڟ�.�}/�f(��b$'yU��t�R���%M��{N��G�t�:�Bw��H��v}wk���o$�L��/���J#��蹴h)|~�� P&?c{�|�倊�v ��S"�m�}�Ne�:u�g�I�w������}����c(�ߖ-Y��j�����o��y^Kɚ-�j��?��G�Cs��`(�ϛ ���賽XG��� +�=�����n��^��0��L=�OQ��Q�����%��|�p�����Ώ�R�oo��a#��r#�t�Y���L�B��(Q +l2�Y�yM��O������-�E��-����l����1._��s��ݱ�Y�p�dYg�>]o!���-Z�v���6���;��LO֫܉�k�] �\������R:@ј����H�r�����+�ÊP�(ȠR��ş^�(�/�x7�GδN�Z�&�#�Mo�N� #o�q�?W+ +� >���<���5E��X)� ��SsY�Us����e��I�5Ơ����AeU9�^����;�������M�6h�a:؝� �ٶb|5��!W7w3�k�6�F�%��TW���+fN<u��ї��7��������)dƳIʠ\��?�������/��z+��2��<&��b_��ͮ�w�A�0>o��e�%C�ͭ�l�N*eba�s� �5���+Zq(���%���v<��s�U��%��<+������r� X����pPy�{�y�_��^�����K%�~,���L���][���_�R�&�r}Q��}2�Bf�����.���u�o�����1`�2�i�=� @�\�8T���>E��YP��}4g��\�;�K����j��vo����Kq�����J�K�K*�dŽ�.L��j+d�ˉ��(,�D�[��2������Tk�|�����_�h����� +,��g��b�)�Z<V�K#]�3����Z�;�;�����mO�%��MD89��~!Ԍ8��5�M�j{2����J�N��f�Y�V��|q3��b�e6I��/~����Y)���P�H:�`�������Ze\=h��(�1�k,^��{Q�E��Gܶ����q,��2=kv�i?jT&�i�7�r25"��n�t{�$&�0y��V�)�Y�?�,����n��-?�Q�G���9l8���cS\� �D]��������Q6��t�iV�e����U�??�E&'IJ�Oz��h6l�G��J%p�֎ڌ��7&�=>(��|!w�s��W��e��g��C�!��3��S��bm*�{ᢓ�e8ѻ +[̱m� uImk�x�.�S��FL��E_����T�Xz�vo�fjp��C�ݭ����c��`(��e��;�S{�&��)uVO��) +�Jˍ*�}��W�1a"�{4�b�<��xi����v�vd_�h��s��d��F�S="ʫ�sXe��`�J��|���C~2����_'�͠�9��P���|Z�AE���$�$��,��N�m��]ΈFI�^�{�E�W��3�\�V���#a���$[�G�VQ��r� �)n k�V0h2h���j����HU!��~2a�[&����_.��DK��~t�q~ע�F&��/iC�1g�f/��ԋ�=�u��]���9��Irle�Ũ\�QD�}��uo)~!���o?��a��V�W�~�H�z�x��3R��z�]mW���|�����F��c6��Ey�t��h�J,$���6��%5�)��O�:������]������m8��a=��1���IP�$����t�dkߝ�q���,�3�_Hg�;�N�p���~u���:��+����5����m9�Y��3ԙ���K��D�'yk!#��x��-9輵L�}b�}"�T{������/�Y���=�m��m�'6��Ψ-��X�u8�#����M�V`U���o�+n.-��N���Q:e +��&�Iz��i�F�B�rخ�֞ZO�fנ7�'tJ�ٵʹ'�/��=��' �iF�� ���Nc35��n�:kt�Y�POGl7t4���Ø�_�&C������sL���؞�i��A��`�ä��e�k����a�,J�6v�-�GQ�h?盭�Tjl&�m�iue>�kow��4{��|�j�1��������;�a�G�K/SOe�e~2�l"�J�6�>��j]�J;�Rh��`#�:vԳq;�n��ԕY3W{;5�F�K�Zʯ5��֭f�Q����J�>�0[�WX��m!����|@�V܃��g�<�g@~:%!.'�������} �x�^�<�~��(��̽�K7a���Ww܌��w�+��U�w&W9ч�kW%���u{�j��s�&��w��,� ˕�3����&|����?��B� Ѷ��+����i�;:�(d*,�+���f������k���*�*}!q�X����Ӿޟ��+��%2ڵKT�+�W��J�o�zH,?���W ��ղ��[]��F���Bm�#�!���9( (' +k���8m'���'у�ˉ{���o ���ۯ_�'֍^�� ک�I4@��(qz3����QR����P�o��쑁�v��#s�M�G�L��B�5�S���"ȟ�(��?�����,./B[�x� +s}`~5y�Jn!^$vݎk���gz�>�EI4���|^��j$|V��a>�.���-uqc�g�dX��ޘ����>�#@�ك��� +�2��(Pp6(6�h�8����@��~. 1�~#}k��b��k�����h���5F�H��S�0��PY]����d��B,t%u��ɦl��y�ľ��� +Ñ��XIrA��CA�hP,>(�f((^���Ô�D�v��t|���Ui��������y"'ez����2|`�y9�O�S0��/_�YP��N˰�v��Nk܂�1���SU��Ĩ +R�E��I/+(�2sP�6w��x���e� {����TX��E3J)�^�i���灵��A�i�|�;�D�c�Fl,�5,��O\�y8�g{���tx'�o|!��PXQ���3(,�(\��'����V%o��w�%v{yb���ސ�L�+��kbεBM�.�}3��%��s�ݠ�_ޥמ_�h{�C��z��C�T���c��o{7+��[S�g�;����=5���E +E��ԙ,>y[���(��� +��KIޛu/�9,R�U;̒�A`Ç�n�(�dWW�+簓�ݶ������ja���u{!���8Ҏ�(AY��R:����%i0�� +�\Ee#��y��jpT��?�x(��>���T��l!��,:f�N� 0"X�<�c���pG<���эg���79_�ro���}f+�{�[m���������/����pw�a��h��@�iK�-���"V8d�>ۍ�_[�^�@�f�~M-���AM�վX���{�����V�n�l�m����S�L��C#������|J�d^8r�H3�{��\o������� +5�� +o�sK�s[t� b����<�lB1���v�y����UE�Rh0�F@��9nVF�Z}L���[�皽:�X[;iU����}�]��B֛g����ZH��\H�e0�=� A��y�o��擼{@�-�ܾƠ�f 8�u/�=�8�k�ù=��x_v���n�\����gGky \���פ���-D�\�j-g0N�՞��8�8J�Ӕ'W'v�+��_.�b��a0�P�]��r֠�ze���x�H��#�+�����E�[�* �������@=�[il?ݾ��;�{��m��w�����G��:���*����"f�|ѝB��@��0�0��Y���x��}e���n�=��w���u�l���a�w{o�܋ =�!�#���>���Z�����&�Q}���3F�r-�� +3�:�䂇ɗ����S4����[P&GW�!q�,D��$���Y�O>_ܴq��@y~�{�yo��>!� 1�"�N�NJ�&��Y�����P1I�w&�o��_�_�ػ@� +#T`D��O�nl�́JR����NW����뷞��<��i�`.c��*�$[��cU�So�>�f��F�ܘ�?F3ZA�$�lSS�CI#a̬��7F�(N�&(��������g_��g�屈</�]�6��è�"�@\��hN4c5t��(�w��6J={YY�>�V)�N��{� ��9�]��=I.'�܄JE�15|7Fԡփ�1���P�(��+(�L����g{��Y�G��W}[l���t��ƾd1�]9�wC=͓)�_�-eٓ�ב�G���b���Z杙�n�C��.9�L2w��h1ۼ������ �@�_���Y��P�U�(��L2]P�1�۾^NG�w��)��5�h=�E�;Ě��q�> �y�3;1c-[p&���u������f�|�����>�f�"�۽�;�/M�?w�����zj�K��l]x��נ���X �X,/�B_��o7��[fx;�ڱ���,�Yˉ�c�:K��U*� �٪u�'/f��L*I̯d�(���H����ߏ'cOL��v@ +k�BH�>�P�+(>6�ZX`�� +�2}����ڕ��Y��l���)�I�}�����IsKa������T�{>L�`��{��Ej8akP�TqHg�1G��h��㡺N��=>�'����yV"]���'ϸ�v�����2���S�D�V�有�l����%���@*ɏ)ߑ�%M�%fQK��˸�ƹCK��D8h\r�vG�/x�-\V��^��:�5"}?e�-�{�R{恒t�|���H��g��S.�Fw��c�� +��u]J�D��E�]m�]�4��;:Y���L���xF�i͎�h����Ry���A����~�16��ْ�VB����&�� ^����?�(���D`N�w~I^lyi�����Qݪ*��Ǥ+#��Kd�Q�{u�:m��B��cr�#��26/�%�m�ܰ~���{�����u�x���륂{����ֽ�N��ݸ��7#iֿQ�{��������9�ɣ�ka��y +竔�l+[�6�ܴVQay��7+K�V]D=��y[7���h��s�Q���W +�� �=�FE������f�]�c�Fg���zä��G��=���#_D��EI���Y\9P癱}S��zz�t��� o�'�x.�j!��<7�n��Em��-\Ik��>�G��6Yt��ws..w���vq�kSW���J��w�a�b�B�a:�7������XQ5� �+m�`�=�V9��(�yP�� *�X���7��a�i��F��q����5����ߧ l-�)/�2�V���TZ�R\��Nw� +x�o՜ɶQ�����l�D���� �G�1��O~�������f"W5=^��i���5 +�nÙ�IL&ƴ=a��6���"��25�kЌޱ���>K���=�G���%�"1�7n'�����g���L��2��q�%���Ƃ0ο�IN�ľlF��� +�.�Ve� �M��6Z�X�$��\b�,��/d�vW�x�e�]���;˚J��;5�W&T���M���h�g�:�L����I=�W31R��1'���˅o������vw-派�(�T��[� +����_�d����)�kvg��>�̨�w�GSЉ�f<L��/��Lh�V�8�U�D5���`��Yb�-���ծ�u�\I=�r%�D���v*�E(cLfy�|�ɔI���5aޡ?�</�F�;�e�����z��ż�E:L�c��f6�I�T!R+�8бe�l�ϊ�<���=�:rM�"#?K�U(`ś�j�� �� 7� �* K�Ȏ���G�=�jr�8r�rd���۱���w2A6w A�� c�� sh�F�]}�^���O}�|X/�}�Z����x��艏NaJ~�A�L�~������P��ϲ��ҩ�5����=�Y��D��rD�m)ڪ�Ydž��+���o�Z�>g(R|�O���{��cV��QZ��;�]�[m��MF0�����&w��[�=@N�@���Y�,�]g`o�V�)Ƚd���;�E����V栭y����Y�k�_N=g�d�ak��c�K6��>JVc|?Gԝ� �-�\��y��� 1c��<��{���=�Ź=�:k�� 9,���Z���s�R躃����9$��^x>g�<�T�,���@�����O�w���ܱs��J���Ί��ȹLz��A^u[�����w�B�:9������uk��`Q���t�zB�o��ٮ +mUX��%j�r���in���,b�n���˺�{e��o���������-q$�Mgꄩ�o��vr���b'�������r ]�-���9s_����_ +�� +#5 Ϯ ���h{_�|�`@���Y�'�j������Wv�ƍw��[}��Q�/cq�Z_oǞ����L!:w�u�@m�ä�+}����U�P��ò���em*c�������5�g} �����]<\2���)7�\��[=^4a?���ON���n�p᳜cǹo����L�F��S��a�q�F�#`��s���Z���`�?<��s�X�@�n��8�g �.(�%(��-���O�@�,�Hܫg�pk��j,�����h�Ng��ֱ�c㒝�|������Nm��&xN}�Ǻ���;G�XPSH����UA�Ѕ�f��m�,�E`������ym5��g�=�#�[��گ�����uz���Ѯ�1Q��+!a�����z����u���5N폳��ّ�4�=@~l���髰rPX�uPTD��}�6�<(�y����XP|����/� +��?or�V7�w����g��р�MCu��ôX�|���|�s���X>�/ +Hij�Nse�N�[z�#~�����J�=��rBP�N P��+P:�/�EK%����<(���ÿ��[�n]��M~D�c&��z��M�z:}�:�IW����L����P;F؏��X��|K[ũ̹.�Y=׃���nRy��~�wP�~��m��g���g��a?�$��o�w���0�Õ��8A�?�i��ZY;��PS��mc���zY��խ0��ډٞ���'�ɦp���>JO� ��߇ȯ� ��/���*��'˸�r�+��B��>���:u���x%�.,T�������0p�o�_ll8�������䢺5���^=�w�b��.�o��j������S� G}���o��c��:?A4P(91(>[m��'ڎ>���AY����ꊌ�|���"��xzpq�Y�g��?;��v�U����'�*�؋~q�d�Mt\��eݭcc)����σ��:�W�!������ݗ�<5�J� �\meP�O�Ϧ��Gh��/$~�:��T�y�(w���e��z|�R�a��:��=�Bo����MJ��c��WV��B�p����I��SY�ͣf���/��_���|�C�+'�h���l�0����m��1X�r~h#��K[u8���%�{�n@���B�Sm�iS��ouҖwa�`s<5��|�R�9��w9VHt�j��檅{��8����$���o�-��Pr�.(ג +(���0$që�\4���ŏp��c�Q�N��T�_ot_on�P��NJ,�nr>�]؆�&��c�a���( v]f��:���[�&#���� +�|�h��ٻw�����-�ʪ���=N�z�<���=D�eϗ�@���˝�٬,�,/�2cQ�_���މ~.gj�o<��_�R�r�.�mj/�Z��5��aP�{�������7��SV����A��=����a�ll�&y� �(?2o�[%��{�ɾ���#��C���[�8Y���2�*J8���D�j��2;���Rѣsl��h�m/�GkaT��ef�k,�l��<���������E����l�0�'>��Ū��C��;��1�6��7X]�KfO����1��s.�i��Tv����k,�i���䑏�S�_�H����1�c}�&��ܞ?j�����Ь*�vn�R����'yGM���?#k�q�h�4� L^-���H��=-����I9��B�383�-g5���I]�v��n���瑖�q +�ۓ��5��W'�ƾF�ƺ2�`�����_� �` ++��c� ��~��2R�d)�_��v� �����s���INie��z|�M�o�=���K3F����#��i�yd�i��%f^�._Aj���=¨-Z�O7Ư6]��W���+�����=(�.6@x`h{�Ϻ�Gv��A�nc݈ן B?���u'l@r����+L0�[i4(�ȷ�\P�O��h2�!M߫̀�,<�k)|5*�lK� ������_5F�ڢ:N�����\W��µ�`��� 3��`b�����^�����s���j۫y��T�������5`�����(�{�W��x��q�s��������k�2���l�1��8OULO*45h���n|xUz��֎�4�s�W?�YU�O�;�2hƽ�3�nU'��T�{��Au��e������[�{�l��A�~��YV>{]�c�z:�5ze~�����)�����P���˜����]�XQje�Z��Tj�Q�Z��Vy��s��K]e�:�e���5Q�ɯ��U���\� +�P�V��`d��25�q+�V+�I��{�[�`A���_�����M�c�f[}ɟ���zvy7�QS�R��=��w�B�$i�S��x�C"ܼ+��U>mY�lV�Z�EWZk���Un]��^�����vC��-N�5�e;�l���Z��<�g,��4���r�������Z�n1r?���]�V7_x7 +���DTc+��P�1�o��A~P@7@�M�"p9)݃�*\��P�^xOT5�-�N������\^�G�=��`o���?�.�6����5s�83wf}ԂSA������ˮ�m�th�R��^}9Ӹ����iJdq��i��Ճk�S��U|�]�(�ܧ(��Z�:z�;�v�+õ�7�V��c���ۆZ_�ί��{<��������39cC-�-�Ƭ_�b��=6�����Q�9���6�� +c;�7n��a����Џ��fSE�,2����*{R9gD\�`{\�����o�ϵ���å�n�wR^�r=�"t�<~Ae�-'�����;�����E[=Ƣ���V_+�XA��w�~�Q�.m +�[VK��%�h�U��pΠ���Σ�?VH�5߹�&�jy��)��r�*��߀1r��*-��`��I~\>��Q�;=��UG�[-O��c�����u�4p� +����e������FE�����g3r��<d�?)�,����������{��UR�q{�Ɍ�B�c�A�t�2�Ƿ�ᄀ���g�6����?�~�U���)z#F)�{�dT磢�u ��f��Y���s����1����e��?IP<���Fg��I*�Imү�;�_>>�����s�V��Pca�}���p\�S�B��2�F2�7l��o���ӱY�JVsr��yw9ϼB�2{���ߙ�3<:i�F{�a��р��ф^'6� fk�Q�y�� +BR���.�$Ĭ���������G�{�g�[9;�� ���J�����|�3��mD�3��'3�E^l�wf/o��XS�`r�X���C��.��!����qv�/#�9��.+��:����?B��u���j���x( �*� ~Ea��5�6�j�Y��^x=�8[0�ښՎ�P�:�j��F +�v��X����{P��z����U'��N�p�o��fu��������{��!P�����\��Q~�8��ov������PkR���C�ej�l�̾k���%���s�)@ɇ*�TI�p�I':�:a������#����~ h�x�ݓ�������M�$sl��T����π��RP��������8�jk���#�,J;���������uT�Z���C�E��g������;"�g7/_7.�����|�W���@���mw�l��i@�`+#�� ��+|���H�i�l���:��W�_-=�wO!T��ɒ�G�Д���F�_�W]�癴�J�as����J�����W�_{�Fq����o�_��p{��^�Б7�i]�����*�*����@�Hډldy�UV�1�æ[0����Pk���`�zi�3�F�k�[�^�L�Q�~������ g��=:6j���-�����ۿ�e +>��+TI�v�Oޖ�M4@%�P7�(��2�����`ӝ�v�����yOS �yE�kJ/J^v���yr�`����[O�]<���A�ȃ}/�k۠-���o� +@x~6�'�N3���B����h��t�~:��5_w���j�`�E�����Kk`t�H>龋��R��o<v�k�>ܼ�������!� v�LWۘ����sc艏������C(�D�uNuP�|�Є^�#���i��20d*���.�������]|C��g�,�O~á��!���M��nb���V��u��)��`����zf�-'Mg��]|���<+� +@|^@�)��V��ݑJ{K�G��:`ʃh}���d��\5��d[�� +�|���!�yu���g@��i�^��[���q�w�Q�҅-J�<�Ps������{�P]t�mq>@ +���z��� +=�P�x�4r���=�Y���������Vyq �S*��n ��G-���ۤ5 �K�� ���r�Χ�$߽�{��qh�%��y�{� �j.��Im�}����]�-Ί�_���-C;�P������wO��|��n�G�0�84O��SJ���ޮ��T�]���WNc�鼭#^UWn�@��v{��˽hě(w��IQQV�(��\�q��d=Sz�|eEά�l��T����d��2U�'�L{��9��� H����F1���c�N9J3�r���7�q���O�F�qwhll:^�+�z���j��~�������]��t�l.0�d8��Wdz�O[�Ef� n�W�R� ���22��ld���T�GD���j��Y-�[�H��TQ+� endstream endobj 34 0 obj <</Length 65536>>stream +1������h5�宦����`��d�M6�yn���a�XϊG��~I4��Kq��n����D�zٱ��X��_����vY�گ@�Oy��l���t���Q5�)G�5T�T�ߞf�2�T�x���ޏ�ŭ��+�F;Ֆk�G�n�6>�)l��Ẕ���v�'�eX�В{K!�_�LV� V�7aA� +(���f�f���po�)~d�-��,� +�&Br-���^�[ T�Nxi��1����ʯQ�QZvoMiv?jVR�U3��S� �qۭ�Q*u� ?�dO�;d N���86|�; +��;���=ݩ ���,�A�S +���X١;.9~Px/���?��c_������9_J��"�KF�-�&����Q�ԇQ��̎��@6�Y�>D���F��B���Cd:���/n]��}���6A +ֹ(�n�9�����>ƭ\_�N�S;��1��|Z���8u��3Y,�yC1� ��(,����u��h +륇��9�������o��5�$�ېY������+���P�y�͊G8��r2=���2�T������y�Jow7�x�5��~��؉W&M�Ub'YRʏ�)��[��[J���tm�U7��(���kEw�֙���%���l����j��� +@�-PV��m���%#�Av6�/�^��+�|e�y���[<O����]V�y�1{F������뛜�'��Df��|�$�e�:F�*}���,)>�J\V�vx�����p3^���uĴ��G�qU��KzbТ7� +2��7ϸ#����!���A,�F���h��9*��(v��N�/���^�u�m#�_=�tg�۹η-�"���m��������,�y|ZLk��(�N�D[(�vh�ʝ��(|0�O֖m~�w�MR�]���q +)/�,�~���\56��/��am���g��}<Y����=-!Z@ɶ=�e[��Wn�ʢ]�1�v��{���؆���ͦQ!Z)O�Z@U��*ߕ������5�z�����a<.@~�����Q��ߢ0�_]KJo.���*� 7͜�� �dPz~σ��w{��V�,��N7,ծ�K�:|�բt*�ժP˓����~�xc�V�&����`o�f��h���*�f^'.��>\�@�r�b������yR��V[I�i>�,GK���k�������)��V���D�j� �����T��Ԑ����+N[���-_y�-�:�dmpW���^�~����B��6 �����- +�d[_k�)��+nĂ���Ї�:��n�{z����8��t߫�8wi펽{�t�A-���j9��ep���4Z���� +%��%��XK�-�2�ي����9%�����/�}o� s?=m�h����f�����$G3�,ghJ��^c&�5�G�����j��1��vZ�UK��1d����ޫ��q�i6��Bu��k<L��l��-�r�KyM�HR���-�"sR����0�nvI�z�����m�괾ʑ\c.�b��Hre�]2� Tf�&��� �S�փv�M��uŮ�����w��)�peʧ�Nn(�.MS�����JKnrM�-�2�fJ�N��� +�T��n�\�VUQ\e;��R$�������z=Wx ������=%�R�U���i5sU�[/��^�}Kަ�Iu OdM�!�3]22�l�.<��˩�|5�9q?�s�+Ų��K���J���|����&���k� ��Y��*�G��؝�>���[Yy=���:6�'*c��g�C�j�;+ bX����=��sq<��W�y�V{~�y|�ÿS����+�Ѻ��$e��� +��V>W�Q(l�b�W�K����m��L�N���}Cf��,��?��n�����{4oy���s֡f�"t�Za$��1{\�I��Zm�*���Fv�*��j����,�~�^vؐ㌿��7���N���#�����C� v6�5�饺!F5��{9�%�� k��� �+5T�J=I��F?X�2m��y���Bݻ�ӛ�J���R��I�OvXS�̸�+��f��0R�[ҋ�u���NWK�6�y�G�����,�p��utT��鮾��ۛ��6/�q�����;$u��ʹ��*^�_;O䜮]-(y������c_���}@?ã��B�<��}�����R�����|Ht2���V���A,f���0�Z7=���^��m����am��`��'�H�Mߜ&ŧC%���$%���ԣ��^fo4�#s��d$�EӋA=C9�R�B���E�p��A}�.�kL'x�9�P%�?���1č��4����u�ծ*@���O�Xi��þ�����`f�X�{�"v{ԧh�à�J�c�Pm�h5���!`��2k�H~Y�������T������Qn�~��b�o�������9 �F�.v��T���\�) + +=�fP���F�`x��j[�:m@�Gxg-��S\��?B��o�-5)���@3�&Ԩ��G/�:řg��z��Ư���N�eF�T�@5o��:�fq�U�V����{�������%X�@�jWm��wXK��D�@̮Pr���>�B�*'hc��ŌO+I��U������VL�7~�����4% +�އ3�?��E��b����ǫ%�����MC���ZV�OΝa��X�Av�Cۅ��w���4@�k�6z��A����oŌ��rt�X��K��u���~��by��.��u�'�9������VWDk3�~w�~`����� ��t7X��0�4��m�F���4�L���~kߩ��m�䰳�Ŀ�U��o� p���懝�+���y':�'�1����u��t��d�_�HZ�6��$��Ї�'�"��l�4��8ذ������t=لm�����Ef��.>�{�|On,��N֕h��Z�u���+��&���G��th�x�҂Q��i@�M@~�g�E��� �I�GRx�<��K��8��#�%���ˢ��[�&]dو���0��ٽ^I���9�*�]뀻�ڞ�.�ws�_�Y������Yp��8U�P#�Jyg��x(�P����zR�@�e�u(��Ļ��� ��x�z�O_��'�aI4]s�#J�|8wn��"�3C������s���x�I�8��eJ)� +����|�?�e�:u�%uB@��<�q�M���������f:�Վ��d1hDfY�=�5 ����L��9��@�?/߭I̭�o�qv1<"Q[�]b�����,�Fq���%q\�y���o�MRR`�7zД����P�]h继?%tC;�~�� ��4:�HQ��^p�wl�5�Ù�#̭ϝ&�a<[���9�D��t�奈t���]~T�.�?,��k�/+37���oXb����]�2���Y�$/���0�.�{� �MR���(Ƀ(\kY�o��ـ�_9�_>%�}�[��ʱ����.���}f�w����<&�sj� .Ir�ϳJ6k��cM襕�]�W�Uڀ�,���&4����'߬m�{�@?���*z5�.�7��5�f��V����1�ꙃ�y��|�ʻ��hn��N���y����z� +��r���g��=kY�.m�+%�x{,a���?ؿ��6@�\(��M@�&G�Tz�j����>�|�b���{ ��i�J�#Yl�������m�{B�W-i^_��nw�,��<����bV��rf��1F��"����O�N��0�+�)5(�0��W��ӵ�� �n�b2v�jT��F�N1�n�YX�S������+���y�T _)�=���<��E;��M�Z���|�]��Hɇ>��%�Ą�hظIȘ���~�ϯ��0�����̚�'�b�7�0~1.��F��3�k-���}e�`���<�>m�Y�_���sy$��uIa3~n3���9�s�鶺kCA�t�i�˘�xB�hl��2��D�q�Y���i܆;��j[�B\���|^�Ⓩ���x��g�V�jʩE��CV@�;�M�:rYzY�>וrl[��c.w�` ���L��\ԯVhq8|������P0f�A,��A��!��������G�7��g�%3���M8gRɤ��>Z��~qR<f��5��}1X��Zc嬴�s����Ŷ�$4� 6���,5�0b���a9?���li�Z�Y�S�b���S?X?u�?��[z��w�Q���* ]q����(��"��3�y��!k�&�Y�D�b���^{;�4u�_���X\�n&\F'��[��F��qñQIޣ���b�i�-u���9�-�����1w}wI����ۦ���N�����2 �� +(�� :�-�������U�� r i��{�r{��il�Ev�<?qs�c�&Ewz��8o o#AxD��V~�`=�|���䵜���\�U�_���c�ֲëÌq����VT�����v� �q8��x��:�ЋW�pH��?���`'9�p���x�[��in��d3�ɸ;*W�� u����<�+e */7X��l��p��1 [m�ۥy3���!֏U.;�U�<�~ B +=�����}���5��ֹA ﰬ�7q�f]���2��[6(k���t�r�|9���f����{T�v+�ms'���P��2_j�6F��V6�&�˂V*�MZ/O��+Fʓ�=������t7JiH�L��I5���h桠ڋ�(�ަ�,�*&�yy�U,����*�X�AC.��t���sl[���Z�E�ƚ8A`���jg��j���\;O���μ�v!i6f�g�g�_�P��fي��<�)��B�w��n�����0�(�]]D8�-��<��t� ��ޝ�������D1���Z�+���z�3��T�<h�]1�۩b[HU��}�`u�����{� +8�}��G���MO%�-�'��m-�����ͦ=����F�702\�՟�~y��60z�u�gW�x�=_��V�g�F��?�n�iX-�������,Gx[zo�'�v8���HE j�J�/$U]a���;W���ps���ԵVq}<�m��Zq:�\uv+ꬖ]�Y�� ��2l��|��vE���Z��.�m)�r���6v��� %��p�����Pf����Y$�%��YZJ���MS��i�~�+��kx�U���.mVp��/J�P�M �/F���N�l����m��Ƨ��#J��u�]����n���+֦�]I��V^�'��b�iQ���㪣��=�\fnB�@�L��TY���S��9�+���y�IT�Y{�w�I57��8g��Kn:ʛe��t���u�{5.]��H�E�������]��ڃHU���UR�Z����{���T>� ��] +�f�4�h�?壘���^�-�lL���v�W�_1)������A���I[8BR���Ȍj�t�U�W�Е6����|o1z�nfQ+o�leE���ͯ5���u���a"襓S�J�hu�p���$�W�ʭ�ҕ[�B8�>Ł����NB~š�h��-!��hf�� �T�aS �^�>(uDc9�c�-ۭ��j��ձfZ��g�?���;�<&ybI@:͢D�������K�����w�&��@���VР���������g�s�6�m�]�^ ���yz���`��;a����δ��z�1.<;5��%M$�[b�prߞ�KF�}���v�v�t!���=ɔ�.^-�zr���-=�o�M�'k6��<k�3SV��.�s��!UC��`�,'��@9�q��qE�*��?�j�p���%-�ʗɹ"p/�^����W)��!��_���8OE��c_�2�O-�s.���1c�Q�BU�J�'\��cR6�( +ym8r��u�]=��]>&��DZ4F-��5�[>+ t $�"�ʹ��0��GK�v�3�������l6�)�3<�-����Id���7(g�h��|넻�f���^s�<Kcw&c�C�� ;��?ؿ�1�ɫ�`k�������*��ƼC(�t.>W�#�9H�~;�F%�O�ܻ|a�-�3�v�jvz���`�"�1��9�{�|� <� )������@��;HK�s�zEu/��VQjas�����ř*@`S�f�r�@����@���@IA�q���2����?���i��/4H'l �o�:H�W]�v�{�^�� �D�6ғ>��t�f�d_["�'�f��Y_f��n��G��hkeZ�P�_t�}�tFP���Ժ����1���N�itc(y?˼��ɖ�`��|��Kv@�?PR1҇1�~f� +0N�� u��C���ƽ��������\,C+f�Њm���B��`l�*0�� +�m��r� + a��P�O��A�Y���<ϒ�&�ɵwPt��?#�9�+��X�,_N�ZP~���F�l(�����Шe�(sc��<�����d��w�`F/��W������Pj�h +���K�9 ��@6��#K�~A�4D�G\�~��=��(��r8#�\�Vج��=�o�X���5��P�*3�{h�����o�s^�)��ue +�����Î�M�?(@b�N��VI- ��X���� +o��J&/C���}�ф�U�ˮ.�m�Y�f+{�\N����-C6�P�V��By��g�ි�l�g�z � +�U��'����d�A����Y�.@�섇��핇� +Е�~�e>>u���jJ4��[�4�W��]<YČ9�Zqبg�o�X�-BS���7�|g��Q�������H$�q�D@X� r�������8��*��嗊�ɑ�w���6��X���n������h��Џ�qBy�n�m�qѩ*�.�+��u�ކڝ�,��՞�`�����ͫ�<�d ��\Q�e�U@C@<� ��[�EE����ʇx��W! +����ò�~��V��s_)��=\0_�y��s)CK�����.�ބ�-���F�y���F���n + ���^'d��qHP�����:� +�qr�����#�7�?�{��r1yGS�B�dO��~�͛'�z����`�\��9�d�q�6ut�͢����v\³k�Vȕ3����5�����`˙����דUq +("���||}~��:sj$y�3����~2� +zw������W��%P��Y���I�r%�ZF��F��2v�v}�����.��ٍ���+�F�K����9�G��(������� �;�+��d��� ���m�#Q����&Ҕ�Y'���4��ž�N��ٲˇ�{�g��4��x�K�cfw��۠�����S7B/6֒>�9�u +_*�3�E�����؛o��u^��(��w� vPh,5I=�0�;ڀf'Ph(%��wb��K�����Fx�:Ѥѩj��������y���C;���<���r}C9�`�_��������d�y_��@G�e�iS6�o�f'��V�x�!nϿ�?2 Ak�VI���y��:����_���~`��H2A��0���j��v8�����[c�;�Wowp�Ӛ��x�86��������:���Ѯ[Q���I����n�3�b��k�2Sh��q�z|� �'�Ph���h��0$�����^]�sךS�6����N����4�:����Zo�N���������[�yn^��a�-krH��ܒ1���<ݴ2�)� �V_���g���\�n��}t����p��}_IxP�����_=sNt��x4��ÿ���eV�G�=ʹ�Ǿ��.Om��������"�3~�n-{�=�UF d�M�,F��^�������szu7�?a<�K4���14��}X�-|���@{~�P���'y�܄��i����/^n�����N�1�>d�ev'���錛+����o�]��rɲ䒻2�i~?%��eܛ�=Ϫ�axP��s3�R�\$��_o%��ʽ��V���+]0x�^�8 p���7+6�u�\Of�D�����#�*��ñ�~�&�f������+���Vg��|`��!��lY�M:��Z�^���$o�}K�����5N��Ci��㠇Q�{�����8��|��7����2��w��$S��O��nj7>rƗd�['[��ۑ���9G֘t�-3aP�O�aU˕����p�Ρ���*a����9������0� k_����7�W�tZ�:�cy�t�Djw����o��]��>�j�i2&����5���y�N�N�r^?�F~�/YWn��V�Y���h�\5���5�Ԥ��}��P�g�~}�Zu����âT��&�w�nK�v<�v�Cz��ڄ-_o��f^��Ҳ��W��\���7j����c���8�Ƥ���Q���ͮ�s[�;{GC�h��̞Oky3uqrzzu}Ң��t�`kX�IW�s��P[���b�gkA�t�30������q���B�D�|n=�kO>������N߃�/��jPm��uӕ�y�5��S�@,���s���ԟٽ e!v�����O;=y(��f��*h]��Z�b����V-0���6��; BS�?X��� ��\��w�����s��Ƽ�|F�@r����N��f����GF�K��Z���J��ngtm�E��yg��Z����:�c>��Q(�[�e�ˊIS��n[D>zkU�Ml<��;7%���5V��%�z��ZV|�uz�\�n�J1������Y�o��9����{א*�<�p��Y6��wy��Eacnџ���m7Fg�Ɠy�3��SD���v�ꃾՔק{e �~C�9V�=����*�KWJ��$?5k-?��r����hq?�2��T��w�o�Mi�I�,����w�*��m+u;�h�|f��ܬ�$����� k<]���wLF}5�Kwn��� �W�ɾ��]K��|:��掫El�ȱ�]%�O��甥�0)e�#ia�h��rt�Ε��|����G1��S�]�ng����I�+���K�0 ҝ������ ++�_������*!fZ�G�T�M�~)�r���ʳH���ǗR��]�ּ��jN�Z]������;���ū����I����-���.��zv?ٹ�uk��~�����]m���J���:?h�y����c-Jq0�{���n�<�E:]/�g�j��bE&��LNmZ}q����?����p��ӊvJWE���cp/]�����dO�<���p+|0�q|vS'Pr�,~��`Nŏ�\}�A����/Q|�H��ꂦʖ���n���}��JkT^j��6�Vp���u����m +ô|(�s�W�m�Ľ�E�@>pF�-�=x�����8����7x�g�sD�����A�|L?���m7�D<�L�8�.�aY� �F�Tv�@���b��SY6⣌w�D<O��i�!��f_(.lq�(���Wa�����-�,�նt�K�=���n�&��Rp6�������싅!�:���̞�����X������P�H��?��y���V��D�P++�1�q�`�ݩ�*社+p�IP* FIQ\X_Yϳ?W��B+|w�n�9�S��-���d.�^�ًº�K>�e��k���78���='��8��.J����MM��ô�f�T�� +HuQ�*Ⱦ-HZ�X-_��0����~:�>�>��`]���C ��W6�v��W?Z]V`�K�y={��-��8aJ�B���)�$&a������U���;7�vr�J��VV������#%��R�k7�pN� +DZ����Z�sl�fs�k3ã��݀��W�^c�L��<�)R��<���p|AhM*q�E�����~n=RA� +��*�&^�R��j�_����.~�v}{�>�VPr��������v�̸�=Q��ߌ�pi���0��#4��,��O��=��ZҰa[7P����NP>�d��֩!�8cA\.�xr���FU�B����T��F�����y8&s z9�kifa�9ˌk֜���~�X�rF�TJ��Ф��ժ{첩zX��б�D��o����h�*4Y�@NU��0U� ��`����������iO�A�3R�j���m���H��6H��H���sm�^�DB�@j�|O7M-?�Z�O����0RF~Ӹ@�,�!f.���q����i:���xa"����o�7��P� +]`u�� +�qgޜ$��@�̿@�23Pr\�Ї�g M�{�&s>H�[ �����VA*|� �h����8x �����Xb��Q��ᓸ[�F@��4��ʜߡ�W�P���� e��@� �I + � �o��e����_�1������'�j����AZ�N �;��!��.�I|�N���y��C�Eܨ������;��"��I�4��fX:��~����M��8@�| ����7��l Z7�d���YP�B�'-b��W +}G��b���������jbϜqL��i6 >�*��r[A��[雷��h��s����7 ���g�X���3�Wڗ.@9�ȧu�H8�Ļ���(�s^�x�z���7�|ym���O�M���k�1�Ɉ�W�}a%_1��w�ÿ ɾ����t��j�A�G�Kpr�=��uا�]��d�ٞ^XX�4QW�ݯ��գ�Z>i���X�_�����r�M\?k��ct|��g����oV� +��J ��^�����Tp�UF����������?9Q�L��>� ~�,~k���vI\��^��O�i9/R_]�1���l�<�G�����)D��#���c�=��`u_N�A��^)7�ۡ?�O��c���.9�n�A���h�{ֳ� �[�-@d�y[������a� Z*�ҴV3��x��?};�.��5X\ùf���i�ﵛIn]��A��p��I]1���9�'������Nړ7L�%w�h{��ۦijg'������f�v�%�+������H~�d'{��bI!染�wU�c�W��j��;���^�o^ɼ^/D'��"�s��Y��rY/���W��^&��S��ǝ�ޝ���I�l��[V8.\)��������Lr�L�4Q�'���Cx���0ɉ�wd�\*\)B!�g���tmj��9�ς�������ös ~�ny�K�wȾ{�fv?%m}~8�L��]�)6r�W�T��m�-���<�����`��r�ϯ@B���w��knjXv�ˤv����"�����;���i�Ud/��ۇ��7t�(c�������a� g���9��R�B�*�ʮ�!�Xn�����ҷl�h`X�l!s0��{oJ���o�X���AN�H�ԇa������rr�r������h���Ug���¢�?DuWH��&j4G��1m:5�Z5��a�$�m���d��Zx �������p���x3����`�N�Eu;�Y��/~���[�y��)���2�;|g�̶�}��� :�pw�$���f&�z�>�d��R2֕��� iK[��u}�Ik��z�.����bqq��9�c�t�1��c����6;��mU�#�ۏ���ϔ��`�����" U��O��^��`q���C��X7��O��n{8jX�/t��&^/�u�Ar+"=�=i���ݱ��4��N�6�$�i�t�b�k4i{1>fv�137��Y�O?���s�#]�nG��^�#m�7���@�=A�����ד�4"y_�l�7��غ�5E��a�G�A#��I�HD��Y�Y����Yk�yw_���v����ޢ�Yչ��Nv�F���J+��c��L=�ul��|{(@�E���,�\h�ʲo�ĩ��ڐuٽ(k@�Eu܍��Kӛ�S��,O��~��٤6��F��2��fh]g\:\b������EF_��_Poe3���}�C�Pxl�y��Fe�Cʌ;�/�;>d��U� ����fS��l���yu�-_6>��7>~~eD,47"�}�Q��Ї���� �F�sg7r�pi�k;ޙ����7�&�.��Z乳�>��2G�<2�EPB���Zr[�s�Y;�]z���S�4���nJT����J�/7���*>v��m<�V G����t8�3�`�g�N�/���F���z|���.����x�nVA�<�*�xq���œ����u�yx#:�A���zd�h`t�>�f������B_ 5 �fjޟ��,d�^Eה^�)�5UK}q��V�!���� H +���V��c���)���J�ʇ}y��Wv:��Ƥ��~��۵Ϯ������3����GyY1�v�ǎGS�N|Uݱ��)��<�8+k'�7Xf̤-��|G�Q�^�FG����y�"ť<�f�s������吹���V��/.��\��fbjPQ�dtF�j��_�3���a�P����ֳgM����Ե���*iIrg0�[rC@�6ϔ7�I8z���Jj5E/h�חI;�/���_�/3�����L�#���t���k�Y�*��B~&��l�#n��TJ���_[�a&�Mo��+��b�r,�[�P�C ��4�y�(��th�&�G�SoI�m(�Ut�Ti��̽�����\5±��°�C�Մ=�_����q��C]�Aa^�̲6)�R�h��4dd��l���IFus�˳��Ƽ��&��F�>�4b[�(�ɨ(g�ֆ����Ymj�a�����y&�8�.�?���7�zP,� c[���Iw����y�<�Ml���N �s�3e��Ϩ�8���>�~0��e7^$�� z=���L4g��x|>�'���<:WH��n�5��H)WM��pn}���)�q�.]��R\k8���۫����P�6���=w�5��Mΐ���!ђ`?�rH�����ʎs��v�G1֛L:���u�n�T�=�;S3���ڼZ�c M�T.��.Z�o�T���\�6�1G�F����� �����|�w�O9��*���Ya?��t����Ac�yH�Ɲy�Yٱ/�>0�6g'�dl^��yM�߷C�}�fm� +ǒ^��ţ�$� Ogx�X&ٷ��X�� l`���t�hG� +���lZs�#Z�g�K�!#�x�_�J/��K,2�2xR�ܒ����!.���O�d:?%���1ٞH�����h7���°i���X�/��?2���4?�ī���4��� +m�O�����~��Tͮ����^]f�z�w֏�������b+�F��V��Qg�OCJ���y<�����`5 y���V Hg�^�K;�Va�՛��)��o�9���4v��m��}#L!a4���T�i��2�SXvW�� +D�����9��`x��#��s��ʪ��t��?�j����E�n.NA@���Vy��6�lm��u��w����M���M���L�����]ݧAa-(;��"Lj�JR��t�QS�L�o0�H�mR�vP����,��oϣCr�n�1KW4:��Ë����>{K|��eg\}Ϥ]�:� 4�E���`V�al�N�.C�t�F6�z%&�Y5���1�̚�]yi�IX�gI�Ye����d��(?L�tܖ����{��+o�*!d�������x�#�~�&Ń5!؍N�{��n"��G<J��:�ϙ}m��66G(�:���y���D�*�����1�d��F�&ʐ�j�;+ҹ���wq��n5?��P��r��=���� 8(9�]t�E��/c��[�����>�q�8?��;Τ��4�%s�P�4�\�I�^VktJ_Y� ?p�x�ﲅ�zC�®��M#'�v���\\�!��zq&���,c���L l����>� +�A�_�� +��qCi�������2jVqd�ΩԡΙB���½�L�^9w%Bb�'�gD�˨�'���W�ϑ��kn��<��K!~l?���� +h����4$ط�����4�� $�& �C/���]���A��b}_.�[�~#b�4�j#�[i5�2Y|x=WF/<������z����)(����������FO������1�Х�J.�)$P�0�B�E�� +$0ep + �a@�0���n^�z� +),�6U���>�z��ꙝʆ��syO�O�9$w�I>� +pX���|�x�'�������.�X��TH>=���ɧ�ׅ��0���I>K��2L>�N�BX7�͟@a�SL�"S8n�@#���DM���M�>7O!~|N���P�S��K~+��j���#�i�BH�0@RH!��f�K����p�2N!&��)1�%h؛���w�����@��H�j��"�z݈)<��n1^ +�*�3�#�N"��մ�Bc�L�縷���� �����[�.�o�V,�0�.|/����L��x�,��٣��_�� a^�|�(&�"ᬖ"�{#El���?�����/�)���Ii +{SpVʦ�,�)���:N�J�K�y��O@��p�]I���\�m��f�ݫ��n^Y>��`���A�խ~��F�=����*+�,��1$R���R��m�h����� E��4E��)E�k8Et�%�)R��w#��K����S�f�>�?)|��J��{��0��ԕ��Aҽ���c��j6�� �K|�����^�ӣr�'��~��!A��A1E[G2Ew�Z���b���bE�Kч�L������R&E9����y;E.I?��Q�9P�ת�<��|�����ϳ8ᏽ|���8�!�{u�9W_'0���`��;K�;��g����,~���I��P��|�2��m�0�b"�\�8�fM@����<6)f�)&��$[���v.I�������D��n����C�p}2������et��.°̜��l�pc?:l�1�koĻ��.c���/k��K��t[����F%���c�H�@�!�fz59�,F}�wy9�I�h<�d��/�5q�q�b�}��yz�O��89eqquԴ�ᰝi�C)����#v�ю��8؈Un�nх�����9�]r'o���8��� ���a��zn�ӌu�S�d))n|���r�2���QӢÍ��ϋ�}gN+vY>�3�9��FkwY"��k����_� H�gq�߮g��u�iy��:;���Ҝ1?�����&�z|G!'�x����ao�]�)ڝ�SL���A�e���R�4�������Z�UT��3���������7Kl"����ZX)ǩ��#���=oAV��y�bX���~����1mN�oȞ ��x�6�aC]70������ӯN6�_��v=s�43_TRܕ��5͎�1hFε�@ݓ�i��b���[��^%+-��� �����5�4����Dɪߛ|���yԧ�y5V�M2���ZX���z����s�g�[��;r������4S+$Ŵ�fs�f�]��9D��*����{����fL�ֹ��Y��u^�����ģ��#AbSc��#uc+�q���l���n/����s67�g�6����w0�ɾ��N]WFڿ�u�}ք5$AQ�(�-��/Ӎ�����Ւ�5-���UTA�̗�Å-�g3�=�G�5���D�6���l��<��u�6���K�ȅz��@�� G~ἃ/W}{��;��k��.-�CPG�n�_�ؘ��s)~e�IK��<��e��?����V�]kk��g�֛���8�db=V1��K�+�o�Oe��l�r���Kٶ�8_{����]�v�]�W� �W��}�٠]��=5�^8(_:��M�^HqdA�V)Q��|r��ᴊ�{�Э���&� �e�L�W�lD�A�k�nZQu�_���k$����0l0���r�l]4��I��^e��Y̜�^nw������}y�� �k�K��%C�x���/�/�.S�Z�J�N����=���[�>�MVN�Y��s�u`�Mt��~䬕��W?�o~��m��JC�9ȼ'�[J�o�E�W�?h�2��n��w�r��f���gq���n��c��!���n]��-B�����l��T_��W8�3���$���'+�n���h��~x�>Y^���T���~m�<ΉnK��uo}�K>�����,7�&K�5㳑y}.��UW�y��j�~F5�I5���� +��1�VԸroi���.s��L���t���`��>~�̺�ZV��lDp$�*�qq��+��z���vC�:`����ΩW�w�y�}�c��҅.브2�J��>A��3$�:�����=� +���9#M)���LZ�"��E0�+��B��py<�G�-.I�>��k4�,ұ1^�C{4a��Z������J���,{T��7���څ��K_f˘�yϢJ��T缜J�-Z��g���\.z����m����cS��.��Y������((<{iP�S�1�ď�q����|����y�e�Gx6�?`�������l�e:�{4ҙ����6��Q�qŻ�@�)U���{�)�_F�kM�-���Pj���:��4#)�F���d�56��V:#���i� +?d�$��Z;��e��l-��I�/B�;;�A|���˕h��ە|^��������-g-~�;�\��;��(������4��� +�+͜�����D=��?�|Tq'rS�%- ����)���?��lH8����ld���5%���v���nq=�.�s��j��7h��<ϠW��^��l�2Ժ�>QΛ̲�dV�v:4n-�Z�$��͉[�]8���p���}�������C���I,���h,�Ez����ݼy��:]ܽ���w����s�����K��N�k��Z��&MD�rz\�T��g}��T=94��v3?�HKE:7�g��B�!��^'�cvm6HK[6�e6�<:l08��s�jq�&��e$��:qCl�����q'�g����l�0���Җ�+�d��VZyn�)Zztq�������r)v�E[�!$c�daH��=����J��S�,�&Vj|LFh4O�^q� 3��i�P/Lۺ���K q>�}$���$F��1�k�m�nv�a�;�y�Y;)ͭ�Ɔ�d�:��v�%�M������X�r���{�I�#��ƈ�X0=(���X���VA,0�ai�v0���^��ǾDm9�E�\�*�'����@眈����f��{�}*-��QE���Anř����C����@�O�\�HF�ᱝ������B��W�p%|������y�6¤����Q���Ѻ�d(s���OpY��wɬ�_T��œj�hV�~N�ս�P��O�/�v��)tw-�쇼���|�{��i7[&�L��+#�iд��@���D�)��� .��E�$�����Y��Z:8Ҕ*��c���>���/W�3�] ��t�l%ܹ�0� ?Xb�B9:7�����/ԉ~L4J��q�s��i�w���۱��:P̡���v�ږ,.}�F��r���0ct�>3Ev��4)nKT�6��r�]{��Uk�T�ʯ�U%�=�cse9���Zw��`�!W%�"s��@lޘ@�ڎ'����h�-@�����0lȦ���b�����kϝ�#�[P��J�)bG���`T� �e�ޡ�Z@���X�*4���0��n����%�G�'����c�^�z�*-�Tt��V�>ZFź��n�:]�� �0�1�@'�����<�Dƶ=&V�N�A�mY�D�AMv�W�o���V��d��&�M*�p�*/��PΕ���] �l�R�&��7FMB�'���t��"��!{���8�ͼ���� �.K��]@�ĕ㲊+�I��$�N�4�fKF�ۅm�I\��B���!T��6���>���yQ!��H���T�7�"�Yn +l~�����sR���]�s�y)c4�4�_�2V���)�ƨm,a�Ft�zRC�u�7`���~�,8��~&^m�Gmy��;Q�7���ԓ���DeK�C���J)���慒��I���T���,�d�1�a��-Ĭ6:CmZ#���a�� ��>�5X�GB�o����U0�b�yH�*2$��0���Ϲ��F���Ƨ�<h�4Ψ��"ׂ���S��3�r�y�f3w����Δ ��,�.����#tQ`��hBB�l�:`���cH�����b岀b� �&�C$�V��m��~�Be�B����o�)d����M>k��| +F5y��B��3F����u��*W��\ +ɛ/���p.`3��n�j��F��5��9���x���_��&4_��`o2�~"l�0�w#��n���";_�A�Q)�����#R�ڽ��F���o���C���@�Z`����}*�F���+8��L�I>y����\�3��٣�?:_����|*w�)$�F����H +7O�.^A��+�B=�M����t0G���~���M�ϐ��U��O>�]�M������;@�$��Af�uKBO"��&R�&���\��YOU?؟�_RhoA �9tr�n���Q&��n��'�p�^w$� +��R�� +��������o$�:�w��RߏR�ʁ�7� �SH +���Z/|�2�yg=���0�}�K�~۽[��0~Jq¼<��f�Q(����ߥ�%����"g��6���Map�I��Oa�VM�r �nh�y� �����X�_��rye�#�Y��ꃐ���R��V7��u�������/�ܩ?-���P�{ą����Τ(�!S�A�)Jv�I�N���Y�h�!E�� j�m.r���P}n�g�����c�������imt�b��vYZ��@ٿ�ްV�����RO�k�f�w��R렷���T�����~���)�M�1�p�2 +���z/TS�0S�)�/ S�W/uW�?K~��^0r�n^����+���˨ ����Hf�쌌��i.�V��n{9�,;�=fW�q��V�M2������|��2�Ok/�����]��}8�j�\���ߎ�b�����t7Q�}�up�K��L��E,�3�ˠ'|����(���G�[�k{g�cm{+_�-�|F�� כ�5�HϕW���ja���P��yٕ[�!���>e�"G�JQ�@�����./��D����:���p��γ�28n���@\��Z���W��հ?�w��݈�^y�R:�jw��,�ӖZ'���b� Ph;�utV�Rz�pe%��s{2��� �����e� zd�fJ� (L�bP +s��Ҍ� �~�����^9�U�w��j��ʥ���Y��DD:[���n��8�e���,H\����&94���n7� {e����`0y+��D�V����R)!�:�������ʌ��H�� �"����@��I3� +�f�J�K%�U���|s�Ւ��X�!y�����Xԃ���Z�\u��������g�>A8�g(�)� ���a����L+����8�]��(�y��`x7�].?]у�k�H���[�����ْ�g��.-태;�Dݩ3�洼Ҏ"��-`m6��A�N��6�V��X��#���a��`�r��i�)�գ��kO��q�M����x aB}�,mޙ�-��\Y�Vi�f�Q���?�&̐K^0(L ��wy�T���kZ��˯�>,�U�BM_;��C�;�l�ި���+o��:y7��>;�M����=p����G6w��:����}�w�~I~��C���Y�-�+;Ӛu�+��o�7��k�3����;����'��v3����b~z]T/!6M�z%BԜ0�qs-4e��/�g�y��|���+���%�ө#��I���%t�G�d�4��w�m�*�ö�0��H�`�M��\�+�@-��H1{��*���ξ�Dt:ny�l2��fe���t`�3֪"��)�����S�Cw�T���3�;��M�+'�Z���4������.%)kR�d�����i�7�� >c���B0}�~)piG�"�V�?O�ߋ����ʪ��\X�W�*�\���b��8jA��X˭ray"�|�N��Q�h.r���J��~ +g}���X�O�d���g��NQ�=��̀�(�c^Y�:�*Ҳ�=�e7����x�/����_��y�R��dO�uن��v�Ǵ��L�g��8�N��\�O~�����?���pܝr.�rG]���>�=�K�,�,��6�����VP/�n^CZ-V��J�B6�o���5�UU�y̓�o��iU��H3����_����#��7�C�[�|9��&?�d�`�I��SP����>�\L�G�a�~���ڭ�m,�^�����!9�F�3�I�Ct��C��zU��Z��VҡLݐ�LC��슙���>�|�B� +I���u,?�~D��j:^/:�����t�2��vG�F[�7W���:9G�*��ѹ��]�e��=�]�8w��XkYZ��8�+���!ߨ�~�/��[)�Z�?tZB�z���&Z�W\i�Ğl%���f�y�ifΠ��ݷ#�ޭ�co=g��"j��t\�� B�4��;2qw�'V�b�� M��[Ŗ1�4={V�ꮝ����u��Zf���ƝO�â�&;����i�fGb�ͅk�%�ꓒ�qK?�4�م_$�����L�#gh�8G�j:7�INhL�������v��v��'�("����� A��!W��vG�`��>A�z��a:j�Mm�j�����Ť�=)Y���h�$1C0��I0�h^�u$R�qlI�RQ\��/nO��:���e��.�l��U��f���D>+��`]�zv�c�~�؍���=�S��|��Z��Y���O�vZZX�h��$�e��Zg�b�T�䶁��c���qn��rn����B��\�LpW�V�T>���x�WQ~��#J>,{�O'�}56j�"���x�N�C��^L+�x�)�6 K�b��I���[=6G9�>��r��l[t��V��^sĮƌ�^����q��Wf�O��H��1n��xL>3�1^&�4_j�8^`�L����l�rژ�����+�q��]6����<hM�������4� V���jd�\+.��:�5��Zh��sM�qc^�=4��N�����k� +3�'�C�Y�L��/1ث"��QmE/5�;�R���p�*0���ŞZ�.��q��Nޕ�������E� v��T���<e�5���^ٔ�wܞ��]K>�)oL�P{ߪ��%p�ItX���R���ŴjhO����T�o�̢~��Y}����Ր�ur�������� ��f���y���&��f����]��]-iC��x=m��59��%I[0R�{�Y?�xl>#���w�]/?��UGٷS/��I��M�LvX��B�)����s|�9�;V�G=�z���a~��j�*����<^ Z�����/+��~�\�C�͕���!�����.�^�#�N��:�Fj�՞pl��-���X��JLr��cTf���p�R�hW����.��Ys��Y}�Q%�Lw��?]S�h9�#{���i��s�ΐ�������b�/���A��ޛz,�� [#���}�� U8�Z+���ʛ�,���ԁ����n ��w2j���/<\W���Zy7)�2A�B��t�u~��e�s��~�"6=�E��ri�{?Xi��]J�S+�-�#��3������ �,��#���v�t^r�m���"P��А�E�S�\��C�\>�s~R�h��G6a��1Q�Sqi�5�%kx���L�X�WJ�p�-��{���g{����K�K�*7z&PN�]����#��{���� ����UDk�{,���Ֆn���-)�>U��d�昺3f+�fuAq�^(U�x��ĬV��j������Y�=�nsM4w��:��9\i��C�Jfs=�3E�^������� 3�}3��̲��b��j��&]����sk�X�u>@*�Oy4�dk^]���є,Y�/Чc!�ϟRN����|P��;x.��`^Y�`�Ym�Ym���V����BO�mV��[lC#O�!�%��"WiCo A��a�54�vʘ�x�r�`�A���;��I�����!���%�^U,�a�e<�z�2���?���"VF�M��ݴ�8��ly�AB�o�>$P� 8C]��� ��LHh���c��l�J/��/�|L$F*�k�-�m��`��n鵪��nFT�O{��b���]*���>���"r]_s�oFH��_l0�b�@� �[b�A��h;[@���m%pB r�s[��{[pK�E��[�Y�����x$;{�葼�n���!h�I�|�Ij�\� +���"2(s�搤��Є^�/�0 ��1�-��wI�.��xS3.���ϟ_���w"���)�I�e�$�hO��}�' ���I�L�KH��^O�3z�,������{�����$�b���[����7�<�Izo��}>I��x#����'�b�����}<$g@�>�H!�|��<A�I�|�p�|`��Y�L�V���7��ɻS��z)`�I� +Vp�Ŋ��r�V�� +���Z�9�L��[=j_�ϥ���/��zOa�qK���y~�jY((�y)�����<����ɇ:���l�O�ͦt���]c&:���|���|����4A����i[�#���������r�;����`L�n�ۉ��[�CS�o�Ma��E���ɥ0MUS�i�),�R�a +U�Y +����CIm�X"u5�{͏��K��:m=U��=���0�rx?���fN�+A�K���sʦ�YX�3�-��:Ma�~�f��D�qm��w��`��/�\�.�Hu�����J�i�J�V7|->��s����K�� �����C�vNgĭ.n����W��n_^8a\8M�߅��;M���ؙ19p��c�^�U:ae�l���d<��J1�g�)<ѯ)R �%`q�(�F���D�$p#EV��R^��=��ҾW�Ix}d��%������&�O�h��2�8*�S�����CI�{�S4w}���x�M]�Ly����U����Q&�˥���bs�}����"Y�l���5E�\���Y�&Rt'6��ń��X�yI��z���\m\�`��lo��vW��- Ѡ��~KD7I��6��U^GR���Ѕ��w��*��E�ҹE=3�]��ױS���V�Ұ��X2�O��;���@p��"�~��A�w�F�GZ/]�Өxn������α�V�<���ب��N%Z-�������8�X�"<?4��y٦ʳs��f��L�� ��`Q�_\'��O���u7���d��o + �"�9��)ڂ� B�b�J�s�I��|rR*n��k\&�;��׳���ʞMy�k7��Q�g�M�Ud5e��1 +���-��Y�s�6FSCuĽ���.؞?�xd�~���z���������[�h�0t[���ڹ=wG�~��U|R��iUR�;��6�$�Vj��V>�ήʊ�zO��ɚ4��p����˃�e�=�Naa�>�� �Qa�~%�hoPZ+�{_���ryL���>�(yl��A�3��_���n)���S,Y'dr?رT�Mw�o�)<�H��|��//sr�����T�����,�Ta����V���6*N�+'n��9��ẝ| +^e����3;w��^>�̧�~���/H_?w�~ё>�}�~�%E�T�w�����϶O�6ӎ7\w� w�u��y] wSNɽ&-��%���尴���c�w�^��Y>�.D��'�f���\��9����*�Y9�k����e3/تe`�l^����*��`�������W��"a����m�1�����%����z�v�w0ZN��f(�� +y��{ׇ�<�ݱ�˃Iu��q�5��`�m�����:㏧Uk����j����.���FJ����C��}�|�C��_���k��<�x�]o������8z�g��ԝ�3��Ѩ(�A�O=����|�+f"�8�c"�Z|R�� ��z׳˚�CM��A[�c��tM�RR���ޫ��./mft���%�z����S�Ɠ^�p��9�Ωnԛ�Q^���ksT-��&α�Ӌ���M���d��1����|���-k@����N��A�!����r�m�ʿ����W��W�/�tW�]�ev�/�����/?؟ ����H,��� �X/;�`�?��4 ��dn����hi�=Ԇ�37\ �l�2���ێ��l��mҺv���� O��1�n-}�A��)t/R�Jo��E��9ZG�S�0 ���|�2�]�z��թ�����r�K +�����zl�/r8]�I0�n� �bd��6Ղs�����?���t�A +{+�^�r�Y�-�l��Ӛ��]���MWc�s�}�wNEf#_q��~L�w����VR��?X+��i��o$�R}�����"Q�ir���6o�dI��?M��`"?�^x��{.<q=���Lx��~��ݭ�!�1��n�yc�8Tt�6d����v:��m����o?N�e+��g�*|$)?�HȮeJ�^�KR�H�xJP������?���`��cp<vic��`������hZ��B���vK��;�:��&�{=PCK���I���i�WT�!WSzF����KKf���JG�+[�p2���r�� ���c��6��y�������!��ս���ۗ�_n,��uZ���e<`*�t� ��煭���9�у���U�G�����i��v��i������:�(K�{���}"�ē�JXW�5��>R?������L��H;��0�5��\0��{�u�3�&�����)L��*�/N��x +?������=Y�������K�a�(+t����y����R�+��@����C�#�XhE�YUj�@�U�J[,*��@J ��r�7x7��Drl��Hl��]���>YO��_�_U���W��/'�?��O���9��'��'�i8����C��c�5�SӶꢥ<�VΣڴC��M;�<��)�~K��$�TOJQ4�|]�����R��Nu�]�m6f��<�4�,�3�>I:,��HToLİW&"j�_�Y!^�c�?�������ū����ܝ4����Mv�\������A�f��\Z����ý��M:�2m�|=$I�qs��vC����������)͟���;D��w*��̂�ǥ�~ʿ�a����t�5��:���4�:�����Ⱥ?Y��^���֨H9O�F� +'���v���q�n��&�"����|�!&3� t�*�T����y�ĵ�}��鑮��иV��k�2��eQ��/V%�YLŻ�b#�@"o���A�Ӳ{�L� �3$Ņ�Fk�ʂ}5p��s�{ًlQ&+�fИv���'{�ot��T�~-�{�����d�z����J'�y%�*� +WxU+Z +�iot*���,�cY�˿���$72����n�������ݏ��,�lG�,-<̓9�S��:�P��L���@��[��a�Z��k� +2ل�W���(�WnڼA�n�1�igb�y���6 �f�#��P����+mXz���=۬�Z'�[�|`�K��D�����B[��.�$�A�K~��eX��d�r���2Z���#K��+�����`$ޣ'Ěsc"?�o��QBJݒ])zW����a���������j��:�m�V��yw'Ŀ�[ p�)�c�̍=0���'=͚D�,2[�i�/��S���[��*�,�;Ii��B}C����^���'��-���Î��0�e�Ӧoو�b�fZ���8�0|��3\���1N�3+y�g��1�����&�~��Q4(,ρ5*���4/�w��4;����b�6�R����\8��V<V/�|���Y�"���Εp|AV3��g�ʤ�m'�����u�1zx>�ho�eъ�r�EX9Ƞ���w���^�q��Q;B/�t�)z��_��<�56��gi^~���4-���x�:�kD%�r8��{p�r}�9�b>qGn���Ø�hV�S�M�Չ�#.b��Q�r_�Fuӂ��&������d��c�N�TU��Q?A=*�"J#��I��b�b����7��֞���1�kj1H �d��?���R��Om��P��|� �H�q��4�܍���3��g�z�:���Vj��t;�O1W�b����9�QJ�7�/d��e ���2�Kp��^�:�pc�ބzX{���U��͎v�����?I��(tH�e���}�����L5�x��<L}��H�un��G�d��L~7�'p�]�3�~|����4�����!���ۭ��Y[^~�G��h��wP0�8 ��b��P�4�}����I�w�|�N�@�����w.�%�z8&��\��O��T��$����&��LB��x��d��X�5�K���=I8t�#���/@���#&��O���6A�����`�Q��Zឤ�A6Ins���O�`K�Q�c'�E���p��q�$J+�ʀU+IT�P%\�L�^qI�ǟ����O� R(��s��ʹ�s��@�1T�B����=(�w�y&i耨�������B� +��w_�lA�Ux_�Tl'�9X�1�̸M��! ՒTZ�b��^���>w�!�ܩQ�)��_����"�$�1��=`�/�>��k��p�$�U����D+y�6���O1y(���c�.v��� ��w)SK�1����!x<P�A����A�����w�ԉoW���&2sk���!��F + �C +Y��ނ��������M>�i5��n��J��*�F�ΓL�]���v����Uʿ�OQȼ��J~�^y4p�k�E�[��p�d���q�,a�u�r���7�����w��_p�v��:�i�r�Nۿ�a��r�4� �C�?�b12Ͳ�WM��)�h�����;���n�E)�>?�˕`Z��������e�W*fr���+˄R��Ƨ��?���[���_{��x�R)�إ���/���68�3��>Y?�\[��[���$��|̦�곮��wc��^�DG�.�/�)��?5�b��<W�$���Q5�C��C�j��~`.��>��~���z>̮/ۢ�|n����>6;���nkiW���|�D�����ڧ�bi�fU�f7�=����49г��J~z�D:{ +��y�ѣ6��������Y�O������ý���-7̼��<�ۈ<W_[j��%˻A^�|������.��ե��������1�4Kb>��Ms��9�u3��w�{�bQ���\��Y���թ�c���`��-����^f)���Vw9[�Y��n�g�a���;�W���g���z�n��-ʙ�u���|<��y-?<9�D����7�:�u��Y���Љ�\��ۈr2;Ŗ�w������۶R�֪x/��Q��������uz��B��9L��ٛ�γ�(X��߿]��64ߤ���I+�l�B��4k�e�R���t�؇�/�Os9ُ���.ZeM�|�B��P��5��>�c�x+�F�Z#G�fK*S�\:��x7��z����̏�X���P�!t8��U�6�i�hvi�9���e� -x��=у�Yߤe�N�.:�@�����K�2�n�u�j�>9���GC{K�m9�I�M�v�q��w���/ij��7�xe�"���&F�0-9?�Ɨ�xJ��I.-�����G:��Aڞ�"Z%UU� +�Z��'%\�%ܚ�wm�/� 9�%���K���@ä�j��c�o��W}q� +K��I*�3���"����&_����6��)?�v}�Y�ړ�T���:�ܞ�� ;6�SA��m��(��˷Q�11/H�s�I�<s��������!�1���旫0(��G�d�����(:�7�ǝ%�uI�0]���]��� ���X��*�&܃�Ѳ\��9�Ђ+�UOǨ�\����Y�;�}!�z�?�͛�YH���Fd*-G�>���к�.�_6Hs�������xгݦ�Hu�d�8+����8�ޙ�����=�k���-���?��t�w�3�$b�S���-�!!�Y��&㔢�c�COEf���d��������˜?�����ϗy|�e�e���*�k�#���s�������u[˱K�I�[�E��g�եg.�<������n���g5$�O�x ټ���P���m=��s�7/�X��Ƿ�I���fς���'�Est +8�l���~�|YY�!���c���Ss'�zo6�b�κC�Ǡ�Ͱ̨jR�;Y��o~�[�v|�<U��kW)���{�ȉ+�-���m řK��ru�RX�_�G�<���9� +wc�������/�_V?�w���q%�~(���]���*��K��c����ּ�6)*M�a3JAo�)HOS[OƑ���������C̓�G(ah'��&U��V�m��+c�5����e�����������P�F���1��o��韛���wϪ�zļ�bkb�-N�wߚ t��K��?ojM"��{5'˳�0��z�ׁwxV���>�p +��X�]����lk8+%���%�3���`�~�����~�%����3�5�}���k^ht�Bs��������r��yv��^0��~�fo���;ȫzڭ)���K�?�$o"�%�����}��FD�1�ޯ��,��;�k�r3�����_ȞT��&noܧB괾��S��f٫ƯU�F�����.~����}x�i�m�tj�][���[�3�[�1��erp,J�V��[����@�sw�!bq5z4އa\���&���kA&��+��u���Ә�բ�D5��9i4KG��q�qg$�D��D��K����0x��;�:1W��RsjA^ �!���������i��!��p@e��xy��8m�Y��#�����Ll��&�����MW�L�W?����d{5≮?5�E9���J�~��{�v��`�����$���|n8��x�w+������}��Y��&�F��}��W�6�7�}�N�Kq4��09AKi��E�Y����ܒ�Ԯw���2i�țR���Q���\�p�'���A1:��m�^���7L'ߧ�|�u;�,�t�}� �_~����S�����.��j���&=9Qv�,���ɀ K�-1��n����W�ҵOV�!���2���4�ـ�?�����C�B���H��u�+j�@�V�����j�C�ͮ��ҁ��"�FO���_�><��Dz�,?��T&�x��[�����ɨg ���;��t}6�Q����ڏ�NZ�&IĻGP]�]ٞ㙋�������uOwLl��ф�h�h(�Q�քy:-�ܑ���?0���Hb�b���f}KŅ���|r*O�l<Pt%�9�+=��k##��(�E��&�G��g��g7�f:�֮��R��,�6�jz�v�f�٠�t|j�^���!�<B0�V�ތ�M�x2�@<7IC>�Y_���h۪����{���kϭh�-)18[�}?G��6�b|4)Q�S +� =�g>�L�qG^���Wb!��N��,�ND�M�qf�}_7����o���F�jm���Zefk�#����V�)W�]���îY9o��2�������LA�ia!�꣢���|:�+�=iMP���H@�����;��S���꩙\��I�Ym�J�r�͊^+���yȕo�Q�r��)I���ɔf����&���+ڻ S�'oP�m���ԫn�Mf�/�SQ_��͇" �O�o%)=�TX/ +?u"C�`��z%HR(^�>E�ͦ�+>�����o��5�j�4�.^�|����}y6���� +y �����\ٰ��qљ��^��kT�AN�"�����g_�0=�0m��C�7����J4I#��Wn�ܾ���g��� +���c�������U�d/�+̶6�=sc�Of�e���Ph6�1љ�?0D+���3���9���-�0?4 "�� �ؚ����ߴ���:}��q�����:��2@ S��&�r�H΅�>>�\���h� +��2�x���"�l"��:DR ��e���@dT� 2�!���!�4s +�$E��`_�qaP�BI�]���x�����)"���ۨ镚�ԅ��'|�(�u��=;�kp>w{�H�D�z7��u�߭Ԕ��@T�U��n� +QҴQ�<Q��{�j��h;Ӿ�Þ�3#���J��-�����7䑛ir� sA�}�1)�ݮ��-*�r�Sd��>@�5i�D�D��3�S���n;���!�dm1�w��v���v��@�?ъG-��{*�T����� +�ɻf�I���I�gIB?Iҧ���+I����2;,I�@���au����Gy��Zv����������;=�[r������}/� ��:�/�w��%)[�@��)��������M�0`=����ȧ�V�+���#�5�gF\�B���'�^��e5Z��3�Y���H��/~��ɧ\X'���y����e3I��)��\4vI�n"m�� +U����t�B-y����B=>;�x�>���c��^���G�3�=K�c�pr�3|Tm�|?��?����Go��9'�P�Y���_��k���,���HRN�%i�����5"I�1�$͔扽�W ��v1��O���� +����k����Q��j�&�7}�W���v���1��2��x�9���Y�%�\�% 7O>ۻ�|�M���AQ��뜒�@y%��9���M$��5<��M�U���S`z��Y�zq��UQ���w�:n�b��v�������l��נ�H��D�9�+��x�~�c}{�B��������s�"�93����'�QP��a�|��%��nI�/�����p��o�]�s}I:�/$Q�@���`\2�:W���9fw:����x�e�c�a� �@ ���j��Fz�A��������F +Y<`՛����B�� �W�g�.a���9�����(DQrhǗ����E8�*�r��:�NU�p�J���ȳ�tE)�W�?�<���y������?�k����Jm�6��k��\5�u�3�������z�]��f2�e����4��MҌ���u2X�7UW^���W'��?���m��$yv�R��Ý�e�5j�{��M�O���1;6����X�;{�B���3N��kς��1�y+����c�� [�� ��ٿH3�퀸3ͤ��U�R�W�\���m�;+(X�T߹����s�f�,�ײ�{�.�z�+U�UZK�C7��w�D�S2�?vl'[���V�-�7��( ��<;�f�Yclۖv��_fVK�Y�"���c��f��]��/�#Z~u�Pj�M���� +�>�� +���&����|�w�u�������U��B�H��#経%͔�jj]��g�r6oG2;M���:��b�w�/�����~���o�i��/oĄ��r<�ף@�i�7�}}s���ʀ��r�L�FV��{���αN��gg[~Ϛw���f)jvn6�O��h��'eһ~��i���� �oi;�*j�=SZ��2U�Vf���C�%>� �(�ՃU��ai�o��ԖkD��<s~����;�$�/�B~2��u垾�?C��y>��{�L�lT�d��n�t��u��]��J�6o1�rN�Eu��|�b�,���%=����E�iv�Z��\j��ݕ�wW���lw5I&�e�;�̚(ڥњ����nuE6��bMge�O��80V'&ҷ��K/eڐV�#EUJ�ф|]�C�����8�q<O�5ϊ�>]�4����E��}Q��}���Wg2�'cL��^������2�κ�Ë�|��.Ԯja�1M��0Y�e�a9[��F���������{�|cV9��*�P�{]<���FGA�b�)g_�i�snDl����s˥��)Q�h����4���Z�L{/��q���Xi Ԗ��v���נ8�Ml�mF���Q��űT�`.���t9�نհ���ϳU�Q�.����2�r�>ѹ���'�}�����ƻ���`Ah_�/ +�����#��po�'{�������v��'ߘ7�i�|a���d`�m����i��Ӣbچlrm���Le3v�w z�k$���%�S�/K~�o/mV f�Ue�r�;��hؑ���#�$�K������E����`+�F�����gWwפ]�~�.�өn���B�s7�yҎб��!����=�b2V�o�j�^�:����b�:�|����ͪ�R������|F ^n0��I�֙q��8=A�x��I�m���<��G,����c��I�v�s$�զ�1�! zZݬ'�U�e����B����%�p�B��-��O���X nE#�S��櫐�$Zg�Xghe���(��0����ӛ���� +��>\��@2~��J__��V1��A�o~��n=3��dH�>Z�_�?���̎?$���,N ~����S8�oX�Ӽ�3�l>��r/�A��ܙw|��#*��M��Jy��˼��}�}*�����*A]ꉥ��>���S���]{�}��H���>H�+C/,¤�ZE*����n(Q��E\\*�ֺ���˝�d�^�it[ތ�ssYw�b>�ٞ�:Ө?|�R���=�i��ԩ�b����H��ޒ-k�'[ʄ!��[�2&�WF�"�!����_��f�hM$&�齬5���s�Ob��`~�M��%�l4�[�;g����� R�V���Ln4����ا�s�m�A)� K^b�A�>���>[�N�z>3�>>�c����6�t�������� +'��</�癳k�����[�Qf��2�K�8�g���l��_G]r���2p^h���Ġ��b�H:�Vht֫��%���=i��+aj�7�� ���,�]9�]�6r;����I��7\�;��������RE}�������R�Gz}4��gWS�RIJ���?<��0V�����!Q~��;)�/U6-�ٓ��� +�D^�ׄ�Z/��;� �P�s4���J-�;��~`��v\{?Gm��>�b9��EH�{t(�|{q�|a]�<*h�mp���� ��"��(�,��i1�Z�lĬ3������k�RH��.%o��HN�A�x�*M�����S�ˍcv�o����=Ə�[;p�,zZw�h��Z�=j�t�sm��j�2�j-�\��ᠿ�Ҷ��� �&�*D�$���Gz�>�H�L�ğ +a:L�A�/7{��eV�3��8��\�yw���٬�v���4���A��`4��f�=��u�8�V�R�t�j3Θ�&9�i�w�Zϟ,�H�o8|�pj-@�:��gkS�>�k��� ���~`�u:���%v�r���]{Hys��l���r�F�C�G[]�ҺƓ�5�>K-�o��g����I7Ԛ���h|z���{潾��B=��?p�/��w\�j�:Aj%�ck�7>��'�Au/f�����D��5����G�W�c|�(3e�C���;���c��m�h�vs~�f�ߙ��i�.�T/����������l�W�sX���Z��N�<�+�3�.G�L��~@��W��5���#lT�F�Ai�'������_�F�7͏g��!��\� Ċ���\틋^���{�n�&����~�.�nM��V�J V1�w����EE�TN�T���t���r����2���W�I��b~�f��:s؇s�|�0y8~��C��o~�Ov�����{p��z�fx�Z�� +wY4�B�g�ܤ��m��Ny�0��G���c?��7W��M�\���ʑ}�p�9C�LDt�(���W<�>.= ��`���I�=ԉ�Թ��ug?A�7�?�n�sC3w,��君�9(�-ʜN�]�}� FߚYxx�ʩ�.=��S`��o����u�=_@nj�9�]�.��wP��\!<�B�,V!|�Q����/K�Z�� ��"�_k>�#�����`_�]����-W-��6w��4���G��7Fu�R���]1�s�<�JN��D�������"*�"��"�z�Ov�5���H�,�D��%D +�; �B�d�C�r��H��A�:�@�l�C�:�Av���i�܍${�G�>FT[�������^i>�b�'v�~s�f������ۅ����H��JޒM/�H� R�%`�,D�P���.D�y����˪�W#�CWk�ov�� �P�����A�̸��w��X�x��D��V(�wG2-[d�V���Ɲc����_q��,=����f��[�����W�Z.c�վCn��?�mgI����h;(�h������z�0��7����(*o-Im�$�,�V���[��$�M�Α�#����#���q��J@��;�v>�f�YU�g����W6�.}g9����]c��kI�~+IZX� B�,ta�;l�7/ FH��`�eBO`���%���-صa�&v��K�^�?�֎��� �*��Z7�kx-__�I��?}���$�eHDˠPW<�1���Pc���Q��x(.G�U�6<տcz���ۉ�c�Z�.��>�=�[#}~�/���*{-]��X��7=�o�M��?I���'/�o�����h�(ۣ�$��?G�7^��z�a 쵮 +��o +�G�p���nw9qf�K�so:t�\o���_�mz��< E��k^��^��l.��"̚���I�i͍�Sk�O��q��;���8欓�������/G^�e��#��]��k�֭�\�W�=7C:"���b��x�U--\�VV�M��yD_����1����y�AD����Lco�8.�n���&CkH>��$�h��������h�-M@ȦDz��@��R���>��Ѽ?y_��m�rfq���v��s<x +y��:sP�D��ӧ���yoߥ��..] ߅E|;�����-�����k�H���ʾ%��|��g� +��.���"�Q�5�_��^�]է- +�$\��i߭����u^���Z�ǫ��n1��w*4��`t�leCo�V�m��Tڔ�2��]W��}�ptdy�f�%�؝�|�% �wO��E + ^Z +u�m�x�'�rĩG3��_�7��C��ʻ��S~�w���������`Û�u=^��չ$fVJ`����6<T�b�;����e�s_����pI�4uJvn[�- +�υ��˧;h'��a�/R�{�)dFҫ���W2�ᶒ6O�R>��b.����yl��J�u��RVٟymQ\-����H�8o�}����3�*��i,��|gQ��|���yE_Lg�=������]�c��*7��;�&��$̿H3���fڄq����K�1~��Hu�ib�]FZ��"ӁV�HԖ�C��8}}��CӞ/�����?�����Lޜ�A� +��l�� �O�Ee0�ŵ�O��;�櫻�_}]�����j>b �0���?���<� =�����0�G�.��+�|ˬ���M��صQ�`���/x�ޟ���x��@���˶9u��+[�Q�Ll���@�n�X����MTD�<J��MK |���Ӫ�$��|I��I���?���=�=���\s/���FZqe���>n*�<n~�z�k�v͊&�4G;��<qdujx<�0ra��u)���']�r`�T���3���٨U��]eu�DR���c�I1��}�����D�b�_^��]�B���Х;�v�VZ?�jҫ�ܷ��جW���t�!M�i�G�0%��d�m�Z���i�j�96U�z���� +�<������I���(�ICD����Lc%������!~���<���_z_�/$��R�gcz�/o"��h�5�Wd�t���MN���Ζ�<��E�M@����!h�륒��dz8P«(*-L�e�9�$���q|�|�}��~�{+i��Я�\�Ip{�%p�p�`����2�bl#���Pl�a_��w���팳�Q����m�Eܥz+/��iba3�4���� +��^b�Vu?e�2��䛘����glj�����c��F�@��a����\�����=���`yl��}vx�U��$�܇�vE��NR_�/�p�����/�27���e� js��\��1}ы��P?������,vWЦ��;��!����` 2�%/�8[���l���o}�*}�<҉�sxs��!������1L� ������� &{�_p��;����,��p���t�I�.����Y�_�\�qЂu�T��ɗ���E"V���w�}�{F1C���7�Bd�dGg�.1�Ob5�Fh0x������,�ӝzy����<R�uZ +���Q��~9����[��w�����[���wqד4t~���SG�������=s���xcg�Do���&H�.�5�í���SJ���G�v�M95�(�%��C�s�'�>�f@W���!zB9'�ʇ��r�|��ϲ�K��?e��ì���C���&��ڄ� 9tf˅��p�|rG�ץg�3�h.l>���7�H�6���ب��PC�r yGd���`2s�l�5��ν}.�{�X��%�%CP���V_���ꯋ�����.y�(�?�9�K���L�"a��~ی�l-�L��~�aҹPt�)w�yk6�����YNG؈=�!.������}&[��~�e��X��_ +K긑���?�V�F���`q��9�5``��~:��*�l�h��U����ӉMs~�/3L.�)�Mݥk2�ܤ��� ��n�5F��h�h��YCv�y0�e�|��_�6�KE�.��ao\���R+j�EE@O�l��[;�W|V�2�D��.u������;�R9��P�N��:����p��fV��q�ޛ���|{�Wٜr���q���S��|8�Bc��V�넫�h[�]KH��tQ�_�u&�.�t�4�?�,1MC ѱ�3x��9�sg�����c#�Bc�l�w���c��� +�e˿f-l�Y�بf�~����{�s>���ѳ�� ���zV&��U�?����4�ȪګW��δ��w�ؗ@�x`T�0�r�� ����t��+v���;p/t0�|m��?�#��Pi��~7�LZ������1�:� +�:Ox���� ]��m��T.�ܛ�2�Q��{U���nHV6-l�y�}����)NuOn��o�JD��,��vV�g���ژ��)�ԣFm��d�[��u)�6����!��+ w�6���6���ٴf�f��ZM��!M��i����)gg����xh�fS~�W�ؔol{L�A�v~`*���x�/�N�����f�k�DOo��*��6�h���JK?�(r'O2������&��� ��=7 � +ս� +����km�h�~��z�"��Uk��r��e���$ς��{1дbڔ���r�ո>����%�<�Vg+z���Hw(ȍ7�N��q����R#3Do�UÀ�ˮT� �U�ҽ^���b���XU���W+�kZ���F�~�p�Pk��a���r)�P)��{����$+6�<h�rkn�<�"5,3����>/߃��w�s�E�>e�̥�*xs���W�^�������r�*���ċKS&�/urd���̩�L+��R�h�N!����m��Bo(3� ��T(P�U����߸N���)�u����H�`"�r�����!������� �F�lϬ�mC���G�ԉ���<\Jxs(M������r� q��#����Ў�=f�mVZ_�l���LXj�:H��c��2{��h��3Z�rj������1���2�@oQ����%����� +�������F�~�cHjEpY���0�¥R�f�lݪ#��&Oۄ��e a��X<!,��6�lK�;���:�}p�@��d��=�俘�KXRM���Xj����w�x�29/�3�Jλ���$��OeYi��U����>d97�����8���v���Js���ր� �Hu{n�$���1ؗ���P7��P�PE�o �>�#�}��P7.)����0,q�U�}Jl��w\�|��bG��R$��a�Կ��i���s���a��5��{�2�6�t��'.�����+Dd^���*D�!"�K"� D�"q"�g "s� "�Kg���[6��ܪ��Ev�7��(fG�(�]�����9$��Z�lK/]rg����9���)���D@"�������I�[)D�$�"U5��*D�: QÖQ�cQk/����@Tȫu����e�zw�W"������j̀�q���niV�mK$�n�G�J��,�s�t��T��ߑ��c��m�;(�M.�;u�;6�? jj�@9������kz���O��&�N1�ϗ��,���nP��k��� ���J�&i��I+6�����k$I��̣$a��ߔ������gBq�w��;~U��3=B|���~N��-M�����g��"�3x��D�7���Z �^B���b���7���w +��;�C�i�� +��˶����;~u�}���=��$^�/�8+%�Au^y}/>�6�<��w|��C�p�����;M{�sIڤh���H�%�W�������ʃ������F���qqv\�_�s�x�Ut�䮨�,M��#����:�/w9�=� ���l�u��.�|��y����k�ߵhV�V�"yw2b��n�I:�zIb�@a���?������F�w��5<j�'wъ?�C�k���k��ł�i�k-��u�;����E�bl^�m_�sq.�@�N��<|���f��{Ў��\=Vתr8�X����]$�iQH�ؖ����)� +��4�'�PL���|rauq?u�����l�� +��bW (�ȅBؿ*�5Zn��f ;qq�cu �%��&�=1�O���^;�:����C��n?�[o��_k�!y�*\�(P�����n�>'4(^k�>T���!�W�SG�$�a�%���^r��fw}Ph2�a7��.�Ǿ����y��v��-��v���ұ�e���6��7��j�wh��.{gp\V���{*�$<��$��=����Ӫ��uK$k'o��ƫB��*yW�Q�2�湠���<����c���5?��A�ҧ;����n���[�Aiӵ0���c�Z]��V��"�!��4��t�v�G'���{o`v��j�F�b[���A�2t<|.�۴��\>C +W� +��u8Z�}wZ�����l��&�i�]��H���x��A�������_<�N�+%u��~`�#��v?��k��_� L���~=l9c��#b5�{Լ�n�Ե b��4�Ұ�K�6�������%��T�����x�K���X��<�M���-.����#Q�}�8{��)vN����)u�;Z��k-���u&e��:�氥��Mj��>�]�>{.&��*U��4YE�m�q�������lL�(3�;��w��5����y]��U��|�� +�CW-Ȇ��|���1ӳ���R�b^�i�mҞ>xu3���dQ�n2|}-���I�� 6�:l�+?���`��Q7ejQ�w��7��i��j��S#EwKeR،)9���]�ס������a^��_Vxỉ�7�ϺLL���L��D0ܗ�Yr1Շ������V�����X��xF�OrM�4���]ےtc + �l��x���?T��ݔy^u.�y:x�*�2T���[���D��/���S�'niqkcb7�:I6���y�*F.{C�B�Fj������Z3�(�Q2�ˣ��(�m�["_�N�M�3�T���{=�� +�� ��zI�:T���fG�~yhH�y�B�<t$T;�w���X#�5m�6o�`2I�K�X���>z�_�P ���ard���^HIfWǯ�����l&:�z%B�� 0���o�f�������+ڜ=HR�J8\ekq\fk�� +��11##�u�_$���^��O�3���1\]Lzώ�o��\��{[��N� +2�?r[��$�!��+�o +���� +�\Y`�l��\p�lo�U�qZ�8T�0��FȨG ���dh��=u+���*})~)�h�����^G�ȕU}�ج�j��n'�I0�Y=UTi{��� +��/���;J���� +�}D� +��� +��!x��n�lx���(���Q�G��j��a;A��SKJ f1�5�*L�U�K���3�+|��!ʕ5nOk^g�Yn�]"���BA�)e��:��f�\�dy°����bL���؟�wa�����k�2����F�(9'Q�,s������{��Y�z�?�t�<&e�U�5��`���g�֚d o \:cޖ�+GB6+t��f{Sn��ƨ,6�kc�>��O���z��k�5[עw���%�"�j�M�� ��Lk�LZ|ąN�U� ���sk����N3z^{�������B�um�%�j5�q�ֽt�݅[�J�3VIWڼ�o����/g,#����Yc}݀�X�U�DCWX�����K[Y[������3T͇���/~�J��k�T*XDX�x�+U���f��Ů�oہ�C�VS��b��۸�G�m�T����̘�g/W~(c�,uƜ>"���핫U�ێ�xg"��Q���]��u&eܰd��e�\�e��A�� �_�ay�����F��������5�A<����f�E�}�80��k�3��S�+���7��86$s*�Rb��"bhEק ��U�ώ�U9�PmҪ)�V;P���Hnϭtj /�� ��/�bW6Vb�.��W��ū��Px��/�J��c��1G�Yd�Iw��W:���nꎌe�V�J>���mߝ�`��7�O m<�����H���2ɪ+*����J��+�!m�d�=�u�bw�[ +�������Y���M��\!����ÿa�$�|6�/�f�Ԉ�3�(G�T��o���;O0;��*%����Ƙ�+�� �ߌo7�r��B]-���cͧ�y!,���L3Rjww�x{� Q�?�0�]��tb^��+u�g +��!�f�!�~�!�=ĕ_��?W>m��������.Nw��i4���3��@B��)��G#^Ӭ�/T�tT��ܟ��ZK���H<���}Zˊ���Z��L� +o���U�������ޑYW/0��-��7�!�G�����{�8�(E���bvʵ�qy��t�Z� +���Y�� �Y&���+�*+���QQ���,u�ӊ�?/��ˀ���f�����)5���9�~p���*�`��$��q�`�P����=�ɕ��Z��v��\d�kS�W���ׂ �+0>��*�)��|��>�U5\b�'n��GI]���Z� +w���Y�b+d��1�+|�|J\���� �*#��u,�]cfK�L�Uy0������i���C��Y���R���1$�!��Wi�ATI��%m�8��&�)iV�]Ҕ����2�,mH|"��E�r-?��⳱Hn?.�è��GW�N^&���`,д��(�ӫ�w�� {�܀�jL$�`O���A(WJ�2��?[\ ��� + |Q�������b]�֭����� s������9����v���|D�k�`� +��I�i����Xv�� +S�;�ٜԅ��Ze��Q��'�g���QŗbR�k/��K��m�(���m��쭰�{�BC���-����bv����S�۔~���+T� y��+���'����^_�U�j+OoR�w��\R=+�ֈ��D%�fO��9'�f�\���Ṟ;��,H����Y);����U�Y}?�#ts��+�[ �B�@��VG̞�B�~v������*��e�@P�� &3���{�����|�sV;O�/J�������`��Ly&�w��:-����;@��j%j:�l2,�(�9���(� 4�h�k�}nf�����c��xL�ɤXP��U�sa��0�����L�|LG���`<�E��Հ�@�;��?^���=��gy) #g�0�N�G*�M�X@2N��E3;B�O �*W�[l�����X�]f�=���`��p���Φx��W����å��\�k�4xe��/Z�߳|�jv�)��2�n�M?��P��cIы��10j�o������*������ +��n�߳��!�NQ����:��1� k �������-'�����S �����[Y�����X��!������l�:Sz��~�e��1B,�m��E��BgXӃ]�c�k�V��V5s� �] T/�tqs��6�(���߿�ޝV�ҀT�@��LRQ�Ԁ��H�^M����F_�VNժ����^�^o��+!����kR΅���I��sj0J�A�&��7�_{�!��w�Up[�����N��)r�Zr�с�*m���(�Ju�����*�(�����t�� ����]ɨ�ڴ<���"?#슓�n�S?�)b��a��F���'U��`� J�Փ�K��c� �3O�Y���k��<�rX�b��*?��*��MF4�H��b�����$�i)�j�v#I��8Ec��&���MF�)��;��˿�O�m��{�?F�y; ��*Qֳ�sR�����w�v=��M���YN��Q�+��~�>��.������:���Mo`����o�.��Ͳ[�k�%�O��?� �yBu�������<t���^�w�J��D��+k���@�~���L�B�tx}�/~G�gR�:xi�W�$�� +�IN&��S���V��n��z���ٮw�{��u'��W"\�/G�_��k{��ۙ[��S+*����ǐHF�O��8*��运�fM=yIx:�ZP�^}��b���8�����Pm5������߾.Gy_��1�@���^�3'qy�!vW��52o������Y����[�������X��5��ʫK}e�:�q�_$o���z�l��jzMU5�" ���@]I���y9JE�|���OZբ��l +�A?�{�w����G����l��y����_u +���^�K�ȋ��*�[m��s9��T7���=6[�YvVC^�?ȿ�_$o���"�����W��%�bB<f�S�|Q��1�zŃ���݂U��NE�u����4�}��Y��eZ�I����C}t;7_��l���Y-��hm�r��S���'Gw'�q�/��s�cqnt�E�Q?�7���pD��=O�6�n��_�i�|������tN��_I�R��Ɵ�]�ϺUn����@�����=��duӛ�h0�08_ i?���h@uA�j����(�?H�5,��l0_?�AN��}{�A��|����ɺ�^k8Rʏ��"W�Mc�N���5YJak�C{7���s�_5�dr�����+b�B릎�w%|K'ԖX3��BoXަ��5�j2=�W���w0 +�m=�ꕎ�{�&�v���o�J��[��h�iɀ�i��J2����;+w�z���_���z._|���d0����ӛ���v�cm���u�F���ʧ8����Ro�p��1����?H7(�{�K#w: +�n�'Թ-�O+�o�J����������{�X\f�F���A��__�#{��S���l�s̯��(>����D룤�n��d���]�/r�S���.���N��ڏ�϶�S_n�Z�rK��`j�A9���s���U��o,{�G���P�����p��(r����һ���˽���p_���)#�̺7��8ߴ�{�e���0���Aa����N!�Yf�~f*�֛��uɤeOP��st-5s!�5��ؔ1}��`M�IO���s\��'tr{��q�ςp�e�b��Tl��Mbg���?ش_� ߗ����j�e��R��L<F_�x�wz4U�;7������k�Ȩ ����/�CW +�[ki�[�<�a����չ�@q��2���DZ��� :�G'��>�lk3r����,f-��n��iu�P�����W�I�V�;��aA��K�Nĵ-�L��:,�s���v]�>�i� �ƚ/��F^�7���nyu��˕���w� +FۓeI�a��jO�jY�Ѵj����ޜ��"Q�T���VH��Vf0CG&S��)����]��/N�)��^y�4��d�A�K�B�i�5Z��Э5����~�����y��w�Qf�0v����� ��Om�����tX�ld�T7V$V��.�F��T��5[�=/_;�S�"���xC��!g̓������Y���rXPyiܟŨu9"a�ʜ�7�7m�})hl�l�'g�R�b��J m9`�v�<�ԪV������̳Z�jI���D$�3�s&[����]5-�ǁ!�ϱ>Z�������Q���lk��k�_�A=i�q�b_�j�"���"<C���ؑ�⸹��Ou��RX\rF�B�˝K����=˾�+���ji?>T�T|3����d�G�ܓ.��%�1�qI�Ċ��L_���PC��Z��B��BY9���8�p�"�*|9��؏�QY��Ӗie���'J������������W�7�=)6��s'�b^e,'WӪ�:������gbri-��Xo��ʢ�L���6�����8�4�9�Ճ\e��=� zy{}�eB�0��*���m�S�.����������Zz��ul�|9���1�ik໊�3kq'��3LW���l�Od�|��fY��B#$���A{���:qo��������߸��"���;kf��:iKAI�K�!���.�� �Dn/R�g��U�b�Ob�^;|���l�^X�p�P'Qۦ� ���[��3��]�L�K��6T��8#�ot��d뺡�]m�q�Z�>Y����ֆ�D��8�˅����t����5S��g�p'SA2�#��/(Ve>\���G̉[����#�,����/�S�*�E�ړ�{� ��� �W���a^�+S��i��Li�OYֲ��Rk�S�l�l���Rz�x �r��_��`�Z�Ӎ�(�� ������q�*~�ʹ�����ˍ��{���/�\��8#��a� x�韄�Ӫī�w%�]֞�Ut?FY +�n<YB]:+L�W���?��ҫu���Rk���7 +^��3s��t�z�OG��є��I�A8�Rt���0��z��30X����&��F/����[���,�<��\AK=�����Y֥ϫW[z[�Ғ��#V���ү��$vۤŞ8����V����<�ǽV���~�E��3�l��[ +a-�.1��@dp�jўW�P�cgI5[��<�vy�=��y�H�d�<�w����W�_L� ����hiiҠdz�L��URێ)�'����|��)����J(áCQeJ����ۀY����g\��3����w����͇:N�y�AJy���OѯK�RrX�KaХЎ��P�������6�Dg�_L@����hY�A�Wz��8���n�r�[�1��t�iv��$?��1��褅����a�V��S�*o��"�\/$��jN<��!�{�r���Y�J`��{e�L�^>��x��]��!�������ó�{�gk��a�W���I��mkŦj7w��̭���5{��ꨭ�S��Q�O��n8~�x2���b��l��VD�~ �˓n���;�slX;�QWO�䳅m�� +z��e��5��1w����< r��p���8���p��S��拡wi����Q�;ruЩ?���3>�E�7�%K\��d胜��U��D1�f�DZV�z��3�T�]v/��ud#�S�~�~g��:f%C�/x]D�X�P�:�QPhl�ɖEï��bHY!���C���bom��_�H6� _ϫKm�������\O�)ȓn [��wJa�z�'�ق,�z$���Q.wm�`��Pdz=ӝ�M#�H��<�VR,puᜦ.�Ufr�0�3۬����� +����(]A#xp@��'�]�����fF�AWk�j�snY?ܫ��0�=��ѥ!�CPc�k��)����JL�Hg�V����rʜs���Ћ�84���q������5��vH���>���t���s����͈ttO�ݬwK=@���/��e��K�Pێ����Z���H��q�%�T��, #����#$����'����`.q)œ,����{��²X,�,����C�X#��Kc����J�`o�Vx������Xa��y�U���U^��v'�����5yeBC��2��L���nWs�f���G����m���G�Y��6�b���|�ڀ������=�p{b x8��$�R�%����l[^R�?�Lz���Ul +x����g�����/]:j�ឋ���J��\� +,l��͈2��F�9��9H<<V ��h�d�˦��Ôߖ�? +.�;�_ ���V3��"�}�"@�L �= ������q �@��$����� �};���yEj��$'����#��H��-l�I��D�X�0ՠ��zr�6�����?��0�_�+����H���^f�<\X@^8!�O��o��J����n��AP�R�#~�S\U1�Xݍ \����'=�-�d����^�/n��?�;��P���_���J��(�B(�>�M�Mq��k~ݶB��F f@�2�+��b�M�"��? ������r��M��0����~ݶ�K ���? ��$XXf#.QV%�9�7����N�� ���K5^|��_E�+Ԇ�_�j��Q��������t���f�~����J�Xr��<�u���� |̊�����&P���p�.������<��u�����lG�cY�~����?�~��zU���_���wRۍoz�W��Z>���6�a��}A���|��o�� \w�A�zϷy9*�څ����Kk����?ݭrt�Qُn�O����d�g��A�����a���n���?^V?+ד���O�����=�ߏ�s��+�Ym�%zx[���J��=���M���O�C��/k�أ���aq��_�Ƈ��u���WGꭸ]�\�� +��w~�����9J:��/���P�d�BzAU� ?5�n��뎵���S�c�לԠ����n��0���dM��l��ǫ�ݍwKq�!��/���O����P|n�iv��M-ZWz��͕�ӝs}O�=�O��V�s����z�b�,T��0����:���� ���n�vF|� b|�W�� [�����O��>� ��n����7���oG.�Nw�N�5����nB��۸C����F�����\q�� �N�^Z[ x��4o>�E�Rz��ܽ����k�Җ���Ѧ1Z�V�7�4�/��dN��8�Lw�m(�{1�x���.��+��IW���Sw����Oo0�Q4���maa�~��=���zEt�cg�%�ťs��.�V��_Q�Q�������kW��5ۀ��Q��ņ̹3+ ���'L~6=��&|Q�%n�=4�$2��6Ȯ*T��k|�p�^]�Tz�ױ�m8P�K����|gݾ��[�;����-���|ad\phF�u�(�6�g�&��_�z��W�N��׀ܛvPmҺ�ʄy��u��u�����/F}�&7��t��tε:��.�\�֝m�d[��Un)�l%xo$/�����i�Сo�O#_�оn[�+�<�W�� ��(l�A�����;�ڣ��k���L]N���N�����A�*�}�@��aS�wڱ�k�.v� +��&�4�@��L?g~�&�{��Vj���Ƕ����v��#�¨�+�:��ng.����49���xn�|X��`���c�~�횐[f����<m�yX�A��?��������Q��ܓ[��UÏ�ͬ�6j�L�o$l����k��W�Գ�zKl���""�n�,8��[w=�n��V��5uצQ�R+{�5?�m+�����n��v_\��^|q�5z}����V�E��g��ܶ#��6�|0%��ܻs [��U�Kb��ة���Ľ ��+���҇�#_�o{,���� �Y:]C֞b�nlY���UuhvR�vZ��W.�͖�fm=2iZ�ϛ{�Y���c�/��7C/?��{��od���5�5)F�r8���E�4u����n�Lg8X7�O�3�u7բ����r������N�S]�l�w��w�s�Mf�n��)��Uncܝ���벞4�A��R�~���`�Ï;ۯzjQaqh��&�Aы�?H���^s1�OBl�"H��[� +��0�~&�ZRk�w:V�4U]mW��Ϯ���K�$��Z*\��*�r�ק�{�VI�=�����f��&K����`��Ug{5�s~�d�����<m족��^�1Ö�<������f�8�`�AV�Z��V���*��Z�cd�B���$���,&�r�0;����nJ��� +������nEԌgXU�ʽ�f��LY�W7�F۔RXv��Ɓ��F{;�A�BD_�� +����;�7�+İ���U�T�5�i��O��c��%r�Bn�l -�|��nY�_�Ơ�����7��t����u'���V����h�S�TV�b�)��T���ԘE�2٦D���? ��0����Z�4���}�-'�F=�ڿz�-*�t"Q��i��~x�̖{ȗ��'e�9Y�rUÃ�����ZD�" 逥��A� ����+�r��i�Py���=����Ϙ���pkB�~�B�Њ��vS0����c�^qJ�ֶ鋾��˶��P��k�de��P�u�c�s}̵�zf��3�LY��%W�t���f�Pq*ӹ���^g���/�ٗQ��� �c���=A�*C~8��xE�����)O������]���v��w�i���ܮ�s5;j�궵'�77� %�=sG>j���j��iʼnڊ�{��� ��}�U�R��ċ9ا3�A��^{fq�a|H��L-N��=�u6�L��|[6k^r�\#6�����K=C� +u{'l��5��&�٪Y�0��T�є0���i�,c>��^�2q��@%�)xf���\�O��pO2���9����H��M�C��9���� +�8l�L�a�Ւ^_�^� �^��cz=;O�u�������P������n��ф�΄W-|�&wlZ!�UWo�L��w!���y��X��uyU��*�^,��^�3��ӝ~na6���m�La���:��Ծ������i��S�3ɓ�ɓ��'�9���0E��t���6�w��x��ӛ��&�Y9�$�x�*�$��n����G~�p�q��/��˱9)Ԙ��Xc�1�`0G��[܋��.�� ԁܞ��9�!ϜY$�~$7��a<�����( _/ qP,İ�H��8r����+�?��"7O��z��h��܋�>- į�P��l~��z�՛e�c�C`�R��D5��@фj��o��6�;8�^���Tv��H�]%Hr�k E�����%�ps��� 8��n�I7(��b2����G�<T�f]"^���,�YQ�~2%�Y�ݩ6nힴJW���!~r��T�)��*Q��|q28EC��"��|6�C<�1�8@g�֬d +�˂,�]���=W��ڇ<�u�������φ�]{�����o��Ҋ3�k�I��=C捺�FF}���� 4Ǚ5C��IBv�̽���g<����i��&����*���7�o�%5O�v-w�M�\��� 9V����+�g�+C��DE{��ʍ�y��*k�&:�+Ct����2��w۪X�S�����UJ�����U�<2��iE�*�*�m&��ɧ����U����C��^�pC����yU�z1ŘGƗ����X��v��38J�'�0�j$Y�ą�eVo� P��Z�U+�PC9�Ё:��� �m��q���}F�+�qҒ�pѬ �q���hi\�f�<^�#�zd�j�x{�+��+=K�o2nڡ�=;���0���* g=�sd���d\x�X��k G���L�N� +�:�\����s��<� �b>;-��8Pݛo��FC媋����#Q�h<��/]4�2��t���2��s��4�^�e?�b��9O�0@�W&�>���h�����S�hLe���뀆�s@�c�����n�~L�3��E��"�3��s�:�F���1py�k��4��6j�&T�ɷ�#}�sY�TW�[\z����R(��`��2��nۀ��ۀ��Y��03I��3���6� �(`F5+}/�xu���ސ�dk�\ʺ����<�i��4ȑM��Cw8Hη7�~� +ɒ6����k���m>K� 2䯞�`- ��M���82�NJ�k��k�+pa��Q���Z܄s7�>R)�.:��*���k⚮ɒ�"v�\�Ʉ=�1)�;/��N������=���������g*�q��#������U��G�����؟��%F�XV�pF@�{O �X�Dν��i@�_�Ui�(8��H]�(�F^��[��I�ȑ�A�]cM4�8�ݾ�ͯ�� ��� +r���Dڸ{��n�IJ���t���0{$�t����&E +��pd����]׀ܩ��<u~��r�(@�i�����DŽ�7;Yq�o���R<��n8�6jB�r�w��3�]�_ՖE& ����j�Mo����<%���^Ār��@e{M�r�����������a��o4���~~���u��{���g��������H�$1�Y +k�bxJBt�L��z~l��Է=�7��OJ�c�0��������j�!������i�J�_m�w�n��'������ d�'r`�??Ս��W��r���=�ڀ[�U���mr|[sj|�����{unWb�B/�Kzεϗj��'p���f��zG�AcC,)��F[���A�J��h�u;��u��O}Y�?P/w�����\ ��=��Q���懣����ܜKg�t��哸2�c�;���7��4�g�y�G��s�=�->��.�/���\[�i��F����A�G~�7A��s]Q��F�z�q�r�����O�B�� �>�r�7/��n��[�u}nv���!�'��wau�3Ċ�b��O��" lg�\���ѽ��敌�������D���:���]��M������9z�`ii�S}�����V{)�B�a+���^���p>'��L���B=�g�������>;%6*1 J}e| �Ƹ�<�c��A��h�p�y�?^�$ �?cT&��mM������M����B�ꠛ�R�,��|�Pg��rT������Y�N�l,M�v�M�ml�;��sdz����<;#��Pd��',�h=�����/�B���vV���>���~/��s���_���j�ν�Xqq��^��U�-�{3§���h����=�G���4��#T���p"=�!4z�3=[��,�_T��_�Zom����4�>1�w��}ޡo��}����^�ں��N��Wg- ��/�dFM�H��A�V�j���A�k���egS��;c)�/NU�'�~z�;�B�=@Ӫ���˳����uw��]�Ѻv��t�� +jw�m�����0�%U�r���p�~������O�6����B<�1$�o� �\�ɝ�[��4n;O��Τ]�#y��B���И��A�V؞�.��s����*l=Nϸ%��M0��NA&��5�K��D0n�oM�i��!�/���cZ����r�+��q��bnuj\�\v�n8=:��>�/\�Wn_3Z���,'W���'k�]�d����A�T��tN�I�-�&\�-��Q�8M$��4�:�W]:�'��<K�{Dԛ�ޫN��m��s��9����v�� [fF���=�&�r�^��Xt� +�X���[hX�����]������Ճ�|�������u��C�T-���� ��mďk�w.���0Y��亗���A\ +��}��9�X��+9ت����"�5�7�5�)�2���%D8�ڬ7��5ض�W���GU��0}3-�{&9������a��� KmӼMn�V4p��#,����� [-�����z��n�Ԡ�Af��#bY�A��ke�j��-3��?�����ڪ�b`�l6/����n6C0)5��V��7�[�e�cm���eW증��l��ջ4��}4��ƽ�@u[�q�X2)y�` �7�L;�q\>����צ�6XC�o�ʂ^��]Ś�f����*��il6��ؤ�]��T�e����1�"�b����{�ij�::�ta�R�p�� ��U;�ɖ����[_�o�&4۹�-DG�Q����un�ݭ]��C���y�"A�X�O�Su�N��D�yXm%���f����?H���-㞳F�<����z�>2xh���h��%Usw�T�!��u�L�|G��k��e'ɵR�:�s̵��"�Z)�E��� �l[�d^�w3Qp�V����H�Q]]�sś#��<�p��E��{�!�z���ζ�fn���a]m��c :isu6���lfzU�;��f����uI.bW�}5�H29��*�Ag�w��F��ɡ��F44���S�T���4,/X���:��� �*��n��_���h����@�K^��&[E�`ѫ��d��ڪ�,��R��"�� k�M쳴W�/���x2YAdݚp������ß���ꥻX�2l�%i;�B�� ^lQh�&ұ�-~zM��u~sL�x^���-0���j<2�A�M��hp=@��3��-�;��\�7]����u����ו��v,Q�s,�6�AdK�C��9A�o,?� +^6=n�;N�*��\��83�4\ir#� +���7��� ��#S�n�&���:���u���mx�Մ;h���U���C��E �;FA.�Zj��DU�x���غ(-��xC��hG�0Xm�a>s�嵞Vܸ8��L3Sf���"�솉�"��D�0qo2��`�h��o���,3��m;��m�m�N��j=*��7���i�|R���^��m:c���"5��K<W*�g�$��^��.�Ю�+�W�|�{�� 7n7W\��YS�}X���G��cMک.�i;��iLj)��Bc�K�������M�R���������D��1̱o����mu������� �Z�;�d^�6�C��x��G53�1H뻬��,�݇̂��L����5;Lh��(��1:�d�U�$=�s$=4�$���d3�b��&�A���Rn�t�l�*�����#h�+ 9]�roG��D��N蝲+^�\ל��3;��R(#鷢Udje�ϫB��*��T�.�.���1E +� �ܝd�I���Ji����KlZ��T���Y���W�5��7���cݑ2��pX�Gd�t �Ъ�v���x�~eo����Wv�gs]�Y����L����b�{����M�$K�� O�͓̾����"�ԫA�fPzL��$��S� 0PQˇ>��-�\�B>^8���8<��q�\H�d�X�.>yg�0��m�i�<n��k�箚oI�9ʪ���#^V�.�=[9l�t�(�d��,��;���ҵ48U?%�����(�!�� SڌՋ��m��e7���c�Ŝ��r��UX��R����H��R���뉬����o��S�č[����?�gP�����m�k�����V㜼���Г�n�z���3E-JCq�Ѵ���C{�Y����ۧ�D��L�t?/���Yy牠��5��8G���l;i�W?ˍ + +z�-���h�q�;Rv��P���fw���ꟴ�؞c7���P7uJ�ݛ9�y�>�V9��X8Rԣ�-%��g�fZ'�M|���2{�A�lgE\��c��f���H��!���� /y�D�6F�Ik��2�Sd.����9H�0��ltJ<�P.����Շ?�m�#��Юah��:�Ti�1Rr�Y��=��>��vu������8��>:�f��7p��pyq���]P���A9�%3+b!g�Z[Vi��-��R_��� C�XZ����T[@��m]Pbc�fi��;����&h�ey��*��h���� +c�+M$����+>����z��ͱs�*�$F l����d���İrD<{b`@+�k '��b�ęZ�ؿ�q�̓�ըb��1#��n�Q�n���vv��+����Q��ez�����8Sl(��t>E�y=�V�f��ሪp���V��ɸ�� +������ +�[� ���6)�����(�P���)N;@��L^TmJ�nE�p@�N�p(�Y~�V�>��v�븬Җ���bY��be�"{�V4�#�����;A����Q�h��#���Фy�4~�� �n�f��⯞|�U��l�N�0hxLVʧ�h�~�=@��@���>���c�<�T�n}}��"9gEQ�,�����:k{�?�B�R��1�ջ�X>[p��Uv[�����h��/��j4��|�r���������,4in�tef�@2�+ )�*ؑvU��<���Oq�c9pZ����O����ܩ���&�����W�z/�� p��p�e��R J{+}0'�2�RG�fr���b���-#1)g��ٞO�v�w�f������H����.����ȸ�� +�[�Bڮ��@���=��" +�@�v5 ���fQlX@��)�; �b/��-�ӗ�j�7�Ki�F��w�Om\G�S�4C<=M���l����� +'��G'�����xS��R�4�zz7����䖏y$�@^}:@��@ImH�`�:P��(�!^���\�3�+�T�$8Jn_"�/�=DrMhN2�TS1���_W�QIS�C@��� �N��n��(S�T|�jۦ�zŊ �@�7� �o���~hR��4��M�l����_%4�?$��⟴������W���5�&3{��$!q�����td}�>�9�z����a�k�{D�2w���w��qos�>M�E�&��ĵ�-���o�����=9�C�Ok�w�0���/�f��R#8⑮����*�mN)ڭt,Z�Wt�X���7�ݺ��n�|�v�]�7r�l��?_`�m�����2�'%'2m���B:��_�6�fS�%�O�˪�T' �1�'��n�����l.[�v<����+�٩����Giᡇ>��O���C �"64vp;r6+��m��6\�3x�j"xŬk�o�����ř�$6�D�}������-��c6��G�Z9v����g�?�F�.��>�n��u=��y����R����աp�G}+fv]-�_���y!�ޏy��S�O@"3�.Q�H�)Sx�,GNFNV��{�"]r���_��n�5�T~p��������v)�azy��-]�����V�t<&�j����٧�Pf��ؘZ���>m'BF���͌��mq����`t�ܿξ�v�x|��jz ݺx��ō����z#�v�_��nT,����6G_�3��,�ƺ�]�b��V�`f�:�)����*i⦖�19>G�:Àe!��yD���}�#�7RVZ/=�Z����]x��B'' Bd�Zv\lsio�$�&O'#h +~7`��e�(h���?�k�_�f,�z�Qӈ�� 6���[��vZ�?�q���L�=㹛tm�^���q"���"�[{�_?P������H�&C�s�q�@(k���u|�n6�ff��L�mcTP#�:X��j�cT���#�فӥ�7�gc�_a�;-#}���� +�3$ޅG�Ya���`vp�07`�L�pR��:�З�j��kꢩ�R��B��0�Σ�F����� +��C|k�ڪѫְ�W���J�u�=�%�9�knsaz�p�>�[��qn��`tjzf_�P:\�a���T���"�&1-�<��rf���}���*ԣ]�\�*l�[�쎗����� �5<�՝}8V����+T�eoQi�#�"�r�[�����9�`�vR�؉�����וߗ���V�&��x�a�o�.Z������L��#�5߈pnL!�ן�T=�V0��\���J�>�-�w+�?���k\�U:���*?��܃ٵ�v���_�o'ՎwY��3Ͷ���-����ڮ�-��Ѣס��R�}�.މ�<_����� +����߈zwPG����q�mmc���^S��ZIU��!V~��LY��3�> +�QʕK�3]/Y��.��~�4mO�Un��+gp�����n�,������V7��sn�g�g�:˒j��?$��z���#r��!%53���S�]ek�S�vI�+!>[����茰��(>.��!�/q�**��k�,k{V,��4 +�ԵShF�Q��Ņ�G��Fx�a�ˮ*� {��⌵�d5�Z�W*j��a'�����������?S���L�6��$Bm�uяθ�\��?-eeu[̗����9�p��Ί,�\Z4/�0ۖZ2�s�jt���d(줧ڛH�-t����C��:������ee����O+�qS�M����-0{�_:�$����Nz[|��2��{~y�@Ԁ�rd-�j�Y��sU8�o{� +��)V���}8���BV"��뫃���HE+<���Ԏ:Sk#5����e�)�ހ�:�d2� �Qw%���)�iq���`k�'^������P�6HS�~��,��J�n��:���Y�TNk�c�B��O��DFO��{]t���w1mdr�eʔ:�j�Z����QQY�U3>-y�a2Y4��!7<IL�N�g�ƈ|�d �����p��&ƈlA�����@���7熽�z�m����zk�%�W�aro_�����c}8��4-�4��ji�|�������)�0��F�2��L��ye�)ϛ?�x�b` S��{!�'�y�H�����ܨ�:q�x�d�7r��43"o�K{����V����������~/zi�c��|�;|���u_E6����ٝ�PW�B@:l���JcR<?w�,��(�٢pG� �I� � �-�ʋ3'[��fy��������`�,�)�,���fE�/��1���9�Ә?Ђ{'�ti�"2�1��L�&�t��f�|p*n���^�=����J���؆�ɓ��!2B7���|i���=���x)�`��pcG�B���j�d���Y4=�A�G�דV�&����E��OG���/���.�V���%�����A�=�ʀѨ�ڂ2�v�z��.�Ӳus����P::����p����w� �^y�<>A9�PB bt����[�E6W�_ �<ûZr�tu5?S{���~$�'����� �M��vl���� ����``~^�@~�[u����!캺L����g�ϭ����:_�(����)�Sf*� +;t��h����'�3L%=�3��Aӛ:*�5Z/���w���(&�����} ��%Ct\���m�5:��5��+u�1(��!.�Zo1��q�5��WIsr����0e��E� ��\�fg£�x�}�rж�f��ƀ��ޔ�u�����:d�7�XX0Ŕ[8yFg�wN*q���y�So��~l��m��Q�Ec�[D#����ʡ�jXZ"b�93j��1n�̕A�r� �7�/��FJ/<[�D��Zrf�Ā��e���R@,�C,2$�Ή�`m ��]��~����'�k,I��TDl4�X�ǣ4�4�������ϓeY3&�sQ�����FEV�}�`���Fi_��Y�xj���nXU�x�T�!�����h'J�e�Y�\<�`�l�K&L��#+צQ3O�˴stj"{���nhvZ��˹f6�?m)d�2R�bn�m5ru�=�G�c�7߹,u5��m�]R?|iR�]��_4��8e�/Mj���b���7uL��$P��z��ts�ڋ9�ϤF4U��{\d�`�h�|�z�����s��=��r�$�eO���mQ�d������n��� �B��уz +����ʼG�����zF��̐�p���+�J�h:���U_�rѣM�;�c!�jsK)�C� ϗ����`A )�V׃g��N!�����f��g.#H�d�O[������d�gOG� �m�4<��Rl���9=�61�E��.�XO�@eI`ͥR8��1���vg�X������IKB�s�)a�T����r�7�j|�Q�^u24�Y-��_��J}��iq�8�1�|�}�(�1����c����4��xŸ��_�����W�tS��Z���ծ� KU�*�rFԧ�!�素{�;[~RG�U,���s9C�=3���|/k]H��az�Y��F�{�X�G1��'��3���]b�@�3hG�q.-���V1f)@�HH��$�8Vd@��z�e�_T +�E�>L��[u��&N?z[�+��u�f�HǗJ�Y�guw_� ��4�iD����.z�|�qv(�����%ޞ��P�> ��H��rA|F���Bu�{@��Y@�P�OP��(W�U��Ȏ8��߱�{����E��!���(K�# �����s����aujm2Q[���(nԥ��4;_Z�n��|���3�j@W0��i09��r����M���S�8�`��S�q�� 3�����J��JoV:%(yؠg�\�U)�������{��* +��J� +��?a�B�3������GO�:�_+�~�~|���`M�zz� ��C�����qT#�io|��8�j ��m�g-�����8��$��~���9ؓz���*ͫB�x���0�I�k�����3H����������!��S��w���ȸ��^����M�Gl����M�`NN@�Z��n�A��6�U���b���ğ��1^"��ג�c%H3��e�*ݮ6>+Z:rf�"<^�L~P�7�n�߆��Jt�O���m�m�(�I��?7�������Hq����2@� +�L��9�]v��r��z���;�vl{!�^g��Wa�4�n���rV���e�����+9iM���s�&� �t�/��t��ʿЄ�r��@��@��e�v�P#n ��{�E���hY$�-�������d��C��lY���$%vq}>M4����1���Y�cm��S����S�zc5?��my����mΐ�[���ݐ6�\+�o�뗷�bMt�w�_c�Q��ʴ�����XD��??p��@O��~z�x��K�H����ז�tX�7�y⮕�I�lū~�=S���A�33F���~#O��9���g�i����u��T� IH\�3�ʉ74ѓ��V$�m����S?͇1OW���oH�]��gr>ȟ�)Hm7Ǜu8���rP���~D�?���wp0�m�k��-kئ�^z ��ٱ�<�/��R�"�V������v� �j�İ�<ӟȡ�Ӻj-�����Թ���?�Giz��a�"jY�T�jiM�Iw��`o�/?�"Ğ���{����9����l������#B&ff��M|�u���H�Q�B�?Ј9.������61���z#s���6~������f�Mw����Jv�<[����\N�g���}��4NHTzO��ʘ�?�xk��1��I�&���:Xg���\�q�j������s��H+z�q�ݵ�Ν]5t�x�"��)���s�ѡ�m���z�nj^�څ��?μ�:�Pe�����D��^uo�5�p0�p:�p������ �k/=�];�}�� ������)��V��W%A!84q7`.f�unG����~��y_N���^վ����~[�e�����ר�VͥL�o�"1��Nt_�t����5�.<jB'>t77i�=l� �d0�ɤ�y��n6~(-����^�}��lj)$�Y�H�-��v��5o^+<�;�\n��j��.W�������?ܜ4��m��/uX�?�� +�3�g褙W{�@p���ֹ���[�b���Kn��l�12�N#=��;�vo��%����y�V�\ʜװcsW����=tv)�)�x�<��J�o��[���a�{;��s�+��/�.��e�O��hR��}=����4O��������m�k|�C#=)���<d���\�CT��!W%�C�=�e�_-�{�T���+�FPP�3h�y���������>%��b��E�Ay���������TK������g�������T�%��1���+�K�\�N�|i�����V�1�:U.��]�g�ܥ���"�30�[I/��R��y���t0�Ԭk/����R��Z�o��X�)J��w�y��w&�d\���_ؐ��.��s�.�n�!�L��G�v����h8�t�_i��QE4����'�����Ϳ�3҆�����K6��1G��)lu���¾ W�l���50�GgitJ!卬ޫNx���*�p�]hF%��Ҙ��'�&�xe��$���mиJj�'[��[�'���F�H�JVSJ�Zssjc���jA�Z�ߣw�)a����<c�V4c�ϢW�����}Z�P d<�����Q�s�� +�TFq�eQA��X^��Y�ճ�/V��W~��Mys�Vn |�\��u����ȴŅ������Z��e��u�*4�����¸-�!��]ު)]��9d��6:�y-ý5�ᖚ�eWYd���/G#y�!;k�{�I�� +�Ѥ�O ���ⱥ����CGNl>�lTu.Qwqv��`Wbk{��߬)�����]�q�W�q�u}�.}C��=]��'ژ��L?.I�z�QR5%�)e�N+��@���T���ˑ�|C�I�/���J�t�%�'!�?�i��.6]^�\��>������h�C��/5�!�T�S;�JR�v-+-����W���˻�e���Zt衲� +*V���d���H{杕���Ή-���\�k�� �%��{����x�q�sCM�sX���*����I�����0 F�Y�O�K���<���VH�$w�[��6ҍ젣6hC�5&U��9?�\��{Ҿ����*n��H?�-��<>���$�M�!�nr�L�� w��f�kޅ�E�cJ=Wf�iѫ��W�� <���A0��G?������s�<|��b��yo}x�5��w�e�T�kn�*5ꥺxzwB��LFBg�YR:�w�ʫKp�J-�p#��s��ij���X��9��(���^��U]8��i�Qۀ)�~hP�3w��Æ�<�D����P}k0��M1k��%�H��r�'k���JR�2��<�H�p�`U���e�>�Y4��� 7\��?�Q��dm�ɰ٬�2N�B3yt(ӫ�H�2Q��Ay@Q�}��ͨ�&Y����Y#wx&�q��ѡ��G�l~HuW�щ?�3��L�K��x�A����DO��s�#�Udqy�:�9��� 6�|:l��F�V�sh�5۹��e����'K�,���%�G�a�>{���#������J��`�Hv�A�r�*�a����<��(y )�N�W��V�U�e�k�Ewg����@j��� �T�3��2k_�S&B�^7�-��{�nt�(�H���9�~ø��~�K�|Vy�=�0�"U��o��7�icz�^`)q�B}�D!��䧷����B8L�!�q��`��k�es�CmjT~RګE�����b�y��� +�~�U_��߅q-��ɹB\�g��u��=!}��]� \@`��AB-�QhW��%z!�@��@HE8a�M/.�kZ��m� �����_�_�^-�Yc���d��|�2�z��w��-�Nu (ʦ�AVg�jߥ����h㪾v�z��4�4yi��W~�Zy�º���S�k�4�~���1�ט���\͑�5�6^�c��8�@:@�n=)>�.�e,�6���g^��?R��Qrf��{j�qz/�1j.�/�!�'mfY��~T�[&���`l�6\��yP�"n��@p���y��0G1�Y�p�l���~�,[������`��`�i��;��Aᦳ�d���;�R����~����2/��̚8:6^�m��j�E��9C��*:���=Q�W���е��A�#��k�W�&�"�����.���ՅE<Ո!�P���bt��B�9���B.�c6.;^f���~j:��S9�����c�b�j�Ő�z��h�����i `��K�$c�Np��0<{($�ڋ�Wf��b�T��y�m�x*��)z� �f��=>R,7��yG�jz�O�4t6S��&L���,�%��� `��`i��+���^������O��n��Ƌ+���S�eHW̊?P����Oq'A'23��r\������D �;��鐭#���Ͷс%*e>�����*���F�I`��8�o1;�|5�\.ç��d�a�yipN<��v��Ȥ��D���r�r.�VP;�F�=ɩ8��0�=�.i�xݹڏ�T����of[�E�z5c���r��2�7�j����DZk��_��0�g�A�<#�a���- �a��j~�^�����@k R��F���1�|9cV϶fy��7����N�v��c��bV[!v�����q �ӑ�M����cE����d���^O��� ���� +��=ȃ�����* �� O� ��B���P��6@v�~`۟�mSw.�8Y%�F^x�Ƈ�`�Bފ�=�+���Ӭh&�~�Fi$���_1�*��@M��֦��o�u9����@s6�ty����}=���W��k�X�=������C� �nj�F�t���9l����V��9z�1���¸y݅���<q(=� ��{?��J/��ғ)y��_3p<���q��0;l������Vs`�m��l/�h�'�aJ�襺��o0;�ȀmYs���O2��i��e���|����(�z2y�z}�r_@�����t�Ӑh��# '.�_p#8d��zz7�tHd܃�耗�������1�7�?*$��t Y| +��, �����_w�����>-�[���1�&��;w��� �yͦȏ��Ө$W�81�O��/�#�!q��]����q����%K?)L�@� +�va��G#^�l�@�v} ����� +dP�+|����'_�E ���[�s��#BS�ȥvW���A�i���6���v����D�&��D�M�������~�[%���n�� +�$P�� Ti2��~����ڋ�i�j��kP[��W������)�����+IFH2bۇ�F�$ѶN����|���{�!��U�Jr�1B��#��ݻ�k�os���!���pp�*.u!G�w>��Y +� �C��Wt�ʡe�#'�h��~�wuƎ�i�͈-��jT?=����nmʟ[�`e�+��]���]j�:T�;3��| +2��O{�QZ��C[v���@�t�;���JlKo����5�&��Yz�I�r������_�Y;�#]2�;�歴�W�4���S�2Gi�N�N��Y�"l�s�r�T^���Kuo��5x/�N/���3t!�̼�<�٧-��to��-k���p�/F�:��y~��쓩�j�Øz���]�LO����ʷ�>]{�w�c�[5�V�Ԗ� +�Οn�>~ƞW�L# T�p�뻈��ɪ��M�Y~2�v5:��y���0������ �Q��;����~�Ŀ�+�%�D���L]���]Dh��zsR�����g��4�Z��&*��� 6����|�1�Q�zk�п��>��t��_������g5�� D���b����z�Oۣ'b�<������ �_k+P�s�6�O��5d/G)"���K����Y��>��t��� ��n��\���t�A/���^م��q�@���*�����m���C�~�S��:�z�� �-�Ҿ��f���O������f.|�#7P�6��uxϷ�wF'����G99>�ii�<f�D�5��|�ϦA�z�3!������mr�A��ֹ�/��v��ң_k��~���� 3v�i4�۹h���r���|���n[.Q�������6���e>�T%(����B����<*�ٿ���T3]xH^�[���@��������kpi��ŻY�x��=�9�+][UB �?���<�*y���M�.� �sO*�G�C����x��! +R�]�*�D�\J�Q1j��E�����~,��B\�K�!h��yl[�գv���K�Q������KK�В�.s3��@.���m�Ae9�!�s��L�3�Ē���Rz}��Q�S)��i;,߳�Kgi���jaO5[��7b�J��!rN�a�Gb��?��唡����3��vm��ã>���Q����V.��W���.�h;�q~X�����bh�b6c?������t7k��k�r���Á��e�GZ.��w�2.�al�q���룔�eHF{��6���ڠ3�i��@1���Ъ���Km3�-װ�Z�?s��� ��e��Z�J>�J���/f��0����Xv�˾Po�o��M?3&g��F{Q% �����f��Jm𢚚>h��I�S!��(�����\�(�K�}��1CG�!����$��������"g��Rd���Jx���]�Zd:U��0���T�l���q���!���?�ս���U{��/mX�g��섨�f�R�!(�v�ThP�+�K(cym)ժ���R���m�1Rk�����l����%���@��5'4�'�q/�t̡5K��B����F]#�wlC��w[����vB--�'�5}�T���Ҋ�*HP��+��ش�I��&'K���sD��B���1�|h�^�\�{���[)�y���sрe?] .j\��G�TEʡ��i��ȇ��+6��W~ m4S--}z�j�e�1����@^ K�Si��l$/<����z�K,%���E +�ד��u�yy�5�A�=��:������~ f*JSf*a �������X�*��Yaj�z�SPno�vb���P�u��e���� ���lW��#K�q[W�:��x�����C�H���R�֖�O:�k-� n�#8�s*ώ;5�-H'��.�!�C�z�� ��2�>�����|�h>��EY�3���v�T�~�*�2?�Y��*2�h�� +��,>��\��i7hj�q�����Qk���^�n�ܛ�L��[sz�8q)��`� �B�m�)�_ 6��5�|�U����R5��#��5Mқ�@��f��w�'IO�i�~_�"�d�Rc�����˾�l�5�=o���jn�����%z0/�@"�15���%^YS67$�2��i vR +���Dcf���LIx����˞��+���6���j�G!�{�!��!Z�Ԋ�����Q�t6��A��N�K��S�Ư�f�C�V�BFD�}x����&�d�*� endstream endobj 35 0 obj <</Length 65536>>stream +Cf��Ј#\7a��9y�3���N��3[KL)��D`�2��z�ƊnDmsኪ�'��O�q�3$ӵq"��E�_~�x���/�z��'�2�H��<_Џ��052c�2��v�#YOL�?��XX�c�c���d��8|����}!3�\]�W|U���kS5(S�q� ��C6 jD�#aN��%��o�#�e ��}�=���h�i�f�1�G��#��[$2_��|6?:�m=~�y�R�H��K���(�r���������]�������d�S;��h<��E"��A�H�r�K�.��]�'� ������O�<t!4ӼS�bJА�r������5�o,�+B�>�?P�}�>�5��E3��+�.H;�7S&����M�@��k��a�nҸ�+�Q%B��x\��*6h�8�K踍��B����P����x��!� ��d�H���r�G�U{9�B%K�|���ϟy�+��p�Sv�xo�x?Y��{�V@z�$�o0�U|[��C�u��?rg�/PԶ��2*aohƣ�OK��Y{�.{NnSYz��h�:�E��t�Y�}|�-3���L������^�:%�Iy�y�繌JV�"�/3����ĝ���%ɱ�lb�֦B)��Pv���n����2��_�-k�2�⣏Nԡ���%6G��eBR��2o���Q��A���I����"t I��=ӧ���z"����-����OE��L�A���AN�5t�;ou*Jg��4�W��M(V�d��ËZ.zK�x��n}�� +6YgP�+�'�b�=�����I�G_-1W{�|�<y(��L��43Z']L������>�3Z�����,�-lv��� ��]�+��M��)��DG1.��($H"O�����qQ�K{)^Y�������t�j0Z��䵍�-��#����r��4ɇ�����*��:@q�P��T$;1j��@%�c�TV�3��P%Z�q��e ��tP��h��$(-���,e���f�Kt"<���W�&�m������蠘ϳ����KnW*j|�)6)�'����� +�Od����˧+�c�&��a?�c0]?�X�cm��tZ�+0[�Y00�d��v�c���������6��RZ����tN;���c[�B2h|l��W�erP��"j��rYȼ�-3 s���J��o�ɔ�Wj�'{M�[��'{��a{��u����c��炙16'�&$�[�pwt�xa��_A����p��)�ƌ������s�nX'#*��� !�<ȗ��z�4��������)�o�[�6 R�2 ��7���B��*��G�8]��D� ������+�ԙ ���=H���BU�$�����+ ^�B��D#1�P��E����y禵���b�5c�_����y�P���3�U� ��Tܚ%��$]�[�w�?��ݮ��~(B����U]�5A^��zY@ci.F�4�kǘ� �3�z�:�^�P'5�ո��9M��)0啺�g} +?�����>ƭѼX�e/�j S�0]Ҳ�d"3�U�i.�X�������Wĥ_� 0T�{��zz��]�l��(WK��Ò�3`)lNr@\����<`���0��9�pЖ�*/I5 M�W�.�w,G�O�Vi��F4���0N��Ө�=I+���O$p"�&9��6�q������ip��x +�����u�C +���Up�>�} ǰY�����>xRaV���T3(���3�4¢���.���?zr�$�L�q����ʷW�:o��7���''��x��� m �&S�WW ���.��@��c ��4����K�K$�T�qHw��%�=��9���;~o9$�S�WO�մ�F%i�����3w����������m���I^��rJ��JO㊇l�m���0�"�PYrT�y����BY��~�XW�I��d�^3�-�(o�m!CG�$���X[u +�J����ޭ]��7(V_�P[%��f�=��s���x���(ɆM��dީ߇��w�i�L�گ�����d���D^�G�����í�\����~��g��|P�33�ç =�o��<Jq t�ge?"o�.b��v.���L����k��7�幺,%�I��dUZЉ�_���_�Y�>��{�6��� �^�r�2̖�F����;뤄[$��6X�=\���xՄ��e�,W����/���:WO��43n��4RH:��!Ѿ9qs��[U�DEN��I�j�Z��9��_���I����:JQg�76�~;g>��V���lY��2Ȏsi�c�O�HM#�f����#d��'n���"T�K�4j�C���#�!{��+��}���>�ݻg�8����z��>7I���咹&ֶǚ��'�������_���5�Y��T��s^��`�o����}f���/!���Vt����0�_��|�vj��1"�)�q����_j�#�Rph�̀��G�@���[?���>��W�j�3? f~�K��烘ZŻ �~��y�1Y�Szx.���g�E�F�Au#�¹ih��i;�b���VZ�����s��ZW��N%�ge�|���Z�ƨй5ҳ������k���R�����\���a�:�Ϻ��d�������ş�@N���'ؼC'�<�ɵ{n��Ϳ�˗�:�5�Jm��6�0ӾX��U՛�����RmU�+5�ԫ�fׯz�����<��ʹ�+0��0@�2�����U�~��r4�A�>۫�%/ O�u~�>�Jq����A��+?�Qc�m�ux։<dU��\���n�s�<M��uHW��*[ �3V� �TYN���yN��ӷa��Y�ViT��Rz�6�6Y���ra;t��k �\�*X�<mX�{{��O@��&� ^�S���xco����j�!a�52�Ԥ�Z~��G�5�� � +���PˆN��:��K���-�Wک�ν=��9ճ֪��,�_0�m���2��0_6���a�sEFP$φ�e��e=�'�L�1 +�_��*����A�A~��h@T}U�M�_~��7GGƕ�8C[���Z,��b�kW����;�\���ܤ@>ss�Ч7fSS��y�\��P|����$��Ȇ֞kH�4B,����RM���Ż)Q'�+��4�, m��R�{��-�_�� a��p�͡j_���fZVS�NqfNk6ڂ�Vu21���v�a�i�� +��`�4!(�z7���7��d�i����;�㦎M��)+�z�T���(/Zf��T-����7q���b�����4و�M?�a��j��Vp���J�^�J�&��Ū u�l�{��) ����E�A���>��;�*j�}���㧥ZXO�ް�R�����+[y��e�<|J����0��{Y�Ez�(-�ߑ���D|�Z_�GKG��`{\�`mcLn\O�]�G{v����?�v�桃�3�`c��Zf C�/�X�u�5yբ2�Zx �2�(��ZO��\����iz�Tc��xL����G�y.���[� +�"��s��"�Y�9aN�P��Cz�3��g�Z=m�����Q���J���^�L����G�]}\M�^�0�V,�P����H�y�(�N\UA�2����X�D~Pif���K��,�C���<�T8q����~ɗ���d��=��q�(]���9Ul �D^��T~�P�:Z�ݲj���jj3���ʐ���y������e�yy�����=�����z��� +,��u�e�֜�\>P2����ړqV��}{���q���(k�ͬ������ +�K���ٺ��uK5�~N�.۲bg� �+O�D�ֳ�4�x{�m��� +������-a�[�|��tP^菷��� N��6'ϴE,��߂wVNaG.�Z�}�`q���Ny�1��o-��Q1��~�)��X)��N�чe��ed�T<������}ի>�7�U�0��k&R{v#T�,�/�����;�^�t]����-VgR+�_[�S�S:L��_>3���+?h��ZBUxۯ�b=�:�ev���a'/U 3�5BRj�ݔ�Q���iqMK���*���%�4�ۛR*]�!p�z���1/z���.���)U���R�Շ�@H�1gm?~��K*�"j��4j���q{�NO�3=�f�ʹH��LE�5\�d;ah�U�nT|AoA~&�V~Q��^�eM�8��ui��K�P��d��tu��.Ӽ��乖��pʕn����g�N}Φ�Ŏ�WƢ8�w* =������M<N&9�A�W�L��I�Gr��O���r�v}&���q��S +hݜ�QޓCJ��,��kN���o8$�]������x.�v'�Me�Y&bgEfp8������=�3��3�[�^d@B$Y���^���x5C�����{x��:�{f{$�L�V1���(f@��k�u:cl�&#��zk��PK+0�HI��(�Ә�B��ػy'��2�u�H�ĈT:K�6 �-���Je�U�M2�-��g<�=F��=Q.U��~���Z�S�ӥ_���<�d�tEۍ���u��� ����ѱƃ,�ah�樕he�F�~����� `�2������'�x��������a�D�Y�MPnsȓ+h"Ǔ��Nl�S�(�>y�m�U��.t�:4�`��z�5q�ɫ�^�7�0��=H_�O?(b��ؖH�vv�#�<�Z�s����/��51}[��K��u7���\�SB��\�R�I2tv>')|��D%�Qx|+~P�|5d��qS����%�a>� �!�{��yR�3��I�~� N��)�6���,�#B�OB��r<���H?���w��7#"=i�K�Ŝ^��O4)�8�d�r�n��𩰽gI��Y���א"*] �E'�[����J�s)kȠ�����s�q�W�3� �����r���v���ij�D��cy�q^ ��|ʀ� ��)o�J�N{5����]�β��7�^"YA�9F��P&-�D*ߋ8�r+S�i$z�"$2x�<�Y��D@��J,[�c<�[�%�r¬�����H@N�& g�& ������XU@�@��G"����3�n�lQka�_;tO�V]�'��k��4����֨����j:���G�42tpF�(����B�[%�����T�/Ųoj��c���5D�XZ4�Fb:�GP�� P�6�ʠ����"��.H;�t2wd��N�U����y�:�{�Y�r3Љ�()X�݈ho�;�Ay����r�fКf�:�]��ݎ���Z�X�s@���������c������HW@ �M���J��:s`���Xk>�..XjT�����-���¥�!�&����]UI��d,���v���$��e 0��FꙀ�N`<���a|����L�Om��`�4�4>�cc�L�s=��s[����~i�H�&�D20C���sN��Rf��P�ޘg F�v��q���w�Ȼ��a|�j +m0ǓX��6'}� R9��Z�/O�����.���p��pm��I�K|�i�\�Dz^�7FW�8�+��K�ҟ\`z\�&�d�� ki3���J^�y� �(7KX��yȄ� ����͓�� +��h�Vo� x"��Y��>�������m���' 8Q��G�~�Z�^���>:�B}qB���.����A6�m/����z�Dt(����q��x@�5���:�&� + �}��_�/ON(ro+�Sw��|KM6��W�������@��D -n -+>�*��0x��րTju�T�<���2_���Iz�)*����Cl�Gv��V�d�A��12�z���o5�(9q'�_�����&� %� ��'�z^mBʰ�*�Wb鍀J�g�������v4Jw���2Pn�\h}��r��>�+���tQ?��b?��ci��7���1�E%>��"'�6alj�6���7�E���iɮi��vR���}p�~�J6��G����z>�CJ@�M����u�V�)� 7C#��$ ���:1�xx��N�mR�ׄ�ːg����������w�eZ���&����`�����v��U��l?�l�3���f��������r���%6��h�d#$�U2K�˥��d������,����Gd�bd-��sB�'\�sf��fԶ�;�\5n�۵�F�y�C�������^�3��z�&ɰ��S�������HHp��Ǻ�gS��{�� +����5;���������m���Z}d�a�^.aF���.�S+��4�'<Na_����������6��h���~���z�^LPrBk�������"�� +}N�������tV�+���*j�Ю�OQ�s�p��n-���m��99|u��Z���U��t��p.?�h�����"���s"�M.�M��/N���H��f6��X�u�Q*J�I�jϣ?a�9����ɿ�P}W�'��Ü�M�{�1���v�V��vՋ�W0��%���Y�g�L���5�W*;�v�0n�<���>J]�x�?�;��� �v�.ҝ�����#7�-s���Βd���_���/&�zQ��E\�S ��'=R�>c&��]&>1J��Ҫ0V����^ǻC�v2�j�w�t���G.G�n|Q�:�r?���ų}�/>m��Zm��6�}Tm�ަ�3�z�3MY¿�|sW�L��ڀ��~�[� �]ݴ�����Χ��&�6:��χ����D��zA&��n\��2��w6�>UkZ[:��z�s͞�{_:jy��g���l�Հ�^�%��ZP��j3\W7���ʜ�g��RX��s��� +�R8�tK���4Ա��Z��Q��+s�{&7�&/�t��s ��nr��-�k?���$�m�������O�jUB��J�����|j7�������J��w+W���Ţ/�?�7tw�&�iaR�wx�|��u��c���m��z��A�W�C�r|~����W� ���x�SǖR�Zf&���~�Rص�%5������(��x�t~�lt~+L +�%P~^>`y��Ry�xד��!k�ʚ�u��lɩ��v�4�Y?�3�b�g�e7��f��a�iGH,[�$�{8�I�}�ڇB�ƕ���(��E����N�OW +����]�Yv���z��m��0WV����ꫯC5�쳧a�����-+��+�vZPFCgD����i��t;ښ9��: �sBfVV.�|�)��~��X�ѯd��+��=j\}��X�Yl+��4�^�W5��s���V�ܸ+ξh�̬o��m8��3�̽���O��p'm�����m3j`}���5����\���������)#葲�U'��T9�,S,�x���J����H�y���Z�DF&C���ktZ������s�[��R�Rݬ���X������+ɶ��fM*[��r�������H�Įl��v��o��� UnL�)V:]���ฌ�/��&{LImoU�G��_�T齑��'�@����h��x۠��d��K�:-�d�O�� ���W�f,����b[g�E�)��"+��Ԧ�IUؾ�b����m�u�j� 5Қem�)��S;�v������'��YO�G��$C�5����$�z���Ԣ.�nmK{#9�ަ[%>x�`l�ň`�q��A���]{�ޛ��E��z;�R��H���KU�o*�eQ^�/ I���5/zFSZ��ڹ�˪�k���]��~�����Ǫv��������2�PDbn煵{� �:��,L�U=]�)��w]*��[�6R��̓�������C����}�0��K�O��B�Fh�^�A�ZVo��v��<gcY��YJ~��oϸ d�V�YWlJ�\~ .��L,xӭ�ޞ�B��#�.�<o��1s[l��k�����Z������ِ\-8�p^6��U���+`�d� �N-����P6R���v�cԞ�&��Y@���I1���IR��/妖"a��%���*���'l�K](���z���;5�gΗn� ;"˪�~��ٸOG�v�@l���R���S:ZT�L��Y�Y�$I�݂� �{q��r7��:(ZJ�JM����!g�W��Ƿ���vD������GX����F��Z���N�j����&'�oC��A��V6�L��|���K<R���Mh�:��r����R����TvlΩ�%=o���S>v�\�)��#�]1���Ix��hE�>i�p �aX�&��>&���?�m�Zm�;�C�k�'�����v�O��.��<Z�:cܫ]�5_��Q��`�?(����H�R�E ��1��� t*�}�F/��)��ym��^^��X%���s�w���i���iQv�%-ᑅ����;��'��2`;5gg�b������F�� �У]���5�JM�R�r��1��f��ݮ��`]\kxe������`�K��7�,V�oW8�]fxex�U���,���*�i]���8+��y|�iz�+�� R�;�EZf0��C\s�z�z��`���E��8J�wAC]���H�(t�M�K��%TP$֕S�(�X���B�W��;N?��5r �p����� ��� U����h�������y��{=�!�7�k�[N��jn���\8Q\�-Z�:0�]���{&..8=����;��S@�$�-I���`D���`��e���B������5���:�3�z��-�۷���� z���W��n!�Fk�+���d��[�h�����1v�j�|g��&� ���7t�wf,�|Ӱ����-߉�'�5ց�S?�a�Y�bY��L<R?(n�,�.�%Tc�-�~8ţ����2�d��@������7~r�yoX��?�&�ܬu�W��l69�T�.�g��ȹ|]��0��[x*Gs�C�3S�����&ge�}��&<0��T����҇1�M~��W-�MU�!����{���J|�X�o[������Ny�����<�$�%�噹����E�ck�_�7���|c�c��{�ӟ��P���bs��Z���L>��:�a�!�!T��`qCy@�%�|:�EՎ�������L@X9����8B X��l�H���ޏ�t�!O����^+���.�ĩO�al5 ��9�[�p!�ߘ�f_�^7��! n�G��b��e��(�RԿZd �Xʽ�k}H�t$���.�W���/� +���"L�v�s"N�X=�8�OS~��R������.g�)^���ʼ$���^@��M�p�:��2Y�ȳ_�x,@��!@6!,:�qd��\5e@�� �B>�Z=�p�Of�1(q��8�Kza0�}�7y����D2#L:���a�k�x�rQYZ����o���e��2<I{4.���/<V�� ��w�z�P�P�B�6��;+�Z )@=�Y@#��9�Kihtw�4��<%@�"���P�,�k&����yK�^L��|���D���m���ʯ�[/*&=��*Y21�r>��d�Al�!��'�&�8��hu���@�eЛ��p����<��V��`���0E(��rL �c����j�q� `��C��8nG-�>٥��b���cWZS�*�ܯ.��q6�Ѻ)\f��h/���� I�'x\�ǐc�4�4��?����,���*�[]���C=������p�������Y�Fp'���Kz�;��U=~��P|4�N�&O��-�.����rRc��գ([tp�ҰP���0�=�����'�-{ky���������{�ۀ7c�7���G�.����d,q��+� MY=�Y��?��ߍ��j�@�m���$S�w�����ɼI�f�J́Z�K +��x2=+�)$A��f��������m�M�����'Iн@ʗ�X�.��zH2�uŁD�y ޏ���8t@��{���_d��\��`B/�!��VbR�V��ǟ����I=}����_���!�_b�����(2�e�w��b�X�%Pƹ(mFJ�����~��j@~7����:��.\�=�q�DS4>_����.ږ�ߒ~%��_� _��/9�v��]���k�Mf��&���="������s@�� �.�A|������ I����ٗÕ����JƆ�\^���OeI%�������m�f6$5����Km��7������m[g�x=B`�����z,q�&�|�J���d�609� +L�O���U��'k IF���d�&[���m���2 cy����g���ڔs&�?�Z����t˗��T�Ovgp �Ep�{��U��q"�~��XW���N�����~q���&�2b�4�$x�9� +�Gn��Ɇ4��5l��huiC���Æ�S� �?��S��G��=X;��mL��`����"�۴c�R�z)�n`��D/|1O�z�j�����l=�����.^��;��A���7�_=�_Z�*|Q'K��C.�1�/i��j[~24�aV���Y���Xg���(��d��klH���2*̦����������>��)}�zJ���z���P�����J�_V�����G��&��[~d�W�������w�e�r[&�?��O�}np����cV +�ѽa�Q*4��P3����у���.������=r�{�2�iuj�g�>5s��tg�V�Ow������[����E��0�ļ�������š�S�����&#& ��R|:��`���}lr������2�e�Sc�������_�A[�m�m�R�� �7��Oc�#�d�K��ZPE�5���$��cV˧�P.�i�T +�g���`O���n�S㰸&����[Ɔ��� �V[b���=��������l�I�"7�y=Uw���_%wE�Z����/V+5��,�:�^Yz�&���]�S{N�zG�ų)�X���uaR�J��_��]#?oVS�A�����R'NXmK�t����8��]ݔ�ae_�L*5�\V���+�Z��-K�ҳ��2�b/���T&�aΣ=��īɅ,�K��a:�r��4��K^�An�imr��95��9�y�Ӽvu�f���,�O"%F=>�$9 ����0�&[.��~�f�|�0˅,����ތ�>Ȼ�h����%ϣmn�\�r�muu���ө����.�'���� g��i�#}:�t�{��hg/�a5|ض���eݳ>����c�2 +���푳�%�0�r�س�B��?�2jn�8�ξ�O9�cceO�S6�Q!+}�j&�H͌�H��}a������:��Rug�L�lMj������/0i��$�ؽ�5<�?+��ae��L�(Uv#U�e��Ͽ��]. Tn��Ȯ��R��q<���h�q�]��y��h�O�r}ʎ�o��d}�#՚TV�g���ձ��̹�WL�7��ö O��tg���_��O��'��^s(T;-����Y5ܦZj�r\���W5�US5q���~����.�w���������і���(�v:�e,�J�悽A��ߡ&vY↧�(����ԦwSRe�������2DN`��Ns��ɸ��A�pU��b��w��ҫ��byT6W�l�FA��Oi�o�R�Z[R�n�cY ��y�>��g��/so��~� +�܌~8����M���~�Ԏ8"�W��<��nх" k��jr +��0�y�X�һV3����嗾��#�ْ�ISJ_J�m�$.���+{���B�v�����I�6�������F~��?k8)M���myլ�Q=�$��Kq�7�]zUH��H�\�w�����N�)��VLr���W�rZ�D<1M�.U[r +9WB�jI̗[ �Ў��/�ҏ|e�|sG��r�e%�^�G�mn{;����f4*��{����'q�?h)E�C�+�L���X�k����a��~���4�Q,}��Dž�UNR����2�ͽ�R�%4_��%�cE�����O ��=-��㫄Z�Ayn]�r �;e/�ݎU.ē�U��h���&��P�� � Ըʔ���Ԣ��T'��������e���҉�W�6���&�P<����)a����$��Y$��CX��@��W �y\f��*+s�b�`/;?ö��"��>>��C:�r+ڪ.o�GPI*Ӝ���.�P3V�|_Yb�ٗHL&}2�K�����|�����y�d��ӫ�i,J+�R@�yc��r�!l�p(0����!o���vȝ�ރ����eCy��m𢙻��^|�2�@�����u֨���Q��Y�s���6������?V�2]Y`�Z���C���ٻ�o��_���&��n���ϒ�[?�[Y5jOZ�VUD��[��_+�/�i�9)�vlۖ��}�]�^ō�����F�mk�P��A�&S`P�:���V��%�Mx�͌�t����C;�X�j�qr�9�t=n̍����G��7.�Q���.[�miW�/)�jMI�AD�<x�Q��c���_���=2�-��/�����PS�S� ������H�x��+�����Ʒe���hb�zm����BB�Z(��ZD�Cz�"�4� �"�ּ���Y��UNh��=庞��jV��izF�+CvQzq�|g��y��e�Hۏ�r���\�G���W��.�?(A�7���^i�Ωi ;ܛ&V����g}��ΎP�����F��D��R*�����w�ͯ,�t�ܟ��I2K�ZZ��E���wK�v-�Ԋ���6Ha; a��/�9���#�/�k+)'ؑ�ZYt���+��;;w�A�#LܭaL�C�PmEU^��M�q��`�\o�W�;�a4�j�@ש6@7J�m��9��Y����_d�~�,�����dSI�uQ"R J�=̝߹7��wƴ˗/O�#�${�7�8�Jo1IqNhk���j��D�X�t����n�[]ņ�Qރ`����u +�\�0!b�g�f�z����y�<���~,^;ْ1�n��Q9�y���|�~���=�)-��<S�No��B��(��=���¢�C�P���s�mJ��L*���<��,̱���u����g�C��Y`̉�2�q�L��l��[m�E�Mmt��)����j�����k��.��a������̓���X���W��#&��{���#�a �W�@�W�ן�$K��e)�|�����Y��(���~����|R�_�(S�w�Z)nG��K�l��N������P�*0�5���)�S� �z҇�]�O�l�7��<._�,,ΨVl�c����\��x��@� 8� �����р�rJ,�t,� jZ7�`����lD�Da]�7 ���c�P�/!!��/[Ng�`d��Y]�rCW����T��/�N���9��������;&�� �^����C��g@t� ��������/O��$ �:�bG������Uc�Y�v��?�tr sJ��Am)" �j/n��č�+hFz�hՕϩ������5B��_�MOz>F� +���'a��Sd#8};<��/^)o���<�9��5�и�W�^��W +�� �~ً�/�ՈO'}�"�@y P�E�R�w�֎�� ���+���ds��ֻ�J��$J�ڼ��fDJ���$~�S6[�+4�#︤E�����K�`@�L���R� h�,�Zt@�=Г���b��}=���o�<)@���]@/S� S���%@g�}�huE��v~���U_^�=O�3}�5��J-F���S=�B�Ǚ�p&W�s�����'�� +�᷒����Zxï��9I`�V��[�sg����~�}a�+ ��l��]l�~���i�"�0�^��qoꝭ3RG�x�M;��ś:g�SItH�}�R ����OQ�U����\��!� 1�u�rM���C���%��#������po}�͂����&�ρ"�"l�� 7�������^�Çd��d��K����L�D�&l�颤�Ě����J��F����'�6�q�k�M�x�k�M�X�U�I$���US@"�2���W��O�˴��W@$����K�X��duY{����iTº������[�o�$�61$'�$5$����w�����ٿ�4�܆K(�n�e����4z@)�{�d�8P���8�y4��u�K�lz�=�Z����G�Z��e����N���7$U$�8�J��kڿ2�q��nj��m�~��֊�z<O��miB���m�����W�V�t�F�����-�R�%!��i��j�c��%.�$�!)�oF�_�m����ۿ���%$Q�IJB�;Yb�MbmW�0 ����ƧWƵ��,�����⦻��������h��IFl��m�O�m�����#<?�yfVO�1�o��>�{��Tn2���+���+��Ti��sr����q"��!�xUw�̢��Љt���[O}���R���*Y��DC`�C) ލ?�5#�O+����ߘּ��������=�����8N8��u�/ܧ�3�7�\����{u��� j̤�D;fs+ݙN����4�� ��5�~�M[a��� +{/�Ηd z�DC���_��;< ���d���߲�}!zoNY�^��-�J�b`���7��Z���c��I�ɉ����|qZ#���T�t�a�3ݛ��0�>���(�����I�`���]��DV��|�W�i>xW�3���{w������ڜ~��2DN&��i>����^��o���^�2ȼʷ�ُ^���=2p�n�ʓ�}�.���85�Rx.�ں�n��U��6�s��oc�qBhZ�_F%a�I�i��זq�5�M]d����X/�����w�G.H��/F����Z���Z�u_i��Mݏ��?�N��gr5��iV����:��k�?����U�K�Tj�/���QY�܈����e�����J�/=���k]�2��Y���V[��� ��O�<#v�y�;��~�2�k�«�J���%.���e_+����K��f5]����b/3(y�|��l�2(LJDP���k~^�y�7ݠ����.���\� +�d�~��u/r �{�~������F��)m��� �R[�V����O�L��;����)|�ޱ�%�0?/��<v�FnZ\O�|W�w�\Y]�V� ���c����Z?.�}F#jP��I}�O�ɪ�_�����ҧ/$Q��]�%��v�g��t^�7��Zn�3V�,K��k*��;�r,���?��i�e��l�iggˌ��7���rL�%�� �<�b}mM�͂/��9o;m��^[{�#�#��4��x�+Ʌ���Z�w錞c�=�&��d�>[�i[ vle{�u{X�ӶM�5� +E+�kU>��ס*��zC#��3��'��fSe+z�X��zͩ ��~��:�_���Ь&�~_�9x��f�H���\jw�<�4���m1��V�m�de��˜כ/�ta#h 0�S��?$�(���SO1o���c����k��X�|�lh2^��?Q5z�R�{p�:Tk$G� ��&��} }���87��X� |�H+<�m�m�Ïi6_p�6�J�*�[��č"����w���E�ك�v�v?��;��&�o5\h,�j�S�[XVzR��#i�Æ�ȶ�)J��ѐ&�e_���R����ZKDā� +��Z�\o)P��(b����Z�W��>�UV�N��r��g.�9����A矨.��K���Mչ�Yy����b��E���P�l�[�\pDʪ.�w��A�yOD��j"���B0�� +������e�p�����J� �-͞��7�;��s���|9�:�ot���15��cՖ���P?q���v��S1��PNO�4�;�q�{���' i�gqA�BϹ7a��/�;�`��W��_��;��J3N8��lS�tY�F.~P��*��}�1�Z�qG���G��@d�5�{�k�/U9�5)��U5�\U;�gHx�z[)�}�ޥY�<�Kw�����qABq&o�Ժ���|�B���'W��Nԋ({A�4�\�DV)<RLg�d�b������� \P���� gN�N �$�}b 5wD~����pPb�x^���#w]����'l��|t)s���z�0Y���ZxJ�ڎ��w\��.��g����v�^�ÑU��s+���4���A��p��h����T�}��Y�j��"8�벌�%�d`�F��Uee�UG�v-čϗ�W4�UKb���'�`*#^S�k\�p�w|��tJ����Ɩ� +׀mM�sV�*3�HϘ���:���ʑ��Ε�F�1v0��$��@<�1���P��R���Ra���.�x& +c�9��Ƅ��R��F�͡��!���Iϑ�oϚ�C#����zu1i^X��Y +s�kt��I�a��b������LeB[�����whO��9���[�'+�7"P���P|�Z�x)z�ؾ�d�ݬb��1D}�ء������)�z�J�>^��Ƒ��~=���">��YT�f�`W0�Z9�ˤ���o�3~ ,_9?�X��X3�_�C3=�&hL��ݐt�Q�����e�o��^Ρ!�bb<s<���j~�����~�m�r�)#Wl�C�"��t�5J���^�:�'� �ф�Ӧ�/\�vƠfc�2tMˊ�<�eP�Ҫ_E�/����7yl�a���&ceF!04�/��߂�g+�9vЗkL���\Ψ����&�B��-�ȵ2��6��O`�nB#}4������� �Y6�3H�D�������$�% Ђ�:Ђ��4+-xʇB���M�j�q�_�yC������x�6!(<��R|�1�Y���Fw�\��鴻DזW��8Fp�#Л�(]�(Ď���ߪ���1@e$����n�ʔf�Ef4@Ѣ�g�sN�U�������Д� � ���L�yS���-5%��9Q�nS���F�ȕ�hs�Z �Oc��z�3;(}��`�f� w��Jt�'���X���Dk���� �@W8�ѩ��:�hb9�?V�ln��L����������k5bul2���a��%�|@ t�W���ogS��vgH�j-aK+��L�������J�X�9+��>�˒T,%%��0'݈�:X����a�_�lJU�Ih܄\��v�z,�V�u6Iz���LUiq[2� N���&Wz��J,�����ʙXb �@[�r�t�9l�K���� +�#Ÿ�uf�K���� ��ĒcbYj��D7�i��:E��'�'x4�⟕#�NW`�I7!˶�y���g+c����ԀI�7{S��?�o�eO$њ��`��F�^��s\"��2��Ok�}k p1�������������|b���/O>qf,M�g�K;>�ƿb:�7�6����l�Y��$�,��Ʈ�����(" X^<�P�˨o:�7�`�g|w���s~��7qG�����U������c�����џ��?���P@� &S�e���b_���G� �%A�~�� Za����.uBJ��T�U��X�U?a��� +s���ğ�wW����B��..i���z�j� ��%���' �5�����9Rh@�:�� (B�ڂ����f�t/��JD,� w�1 ����A�H�ƭ4�z��ҳ�_���c�M�7xB_�rÏ0�Aݑ��|���f���?P��u����ᷮ�5�X@�_ +�Y��t���%�|l��Dz^:gF�N]8@����P�Z|�uY��`�f{iT}1LE�o휸7 ��i ���Ķ�#X���g�x���%���cIQ����:hfA������ +`���!�LT�6u�V��.�%�o��BL�����v��e�/��}��/0���fS�[/ϟݴ��U�,��v�igrU����''�|�����Y���a�;��܄�&x�}ss+C�����������&�����w���7o��:���G;��5��6���(��bڦ +ْ����n/"/��!�r�_<y07���7¡?Z�x����~� ��n��Ӯ�/�en@<߿����:��� ��vD����@8W ��2*�P&�j<J� +�o�����K�ĺ����82#��<�� +�8��8������T���;�o�����c��6�a�f�q{٠�s����O��6���d!�].H�����Ȼ��t�Z�6ȶ}W��ǰwy�Q �������b���b���vz��1���.�#f.&;����tv���z�K�t�'��m!EϿɶ��k�l�ۀ��^i_����J�G���'M��*H��K�ʓ�����ڪ���1A��'@�J�A�_����h��q��U�Z��|Q�#?9�)P�-�����ڶA��Rn���m���GmۏDۯ���+Ԓw���)��� + � �l�Ȩ��T}�q�������y�������A��`��0H��P��l���!��� t��4f��`����sWf4�]��4s���)��ZǴuW�.g�+���H���z�JPp�#-�m5�L�{�n�����G�g��?�����Gn�&��.�*�Q�ڢܼ�j�}:�����Q���O��SC��R�v�u¾���m7*{8�5��\o��<�I�2gpcm���`z��S���Q�4���mӞ���&0C8������``����䴯��ז��ύ�H��O"����/+�eJ����3~���ؼC�R��f����{ʬ��/���{`�i d�I[`oߒ���v[s�60j?����w9��� ��.�V<�E�OΝ�%o��m�p%Z6*�.:�}��S#��M��|�����J���X����#w���_��8zo��� ��}�-���̽�C,���Y +�m�[����/��[��Z�(\��ءZ�|}��Xƍ�����2�.�P� f0��b_M� �1��kv)�Jȱ�5�G�[%nrgݸu;���ʶ,�i�9 +f�/9�;ޚgmO6��L��V�^�a����$,���������Mh� x��Z�i�� +��|������.����Ꮛw�ձ'G���L�u�PU�c'*�"3�k-��W� ٪ٚٲ+5�൪��~nB�?*�c&���/t{eh�����~22' +�n�;��/��<�_bI2����lN՚ٸ7jU&܆�p�<�օ��*v�����]v� ��Iw�%W�^KJ~���R�t�[=���-��Q+���y>ϯ�9�_r�����Ϛ��=[��nɵ��w[�6����V���{'�v�O;t�r�a���H,����V�i6�h絆��^;m�3�p�\�#���*[�=�!,�_�Sf=�<3�cH�m�H˅f=�"��r̭��HD9թ�)�.:_!H��tB!C�X3]�$� �y� �y�a9d�?�Uq�@8�Y�t�d�3&d�C.��'㙴=�i9����g��rf�vJ@ZJ�5'jR�n�� �İ)�If�ƽ=��]��D����=.94�����Y�$�fp5�T,�[���=2�vI���1�h�CJ��S��&���a xx2�#��J/.���h��2ɸ +���!Q�i�J=������R��[F�{�ͩ���|9)a�#��VX/+Ya���D+��j��R6�����-Χ +�ȍ�.�O$0j�ʥ�&���6u<�����Q�1�� ��X^X_!x~��_@���(⡔h�,'V3ɘ��ՌP/ȥ�6���xy��3y�X�8�*R\��,p��p<� B����:�v�-C�t�WK����͵��x̺�'=�+0�-����u.�ۣ)VS���߷a=��n{��'����s��Y�s�*Ep��r5����/�J�n�1�>b����I�r��wyu���Q��6�N�$���ZM�Ơ�h��A�r.�Ȕ��>�{�'\G������L~{� �����j-xV.��s��\��-9A�[!�B=eVif]6�Ԯ����̰3C�d��F�'����F���EkKB��(àq�T�sT���R�*IP(1��w�\c2N�*\e\�LBx�'g�x�'� +g�(�|e+D���z�������)�_r3��l�-�K�i2��}���Vd"����ϝi_�>h��D�BxJ�`w��0�,D +zl��Z|;% /�'6�#J4D%C�v��o˅��Db��z��wJ��0m˥z���W�h�y�B3^��Coc��a�`�]��L�xP#��j�\g��d��E���A?�I�5��v��r=R�1v��t"L.E��i���{���E��)���=v��1���3��y(!{� �U�D%��0y�*��G&K^&lr��!��t��a��v[�ؓ=Z0�}j�oN�H.<ѳJ{L���+9ؿŊU��f6z�5@��҆$��=aI֕hR��k���"�fy��61�U��h�E�Z�j�2.h$�X$��X$u;��V��(��u:�p &1��Ae��Uh�ڞ���M���ȃ$u�^�t1- �J�P��R����1&��kJ4s������ �y�yv��z]Ţ9�EO�"\��cQC<,<@�Rm~Шε&Q��32�m*.( +�f�D����|��i^JE������W�aϹۆIO +�Hn���x�R%1x��j@R�ǀhN�>��!� ��:���9ֻ�,:���s�xA���iSH�yDÚ-�s�iIl��� �Eh��|{H3�B���������d��<Qߜۮ:�7ܬ#����F�Q&?P�5�C�-2ܻ�a��e1�hOгij谺~��& g��}o�d�1���=��TQ`�*Ј�(�l�%��E�7�bz �߂�O�(�S.�̒��X"�D�t9\_��¸�w�;_�/K��ݸ&�I��2��Nׅ����1zA�)r4-�:zXaP�A�5�*���X��t@��zF�6@��@G���1ж�h {4{M4Ǖ +�Q��a� ��dvT��_�����y��u�xS����k��6�qgy��dс-g�^�|�u�iX/�S0�3�>23��pg0�� �(���C8uFu����/���4�j�[6�}�¡���/�R����*������'���t�).�je��t�9!�3 �F�����!��6�u +�tLpv<�X3�~��l�d���5��^�+l�)���u`z�T���;`�m`�c+G4_��E��b�M +�����3[�y�ɵɆF�q���:���\8�*��!ct4p!G��e)� ��Px�1m��L�!�/��e��ЎCxV��w2����� +���y��9�cp���,�3�LK0 +�,[�$^!�|ovTY_"�����n��4b��l�w[m�r:z1S$�j�}mI)*�k�QA������8;"{�"E!�X�#��:���!�\"O��V��+�>�a[�k5p�CX�����l\#�4ɝ����M-��Ml}l�w/\�q�9��V����tP9�S�=�p�1�l���M�p��fs�w�(Yn�!�(@V�(�ƻ�ľ�LId9R\G�I��� ���>7�_&��)W��0K� +ܖ�_:�������� +=��o?����yH�e���P'����̖�5$5������8�"�xi=�E[� +aP}�=R}= �ZT�އ�XJ�e9 ϧ�6�a����� +�_4��R��(:�iͣ�(}�]����.;��c[�d�E�{�OJ����c~r��%#x����ba@W4�Ս��8��n������M@�� @��>����s�9~���13�� +�Q=�7�E��WG�'���p-�oψ�nY:9�OJ_����G*�ɷ���1U:�Q�+u ,ƀِ+��p���D0�m0%m +n��cV+�������/��#&X�f��!A56Zf|�������z��z'�������,�(�fJ�VN(<߮mW�[z�V�����7O&�� +�q��XN�#�`���_�r���t,��;ʓ�]�®�G����w@)(U�5�k�md��a�~����_�&��%����_ �� �lJ��v��B�!~���� +�3�0�vƅjv�1<�/Ȝ�qN��N��¼�7|$�n���M�o�r�յ�☾=��.}-Wj9�:����{s:$����� Fh]�7ޣuz�D���Y̠��Y�"�ڇ�T���ȶ��o� |�?e�5�D��(���m���j`�T��X�+��'19��@R�=���4H���)�R�Jj@^�*��A�t���al���';تM:���i�̶ *���h�Q���e{9h��e��� +� +�Y)�٨�Y`�Af1�@�:��S>�� aN��7x��ދ+��R#6l���h+.!����Z;ދ���V�e�ޚϾ<Jɡ��%G^��4{vs���\�rG��j!��9=��WG�E����pmP�!�z*�i���������g��?���-��Iޘ[�f�ޚ��~�����8JG�<j�Uk�.�v�몽u�R�v�9�:K��Ɠ��&�O,ֹS�^��y��2X���; �f����{�66�y� �}>�ߡN^?�C����U$���Р�����cG:��-��o����3��닻������^�uV�/�b�5w*��_��fD�gj6�ά���>?RZ��*N�\T����X]�f��-c���}F����2�������P����Y`�I��6Y!,�6x��adA��;�U�!�����В��q�91�X[����X&���iZ�wV�PV����Z ו������{�_H�����b�Y���"�j�=��)nm`�~<��_��j=�ǃ�ߠ�@�ty�Y���6������rU���{F���f�����v�,Ѷ�X��|��ew����l7�9q���¬�AGۺV�=�y�/HF��K�ۼu�60CCX)F:�D�6(���{��������r��7�C�T 6����:|����7u�,��Jv�%_>v������d�{/���S{0�*��M�� Z,�Ϥ\R��I)���y�šth���3�pSH���5M�Һ~��]k5�F^ �%���D+rԅ�exΖ�^��� 4�e��TJJ�9*� iR�zF�[�͂Z[��5v�ZӺ�����3�8�+�1k�w�h2����6��n�L���2t�y���Z�4H� 8�� %S,E}�.�����H>Oc��k�9��b Ԅ̓��gr�aS�V��J?o�zr��P������qZα��c�V�NI>$ݥvO*A'c�0�8o�İ�tI!��ߏ{'uW�e��`��dT�\`%�>���������fS7�h�3��#��__�NAR���RB8�&�EEL��b<q^K�İ�+�˶W���Y3��N���{Nc�Xj}]�K�sd���棈����s�П�W��k�%5�t�b��f�b�� +2T�m"I�ڔ��S_AP���c �����5�u�X^DA��wb(AFO`ES�D�j���z�(��@#Ȑ�͊����9��,َ�,U�q�V09g�8�w�Yf�����ys�s(�|����ش1�.����Esԝ��TM�{K�0Y@xW���eA8�z�� +4�^.�7�ň�D��H�'P�(���,����ƸҀ9�3T���31&��z�� +�'�L�%f8rߙ���y�J�u�Of�Y�O�.�SL/�v�iS�/�#c�-��c��\��q��@8��s��<���o�C#�a'�0&)4^�8%"j�$D2 .K?�V���˘�g��z 8e�"e,"+�0G1�< PP��d�R�Z,HRNu;�#>�&�(FT7B�u����SS�h�F�Eo+�(^Q��8 +���#ރD<�ET�Q#��яKbNk�܊Χ�-���O�1�T)��(�yҜOsd���H!�Xo27bm�Q�.# +Qo P����z�J֪��TL��hfsc�x�z���`���I#��� �j�ɮ��O��Һ�+t��:~;$4��> Jΐ���J�5{ +� ��&�vbO�t%6���ދ�M�[j*���lyy��t�Ɯc��9�� s�cg�+� �����a�t�Z!�{yz�bc��R�%{*euf��Ƒ�ҧk�K�_N��Jf�\.��k=����a�'��:"63mB4�挈 �ߚ�%��e⌷j�Α6��m&�u偄�9A�+����e +�����3[V���!�s�ǖM��A8��6/"��l?9��#��t+<� +U>;mr��Z$ٕ[�%��a�:D����b���|o���U�S�;��uO� �'zJh4�� �MW������.���Xg�z<�fa��C�R�g��I��+���B�&-�dt�L�xN�Y�2�u�G��u��ju�h��6�kf�x�8g�m������;X���I��_7 4~]���uCƙ���E�4+ +(� [3��F�G��U�����1zNg�V���q#�VJ����N$�ȴ���Gn@ag�K�7�E4�z� �c"��9G����ć�FOڭ�hMD�rݱSd��,��G�~+�g���1 ���w �!ѧ���K/���Y���L�����O5�nK���(��#��Ō�Y�~E� U��}R��.�+��N��<���b���H����D��~(��}I�6��#u�s���rp�g�v �V�����"�9�t*=��H��ɹc ~����ă�,���I�fw�!4���A����o�����t�%wq��t��#@�2\� ����Ï֦^+�JT�'C��/:@.$z��O�\�,@ï@���[a�{��+H���N���b���9\`cɁ�#�ft|����0]6q>n"�g|�� uz�5�=�w0���h����×O���c�ic�o��s���B�������P�9�=����:H�����W9�-�"���M�fN7���@�p!c�n� ;]\���t��� m4I���� )]��+�(�#�0�8?�CAF�BFT�&���� ��D(��tu��A���3:ل��L`< +��,�"G..����u�~�e/>��da3��jZ��b<_h�}�܃|.7t)��&$�凸�]�p��v�Sj�C5�B�#*���M�1Jpߴ����O����2��^B�,�y<��� �݊ ' `��`n�� +l�(��^_���j 1��ƂB'lR+���}C�9'���[��NS,CAGH��d�X'.�d���] ���4xD���x,>���������n�#o?�^��M5>���_���^k�ۅO~�,'2�8$}s�u��q%rt}��;3���c��c~ +2+�""��������1����dz�1��X���\@� ��'��;-� �M l��ؔ��g�/ �9D�CޙÂ3���''����ԝ��y7&�K����O�;e ��jB6�*lnCU��T��Re�铢3��'��@��W@^F/@����"�H+�RR҃�����j���ug�l�8 �E=(2�]�G.��A�A�jy��9H����M��pq��b��G����fS {������B���û)�2�'F�]�����--����"x +a����(@M�`�9�Y��x�� ��^�Kg�At�6�6���6a���>�[�OJ��4H�\�W9����Fz����ۀ�O'�iDl��G� ��"�������@$�}��'�L(��wM1T�%0/��V=\��OA��4N�N�7~rPZ"`����gݮ�������d���!�[����- �T)8��}^�?S�-�s�F\p���!_4M�Y?�>:9�w�Һ�����?��T�N�'(�X�-��i�ΤX�uK������?�+���t�ȩ�I�B���NJ��&,���w���2�b�C:Ib��k����O�m�il"�������p���G~�הۯ�mP%�k]��'U��gEۼ��1��ALX'@����=��h�X~��xإ���bj��}n�.�����؇D��� ���f��ɵ ���ڶ_K�>�{���|l:e�A�p�A��}���$��/�$��A��0 a;4�z�Q"�A*��Y�9����sC��~r����+9�kY۠HC��~M���#YP�뵿5l��d3�-�ބ#ȡ��m{� �s� �@f�C@���� 5���̅oV���/�)���O$�r"���J���6fn'�� �E<��B�h�3�X�S�&�TB�wb�N�Z/���-o^����K�U��O����G͍b].%���f��M��S\� q\����֗��Ӑ9t͝{I�:�'��5WI3y��ωmi��{�v��z��F鍒Ӻ6۷6ۍ�9��%~ȥ��U#˓�VO�]l��ךq�2���Ƃ��j�q����j�B��t�ժ�����������~F���W�Ϩ�~�j����!�%�+Q��DO���s��'��j�\QE��[�3i�{e�^t۬� +��z1�G�xiv�$���P1n��L��ֳ�9��ί���Xq�5j�'�+)�lWR̯���3�Wl�{��\�'˷��vV�S�q��t�X�����*k�� 7DG�Q��Ô�NӴ:��o/B���ީ��ٖ��*��Nte���_��:�n�Pj�m��McK/��]��a�v���ޭ�ie19��ɽW_oɅk�D��v��{x�]?r�v�������_�Z�=5y_�߾~��{*��_���Ta�Z���~��_U�*�� +W�P�$�|�J�e����1�D�b��S���ۻ�����"���4�=K�q�":O�̤`��T6z��C�=~̽�ͽߊ�g��hb�&����:;Cɶ7w'_�g#�y�iURNוx��i�֦=��d�U.�!1���(�D7}�:-D�~�[L��P �J"��]��qW�b����-��#^w�`��bi��S;<@EqǏ���ڧ��B���8�/��0~m$^���o���E��ߋ�e��Z=>�g��U�_�b����Z��=��!�{:~U����� +3����/�o_�z�/�M�qr�0���k��м�-U<��-�5(y^�� 8C0�d�s�+2�m�¯��&���,���~���a?M����k�a�9�M��������Ά~o���-�0�͟�_~TO������g�́�~[~u��~�Wz���������G=C�o�_��[����4�������m�=C�o��m�}�����g�!�7�����'Q�r�"�Dk����P���L$���pp�v�j�����b��g�p�4�ے�sO���F�uT��_ �L�M�^3|>�C�M"�Sf�Gˏ�=}>7�SZc��ugR�cs���/s"�8�������)kTA��~k��3����W�-�6���Y,��1ļ�-_r���R�J+w��{�z)�X�k�i����z�vW���G&��=����H�����<7��$:|_�2�轸���My���qn9C�01R7��_��b�d�Z��b�<e�q�� C��� J�,�ڝ�.v~54���>��?}�Y-<Nwiu�l���jf��S����g�u���Tr9����H�;����^��n�U�HyW����=����x��/|�Zz����^4az�A�w�yL��6��m�l-AM����8�d�JgD�8���P��-G���&����Y�?B��S���z��B�����|Ӓ��Jfe�U���u����bg�M�M= ��R%����P荶�tGoޒ!�U����l�9�|9i�&��<��?N]�╪g��y,�zF��Yn�����Y����E+��e�S�v�����6V]�r���R��[a�|�o��[�����������N]/�~���j�֕��3�R�IyL�L�]���G#�w���Ȗ>���!�t�S¾w��G5x?��Kxq +�W�3���#�4�gw�kj�ze="9u�S���#�nr��W�n�KC��4.h#��*I�wȯ���{��d7��@�B�Y>���lԳ�m�zn~ޚw��|�.��8��+I����6��P��<��fԇ�#�����!�������tHtӱ�fL��'��B�j� +��n�dXD��SbL�[����A�"[�٦�y_����q:�����KSAz�fa��i�m���������>Ƒ���Х�s^3ZΙlUJZ]�W%v���s�>�gYP;��%����J?K�0{���lNp���B���Ik�e���JW 꽳�R�L !�3F�?H��^9����4%|�H [zVb�TЈ]�<����d_%��� ���'��Mw'���J�8Ƽ���վs�bD-��������������A=��,!M�U�����U��.*���0�~ ��Dy��.Z�:� +�v/3�r��r,^��Y��e<�j��&Q�2U��e��:(Vl�X�0��Tv�[�����;�wKJb� �}}���s�v���U�碢���8� �� +����WI�_��|Y�ש�2�3���v-�_l�^v �ke�Lp���^b7s��8s��\g�|8�3���P�K�h���&��m��?@���=����������!�7��-�9�*�?@3�����P[~��!�7>����o �/���� �ȿ7��W[~��~s��������\����!�7���-�\���v���f����bN��G�d�RK�uWU���b�-�ȯם�^����X�Y��0��k�f5��������'Mq������ɸ�A� 9�'_�i���(�����V�v��`[�d��C�6'a~7�UǨ�swF>��i�ټ���k�=a{�o��j��'�^�hA��܁�g_<8���d/䥱:�Fo�dk^��M{Sr�W9�,�1u��r�4[?٧����ͨ7�͵������6�>��3�pR ѕt���#sO�֣� F�aL��Z$rZ���i��S�E12��1-��A��0�+G��܇��s�5�I3{���Uw��� ��)=ծ/�{��#ٛƮ�g[9:�t�:à��u�X�L��>�f��1e��ݭ?.4W�!q�}V��B�?���\wZ�$z9pE�d}Q\+~����t�x��9>�u���ś�쏞p��j���$�z'i�/�ݏ���~`���}i�^�?�����?������h|��b�Qgnu�=�u�Ck�z���>���M� _�p���yj=Q�˷a;�L̘�ţ֙�[p�ߙ6�����4� �27��\�=���X5y��T�8���.��2�3,1nNGY�òȼ��0ls�ݪDg��2N��� +��&�/DS{Ht� �>�g���K5un3��MWг���vf)l/�?��F_zCzЖe$K��ڪ�LΪ4m4-5vO����O��g߇?��W���@7�&���NQU�8&��ף�ȜӀ�L�)�;��oÖy���a[� ������J�\ +a��O��-We�'aP�� 2���n�Z=>�v�r��|E�;xq�'O��>�]�8J���,�T���$Z��6�a3VW6��4\ة�����{����8Ք�gd��sk�\oCG`����6�GL�=��:�9e�,�~y4���ls�cLCL�i�D�ڤ���3�� =�#x ���L�_�d��2�c� +��F���Kz"U-���J�L�c]��fە��h��'�^�&�Du�?��B����|�W�=�P}�?�pǾ}�:��7�~�]�v��Ds�0���3����&��.oYm +E��.�2 ���,\E:�����!G�����[���J-©�XΊ�,}����F ة>DFlE$��NE:�Z�"��jv������)�|Ư�[�Y�K�WeYb��\��c���_+��a_������r��R ���1��8��>��mr���֒굩�o�F�кJ���^˫!���Zi��j�|!�O����ܸ�v1�p{<���]��e�L��e�=E��p�|5���O��vG +�V�.9�x�t�kr/��A��X+��S�zO�M"r����������N����99�]�rU��,�����Č͒C��d-��u��lOv[�ICe���*���e����*�|�J�R�+��~[� �]���������C���8Kv��1�B�e��^�m�"�s���k�(!�R�����*�%:�J��ކ�xS��馕��рp[� w�/G�,g��,Ḱ� �7E��r]�f�̴�-�[���q���z��թVa��$UK� /E=1U<�b�8̈�b�KO�� +jA��=����Y���"_��D[�k���t���{��/ ���c���b�R {�#����VZ��:�^��3��<z���~L��U�gZK�P�V:/��3�'���'���M���Y�?@3��4�����W>� ���7�������D�?��~s��Җ���&�o�������������!�7�۶���4C�/ |3Ǧ�.B{��Ϸ�)_`����/�~���o*o^p��YKun���- ݒr���T{�5Ɨ+a����R~k���<�w��O�!����h�곃$�ZB�/4;:\-{/_f�L��=י�v8 ��N�1s��{8Vn��a��EpsٟWf�FXտ��J����p�M�����T��Ht����,���LJ�_�9_��3_8�a����ʙ.V�Ds4߅s�Ң[�b͛��5l��9X��:]k廬��=ur������4O�籛ןGH��b4���msF������T̽7����YoZ��zy��3=U�����axF���q���m���V��3��>�Q ������>���h���]��T��ܺ��������Lsc٫�]w#{��H[xWj��i^Jj��t��5t_�{~����(,��?�w��D9�9�� +��"Q�����ŕJ>9G���8˲��m�ݯ���]���m>ט�ngM�˧I�t���)����b %Q#�/��ѓ��!Ͷ��&[�R"�;і�__6��z�A�8NW������R�����3�t�Y�zЄ��Qo�ݻ�H�����g��9�����bwꓨ%�}.GB����P���鰦�ic-]�b~~t%��ϙ��E��2#��ƚo��@�џ�Z�5^�z?���ru�S�EO),�?���`���W*�[�ʗ`��G�gR�<�IW��/�ʴ|��%������<99�X�l���m3����!٧V}.�lz'T9v���&Ǔy�!���_�V`�م���P�S�c^����!�jr�B��s�y�eb\���~N�GS������j�fff��r�A���ܭ̡���U[������(j����&앺�ٕ�c�K�n�d�V�r�t�TW{]=6��/[��_,'/f��>�w +�$��vi���G��x��V���Z�e���wy4�I��2��t�k��}|�W^i_�ϻD�vL��Ŏ\T�+�u_L��M�5c0"X[9��f7��H�R$[���Nn2���dV�ESNͭ���t����׀��d��-���Loq�X1�����Wo�Y=y �b���D��[ok���+v3/���d�)������R��R��di�i+� +�����91��lǐhy�������M�r���٩����Kխ�9�W��vhpt�5���z���h�խ(G�;��&%��Q��kM�V��a� +�j�g���4�:k�{X�(&)�[D�pگ3�ã%ߝ�]No.J���&��mʣM��(C��v�+���͆j��Ǘm�vOPTUw�RnibÔ� �}��߂�դ��u2�4���:��:uK��`G�����ܬ��Ϩx���E,T��.\�����MgF`��RC$�#�W��T��˫�G���9��!�}}�s�^NA��/5�C�K��� qk�ÝM���e�T�{�d���#{S��۫��[# +4��櫞|�^5����Ƌ~AŪ�.\���X��� +|n�N�N��kA۞������m�-�g�eJ |5;���t�W����/%cq~�Z��S�o�3�dz�M� �{���� +����y�*7�}�������ߝ��<{(��N�.��V߭V��&9�"&�3$ݫ�F3��GN��W�#���ܯ�E)�01_>�'��(��f��תi�/U"|�*�c|+˱���\�� +�-�����4�����hy�0�\d(]%Giu�j�э")Zt�HY����l���Rz^;+)��mj�����m��X���D�]��2˧V������3��Rr��$���*+K�0Tj���Ab{#�f6̶e|�l�{�J���e Yȝ�. ��6�Vd��+�Ax� �e�����RԼ�����!�������{닕�-�輤�7��8��U�duօ�NV���C�2��յ��+2;J�;b# s�BII4*��א�g��,3�v1�z��@h�~B�:��Vr��5�^�U�V�A��۩�C�9\E2�1�JY�Y�#t7�������imPP�=,��7 �H^+�|��j��8���4�3�3�*�3#�3�s��N8ɳ���5���=��Sa��R�QI�3W��:I���i��?���3��.���m>�2l�D.m�s���=Xx�t[�dg��������!짉��M�������b�F�w�k�������4C�o|@�����_~��!�7����a�'�lX�|���o���pz%}����|GX�|���ܱ���$]P��=ʉ���k% G��n��R�)5�Q䰰��l�YǛ� U)W<k�� f��/��Q�و���΄D�㳯��)�������� ̉�K�o*�Z!�\�:C��DƎW{L�� ���^jf�l�����<kաLg Wԗ���l����;�?>�^���"ю�ES;����{���Ý/0G��d��뫴Ꞛ��z觟��60u�2�g+���J� W!lKf��;�|Ě�˓�S����g��/4��4k�g�J����/�{_��Cٳ��1�NL]��#�>��unI��b�s���n��K[�[�=��"z��b{5u��1���Wa:���A� �9�-V �^���v���b���h{���K��_K[R=vbC����sa/U�ܰg��~e^W�c�Ύ7ן��l�M�S��X���y�&���_A���[��&\-�Fxq�y(e��~�Ũ,�nOи�qz��3���MV�ͺK��P�9���>�HW��dmW._��#� OG����G�ق�~����݅��vHf�n�h����-���ˊ��Qq�;���&��W}��]�8e�l�қn˚nO{2h��B/i�FLb���O¾w�{�I4r�Dg��} �^u��i�mq�.z�&h^�Km��7�nk^�������eN��j���./��T)cKUe��qN�n��9��[�۴�����A�Jִ��"[���$������3�VI����AE��EPA������<'���̱v�?SF8�v��Y�� +��1����g�xʯ��aY{#�w�B��Y����Zy�F�j���δ���)� }qV�C�"c�`'�a}z�'���Jí�j�$�֯!J�[�ZH���ʇ���Y�m�1���o�c ]k��C]=�ϕ��˪d�5MdO��p\�痝��/ˢ�g�B���E�ؿDK�%�*���ȗ��x>�]&s0s����Q��\��}�J��^W�bɲ��(K阸.���U�(��m,a�A���A���C|���E���Ji��|Tש�s��h8�W�Y%1����z�t^ݯ�Ֆ!By�XIy�q�Ҹ ����jB�zU�� ���$�ڌ,5���(Z�R}8�'8'���j��Z>���a��U��cv݉ٮ�K�pZ�~�� +\+9;��b����Ѳ����Y�Q���jN�xU����/������N3Pt]Z��� A57l<;����s��V��w̹�v���؞䄰Vv8� �{�Y�q8M�jz��~6-���Q��2q��~ⰽ�Pԯ�ٲ(a�>�+8��(�����ϊvq�n�|K�%���Dz�.�TV1+Z�_}�wX�g{[oMg5�9qG�ָe��QW�P4`�2z�y�?(�~N��� +*��|vR�z`�]֕���/�0�;]/��������ƪ�'��b#�^t�iu�I��<SB' �ʍT�Gi��¨�sR%G� +���`�������[���8+�PT�렚}�Qj�(���F�G�8� +��z�V�ȓ���9�;�7��p.s�p�gO�0��|���}�=�N�i��y�]���ZNQ����J�5�Y+�ݳ^~q��n�A?qr��z-%4Gs7�W���fUL��<��3ۙ��|OKN���s�(Ao��Eӛ9i�3C��)����_~p:�j��x�A�e͐ +���%�'�\t�Z��i�z�H� �BT�n%���Xh��=���-�wO��&��;�G�B����h)&H�'��� ��L�����'����uP>3��9/�N`��'�x:�wv�[蝍�Q��븼���x��������c�a���G�G~�d�!�1� +ը����{8�gS'�@�C��~������s�/��n>)64 #�� �L�5{+.�rB�P��g���(ݓ=~�����������F窢C1ӑO��vHA�1�!�3?� Xc�{�S���ٍxapfB�%2�bW�i��_^�\��Vx�Wj�1ˀ=y�/����q�X*���nht�2��3�'�U`����4tR��paޜ���@w�O���-xʳ\�TL�����ö��MX���Y�����������Ӊ���0��B�D�:�g���:E�=u�>�E��s�R�����M�Ӊ�D7�;��8�b��g�ӭ��zp7�/D撾$��^���!O�n�����A�ǛM^��?{0�CzЌ�i�"��_�D7qi�c��k���#���4�?'���t����W\m���F5�~���-5z���1���e���%'�e[�������p�����ć9鄧�ʭgN�^�������\�kq�dwR�"Q���o�`%7 +N� +�:�U �$,��@كsV�C�z��! ���x��>��8HV��w.�;�;��V�~m�V�2�¸���V蟮5�.J�w�����K��;R���4��,��/�����}��^�k����6������ ��������������h\���Ђ�f�.�o�}��u(z��A�}i=�Y��Be��^��e��oc��y��^6Y������F�Wi^<!��*�����u9�:��~|4�>��Sc�����B�U����^A�@�1_�w�DT08'f�+�������f%��ݺz�vg��9��y�3��;M�N��-&@O�;��_�_�� �Q��2� +��E��r��������̕�J.���yn=f|z�\�s�U5��[]_��꧷_ڝR���H��}�H�a^�^Li�?��lv��� >�ʭ*�: ��F�jGPt����@�V+O�*Q!!�g���Jwg�,���T��y�> }ds�f熍^j�5uR�C��u e��5�����,1گ`�4��r���D���5�{�I������w��iמM��I�)��[����z�WC�D�ɍms��*��y�Ƨˡ�c����3����4�y_�%���|�7�N֧�C�-�?�(+zT��a>�zeW{t3�I@q�-��������0[�s>�3efO�?o��u�����|lSA僧�M�TA��_��|����'�D4(���x����OF�?�`W��Bad^s����v�lֵ�2��1�g�=�A�%˷���_GU���j��O�*�Z�:~��U8�3�|����+*ɠ*��&v�<TB�3H&��5Ww�uޞ�����kf�_���/9}Kl]?�{;mv@�u��J�@+��K9ᯄ��[�I)l����b(7L�9�I��iT^�m��_ѫ ׃��d܊uZ^��S>ܮ|h`���_��ی��c_��Ue��j#�nWmwl/�aV����(�Ԯ���Ms>��b���o���a��A�ie���x*���\��鐹gV8g���Z������b;Jy�ؙ-ֵ�Q\uVeI~�}UN!�!2�n)tW�<���_���Ұ>�O�% 5 2*���hk<�fB���ޜ���r�-����q�h,�wU��g/���gd���>��y��,|(��Vw����r�Pt����?��S�cHaa�J���CoB}�>p.~VGm�5iA_��njW"j��Uf�֜�ڣ���SFrZs`�"Mp����@�1#s�:)p�D����O�PW���Wbh�2�m���O�ܸG�y:�=� ��3�G��G��>A�d�$�)�B^&d�S;�4�#u�(��y�$�o|!�_������BN�ʥ� *���ޖ~v�o#4�������/��cYI��5�7ge1X��p�<^�4�bB���!�vuj���&3�\��\U��;)�#���_���P���K����@y�AE��q��h[Ѵ�)��ۘ�j��A�X˱���5�^뭈��[槛� ̬��<E���M�d��O�S�^Kf�H.~������,�f�2�c(q��Q�Bψ���z|l>�x�T>��Vs��wڛ+?k�q�ݑG����i��\{��]6?i��Q��4d��[I�r��Xz!���B�P�������5@I}q�k�.���Q������������;G�оU�\��ir�Z��)m뢃�j��(��ȭ_�^�}{�q[�Q���i��p41%7��l�~ _��(6&Y�+�q>a?����E��z�ZN'��fNGal%�)���,��6RY��Ue��K�y�7Q�鈙��?"����R��>Y�ȵ2<����8�3��Է�P$���3T��{H˷#�Fe�;�ɱ�0����۫7{��q%+��OL/l��y�,;+^�L}�N���N�C�HR{�O47��3�AY.���f�|!V����ʁRu����|<�8�C�F���G�����f��IS'�����%F���[�/dv��`Z}V��m.�H?�/:�f_T��N �L�ܨ#J��c�a����k�m�A�q��[_��N�"����_~vO�������Im5zw��G�ނ���9��©����c�����yPVf�G��^n.܍˹sfPK�0B��_(������{q��q����n�4����\�3�z�͍�� �$)���6�G;yb�'�ĴE8Vt+}�-ݡG9ң�T)$�8����+331���b����/�/�����'1tt݂G�X�N�>X�5�F�)��d.e������f����qS1W&Z���Ssa���2��I���Ea��v��}%;�EW�(>���M(*����ӽc�b��؛��h{n�鬩����t�Z�x/����$X���N������2V���s���[��\5���t[ k�Y�+�4��""݅�8�M�n?6ѯ��B�����,�Pj��U67T)��\�,M]"Y�]�XcL$��abr�'hчf�Y�r���̕�R�R�6��p���ȍ�U����*������m�/���[�7^��l3��"qr^��SS�'�!ov^C֙��D�TF��^e�+W���aI��öo��~?}���}|�`G���7�:e�=�Es=��z�[�ܵ�N�;��_��鐜&�/��+ӾIKT���B�ڵ�oq&O��cqXj���[�۴�x��ҽ�e5�N�+��:�e�$��[���v��|=���Ն���r�r����e�_(����3�Y� +����A1�|�bK��+O�!w�D|����J\���C,�h�}L�UO�Z���ߙ��ꗕ��7y��=d|������K�jp�K|!V�K�?��B���4a��S�h�y����4?���������[����:�tV�gAc����IPd�(�I�[E�-�(��ړw��(��T�z�@��ߖÅ���G���{�w��l�آ�Na�� �:']�/�����q{T�@�[`��Sk�T�/ϟ��w�������'�V"��P=��"g~�|_��]t�R3����2�%�+��A18�\Ҷ�����B~���BM�@<�0���0������Ҥ:�>��Rb�C��tN�^��+:�o��7��;9D{��O�S��r���颌�{^�n{+��������@a�>`��YP�-��Ve�3[��#ܞZ$ao�r�R!W} +oijsa�S�ʹ��^�o|������d��9��lƇ�����Mj��}d��fJ��`�~�������V� ۼ#��_����ˁrY�r&������<dv<��ׄ�k&8���k�&�\���\�3N)�x8R��f��gz����T���|V7&b�?��� +��wP4�w@�I ������ yP�۟���>����娷�����˛��W�ק��i�`�hH���/d�x8��3ۍ����_�5�X ����'Ps��`��7X����<�p�h4��>S|E1nTC=�\���)]4�]��uC���r�_5�"�1���h>�^u��9TNʺ�݈� �������� +���&;�E%I�m��A�"����~����̿��R����!�EU�^��[�h�2k�Wkn�8������.a��;N�u�D�?�ʪZo���ּ�P�L��%|֗�E�K8��%(T��mV�XL-O�����iŽj��M���ӈ�ҟ�b���%5�<��"ʌՙ�s��r����6�'���Re0���>qr�� ���b8�nP�0qP|]���vA��~�s�'���1":�����#슽K��q{���ܕ����6VAj�SH��Gj����LQ�X������j��F<=�rUv�|!V�;�� +���{���RΓA��z���+�r�dz2�C��^��ج���}�����;0C��/d��]�jU�����8��4-)��q�U�K���A~&�S��/�[���7�I�GQr;g��d�V@5g.=�ڟ��,S�&S��}��ƾ�,4w��jꥤ�T�֡�hJ�Y�$�K�E�~L��4�}��9�)D����l��41�Pj*���y�7�<���.N���iv|�<���U�[c�=T6�!]Y�N���oP[�뫦xz�;B���y�`h.�xnϪ3f�u�{������[���(\03P��^��� +a�W�O%��C�@È��x�E��٦�Wgl�m,J���Vk�þ�����^�,DZor�y�3���p�+���y�l8nLgC���V������|�\ϟ�T +Ъ����U�����}^�u%m�p*g&q�-UW�.'��u^��fa!5o�.����5ّj�Sۻ����2�B�L+�N�ac�K�X���I�ᜄ��ێ +�=�ԯG�5�Y���ͺ��~�Y�C�J�r�^Zk���3�����q���f���M��u��O�ɂ����¤�>g�{5��%��?+�M�S,����Ay��Až>k:]&T�v�s^�%͑o���a��kS� � +���H +��Irz+���Zօ�N��:�ii��R�Q���4Hz�����%�_�Hj*]�92F��2xlcQ����?\w��w|tS�y�֝����x�~���lq�X�Mݘ{=/��8��%���4�{n�^�"M0�� �B:/�"���B��%�������$A����6o�5�����K�^^�u���n>R{��]�]j���T9_}�S�pf��Ǵ���8�����ev�%�j���S�1�0Nݽ6<�����B�P�W���k���T�K3���˽g�3��G��f\Yo�۫ۦp^^ў#t:�C�ʃ���$Ĥ�H�������j�̋���V��Ae�T�|��yuJ�ͼ�K�XXL����A%!������J�3��KM9U3��7����Ol%�ECl����w�3V�BƗ��8��Ta�������.1,�̠�"��Z?l�x����x�~�)��J�6_�@������<ݢ3h���ܼ_�4<W�R��/��L�}�si������hZ:/:��Rui�X�|����+����4�� +�H����t��]���9�9g|}Cs���|��!� ����ʠ*��V�N�n +qmG�A���ϊ8�||3�E�V�@�왚��Wr��>yx���a�!�A�*�YC��3Q���6V�%��ˇ�U�tb�d`uz���2rᜬ�r���j�"�gR`�mU��5ϳB �3��쏷�0e�֜Fϕ%�ݳk���Phk��e�t��� $:��������������{��:�:�͌�y�+^�yM+f��c�K�3��ͮ��q���DR�o�f4��4/'�/~lZ:сf��� �#"� ��&�E?6Fr_�x[��o':���S|������Q}����vFg7�-���)��U1qV�>fk�x:��.?���K�����A3.]�U���]��H3��xߎ�%<u�j_H�d��]\��mMu-��v'Uo�Kث@�6�2W7ӧ$s��;�Q�Cw�\��n�4��ub^��P_�� ��tj��o�G|��������uQ7cuN"v鰍����Nؾ*���u�D�s�������}:���-V\P�Nc���,���M+!��/�Q���|=�H]��YI��|��NJn�����/�}]��v�a�-G=[��=j��3�\n�f+�.�H� �F7��B��_\+�����P.̂����dR�vX� +���� %�Bsa��ՈA�3��Q������v��,���-��@����+Z�`��<\���A�a�;��܋������g��E����c�h~!�X������ �� �&�_@>u���d�� +�V���`\��^��n�� +�� +���f\��c�|������U摷B��nJn������$-o7~�nV�\n��/�gw�|!V� ����ͧK9P���p����j���Q��&Q��*�r��h]D�q�v���ȗ�F�v3)X����;�0J'�\<o����Ww�<����w�L�)@^:��Z�~~Q:?$�%�Ҩ����p\��q���9`h�/�r�Y-hd$'ғ�[����x �eϐ�kY� wt�_FxW�Z����)�G��fJ��O�m>��k2�%�bfG����Ӻ���[��ϯ�c�vm�X\Nc�(��T�K� Ѭr�9و��t縉u�p����[un=OD�j۹�a{(�)��Z��g�B���7�a� _��V^����k�%.�� +(�,(�gb�t�X�!�V7|Z�O��l�ю�����)�kSSow���zF�tm8�踻�g�� ��Gu#�,y�&8���cpy6cdt�}?�âae*:(�DJ�W �������td�h��B�͇� ղG�(B8�,w�{e�Z]��`}^o���F-�GC���K;u0%��wO�w���6�8�~ +(���d�1(��"�σb�P��OP�J P���?>�w#��EW���{��條_��n|�z��q3U0�pE�աL�Fx��YW6�Bu�e8m�`f�/� �=`�.�Fנ�Oj�������;q����l�d;�[�3@���y�~�w��y��{���[�Fj�w� �ؒ�N���wZ���� �KJ�O.TGY�^���� �7���E�_��h��d�(�c����� +S\����t�.��y+Gt���:�4C���{���2�����c}¿8��74U �j�Ps�Q^�yL� +��O����W�zq�a@ ��*�����g�b�_0�o����v8'�d,�'����.��rʻAv_֯�v�/�k��U1[���D͜���3�rj�ܑ�����~ P��S����;�x +J���h���{<&�EH���͒���ʑ�3������Θ"�� ����0����T1��>y��km<�������էҨ�2R.��D۳�j���4���8��k���$�=z��"mG��S���W�8���pzO����Lt9���cNmNS��������U�m�XMP���2�욝�U���������Z֧�}�����1"���_M�u�"B�s��E����Σ�,�� Ǿ�wy�m;/�/�jk�'巵D��=���^��X,�<�K\��y}�K@��'��^~}�a�^VuP����<߲�K?e�� ɧ:����y{�P�T@�ޡE���Y�F���Dj��B$C�̒��X�Td!4�0��R�:g�;��#f�z�!: q�pެx�u�Ť���Q�����T��������p��]��6.��<ټ�M��w�����~a(�=.G����u�Hr���'Zkl���,-�K��5�$9K���_��� (Zt@a,&@���J�p�g��+$���M�Eթ� �]���T��N\��r��=��j��̠�s��/�e4��xF�Rjjo�9�l�U����<�9�J�4�ß�]P8�S���P�Y]�6a2H�Fp�{�i����E=r�`k��ö`�O�v�sQ�,�H���hz�}�&Z{8���j�&�N��d��߰��7n&���k&�IuZ�������B�#ֆ]�@EΏ^����Z�1�#�T��#qђY32wg�ר�a5H�-���ً`�>r����Zq��\o�?�M�9Z����o�z[��vB�^�O�������B�P����}nNJ�1D�@y'��(j�03�n#��] �Sg�'��rs.55r[�,S�V���p���b� �f�Sp˛�,�BD�T����K�C��dI:D����-N��w��Ⴉ����,���5���>_ E~�E�}���xw�=A�_}EU+Qx��g��}tv�P���8�۔�P���Ǹ�\�������b>�S7�t��O +O.�EBȁr�9�]=��=��%�O�����As��b�ӽ��������t����k;Tf�L{/j3Vˤ�Z�H�\p��Ǡ_҄���������X����}�]�_ȟ�~`�UJ��D��6c���|�˫C4���R,�-g�P�S_r��x�Ԝ˦�%[���$:0����H�I�N�&T4�J��`��g �.�/���f��ב��x�Z����P��e���L^�I����wHX��n�s���H��h#�UR� +=��q�|�b�*3cd8C������4oR����3�� y�D*�"��5��PpT���w�k����O���n��{�B��v��pO�������6tg�V��$�����wd~t�2[�];�8KǃyeJ�`AMU{E�7����������I�D����kA���(�ٳ�'��3|!V +Jf�\^h[~ݛd�l�T_o˹�2}MMqU�-��eơ��D���tf�9�%���-����Б������l���!��ޏ ��ר�[7���.�\Ϝ���֭J���ؕaN�/D�ļ��5�)_ *����&��gk7L���d5����®�=tD�����:M���|?�m*�>b|Cz �!Nz&��zt)��e� �s�{�����\ +�G��Auzs��r+�t���b��T�ͱZc"����z�:MK��orՍ��l_$|;�5<u�=�N��u�t-N�����:'��t؆�u��]ks�T�]M�����/�9�?�8P�/��ʡ�I���_��q�i<�e!�-�~�e��4N��OqŞ�ԫ]k^iwNB�`A�js��]~V8�)^[�wk����ms9d�f+��4���k�F�g��?�^+��ʾ=�M5K���p�BX�`����Πؼg�%��z愻uN��۾.�QK��@����f+y�4V�1��f69V����Y{��^m;{ j�2B�RNaZ5�6�-�t�X���&M�s7��O��H�[g�w� +1��_�9�W��wb���9�Eu*�(!�Z0� w�Z �8�q� �u����<���{�JTW[��5M�|�R o�n���.�/����P����S�h~�����4���~&����M@�[���3�TP 0��/p�j @~��@��9ԝ�aPqm�S �I�m# +�V����e\�G��m�*�˶���?v>(���=���u��N[o�po�y(�@Q�|8G�/�P4ȏ@�oj�`PЭT~S ��_�/ �]�a�^K���h��Gß��䟗�)?K�g�Hd�z�睯�y�K����oNW7o.Ai�����аq���V%_��� (X�����C���P~0XC�� �Zih��tc"����s.L����/<���*��.lw���S탻o��;k�m�ɓ�I/&V�w���@W%(ZiCQ����,LV���O��X`U���� t�x�����]� �0ņ5|�� �Ͳ�Y=�������V��w�Ҿw��R����'�Sb����*Z��$���>f6��@�� +� ��&�ɰ6=(��M���3���&���{V�<\�_ԅl?jϓ�s�qN$�$u�(��{�r?o���Ǵ]�,�}Y����W[���?��;�$(Y�D�4T�8��?D� ��p_���\�� +�t:|��J��z=H�w�H��3�����*59�U~�G���0[P�)�R�ݓ���:�e���~�g�� Ei�s|��<�����xP�mP<Ma����x.�Ϻd�S��wMM����\[���,���Mȸ�n���i�NIQ����#'���1R %���/�;���d������^_8���4�2�OF0���.�@�f��I���^)'F������Q��\44sk4@���_�)Q۪� k��z�9ˑ�ň�������_n�π�Ǭ>հތ^_^�|���4s`��?�����\����H|�z�/䡌�BH��Ͼ���)dtU���d�� �6����r{a�/��Ww1Ŵ��>3ܦHy��� ^��ڳuy�����\-���w|!(� �ٰ��.(����^��`ӍJc� +Jq.��� <�7G>�4��[R�[����)���5G�Cu��=�l7��������-uQ�NҼ��r�:�f�� e�D�D� ���n��@c�f�y�,�����ϣb���I���r��{Dr���c�hs��x&���f��}�O.��íQ�?u�$m�Ò�⣫ �-+��(+��~!r�-wHj�L�3}i��z?��D���=��[� P�>���ܜ��h?�� ����\����:&��c�j�2�2�n͊�����_/rH� +3�XQg����ܒLgk�~4���%E[�b>�z���Y)�7�#������Pt�S@��p����E�ѳ�� +{���C��]�s���T�]Zz���ȞG�s>�(�#o�T�$�|+庳�Xh�Eaf��M�J���awQe��� �s��+g��[>���ּ�lMڙ0�yM�$.�7��/O���>H���$<c��[s��{M��Q�֛W��ں"������x�D�Pn4�p����<�\hTz��ɶ�X�"�&`}R�<�c����P�� �H�\�n-9�\���-m>Ց�xsS����k��p�F=Cޕɺ9G��^���q�/>���:3ۼ.���������5�={��֟��C�o�~�4�ɷ$a��j�&'^D���_�.�{T���%�V#��!�/7ض�RC'�V�cR��3�n��I༜�p���f�^�g�f�=�V��t�#�M�8����lf?k�����#�<+pcr�O�%��k��_?�{�{��W^冿#�8�ۓ}o��om�-h�n�\��MY�燕p����1��ݫ�Ӕ)�.S�.�/d�I%��&�)�S�-�=�?�K:#PllK���F����CՊ����� �^��q��h�X�S�ߑ�\UۅL��$r���Gm5ߜ;n��̅ �IU�.����Q�p��O�j�B:�7�H{ܨ Ϳ���5�o����Q� +���P�)j� �=y���{�1w*^��=H�������ӆQHk8�JX�[���|��Ev2�)W-h���*����*�j)�l���6�P�ijC��O��G�����W� +[�7y�����m�.s�� 4a��]���.�{b�� �%�N����r�i̲�R�j���TrE��ÎJ��v$�\xC&���q�6d25�O�!3�g��y�v���%~P���D\^�u㵸��a�~����1�ngϨ��Gy��"�/�䶳��=u}�� ��(��z@W�{�S�r���X�3)�V[�0��|�$nA��{|!�/��{\`��&@��n�b_��4Q�r�n��l��"�uTS�d�&z����Pc��D<���i�̓�W�r�/�[��A{�[k#�?&�6�`���I��ۍ~��5[7Pf��g�7*����i����ܗ*�-�w��<Ċ�)��)�}0�a���]a0�҈6����8��9mP����M���(�\K��ޛ�w{�*��6m��/��|��=�&o=sb�M���F��,��f.�#7. ���=�BƼ����Y����~~*vnp�<�!dwD��C�f����ŰL�A�95�6*��*k<q��fpo6z�Ӆ���ң��|�J����Ҟq��ݡ����z�y�:yR$y�9m�N�q���p���c� ��5�����25���|Zk��dЬ?�� �~�i����w| �b<վ�=J+�{� ��V!����e��N��T���C��)W�=���Zh�P&�) �w8t�R�>_�&x�2G4�:S'6�\���{vЌ�%bտ���.$����C���sU�ѥ����vѠ]�d���/���?Ù���^�v;=���������?~��(מ]��.��`���h�4%�CGx�������B����oGGO/��9����-�v'U��E�N��6)���Y������+iB4N?����/d;MS�u����q�=<�3eS���i�~�H��(B�L�� N-|���=�������vN�R�`�Ri_es�.?-���[����/���wsI�s��0)7Vc�q���[{��;�Y��lwn'��p�2]���x�:)�P�|N����e<<e]�IIxu��is�Q�%�z���iך�T��X�m��͒T]c�I�_���v.˵ay������ҍ���������)�keR�/Ϙ\[�T�1�LKaV�@e�p1t(Ot� B���Eo;��5�m�f#2�0�<��z��>��e�^-u�DU�z���IV&�+RA��P>��J��a��u��J��� ����� +�;���[�;ȉT��W�#����y��o9���}�;��ɧ-�Q��u:1�e&�?�WE��N-�բ>�Nbd�)���i��a�ʵL%��6�ŕOn?��?�����P��_�߈��&�G(jϓ���j�U�1@�y(�������@]�����l.]�ϳ��Ӆ��d��d t�;��,��*r��u����?4��� �C�`����� +V�:�}�������I'�L�5tbJ�f�ȅe�:mV/��\9�,HM@�F�x��gq|]G�Jka���뾯M�7,�6n��������Ptn��t�J_�А���Yv������ +t>ϴG��m�6@����]V��م���*�b +:Vr�&����������z6L�:%��+P�?���k�KH�F�*�������> +��M��P������ +�n�PvM����]M"f����}k��L5r��u���(0{�;ˍ7Wa�V�ݭ ���i���2�|���N���(�(ol! +̩ +�v���|�y�OL������\{T�e�{TU���㞍͛��64tH�͎��Ż�6\}Γ��d��;��9M�ݴ���2�X��,4��A�:I���p��=�@�j��T��3�~!O>q�>��*���^&T�W1x^�͠�}_���[�9/}�����x���q�_m���d��|ϳw�/��~ r��3�(j�P�Q�H�^�a�\v�d���?��tmQ]�>�� l��Q�SAQ�;�P���Ś�����Z�������'!c�1I��0U���*�<�5�������襯>��/��Dj\�� ����@�v����<�l�A���^�!����+|U���X���h�ɽ�P>��.7��Bm��� ЙL�-<�O5�i�c����v��k��DQ�l=OQ���kf?k�8D�蝴�*� ���x��_�K���{R��f��H|�x\����5���� +5��z�6�)s���|�K>�*�����|;5�������e�.�e����f�j%�CX�&r�u�-�}�彆}k�vS�|��ڮ� Z�q�z�9�+~�?�_B �fq��wkP�ϟ�.�?���Ոx�a��$����Υe�ݿ7��.�6כ�0 +ׅF���\�����װ����d��[��He�ՎKk��*��R�����zX@���k^߅��L��.�����M~|>�]�ђ��u�`��ˊ4�ڻn0v6�h�*|�Zq��,���~!��hN쐇K��Ԍ������r��,��S �ěpc!?�~����w��9C���)&�X���Z��D�eb���x��"wԍ��M�����1��o���w|�/M�'��y���d0;UV����"���� Wb3c��T�#آI�#���#٦J#�E��>_�3�����]|�3�U����|����cYe2�p�)�o�Iܯ���Пz`G��Yl������8�^��ܩ� ����Q|"��z�0��n[vc��횵��U��6����?`{�*lϙ�tzSy|���k�=�l�����#���j��!�L���=��F[[b����9mW��k�8�f��GA��CU�~�N��́Rɚ�y�3��;�<��`8�?�A�>�o�Kh���<���|���Ы�����?��>}78���v#�S��! �37�,���{�'ɤ=g�p4"2����������ү�O�eJ�~�|��^�{��R0�������Wi���S�;߲ +�ӗ�����c����K�u��n�ui}�s��"y� +����w�)�l飏��bZ��bC����u��2�o�𝡚�=��������蕌{b���;��Qp�k�uzG}�����%��=�3����q!d���`�`Uݯ8�t�y�Rk,���Q��v�����dz�MN�����6��V#��M��6��JE뾥��ݩ���A�q�o���������]�:;g��i<9�9��Gď���e�~�Q�(�~�/-���Ϊ�27i ��hgU�S�*����&l�^�(�֖�gڎrʵ��%?��e7�U +>^U +2RP�� +�?��$d }R���$����hu�쇽8uʏ��ܙ�J.^���J�C�*9��Y��ʵnERF�e��K�ն��/U5�~����;�5���a���ȼ���/��vj�G�3����p�B~W�*���� ��_w���;�Տlk7>���j[fOW�-3�~j��8>�aQ~�����]T�կ��f��!�R��N�V��.��谽���:U�Z��Gε6����"���?�;�Reȗz���ܓ'��{�ڧEjd���=�B=z�F)q��Y:Y=��(�Vi��u=���u9�~�2 �γ=e�k���!LQq>�V���-Z[%-�v��9�͊�ۣ�?��z����A�K�� +�<�@�^�:)Ű�w�M=�٫u���/��6M�C`�e.k�N�g�UJ��rA�ނrg��u9�9���K�b}�<�Y����N'?�0��k�5_䚃<Y������w�4�>�mP�bF� 1�w�T]'�}k�����\�V�����X}7ck<����{gt#K�ʽ.���-��#_�rd��ꛇn�L�L�-� �F� N�~x�� 9I��z�7&��?��� ����}�y���g�m�19����^��?������r��uz��be}����C?$��Z�[Hg�.s��Y(Hd��w�eV�f%���7�����[��̧�F�[��&�^ ��*���@��� ?��^��ͨ��^�'?��:�u�3�6���a���Ț2o�/�_?U�����G7�2>�������b?�Vy�l _o���r��ђ�#�u�7t�����������*��ݡ���Ͱ���0�'k���s�X��˻l. +i��k4��Uu�o>���:��۷w�q�� +�Qo>�Ӭ��5��T�F�n�jЛ��u�s�����n��;W��� L�������}|�=���4;w��t�M�u4>�Ȩjo��yqF�ôT�b+����n:���n����HH����Y��H0ğ���E=�yN)��z8Z�z��֎���������T!T�߱�q���fsn?��7��$UX+�??���@t��p��ڒ�S,H}f]mٵ/$KBj|Tkdv�G�)��U=a]�ԯ�㤕���%�[NE��mE��v�=�A�,z������惇Uu�<V��'g��렧g��-O����u�yK��Y[��0�-��A�#��B���*�/�y����#~�j����I��s�r�²@���|���;^��D��+~�?��4)��4(� +�Y��ģd����$�~"o��D�̖�t�ۼ!���mz]������\��ǷJ�2�5>eW�2��^����}�W*��WPؙX �g�����P����������QAx���=���(t�<���=ц���Rڊ�B�ڵ�(���dmTI��nkTib\�ɴ�&�����G���㉶��.#IB�J*M��B�t�@ry����)���7&@���k4������Q��\T�^Ż��3�gSW�< +���X7�X���%@?~�[|�yCX$@�� +� �h��h�e���� Q.Y��3���uiť�����* �8�}1k�y�+��@���U��9��� `��5��_�]�X����jM��K�i��- +j=��]�y�褮A��~��ԭ%&֓��a\jY�GU������S��k��7�� +�����w�)X\��_r1��q���9�l��h��~��0}���X�f���Q��� �&�ዲ�Q�1���} +�[�L ��dX� +�����m�y +�����,0@�u���n����ni�)��r��5��7����n�cX�`��]�KPr�X��K6���҉dG{���ɽ�M9��x?��^�����}9E�<�h�y����@�\L@��5 L���,��^��>�-��l������� � ��+�P�;�p�f�룗ލ'?�7�=}Tczvs���*"��E.�N���ѿ`� ��3��CW;�)�!A.;o�\�@���~#>$��bC��!�7ao���=��T�y'[7�%j˿�ƾ�sA|�ݾGOݽ�qjq��ˋ?k.��������Xn��c��s���N`��P��9�<�A�n� g?E��D��!��B��bQ_��: �(��G���L��?ȳ��3�&��/=��x�C^�s��{]zM?R��w*4���Y�X�<�������;���@������k����@�0�\Y�ΰ�R%N�l�(�=\.�Y}F��ߪ���q�^�z�-ܚl��z�O^��_��N(F�(3<Ӆo�ʓ'aj� ������Eu�O5;��+Qx��9�y�ll����HK�2����"$���D���ӳ��ɼ}�/��iL6���:F�ʽ� E|��|�Xӹ �=��IaJ��تf� !mE������2-�o|��N��H��V�-`��C��Z�;#�(t�J�/���/+mc�dO��EՐn���wɱ��O��qd{��kQ�� �}w�}}�� �l���=����U8��ދL����U���خ�;�Lb���<�ߝ�H��nA'T����x�%���?�/;A�ڵ^B��3��}B��B�h���b�%$f���8�}{�_�J�z��תf Qo�HՖ� �W>� ���]�zgg�֥�����Y/A�ٝ�����l�Z;��wu=��@�[Je~���7��zEh�RPkoU��֧l<�y�rRǛ���%��E��<�ך�����tɷԜ1�?-q��3��ʓ�R)�?�?N@�T�-��Pm�e}�N���P��K��*�z�;b��K˓'֦*�_ +j[*��+}�VO���on,3� +��sۍ]�1[�z��fjzf�ܐ(�T� 7�����OJ��k]������K&�<<��=����$:}����*����L����9�Σ��{j���Z)��K�j�ɍ�*��w\L��������,�n�����"�2v��F�HF]e��S��w@�ۀh���O�(������50���2��0�q��F��6��]_�/��褼\%Ov�3+��\5�&#O������`�Y��� +�*=�l�� ���h�eޢ��<U�����1���� K��p$����O� n���F��|;�/{?��m>�"A���� �����fuf�ǡ�O��m���e�%[�ڏ�C�����a���9��T�A��d�+@�� P=�w���uq6��f_i �N�N!q����s�Y-R l��rn�[�;�[�t8~�1A�ʏ���J���q�Lz�]10��4�M?�<�~���=~����+���؛>�!�h�ʁ<o +ϘZkw����e�ϸ�LJy�;��!�O�K�P��ꋜ&o�l�4��wrjcPm��ެ�ӍVzd���ӑm媷y��W�) �'�U����Op�����P�Z�)��0��z��^����;���oʛ�y����Bۅ�٨6�NޅffL �k�6-wX���|��8��nY>��hp�<P5�5S���Q�3yZ��ZN 3L#�C����9��x ()|zQ�ɞ����Z?�e��:�w�vƓ�O�������F��r����+&2<�.n'�\*�ë��:�lp�R�oz�\�L:���v�ʚ�Zs$�E�a4���p�ʊQ^�@;�Я?���!�GU�o�7����n���8�!u�3v^LD���hI5e^�b�?S���*�Im��5_gjݡ~:5|��|&���=��2��x��s��vE"��ﻤ�����vN��%:Nb�x�Ϭ���.�vǙ*I[zݖ��F��4���V��-k���H�_2M;�0%J���-.˳�w>�E-��uMq=b��z��v�LI+⌷ӥ������@��߯����Ԡ�F�9f�)��Y��;~q+�1�L���u3�aq\|g�0+I4�S�(�e�t�M��Sٸ(�U�&�n��Jh6�~i���_I��^�}�"����O�+@�ZtUS� _X�Oq�X��������L�Nw�K��vf��t8���bĜ�� )�JM.?�֫�w�r��X�۫T��F�i��[�9%a8I�����*�bY��E�Y0�Կ䮃��`t�x�Lq5��؞���v���_ ��G~�}�Y���1:m�sZe����m�#0� +[ +/�(<�2���d�-&l�[�a�Vo� |��L�-<|����j|Bx�F������^Vޡ�q��A���F�+LW�Hl�����}��> �Q�]3�~��z�M��][)�� �b|j�-�.s4/�+"���|c���|���i�2⤩����$W�s��8/'p���}��j����6v4~7�w��y�U�+yu:K���D�����>XS0�V/W(w5˜���M�:�d�sHk��qI�Ze��a�6�������3�g��vT�����L�I]q(��ȣN]�z�#`K-$:^� 8�*-w��v�jKq$0�� �5o��@SE#�q�:^�n����x�<�o�Ů�7t� ���[�]m}iY!xD�K\��6�zl� ur�Lku}���Q��\-?-J�����JA�_4���g1��N�G�h1��� 6��%Y���4f�A;��td�֭֕��eI���h]�sޯ���FnG��^u�t��qkL���l9=Wo~z[��]�jw�������lJ���������+ +�y}�~�vƱӎ���ܺ�%�ur�Kw"�t�#�X�z��U��mzb�Z)թ��ט�`�VCq��Dž#1�*q�� +G�r�Ų�/���������ɲ]�=�K~��6���_��f���i�J㹝� +F.��yP�n,ۛ=���Q=4�G��Ҁ�x$]�-p���T��ҥ��"��琗J"S�~����� ����z���D��8p�������=����9к��[���mUc����r:��A��bWi�FNqR��i��!�eY VAI�'��?��ut)(�Q̄���P`����0OG����*R�m]�lմ)�\����'&����Y1vj�(\��� +���ҕ�BjP��ݫP�.�2[JJՊ#ư�vn��9Zba3��L8)t�G7���T��-X�-xB�sF:�s�KN�MN(b'b9*<�L̾q�8 +��@qZȈ��mM:C����/�0$�GI��h��t:4N�Ui�V���P������y���9�DxȚzC�4DRȆiĭ�]^�4=�ǔ�"������ү�h���(��B��)��w��(`m�X���� +�+@w��.#�Pm�h���F��9�#��4{��)���Z��dx�D�6D^o��v�{:��G��U��� �G������-�Ƈ�ubQ����z�����q�z����@uz!{��=Tݿu��3����!m���k�1�g�?�c����>�yTt�W�V,C�W��)vfh;��_���IB\y�S���0�t*��lj���-�u��n�T��.��� P����*@��]��)��}�q����X��%�K�6�o�_��.��)�9Ը���|��Q�.���0����g� ������;w�'J9`��}�`�P����� P��t��W^��qTt�G����Ķu���5c�_j�� ߕ(`o���v�lLf��3zQ �i��;j~?��<�����K`�,l�;K�$�-_�I��t^|������N��8�:�J � +&��8�\��1�6v�w��k�Lc;�W�t*����,c{�m��9��"��c��'�C�G@t��?�r�e/��XL����������Gs������v��=2w��on�м��g�"�q���s�g��ޠ��i��/� +��0�8�O��P�j��ȉ� +�YB�Al�I�� /&0 +O�I��ú«�_0N��[{z���u�&����^��{���VN�^�����;7�SE�Ք�Q�9��m��_��mB_�����<@���;#�;q��2'j�,���Ǘ�5ҏ'����.{���l-R'�u6J'�T���^���'�s�����3ѝ�<�[yU�l������5ٿ/au����x4)�����6�?��W���|`�J�������`}��Q�>>�E*�I�vQFn�|lf���&�������y��p̈�f�%�z/��^��`��IX�������Ǻ���[�RQ�YHަ�+���t�窰�i(�N��=�LtP�O�U�7˅�vۋ/���9 @�)��U���l�ˈߐo] +����_����?���'Xx<{ ��Y9Yx��^y�4杗��Q.�v�0�X�W�,�_o�'������d����i$}�����q��"���9�z9-�o���;4� -���j�ʫX�ٙo-6�Y���1_Wv#w��?�K��,?�a3&3d���QrFs5?�� ��І\vMmr�f�Ȇ����R�z$«l%�#e���V���uFN����w���t��c �= �R�_��OjnXi��,iOM;6�� O!L���5��wű�����J��ҕ�x�����`��h4��`ș�Nd +�-�?�M�|X3:3���S��ns��fR{��A��5�AzL��[�s�F��^R�� �:���0N�r���偝ir�Q�p<�|��G2۠F�E��@4~4��mh��&1��v�|��6�M'��-]�b�8���t/�K�`����[��Ǣ[ˁ�^��������1����gG�2m ��@��g� ��öݔ1�VC�<�f����?ę_�e��+����w�ʇ �+~�U���{���>��ً� 0���p�Yͳ�����{�����%�������A +�!9Ts|ɢgH�,؈<(�~߾^�n�2�r"�����N��?����X����$~e$o@�c�Ys�ʭ�d��Lޥ�ߚ[��w�W[�����x��3��$�v�8�%���.9�X�r7�#?�TW���2j�0Ӎf!��N�e��;b��X�x#����'e���{ +�v���%��;�<�{�p����i���"���M�����/�곞]f��q.��X,i�QDO눊o�D?��IkD��K�h�{%^G���u��>���MGv㬎,��.]o��w@�D ��#��|�LV?�靡�>��ѥ�g��.oOT�b��A<T����$��i;I�߇і.E����7/��ׯ����긎��F��PT������R2�U)��R����p��A�q�V���� +��P��yU.~S��\�4�p{5�M�4W^�3zq4����|��7W;�t���+\z��g�!:ͷ��'P��%�Ѵ_��Fv�S��OG���d��t>յH@���l�Eg(Ɏ�}��p�?�p�˩e�������%"����"��^���$gy6F�oس͵YM����;Hup�T*��&�-�\~j\� d��N��&y���i��5#sQ:%; ���(~ �� mh�j^oV�������]� �ۦZ�dW�N��0��4}^2�)6�ڹ3��4�~#r6���U��J 9�:�����Ͷ�r!/��B]�{������iI +��ۧ>����A�>�ƾrp�_�Z?�&1��V��U��������U��cʭ������M��~3��f�+�� ���Q�w8b�[��Xj�\F$��y���&�ڊ5�y���5K�-m�N�vg2�+@�|��o6��6����bmO ����.O�e����,o�r9�:�]��R_�F���_f���DZz.�����7Zܶ%�p�#��2 +r�Yx��P��jc\��Z��h�[Sh/B�V� VXD��S� ��M��� +�����[�X��R�N��� x��ԇ��n��U$h/J���hZ]�.8�mT�Q���(�� ���ӘL|����}�%�[Knq|~��8����Q�K��� ?ȟ����\^����Uqy���3]h���m;�is=��Z<5||�|�K��Fx��r�/-uY*����짭��z�a� +�)�W#�ç�*ɉ��׃�U�w��_�d��z �h.+�.[+�ŵ;��4�4�7� ��v�����0u���|B�G�{�ZNw���Z*��&�V��r�ӫ7eԎ��-��fu��I��?"��n:šv��w�*W��^� }U�Sr��ݏ����ʿ��lx�-Ü���%��`"�� ���saN�^�1��v評��]�B��"�:%��������/4ᆪSU4�=}�{��₱~�pd�����F�Ğ^��ֱ��ݍ-6�H�r0���,� +8�P���3:��6�wާy���`�z5���)�`��N�ܹ�����֮�Ѵ�9Y8dド�F�8��2G�Q�<Ů۫1f��lɎ��F#��Z/U�n$U���]�?��rқe ���b\Zе;�;RΦ�W��f����f3���~����`| 1�k،�ݓ d�;�+1���6S�nS��<�y�����m1*�?�T8l�/��sZ�s�Ҳ�\Kba�.�� a E�m;�ﳦ�+�����E�)e��l&�KDID^���.��%�U�þ ��!/�I=��~u�%`l�sz�ұ¡��,�`ݗF�Sʜ���6]P�v� ��C�wF��ĝ|_���Bvz��5�����b�|�$ښ�������1�����j�6�j���Wy4,��z�`V}"V�T�SN�%�{�W���Aa3G�N*Y��}a�ӑ���zy��`��tt��%��sM�� %_&>��I|���Wػ2�$������Y��xi!q�i^��:u���>��#*X鳣sE�9��0���hY+��l��X�HGC�\rD$����X~�?Iq4!g�"�4��/ܥ���i��4��W���r���XH��j����6�%J7�|, � +�q��XM҆�1�t��AW(@�tdA囻�Cً�욲!�D|���pH����L���t�c�W�G�a��fz��mq +��;��� ��?P���jݟ]��*G���J>������Ha(C����1B�!�@1���B$,@r��I�G��iS{�E��+�R���I��ҡ���5e�'Ox�U�*@��7�Gs�9@��@���"�a5����"_L�t +�B�� |���!���� + 9�x��R�Px;��)��pl���@�ڼ(�C���������K@�6���輸�:���rH�"�f$ �6%�~[�6@v ����4y��)�#�����R����x;����ǵOs�J������\�T���7�'o;�v@�Z`���01V���㛰G:���� ����aM���lv +!��t�d=8������Àf����AW��<�־O�g�6�<��A�W�D ��7������.`�w>\��!vE���6�)i���;��?_��9��%6�h�������`��Tc�<����7 �9:�q�R�=�L�z{��&�r�s]��k�+��&��?ؿ���@�[�<����Pco �9,����2�ߝ�w� ���>ٞ��k?|瞧���,k!.�G��m6�?�� �+�N�\����f�������e��J�:n �`���v$���^�p�2�ޱ�¯���$�^����2�d����9��)t\D�� � ���u�O�g�aďG��ޟ�$�M���5���)��@O"��gʤ�S�����#�N&(�I����ˇ)��o����Q6j�W�d{������LD��w>prl��9q[9 �_��ɉmU��g��������e]��*��3���>��a-�w���g�>��l'�vۭo�F)u�u#۵��Ղ�A����J���� C;O�&���߹w��wô'ȅ� st�u:g��V0F��y]^1�q�(�y�J%$� [H8?'�N��mW؍��0~�/��Nd�z�̷6�p������mh���/W�e���ft�����L&�����Iv��>�䠈����w�tep�e��yP?n��B1�ܶ�[/ِ�l:8�=ܿ�Tzu����Vl,A���&^,������N��;k������H��Fg�L�������O�D��S����w?/�_% c��h^��v6G������.�7?�F_6A4�~��^�}��m�.V\��wT�ݡ?;�y�����`v�L�V���t��)�T+Ff�x���Y|��h��N���nP�����-�ahr)�d��E}{!���־1���2(�0Xqn�\N��c7̝߳�k�NM]���3����1�c�r�����>������"����Svk�~�!ʴ(3�]@�#���;a"^�!,<��˧�Tk��9�n�MrTif���r�}z����SjM�n#v���=N�^��0C��䆕Q�ط�� f �s�<�t��p3���r����_��.|S�\�����>��M=�v�< �W�0?��]n����������^"�����Ze9(��s7K� �l�q�����Í�`V�E +�Q�y� `$u������y�d2f�O��B�����E�;�!u�sJKx�9(�@��)d��ɞ�Č�e����|z��9X�\���~ϝ ���o긱���an�b���i�f�XN���C�ڋ�N���>�L��q���ǹ ���+���Pf�4a�z�+�?Y�G�W��I�aO>6Dz�Ief]�U��tʆ�͢�4t������F�7T����g�G��{̑���?�!DhQ��mQ��H]��1_S���J��������m����,@�(ɹ$� �Ϸ�z������1�Ϥku�DtO6P��1?��� ��q3jza��sP��v������}��%��h}I��sFP��h��}좭�a�tD����軷 q8��PϿ�ϥr��V��\�]��?`�<DW-sU^���0[y6���l��y� ����f���Ȥfm=��U������p!�5)��-��^����E���* �ۯ�x����#�`�d���<�2��S�̠�F�-�7���PI-7b;�F��9��PK�J���g^ze��d�����o�}�X�v�Qd.]��I:�c�'�"ׇGU����s���n�<���x�����o����І�1��&:q�yx�}k�z�xg �|;��J���y���^�2i�Rs�[���u�A�͙?H���z����{��P +6����Ivѳ-(���\e�R��;�2~l�s<e�*C(�W�h� (��t��tS;����j�����{6���X/����!��g�VT�nEz�5�O�N��� �[�M��ۍ��Fk֩�?���<�%o��Ŏ�A�om׀i�9Ej�Å/�},!y�%I5��+� ��5 �0i/M���� +͖V�yh�W���<� S��>���A�ZL��-N�s�\Q@��v~5��>i��O\G�mk�_^�=s���T^0Ƕ$��l���ޢJ9����`]���������h�)��t��Ӫqͦ����Nĥ�N:��hgO��l;A�D<<o��Y�M�=i���d-�P.GC��҈����gҗ�bi$*��ۢ8$��K�N���3��x�싼�V �?�5�4 �2���ͯ�9������`$���f�jR���8�ڋZ��1&X�X� +�}49��|���p��(7"�vf[U��I�-uٕ�:��V�,�fB�A����x�^�p���� \�%$.=��܂O=��@|�| '����l�a�f��hV[}qe�o����X's.�v�.��Å82�&@{�ëv�=��8����,��Q��|�U���=34��������f����S�"_�$�Nm.�:V��u��u�߀�����لcʝ�U����\�����-=i/�Q�9�x� S�����R+v���)�B9+���t^n��/ԉ�w~�������t8$.u�QMk�R���.�=g�����a{]���"�S��lsQ^W���R!���n8�kWIb�w�`~[{�7���ʳJ.:^j�m+a�,�/�g�^�g�>%�zX��p����P�+סY�W�{��;���=�m����)%U�A<���ީro�ʽt�b3�SE���I��7щt8#C+�����-��V1�N���<�F2>MųȬ�UV����'����[w;���V��a�)���ϖ2�:�����W�U:,�|�Yn��\�S���ŭ���XZx���A�>^e0:�Zz%;�z���<S��x1ߚ)��{n +���4�9W��j��!�Ny_�=�8ӛ��N��yު���U�W�t�C�ܵ��|�^�Dy�(�;Va3�. +J=u,��fB��0zs�1z����9V2Nj5�������S������X��.۲�\]R'���A��n���Z��^GZ��nw┖��(���_D�ZX ���ѹ^��7�4�|�.�I��m]�Vg�?3T�+2>J�#�+a���ypx��&�Wں���~m ���ˣ���^h�U�P�x2e���YW�RjE�R� +�#�d����ҡ�٭Jٝ���w';��nN(<ׄXM�q�a.s���{�, +"D_�o�A�#�tx��M��^N�EnG�K�>�w|{���uf��W�V�2ѽ�T��"�c&��|�߿�rf��X��!9�������E��?�@o���LSh ����ٺ��;�)��e��^����q�L��_�Ȼ�h�v��~�B��d����=�� hx4�W@��d�-�m�%f>�|g�MU^ s�f Vī2���2��2Ǭ�o �dN(��S�� xXd�H��,��A�^�B^ ���S���5�c|H��@��VAv�邬��lw�Y�|�"Ho�-�P�sd�4�%�7!��R���di6ч�#m������죿�{�?B{�@����ؙ.��Ck� +�"dT��y�PePEP�����q�O�]��O���G����$+Yk���/��-����\p�K�qi/2����]C`�����W�N�ĸ0����� ��Xj� +k���2 ����d���錳����Ĕ^"�O��LC����� �|�@� ��������C�������;���g�G߄�Xr�d��}��&� �+��J:���[E�o@I�jᕏR��7A.Z�7��\E?�`t��_��c3@L�oz9�"��� ��< f� �����s� +pS~\�~w��y��q��6CC�|b�|:�3|;x�W�'Z*�t��V�gH��Ϧ<�=�f�zl�f��-�3��x����ҡU/K䨾�|���P@�t��z�� ^bW��y�Gru$�z6f{z%�>O�עp� +�+-?W!*�ӻ��y?�S�lޏ�fM��'=3���r�AU2�t�&�O�6���ݠL{���>Z�tJ�A����6�A:{�}��sHRm* �/د�!�F�tO��a}m埊�՞���}lW���65�> \����]��z������k��Ώ�H�����0��{7C~�k��lȼ�@� ����o���9 ��t#a���u�����aw�ײ�>�0y� ��ܬ�L��7BX�̰S���N�?�����ҙ��7F��п�[ �'=���A(�k�Ĝqk�rHb�>���7��@���wOR�X�q��L�����]���l�*�a���ţ�f�}@�ϳ����Et�����&�%��0�xܵ�cՏ}���8�W��؋�ۗeإ��ni!e��9��:��A?� �͝ �!l���L�-�X��|*�p�}U�����'�ǥ�^3/��7���w2��t��0�:�.���x�%n��2g�S5�g6��|� +3�H>�v)�m�S[`�)�����#�9�@�^�C��Yf���P��Pn���"����}2��A��ѻ?u��Vp�D>fo�n_[գ�2n�8 +,���f���]{�)��t�Tv�2М,��(�v5*�B-[b-;����X_\ Ư. u�A��fH��(�vٮ���l�<�B�%�p��r�Ŏ����S;X�y�.x�>~1;C�m}���d� 4F`���6��Q��[k��!:����6�JX��v.Ej�=�Ь^��οv��0��-���d3�_����)n�{�~]i�]�͖~p';��U����ccY�u:<˻L�ն�k��\ב��KV�(��qk�J�]�� +�_*!�ٓ��S���MH���?������>���e�\aU.��2V�W}��?�T�~ �m�}�}�q�C־�A�܄d��;��ɞX-O�Ȫ�J��֪m�]:�I��ָKV�J:#��~]�^S��*Eg�a����]V�S����� �z =����u ����]R6_�d���<��]^��F|,>����ŒaNw��)���q:Q��#����R��IYB��nM[t˓�pɍ�e@�Ȳ�����9���C4���^�R���2t�7��рB���r���N���9�kǠt��s*6N���-2���Ws�*3�~u{U�m5l$�3�ҞIq��u#��a_.���������P��d�h�켗���� hՏ<����_��Q��0��2�������P� ����i� S��gS��s�q'F�:�[�����/R��,�7�㴡t�ZG2K��:��O�9ל%�^}��.����[[s-f/��`#�[$;��۬M0*���_!._8_4vn�m�����T�P�����_6���� �9�/�VR��~o)�����m��)ɾX���Zg�gO\T&��>AX^>o�Eg�*�T\�Y["�Yf3�m��yέͼ}Z���?��:�t� p�׆І�,���v��E}8co����i�8Vj�����G#�j=�r�A�MK���<�D���ݨ�<�k/��?M�8�8Ϭ��:���%˞^����N����W&��"L��ޚ-jCov^q�/���s��nA��5����LW]o_��O�z�v�hf+Iv��u��-FI� 'U��E�\;k#/�}��|f��Er�w�CbAs�\d����ڒ2����8�3?���*��U닱���u��&�V�8yK�o�i!*�s���o�?�r�H�=^����ʺw��/t�춏�uV�,����"�*�<�q���~�6!�6�T&?I�SQ��Fv���cu7���=̢�5��z0#cS���to�4HaG:y��7��5%^̈́�Щ{X�Pw�G�eGx�e�4f��L�Q����Q���R~��z��C�|?��߽K,��+��Nk��h�Y��OT��'�C�P= (���������t�d�ڐ�˧���#�����+[��0X���r��A�P�35��Y�b�e�v����� +v"�k��\�چ|�E"s�gH6�\s��LW&�)i��m�?2��d8�V�?� {�6���?��~�ѽ/o���NzB��"��מ�?���7��٥�¡Vu-sP<��D��䤢A!dN������{�l)��b�疽� +~��}:�����l�>g endstream endobj 36 0 obj <</Length 65536>>stream +�����h#Jj#2+��qL��Qu�� ���vG�H�v�H�ϤӦ��N�,��+���/�!|Mf�K�7KΜBV�Kyc��&>�iu�nR�K���2 +Q������NA���>U�d����q�E Oe�<(,��ޝ�������Ζ�6���#[#y:m��e�� �S�����~ͶCp�k��%"w�-����>�Z��n��.�S�Q��eo3�-lT�p�Y_3�a���t荱x�f��{p�t�X��z�$�u��k��F�-[�������̸�LÝ�L3c��fF�N��<6�V���[g�?.n�Dn�����`�f�$���h���o�x��Τs�?zӘ�� �:�P�p~}]����ٓO�O�÷�N�*�G�z�5[�&#O�ak6 +����|n���\}i���R��%�ù�����DUY�s�fv�JݴW���xY Du%^��b�܇��&�<��=��fC�O�������w������A��&�mQ�:��h���g�a=�b�^m5����~�����+��TU�P�*��UuB8�'l�4�tV� ?�F]�@r<$kΏ��`j��s�F;�f&��ЏJ�~�zM{���w��JjO���ʎ��f�����y�W ����:[�G�Z�s G�Z~�� �1������&S�o⬌;���u�e�cڜ���MNd��~ ����m&��+}xN�C!���Q�U���m��vhw>jg6��њШ8�T���]�� v�G��1O�˖�N�ģ��2�n��u��b�r~XV%l�}ץ���1�͋3��pW�'���l�]"��P��}~�J��Y���T�x}����d�8��V����2���L���I��9=�e�7`��R�St�/�I*�R�6/�$3'MU/��(�.P�\�� ��U[b��4������ +֍Cq�֡��̇3r3k{t�Yv{*�۷�D�Լ��G���F�6�yU>��]�{�4�Ήb.�d +�O!��bx1� �J����)mq�d�<̠ϐIq,��^a����n�'Gw("Ol�����������0�̚������e�Mo�)u���ژ4*�w�K���b�ܫs�z��Itxɶ����̰2��Ǎʓ<n*1��7� ���զ�9,a�츅Ju����#�R�Tҧ���O�k�?����4Ö:5��M�.��}b��m �G`tջ��G�����l���]��'T�� �=�>�r����/�"@�xbO?x�ӆ��4x��/���W�'s{�CqY(s�|�0�-v���t�P�?���p���U��!@�����������D���(~��Mz�����w .�wr�����ļ�AB��7����� (� ���1�B�}$�s�ƻ�: �4������!us+�S��T��E�r�¿��d�<�t�@<���{�qxX���bD�ўq��/��ݾ���[�m�T��B���w�q�|�Z���i��z���0����hl��;��]�Z�0�BLS�K)i���]iRhC,����R������g1�.�8�J��3���P�c�/n���S`f��_����������q�;x�Ss�oD��u�-b����;������]=䓱w�&��ݍgAvS"�z��{+�u���SƳa��^�[��������w&� �+ܫ�G:P���Q&�;h+@\s � ���"��j ɡy�#L|��N���k�9įB��DK�MG�\R +W������O��u��w��|۫H��]O������5;�����s��� �2�& JO(��`l��ߝ1`�7??��"0@$�r2����R!�(�P%��"������cK��{�`��������m�=ہ}�fA�"n|ʽ,O��\�.O)��ij�ex��f��o�FS�2o(s���94X@>[�W��O��=/�L�x^�#�}l?_�l����}�xmn��Y����+;����n�\� +���b+�r��5�Ӷ��ؓ�,�9���cǩ������p�ܼ�Xn��/�U@����� �w���i���`��I É�~�nT�fo����4�>o�adq~x�S�u�����d������C�.�q*ް���C�����"Z�Yܛ����RQw�a�Q��_���Ϸ � �'*qC�����w(�s|�aĝ�:&��t�s�@�5/�r�_>��=��Z�$��/�oZ�m���}�����{�t��� �F���F(:z�Y:�v�;�}�vv������� �͗P�k�c�@:a��^����9��3�ʡ^�i�.5�\���:���r�j�k/+ڪ�ˬ�x#¾}��FO�u}(����rݑ�m��u�����Z�6K +؛e �1�f٧�/��������rJ��Iߵj���9��8�����L)p�D!v2�!z(j~ުwk��v|j��G�H�3�t>�5��J�y��7KR;���qU��%QN>+o�#-o[Y�S��w7�� ���?�&�:���2�y�]t�G�gh��G� +U���st��~�ot�6�m7>ꡠ�f����K{{ިÍ�������I����3n0��R/p_��le���~�g��ߝ�5]Ʒk��U���߃���� +�%@�WF�9��-���s�v��4m!���ݺ�qJz����zZ�}��FL��j}�j+��3��Wf*!�h��75e�^��t���6���:] +ni.,��*���V���7K�����@\�u��HP(=��5��ps(.���_+[��V��<^*��F���_=]Z��/ئ��eU��od�V5 ��:k��G� �Y����zT6��3�|�e6H/��d�ח3�����?愼�<��o�$�j�tW�~3$ +�F �1� +�f��kݳ6� NT��*��bv��A?�O_[ �hS +eÒ����z�MWT�\s@�.e:���b���<����}��_���c�Ĺ��y��E{�~�!� ��#��P�n̨_�����5��Z�SV+;�� +�Ò��]N�y��5�+�2�r��d�L������P^V�z�öt����"�^.;��}�̬N��Yc�e��gm��p�'s������=�@r%(�z�EOL�_��{��d�K$ݪ�U[u�)C3�X�>;�v����Ԗ�_�KD�i����.�e^�~p>DZ��F���}��r�.NX����p�Y~�:S�����*j���|�ɾ�0}j�8N{��i4� SH�w�:*�����U��HJ���-Y���1�#?���M�4��%^��>җ�x)4�R?!���E'A�W��D�Fm�f�,�N�%OjT�����\{��E���W�O�N�.c=�6_�o���2�� �w�y�f�S��������0�7�톞���mm�pe'��4~wa�ړ�U!#^m���gQ�9�8f�LyV���Rc*�S�I��M�M�_��Gzex���"�%����z�H�դ^q�?������Z�|U�Yۿ�B֥������ݬ�)o��v��VI����e��nV^���j4>���1�gG GV)Ƶ���%���<�We��.���'��f�Һ��F08�XvH���FV#��G� #�hCb�N���y[#Ҏ+}�b?�U��k��}D�l��M��td��5�de�~���m�t���>`��2��Lo��4n� �^q���ZC� f��ﻑ��� +zJ������g�x@�Wq��ʫ!�v���2����:�J� ��I�0߄��k'� ���&�T0�Z_���hzJ|"���ʧ,�E����xߦ��:�V/E��/b�v~p����9����r��֭��s'�݈n����;e +�����+������C��T.a��q����(���(����Q,9s��*y���uy���ܮ��,�8���5��^ƽ��>��\<��/��'�:r���˽NԶ������Z��]�"��-:l'͓�i�C�����o���s�5�~O�7S+d�`���0m���I�����s�f�O��<�m +Ӱ�T&�y֠���3J��?��J�_v?�^�����Vn��S�'�F�Ҵǒۜ�{���Q�e�5<���௬)���6fuZ7L���D��%���cU�o�.��{�x�r���y������c:V�9����������[�5�ŝ����*�� �jN���q�HJ#W���\'"��i�ȥjB#������9��T�m9��]R �v}���r���֍{���y�Z��d7����h�Nr9��o�iٓk��m'��駦��0�>Z��w�J���Tc�u�u'����k��p���B����#�!ʋZU� ��\^��Cp'��H~�J{�R�m�\��7���b���4}�s����pa4��`/�~��ݤ��w>}�i[����M�5���ظT��FQ��zes$j���Z��.]m��U% +NJ� S�� ~�J���˟VI,���̝�C���y)������[P�^<������)���)��M�����A�����C�[����ʨ�lV���[kOw��}�kW;e�Z��zR�[.YM���}_OK�z�O��R<�b��a�� E�ڛ��覲^�jxx_s��u�yJP��; ��QVg���Y���|~���'�<{�t����Z���$�V�셮�[6�C,��Z�,>�bn��~����|@KD�D��cEOrR?Tr t�g#^�F�Ϫ���7lZ��]�&��r��� +�gvjt�1���ɍ@�>�R�������9aX����Q��EWv*��v�����W��0�H�Ӭ��yJ�m%̰^��-u��ǝT%M�9�<��]�j|r6�b�A:��uW%�c���h\�i����f�6_֔�^�|��Y��O�4���b�o斯����FN�E%�;�|��OfX����P�q�(����07�/���Ki}�n��ju0q��ja�BWg�Y�`�p.�'`���ŀ�w��Pi�f���&S��\kr���B>�MW9���YuF(T/l2�]ݦ�h���� �߶��pp�^0q־�o�����:J�4�C�z�]5�k�im��r6���@�I n%ЊPh�l�ҵ�G<�\2�w5Gp�R�͒R�e��[�vU��C%�ZEH��6��qAJʠ e� �� ����x* ��/�U���/@84�̠�������6*����e��� ���� +�B�R�)���)Q��cx/���H�WAҕ=�ԁ0�z�/�dĽ�?���ӳ� DIO�a^OF +�����7���PP�����I6~1�I + &,@�� +P&uh���(���r%�X=X��@D+�l*;�����A\������E"n�D\~wF4 'f�j����������b3��Ⱥ����@����µ�E�Vc��lLj�+ ]�������E�m|����_��Q�����!txf>��PH���� ;�m'�>�Ls#�rݝ�;��>�L:FXY�������a�`e�Y�����86����F��S"�s3`�05I�6iÓ���w0�#'@,���c2��,������$θ(�r�z�/_����g���6��wmq���i�$�fh��o����L�P\��'?�j}��/skXrM�����������{����ſ�;W���5����b]�O��s�~6�*�P���P��f\Yv*�]�h])����;�/���\����X�z���['4�!�}]��m���3rDFJ��w#��UcLV�u +����9{lgy/O������g�� �?��~��w�ʠ��֥t�q�S�$��v'ۛ��WNHf�r�F���o�`e��P�]6��Bm�c{k��&x�{HfГz���+���=trw4�׃��ڿ����)�˵��ϫGK���0_���빛��~z��S�?f�Ѻ28NTvq`n�>�M�^d��]��uU���?��3�2����U@g�o~�Mx���m�x�!Z����N��[�8��k�/&h�\�Պ���~�F'��_���' ��5�؋XW������h�y���N] 殍�����ݍ���א J���҅v��U�Lm�}���x�C�{����0�}����)89cM��B�t�} +M�xy���s�����+��6��I3���Q����T����9�M���e��e@j��?��2���o�P�ڂ��c��I��/���L���6u��/\ʚl�P�.�s����)e>y6�� ł�]?5�p]}]��#���r�j���n�s�ӆϵ^j�Ge��f�j��^��is�<+5Fyv;����['��S�����~�>�X�%�f�R��z��Tt����y���M�ߒ��@�.����9�j~�Tm�^�MI|�ju~���\˪��%��.�v�0)U����5�z@a�>�O%�4����g�d�Y���8}U|k�s�8��������R�$�����q�0:���6r��<S��B&��l^P��NM�T�����z�I�W����Hutg�{��ɮ��T��M���#�T����9�b�*�e��n�~�ہ{������/OgZv���u,���j<|a����~kk9#w��qS�q,�^:%�7aZB֧�+�|��=1�ZL�Bu!,�s]�oA:�W;���K���ls�����а�Ka��@�(����I0:�YyA�"Ȥ=[i8� ]�r���j�Lr�����>)Ɗ�Z���>�n_��zHhg���'��� +Z\^���߹h�'�h���|�_���0�̷�����(5^���B9 �vN�Ѓ,E�]�^�v�T�=���AcEs;��)��f�9�]mV�U6ٙ��˩ +8�Ǔ���D��w�w��G�T��"���<~s]8��3ꚥ��K�ƚ�w�Cg;���3ک>�Q��?����S���Q������q��F�9-1�X�9)Ky��m�;v����+q�Rd�(��I�>�^�� �1�զ.���'v��>z�c�R-�XQ4�Y��36��Yn5x��ɺ�d�Έ9��!KRN�7���C�W\����q�&�� o{���?�2�'٪V�+��ZO��xN�-�\|;�s�_���1�����ƒ-/�PU�>�������q^��t!�&A��Ly���ԯ�3.^����hC~�%��ҕ_$��d��ɂcb?Z���8c����Sq#��S���U.o+B�A�W����l���g�v��aZ�g6��2�eaY��2��X�d�~M^[���7�%^Jcyl�'5�ݟ��B�7�R��ǀӉ˳����$9���������l�����i�)Y7�^q��\�+�W��v�)�M�4�;-E>�=��7N&��I��G �>��k���ԙ���N���u�4��HG�.�ٙ=zKt<~�@~���X`8�`U�]��x�O��4��j��~����<\�k*����g�W}$.R��+�θK�0�˛V�q0� +��d��HW���\���A͎i���'���O#;8s�!M/z?��<�ߐ0n������(>g�ej�T�;����{��v��M��Ԛ��X�����"�9G^�+f��o���]dN��w��yç{�|8B��gp\�3}wq��s�4�+��U7P��+��T�"%�~�Y��]M���?xv+W���Y)����clEZ6��5d5XO:���BD�XY`>������\�2L��.��4!�㖦ѻ�����7�p�c@?��ʁ�+�ƻ�v��H�4@��4�T�#w.�n5�������ĒŽ�'��W��=��y��}��L�#Ƕ���^���7����A-�r��9��h-+�{~�4:�����D�� �*�WܭC�Ӣ��v�X�tq�l jԱ5��ɖ�>�����;�:����?�����nl�b�e���s�N�We����E˶��I[>qY��x%�σR�t�A����Ԏ���W?x���=�/Y����\� +�=AZ�E����n��z|���?$Gm6Il�k�V�7x�n*���^�^��pSޟ�y�Վ��5J�� ��f��V�*\�M��t2F^��hZK*�lt�W٘��]��6_m��y7�v?*9��ޚ���i0�$W?��������eծ� ]�����5�vj��n�8ZZ��=��\������Ҍ��������2� +~،�Ne3�����[���,��j���#����Ia�IK���M�4����R�b\E;S}�X�*�����j��%+��ШD��SQ������`7�q�;�� �a ��'V��q1Z���0�o��$# �(u_R�����A6Z���O�0�皧I���އ�F!�`� mN����V M�T���ҭ��;T�A�ÔQ�`����(�\�Z2�nid#��`��[�]S�@��(��)��n�� ����ԕ�?����lM����ؼݸ\��F���z�o����+T��٨�ZjPI�$SKbɦ��)k^qGq�:�r�9u��e!�ż��oy����2���~�7h�]����yU�U�G�7�Ld76�:����s2�d�xZ�m�&�����l)���ꫂh���'T)}eJE��l�U?�7�|������f#l�e[#��J�@u%����r� :QFO�|Fwʍ̠��?�߲��,.�Kx<��%������Ქ�Un�A.�&�v'7���L\��y����k/���}�䤱�fUFHS�Y)��|�u53�n��qS���6\�T��#\��]F!�:~q~9D��/.���5�<\~wH�l�_3���`3(�T �c��Y�Ō2���G�x���E]y���9�l�ꬾ��yn��#+=�_��Q�xd\�����L>x�$ILd�ETZ�HҮ�<���sJS�w��f�^@���`�i��b�4�Ƌ���Qi�ꎯW3�<<���o?9it�fۙ�(��I:m���o�Z�g���"��s8?bx,8LD��v$$��j*�gw�^�lC��/����l�zM�O�Z�B�m�)���^����@� l�G���(�A���A�S�TZY$�{�M>F�M>�B���3� 6��3��ɇƦmB� ���|ƹ�%�e��X� Bx����� �e���2�"�)�K�ɷ�L�K���*�Դ����|>~R� !����k%���!�,�(B������#�Gtz%��)��)�?�ϓ���{�2�/b��g��V���������t����P����x3��$��s�����y�Rڒ)ѫ~�eE�!�S��d�Zgt��B@J��z ��l?���iL��ŋ���u�������o�W`P^���ЅB�lB��T��������d �� +u�b������η 8 %��#0$H9���-���r��?�hl����6���r���ۙ�k��s +�gM�r���e~@�(s�"�������!��j���yd4@w�@1h͇w��׃s��� lcO��:N�6�����M>��+Q$�մ2��,i=Z-b|��r��n|���������/��^j���i��P�|����e���(���3�ƫ���$>�6�r5�]d��N�Ŋ?}>8����#�qУ��{�{�>o���Vk\�oj�s�w�K{{��{��'��/����������|�<uM������]�ߩ�O�5�ז;�;E����{?�;q��p�9��mh���J�I@V�������T��9!�/��>��� �Şd��n{b�O��}���������h�����&��j���k��>�&�9{��Y� + �d������� 8&�k�6���tG��-�x����Y����m�=y\j�/�1t;Huz��.qJim�����i��ȼ�Ǖ�|lu��4����7W������Pj������{! p��~W +���5��e��������>,#� s��~Q�8^DZW��G'��|��o�8y �s k��wl8���ҌY�N�+��4�}��FL�Fg�k�z�5����yk�L�i�̅�/`U�P��NW�� �X��v�0yu6� }�.��uN�ܹ��������w2�؋����z��{ed��q)�����`�Ñ���gd�0�Z��-�����7�8��,xc��f뛢�T���g��,�6��"TXm�t�F��s7����0�Խ�}��N=��ۢu�[S�.4n��g����u�G� ^�6 ���-��mnvkm�A.�ʬ�U֞��Q�K�*I�d�M7�69�}#>�]����Ř�ĸI��b�zU��,]x ���6Ay�+�uھ~XT�#��;s��l����H�MP�֨�������)�ȗ*�8�H�wF�N�����}#��4��u��5Y�Vֶ]\YW���b���CB���?�m���[m��A����纘��e}�@��HNt����\2�ҡm���D��ט�W6W����f+2���M��I`=���E�X��Y��nU�i���>Y�8�//�����rv�O�����e!�j���h>i(4���A6��K}�x��{���<�3/`I�e|�7�,E���6�T��N����N�C��z���p��6���/}I�-K����`�xJ]iш�ۢ��Ʌ���E�8�E�����)�9� JYX��M�>ڝ^��'Pc�z"kdp�p�jW7�h�#�>�~JZ�,u6@���a�I�|Y\��P]M[��X�=�[���r�(>���y/�F�c4_��d�����\��F��^����N�{k�����f������::�i-��b�������}�F��aw{~͓��� +���s�!զk¹.D�%���WQ���c����Y(�{�o��� ʚ�}��e��L��.��v1��s�0ӎ�gv�g�B6���Z���YF_e$M\��A��r��3{>χrf�Y����G�'����<g�W�,��[��&�7-r��%������P��v��3�3��˚I����7�)���\fR�.8{2-�ڴ�b��%7��rk3?c���}�����o�>���x�^��b����{ϒ���׳����w{�����I\�S��z"����; �R@OyK��Z�)��pR�p�HH��<S�,�dZt���b㕱����P��g&?�Of"���$�l�_d� s��}�\�Z�n�SK]�{f��Y��GO轶gS'w�K� ���*�#5��]^�r��-���c����������ߞ�s��';K� �q8h�?�7�|ԛ�h$���,�귨qcGg� Y'{K�f�~���8�.���{4{=�X/gl��a)ZM�%�'�W�@ +�s*}��b�1ۏG��M��s&K�VS��l&�����Kox�1�1d����;^;�aā����ýp�F����[��_�{���bׅFG'�l\�{es��>M��V����J�dUw�ƥH�7�G0����:Gߏ]�%��l�`̴R�z~�б>��?z�g���_�/:�AZds}�3۽s���aG�3�*�?5��`�y�A�<����"ЧC�)�R��a�W��u�WՈפ ��V�c��G����E�"�StT:)$!���B��������׳����|����453?#��6���g�d^�IA��mR���4�$������=�[��ώ+[.?(^;%���>�gF;��4�b�~��m�������lU�������=��3T2n;ݿ^�M{�i�:�')辺����˸���=�Ĺ���zD^H��9��,�m#?�[�v�]���%��sJ�[��[�5��f�����(�1kSԴ��I9S��PQI+�mn�}����{5:ze3�̯���/�[W��l�r̞�t���:M5y���.��W��H�������ǭ���9˩����:��M�c��ӄ�)zW��D�5�����#�����._½�y2SӰ/�_x�w�;�]���v�؝���M�g��#i +Z1x9���/�����R� .o�P�9�ߟ��I�Zg��I���pL;�+4���(�,H���!��=o"����l���� +ک�>���:��/X�Q��8�n�mCj��R6�e��a�M�����{����DmBî4em��0<���N]� �=K�"��uTZ��T&�wI�P��L�=��i�5=��W/���Z��8���th�.m�I'�W�\s�5�������.����͝�f�K�_�5g�;�Vp�L�����"�(a�h��%[��U�J}��������*EB� ����u! Z��n������VJ�_�/+�P_VK��"ޥu�xauF r�䠿X��{����bѧ��T��Z���vP�y?�B6�S~Ў��]*,8�p"��y���}"�j]Ĺ������0�����t�⍹���!z��ԟ���aWC˅gu����`����X���fy0���*1�}�fU���9��Oy���몟K2`�1)BV��N� +�[0�v_��欳�4�uܫĖY�n#��wp��m�JT�^������mת�V�P)���<ګr�^�K�j���|�(�H<.N�Gq��H� �r�VX��b����i6w���!��%�8W�c +��pȆx�[XuZ~) �5��DE�Tv^��-p�n���r�]�J��.>+/�H,��¢���i��;o���3K����큡^��,��������(��b4����/�k�7�� ��R1��T�z� %�Gn�+�oT���@?�r���� � ŗ���)l�wv����#��J>��Hp٢�O���rY�����&f���N]�W�{�ސf���~��'5�'�<��m\H1���f�m�l徛̈́\fc��6�2����k%���+�&C�^`�P'��! ��ϮZ����e�5~Pt�u�H��.�f������1C��$�5��6���Z�;ku �^K��o¶��~1���U���-A�\�?(��!��d��K���\!�*��z%oOGy,�.�����j��D/�O"�vE���Je�a���Ƈ�X<�`����O�v~��`�X�;Ѷ��d�k�M�^�7��`�H �'��$ �R��@ ��2�g��ş�X�S�a�t��ũȁ+�R�M�Ҙ�ŀx�NKq��M@���Ɯ��{��1�X�)^��O�r0x1�������n��y��_r�d��e�@-�?��şæz.���~���Y�^��8�v��l��bq��T����9����&���M�މ��s��qzgj�g^�^[�T���H�'���ə_��曡ˣ�@z��� �']�����gB�6�ypP�}�7g:ݩ.��h��o�yX�f�ة������H�5گS�D��"L�J���i��8���V ��1M2��<|�X��dx�I2�QI 3h�qHv��|2��I��� +�����cƭa�ϖf����{�d��\��E��>��M%4@�asq��τ|���G<����w����������#�;�y�L`c�$�o%��y�d��-�T�O�U��[��+o��QO����d�v�ثR��O}M��F� ����ϝҭ��[�{/P���/�\�0r��E�I�Q��w�h� (�IbW�fGI�H��$$p`� l�q�{�GLJ{y ���9R���Y��VnWy�:����ޑ��p�o���ܸbF�e<� +�j���}-��i)��M�����u�D��c���bÕ���}�o^�ΐ�`U�D&�s+�[�G��5���.����/��ݜ��l�Ed'����UM���Қ���2X�a[�y��N/�5?��t�f�^>J���vJeS��}��=�������A�,@9f@�]�x���D�Ο�2˙���ߘ��Y�CqUr�`v헖�w밇�$._OV�{��9B�zp��)W?�^�qj��w�]����W��\R%\�`q�ZXq����D;�̋�ܗ�/�Ra��D��4���d�RWԱ��l�?�|;���VRJ<Ϛ[���wƇ�K&����������ߛ:���c恹���>m'Z��C}Lcew������F>oPbK���%V��_��!:¿H�i����c��$YQ*&�Ͷ I��`3���s9���+G�����ґߕ:u�$h��&����Z;o�q\�Ó��NO{�9}lT���2�.��\J�{������ҟ��'���>�#3��f�@���/a�h�#P���wי��{�������u�p(:"�ݝa�� �y�}�6���5u�]�#[8��< W�������ͫ�kh����7��gn�B��t&��H��A���F��\�X�\�b�\�5���HP�h��t��r�ܶ���ˑv�B/:z��=��G�_w}��n�B�9���W�1G.��_hS�7��2x|6��3��K����N�}�N��0Yʏ�%�{h-�Z��a�9:�[0~�����d�� ���I���$7����������9w7��[����a�T��ʷ3�6���b���z�f��##���H\+��3�'PU���"��b���y1�9�"և�U��b6lV�۰I>æ�L��'����]N�� V�m+��e|,�O�qX��;ϒ�s�X;4o�d�}g�XeF���$ͩ����v�Q���Ѝ�6��ʫ���,�04n0L�M�Q�O�ۄ���P�a��mk����O����şc� +D���r^���a�c���2�oxv�.>�O�WYsyZ��ç�(`Ќ���d5T�&�ζ�ccό��%��T� o/j4o5k@��>�-�5�m?U��ETd�6z[����bc�ۮЧ�b��U��4���E��^�?���#��ı�;�����n��x�4V����H���,���O������d��}sTE��W���i!R��\�>�^M��8�jw��D�C9�ߐRlU�]��دe��z(E�NT} �d��sw�8.��<���zl˵��g?�u����[3YϢ��2q�����5`��;9=����Lk�9��}Fq9��NU`�zOnwg�Q�mdO��?��z,�^A��ݎh�ٕԀ��4R�H��ϧ�i����T���� ��Or�݄���e���>H���G���џv��є`�ah�=�oy#;l��b?��5�Q�-uCt��ʩ\����R�g@4"~["f�Y^ �"���@�/�3���b��=~U��wPl<�'�pw���t�s\X:�g?]���К�DڙTf�6���9N}��/�C�ྍ����e5��4�^��SJ��rr-w�I͌g����(�~�.�L��\��#��k���L�+�95�]�!���hp�E�~x����������oZG����}l;��}pNW�/�;���_���7$N\طS8�Ъ��g����J]�[�4�y�8-�ea�]�]��y��q�����\�w���Q�=�sȉg\G�ܶ���~�`o��7S���&�utX8j��*�L-���K��53�My�r���k)в�˻��cX��8&�մ">E�%�;k�k��wC��m}a +ZSy�)"���K�������#�ꕏl�w ���u�1�˟�_n�5w?���aW�`w�1]�x�����M�ܛ�C<�����7X��I�o}��~|�z�`�F�J�� ˊ�u/u?��,�pu@�ق�sy�QYϩ��*"�L=U/���R깭V��8���dO�������%������a?��7S+�:9X�>Lu~ZΖFh���j�DߥQ�m�a��.�j��O�<_x�����1���Q�+4�v�\a:l-�R�&��m�YQ,�ɥ��P��ZU�sʨ�ljv$MBrٴ�dlln��f+��]���M���VÆ;o���ɶ2�d�2�a��U�Rwϲ�� 8+���+�����^�zn��TX��� pTq��i��(����� �5��ގwQ[j��v.B�v�l�j��{{KX�?��#<m�[t�d��na�/g���|�÷��4,�9�\�M�A2����~7kN|w��_ԟ̣)}�!`T�h�A�}ڭ6 �m���<f-ul�q��|�K-�U��j���+���<�>h,�/��Gwe�����m-�b��r��>~{�}a�Q�u^}�\yƵ:�� +Z���3����Ȩ�dZ�)֯G$��f1*���Qo�[U�U�8���i<w�FHaac�,@?��>��F{"�noy�G��^E��/6�?����0�b�z��ͥ�@���W��jH�]�������7��57�I��?(�ӫ:!����\�����o �{��v�i��q���囍Y���o�֙*h_Wc"�q�������2Wk]]ӯ[�{?��q�_��Ά�1J�f���+�2��X-K�&�ED�{�"�̔R��rT �C��f��FA��u� ���� o�˘��!V�j.� ?h �?*U1ȓ�CSP*Jx_��$���'\.�l�ln�������J�����r���l�b-��>U��K��wN/��<3�6�=U���ġ�U�s/��V�$�\�ٽ����Ȥ\��+5�OT|��lѼn�����i�s�_V�I� ��������)e�j����>[�8k�t���I�Ko����c+2����}����k��)�_#�GS��?�`��擁$��@���ºP�b���r��$���3�=��lo��=S�����W��hߟ�hE1vh��hz=�Nvcc=jE��?�y��S#Rk�r��>Zͩ�TjB��Up�)X����|��N�v�:�=�1�Ni ����v�94�k��D� +O��3c5:H��\�P|e�E/s�͎�IZy�Iqb>�`Nᅩ��ݗ��L���Q7��i��D1�%�Y�/UyNK�`��Y���$�L��I(�g�B��O#��b��:`3�P��!�5�n�-��/�$�ض^�X�&�'�����* ��8�e��_�M}���ָ�T��t��5ZLc���I�U�m��a|��d{����a�!�ܧ���N�1��J�[iA�M�I�}3 ��7���pآ���߉�D�E\f �� 0�j��?���;6���e�@�{�l��<'��'K���Rℍ�8�p.`}��8���"�U��I#��j`+ Q[���8!Ko�<G.��"l��_(��|��%�x�e ��W�NoH�����iVc�$8���֘�5� 6z�?����89a �M�]@4��3�<�8��4������ +oR������.��E 1o� �Ex�d�!�ƟN�?�a#N��V^�SQ���8��W�v�^@�}��X�2X@�18�qʖu���;���F�R�:�U\��O�A�g?��g��O蒿%`P��'��z�A����O<��}9�$"��B�QGz�iy��S�v�ث�!�?T� +]��]��F��^?��;۞�.���<M�W��a�i���r������,cw�c��'�n�"��-38��$S�IFm�I�l]�Z`��Q_�$�n�(R������I��@ |#e���� ����t馯rME���Yx��Y5��V�$=T�T|�;u�n��5�{����h<�r.���vd�����w�����H㝻&0�� \��X�|�a� ���I��u�n��EGx6|����Y'�U�7�݃ ��}>�䡂��͞X�-��K;��Iܗ����U�Z�F��[�wzf�����ic�9ء�:S.>d�V�$�� 8��3�ϯ����p�_!\�����vD=��>^�F�3�P�eR�З��D�\�O������k@��l���\�����/ՎbӇ��~��z2\�dz�oU5H6��yo�5���o|���1.n |� RE�L�o�v'���>�*��`X�CXR r�h+���9?v�x��w���������B|?��ͻ��O����>�Ҳ�m�W_��6�u�m���C���j)�_+6���4�ێ��˟�_x��}��-A�7y�!�"ӂBBh�7�ο�(��D�,;%������Ny�V��f��������������w���s���Zz�t�ky۹)���'i)Z��P�u~���\{��yy��\����%A����Iܣv��x����.7T�[<S�����u�J~Sw�5�Y��]�U�=˫��nwk.���r�{l7�^������1/ߓ����E���:3�t��Ô J����_._��|�9�%A�;�6D�hP?�������q~i,3�g:G��Y�jw��ΛQ?���W�է(a�zOԖr;m-����{�]�|q�Zu{=����|�$���X>���44���j��af:�:�z�;F-�:F7ë�ų�j�?����y^���<��d�k��}~}<�a�q���p��d������P���EK�q��i�Y'Wg�iO_�<3�Ѹ;a���ʅ�f� ���'�5�v�2:ιx�����9��>�b�Jl�z�z_N_z����OQz�=� v�M��uti��ge/����S��[����hiK���>z`���{6Y2S�=�',��L>��caicO����QڨdQc}p��a���`��A��_���}�̾UFw}��9�-^:|����O�g6|��a�lޛ�����]Dx?�=��lI�N����:z�F���=�4�MdA��V(1��ʝkK��.=4W<��~��o�}*]k�>rU?>��|�PS���U$#�*T~���~�����HPE +���p�u�α������2\?Ge�I�=��U1i1@e���tQ\�'`�|K#84�� Ur[T�=�°tk��o��(��������(O�T�&=q�?*��R�-]�����x�(�h����ݗ͗�_b� =o��d�����ds?;Cw�@��\ �zg�9+�2́:}'�5�Č;�+���SO7]O��!>k���}��}����'{[����n~_)x�L��Нtw����x�l��ꈵ��~u'���V������//�����C۟�3��yV�\�|m��Ã�<��μ�3�4��҄��|�أv�� J�ڣ�����⽌ڽ�Ho���X�q�ؓY�"���MS�C���D��0�ˈ@�N ��L�����_k_��������l�������{�Ϸ�C�t��2\e���������Ą/���~G����/m=���c�م��硚���^���J)�(��b�.��*���&[��5�ªK?f�N���i~%�>�L6]�䬻��~q���U�r������ͤ�1�$��sq�Xa{��� ��X����Z{z��́u���z۩��zJ�{W�����|F2�8'��KYx1/��<��?�<7)-���;q��.��>f�˲���r��n�Mn��a�r�8�;��|�}gw�G֚"s%Fm}�zo6�����/WGz+"���a��C�h�����W�K�T)�t �j�w�!BO�.��l��y���pbk�v��Ǭ��W��2�l)"l����Y����?�: +�����W�SfZ��FM�\Hޘv+�s����U�|�VNoS�� +ӎ�.�}���+�Y_�{ 'SO$��]�+�w���`��hyN´z���ʞ)Ca�g��f� }�@�4�|�6>�!}cnS["3�˫_���v<�zjoڝ���:�����lѯ�LtE�����Y���s��#BV�m���B� ҵ�P�.WY��7_��ȟΑV0�k�UƯ�$}�E����� ��ɐ�?�29��}�]vA�"������g����vwQ=۵ɬe���t�"o�)L�c��><+{'m���ը!7KϮ����r�O��r�y��ڃ:��G���w�B p,J?�v�z���l�dcD�K�d��^ǏB{}{k�M����+�>�9�Po��3��A�x��Sm6c©n�_+Yo���ݚ�%TH��24�n�:�y�93��/[��C^�zY>1�:��R+��2D&�v���f�@��Aۢk[4X� +J+�υW?gR?��E�P�:_V��k���&O��U���^Vm:G�pt�p���Rt���u�((��,�:��U;��²#&�2�i��m˦ޫҖL7�3��JwB�d��N�e[G�\m]��+����?�y��r��}��w��k�o�yc|�W?hclO��[���67���,wk1C�ɸ_���=,�j&����]����L�MB����j� ?7�#y�Ј�̙����h[a�]��.�r~�5�n��x�D��:YJ�*�V-��smiT�ڲ��5�i�k�wX�k��]�奛ufI�i���a����s�j���+?X��תީ��i��"&�J��ׇ����)ۼ#���jf㙧���i����K�N�w;'�Z��lT�s���V��k\��P���L:b��r��.˽������'�i8�%t�_���bP9Np>�s�U�T��mj��9�%�Y�֙wuSm U!U�Yã*�NQ�(��^�{�|D��Vk�Rb}J�NX.�`�-�I/61n[x<���8BaBlg��nkZ�/߅��ES��3y^�M�x0��ZCI�v���-�A��jL�fk��k<��e�4z�c땏^�4?�X�/ ,��@+#�S�u���h� �.�P��7r辦dw���ʝ�;+sO>+E]3+mm'+ͧ�]_�e֩)�ؓYG�+��E��D��M3ګ�ֲQ��Pu[�G��3���c��r�*x6�*>��<�T��Z��r����X< 5s��om47�h�3a#7�L�# +Y�H��C�t�eӛ��*�,����3']L�� t�C��n��Z�A=�h���I��/�y�+��\�p|T�*W�LJY��-K�Y���YAk@�AB�oq�X�耛�=Dߺ -A�}+@�c��� !&ӨCL�;$G�)��?��t#�Za*�$�{��wi�P��������U��(Sx���7�0[(ln����h�ʐq*d!��,�� +�h~�>X�yVe�ȀX8�Bli@l���������|�X�����O@,�!�)����Xz�N�/M� ��k]/K��sy�\x�l>��i.GU_h�| 3� + i�!��@�����5��� xP�����m�~_!�]A�̶�3-x�D2��=k�s�Ԫ��Ӥ���P���$��)r�Ɖd��~�X��8�E����.8��5�A�ⵈc��.�����X,��.���O*�%ZD��x\^q�䠘9����?럥v� P������M�\χ8Y��8a$8N��J��˂@]g�kx `@������Q[% `�}���C��:.�n3#{x4�m��+1>�ĺ�/9L��b�g���O�oA��m���uZ�9XBy�)z@�$���d�3qblzq2�O��؝��-N�J�~��,�+ʼn�6]6f�c��֯�H�r�WaU��M�����a��T����@�uH a�k�D�t��^�� Tp4S����m�)���i5V��M+��/��)��� Δ��wwXL�h�GҘ�"�+��l�|�c�ٷ�~X��}vO�7:m���R��<���Ωr��7����s�`m�N���&�,�hX}%P��ğ�Q�?�S+��@W��j�;ǣ(���W��;�A?�}�䅣y�L�h�������~����t{�A���%1���������z�ݼ�L�ϣ�q97�y��`>�_$�b�O2�eد�L�r�k�i��'��"����� &`��T<r��d��w˄��U��$��Ny ��{�����Z((�E��7MK�����G�a9v�<�]lr�A���w�R��/��.7DvI2�Df� ��k��s�?��cv�W?F����;-ҥ�]�>�O��y�s�����<���v��_系{H���`�����T����@���,�hߋ�>Y��t����;�{[u6γ���d��7��� F��I���Ɏ�B� +�#�����Y�^<K�-|����xXM'��z1���c��Ȑ�*=l��~�p��ڷN�u= �X̽���*��3���]�۫�baù�v�>���lQ]�a��8�/ \��X/� ɻ���O��;Oc��n���j�w��鵌�������hmO�-�Rclmt�5wB�Z�k����Ւ���vǶ�p-���K! +���-�����ͮu-M����g��p~Й���Yq�H�9��c��|6w�%����8��?�v�¯�1Q��^�7��٭�d�������YA�5f#�Y�A���l.�ˀ��sn�=�Y��������o�a����D�>�����0�K�6�!27!���r�ю�&�S�f�j5��M,�5�=f�ή�� ��X��^�W?بV�0�~ν��c]�=:����'��t:Z���&ty���&t|��2���1r< �F�(�z��lT$��K?���/�l�����Ћmy-��9��ymKo�c��6�qf��AmA�M��ʝWq�0��u�<7^��.���*B��+̏�f��k���Ψ$=�+"�^�WC�j]��1���Ag`�V�~�g���~�,&_̿�)�Ǜ`W~�COO,����B�� ��n����#7Z˽T�.J���j<���5z��e�t4���%4d�����I��1�ڬ׆�>N�~�;h�{��L�[��4�A��4���}�Օ�M����)�����ѻs���=F��=��Mo�#I�Eҁ���o�����г��(Sj���UY�E��6 +��iT�"_�����������/iQ��uCc6+Zur����z��{Yq�P�c�����ȟ��(�x�앬�e��W�ln�Vd�d0���o>y�;�2%m���ί�<�6k�I�h����Ej��I&#-��zm:����i��:~��꡶\U���NJ���7��~&t��r0���q)]f��4Ң4#I�) �!]� �}�_�� ��'j�<��o���sߜ�]�S�\x�W�«P~�"�����o�Q�:ׇ�~w:��ĪO#���&���?w�7��V��^�8AJ���dͿ4�k��J�~I�g a�x&��&O�+L��H9 +���<j�EH��͵�����n���:+���y�H��S�ҧ)b�r,�D"t_� +C���7�14��[�{[;��g��^8)łz�+(�t�Gě3� +�|H +�t#w��g�viD=��|��.]C�0�·������k��t_����)(����]\j�*s=' C�2y}�7��f�+���SѸ�q��7s��<u���Z��գ��K�8�B��.dB����n��E��cp]�phksh�Hs]w:���Y�2�3l8�A�,�p�eqs��+�� ����J���gFO��V5N�0�G���Y��\��f���ɪr�p�<X�f� +�u������`�<�L-H�U/�s�!���C���EEg���˪55b���`�#Z�`�x����AG����J9������]k�p�������Z�+h�y����r,�i���W7+�)"�Qʙ�,ײU]jBٙ؊^�@�O�.�ڀ���ܸM�zs��6��+���!�\��SU&�o��FH�.�S�0@������/�Kru�*��A�JCuQ����2���� "���_v��w�,�uY/�48+�h,��|�����+��]x�r�d����S��O���e�aZ��і���GM��|���|��&ծ� +5M��z\��A�,�v@,v�4vټ8��U��͊4q_%ڨHIU�r��W�[wY_�>���ũ�l�dž���F�ݻ�s��p�9��S,�;�����g���w�5��"9s���P!l�m���ϯ�ɬd��2���*���qʔ���ь�³���<�g��.�X�-1��Unc�d�_xG�w7M#��ku^�E��MQ�C��z7�d|�=��Aͥ[�ڑ"�B@.�vJ�x#2�q�-`W����Ӗ\�\~��;U[Rl�����U���/��i�����=�9����?YעQ�;�`Y�k�ҵK�r�/��rʧ���"{y&mPbA�pL���6�蔵�M�8����������v!j�u"����8��nb�2oN�C:��ϣҬ�B���� <�A���5r����7��o��3�Ok�(z��Q�8�T��*��[i��������&X��n�J��N����U �|6ڒ~��Ǜ�*�!��+u$l�j��.�Z�]���lu�u9։v\�E�_�G���j-�����uɲUd9�^�И� L݊ a��ˤr ���S�r�c����J:�e��Z���m�ֱ�*I����W�ޠ9��f�Q�ۍ�x��ϞaP���ƌ����e���֫0�*��U�A+�Ӭ[��V�k@y����|Ce�St��� �ƉW��!�غ���&�Lj˘�Lt�f�F{*_�st��S����Z��g�]��3���V�cԬ"KzU� �\>t�r/[�JgeJ���B�T~^�ū`�+=����N+�+�X���,/H�}�&�]��9E��"'���v7{#ˬq��[m�[���3w��Z�m�OΥjfs/��ϧ�o�Bq$N�F�����R0My\hq��g[�'%��<�����1S~�[��4��5�\z3���0�r����z���DBms4�y�����0�Lw�:6��"(Q����sx�}���Z�=�C1���<��9~{�g���%�m�^Y�у�9�PF]��h�COګrp�{�<�HOY�����u��u�g%|5ZR^r�_L�65�kq4���b�e^�?թ@o6sl�[U���3�Q�?Z^�ٛ�1����v�B����7sp�������o�;c�E$��zh�]R�$����U��c��Q"o�>D�;�|�P���D���[�e\�H�`�}��&�w����&(��T�/!u('���C +���[C�z�_�HU�n2�w! +��� +Q�CQj�Qf��Q�QQ�����A!�9�C4^� ��A�zV!Z3�=��1$D[��7��/����.�'v��n�?�i�G�&n�6V�qZ�>Va~���7���<��+�2��tQv�����/T@��1���ޞ1�~���.;#�befwb6�b�Db�Hb��b��bkr��c<����/����E�Y��*]�PΙ#�1�k(uGJ�B&����*M'@jr�Q�>(��{;�\!�-���k�o>Y3^�D�?�f� ����*��kb[��?7s�3-�-A, ��L�X�����%N���w�����{�gq��'q��8�:G���<��xw�]�p���y��� �8>i�b�%��M�8��O�Wnn�e���2�O�Ny�/�Or��s�A��<Nz'j��13ַ��"� �i�O>b|����?�e�X��~��B����Py;�Q��yw1��:�H�m�Qքn/���!?;�����]�C�QrN�a��֝ũ&��P�yo'�{��� :)���ҟ<8�� �)��ĕu��>^feлx�����3�T��o��W~b�j�ǟ������z��y���hl�ãq}��;�"��v�YD��5��$}�K�̭8���8E!/Nv�W�,�l�0�j�4�4`"���fC���͏�e�y<�Q�|ٽ +��驙�kxy�a� +�G�s��M�r�r�ި^l6,���n���ȡ����D��Q�W��@�ޕ�{)�" +��P��?�̼y��;�&� +���WV��C�D,�3�=�� �k��B��d'���J�&�'o^$�+H^�yO^ȵ�dJ��}6[v��"+S���f�u����Vec\,}���t�����[�p��;������e��~�ȑ�-����C�v�nB�_��4AN���am�?��!ϼ/O@'��N� +yZO�k��P2H��-�����ս�����*���Ǽ_?����1�������Ȼ������o���F�v7}=���|����a��d�rAm���<j��l���YiZDkDj��D��l��n�q +�4�g�b��LƟ~k��]:��9�g�}���{�KM��q ���k�^����I��/I�a�/.rEI�G+Ϟ��?���,Z���H]9ٰ��b?�p�d������V�-��/㧜5~yf(g������q��e4z��]�������G&�;-/���W8oӠ|�糨�̖�J6�l�Ũި�C�lu�V�§րe&ׇ,O�����a�k�b��K�1e��>���H�G��d����V^VTR��~7���G�c�s���cT{SQ1Ƀ�Ħ;��e@S�|>f�h�hM��������a�:�8 +������4T-�31��9�N���|�УR�/ W��V�ݍרl������'��u���TՇ���g�=��;�`PK?,넰5�0���F�\%����n7�i:3�Lt}��tw����Y�b�p���t��C�C$�n�d�Ɓ,�f�o.� + �}�tbc���۶7�6�[ݬ��o��V���M)*f����x3ջs�-����̊-�������.��ܺ:f�x�]�~a�� 7Z�zF�3w��:\��ƹ����")��'��J-&��V��&���2h�2{�&��5˫�zq��5#E� �'���SO�_|~�0C�˰8��[�VW�ޡ�E}T�No5/<�N������\&<�Д78g8��3=iۍog�,OW�����|z�WJ˷�1�����n�^�b���y�:Lm \g��2ͪ���8{T\�����x�`��LV��e�e^�Qё�S��A����ifX�h%����Y�X�lq �0����z�7�8���ך�{����47�y��QR�1�R��B*T���P���ˠ�Y�]�3���@�ԗ۩C��E�b� +����a�� &ä�K����d7_9����U2�)3\��d�!�ҧX��������: +���JĽB�z,�'#��EM�WӶ$*l0ҫ� l�݆�=�a�*���/�RN�����e.#N�S�"&Oi���Ku����˫����w�r=u�c�����8B5W ����N������dגxȞ�u���Ū��}����ւ��N��.�|�9��9y��.���@} ���s����$���LӁ��+�E����C��>�*�⽯Ϋ`�T+�u�\B4�}S*iƂ�hkE�Eߐ$�q�����Zљ =����(���s����b㈤X�01���`|-2ɵ����'Y�Ԩ�Wė3�: 7���{����É�����U��X�#��k��ҳ����EY}���2�&�,�*-IoFH��&Ua�w�B�n���S�ڄWl�ֻ 2�V�pzrc4�q���a H3�J3s���`���������}���Ϛ����-�WJt׳)��0�7�`��B�A.�w��1P;XM."$$n.5\��Fh� +2߭\un��m����,^�̘+`�g��m�2%��*,r2�4�))w�,���Pʖ� +���堌wɇk%��W.�:9�rݭT�9�����F�d�*!�8��{���:P��%��O��'�s+{�}pK�yIS����!�ˈ�������G��y�]B�lD���>~�so��C�;=�����ݑ+:��xLʒ�n��9���RP�h�8�T©:�Vkl'�C�.���hX���f�̐`�y+�-�4d:�Z5���6&�7�v�����{�����A���A�F�A@��l��>��y��/6�32���ސK�*��<gH�ߢr��2j��-%���yZ�\�8�3l�*�{+���a4_fij� U��:Y]S��Qc�(�K�Bkg������&��8�����!����&����R�6��jڢ��]g� j��Q���.v��oQ��oYyY�ls�8�f�?k/{fZ�'Lέ�_oR2�E� �%�}z���SQp�0�\��;ԝ�X�: �����m[�I|ϙ E���.^��YΕ���� �|�tb���ʸ\фa��`�i�F�Ee}x��m�z���;�)�|WTEn��v3�>T��qh�V:��b>=�����;��4�!�Z�\!�.�A�+[��� ��6�:��Z�lf���w�/����M�ZA�uMr����oE�6�i���͉}�}a��ٌ� ��/Y7�!~���V뉡6�GG�^G /���9'�,���Y����鮁GЭr�uG��{����os ֺ䇽���6-;��-�>�-[Y#-���_B�a����S�6};�m��>�0�/�ZU@ޓ�7���-q'�(�mO~@$���,�^���zCi�\��-��nҭ���w\���f�|�֕�-x�\��cTh<���A���Az|�"��~�p�}r����2�\���P��\��ֺ�2�#��WQ�esIL�~��w����c��i��/Vm�T��n*�n�5��B��f�a\�1� ��Z#`l���mgu��9�挘���[����������KUy;A��LAU���<d,�5��R�x�3:`�4�ٯ_un��r�VY�q�`�r��v��۽�|y?�緹Em�2���z�Z)���q�QU)��*>_�mc#�5!�|<ٛ�iߥK�o��%gXJ0~���N�X��R�<Z�5�eԆ���)ݪ�#���"Z�6?R�*�{9<��;Rȱ����gMr%�jrgj���ӥe��2*>ZxT��]�����d +A����.d�+[��U+�/Q����<�f�� XPx +>(�9p��pv!qp���/?�w��i�Ռf hCP�A��C��H�|�p��,2#��s�>vMʈ�Ze\�mQv +����s��έ�`�S;�i�z}��;�u��P��f��m%s\V�����T�p�IK�1�/�nM:�\�T���[��Ք��$q +}���R��^jhc�l�[�ub�W%2K�w笰�f�A�������lT`�.3++�7��i�~�q��Խ��d\i�r���S�K���_�r%�@n��r]ȽPOYp��)����?zZ8ID��H�������\߀{5}4"dt�6�E �i~&�#�U��3�:�^PV����t�h����V;X���*R0z�0��l�lc�l�zX")'��^�����D�� �)�їP�%H��^��r'��A�4\�84���Z��ɶHI�y�8���CLM�t�J�E���� +��n���H������B�8�pcY�ԓ�.�?" P�>����C�s���*������J0R��g{"7 (��0��f�9�F�$����~�B�[Py��Փ-$�[�Ŗ��]w�>˥�ݛ'������ �S ��O��id7K�(Z����>dp7�r�?�dd��[����"B����j� y�V���$Y�r�P��2w����Sf�$aZ`ʰ���~����J(ZH��m))I�\��%i����� +-�7�!y���(��~��=���t��C������X���i����RNߎ��KX�������m +���9!����Ǥ�.����^�ߣ��ݹ�/�T�\k�-�����xS���V���H^k�N^n$��KIj(&�I�0-��a +���O�u�i' /G}��-���f�{T�wnߛċVo�g/���7%^�nU/y_�W�t9�=�Ҏ���"p�3���N�"F?�ɫ����]���u����f���\�i�B&=���(I|�^�&~N�=�Չ� +r[w���V���'u�r$����|aq����)�� ][ۣ_���~<З��ૼϏ +�N|ݭ횞��ju�hi~�[�%4�s�נ�ی���J�QN��A�46�����{�<b �k����N)[>�ѮvI��[o��e�C��i{^��;Io����������O�{YwL���sj9DA}�ߴŸ�T{����}ؤ�� %���&oQN?�6�qp8i����~�O�˥[7����T�q?�n��n9���)n��S}�*^;kK����=G�� ,�/X_�4�,�;o��`�� �Ҭ؋��T�P����A_�?�ߘp�� '� ��������H�ֿ�>��]�T�ԭf��~�9(����f+4cl�D�:/�4���� ���`X������~t"e���*�p�>g��d9Ӷs�M.iB���l�}������L ���]]�_���=m�&S��At=�q��X����n:�u��Y;�X��--���5�ŋT�Þ�_NO��0���u�,W��^��o����f�9&�mtPbH�j?�h�?x#�$�R�<� ��^H����ܶ��I/b�<3�Z���t�k�p�p��J2klέy~c�Pv9�ya浢z�'��bY�4A�I?���;��I�O�����Hpv���~�����ͻ\��L��r��X�]o�u��<*o{T���K 1+���E��4��������Ȓs;�D_Qv�& ��W��e֪f�s��G���9���`�]����J�泫4\��=o�;�9i����)��u� ,�w\+w����&�n�z%Zâ�1f�ӓ`r�4��O�k�D�k�e�������ﺿ$��t.^5��7ŘY=GV'cKY/E������y���m���QiV��]�\���飷+9W�m_*Z�{S�,�^���X���ukۗjirT�k/Cm�����m�w�J���P3t�h���(hp�������e�49n����0��"#�JSĠ��`G�7��a��c�A�.ٍt�7��akڶis� �%�������no��^��g�y��ڵ1�j��T�TT,��(~2�rIM�i����x�L9�?�䜷Ls����ͬ���R�˫��f:uhN]')�8��j��g`��`��N���xY��b:+�W�1bԻ1�k�G^�̝� C��4�W��b�</�L���^���w9wa��{m���r�,��X)[�������6?4��%~i��1�K�Ģ��joc]�ԓ�Ǘw8�d���M�^������Z�Ϻ��n&�� #�W��*ԥ#�a�ٓA��H�U�Y���y��SF���:o�RzU�-�mrg�����Y�4��Yl|^�~9��T�6#n��dd/F�q���n�=]hgl�]���qn��i��|z�F�{M f���-^Q9����/9q5��b5�4�ۻ�a��v���l{���Ub]鉲h��1��=2�;]`�ܼ�����SM7�ܳh�^7��5�82�7b�_V��wB���,hGS��|��KS�b�cL$������ +r��jRɓ;b��aA��D)�o���r�U��t��,:������b�����������Y��MIrt��j4}�SVb�� +8��aҤ��B�)µF��܁�K�b��K����0��*��GJ6>��B1w��Y0#� +���,���>��e�B9���Y�y L2{Yjy�De�tv?8S���Q��&�I�I Y/I �3�����kT����B*�����x6B[Cc)�ËX���z���}�ʳ�H��X��mzz��1�������,���C�I��[���Cp0$��ٓe:HS�Y�I����%)��e�MԤ���������Bp[��Ꝟ<�_���gWȲ0rƬ�����s�<S������`�`�[Rw�]7�����"3V�:=5�Ͷl���.Kv��1�9���u���$�ō&��NVX�,g�n�<Ng\�'f���sȤ�����e=z^�Ys��'�� m�v�uC�j�{!�ot�O=9w��m����z8�� `��Պy��C��/:�Ay4�%����Y����D?T�>��G>f�k��m=P�헑����ҙ��uy �_B��/�/�����jL�� ��|g�7Ț%�\ϩ�.�(�F�yjk�cM�L`@��gGJ�m��[��,�إ2���D�Y��� �� �۱��h�v���]����&Q������r��snp掕�̾S�P��Y�����f�ؠ��a�y^�F���}���1�v���{�yHا#,�))s��5�����!z]��]���ܱ�]�]��K��C���EH �^����pv�� ���tl �.�-e����s�� +)�b�d�_fF��dN=���ڨ]�6��Au�lobsݜ��, ��8~��ޙzCl���|��a���U�"c�,#��i��ۇ���HC��"u�Wbv64��f�����vs�t['��k���;~�N�>�:5��vS��p����->�q:d�gN �8���h�� T��0�o0�����%Zn���(�!Ժl�a `��o`pxLG24'�/�8���CV�������>(��n�v���*͛B�n�4�n�Z/�1���0���n��_&�n)�5Os~w8�v�\ �9�65��FW��w��&��j��~d�ye&v��A���L��.��=l�6��[�b9����Zp��l��6���5|��?5�p7�Oxt[�.�W��V���� ��羖 �Z^�B�/��r* -����iS����ӦRZ�y>>wz���u�֓�����S9M:�rc��F��#^8Q}ڟm�l�~��@�ͦr�&��v�މ�,դj��M���zCy� 3n�[ݑTnU��r���~���`����/F��Tu���b�m�p Uy��-*׳w��{4����-�;��s�+ۘ�* L�ˇ�hP�/�Xn+�M�Re/%{7x��T�[�N d���'��瘰@��t2(�����y:���`f�A�-�����\RV�� +f�Rb��X2�s����C���{h]�Gmh&��H�j���J����?���{��Y o�3�=N�/A\�@!_���R�-�-��+�����C7�5���ޚe3Fz��5��u�ٳ�r�6xU~dGuժa��?'&)o�F�'�\����,�U�;\nU�m�yO9�������kQʇ������ Oʹ���=� ��S����9e���6RV�Il�%r.��P��h ��"��-V~�t#t���C��oNY�9\@�W�^��o%,�Ɨ6B��<��~}8(�����BZͭ�l�x5z<�+��2��^`�1���I9_����8��$#��R�9)�5�Ԥ,���X����� �g@���_����K-�,3ҘNg�}�`ySH�Hr;�E�8/_��_x�pq��D{�Ҋ�1b@�y@��`8��c �r�P}��hT)h<���I)�a��`�}�0-�_gR�C��3����������h�}Ng��o�%gR�W��m�u�6)�a���ვ*�el@��������4L�7pX��U����o�{�;=o�^�_��OK��oB�~8J���}�(����|�5���F�Ar�������U�!�A�r4+�2q��MDܕ�mOټj��}*ݷ�*���QN���o=�ҷ���m�-�~����n�kD�w�`���-\�����@B`�[������oez�����Z���<���<�PN�J' UbR�SQ�+I�z�2>' S̤X��+�$,,��+�����ʿF�:��ť�����;�:��U�����^�́i��JJ�'D% y��E�Oc�^�4L-�3�g �r�J�+��n[^I�͔�0��&~Z&Ă���_����#���{T������W��K���F�ŷ${ݑ�����K`�~7��(�3��ɳ��G��tR"����5.�˔��_|�L��yL���U��xѼ�c��]�oJ\���V�:������#�\.���:;�M�-U��Uv�1�e�)���o��#q��������L�������D�,�$1c4���}��o�:<�2u� �}[w�:k�ƈk_�o9_�8;9�;ł-��b�%���n�&��du�}�+^�k�+l���TGEa�X�ԵY~����,���.��K�S�AE������t��'����7gb��� ��/�n}����H��<����@��=wYwxYݮ�is���M#�k�0�Vy)�����������2�����[�츇�"��f<��/����u>y�4�V��]���8dҐ��#���[����x:���G�0خ������pm���������K������Z�}:?�\>�����f��F��+d�����]�����6߳��r�Hp�Ϡ`0v��l +�0�~I��tj�n=�/�G��J���"��/�<n���1�h�b^���B�yq�d{�L�4��ż?�R-w�eT��}�����P�Sc��&�Ƥ2��v�o"@BZ������m�����Lk(��ư���������8wk"1tz6��c6)f��=����>�%��s� +4�Uz_uH���U���B��9���Rn4&�Z�al��C��g�>�VS`���KC�^�xk����j�ww�h70�wֹ�Ѻ㨍��՚߳�_��;S~�X}��ӫ�@��)Wփ]�|��{�l�y��wf�1��3���^�1P��~��#�k�Ci�սM�<u�z�!Oܦ����x7�L��Hv�+���n��5�zN�5F��9��3w���kV�*����,}(~y%A��8�>� Z%tXX�� �U��>�_��ig����3��ܳ�.�t��L��SXs�tn%�sU���^7�W��XT0�}��l�����b�V\�XUݺQ�݈�ؽ�Z:���)�断�����e�vk~��YE<у<�q�Ak�[t>j2�co�}@���go��Pą{ٗT�����;�7,�� ��'�؟o'L�ԈDC1�Q�\��>x��!)��6 ���h�.�q���(J�o"�?�7�������[�J�Rzu��+��7f�$N�V5O��~$ɷ��������������d⛙_\����^0�F��뵟�8HS��#GiQ�xRVU,�4�d�� +Yt�?i��$3�rF��.���L�X�!J�9'��쇌XC�� ҷ�zQl������=>F��i�5�`�܋�iM�M�4�fdl�l���X7/,�9w���q��b��V�Y I�2��?�$.�2�*��%.���X�k[A����oJ��I�@c�9o�I�2?�g����_N��C���̨6y�'�?_L�Fq���*k�k}�1�zF���x�!��Iś��Bu�<uoEi�һ�T���rp����A������� Vr��p�uK�+{�� ��g0sO&��t����������L?̼�,-�2��� ���a�� ��d�t/��`�ܴ�*_{�����ʫ J��e�CN��`���3¶��z����Elq�L⬽M��V(�ijl1����|(��k�Ԛ���֣3zcOg����+�0x~H��R�[� +�ˡ6��^~�Ӝ���YG+j���g= 9�J�^:��M0����L�\�[A�o����9�3����'U-V;�Hi�Q:���Y�}��f6/r>[��oT��^l�R�{�")>��&�ekyf�84����/b������O�dJ*���J�)��$Q�*�2"���~gʒ�Wʞ���+���'3:y��~w��� :�a����� �C}H���,[|W��]Uq}/-�]����|x��~P5��-hB�P}������eOe�ܯ K���q]Z�YJ��;�7�G�s���z�w�x�5C<GzBAw:�o*�<�_�UR*���Y��Z�e|g6x㪤�d�8��X;!JX�Y��KP�a������ +��o�n������,�k�m�n��h��s� @M����&V9���S��Þ���(�k�� +��J.��,���N;e���m�7�aة4�s4Qg^ QXt�Ƚ�("��L#�{�/�Ĉ���?�O1�^]߿,��+����w�b%��hs�k�^w�XJK���VkB�ةI�S��4���ȥ������Z;:����=����G��YD��^'0�"9�C�¤?�K��U��]�����3�h*cX�⿌�ۗ��Y�������m��.;ٚ�K�/�Oݴ$[Z�[�s�=ahV[b��2d� +�Q -M@�C��-�\bg�w��C����"�&������ +a��|�@�"�;/�w?`WXy�nѡ�nq���E�|�����_�̚�������wk��X�Z2h��H�N��Z8�6��.xR!d��-;�1cP�2P�[Q{F����"����� L���m�*'/����NtKͦ�Q�ް���m������� �;j7ڧC��)�ڍ2p��~7�����w���� S ؼ~��� +?�n�ˉ��Ȼ�D�2�P�v�"9��D��0Sa(r������'�}w1.ܺ�L��V�:d��Z�h�{�k7W�e�ۼ�U�V�F|[�q�r�~�oij����_�M��]�N��� ����0N^+����$}�l���+�O�O�� �)3I�ueP�;���w���ש]A���Ra�`�u+}�Z��y��pśV�6���4��)_^sv}<0�u��<~�����5� +� ���.�B�?�L��ΈP�7bn�Fo�l�9�J�s�gBN��[l �ى�*�i�Li�B6�a�h#�3��փ!���8r�g�ܪ����V����e���7+�<�(��^�>�zy����v�ږ��p��L]���~5���}�R��X#����Ԃ�(��y��9sO�@w�yXֆ�^j��h�غ]+4L�*�U-w�Re}}�+j��*5N���|�+���Xn��l�܊�RG���kъ�x9)�i�Z��{�� c����u��[��ySI�A�0�� +�]���n&h��^ۊԞ�8�L�����*fB�-�ݎ�o���ҵbw��M�UDV'��P�0�5���{�������|@��<�����R�C��@\� ��F�9y:�Č��ɹb�1�␞�C�Kg_��쑾��]K�Z=��q髨mن�Y5@6w�ɖtߣT|�u�v:��Z �-�����s�<S�C�^��]��U�������n��2=Y�������$@�ɔSb��>�i�K�Sz��Ny���L���{������Og9in��d��UT�H�,y��}�}w��a3Yu5���e3"�¸��L- �Js缌]I S�<�5�=�k�n�� {�Ӎ�Nyׁ�Ħ��ԲS�[��s@��q�;}�ۧ��m9�V�b՚��?������^;�L���h���Ǧ�4� �*?m��.}� +T��A��1�F�@��;F(<Q��E��1:�Ş�r�8�^�pmt`��`m�`�S�����j����J���n����J��һ�cV�o'��WM����S��!M����^|��K�Z1��Ssk"�2������{"�����[\h�����B�#���!��[�I�;�b��z�O��0-�2�C�Qo� W�\��� +���H�U�}Q��)x`7c�&S��x��B[H���h��I}�y^>X���i4������i@5�����['��o+��Q�����V�7����p�����g��d�~n��]��+��|� 2D �u�]#����� +\-�q�_��]�.�K� �Z�l���z�n�?ݶ��Z�-���������Y�V}�������u��}�?��[���n[t�[���~I��K)ƒ�<��j���U�H�|KvI���Ŀ���-3���F��z����[ ��O�_�-��>S�6ھ��/j��[f�I�?��j���%o��zZ?��ɳg�a��0��g/����#��Y�]���i�H�oG0s��5�~�X8�G 1O��I)�?�M~s���Ý;@�����Y��y#7����|K��ƴ��Yp�g����0yF6�<1(�)�4S�4r��B�F�����÷ +~�_��u�z�mޣ*��=�����%ːo��Я;�0�z2t/Gr<���fv����Z���WF2�D�@G�ˇI��3<d����}�%y�6�<=4=�SKcTk��T�S����$o{����E}���ۇ�U�ϟ�#�˝/��t��]��v�c"���Hlw�a�82��y��5�v�mm�����r�h}��~WWN� ,����k���@�/ɫ��Ӄ�m&ϼYL���=�f�{X�ܚO�>��.�gA?;��{B�����l����U��Ӧ���Gn��ۋQf�G�e��%z���E�o�F��G�6TD^�`��H50*���P-��aum5�ß2�3.���I=Ig�4�c+����~�s�D�k�l��v� "7�������,V����-�^d-��O��`�u�ьKv�hA�Qiz��j��OwR.;mlj�Y';���tm{�x�:�1����F����^�I�K���͗��H��]���˹�y���|���ݢ�m����.;�ĺVq>Y���p$�42T'27��,e�4��<��JOG?`�G����{���9w��P�����6ʝs�P�}�[W��YW&������j�$�♸�RҾ@�{���V?+��ό�;�B�x���l6��^{L �N�|� ��㮍��ĥ�� +#v3W����?,��o�~^eZ_�:����J����������F�]�\YIz�-~���.1�C�����l�j���a�i��u�y,��q;/�7A����+� ����Tv~o��EM�}o�3�^U��n����~죃����p�X�5۫�l+�бE<Ņ��'�������V�<vc��j35�0y��C�ѫ���}�*�s��&^?��i<�;��q�/{��&��Zm�1&�1�k��W�����ݠ#�c�ވ�6� +��V-���L�C��N���t$KS��zZ��j��Z7ꥫ�|8y-M�[�x�@���=�ޔ�?����iˑ�b�k/�=�U/�}���8��'?�HxĆ�֔��=R> ���43�`ߟ=ʱ�|^F���=mV/���[6��ΐ�k]�`��s�����(�la*�z�N���L��f:��!q��Jݫ8�W.�Μ��G�<��hZc��Us�+��@��F����G&�;.g�VPo�&8������=�F�z�Ǧ9�v>i7 �O�u���HܢB�nU�AG��-&��+�;u]�_��XBfKa��oBU��]��y=&"�ᅧ/�s�i�������_kѾ�Np�r�����3��Թ��b��5V����"kԶ�X +%���x�2�>\��9?$�fą�/��u�&�U4�^����^�/����L�8�:���u�W���K���ј�ođ�� �8�V��y�jh� �/�í��nd�@̘?`�,�ݤJ��GV!�X�1?��u{".��R,��^P���ܝ�E&�� +N���~��V���so�:�Y�~��-MFڛ��'��̈��/��x�a���q�=>k�|��Sd�d�Ee�o��h�F�c잡�Y�Oy�SI�O�c���A+DC~/��L�on�K�j\v�Ռ�,|M���-g,i��Bm�T�'h`�(ۀ\*wV�@d1�j����!���:�ْ��d���j������̴�^�������u���=�Y_�0G��!+O'LG��WX��÷��Ko�;�;C!��N�%��M��3�iGOjz�������=0�,=�X�/Qa����n�vT�x���x�n.S��������ݨ�Е�^���n`&�����h�5GY6�^��a��S����u����JK�~�'���w� +[ϐ`I���s��,�B)NKDe���z�����c`}�b��~A��j��V�L7�9j�5z���_���vB��*c�ʃ� �=�'6<�˒��uЦ�du�t��䠲�fFb����]�)7��<��Yʎb�;-��v��\�� ��C�汾7n��D��#qu �qDPcW���Ig!�y_�E:��,��z{�nڟ��%��{����\S� �v���D�����&� s<�M��k�k��ύ�tJI���5j;���#�>y��[ք���!o��ɚ.��;^��%S@JE�V��\���u�R{Z�BZ�Wk����S<���`��2�zL�.=Yxt�#��b�/�;~�_���HXc~d�����[L7�3҈,�w����Åޥ���uUѨ��IӸ!ߙ*���g��&U<� J��r�ق����J�ĘH��X�7d�ryq��$h�|�ņ����.�WJ�9.S� v��;瓑x��\����w92ô��z�.ж�j�Zv~|�{��M�s��hKv�?E�u� +��0� �����x�:%�'��|���k @~*������֙O�o�b�Y.s&x�"VK̺��V\2DRѻ-bлh2����bG�>�� � ��)!��0z��nbf�^�������ú�Oا��!��<O9�� ��8 BJ%��1�*<\t<n�Oz��;N8ԃWl唏�|`<���C�wd�`������(�����?�Ks���J�G^ +�� S�?��F�\���hw$S��歍|�f��+��ޫ�M� �2��G�b�l]α�m�f��Ha1*6���2���t�!�m�3���wԉFo��y�;$)u/��R�:�E��X��#�,�Ç�Ƈ�p�6���>�����nkH�h��R�է����M��NS�!�!ɕ�g�J��[�:�otp���F^M��η�/�����̓#B�IH�#>z\�.`yl��(X�|U�Lc�//�K>�6�3� ��Y>G��|ٰ:jM�\'֟���,4�����TZҡ$�Α� +�/_@�$��)�%�F��&R�VOJ"��f�nUsv~�� �^>�n�܆@����o�fg$�+�t�SA[8D�pp�\ + 2s�-�+bS�������bבڃ�Ch� ��_d%�NT�~�%H�iKjUp8'|�4�\�/���C&�L�tֻ��,�E �$�<dZ:�/��̵r�2]��g��;G���� +!�k���c�#aփ�{aCa>C-��8��/d����{�AW���?}lE�c�tM-й +�H��PŅUؚ��.�2*[��ľ@��+6�f��,�̧��|���0ↂ����Jҋ��a�M[�"H���ZL�[(����z��RD�UA�|x�z�f�z�o@�,P�\P��4���vJW�Q�Z�GT��~�Ō_��p>�c�ҹFF�"��DB����岰Y����b��2y�X:��/'�����:`�i�&�J�Ӣ��U�� +�q0.�L��)��H�)`(f�@?}��=fȿ��G���Q{��I}3e� ���p1��Y�ܔ���K�0p������v����/�k%�������E.���� �$�Ҷ8���~8���K���Z�=7�]� �d�����D��<�y��M�k��!9&G������Ao�w1�����8J ����GZJ��x�Y��ֿ=�����c +��}�������>����!�� ��: ���~]�~Cg���Mbm � +QVs��sr��h�<s�d�J�0c��ww��*���Ȁj J�ѓ��M�с��E 8�߭�a8��p�:@xKC 2��� ��%�C�� e= яŷn��S@b; +�8+�/�@4&Al&x�?��%����������5�ʁJy�,�z�����n*�u�_=���h��o=���y� +�'���nR�S�5����>�|\�@a\(�J��Jk���N�����K�+���N�J%���N Lni���^���f^gFS��:�8�U ������Sm?nۏt��f���~��^:�֓w�P��j��1������}g#��B�S�/�VE�L����+�O���[����>��_�����&���7��$x�F�?%�7(������/!��1چ� �P�y�>��;���> +�|3���>6֏z<Y�����?���k�����$-�y�/�#/g�dh��auV��߶ۺ�+�s��`p��QtC��:����>A��J`��s�s흵���;5ӗ�'�Ӥ|'|�?��g>�b�HP���ЈKڈ :ޟu��{���qe��[�?�srC\��#wq�G�/�s�*�b-U91�T�x2�����|���$~��*Vw��~Ĥ2{(�;�w�o�j��f���ƅz������S��&��L�8<����;�W�>���\C�|��X��b���v��'fH�|���y�a>�ߵ�������C�9n�Rn�>�5��U�T���kݝ.�#�N�]z�^�ɓ6�#���dz'0�ۘ�-c�l�ʜk�ybBK>\�J)�Vu�� +���w6Xx���~�bf��[��rqu����[�!������5ӯ'xɏ�"L��0e�f��x[���u5�#2jҩ܈9\�O� ���L�x��ﳟ��f.����</G~x?�ߕ�u�4�`�U�̊������<$��/e�i$��)�߹���5&��Ο`�Co\G�Q윧#f�\:s��W�z�dt�r������M��Y��WB�kY2�x� ���57{�E��p�)��8#�v�����0,��B4{{߾�y��QvH�����$���,9�c�tYHmH �;b��}����|�ՠ�L�A������_�<����ݐnSv�,5�u����{��b1��G����Z6��ox��l.�v�Qr����s �Ѽ�3b�k4��.0ȥ?�Woj��^f��Oƕ�uW�:�S�ڻAIo��f9hպ��#��n�'�{Jڵz����� D�к ֞zp}�i����a=[��es1}�3��f�r�/x�M��i�9Lj�Nctl6��yOY� :�}�����w�����x���X�n���{��>�����w�h��LM+�7����-�;_p#�.���#gj�1V���fPeBx�����{?���F�>�ŋ�\����s�2<L#�ޙbϮ�rg3{�mFL��y����Qs��s/�t�c�~*���b�����ڶ��kdܧ�qxQ�l +.����98��v���<1Y�h=�]��Y���g_p�8ԧ�p� ef����������ɛ�p�����uvϵ��!�z,I�Y,�E/��n#g�Aoֆ��ٟU����=�mggI�����ӑw+���C���Ƙ +�j���{�8��ň��y�.�b� �<�z������c���)� 6�9z��u(������$�K�L����� +:���JY:�X4�L����aU7��-�:wt8�� +��)�����l2�cgۊȇ���U9�� 7�J�˻h�Kj2�3��dh�G.6��%k�����P�(As�_���C�Լ�a�GT��m�\&m�7�[Ŝa6��l2��pW�����*�ɳT6)�n�ZB`�-���6swY"s��ܯ�'�!F�x"�����bg����������ՁQ*��L��Fi|�6��;�M��)5�U�k� +�]��#�����!�j���9~��@y�g��V����D�.�^�fz�E`����o���z&�e�����G \�P(�u�6�Fʍ/�Œ���V"ȹ���/u^��|1����a����ϫo,�W>j$��Љ�?�r��D_pk:��'�Ua��*�Ӏ��}DKu�H�M�.�U�X����L�u�q,��}@�I�X�-��:֢���BF�_[�Z��te�j��W��j��A�.�DO�wR���=��?X�����+vS�>�A=�5gQح{Y��<�o�/4l�lK;W�n�d���O_�Aah��I��6� ��-�BCu��S��jl���;+U�R��� ����ԤC�>�Zv��,)J\.�JP|#�8 ����fne&��8��B��:'}���ln��9�2aB�"$:c/>��\W���0�f���.����ζ�TE��T�eW!�Kr�ɻ�X�4+����zI��=/^N��#�-a ܹ�(��1'�n3O����}��O�>����H�]�����>t�,�E~�ծ`�ʶ��g����,�li�eռ:���(t���l����td�@j��Ɂ�g�ŀw��W���룂r�p��mX�и%U�#�=�:4)>��k �}>5\v����� ړRv��E�W7ꏶ\[��~ݠZ�� �����ʢ����oj~&�b%�eOp��{'��\/í)v\�%�l +�����dԯ*� ?�.�^Tan�2���Mazk�� kO�<kG����N�u��ζ��<9�|nP����=���fE�l�\>91c��J�(�*�i���!{#�!���W�ʉ�/�B�Z����wi^�G�k�ח�����̫�������٥M1+�Xd��Ң��Â������2�m�]z[�;�0��\��ι�|�����m���&v�I��f�L>���� �Tqv����*h��ɏj�4_�n8 �W*�*�IMv��V�rm�9�2�'?g��ӻ��ES%�O�X?�g����dp� 2�7-�Lb� ����`��P��/X�}gک֬��7��f�&�zTv��o���X�<���$���+�]h`s�*�3kcL1�~'һ&��K�i�\lP�q�K�����l��)����02�H��|*>f^�`$�� ض�;��*n���*D�8��肀�U/�\�v�:ߛ�.T��ڶ�����N�HP�7�C��3M7��u|AT�-��K�b�N�-��taw/]%��㯠8��`�p��p2���E3����k����q�G��-�v���6����'8����naE��_K�;�xui����T��G�_p}��+��`�»���w}Q��|"�n���'��0%a�r��U�W��\^4���r+���\�����[*[G5:K6~�2w���Ll(h3���Xf}4����}=9?9��`�%����R������~!��]�ְ�t& ��ri�i=/X�Bs��~��!����;M�d�#��x£�R@[$]ɜ��f��&'W�� r딟HO���l��s�u�~<���1��O��#��ܾ�]~3AZ��/����l��PR�ή7*��p�+GsTS�U`�F��V&�͊��#6�!��G�o�o���ވ��Px�bdG�u|h�:����H���ě.��9}�f�vBi-�l�T��-S��)�۩e�@h0�A{�:�AQ .��:<L���z6����-!���έJ��S� ��%8�d��xE@zsN������3�J��YP�(@I' P%�N�����#�T%( ��bG-@q�P����I�N�u��C��?�炷�p���T�scR�cu=V�x!w�N�_�Z�>w�&�^�|n7:`���FRl���f�;���Ѓ&H�B"$���������^��%����7 �Ȥ��kd��=���{�n�Z�.�����j���(�9��%�[Bg��N�����\�6�>�g�u�Lw�y���kL��'��Vb���l:�N��8D�>X����,��=�ff� �}k��H0�k�e���q���ڂ,w��\� ^�_Q�R�>�rqz�>T�|ދ��1����V���.�g�>+|�p)3>Aq��;Y���peZ�\��.� �.�Zp�yxT:�>!�gj"�Y���6<����w�����K���'�<����3g>��=nL�(��2�U��ʎe5rBL���;8�J� �u-�J��Xl��fC��d*�b�N�r9�ߞ^�����k@У$��_1G܁�.1 *:�\�D�����:���i���mC@�iR����u�j��RZ='�1�%MV�t���֛�2� SN;A`�4E�@�WE���Xn?9V�+���vH�r� �r�}�N@@^����U��4�%uJ��;{@��5P�:��l�����.�#��,=9�/IxOs�l�E�°��٬�e����V�?��G@>��_��������eZ~f�Zm +@�H.� 4v~ ��@�{_���g��o���L�Uh�o��?�[[Ԯ��Q0�?��g���$�ϲ^ �o������h�����d�j�����$ܟ�0���wE%����ޡ�ѾE�y�#�~L�s�>�ڏz����3��ϰ��A?�x,��g����/��;�V��6�?�r�^K��u��#�i�!���y7sǶoHC���8�f����\��y+G�39x"�&�J_�����c�z����O�wT�G����?J�L�%{ք���T�XW��l��}�1�7s#ޮv,%O�O��y+J�3�W�S������1Hۅ#?�J�.�;���4bu;l"�P��!]���l����5WP�ߩK~��#����>?"�ԏ�|�g2sC\M�fn���A�Lv���T&�.�.�0W��GD�e��ck����(��Ch�^ť<�<U`j�o�¢K���Ѭ8s�<�����F�.3-�~�L(>��.*�O��&��f�����g�=M����� ���^� �y���Jҭ59Ɯ��z�W��ZH�kgR�p6ⶣ��N��#^M���)�2Y�����1���Q�h�Ó��~�C�<[ �%(|�d���ߟ��\�?ͻ!N�|���֦͑�QYnVBy�jB�~q����G��f#�N#%#�ug����t����b����=<�./�A��ᣓ +C��F���m���8�Jp����ͮ��Ϊ�E��,���Mw���ڂH�e�)8����~L���3I��!�{ӈ��(;`��I�G��vt��B&��2H_��H�=$ʱ�y���مP��;n^���Z��&�4���?��H�VW�閜֚�4�:j&�pO�K���<w��f�����<�����mNVM6��(�����ްk������!ck�-ÍY�eZ��v�;��t�4ӗ:� _�g�V7��-ق�fx� +M�e� ��=�_��"H*�zE�*���֯U=X#g�?�2�_����8k'��o/�Rq�����elG�TӞѦ���#���,l)�d�7�Ͳ�B�;�(�zmX�Wr?�H=�1xm�F�b�����#K�\�7.71`�Cɥ�}��V���SQ���إ��Xl}���l:���υ���7ev]pg�{�\������4Sղ����n���^w�(�mzq��_�����=F�����'�r��ij�/��XE-ͅ���eݷ�v�#ۜV�6�T�rM+�����8]���������F��D�Y +�̄ki��$5����嫝�ն��=���s�ݪ��L�*a!�-�'�a�HR�2kk��c;U6ְ�C2d�m��ή\�>aB��]NƁ�$���| �;�����p�g��~)aF +<�n5�����*�:Bc��+5J��n�ӎ\}a-D�rq�W�)!����j�O�WZFP���sg�'f]���>-쭚-��5_����N��VWL�*�(�)F�X(ު�נ)6"/�s�[V�úﶯI��g/��Թ#�Gyl+O�TتX6^Z/=��];����L��\V�rl/X�]멾~��H�=��«�K�R�_�Bak��D^5��6���Y�37Ω�8�T[�=�&^�X�)>5�w�e0f���_^Qp�^;�ts�Է[]r��-[��[��U��k���&=9e.~�������z��K��\���Y/��^�M�ˡf���:�I�Z���l�)ˋ�*�����L)��t�k'=�%�e��I��yTȦ����Z�ös$/S��<z�⼨�Z��8�s���~�f2�s,^�M�R���KhA���69uy��I���ӱ�\oG�ژ���jWqN�D� +��\�ћL�j�7S�Ĝ-G<M�(��-�kA,����/�:�1)���_��'�{��~jy�76ƴVm/L���Xi��<�]���n2��OCF ��ә���pJq�(o��&��fI&�#W���/5-l ���O�eR��B��[�� �=Qdo�O-���B��O���O����S���U�k�zߖ�㼅𧰾�/n�`���0�̖`<�d�����j������a���Ƥ��̈g�&������T�V�n��'� l&�[���m�̓�č�V�3�[�3Ȓ���T㜁\�?K���0ꂁ��^���:��}�,C�a������֦� ������Z+UH���'u�Zy�.�k���&Y��lB�'#A���L2%~P�j|�l�y�8E�x��98U{��-D�V�+��Bt���|`� #$�W��y�(���h.r�<�Ӿ����/��i��A���[��X%o2&�ג{�K�����Zl�w;�v?�E/��Kn�BU��Qa�qrj8��38X;��>k��Cm_7L��ܿ`&F��H��߷hb��R�Ƙ���[��Y�5��� 7�_�IU#6^��N~O���]�H�mҔ����V6��A찻���ʊO����O�)vf����%H=Y"�Z�ez3�ytͦ�4��/���q����#��X&�y�A�nE�N�"�b�"��P��I?��|�g��T��h}ne��'\��N9w*F��� +%��(�]� +!8,8D�lV���3O�W��� tm��h��J�>*�i��^�y�[U2���QS��������(������xr�� v%<��e<����*@?q"ywmVb�����N�o=�hN���3-il��Ϊt�������'�%լ�b�t��d��)p6J�R}��N6!�R:��p\kUZ8��clt��X1Z������|i9��3�3�g��\>cz�4��R�m���s�6���������-Q����a7�bj�j*ѝ�b�d�9I���>����V���qm�`����恍��,���g��O۞���M)�"h#��[a.�.���Exe iJ���f��!4D�䉅6�����\)K� +��%�X��Z�VNm�e��3Ο�w�l~|�������R�pbje�Hvtx��0��4�98���w�1�i��l��Y�ž`t?�8�+J�I�N渻w2<#Α�iqC:��H�̀�+�虊H轄t����G}��4���np��L3����N����Os9�S��p�G��:��c�yv'!U�%�o���zF�u�<V��# +[[ }ކ5����W����tQ�s_0�Z��3-��PI�X(�Ϭ4-��1���㘪&ŽR�0�y{NDž�No~\��t���w�Ġ�>����:���� �����F��Jù���WwȪ>!%�|��,r�<��>U!I�� d�� �M@d��{�D"e :e�_<���(�ď�\],�a��O��I#�����[���;"�_hy�D��&�y��և��6GP�k@�K1 �����d(|��&î��Td��\&���'@t��Nd���i'�ɾH:_M`����>�ƪ��%S� �w�mim[EGR،[I/�v{6�]�6d�l�Bȳ����m�r[rh��:꒽'���a.Arth�W�+�N���%�a��@��YO=�1����VJP�LP���o�gٺT��U�L�d6{)���Z��_��-Z4i�o){��^{�TM���#;�oOo�O^�V ������S :"`z/03���0̼�O����T��u���%`�{0ճ��{�|�yLP�4�����|��[�d��08)b�X +�Н֡�ɕȞئ����.s�hX�Ovd"�]9�?�1��.,�@^\��ǎ+�� ���V8�O����lpm:�\'�v��W��������M�WT~���&��e}�{1��מ���Jd��[O��*#�s�8f�O��N�.&�_�4�|+�/j������Z�����@pkk ��'�3 +��-5���+����2�x<��0ƁpĕQ�̍Ҫ(_E�l�6 #|Q���vׯ �,*B5�)���*q9���a����^����������H&�Ҥu�]5��)@.��@�:+ wt�]��r/7Hp��?��<�*&��f���߫�eg�#gk�k�l�{"��T�(����F���-,���� ��ۏ��#����l[e�@%r8P�q1yBw:@��@��9��q���4�� ԧC E�?%��~�o�d��>����;|��?���؏��_�@��_A��qu�{�P��}�>�����C5����vCZ��վ������?��O�.��ϪT^Տ���CK��I��0�O�Cj���$#��#L��mU������kh7s���� �O+W�0�]Vܴyq.��y+��g2|�Nq�ݟ���<�?\+��A�B�����Z��~��?�6���w�-�?��?:�^y��Np!���\/���1��`��"VЉn�c�m�õ�M��Ŗ���Vڿkqa�ǧ�.b�'p�ެ4$\o u���+��Ǒ�1�>�������Ϯ�QG����}�8���9��3��'&\�G~|h|���^��ow=�Eto�����y�u=%nV���W̜;-��x_\��{!�ud266{>7�zuj��N4/�(;ß7���[�B|���xō|�Ǽ����'�Z�#?J�cu1���d �q����KԊ�j�����Q��ٻ��gP8S���\���cЙ�0'����,�5qj?<5��?V�A��ᣗ+����GE3���G�z�����������ĭ��uf� ��y�����2@���Q���~�WS�?F��xL�I���5�6�75�zon ���UD���l���z�����2����_~����ԮSo(�}_�B��z�(�y�j�����]�.8�>�O�_l\�,�o��dL�NhM��V5��7LF����F_p�^�E_��^)��s�v�I��qsD���H�N�� �*`N���ֺ��vKz-�f�?C�=��^�����%�����_�g����NS�V�k:(�����*��?<90>�3���}�;/�zge�*�:fփ�^KA��������3k>Bg�5��^�c���ν�!h �9Z/�W���J ;��j]�U�N��f�Ȼ��+�lK�;g��9���7�_�m���G|z4�*ox�5�W��כ�U�����]���n��V�}�MMy*�h��эrKn��K�][�Ű�^�Iu'��*��n+�\vsz;m9���[Q����m�Y.ȝY9��Q{|���1�6\l;���k)��MT���Vw�a�.Z]�C�6�_Q_l��́�=S?���U[�WBt����\ٰ���p�Z�*�{�S~���\X��r�=olcN�ޖuja�e�,����42k� 2��P1������Oz����U���c�_�N���n��]li�Q�C�%6=FO��C����ϔ_;�(��ٓaM��+Z��o[YjV+9�Y�.aܥg�:��I�ĵ�-��i]����"MKz�:z��o�����_*�U����-�\�M���D��V���\��ZݿtQ)����p��צ��͍e̓5�j����6���]�&y>IF�x����]*e�կk�ӻm����pZg�}A++omt�Z�C�`-m.Z�4���1d�қ1q��w�0m3��ܤ[/3�@�2nӼ]�:�K�%F�gyl-�V��.��}�1��l�����;��o*���O�,�]Y+�FPҊǮ���'_��5�3Wʢ1�*U�)��F��U�&W;�Z&d�����H^m�����~��&���_D�a�X�%P�r�E�&�8�2\�Wҫ���͚Ӣ�z��v��_����R���S�ʚV��YP�\A��T2���bҔŨ+��Lj\գDwW�x�tA��+r��L�� .�����]�?�bA�<�ܶ�v�ӶHd{��3]���}����ߩ�| +��RgWO�I�08D�1�-U+>�ʒ}&G�B�yc�����/[���Z�D��E��~VDߔ}�G�c��|��+��z0|�IFI��PƼ�ogy5������J#�O�rwwEg��G�M�u�y����d�qO���/�v��Rc�8Ze*�Z��I�'y��.OK ��%#\nwL��V���?����O���ِ{�57"��?"��R��xȖpNp�٨�)����gꚌ�����K�����s +x��]�Ve��s~��7�?hQ�[�%o��'�X���� ݴx��r�C�I��q������FET�i1��8h�Q��eKjq�"�흙���#b��I�>�z�S������Ә�P?�Z��g����>�0��6���4U���P,���냎R�G<�X�����l'^��K�}��\�{]�4D��(��T�q6C�8f�J��P�09gЦ�xzF���J�T��ٮFQk5�+)j�xQ�V��V��P>�R�ko����R+�l!#r� /r�}��l�V�ɽ_��\��/�Eaw��Z�������|mƖ6���,�ɑ)?.&7@ z]�st5_ch|3Q�]7eS ��"��l9����J�o�B�{�!��;����L���)s��}�AX@ן��:k +]�t�v�[͐�h�� ����ݵл���t�w������<;��eiIl-�v��j����M%[s�$��.v���D�|Oj��5���9ƕE!��ZO�a+�fgl()�U}I����Yؽu����6��[�y�-�B��V���p�Z����_f�ў��!��d۔��wȣ��>����>�!.}�Dt�����4�w�����R��UL��~~2��y�����r����졝ܕ��I'r�UG�#ى�7ՙ��{"�糟�����f/���<���K����džE��K�7h~�J���l�[�����.��1�֣�����ӧ��2�Gt=�7����W%WN��\v�<�\^d�S�n��������� +%�q���n-��bS[��i��|m��r���dž�v�ew\vx+0/^�.��'.,����F�9y��.�r�/��An~H�r�;�� +�Uv����du��%�FwC��+d�<��2�+�e�h2EΖxC��@�U˂{Di��n"�G�+�.��A��&�X���m�(Dصk�k�Oي�� A��w����L{�֚PB}��|�����V�po�Vf8�!�^'�NH{�}#bu��w2�����a��ӯ�9NS�s�Э��)%�C�M���2�b#6](o��`~�wu��M�F\�n�Щ�?>`��*�O��,V$a�A9���dm��8��*�3|u��n���6z�7>'{�v˴�8 1����0d�vTj���=+;`�]��f���4�̾0��L�>������A0\M��ˣ�z���8�㓾�K�9�{ں2w��b(�p�\��1�:�ܽ=˜� ��&��*���h��0M����;�A��q�{i%A���������Y�;�p��|��ܶ���.e��H��gҋ�GE�O������w��Ӿ�ps��.�0��D�{+���䷠��Y!��4M��0���t���`�`=� l��W� +���%H�B��4��D��7@�� �k� ��p�D��N7%*���*=��ۇ|�'\�3����3�;:Q��[��5R}d~�Zi4� +WDÇq:�z����E�2����:A7N0?k�&�J # �d����]Ip�ʪ&WQ�`'�� ���H����V��]�cn��(o���To�^ۮ�(�.����h��QM�r1K�m'#)PxB�����c�E6�sJ`?�Ї������ &E�d�F��09�����n(`R] �W��w�>9�t\L�����ː}]�N���u��\N��u)��~9�6ٺO�I��9���v�O�����`������C�0(��l�C��p�m�*`���g��K}�+rKွ9%��c�>�'`i�Kf��~��7��_Qy���2<�w�Z�N�R��9/�D�FI���M�J|�.��t�A�"7G�?%��=���x�f�.���@H;; �b)���ր@iK �Bf��E�@�é-�:/�L��cO�3~��`9�e��ak��%��|�u�*�]��|T�Z[��m?���E8|d�o��~{���!���H��H��i�6�}��m���d��9�6@� +(�sHр�����M�� +;���Fx>7 �~�s`�����_�G��No����c���M��r�Qp��x��w�X���\��륁rO�*�v�*�@-M�@md�z�.P�� �,��P�?��?�h��g�'��������Z��h��H�W<B�?Bx�{�����.#�/�����;TU�7s�o����?��tMQe��W�"(}# �"�� �}�a���h�:������i>D�3F��:�Y� ���y��o +�_��W�]���<ՖV2$9����A��_y��}�l�n�o[�o6B���A��}���w�r�n��E_�L���~J��x�p!B�8�_9ӽ�{�k���5�����Wk�?Hk��hPؽ=�����~��_a����ۚ꿕Яx�=�q��.]KwȆj7��W�� ϱ��N{�OEh���iy���Ǿ��{מ�ݐư�a��8��غg��)��t��<9��R�"�EĮ����w\�(V�2�7puDoy⯞��@����f,��s�ҧ�����=Hӗ�WW���ܗ[�����zs�/Y���Y�e�Z�ŵjM��Z�{����[�aV�6o�<X9S�?G'�xŌ�DŕzcDDž��cv�o�@��3_�ZW����/=�8u��ȡ���]�ֱun��@O*�����k��{��Ίg��w*7���4^�YuLL��(.S�����GP��䲭�p�w�_�am�S�Sw�SI��3d�u"�f?p�nN�pU_�����WO�D!����r�����J5��l���m�95��ǺJ�G�Ă{��N5�ؿ6�[�@��zKC?pw��3��$:�"Fw� �Gv���U%W��l�]�n{/��9���8��^��T��o�*�4��c���6���㩱[��[����G����]�����#7�PQ�z?ov�[�L4ޏ�%6 +W5�;m�$� +� ~pG��:��kK�*O?�����YOK�?���F7߄�R��Suw^W�.����*ߡ��U4kq������]�Ӿ�X�q?�f�DyĜ����/ўz�3���?p��Ts���-�\�}�^����֛��5���nL�n��,ݡ;w���ƽu�����_�j��U=#�S_�;b�W�D&Ԯș���9a�ؽ*^��F� +_�_\���l���j��ak>/�NC�G&+�g�������� �w�;�����wl��-���m�}�$�X�/e�Թ8N����*2I��^#?�ޯ��ҋ�Gy��Ѳ٨���u���j81��*c��E�X�uըI��ů�]ӣ��\�~�>�Gv�Z�67$p�>:=�q�62u*��bk]=�ݓs.�^����+�a������!X#�֬�.���d��)�5+��825�|�J�~.5�&��KN�K�fTl��t1L����6���3���r��@1à�8ٕ�_��Y��&��q�W[ikR��I�g���*��}�܍��}og2F��ͱ����K�PW�Y5t~۫Cv��'hP���MAM/�ڠɑZ���Թ��q�V 7���U#����/�r��w�3x��i�ں��v �%o}P�����~٢2����`^� �[-�\�\�G1� +PQ2}�.t>UP+#^\֊V��:~f����Ce���u�� +:��r5KH2q��2q��R<Z3 �_̲��fpW�]�n�� +�~`���� '|s5�؆*��//��Ƞ��P�JX�6�A�'5ڻ��j:�4h�}�&�K���Ul-K)�yy5*��g�]��ݡ)�=-Y�����{�\:�cQ<�uWlg�g��V�>���\��2�̬Q-͆g��K?ޟ(�6l͚���X�v���{�Zs�H͈ǡb�R���\]�'��OɽY)�鴲��2��~����lQl���(&� +�6�6����|�8|����-E$(�?0ߟ�/��wo2-L�CN����lV`�\���Xy_G���_J��jZ�ʾ�Y�My�0|�<:�!4G�ä���A,���خܓ�_�tZ�]ULP�:ǿ2c����Ъ��T�̕��#7�7S'7ӎnV�e��/r� ˌ��wY~���G��&6���<�H��;�L��^�>-4�Pk˵m��?�n�w�@l��p�鱠�܂֎ �3_��_|ʻ"�1OP9#�H9x�)s{\�ٞ���r�]YǙ,A���7���a!,!mh��g��w����qg�bg�|M���k�ܝZ�T�)N���a�i�^��x�Z�F$q�P�I��Z���J����&���œ|�.�Y�qVI�q(���n����,�:����7�C��3��+�-�E�[�S�[��a-�������B�Rݡ��E��Cϒ�m�C�U絑 +V�y�K�N�Y�O��BJ�n^8rU~p�:9�+ָ�[�8kh'Z�:`�i4c�F31�N�>���=�3��:gi�B4���kԩ{�S����&��Q8UIY�~e��]%��N (�*���l#vB-Z��4l�2^��s��*����1���,�Ҧgd'7��P�[��Cv�Ů�� �L�a������@�О��19P���A�IJK���J&���O1�}�����6[� `�%|ě|$�_p8����o��՟����d�M�uk�U�Y���f�`|�u u٦��Q�M�� lq�v�]��u��u��Ն@�'䈼���d�;R>LnD�ߦ�D��">r�e�Īml�Z���n,����Z�b�ܰlf�aey�a�(Ɠz�����ɮ}S��L�ׯ��E�^ M�� �X,�BD%��Udrɏ�㐭�� +����H�x>*u���D������� ��K��\}l�p_X���b� +�C�����������<[{��,5s�&�hdv��9K�M4[�ؿ����1��|�٧����Q� ��6�8F[ЕO�k�)n��>��Y��p�[#U�/��[ج�u��(�IJ�R�.��!�$���o�l���ei�gv��iz-�iQ9��)�/�?0"�ɓ <�u��VO�`3(���~��Sk��w��j���/��)m��E����]��b���s��� s��P�S�I@�v��/f�ާ�c+�w6��G����v�S#?F��J�>#�O��a��#}��2��ӏ�i��y���@4�e�}��i����^ �_�o:�&s�_߮��ֺ�u^��^��{y� +Jj�x1yeh�s�Gf���q� +ݯd坁��� w2��`܀��=J?[�a�/(˴v��?pD�7��`J�b�M˩�T�Jv��ʄ� +�����d�52`!�����<��ss[��:�˯���0/�%���%��0��Gk̉��>k����[ԑP���+Z:������H�T�W��Rkv�>��7�n ��O�B������8�����n ��b�Vr_�'p�L��2���q��K8�'�+ ؝��|o3�rՖ��op�B��r���y���>�q�:�</�DP�a������v��?&�@Kd����YO�b=�blЀ�P6 :�5 �$� ��Z,�s�W2Wj���������w��J2y�y�P��z���\�,9�+FQ�u&�Bp� ;PV���*�<@ T�@�%��� n{@��{�N���OPT�(j%�&o�(o@e�" _� O� ק �E#�a��ʝ� �̈˽�B�����U�7D��Kg <U����`�~� W�-\��i#@O�?蜓/��"ArN设K]={B��kd������?K~cPJ�2�f�~���Q��Zk�V����M,��l�.ƥT\b+u�X��z�vsL�-р�s8Y�d3ѣ����!�5`A�,6\67__}����8r,/<�)��`�X��� +{��� `Kd�ҙ�4�+7�ﱅ7`�N�%�����Z��v,�ކFNIm��sI{ +��6~��B�U�)[d3]�����)�ں��13�W�E��a�yn�" $p�:r�r��ǟ��oC����?9��rJ��٭�\���o: GX��{e4S���:bv�K8N�:��A�����d���Nϵ +<��]�D4r���:5��������?ܯ�kI�����5��� &�����l��D���N?�a�}����P�o��T�\�be0�����C2Z����2,g���O/��g����7|-�_���N�*��}�U���H����)�@R��,h�����{�@�� �� Q^�vѧn�Ga�o�����ܱn�?��ҕmF��N�����#dceU��7�O��'��77�������@�b��۶�ƀҭj@�C�<�P�8T4SK�X������\�_��~���x��M��0ۿ�ߌ�o��?���^�7*�3���b������n����o���q�����8�9!������o?�o +�W���������_���������a�_G�>~�es/. +���Q�WkϿ/��_�����A�����j=�I<6��I�Ga:vQv��ν�W��l7dk�乭q;8���7h�;��v�oO��˺������d�7c%��V/]V�W;ׯn�x*h��Ր�������5r�+��x;��� �K�v�� ѿ��n�^�M[q�Yx^ZDt�4x��<W/�l6�2�tqj�d��~���rh$���*��ˊ>\O�{�~��ثK"�+��E|BX��\Zy�^�� �ED���ẵ�zp��!_m͠�M�G�?�k�d���ո +����Z�G�� =*�|�e��mcԗ��7W����}w�o�������0�9�<�[���Ku��]��{T%�O��Ը��t ���DȌ܌D=���:� Z������3W��{�v��w����Vv�3�YDv�~WU +��.����6}7��O��v[~�^��CƯ��|� i�9�Z�J����/6�KAy�ďy�i2�#V��+6�efݙ�]c��F�[�ΙWX�X���Lۥ"�7l��*R+YM��H�W���zZ��}��r�քV�ܘ��a�_�U��8�&2\�}�:W㓖.͏ܴB����}��3Q�|d��BH,9��R5����N����!��#Iz��4�4 ,�Ò�i�qlL,��@V.pm���W�}��Z���꾳T�w��%%�`a9"�/��|˯͚��h6 +BgL>t�+���;ؼ:Ƞ�l���p�~ʿ���SjdsX���"5�E���xͨ��5�N�k�Z���}�����;?p��'�|������v��0��54��ޫ�h�T�*O�Q�l�z�2r�s $�/�Y^X�R9�b���ܙ�dH rms���ҵ����s뾯W�ݥ治W��s���#<OT%*�8�1>�v2+�{�(Z:�.[І��MZh�s��3�skaT�s)�钫��Xߏ���F�������� z�ɪ� �wu��u����E��B4��m�VJ�q��@�V{�H��v��-��%�t��ue��s>�S&�v2��8%��fK[�/1�Sӽ#i鹖�,��a�p3�B�u��sp����4��Yh)��J0��b>t��<�^�v�Dͫ��.�:��4'������ҝQE���UJ/Z�X��[��3+5 +��~ج�:O������*�)�pO�XA1(Z{���ɯ�ZAK��Zj?e��3�<�/J��cr���e'�/d|z2>�32�c��WS�q:�q��T'�6�����ZÐZn�>W4֚&glv��F�j���֊�{�+ܭe���v#m@�Z�q٨c.uPKo���t��Xi+�d�-Rvؙ 㧔.��|]�ӋA�ia�<�M���K?���b+�<��oϋq?�è����ov��z�D�Ng��ZS�Y�=�օ���^'��R���GC�4TPB����JS����T���]/�=�y�~͈'����ӑ�kal ���t]���¼x-{�s��5̽��+��F�/F��=�!�nrW��6h�C�/7��%�X$*���xd�J<�� +��"�ؐ��iH��:=�y��y�� OD��X �9}"[�}�O��b?0����0r���si^�s�������e��e����(y�Nq�����O:�z��ˑ秵��n��Z��2e#��ˤgS�W���3ó�\=�����t1S��iG��L�rr��N���=ɍҽuN���\��<�)�e8�=�~�� +e5Xlw3�e�L0�%�C��>�0�j��b���)�z�||/�nWꇨ�9}Nc,��J�N��-�Ir�fg;Wby� tą��Y���A��+A�j.=�z?0W�l�\���3c+E{��Pta�� bj��PJO��o�J��ր:����7����/N1��&�X�弩���.�f3o�[�A/Hf�J�_��fXt�����:'gx(@Sf��)^�j�/4� +7�y��2l���|���R����&C툡��1�c2+���O4ۏ��V��L�-O^��M���%��qO�W�,�m�M�+�~��_���{f�4}�9h����o�D(όJ�� e��gu%�=i%7�����)0r�&���.1���iW���&��PGw��VhS��)�.��&�'�P{���!��'O�����;��p�Ce�&�W�`���!��ċ��ȫ[�����>� b5hjݨ>2�rAW�ٔ�x��_Ԋb/$��x�}��^�ރ�D��B ָH^ѝEJ�]5Y�<�Ot�l�Pg� ���|�=�x�O��h�b�,aȾ�s_X�6�O�4VQ,}��vi�D���/:�����؛]W]�y?$��j�yUl+�͍R#����l��&�>?2�:[]N5*�m$�1TEBK� +��6 |�8��.8t���dȎ0S/��9=�v�PL-P?pv�^hY��kf��i�q��W���3h�2�I�f���Ȓ����P~�zS�Ise�{��U��kV�z*"2b�~+����%��f:�������N~'��V�c���L�.�A-��թ�X�me�江%�Yf��LCh?3���!�iMA|���f�y-=�v��p;*�����Oj�O���)��MR> �✌��r��T�7h=9�Rg�9�Т�Y& +�M]�![Wbf��˙�<Yر��� ��Xa�����ȥ;fv�_���Y��]�C��� ����M����.�,��t7K>����fw�l4t�m1W� +lr��l�.�Ե�d�7�t�M�1c����F��#�]������H�/�@������j��A��R��yk�V��z��*�Aґ��SF_��<��kb���Q��\X=|��}�}�h~a�U�c��/nQ-y�u���S-�iEiL,��+��K�MKB_f�g2Z���J����$�}O��j�������T&{`>Cz�C�Y��`9:�`��� n�O�� `d���AR`l��~|}���j� +�S����u�ȭcd��X�tJU�j��B��P����Yv�X�����*q��9RT��E5�¡B*��I��L��t��)$H`,7���[� +p��<3r�����{��'`�]`��`qNP����7�6|�i�W�h^�ɍ��N#�Op�!�z�9��=�G��֝f�O��H�B5]��M���: �� �$��ЬV�A��|~�`���R F D��Qz���<�I�,�~�^�?e(��0���7\����ï�od#��OI~�e۞&�7Q��w(�"&H�Ei�TK����� + �u;��d��\���I��&���FI����� �pȊ�d��)�> )1H8�<��7���S�N���������,�CL��ˬ��H^1/�)��H����� ��S��-|ʟW�P/��`:N��� � �N F��F&@��Z��P��P7�����j6O~���$?����;�KWK���|�]��QoO�� �q�Zw����1���/��i��~<��(�iĤ�ik��}� �$��.��v0�S0�a$���3�-�3c������'���{�8;0��L���KЕ�T|�u�} ��h�s�J�L�2c�}���w:�./�}h�}�\F=}ܶ�?��W�e�w�ɫ��Pp �\g,n�; �=���=���L����n��`��\{�����T�b+@?��������K <��\c�iPc��cɇ�G�B˻��#Ǜ'�A�7��4�G����a�#�����7hy�^�����L��?Zw�'w���/����u��$y�=��n����yj&��^�Ԍ��ID���џ�֖���O��|������ ܔ�w�� _����������E�uZ�� �^v ��`���o���>����O��䧀*V���m66|,I#F+�m�i �z^�d�����;�����m� >z�7 �?� _����6+��;�d�7P�'u����@�[Pm(Cw���t��� 3ͤ����*�ߨ���O[�o6�7#���ӂ�k��uZc��r[��m�9#�6!�� q��뜹yW���J�%+���s�\N��3{�u���o�_��g;�w�W��(�_y��0�@���Ա����w�R��.+.�^�`p>�o��i��'n0Lh�= +�y�2+v����^ݜ�ݐ~�;�G�[�F��h�7���X��Q� ��� ��ߠ���~w�zQ��UGX�f,�uG�9�G�3J������j�w�j��N�B���Y��`R�[ӣ�l�����d��Ka�:-"*��?�\z����l(6��D�Sd��&6���WV��5�~��Z��������W����A��n�'�R����x���[f),��B�Lٹ����-O'�va�t���z��x���11�#7�F�r�z�z28��ͷ[V�җ�y��>�O�,����\��QV4w��7r5ط�����t��^e�+�Zdz��Ɣ7T���x��S$���$�Q{�x�j�mrϾtʥz=1��ԛ�u��Lu���u&E3�A&����*C7$6��M������c�]XKxn��uP��Q���2#C����:������ՓwP͎V�W�=�]�X�L���u�/��y���f'���:�zae��������ZKm��;��V �W��O_zJ��+X�=��M���}�4� �vm�����6^� +�U'�Q�_�UW6��F>��"M,XD��IA �OůZ���a�D�b/�u�m�<Y��mQ���fx�[���d�݄�b�afs���:�M�����&�*S]�b������^���;AЕ�XV+��r���Z�a��;�h��ݰ�-nuܝT�Iqp.���(�I> �whvJ�S�KSO�� ��kc�L�J��Z�l25���^�LuN����f�r�VE�ª�3�M뽘Eְr�'.�)#�f��q�D�ټQ�;u�x �x�c <�.��M}_��tgZ�6�C~�Ӻc�ń��*�:��dx�Ҵ �����*�k.�Ϊ�彮\{�"������n ��m�� .O�7��lo�lΛi�DOi�X�f7�,��Y��� �sP<-e�X�=�U�|A��n�� ӥ����/惺��1��j��2Ar]�"���e����;tD$��=��Yz�����1m�<2�|af�ʺ�J����UN�����i俋Ai���^�� �=ְ�i_V�͆��:w�(��yV��S2�ޒ��J^���/�6P�A�@j�z�۹�N�d�U���8뾨t�ah�����v)>�e�k~֕��[h�j1,D[��=g��^����V���v�we*�!%3@1y�9�ÂT��u�|U��� +�,Yˈ��n�G���|�����;*���z���V��7���3G������2A�����U��i Z�1����*� +�J�>lɋ�0�+^<�q�=�j�wR'K�A�9w˳����9)��G^h?$K��w��W��r��s�h]̽��Y�5����U8���W�-߯�v�r(�Eq#7�ǐ�^�Z��G�Kl�sQ��� +�Bw�VU����n��6�B�����7��J��>b�K""��%��B(�K�> �|����*�Ar�@gsEq�s㙐\}ΰ�s�U^�쒗Xkb�y=��@�l���A�:��٨�}.��n\����3���a�������|�YUr����J\[YY�^结�ͫf��{gڭ\��wr�s�+Xq�D>q���u8,:�U� +���5&t�x�hW��[Hwi��:�q?�E2��e'��������]>�\���'>Rv��c���L��ZeQE���>儈y1����!=r�7S8lt],vn�u�F����I ì�Ό!�zK��A��Z�f�g����C�hH���D7�!�n�MsK�%o�E��Ϻ�W=�Z@�U��E�m��G#Ԍ�����{<��~�-oH��ݭ�~Iq�]�X��1,F�Sm����߃ +�7 ���B�@�#ʻ�*�]_�6�ä��s�-�,B~D�.��w ���<31�\3[B��]��ǽv�]����\s�˗Q����=u����G�{��9��H���wȹ�eF2�J�[����2�=C��I�r��B��A�٢C���'n�]��T�sB+G�yۤ��La�:*a��a��c�ΐ!��2��K�4[ltOo;�p�Of�[g�����u��.W�1��Y�L�U��ި���O �ο1L�� E�J��竇��(���3�N.J�Z�_b�����Q3J�X��M�q�a�c�΄�Z�J���A��u?�H����#���ek���am������asYH7��!_quZ�6��p�.�4b�+��y��3�ڶ�:q6G��o��2&�x���ScO���P�$61���љ/�Uh����l�u\�%��l^����#٧���4wXi��g�m66_��yw�*����1�.T���nJ�/��%��r�Q�A�L�m�!��&&��<q�C|.�!R&Y�I��Fr�����v�,QV2q��g�dL��Kdo_����w�+�)�p�0X��R���eX� +�ԯ��K.���#�+��"����EQ�`L���&7��ZTvT/���5��T��&H,��X�x���x��3�~c2E��N. ^�j!9nO�wr���H��bm| endstream endobj 37 0 obj <</Length 62213>>stream +�ź�IG�A>-�| znSH��H�z +ԇ�.���MZ�qp_w'�\x��F��O�������)�Z�%Օ�yI�%�����>�i�.�~� +�h����XC�C�E��v��mvD%� ��&��m���=����*��;z8���S�Jy�K����Bd��]dS�(�D;Aw��r�m+�� ���m�~l;�_�yt0jp*�CP^���ܼ�2\w�'|����"�iJ:��Kw�#��D�� +q?�ܵ�+i#�*���d'�d��6A�@vFs v6���C�]�7����n��dG𮕦v�&yS���� +�4]�V�qt�0{5���F}ϑxLE����u��uˎ���N��9&5�4�% +�~�K0�< ���z�^���}4ؠ~J�N^�C�������ԝ��Z�%�h�F�� +��˟`厵���p���g�VI-���f���]u��-�܁����&F�a��욍��--��x(=�y�M������NZN ��kT+ ���h?As��u�W���gU�UFM�9���\`%���-�TX��>?��������.Q-���_�^�"��L9`^9��V�l��7��aN+3�Z� +�Ġ<���� <��s|57>�m���F�b�`<�?�<l�G):A������ �n�0�k�2����B81��3uN.����vO��l |��c��6��r�#��S9�q�γ9�ځ{�N2�� i��m&(: �. ��S��5�SY%�^qđ��|��8�@�N@��7@�Q�9 A�NK��VW�)�o����q�kJ��T�+�"���i�Ț�s�_��w��R������F�R�����^��(�t�j���~J?��*�Z�wPRr[S�����fڀ�G%/�ȍS�+�p���f^��h���|���)EVh�9b�6�ٓğ�wYZC�Ý�z���X;��~~���w0���wf؎��`h1�`���,�d6`����y0�)��:�Ҁ�Rv�i�:���9�>��x:SN-'M����^j�9�i47�!x$�/�d�,�_��}��(�����B�$���{�À}!$ಡ +8����9t=V�.�c.`o� `�0 ؽ��F8|V�ϒΚ[����|z���r�Be��$卡Ԧ���������_�F8|l�_A���?2��'��a��� �?�/zi����<�Ʈ�g�I��r����Q7C�����S��-�Q��1��Z� ��)�S�?G��#����fߏN��� "x?� +��� +%�Vt柮i������1ċo�<�x�a ��{%yˡ�j�|�:<��ѸK�H��������.f�u'�+����u�~3��*�_����i���iU&�� ����̷W���@�P�קW�����% �-0~ݶ�M�+�^�d�oFly�k��8��>����&���!�{�3Y�jX���Y��\ +�9����Ղ�:�㩴]�9s?D�M8H���7����ZW?���b��ڿ�o|���ꘫ�!�n^�]�48��uzj>�c��LJ��?����؏�^]��nH���|&U� ntl���<���&핗�Zˀ�/`_��9�MA��C�K���?��üM��bi�P�s�g>��^�:\�;�W�e�c=�.��:�8{�/��7C��E[�k ���{,2��[�lV���DNS�o�&v*Ȏ�Ȅ�8d��K2#=f���6�k^E��廓�?��8WH�Nј�8�جDm��ӫe�<�i}�����{:���\�t0H�˘�����i�F��+ =<T�z�zl��ޗλVO�{ݡ�]t�Q��1�A:�1J�Ѝ<��(�kb��~��?� �����,�%�>��5�����j���yC�F����k�z=�\w����B}��1S�gd#��V� +֎k5���~���[�����n:�>�zz|m�g{�9��vZ�:_|]�.z��Wks8� =�Q�]H+N�Q�S��S�-��B�d:���ʪю��]� ���j���P��҃z=���W�esX��&4S� 5���]t;!�U�!��@�k�mU=�����iT�O�j%�*�W���kgCf���a���F6D?�.�Z���H� ^O)��a�@7&��7�EAvm�P���d&�{Ū�^�Z�ϥF�˗ZΩ[�8��W����~LG[K�ְZ�,h;-�'M�]F��Ӝ�hδ%���<��MUX���6>z�� ��t+�A���������&�NcRz�]t5���Fx��[�k���^��t�JTp39vψ�=r��J�NV&51�ys^��M�t�j�⮺,����G(���P-���Q1�T_ �٢��2_,:u�9��祾2���沁�]o�ә~gE�����&+qGx��1�ְ|�'�a^F��ƴ���D��bT�i��|�\9��~սOOcE(�H��춭=�ۖ���D}�{gu��0�\�d%>��e�i��bj��A8���<�m�y���>�7ʇƺ�=}G�5[K�����l�w�8��}��:����i���ts��rs^��ݍ�s���:t�OUg�Z� WA�m�^���ݗ���T"��5O�L�A�Ug�g�b<�[V�7��F�MQ��%�o�7����¢}k��]�R��%F�&g`˅�̩Z�B��{C�U�f���c��[ +r�;���2zwgRU���x5<�������;��^��3���`�D�-����1���b[��Wo���b(���ͬ�r��q���[�j�hl]@G�*�m��}K/ܳ���#m�S�Y����Kk��Hd�P�o�J9�,U��t��/l#�m�B[3��$c������O���4�Ke]���6��;�i����b�r�@_��Lu��P7�M3�����欈�uv���n��̄��rh#,4��U��ʮ@���~H +�T� +y�+�wd��)���W�^��/��KI�7F +}�4������<��T��қ�٤��cFS�P�αLS�� �yJ�%0�.D3l*���1��p&H�� �[�R�-�eܔ�yyZ{`+vF�wB^Er���N'��W�+ݡ;S�<k�\�ͮ�efY�����M�8��*���w��S���8J�Vw됂f�+�݉0.��X�BЙ�B�w-�ڭ#��Ј��8��j�fp�X��&�1�_{�?�ڪ"U�H��[B I�)6�S�rig�� z���4�"�{� +T�-S�C�䉰"�u�MI��(�iy��X�p���a��� 퇂���Ƶl~�E�i>��:��~�%S��'J��|t�� w��V���ѕ~P:d�Υb���������C��z��'N +&�ňk]������;�c��^E�?�q�Q/L7CKg)5[�͈�!����j�_CtrM�v�k=!��\��?���2�[X�M�N�ٱ0���t_^��K��c���TWҭ�+ȋ佷!�@x��p�W��V�Uյ����=�J� +��sh|�mF���� ��|s���`��֛���t; b�3��j��$=8�y�m�+4�E���O/)"��~0r�J�$=Z�����EI��I���b��*��Iz�4��w��lĨB�S����w +å+�V#��4��5�r����L]�������T�pl�W��Z���8S�A)�M��FM�My��H�ЛES:C�+~��߃���D�X�<��������]ǥ�s�U�[��B���M8��h* �Y��J�8��Ƽ�������dNm-�h_�譚\T�������.50�F�IM���"9�Iη<B2�D�W����b��|z��w@� �|�Op�c��5#�$1��T�Ks�B�V�D/�}S���~���V�j����~�g]��u�ŵ_�;�@7�� t�X�o�z��+�#���l��$���F��՝�w��j$�W4v�5�`�q��j���4I�A����-Q���%����v��[�Lo�Fo��#�o#��ٯ�wT'^=���(L��y?��:�ܜ��TA������j��!�w+ǟ���dL�`�����:߰�:�c����i�#�i-�E�^FE[D�A�ù�t5��$�� 1�fۄK� 0� +��Z`bq~��f �u��.���M����R=9��A��g��֛75�}��`\ z�f�iK�%-�k�=���MW�W��m�&O���Hw�����$^� ��Z`��d�7��Q@�� @lT@�� ��) �|���x���G��[�7s8l�%������<����-"�4Z������Cw�m!/�ZK� ��M � +����������D�; @�%bDC�d@ +� ��8ѯB�#���R�R�͏�,�b@��% �HdV$��[��E<��8���B��>�\y�/d��I�)� 9�P'�v)��J�떹���X�ا2�<<��$�����>B0�/@�t��(�(B�-��Ph���yo:�|��<[�'ȥ�[�<.��re�,R�I�:+�_�q�)�i�K�;o��}Txʫ�p%B��L�Dnݗ��ͷ�: �OZ��Ud��*��hHs���9 ��'��+�>���5�� hP��r!��.�6�3�&��NP�p�Tܾ�w�hS�_��_.����m�r�*Ǽ2%N�8k��K��>U�e�I�h��Dn�ʀ �`\B�.� �M�����r���!*����_��'����[����>��o�ħ��op<�\�c�v\oغ밬, +����:��}B;b�]� + ?!�;]�_|4��.WNۂ}܇���u�U�Q�)r Q�VKPm�]/�{/��-a�x|��0�9���%�.�Ӏ�>`>1�^M��bn� +���6DÛ �������������ﭟ�4��zT�8V!^ �m�.Dn��`7�=���d"�n�d �M�u���� ���/g��o.p�W���38yF�� +�Jݼ7�(#C�,�Y���r�l~0,�ZN,7i�.6���6�Pn�����?0�BF@ȣs T�-D��� !Z +B�! �Xp��G�5�B�����%U���=s5ަ���к��X�'^�����-E�fᎹ��l�p���w���s<�K����?+�������w �"H�����R�� Vp�bR6��`�$;��<,��zü\J^�q]ڧc��u"oER�Ld�y3�IC#1,S��|�w��>��_�mԼ�������0}�zq���r�����`�/(�b(M��9����.�u��(�"�j�%��2n.�'���@Ϗ��V{!�'M�l����/�? ��Mo�*�Rw�:�7�G��������V �mD�ȠtT��G�Ѝ� ts�OJ�.�4���*Е��)�۵��:CE�:�]�J;�&�yE�/)����j�'��c���o7�+�~��G�������^�%�����,��U����j���*[`U��"����S�O�[6�:}$Ǚ�ߑ��:��5�Ϣ���%/p@��7F ��NI;U�%�xrk.��5w��%ǖ�.W���ݎ���u�~�-���$�'r��7���W^���w����T���Q����ҩ�ԫ?ر�PZ����]���Et�K���v,��f���륵:�����F��2Ə��TH�k�1��>��%ϓ�4�h=&㔮@xƘ��o�~�_9�_��Y�m=�Tiu<���X{��#�"�w �[<>�M2��1�j�:iY�+:��H��w��M��0E�t��dt<�9\sL ��(Ĭ�p����}]�v����з�q���ߠ�������3����H�Ǔ=�}�d�`��zh-�Q�=o�|o�ܑ�)R{-���z7 +��0§�ALw��S����]��]+�g�B��w�n�4;���i��K������O���2�N�&����.E����X�k�<����t��[��c��>��or�k�B@�1�K��M�뙇j�M^�q��?X��^��2��2��6C��jl�¶!ls�z,e�u�X~��Z%Q��:T�|NŸ��ە�G�+�<W/{�v͢!��8(-k��j��������ϗY}��o�)R ͯ�Ǻ���3����l#b|��V�+�]m�?:N.N���2p���L��<ι�2�p;�(�J�ȝ��*Fj�w(?���r�B+�*���6�A�|cV�a]uő�m��^;��oJ�TX������ZW?����մ8�]kx�������W��Z +�,Y�T�\Q8�0ֳjpjg͠��Ws��݂��s~�B�!:���0��ƥ�$����YxO�.�1Z�\f�7��թ��:�,Nŵ?�K���S��l;�&;�wi��{��OK�R� �p_ݏ��9�ZNw�w3I�=���.U���������=�� �]�&B����_���n�K���o�ub�H���<6-��K��ȍ��(H�O��w����d~������lc{Ϳ�������~`�2c�.Z�U9��ʹq�ƞ/b�첊�3�ƫ���W�:}1��u�>~��E� ����{IWjI�x�ٞnԬY�7���r���S1�#�c���bq�bT���n��0��]��5�:�d��Tܭ��yު�Q��J����R�P��vJ�O�q6u��)�h�N��*'��V-9(��Id?���x9���rn�E��g3t����eZ���^3z��L;��s�^�M�9M�¾z=��pi<h��iϢ�U?-�|<h�h�S�����7�Z���|�L=�t=�%�1�H�A�(��JF��S���,_Ϥ�e;�5�W*ol�������Wz� {�i>�h:sX�� wU-1�)��DVM����%�vr+�ɒ"��� z�/z���K����Z[�Jb���C\�I��9n3+���n�'�I�+�&*m.7���4BߏXZWp���>%i:-����uT��f�'�'�)�` +���)��PF3���Mwq�$�?W�nұP�����H�;�}�{�/�h��7��SM��J��=:ll��?,��^��;n�c��yK{���=����W�z�t��������-Vΐ]QF3Mʱ3K"���8o��H�䊰ZT�ώf���_xɮܑ�mN ���^x}�6��=�c�E��X�f{�t���TH�Y��K��� ��db�-7Z���69^��ۘ�z���=e�z\�\u�����s�kPBqN����e���M^*�.W}�N��kl3�Xc]�1�A�Y��W��42҉I;A���G��d����������s�J~%yB�̟2��f��^k������ +� T�"L� �3��Wh���ʝ��)�^*)�m��5�C������I�~��W�:�P+j4T6��t�ɑ���%)�{������Q!��w��ۺa-9+f��Z�*�Xp�"�)��ъ�y*1�6l&L�?����P��5-�ꥻPZ��ƭ6�)����8<2I�w�_�Ջ�_���,�H9�{)*��Z 2��NI��^��=` v����̽���p�⑄&�My\&���Ҕ�n�7�K7���h���Q��]x��,�r��y�*�A�7q%�{N��77[�Q��b�h�Sጏ�Υ=�Ws7� g�#E�&��&c˨�'�筊o���������w���κ�)N��)�����zۿ���rJ�e�G�>��8a��<��Lo��~Y{ྫd^�,��s����8�Ö�<uE��kE,��-��3D�EpB�7�5�Gs���B~��X=W��*1e<>��C� �B�S����=rkVUT��E��ƕ��OF$i�L�2��OzO���G�U�����u��<��) +t�ᚬ���StO�s~�o����� .N_'\��O��gQ��tXLw=���(�˨!�>r{���F���Z�TN�$�}��%R�*Ar��Vj�Z�f`Ԑ���T2�(sr��$�tj4�ګ�53� �S /ʳH1�����4�� ����#v\cjr����� ���m��(j4j,r7�b�07��3�D�<�&Mq2�^`=KX� �K� �,�s�k���@��o���bji8�`s����<�N\^O�D���E�����"ysy�ؔWtQ28�'��+���>�C���Ir�c�u����$o��eI8�I�'?��p��� ���V����\��:%7W����[�f��FY0�����_pd�f����T�*'l!w=�2�(S+Y��!���]S�������a����<f�)ᢋ������ ����d �*��X�X�x�~�����#�m��]���?�(>���e'�G�V�D=|r�ʯ� Փ��i�)B�V�g/ڀoLdVe�|ӛg�̩��ŵG���v�|Odh� +������ +Ht�7D������bD!q���N �p�~�D����AvQ<�u����7��r%����ٴ�!�T�>�OC�Z>�s{ݛ�Лe�ҏ�2[�cQ��5�]��%W1���e���� ����U� �a ���D � �G�%^�(�!�E@FNb���$�� s���H�8dʁG�����}�Ѳ��ޣ����~]�%�^�ԻYHg�Ӗ +&�'��Eڶ� o��u�(�|b����ku�"�JC�m�?�5O���1$����jp�*d$��� +OP�[���&w�r7 @ePY�(�%�@����e�Qz�q���6_�����Q��[�����q�=eQ��B��LX�<h�;8tƍt�A`��ѿ��CЛ���A���?��\�Q�qj����B���� ЩI���к��7ߐ�R��\�H<���3�������U����xh��w�x4�J��7w�E��l2�+��_�\��}��4�,���̊�@Tz�^V��tn��?��q��vۀ�g���"`RX0�������������[��C�SM�3.�;"����Ls��o'�&�R�Jf����L{��ʙ�`��-@���B'�X7'J��p�������p45���Hfmv�������\`�]9LO��j��f�T��{��xٍ�R��j�Qz�����E�h�!v�`*�?J1�_F�����Od��4�c�S�m2��ƛ�x2�?����Oe�� +��5 ���|�7�a������59k�Z�wm�t���1Gxx]� Q5��iw@��i�O���7|��~���W�+�. +���� r@���Oz��p�t%q�������vс��9-�ߧgxyl][l]�CAl���J>Y�m��hN��������۾���Kz�\����t�oȷ@�8&�|�7}Wf@!��8�@!� �� �p� 5u�5q���gr�iK���c�NtX�D��������?� ߴ�?� ��?"n��}<�tT���G Zm����Uh1�Z��F�@���e�_%����T�#��C��˵i��� ����������������>�? +�f6�K���'��b0�~�Y~ ���x���5��0��0�S��v����?(��D�oY���w2¨vg�;�/&��Y\�J{ N��y���?�Yh���ʫ��t;j�.u�zK�`��ھ�<��;��;�*��x3�[���]ExI�M�W2��q�_��ן��-��A߲����zި+�$w{��5S��]*Wܥ�jy�=�M��h�������gå<�Nuj��_�Zl/�Xf]�B��NO�vZ����?�&��(�2�y�}�a�����~|��i��xCϥ��>j��n����X�������>=x/�y�=J)r�� v�4$��Y�1��= +Q25b'�7�H�0��d�Z�k�L��R��nל�;��w��0�{�ɷ]?���W���D�e^�ʡ��}��o��┹g]�M��\�,�1 +��;����~P��lz�q��v�1�ikp�T˲f�қ$�^b��f� ݢfs���ozcS|��^��7ju�;�^��j%'�f�o��o����_����l;��'A���Ё�P���ߩ�w�ot�N?�����U�&����&��c1��j�S���a��,M��#�Ǐnm;�y�2�{�.���/Ol��QZV�|�=[E�^<������ +x�a]���W+S��B�:[�+�v��ٚ��Gc�^����v�b�t�[������"�O�j�(��\2�[Z�2^) +��&���9W c��N�r/���i��v�c�>��A����#;'�yJ���Y�<Y��_P���m��^;&�}�l��}�ׯu�z�'�wOZ�=츌�e]ܔK��p��C�܃��µa+�~7�3�������<���ܸ' �n�y��,f��k=�ޅQFx��n�nW��z���ʹ�x��a5u]7�/����H/]��-j�?~2"��Eܵ�l^�Yb7�z(_�F�倆��v�%'����F�,��<��[e���>�^&�̦��e�������\�t=��S���,Z�3q�[,���n�N���J"�9��ͺm{�zj�/���5�K�1=�����b��;���{�A��E����*Z�\6�wϛ�:�l�d�\��8)�ҧ��uTh�Z9���Hm�ty�8lr�D�M9����Z�����X�9c�e���\"�36�u� c���/L�C88P����Y~1P���f�!#c,�'�sT�H��z��ge�ƅ�̆�Fuc;��:"��cv3����N"��c{�0c㧕o��<��ۡ}�����1��s`�(7�㜾�N��lS�[TQ-)�)��V���^q��*��*ij�E/i��XH5��%*� ��� +���N�/~�fy!p�g����"a��5�M)s�j2Ʀp��$}?�麂W,�4�5�nf��j��(+�ݥ�8J�/�Bv����Ɲ&����pU��?i�|�4d���R��3�N#�N�*(��(�ů�Jc.�<6ܚ�O;/M��IC�Ͱ�� ,��zZz��e��Z��(ݲC(��1�� ��E�4nE��Yݴ8����j�������G�Iq��"���L�)2�aOgEb����3�s ڴ�s�5�*���-�۽D`+��?���%���XL�$�j/�P۲yQ�hv�ݔ���ug3�*��;C)�B�(�?��e&M�*/�����s�0����~���K��.�A?G���y��"���}�N%gA�{�5{�0ʋ�/֤!ZH�����^/�����Vt cO�fxKK��Q���������6�yq��q����U�ۓ=�� ��kp����E���I�~Qp�� +�5���ؒ�t�9yoT27�$����B�i�g�$�V�)U'�j���e�<I���h5�{%��vo��d�Eh��8����&G�[���;����L��rj�9�g̝eL{�n门��3w�S�Z�%:$�Y_$ +�x��2y����D��3��l����Kp�Dp�����!&)��>���%��xt[�Q�?��|=�bv[�}����ɩ�*��� �맪��% �9��W:�9k���z��H) )�L�i��"��tO����'>� %�̹�����K�B��y�U����8�������.Z�vP�WL6��zs=������D�K���.$����1�<œ,�/�5�"�sZ�4��I) E���s���f�iD�t�G,��$�>�R�_/�k�T�� v/\0(�cy��v.&�R�����',x�#�ҁAZb�&5����,@�3�#�x���y����ң��9)B��XVic�4��{Y*������i˹���>��5�֑Rq���>]���Ņڵ���7���"���艞�o�'M թ~ +���b�^��9��ߦ�`�9�-m�`0I< r`�L�1�8�Y%��ynڅ���r�u�̜��35t����=��"�{��xE�5X�������KN����0E{�� ���6�D�\����"Vm�%�.%&�I�N��4��l�����&l(ڼ6��&� �#Sug���S�W4�i��\J4�L�%R��<���6��}�����ؗ�W��O��0���A���߁���`!��u�x�f�D/uZ$R,��#� +2V���9���,����`�х8�F�>��0�w�j�qY�0L�[bm?�to��|��a�Pr�>���nE�~a)lV�X;M��w�l�)�[�ls����c��"6�|��wxC�Se��K�dփ1�J�9�"�"J�����E���)A4���g�����X��ؠ���QM��,�r鸴�,L���_p�<���)g��V�V��L��}I�Fe�uNO�#������6�M��֖�O�g�OSpI6�3�� p��o�,�3��6x�~������qp��\y���_�r��¯��к� ��=1�lk�!2߇��6(q�Bʡ'7\ ��3�5lpEz��ޤ����B��A�O� (�(�G��C���`���d�-}�G�������W�*��q������>��l#�']�j(��)c���w +u���:U�XĔR�z~q�}�Q��=�o�!�$/���O@�� � qW��H�!�%@<�.�r����D��X��XM��\D�TD�G�%����w�Ni�Yc���7���е����9m'�iK��^F �Nd�<��߸�i?��L�Kz� +�?j�� +&����U�B�ƀ��'@n�$ w�4 g�6 {��5Ed���ݭK��`&t�_����mod�%K.#��|���}�ǐ,?�09���?t��[�BG6hOEm��� Q�m�Գ�B<S�z9IJ�����iq�9�jMz�!����GOno@��vB�Z��ӯ�g�^��X�)?���0���Z��eq�ꑕ�P�:�"�`�� �%'�u �&�}5ؐ��r�c���ģ>݇�m#`�b^��>���Ԟ�{����RX8�Uav�-r�f�wQ].}Ҁ�GG�����Ź���Dm��-c#�5�{���n����������D� ����`��3`k�`7�*`3��&�V$C���0oE +�Vp�{w�I X+�]w#�`�\�w>!sj{�p���\�Q|j��O���+��Op�w��"�7�>�ޤDn��Z^w^g�F��`v/�J��A��Z�=pk3]`R�!�~n��:���I��SJŊο��Vn�;�� +����_�����W��1�����ߍ0zD>�@��@4�O�����X��(3 R$���b����8�����u�R��eΖ5S��:)?��e0�{�.�����t���x� i��̆���������ů5�t�ulk���;f��o���;{ �i�dW��9c@6[��,;�Y�k���K�(�����;��RX�.���Ջ�R�W%�_u�OR��lH�3������c��������z�}�w+/���Pϙ&��hHd}��m�g��Nܻ5�h�|6��H��,����/�_�������J�/��g6�Il��7����-�����N%`t*`��#0�$L�%0����㲝���7�6���7A���Y�x�B���Q�[{�ϥ��9p�O�������C��s�'W��n�o;�r&��3� Xmҷ�2�MZ����-�m��[��|��ɰ�����O��k�Wo��A�=M�>���x0'G}7`����S�����<��5��ѫ�8�N�B[�y��ijG�i̒�Mg:PO�����'x9����3�F���K�x +��^��D���>�����SO��'��[��X{5����ofr4Y�^�t)�n�������J�<��xf�ޣe�D�.��1�}A��Z��u�U{�X��X�<�n�0�w'_�ߝN{��Y����e�m�����i��n�A���Ǻ�GO�6�+�.��Οu9$=�^��l�toaJ0��DԻF�Z��ڝw�NJ�ո��if�jQ�ɶ�̯�Mv��6"n�l�R��U;��zm�v�|��A��� �-~� +�T����W��e���]�ZW/K���-�Uzů�7Z&'ү;�g��~ӭYz�6��LjDLW��B+Y�+�[�6��G��A�MF�8��Ǖ�[oT�I�.�s�A_t'�ώW�e�97�ӳ(\E:���ꩥ_���Q�";��X������n�/=��0��H�+���F����e�X5��S���]��l��� Q�ҿ�WKBQ8��0�=8��VP�K�µg�R�0x"������Ȼ�z�G�&�rO�W�\v�Je��+\e6�� \���O���_{�7 +i�������ʻ���i��ɥ�cᾺu�5.����0^�V?����G��=�q�+�o��K £�C6jC1�iM����:n�z�ӧ�RM�D<J� +ף����G-'s_���߄�~������5����}g�~�BvP N�s�?�b~��K9��"���*�P��3�Ʈ��;x,n�܍]�}����q����>���O�c�;ݐM$�[�J�RV�ǵf�Ư����T�\��0,t���a�����v08������X۱��Z��L�n1�R��){���Hz� [�M��tc��L��,BO;݂�K��z!9(�Q�;�=�������5kDÿ�䯯0�}�NF�^�~JS�B��V7�����ڪ�Nj�j;��qo�EϮe��a�Z�~<*X4�wTeP�]�8�nvY��p�ă�s��'����� -�z��к�&�|�F����<=���LI���z]�m�Uʍ�Ǿ�Re~�M�]��K�H^j0�s1i%$���l�6��d-^iT���+ +�C�饑��r�W�'<��.����Id;����IlB�� �4 �Nuq�v?�,n�+��XVi�˃�Җ]횑ƭwA�l9g�tG���LX��g�#�$�Y�m> +1�n��Un�B��Z�0�v��lū<?X�X� +�vs��)V#��b~�^��L�f,�_x���Z=/�T�=����~�]5�H�ft�<��g�*�N���!'����o�g��|ޓ��J/r +6���4g�q��\�'�i5KYƲ�c�E�~�i��4��W{6Η�b�yt��C{��Vt���k��}M����M���i���kiܸ��Yg����*Z^�Q���E�z��z���f��gu��1�#�1�f��ǵ]��֡�/C��B�h� �S������:�^UH�U�4����Y$��>f_����;Hߢ\�A)ʵ��J�kQQ^��I�<��PLNf���G�RX�z��g��z�1��h�X�zKw���4�'5�e�r��B�E��O�r�(�`IЇ6�W5]Ëڵ�s����� �ޘaV����r[��`���I昕V�Iڎ��$��=3MkY#BA��U\T�/Ջ#�(��s���p�Ԧ��G�;vDN*ڜ�%�I��b�<%�Gh|u��?^�,<�w�V^ �Xy]��� ���Dh��ء�w�A��j�f`�M-�����sKJ:gN j��{*�q)���.��%p�,l������!c_F +� b��B�� �t�����/nxZ�{l'��X�5&0����c�h�;VP�^�"��-&�#�Ot<a��%:9O�'k���S^jI�Xτ�_>�d��.�:��}�y�K�:�Sj���2ѥP!�=Μv:���e�!��X����� +��a���Bt'豺Y��4{E5�C�f4�SB���U+%��{����+j�=�Y"�a5����2�d��������*C��7��O![}dm���~��jm��/тD����wv�`a�Ij�5q!U�ぎQMEk�5!����!f��L<��1��!o�N�H��1?Q>@Z�@��3@:) ]:��=H �!*j<.�nm;lc�7 ��\$�vjzv&\}nE���[껠"�-)ٵ H�%������BM�܌�2fS�V�V�Z���D��l������@V� �� �_{�H6(G!�7xϩ��ŝ@ s�W�Sgy���0��o-���}��=C�v�rsr�fm��bWo�enV +Y[�k�7ɤA�BƩ9.a��`O�D/�7��9��<���[�K�� �U������D?� 3�~��U�����j�Z���3�J���Kj�w���ؿ.��̠ӯ>��l�{�F�-M���D��u��ߐ4����H-1uW!v�����.���{p�>����F�7������]��LNT?z�܆)�`�h���V����{0L轜+��rP��v^�B*L<=[{��t�UB��s�b��B{U����ϟ����3����a�Cy����$��!��!�.�1���)�c��v����l�4��ib��.Հx�M�`���" � �3�9���,�`ѮS-��U(���ln3iٙ�'�]iJ~�v����T�� +����84I�B\�OL� ���s��� ��2\Z�+���5�k��G��un��$1�ސ�y�Mw�M<:����;�O��w�Y��~=�;�J�m���|���t�-<��{W;ZMᵯ;*���g��7���d�����5�2@z���h ��h ��h�������q�"O�!��B�/��O܄8��|��%�����G����y��3��v1��]�;bl.Ӿ��)��Hf���[-E%+7�Au�S�b�����d���|\�~tK:[{V��\�@3w@6 +/@K���2s���5L�a�W��ikpc�-R^I��D��b[�۱gI��5�b�V����J���� ����̜{�M� � +�9H[h�"�#�"������?��5�×�O�D�� T�s,���J*P��.�Bm�#�f���T%*;@����SІ��þ]��k��5�A� ��x���*�9����4h5ހ#�M�J�y]�ʳ�I8�h+0����I���>����Y� �����s�;:Γ���g�����h}�ZP����_0�y��̵Ӟ�/X���k:&�z����2���A�c�$�:>O(���������� ,�&`�|���KSE���q_�6Q~����`��!`��7`�%0��vƊ�9�ɋK���arT�1��3xG���q�}"a���h3Q_ſC �3�a]���Q>�o��2o vt�nl!�{�� ��ҍ����+�K�K��{�x8~����i�y1ž���:��rEz�|b�@�J�<`��l������e۾� �����/� x(�@��k��]�B�O�ځ��?��#�9� +3��A\g��67O��e&�z���k��\�[� {ok�D� f��_����n����5|��d6|��W����;O� �pㅩA\ -�c �7�Fq +H���H�fH�g)Mř�e����y8�졂Ao� ��h��(F������'��OHß���l����q�O�o~�R�J�ܿ�wO;��7,P�E�Tc����j=*֍-u�e�E;�0�G��}#�����*��]+��m�'�������Qp����o +�e�~�n�5��KS`���d}<C�s�е0�����/�8ݐO������I��a�q��2���doGd���E��'�eƪ)^�^i���m��D�4kr�b��<����<h.�\����5�4�~���(������� ��^K<�˚��*{gح���X'�1��ݖ�����ķ?XwkD?��ΐX����_M�X�^ņ9����.��`��d�gu�4����1�c\����K��2]�e.�����������`�����s��`����������߽����~�?���{�������=��Oz��ߞm��@sD�Z� �Q��Qvq��y�:^���4�FQ���]�m���u��/qb��JIKC�(��n�x�z�)�ۋ���J�����9�����*�=ȹ/Pi�`Yc�Yz������ﳛk��Wq0QۓO�^Jvס�fZ��',Q��١{v����:�@y����VǤ[����ʃ��e�BE������Q&���7{ߵ�:�+���"�h��s�9�a���~��� 8c������y`Xm#U�$���J��9�O��vh��܀���x!K��ھ{=��ȼ�Jm��b[9��ںd+�6�S�I���M�0@Nœl4�=��1j�lc�KzQ〤*dF���t����4UA��D���ut/7h�X˭mo�i�K�h�n�0�1.�{6�BfM'\��ö���Q�l�� u82S/d٬k�Ow=hͷ�Ƽ&��/W8��nAwl�U��"�Y�eQc�e� �� LJ�k9�h.�)_�}�����!_Μ���L�+L6�`㉺t՝��-�����f�1.y�\ޜ���v�xLt��I�'�����2 2��|��6��ǘQ^�$כ�Lu;I���ԴhE��Y�.�ms���i��*нN~0���E��s^Ii�ۯ��|�8%%�h������0�M���a9X��N:�r�j�k�8�k�U@��������sƊ2�הX\R�a~*l���{**!C�$�r;�N�Nso,���;�y*�gWQc3�J�*�Q�n��s���_Ru�JKS��mY��c�HtIuL���> �>�aX�_���`���}Ŏ���"H�8����hq~�G�gi(����M����Ƣ�l��#+�jw�pɺ��n��ڜ�C��]k�y�v#� ��s};?�T�p���T� \t�4�q���T�w�������!�B�����/�_,�X~��b�����/�_,�X~��b����},��F�{1�X,�~k��T��b�����a��*b^�iaW��_�^S^� 5��d�T<q�F�\N�I���������/���uSE��i4�fn�+f6�ց�2y�>�.��j��v名ެ����M=)O#j!}_)��R���Ԇ��M-���+��/�_,�X�X�Z�G[ֽ�xC`t �!��{�n�]G.��o8��K�u�ӹ�Ϋ�LS��1iG�E)�O�)�JL���?�Yu�L~'0�!�y������ ?jN5����~�cz�27��n�C4���L+y7r<�y���j��@��^�z��߅�~��b�c�ΰ��������o��:1��<ɣq�� R�B�|���0��b!�I�C�/7C���K�G�*�y����K ++���Zƪ��(ӌ��A��Ū� +t�q�x@�R���Z����,尢.�N�z��\pu���E�� էI^z�q���ۑ�*h^�I��t�#���b�v�������/�� ,�b� +�U>i�?�re>-�R'�ƂR;�� U�v��!q>��t��3}Y3�D�ue�э�ݨ�ִ�o-V2�j�r�~�m�b����+zٵ�|�)'__R�������D�m�M�(ATî�#]�5�i��ոG~}YH�Ӷ>Y��R���U����|]����[�^ap-�9�z��9OŰܗd������e������X~�0>l��(�68B�5�pK$����L����+v +��|����q�O�N�y瀞 +��(�\��3����|���J��K�8_DC.5��䃡�۔�K���;��(~�f����01��ˉc�WüW��Ž���p����,��ა�ʜ��|��J�|M~}I�,�qdڷ�V�Q$�N�4�J��6[���D[anC����j�]�_����ba~��Y�鵼²I�s��$� +�Nu0;��NS��N.���І�]�|��if�(�q���EY�]�s��� +����dB�ZyFd�`�x����Z�FS��_\������z��L�R`Sl;c����2a���^9G�]*4�������v��U��z����쬟ׂ1������du"D�眽I����п�a���-��P6Ē�s8�TXw�����R[�+�ki5C��4�{�d�i䗦[��xͼX�r~�L�x�<��rro�_q�1�}�8mD��1���tq]H %9T�s��6�i�aS�vs�2��u~����WPQh3n�v���c��/B9ַ��l�x�l���]Fg���M!��\ޔ�]�zxL�.&�כD���0�B���jeE�zdϷ���1�(��q̩Q��3�3s֫���@9��[$��q�#��3^X7���=��������=mH��=#3�F��Lwr *�ci�V.�.���� +%x��1����`��|Ƅ�:�oD} w������m������YA�u����14�X���b + L(���"��F~X�ouf#����F�[�k���c����=}�)6M�2ڭ�J�0��[+���PL��Pi�2����tq�M�_��S� ��D��\yL7���:�+�Y�!��%\�'�X�@B�������O9��������D�;�S�ci��wF�'��;�K�CEٶ����g�Z���|vh����|���]$�z��\�ͷB�`�]�B_A93g*�P�q�GH�ٲ�a��&%�#�B��g`UØ�0�U�?�x���pǭw"�13-���H�E��S���4�r�uh��w��]�Y���A;h���&�|ƶA.Ħ�t���v�\şI��0ؽZ�+î\e*Y�Lv��xR�<�м�L���[���а`L�/$7�X>�].<#�U��p�t�LѪv�{-OA�K�f_�&�����|r_L�ؒ*l����zH���H['��K���F��������Я��6�ՌP�����(��Õ1p\g}i�%�#�;��?��� +<_2�m9�|�E�JajO@߹�1��mͦ��Z!UJ%�ڭ�O��8�F��⌎]�U'�`�b���$�'��Ƶ�h�H{�s��4�3�"��{��Ӟ$�5�P�}}2.��Tk��Ϝ��H�/�^-G�yC����)��َ�����֗9��}�d/�q�'S���nd0�� N�<B�K(���[�̙�[.6�r�cU<2QBH�#�5D�0����@g���fW���ϗʖPNȡα2�V�wk@��`CIs���;��f�f���������,wm��%��$Ӑ����c��*JK\��E�@S#�E��1��4��g�(�\Ι�M�d_RW����ܚ�KO#NϾ�4��*wJK>Y�5:�V�e� ª�.��p:�����c�� +���������*�-�&�Přn0wa� ���.���$�vB9#9x�.�{��{�f����Nq�I�و./���Q�:�}�2����/�Uth���%u4�m"������)���Ύ�C�K�b&�3ʵ�܈�;�5�[TI����'j�,a�p%����7yl����S��B��7�o �xW:�Ỳ*�6eVI��j���)��U��P�^μܨ|Tt��<��e������'m�6��e�a��u�[�ig��K�/�F��Ng����~�3>�e$�o�(d�p��0�BԄ䍸�g����|ɳR#�>�p(���ge �a^?����9k;���[7f��]D� +�����e�k��&� +��s�u�/���6d��`����nj�E��p��G�6r! +*\f���<�ø4�=�z�叩sIi{(����JzFj�5�YM�U2��`id�m6u�=��I]�'��ٞ�}�8E���fL'#�ss��u�7O�ʑ���ʟ&��:ȝPl����Z�O�7��{�^,� ���X�ͬ�Z�]=����ٮ��Ni��r�gG��/���<���<�E�*LMu�QZE���Cπ��J��4��������0���&�Pue%)!Ris��7|�-�딉�o���/���i�X�Mx1G��c��v���q\ʤŵ�Q/o1�(>�҇��5v��D�6�yX�Z�j�C�K[���AY�[1_Q�5��n � � ��#��礲��t�v��l/��{��������$�P^�֏��`|7���>����g;ʾ����O�x�d�o����0}���$H��P���<�d5{[5&;�����5�H�:�ڧpN�mj�1�q�/�1}�Ņتi�k+���UwȰv7jء�r�@����N?C58B�a��aC�F��ʩ� ���S�Ğ���#�5�0݈��������J[ԯnR|Y�iΚ;_�C:�`F���)���>�=^"N�L؞Key�kq�Ӷ�}�1C�ǿm�Y���43!4�Z�b_R�l &Pr�ՌeѾ����9�0�C�\+(E|�"Tk �^��o&�{,�i�,T,�u{x,�fW�e�Z�z��y�^�2��pQ`�f�E��T\m����T_�?�ۭCb�gL�H�p M�=g]�7q��jΌ#!��O��ܧs^�nW�Y� +g1�Gza�=z�s� 1��Ţz�j�� ��j �#k�$��Η�6�1�`w�@�Z䘉��,!�����2�O��*�����3�I��r����A���֊�ڐ3lW�D�h6�u�g\����KvN�A��漻���N���L��3��w��_,�}��qʗ +���^%��T�1�e�劖R&%��4�N!*}y�xb/ճ�~��4��Ky*F;�h��� #�)�-�,��c�k���0�����te�+1T��9dK@���eVV��$���:j�/q��K&>aFS����P�ץ:��,_{4��/�ҭ�8�Vw���uT�&���G��D��y�FΪP��k��[�p�����g�r����A�#�,j��*Ab��t5�YZܕv�Z�q�.����J�/���5�/K�3�Q�4�/�")w��ޡ&۶]��1[_3}��5�d1� Ey�)����q��'c�R��u�!5�����<J;']П�$-b>��Yr�f%9�s��A��ؐ���Z�}c�y�'� q���ؔ6��I���ax�3IH�̗~@[�?�K�s"�d_�P���Ol>��&���U�(k��d������!f���%�uFo<>�1\�Ik��J����%�X�rXv��4:Z^��N�v� +��e�i����Q}�+5Je�V�R�e.g�M�����e�J^ɷ���=� 6���l�v�#{��ڠ�����L?�DT�s̴x<ß���u1n����x��^��c�2�%��Ԝ�W���W#3�FD��Oes3�����c<$��Mq�1�8�Kj�c�],2_���ܬ��d���]'�^�J�ٿ`������ux2�2���U�����1��1g9����IJ�L��q�(���������>1d��U]u�w0D[�tWk:�r>��V�uڇ}�t�3�{���}�qi�g���8���?�(���ѩ�ħ=m�F�[�lD�(��H��=3��ݻM#gu7����. )�gJ<��fRҝ�32�·��N��x��IkS�)g28�G�ԗ]3i�h"�]��4R4�ʴ�&|��jc����fw��2��87�b��b�6:�y�2� ��U��Ǝ���3\��kaW.�6���seOy���&�+)�F4��k�6MQ��OF�ت��Iq+ +T�g֒��f�t㖚b�I�xʮ` l�a�у&:��Z& �ix�;5�3��Ɗ���uǑ���C���ƌ�W��i�hbe�wh�X +[V9�� ����+;<w��j��i�����Nn������:�l��i�娘ێ� �����_,'O�����i���U՝K+��U���N�.�z!�R��Q�'d��f�%e�y��'H��:��h%��3�33�4�F��=G9S5K�L�Ԋ���n�vu����F��'�`�J�L2g� ؑE����Q��b!����əu-���X��42�HzC�1��&�{J�~ù�Kcӌ�����e��b~n��Y���Nϟuؼ3F�����㘳���ʧ�X~�|��c��5�𣞻6La�S��r��5�Q�k�I;�N�.}z����kD zE�>�}q*<E�=,d��ǰX���ͣT$�ޡ��x�J�<�v9Q��W��;��휕�2�yB�+�s�X��Τs���d���Z���̗b����e��j�f�cW��l������K�Y12�|�S�cx��/���%��xQ�,�鯧ھ�r��do���b"�$�!�s���f#��O������B{�E���������M�����u�`�t]���UOXo�"j-�h�{Za¶�Ԕ3-�cA�+~�:+�"{/�8��D�AL3v��V���鋃�<LM�bٝ] �B�c��9�[R=6Ԃ����v��kL��8�^l��_��~��b��`A��Ĵd�v��B[��D�ݒ��u��)��f����]9�*�(��o�c_�a4��r{|�%�`vE}-��ː�$v�*����&��A����F +��0@'��sl�S�Ys����]vE��u��h�-�B �N�\��㾻�Y+������|ظ����y-e�6l�C���W��u��s�/�_,�,յ�����:���*c��1��@�:��_^���֤�awKOZ�AjQpW�nK�ϻ56��*rǂ�r�N�&�yp�OkZl���W���މW�l�z�"�t�Y ���V?Z|'�ѸY�]����`/I翵�o�I��Q,�_v +�d��l�Q��_,�X~������·�CT�q7���x8�ۥ��*#�A�� H���}����VT���k?^R6Ǿ��+l�ٶ]�'Ps������qɩ^:� �e��vT ���-�lsd�����ioLg�+/����}�$�duj+�'JM[1���7G�?'>j��.��������X~��b��aA��?��X�V�P�-zm��1GI�7{��i�P=4,���,敃��d5�5�2O��jX+�O����U�{j��}4:B�U R�D�c-�Ǯs��k�eq]�ٮ2f��_a]~������^^�y���a��5��F�;��� �u(e2��&��l�S<���Otti�����a�;�S�)�˕�x�]M���~t���c�p-�&��t6��;���v��G���Ot6ݶמ揱�_M�Y�z^����|߮��qr�ng8��hG���á��f*F��aw]W��vu��I���y�������hw��2���� � ��r_f��a-\�'f���*�֓X<����eV���_����C�o�g��y��G��~"f��,Ŭ������j{!~�j�������I0����̉���F����h�]^O����7��g��1�=�#���fg8��a����̧<m��s����.t���p�dg�+�;�0g�1�g����<�S����u��y[h��P�']�v=ޮ�D��@���l"O����Eh�V�%I�Mh�r���)Q��h1����鱄��r���'7�,��G�+�/�2ʳ�a{{NQ��ͦ�ێ����aHx^�>�>WIHDHN�� �誈9�a��lW�?�����9�<�/?��h��|5;G��O�y��j�n���6C�I0&�Y_��d �:�^'A�8���Yhr>�G���?@�|�>��Q�$B���[+��%�mq*�|9������wD���v��Џ��LX�s��:������}{}o5���g/�q��US�_(*!�O��U�bYH$Z|�+��~::?�x~�������y�@����a����������ã�( +���L�#4/^�J�i�߈����6f��j�oR2�K�)��c��u9�3%��?��������r��s���h��j�V����Ƴ?���)iv�����t`�9����G��fP��5n1Z���h��?���{0�?�1��Y]�ˣ?�xv��>����d ����d��?����En`t��������DG���H�T^2���_ ���w����U��~����@�����7��9ZϾBU�g\#��\,���`��S��R�)Fp\dt�����-���b{GC��l�} +x��M�<�I:9�`?���%Ϋ� �-r�]����ֆ*�T�i�� Ç�@A��y>�g�D�eA���{����RT���F���^K��rw����w���Ϸ�#3眈�j�c�%��.PL�� ڠ=^����(A����|)} /��l�k�U"+�5T���9�q��h'��u/lm����R��R��o�U������α�����;�N7T���H��{A�&��/��.�"��:1�K�X�!X���p���m�=/����m��c��NL�S�P58`ȗH�?�o�S45MI�z�Z���{b���&A\k�n��J���:�xC�E��ѡ.Q���M믧�K�d2��o+]l�]�M�q�8�C������H@�?뺷P��<��k����"A�z/�OT;�/�1:v]���0^��y�2�6n��$�������a���U�8�k���zt�:�;b�,����Fu�.`]R����:o}�q���ֿG���v�.I�ް���N��Fcד�Y�f1SO��G^e\�k�!;|�ǡ�Hl,KY��:�K~�6b����-s +�n���1� ,|$���뙮�}|%� +a��N?�{�����K3+�7�4��A�jo�דP5��E���)6�a��Vr�f-T����yeu +�z� [[�A̶}ڎ L�z����ucY��F�|�,⑹��:����Y9�2�BV��G5�A�;� ��=J�@}t"&�;GAO�*U��{j�R�p_��YzU�S�\%H�=E�7��ݠg����Т����g���ԅ�/�9���S ̅J�t6�M8�xuG�0��g!�[m�5�����[�5���GMdi/ob��!��T ���0��rh�N �&�D������!G��`�A1���`�1=:vq-�k3�D$H���ꀆ��lk�5Z�M�{��c�&f�� k��9�b\S�z�Q[۬�'�z ���d�Em��]_�� +�`J�Qi�8<j���t���Pu�T���1���R���� +����u�%�-5ѹ*i�=, -�7�wdzUK<��5��F��e#TC&�{�P���:�[��hύ�`y>?�1ox�>��ބIM����vD� �K(�ڄ�o1���x�4�����W�oVa=wu��e4�Dn�n�N�2LGȧ��0�MF��ah��2lj��ʭj}>�_z�a<O�Jb���ily����Ȍ�X�� b�.>�a,c���o���5��o� �o�E��B}sD�0�^D�?\�oW�� ��;�����:J�B�|$�<�_�����L��?~��L��h�!���P� b�8D8(M�B���� +��$�c�L�Y/I��K'@�u�Z���j�� QI��W��w*zK�l��w(�Г��}����݅`,��Y���|��ӉF��? ~�9bf��g.b�����|J�'d�.<�!�mi�:�'����?�X��E��ĝ�9×9���e�$c������A EH��v�4�������Z�U%h!�Jp� +)��gP��L��Z���K�����IL��c�����E�[l�/ 9]�b�$C�{�� ��1SU�n�iC�zf�fU`���� �ڃ�r��s-w\�5�]�����n�W��%� 6�Ed�c��IIles�v-�3T�C������|�х^ L�bJ�}�q4o��*�+�����L��N(<����h!X�����w&:�;���v����S�L�Nh���Uc؎����/�3m,����������!����@qݨFpM�o���s�<chZ���c�� �qK X��O�� ��~蜈pMH����z85�e������Cqn �$�5dC�G�t7c�tz��gy�#}����h&lW�q��h�%�w��a,�098�D�Ep���3�hj�=�<H8���}�Q�f��B-�H'��ρ�9=�v��!���־��ֿy���� +����*yaPc����Q6v�tk�6��xU��I�*۠�zq2Mʁ�9X��HO���bm�/�~s{#�,�R7�`p_��L��d?���#R�[A?�1���f�����˔����p��P�~O+���7 �fĵs��*��c�M�K�`Ѭi���@o-$T�W��?h�-$�J̱���X�h�&.�ٙ���J�Oc� ����e���58��w��H��p'��[3������~�����֓a�}�<��ɸV�Z��j������T��������`��S���� +l~�5���� +`$���Y;$x��1Ҙ�x�!�4`��l)��a^ɯ�t�^�@��W�0��.+;�*�;�~��"�"�| +ؒ��w鵘���mrJ�@�5��5�i���2�2�it�s�w�Sˀ������،���@��Y�gsφ�I�d���&����� B`�ל�ؠ�t����)�W?v���ֵ+@ W +�9����^�m\cwpߝܯ�`)9�c��wo:���,�/��6�@�3��&:���]%��N� �[�Ao����v�N�VoB%mq*Wuq /H��oL�3�T!6�1��d���(����p �YU**�\ي���[����5n�<d�$���K�+*K�V���/1��>�nop���p?XW\��Y�������/l���G*)��$�$����Ghs��ܽR�r��CC�h+���=�N�xz�NW襺֑�x +�W<��f������gCmЌ6S�b����V�[�5�����䖄!�7�|�`�yzq�v��|*�E�(�! +3��6�?��X�ό����6k{��"����2<DV2� 0����S.����p�]���*�c��'|�Z��ȼ��Y�A�9z�|t�c��Uɠ�k}VU���o�˂P��,s �g�9x0�@��%~���� �M(V 9\e�lD�ؑ UA�6)�GB�E<\�� +�)r7!�WB�u�^M����2��岠�1[�����K����-�V���K�3%�<:ob�����D�/����X(P��ӗ�w�����z����ӷ��<�����b����]�Gȣ����B�,X���h�Wm��Yx'��J%G�p�&��K�c^��^l�»���旒l_�6��<&5�sV�jUct^=g��(��� $.����5:?� ���B�v���<`y��@�����W4�+�l�,� ?2&��N�`'����W�� �\v��hFg�>tn��x?�h����i��(�Lap�����Se�n�oS#���m��5k,d�gJPQ��X������*�$�g���m0� b�B�J.֠UBs57@����XO��Y�NZUJEI*��u�c�G��!��C�9/�b�I�l�����e�� :;�H�Vp��օΗn�)��N/�u�+Ad���C{�����Ͻ��L�!�\R�������?y��m�cc̫�Z�$D;� ���`��!{�����n)mn�QS��26��{�����1g9�46N�rw�=�R ����iqX�9��c|���ӈ� +* `_/��?�0����.�䁻�n�� �V�;(§H>����i���hK8%���iA%o\��^Ҡ��l�v�#�۠�������}��괾1�v�̭܁9�5T����"�NLftmy9��eK�n�4J[�y�ٙ�zڨ����0�4�~2�*�ޮ���`�ʭ:}Ϳv�������`���#�\����,�{*�9c��lr� 2h�����,l�L��z�Ww:�ddٙʠ�%zK�~4�����̟{,>RƂ�^ ����3�� ��� �s��PykkД��h��h&ml/���Ծ�vT��oF|х�.����?ic�Ҟ�����Ƈ~z���N"�t*�J�/�E��0�^�Q���?*��gp�=�N�n�H[o��j��n���\��h�J�?�Ň��f[�p�H�G�V|!���]G`.�j̍�X��:�/.�F��7��=��cA[�k��B�Z+ݞO k��5G�I;�&�����%����#v a���ʼnVy�Q��8�L8�DS�r���� ��}qH/���$T�$�q��`� �$�ì�5k�ck$sV�~sY +G��x}h�:kR�d�]^�q��s�M�[8�Ѭ�TI=qf4���\\�Yю�[�E�ڰ�)��P5z��O�Q�|c5p��&:����ؽ�E{����h8�[��K)�N���6�`l���ԕ�ՙ��K��(����Ͱ���-6��lO�H�܆�Cr�������@قM�1wl4\��}@Z��=3�n4-�c���a��T!Y����1��,N����Hm��`������X��-�J-���XN�R�C�U/��? @ՔG���(\���Ȓ0.o自����V�>����������>����~D&/:�LC�g>����J��և�xM��x�eA`�Ä�GZev��G��VT W.�j��^����vO +&hb���o�dW����1�C������t�x �y��Y���Y�|F��厇5@��� b��}�p1�M�Ax�X�����ޟI�DJ�_83u~�С��F̨��u������ޒ��xPz|�x,��5��&)/�F�Q�?��u��})�X�):��`/]�� �U�ο�J��)#�M�>�j¿� ��|IH�EQ�b �~,9L�0��I=;�o1].ۈfR���it|W�Ŗt � _���������s�h;Xz&�!��)+�^j�u��� Xf{�4�)�H_N��i��Փ]��pB�pG����:yA���S�6��B7%"�06H#`�g�)����}�KD�-[/欝o ����J�r>{.�s���0�����s0�\��k]������*M8 +O��v����$�K�2��3au�<k������#�{�n�ς}�M8�6w�o�D�W䳼H��L�Fꕪ%��bB��s-��V�٭�BzQ�9=R�R=R�bO�`](h����k^�8���}��v�f��b�p&ȃ�.� ��Y�㞫�����|�iB�U�҃*'�D�\}"�B'����q�@,�1��6�ݛ?�jX�M�[��֤H�R�.�,&�U*R�m78�!�{�}�ipdw�&�a�R`X�C�TXԞ.7R��w�/ge.������O�]�k�:����Aj[j�`������.,�#�<�d��CQޙ\H�x��Aj�#�}. �@;���I`Y�fjG���*G$Җ^� o o�� �Xw�͵�Ų� "ղ�&g{y�7��#s��N{ą��v�c3������F�����F�:���s�̉��QYp�p�d��.��*�iG�U7�Lr��5jR�h�����vyeY���&�z���F�� �x�lqι֏i/�� !��!-`�@&�@ +�hs�ؠ_��8�� +�/�u�6�� �:��e��;2�\����rZ8�R�=/�3R�IH�}���[�ҜH�y�L��c�������1 ��-��h�ّVBlpf�_���5� ��D�2����]���L����G"�t8R9Wiw��H�-S�� +���B��NJ��3�\Y�0)~8�6`���=Z��NcQ�#:R��<�!R�9�shv�� MKq�`{n嶵��iA`�a6�{�l4�Ӈ��)�7�S �*�vu��K`�"7ާ@�F�<O� +(u�Ԗ�l=s0���}ܗ���t��5y�:�)w���N��<���s9�x�����������3���0��>-�&�$�SgR���.w��U'��5��n��M27��8]��>�Gu�3�)�b dl����э�}�O�Hߡ�}*A���1��|S7�K�Ow��������=(�~�6[�M�_O��J��R�Lu��S�B����is@f�{��7�S(�X̧��ڭ�0�몥K�|1xO�Ä6D}jE�W�_l��D�����G�G�l�� .y�E��� +���n��U�a��K�h9?O��+ -A���w�w��U������ϡ(\���4��e�9y0�{f�5o@�ʔ�N�{��ܸ�5@?�b��Р�)\*R���Aj�C?�C�Ǩh��6/R���M�Hq?����ބ{��֔��ZQP�:�� +�T��?�����r2�����5��!մx���̼H��C����1Wh��y��z�3��/V�=FG�[��H����F�x�/IϪx���H�MQ����uG�#�A�h"��Ně��m���]~�ǚ�{�=F{Ӷ$���a0�n� Kp���N����ogR�(+AR'?������VQ1�Q�=> �q~WR����w%:Q��F1���TL��)��g��@sn3�n`4`j�#� +#��^ظ�E��G���8��G!�U��#w`ȵ"���7�:��Έ́��g">� !��Xچ �d�Ռ��ƕ���T�us�Y�(�4rdwf��n����Y$��� ���0���"��\�����\A�c~Z��A�&�~�+x��P!bQAQ�B�3i���+`b�ݣҝ�a��Y����]L�q����<d�n���$]�h�G����c���|w5b�ԙJ����|; + ����]?� /�h�J|��#¦\R��K���T��8Ω�R�X�w�f ԫ�W�Nd���ΡDubf5+��곘=���k�ޚt暔1<�]�5J�y m�Уi�P%E��,�.�x c\t�;�<8�p��� +�E0��i�[�(�+u�=�ɚ7����К ��d��@3�c�%?�r>��l���:����� +�Ǡ(#s�&8��O�/|��8̵fdYaK�c/�4!��I����7��A l1�O�����\7&���bR$I�`�h�i���i��WB�xu �y��B��А�}��I�X:Q��|��Qm~Ҧ��i�GĮ�yE�Dq�cf vd���g� ���������^�u�Qlp����m�i)�3�q��9����c'�q�<z,�\JEظ�sK�5 ��T��'�XG��1�D��:S&�uX�i�X���<�e~WAr�)�M��k� f ������s1�m���@��{�O���5I��p� +�q��ı�3�]~B4�.c%� �� ��#$LdX�I;` � jP��C<h�Ġ8�H�W��hл""�䱲�H���8�w���U�$:��lK���0��ϖ_��^C���5� +F��X�����%����c��pf�B��D��y�q�µ1�E<�qN'�]bGH���~KH3B�����#کإ��;O ���^� +SF��A�]ʽ��S�Fߖ���� p�>8�2!��Ӭ]�q�]�B��^�U��� +��<˶�Ա��E�" tS:x�MiZ����`�kS:�0�9�E��%Dx4�m�a�7BK��P���`R��~kj�ID�n������8'3̝�[�ҷ<�X����7�e�ϰ�:n¼�em�'��e�a� +�ߠ� +���,�O��E�h�A���gݬ0� ���5+ˇ�`\|���N�B#������u��&���x +ݍ��O߁�'�\P����T�Pp� �`���8���y�Q'@���noF�4U��{E���on7L�3�<��%�z��I�z](�܂��Ѱ4�e�{zI?�$"�0��0)%���f�����>��j��-K ƥ��h|��� @�5�k{ �F�����W��yV?�q���C_0.��cԣCn+�L��g!����8��N�<�����k�yAX3�=\���R1��"���3����46�?��������� �'���u + +G� +�ǥ~s4��#�^A�� �e K"��1wC�7�ɑ�� G�2o��h�����}����xL�n�x˵�E���=}Ӿg����p���v1�;�=�.����}������[�a�$$��{!�{e��I1���I�<��@"�i����g��$TR��Tj����G/���-]��BS�t�Qېb�D��s V��k�rd�q��"��u�8�x��%�#����-E�"��1E�C~�I3����hPD�}\���8)���x�e|�\�-&����� eQx2�ODH�����|g����� P�>r��-����D�Z��[�����o��9=r��̗�T�/ �h���C�>����UC'\A3�?QC'\AǸ���5t�t���:� +:z���k�+�Ղ߮���� �����cT~��N���u�:� +:\�?PC�~�ZAGx?��·f�W~������د9�0Q�rv{�v�Pv11���p�0%L�b*�L:}+�D9I�2�ߗt��m;Q|��U}�N���Tz��]Y��1,G��o�Q +F�Q�?��aQ��8>��ߟ�#��(v�G��.8$#�d��D���9Q%swv�g�0l��W���_�J�K�M���b"�"�Ʊo���e����Y�1;�3�U��۩ \5���ǡ*X�f��� *� �s2�#��z���YC��fl>��s1�a�������sl�O�� ��|E�#Y���P8p���H8�� ��o�GF�����r`t�9��:���ӄp��{u|�W��u|c��9-h�_�&cȾ��B���r�!��e"��� +�ȁ#�`��G09�f��wf��pٖo�{�c���;���W%2/��8��^dտ1IF���(��L���� +Ap\��G�L����S����3bmY��<������"�U�~�ً1�}���6�7�����H2�=�������z���0���Q�+�n��f��"0�n����W�����.�_�O�W���g2t &�R�i���T~��iE>k���w|_�J.��p���FE�٫�w����o�c)\�y���$~��x�=&�N�w�65?V�?����?(���b�DD�*�ފ�V�Y?D��u�B��Gd��.-�a�OD&����CØ2��Dd, +7t�_�.DDdҟ� �(�Gd~r�Xs� "\����?���#̫����X�G�wRJ��,�u����˙Wu�/�e�& +K�����%33�!�g�8�l2�JG�!�Lͭ��Ԟ�.!����@ �.1�f����.���4�{7�uu���^eB���t��%e��/�똉zE�9*>�W���=�[��}���, �}��<&��u��'���I"�"����p�+RRǪ�f%8א�Σ���X=�|��R ��pb�!�y=}]�q����c�W���Xֱ���noo�X�B��Gr"q S?��oV�Yx�M;�2T#��oU��pП��v:_��k8��z�2���̱`:O� ����:iY�Ϊ��)�ua�q��Z�����#�اR�[ǧ~�������|�6`����+�����#��ox4��X�i��Ew�8�|� ʎa��3�CM�w����G�}�jaP��*RG�1�@tEj�3���'*R!�OT��z�OT�B8?�H�P��|�@���jp]��H2��c���P�!�Mq-Qٶ?.�c�b����k]>_ +'����E��J)�k���p�W7�|����ý_ +'�0$j�[B��{7�GX ��������"Ɖ�c]x�l 0Q7u ��oi�~�$)֒�:Kz}������_MN�W�l���{�C������A}J/��r琐k�7����m}4�ʧ�Xܥ��U14^U�x5�hE��V5ڎ�������� �H$l��&��}3B��,s�Wc ԝy���mΒ�H�TF���3)��g +R�R�x�����P���Q���W��vHa��! +V�%�. +Rf?3���@�,v�6��G_BF�L-Paw� M^�:�g�Wag��O�[��®��;� U��U^�D��-�|v3�Z�R�i,�I<����)�πi��J@\I��7�������GDk7+�=���H�IFU�vS�.��ۖ�� +ݥ�dۊ��_�g���9��X��ĝ5�cu1(1C��](��{�丬_����I��!U�W����I8ERt>LTD���)���'M����y�a�u�l��DԠ^�x9$bߏ��L)0$�����%1{ц���J����FH�`?TM�emS{�|���+��f|���65����͓�W�q%���+���w��j�`߷�V�}7j�^5��F��OT��w6j-�C�?VM�uN��0�����.��j:����V�q����G�鸌<��j:������_M�̖��t/�%}���1$2���j:��c�l��j���1�?YM��^_��j��'����㪥���^ڄ�PLl5�(����������}�������)���t\�h5#��㪥��a5����~��� �y���W���t\+�S��j:�Z��~%/9D�������1!��oU�ч���H�;�'���[W7�{I�Wm*E�b�doY���q1�օ�~ub�&��W'�NW�sa��N��KÂq��@+7V'����wfyݪNly'OZ�J�t�v�1$N �L�xsH0�)N��zDS����, +ב�}Ŀ����ns�I1f����K�m���3��6wbb����;�jt'�����[���?js�̹ht'�L��͝`� �4�����۳_6����e�;���3?���L}�vbFle���}��8��]�i~^H'�y(.�/��AQѳ���,T_ȝ��VU�0����D��#PGT��z��P��ew��xjᠺ��Dq��_�Y ��-��P���\dQ�P����n��r\�}���[=&�ww8?��šP�<Nm)�[}?�h����� +;i��s�`��&��J1'`�b�5\��_��HRRI>�_4Z�Gk�~x7����#�)�{���U|C�,+\�FC�(��U?�����Ƿ +x�:!���m�~~K��/�.����z���*ex��A�B +���Đ��ݷ�+��p�s�@�����,�w"��E�;�?�'�w���rw��^��w}i�Ny�b��w�o9�D�;����� �M"�X��c3�Z�������U��3��{]�y+s�KP?Ϲ���$"���}�cJ9f5,oӫ��.O(G���v�e��[�Y�L��%������Q8zEX�ט|�� v0t����oe�@P��*��^m���J��%�b{u�"��&y��X`<�kp.b�x� +3�U�D�cӐ�D�~�;�!G?���Cyv�E�g�𝌼Y��>�!z�qm}�j*�{�Zk�8����g>��Ѐ�ո��0���Y�A}��#�ːu��8rH��xK��э)6�Q�,]�t���0����D���kv�S��/��R#Ǐ]�V����Hi�py�U����}�ܑN����K�/�;߆n/R,�i�*��r����Q�Wz�VW���h�G���k\H%ч-56,���iJӊ6�z��ʡ<Sr�-�*G�:���i;8+���g��Ue��!�|t�W7@�P�i��ltW��y�:���J&�2R<���L���X,V��WU���od �M�3r�GT�D0�����}���|�����̬��q ��p��@G�� +�j��O��o�M +w1� �6�"$|�?�7R�����k{�m+�����\r� � +辑ZŠ�s_� ��N�W٦���ĦV���*�E��h~����Vn^u�N���w���Cb�%��:Q K�=y9T���a��2o�k��*��3�.)�/�� �����ҿH��u����~�q��w�c�_��}�Ⱥ{F��� W(��ǭ�܄������H�XL��+�a��k����G�o�9����N��z+0������<D��XO����̈������4(�Z)�+��u�*ӄ�Z&q�L.�je�����W� *�� �?Y��t��GFGE7��rr��a� )��u�+ +("�$L����q��Og�oL�q^�3����y�b/N.ߣ���oL2k��R�U.��̾�QO��� +��8��P�f m5�wk�{U�bk������yX�U(ԁ������P�U��de��U(������*@N���_U��#� +0H��=+Φ|4��5���U[o4����M��ϴ�h�G=���5�c�G�o4���aS>J��ؔヒ�w�� �7.@'��팏���P���'�n���{��qv����P\}��C��U����㛚��yJi��/���O���wC�}�>Q_��ZzM����1vFW�g�ty���Y���lE�J�o������'�+�}���|���pW?1����f͗�"������@_�;u�+f���ݾ~�]�x챷���]���rwjW?�8���~?�1�}�D���qͻpW�w��}o�c����ru��;�z���p�w߄��� ���� ��)�Ⱦ~�Id'#�}���dw��[�I���~T,�~q��kf_�oW�}����{�������{��w��ѡ0�'�ۏ�E!��~|����b8�{���pW?�6����{�|��������!���=&��߷���� w��P?��#�ߏćҏ�G}�P8��cU�|����� |����~�5� ���������^_?a3G"�W����[�~���Y��U���~|oG������=���+Z_?v8��PC������p1<�4��}���Z��\?���(c�Z�]��}���vʺ������N����cPLd&�}�^�����'����}����A,������G�6��~ܪ�~Ȃ�����~�'6�~���1.���wl��~����G>ɮ~��-ŵ(��Q�7�J1rlm�͡P��K�.Y7*��?ä%��b���4~"h�a�}Gj3O�d#Q����px3f�E�4_4{9�͗�l+i���W`���A�멤��?e��{�q�9Z-�e:���\���i���F>���"��na��;�Z��a�9=Ie�p*�N�V�a3X'�\�i��R[6a�˛Z`Z����,o;�ճ���X�kY��ٸ�ަ9���i�8!��ޞ�6��¢Nؑy'��ܖ��Н���+;��j�.5��A�yq��U��3a,>����]Y>��.���l�.�},A.�q��(��|F}�`ɺd�����|�`�9��[�ЪK=������PF��x.�,�"�P0��"N0ݫ�|�(��3]�G�YQ^oW����W�����o��)�%MߋC�7�h��|���I����*�)fS��n���V�PJ�x2�WR�[��E ��ܢ�����ό��=�ʂƫ74^���K�)�AK�m�Ol��n(i��q S?����s�I�q�b�V?��J���B�C��4]��L�o`�ŭ��Dl�ok�q� 3^�0ap���F�AE�d�ͤ�cǀ&�=��C�����:��P��`��?#�����x̜s�ILE�[\�L�L�j��M6'��wh홴�'�M��OGy0RD|���9ܮ�R| +>����0y P��)����Q���&�zꃣ�3���-����)iϚ�uɛ ��>�]�/��&h����Q�U~5L�*�W&�����ag�$Y��I��;&��؊댹���WQ��YcwO�H��Q81��P��VWP��G+E��;� +��������(�xu5���Y�!Go��6k�)�6`�����;�4��Ys�n�$h���I|��Ѥ�w�@+�N�ম0G'�m[3��n�>n��c�р�f^� �`�Bxm�ۀ���6����$졦���J�g�~<�>�sL�˰!��=���a�� ��d��fR��S�<�u"�@��}������fw�=#> ��\��c�(=�Ģ��V�7-��]�1�P!R�ţ[�$T�vU��>���k#���h'��nBy�O�AI9��(�74��W8�c�p.�l��{R��c���С:vb>u����u�����4����f��72�q%+*- +�� +悩 �9��ē���+��U�<�b� ��[g��*E���]��:T.In��$�����F���#���8V>Ȩa�Ʉb��}93ZB��d��J��f2�z,��QOF��Д�a�fg�BdLT�>����{�q%�~��18[�,0���Є&595Ml�̙�kU)WI���}���==XZ�\�~+���-�P��+=d��?6�ꬔ�3<5p�;�������K�t+m�E���.� ��^L�m��f�Ww�m�>��/6[��$��w�ʴ����H�W�s���z[�X� Ŗ��$�z�d��nē@-.��d��i� $��3���d[�̦��5w�yː.�I�����g�h�n�W����X���Y�l��g��;9ȓC]hr���b8Q��J�(>НH�>��mP����5R�<*�ZIZ�\��֖M%w�\Q���m+��!�Dų�{S�'�"�����d�i +���M��q�<���$q�wl��f����Iq���\�pA�����kX���.��w�c���Ρk,r[�j���G�p��ُ�zʝ3#���4��Ҍ�,���c��?����)�_g&�~��;_x�t�O4�����[{���G��(A~�O���IKne�Vm�������1O�K���Η�L��|~r����"�ܫ%�Y9)e��X��_�%C7���L�g���7rs�u�h��y�:d��1�AvN}�S{8�_DŊ"�7�+����c�t�i�|��΄�tXʓ*|h����C@�V�C�wֶ֖���~��Z��p��A����3��֊�\͒�g�-��gt`�a �~J}?�i�ه�I��kP�e�be\�K�O�I���[\����Jk2���2}�mc^��gW-x1Oy���7����.�=ި�_��݂����,�O �fui}.�D�VS�n���W�o�oz�C�e��y��I.&�2jm� q��ϟ�<���I���� ˪q��v~�4����*rR�uWZ@�ѹH�Gp �hq:{6fM{[���q2�ZE�q����%�fO�#����a��8��D�j�7��r�+t� �̩ra�c�#>NV��V��K`v�y��4@~���z���')��}1y½C,11yNl;_�t�IO�2��p��.���߫ ���[�0�{���_Ӡ/[ i��]��,n��fщL!���y��R�eGR�����-�h�2�Y�~Iiԥ�|��ב��a�g�u�l��}���N��e�`}5��Q������``���3�,ND�*�אL�1�̓�jEGn9�3+�{[�{�@���3�ޮ����I5� +S�WݭY�ϱ�<1p���J�\|�t�{11tF��uSD>����!rߘ��s���ͪ�v�T$������72e�9���5�ޒ'I���d�a��5�K�(��)gH+N$ nܳ]�:7�������kr|#6�ɱ9�'�v��#��<�ϴ������(����(�����Y9�37��a�A���7�a��_��n�m�q�n�D��5��ZҞ��v'���S�v�/�iQ;;��v&#'�����JcSY�'�[h��`�-��I��_����Ò�x$[o�^�O%�C-�G-�#O�᠒?��6�����G�ts��a$�`.�qI������s�t�A�� ���?�V'�!���Cgu9���[�ަ��hGw��6դF;��;���������_,�ga�� ;R��w����U*����ҊW��;�]�Ĕ��i��G�4������e��2�ON����'�Bw�� +���G�.cفʤ��_!Wo��t����@��H�M*�&��$2�e������Fd���E���n�m���<�������r�'��*�_Chy�*��9�(VQ�B�r�(~1��Ы(~ 1o�UT����"ʜ�VQ��gl����@�l �94>*�B��לAK���.�,���CĜ`È��hԷ'9���],�Q�)x���t�np����Z�O�K��L�f�(�D3h@3#�(�|���@��Th&$���~d�� �l��E3'�fay����lG�,�6�%�!5���;�8���*$$����q�{QL�6!���v�G��d +b<���}���FR��$>����z�my�� +���:��곣�,���Ҡ$�PM%��Y�+9E(À���\�9L��=����/���+7�2@�߭a�K�'�P�bb���x fxl<:OÃv�Λ��|x���wp�`�7�����n�s@�f�mY�ۘ1H�\.�{n۩n��|X��A=��5ܕ�{:$U�ٖ�1����ɭaE����C�\� +LTʵ��g(��l<3��#b����a��ig�7���{ ��ʵ���&��_e�T�>6Rwt����(�q4b����J���A���~)���L?ܭ�x�ߦ9~�ҝ�|���¬R���=�UPj��'�B����@���3z饂9�hb���n�F�ɽ4��篧��0��{}������ޕ������k�)�"�䑦J���SUz��E5},���ҧ��#L�������n�m���^�>�>SVO�vY�h���|,P�|F.</�R+|/a������O�~�8Yly��I/n�^Y��.f���hB���A�~���Z�99�B~��)������/��w��U�^Ϊ����&6s_�^�tJyo^���K��|���h�(�W�jj�'��T;������Wgľ�Xi� ��q�R�S�=d�����s�]ɯ� ,)t����gԚ7ؚG�-������ 4?v�A�����-wkc��`��-}���A�\� +����4럒�C�H�>�drPma���iu��~�u���a���z��@�"�!��ڠC��8+��+4_��n���x)9E�Wƻ��X���+�r�SJ��/�"��a�n��M�[��X�n��XK:�]韍A�t�?�N�%��7���X�}|q +(���byo$B�H8�yoaK���S��Kx� +��a���ew�NC��� ���\w�5GB5T�`���jNjט$Zc�q\c��Է�#���#n��7� ��͆W��.b�(D�D�6�C��BԎ���7o6R-*���2����[�8���&t�nxl�2��($؟ٙ����,��(�?�ު�mpO�V�ڐ� +sˢ]�"��UIG,�ID���eQ^>"������k�Oejve��sq��s��@��R0coɽ��y`_���d9���,���3ЮR�]%�.�.��߷5��/����fg+f�8[��v��B��0}��^�[u�x�?�6��N�4&}Ƀ9JG��A�� +�"�vZ���l�6�\�){ i�Afysߛ���i,��J����v���k ��q�]�fiA/�er�w���WNh�IXE��������biw����9&��*�S9I�Ծ�ƽ!wA�#��x ӽQY ����R�;�6*/�M.��w ��Y�B��@�Y��ʲ���7NjGп�?8��Ԥ�3sxCF��?f���;��iz�B�&�����i����X��.5��=b�8]�!��E����%�7�o�ª�ڠ�<���.l���=L��-��{�/�� K,??�*q�o���K�7B}�m���b����*�B=p�D�k�e���?��v��^�o���ngg�u�mٿ���l��m[U �z��iLxӑ�K3**P��Ri1��g����n�V��Zk0����Cy~Q����`���e��!*�t���:ra��f[I�ג���h��iۙ{+�s���oT�����L����ۂ/V0�uT�/�AU��0u7� +�I��i�Qׇ=���TM/��<㰁T�o��"x�Y�mvCX&7f��d|,�2�Ln�,�20��xY���a��@,����њ1�g�,�~�|l�,�20;_��Xe`��7C�.�Q�픜N�@�Z�?6�5�R�έ��$�n���e�������=O���@�U�,>� �1���TK>��A/�@�4�$�n5�Buj�ڿ��Վ�<}<K颣�lK�h���n��L��;�K#y7|�79�� +�D�rocv�B<����uL�r�S7��'N6#�K�)�SC��9i��nb��1Ͻ�<��;���'�)AU���%��y�ߞ�.���M�>{�2�|��R_m��m:[��{/;�4>�ӥ�jv�{y��21�<[ӡtN��[�{~���!�sEG�@�0��/��q��h���� ��M�-0�x�5�ބ��~pOo��o�l�t=�fl^.����+����k�\A�f�r�$V+m�>��?R�x���|�r˦L���4~s�� wY���fHp�L�~ry_����I���2}��0�P���<|u�QZ�-��J��<����l��#���/���[-�����s�E�R�,�{�� �0t�9��2c���L��[��C��d���N5����w��:�e̘.�ba�����hY�ҵ��J� Scea��%��0��{��Xe`4��xX�sm00��? ëR�0��2�fa��W�XX�Ok=FF �)%`aF������!@�FQ_�����p*��0��ZlSx��u�;��과x�Io�c,�-ݭ�4�,���R9M��(CߞQ������a��s�aX����ks}4,�20�7rV�Xe`,R8!�ZҲ0��2�1�0�]��caN���0���&������(��`��XX��0���O�Q��# h +������}�i��������h�?6�Q���S�5oa��V�u����vxE�^�rnd�{���q/����X��z!�*��1����g�չ6��N��x�R�J^�>��3MWSd���cM��(����7�%b�����><S�d��Fq�X1�H�hk{Lq�+�#��"�#^kp$��IQQCҜ�N�(�;�[��~H�t��F��m_"����|�<���2}q��h����~�ڛt6/e��^W����H�7�/�5�r*����/eot�[lUp���ӴCхgޣ��g�v/�:đW����AY�˟��YrTG�!u*d�?�8����{G���^&+s0�g-�]z�1�QU��hfЌE� +��,�iƃ�5Z ��d�B��,��ō^«� +�x�\�t�>�a���vh�[�t I�WfI7��#z��X;��E�q��n����]8�xy��J�>6o���k3��?�Kw{os�\s��1�t����|�9�c����ktշ�x6� +"��7$v��Gh.�r�u9�ڐ�=��5�Qz�A@����*�����X>����6CƇ���<3������c���8�ҡ���F �^y�܌�N�>V�}�Ձ�ô +����<rU��gX8���uɹ^�o�!���^u������P��h�����ߩ����C[?�V��k�`�����'��'�W�Jc�j3ƴpuZ[3Y%lH���Z�e��H9�U +�� �%ЕH�(^=�����X��E�~�t�����ˡev^�l7Tz�V�y��}�� ����&̋�ŹZ������}����3�� +u���[Pպ��m�Kny?oJ�r#��d��n�Lޡ�Zaa�=���r�ˬ ����S�RN�`���,�*!��A�\: Ya�V�6��O*تP+,L��Za�7����$�'e���l�lP�Ǣ{�+nXFԙ-�$o��yY�d���z��}���b�Dfǥ�>5��*��������վ�3o���DaELV��-�/�5��%�ɍٸ�Hi.�N_&��OۓGވv�\f(�.���id�����,�kW���� �bK�r�~�ȄB�[��� c�mY�Ʀ�:���1�������.��~<g����ޯש;$|���np%ΌH�R��k�;��އ����1��������r�YQ2�r��}�����Z��0(��<�#P�켴�b��FaPK�������,Q��:�#_d[=:����\���������J8C� +��ό� +8c6?u\ϖ�O�e��7��ǟ�ٲ���������[<� ��^d)^X�k"����^c�zaqi��?�����m���������^}�3��`/����>�N�oU�?�Ʌ���� +ʱk�J�KT�d ���a�Tr����Eۖ�|R<���)]o�t9��,��t�S�=�-�^'�ĕ�J�+'�Xı���(䇱#�(�����@Ä�Q�c���٨oY�R<?d���Ȥ�� �r�\̶:��up��WC*M��̀0�}�K��N9P�v��j<�C�8ƽ�@�i���xmo�^0�*�[gh�]��m՟�$�ԴS���%в�fz�$(��s 39@)��ś�uP�S(O�O ��6�5�q���U�#ߓ�Ԓ�9�Æ +}[�`��ᯏ[�� +�x=�#Jj��}E�O�.�蝖���L]�֎v$L�� m�ް5~4�����/+���1Ƚ�Au��H�t&�l���M*��(���D=��c�N�c�4���t�ޙb˕cщzQ�K-��s�O�o#�x�)�������1vtZT����G�W�����k�@��F�G��f�Į6�Sm*L���lm�S��~���FU`U��w��A|+�l8�%Wϟ������ ��G�p,�� �tW}W�ᖈݲ��P���l��:�fl�C��+�z���L��Ó�9ƥzZ�M]�9���"��(ꛘ�gYi�WS)F�Z��������q�%`M��_Jo��\��&'���^��A�)�@M_2�����Au��u2����*��t�i���&�Lg'��\;r"�go��2"o��jᢿ��c��4��xupю�X�*��Qn�q��T3Ժ,�/xێϐ+���sج2��w �3���x�خ�Rhz��g��@���z�`�K?+k����:�rA"E}�F���=��?�h��7�[4℔��,2}[�!&���0��{�Q��� ;FŽ��G��%�^���E}0��A껜\+���I6tNY +�No�Lsۮ�qJ`d�}�܃�>:�x-�hR�:����D��G�#Y�_9S\̷��zI�+#�"p��h@ �v⇁c��/�)F�@�Z�����@XɱF� � �ꦓ��2?X�e���9��d�����֧���ס��Y�t�U=���)a۾k ���0���Y�do��1Tyi��&����mrm(���.9�W���f2>�>3�����.a��^�ST@�����*F!�'PE�RD�"�B����e�X!�S�WD�{FPEF+"��4C�HWJJ�����&NS��_��D�"�5�v�O'�Fq�%��1�y�2��f2h����m��sZߴ��t�������rm,��$�����6��$�Ar�l��z��E�ܓ2�oC�T<�I�ʯI��lɄ�ې�IM��m�-�Xy�g�P�8��`�*���uۨ��׃flt�$j�M�tD�+^���(UB�� +(���db%U:�Ū��qh7r<�G�#�]���er���鵃�\z�`j�`�>_2��I��}�b��0���|3�9�,x��h�����u#�#3Qn�A]�R�ō|,q|+7�����R�Sj�g�_��R��f�mMM�_��l��o�ۚ^�4D"���@[*�,5N��Nz?��UNJ�m�������gW��s/Ksҏ)�+[�yu3�<n�,��!�꿫�����G�r����;�I��~)r1�A���2�>��%�+xB�{M.�fm���C �'=�ܙ:��~��ݕɍ"摱=U��y�v&�(�Y�y�d�`W�K������2E���z3:���l�D�d�9P�����NjWNņ��Q)����k�.A��j$#��-[���� ����k�ڳ�9��Z���B/�䫳\��Vi1������n*�gw�9�Q,v��!wH�홛i��i�e���+�?�t<6j���l��;h�^�����Ԫ���)]xF���k�qr����O��C�\��!��8�+#��p2����S �鴃��鵃���z������HP�1'*�ph$h�� �1�������~I�:м=�!�#H뀷eE$v(�.���$�+�y���#f���!� �Y]��@����@�urx����(�M[�~}7J���#4�f���#4�R���;Bӯ���~1�B��0\dr��_�V����� �kU��~��}�L����[Y�3ޞ�4�+C��K�"C�}�*h=Hr\��%�8�h�̯������0����Cu�P̗t�P���C����P�)��s�~�Gl�P�1��X���W<�y��e5^ ���5 �ex9c-Š��G��E')5�f幍9"���v�Mr��% \�=h��I3�1C1�(0�n�}��洧��Q+�do�����|zm���J�՟�ϐR�q�Zn�J9;B{�� 3^��x���\��9��\�z��+娧J28�R�6EG��c�D�ZnTJ��|�c��\� +r��^\M��������RA-�? r�r dM�?�aQ���~Ba�j ����1���� Ϣ�VQϦz�_�7a�m�,���s7J�� .�yn-������屜���:_�iH���R���P@����:� +��$`W�_���M�v9n~/N���m�A5�u�.[�l�;�E�7�^�<�^�^s�.�t������nu��fr�.����e� �ٱqrrP � +��ΗB��8����������Qi�t+m��>�� e8Eqg���^2��$ ���6"����o����bv��h��L��F5�|��,4��q��b�/6��G���vɵQY��sf����&��pN��D�����a'K+�Z_1�n����o$Q ��x2G:fV)� 9�F��ΩϝJ7����x�������w? ��Ve���*�~�\�T�?HB�T��wٔ&d@��H�����m�g�:�S %o#���맣��z��'��u�ۃ�;�����d���H�뫶��i�8gfO�1��L������A-oG(��TV�(icA`���b���:��������@6s���x�``l�ҍ͔��Bo��q������]���$P��JΖJPf�����R2����l�ԁ���"7D���9����̺9�����&P&��R�yA��5�:%�!��&���Z�L���G�j�K���G�f.�k9֗� q���FY��9�X4�(�P����Se�,�c�@�i�Xtm�^����x�{����Mo��];"�l&�>"7�Q��͑."7�Q�秔��5ʢ�j�Yv�F��o�Da��G����?w�X�M��Nƅ�<����P����{��Q�����FY�6��1 +Kx�Ȍ����1��`���P��?.3 +K��� +).>* ��6�B1�\�ڷ��ַqB1 +�l�o|P���L���Q ����b��&V+Rk ��8���S+�@,�3�@�F㣄b�sӊ\�7<�j&�?�կ�+��%��p��ݟ{_"��s}�,�-��Q�z���.�f���F�_iQ{;p������tGs.�c"���#~`�~TN����E���u�"��=b1:����S,�5�n�:}�~>�!t�"�>=_F��i�q^F��?����%���~�x?��;�(B�V8�yG���ޟ59��Fy�O!���4���FH�egM.k芇hM��OS r�dm��^9_��i��Q���w"�&W.泥��&(��V�^�����m�gp�Z��J.��53�Q�JeJ�e��E���-j[C�J.G;ndr}]7�a� 'W2^�i���?�6D>Թ�!�Q�J. �4|7��(W�(Sr���Q�JeJ�����\�� �a���]�XN�2�v�X���u/ +��X(dѫ�BYS�4�����"�Bk��¡H�|����@��/�Ϗ/��߭��:�z��{�!9��Dig:J��͜�Q߰ɑxS�,J���`8�5�ٶ&�9�ώ�2��_j����b�����0�*�Ί�w? �9��<pr��o�{x�N�� +^T��ɑ(�Yм�$*j%Urd/5��*���PsN�\5�5.9��4�!���v�s���*5j%Y��7�>����8���+̊wuKǂ���C>���������V�I��Qw +�Z����pt����g��7����ʅrK����� �߃\gD�Js�ڽR�:#qj�ț��%�Aȸh����J��� �/(z�I��%��b�{ap��&`�����x,�269�<���V(9���x �j�Q��1ZJ����&���jcn2.���1��[����y�����椵��9�c4�1t(F��Q�M�~�M��2�� �:��aƨ������96c�P_�[t0�С�^�X�/GJ���<���ڼP0�С��P��)}&�4Ç-��1��`~�����q��m�ٴ�L����3��32c(Fo��4D��<��!O6bv0Fw��%��|�� Ps�;(�D3Ҍ�7�<OB�������-1���� O)]�=;L��F�����5�ҋ9Rku*<���Xєx�/�J!4:P4Gg??;x4|]J�GӣQO�g�����F��Y�ƇIռ}$L�l[x��r��9h�滕��\�YƋ�r��D��xP<�G������H��@K @V%�"=�lIfQ�s����l�n��B���t|g;ۧ"-H�E$��,��q��\i쳽�8��h�4�D_j\ݕ��*6Uj��T�?&{{0�u\�v���[��v��X`}�t��_".5����1�q�qT��05�+��8�U䨮4�y2��&���JcHx�ּ+�����)w�q~~IZ_��*���hg��#vo�kbU8�fY�1��?� X��K\��q1��xWoC���(�#]�������HI巩z&��{�K;�h����]y$Q<��Gfbxd�@��6f��XE_B��>�)+�a�6ӳL���>)�|Yg1{��{�÷a��B�۶ �+,D��'Uc +mI�;H��>�/�4ф�)��N +b���M�#�R KA�-���3(�)�ّ�/��yq���xnB�΅�ٴ���ι-u���E���b�U�������Otm��o�vԷ�M������4gZ�-�Jk$Qɦ{��|]o� �ş[�|�}+2ٴ?����M�|��ԛ+ L��;�����n47�O�ƪ�7�ercI�r�����O8����AbtPR F�tz�KJ�.5��[� +u��IZb��0���y��8�l���%�qcy|Fy'�� �X��l^BW`y�\����;pJaw��ѡ�Q&�'gׂRR_偧��U\����5�],�:ЃQ�l�I�eP'�*����D�u�,���Mz�t1�geN.|ݠ��Y��{^�J|�_���_T����ն��'����=s�[� +��:md��̳=��&�(��/�XO�q��S���O��l����}[�;��HЍ�����<��n���S���:��U� +1��S�{�zHy j^/��������^�/�����}Q����g�Q�uO��&���۲=0��3����γ��K|FZg�u�E�������ӫ��ΖD�:���:�2U��s���"�WJH���^�8��W�ދ۽*%�������'�n>���CV,l���}PLU����7�����Y�n�������,�Eީ�*6Th&��}I`I�X�e��5�/aO���ჳ�W^����كp�+��w ����v�J��N���b�q��5��)N��O>���ҿ�)���s�[��T<=�cHR��P^�� +��Z��[�x)���� +�����?�5�/W C��^V��J�vY�v-�=7��A_�v� ��u���<���������J�/_�?����=�����ݧ�]�co��x�:N��m�;c��Cn�ޕ{ق�+�&��x��t��re��%�'��c��3zV�<Ň���U�ҪhZI�5���8�i��NM`\� ��xg��vۨ3��c'����:[�i˹�?�Q<zt�����D��^�?땨�1O��\��J���U�������&_ڤ2���Y�aT[��G�����j��!]�Ǵ�ue�)�t��W6s?��t*����2�i� Âj;_O��[��/��\��X%d����~{�w�?�����ۗωىZcweu�Ԛ�ׯ7�e�� wW���J�:�A���y�~ۙ�l�IGa�����?hP�R�b5�p� ���|���?�P)�e=��ʶd�` pv�������R}Ϳ�8�_C2����B��V��V�R�9a���-Y�ƭ�����l�nR';��;<��c�o����Vi�w@�3!ݕu�יo,��,�>��n�x�y����y�_��3�9���шL�I����B}S�nP�m���l�����֘ez��/1��&[�8�f����0��`�H��R�������F�j�=X���ũ��.�x��� +,����}���"�Z��S�3_�!_� ��^�jFwu�^��g��ӏ�_�b���(�����pc�+�����6E�{#�4���m�[0��[5�b��L��}�@;7�O����#�i�G�1�V�F��}0�����k��|��@_V�.�'/ۚ���ti�v��z3����{�������7{y]�>��[^W[�P���r�_��աd��N�}n^��֪suu�8ݨ�:��_vh��Y8��W��B��3��)����Q|/β�9crv_���G��-.B�� �V�J����y&Q'���8�x���MG��[�ڣ}�hsƏ��F�b#G�������,i`��2��X��pt��}�Y&=���/<���g-`�����q��_���P��K������l���O����v�i�N��J{���"+_�®+�²�\�øe��ȝ}����yf){�l1w+�2u� ��p�I�1H���U,R+� �_��24���Nbw�:��f�Tv +q���7�P�[%JL��ό['�9@+@6Ə���c�&$,�&��~����x\ޫ8bԚ� ij��4[d��dz=9����3��,����3?+:{���O��]�4�V��C �;O:gϲ2]��^{��wp�7����,��o��yo���ͧ�Y�L��j��@wC�>X^��LzM�T���,�^{� �E\#�GcF�8xا=��D��5Pm3��\Ԧ�P ��GL���b���w�7�F}� _|��*T&@瓟��m@CÓ4 ظ�4q���~�ҿl�`%w�\�ٯѿBx�x��r٤䘒���W�%a4�ČK�����(L��җ�� R 'FJF��Ϛ��M�%'�踏'끓���E���,��e� S?:V��� �t�grh:�D38�䰔�)F~���]�Mdr`C�Ƶ����\��drYm��F,��pr�ˠ�;9� +Pi��!�̐B�>آ��Z��y X}'[3��W�d����P)W���j^�0}��Q�&�����_��E�w}E��,W�E�Z�?/��];�hi��uW��}�x����C��5�3>�Z�-���|_��t��~��!w�˛2���+w�Qc��>�����w��fxgh��#�_1W�^���l�]�S4�m��W���������"Հ�!�lwH-�2=6�T�{�A�=�/�N�{1���� �+��yY.���98�N�އ��P)��~��)�O��ɡ�l�c����/J��Nځ}��� ���t��<u�s��]�ra�xCPX9�9s��Z ���^l���� �w��?���@��o.�t����r�DLo�O��R:��Lz�F A�[����Z��H� �/�$[K_����zC�U?N��!8��@��ΏWw)��ZJ�"`��a��F(�������>�!�q���2�d��5�l�v�Oo0Z����8���K�Hl�~��Fq�W��ʟ�@�Y*%Ŵ��Pn�O:={Hݍ�����t��o��iw'09��C��ݗ!���gd�5[�V9���2�;z�/����"���/����ӷ����ǯ0mOD���~C׆�+�)6P7��c�����ѯ�;>� ����F,u7^�R�J]�xjo@_��68#�xo` w�6�?��3?~�O䫫!����!��oE��_�U� .��z�n^�|F��-cO��?I�x,�����K��6�9�-�0�����O���{���Gp��|�~�>}4�i:А�B�!O�)GK��;�d/ʌ�;)�h=̖����.���)5���j�������Ls�Pv1�)Ng�'��?������F���<O��yqi2KEI�f9IVk�i�XR������$�WK_�!�\ABT��W]��;��!�w��:2O����BY�m�4w=O^�}v9��궮:a�~�Z8��i/���"�K��r�k��j���d.Y4@�ڑ�\��W�%��F���<�����}�20N�.���5�_��E� Kn���DC5J���O�3t8�%�'�8�u�n�v��f]6�IS�?Ѐ�5A��c�bMi|�D��fU�t�ob�M��X;:\��R�%���<��oa�f�!R�լ��<Ϝ0- �<�������#�Uûj2��~B��>�u�E�����:���@�������$���JrOO��J�˕���ķ>� �\���DlT�>^�q� u��rs�bvd�!xVY�$|$�ʴ��P� +��b��e��-�zߐ�"4�!%�m�����H��8��0��uj�`���ԕ_��,�{=�S�銶��٨�����F����:�>��F5�Q�ב�ͅ/�\�'���Fx\��ʎ�]m�}�tW�����e���F/��\m4�7��h&t�����J���&�;R�I��'����`����1�.�L0o�u�5�6���\��`}M +���d8�r�(�5e��z>�"8��s���>2��$�����5��<�~.�t��_d����O�Ig援`����Ԏ�r�=ԕ��+���xu�� �e��ϕ*�$t��g��.����C��7f�>�`_���R�l�se_hW}/N�Ζ�=)t5��Q�2l_�>��Q5�<��7p���t幩\F-�eQ6#�����nb��F����Ln,ѢR0VO�1D��bE�Jy�h(V�J�� ŊҤ�� Ŋbʐ1D�����^�ED���UB�[/7���L.Ovo?�ސ@;_��x�]���=C&ȄD��%��M�iBÇ��L��Nȅ��KF�h�qz^k�6�?^_.��31��7z��͉� ��9|07��I�@ � +�zN&j˯�O�f�}0������� VǏ�����ۉ������~:��9��M<�7���M����4���c��/��~����ѿ'�4�1qr*M�`;]�&**�����bz������Q��[����^B�.fgwn�?/_�nggW^�_n�w.o�>fg��P���^����q���/��|z�)L��_0x������n����^��� ~I�k쓸M7��QI�'�$�3)e����}�F6�{�p��s���)�O�r��������������0��CM�p_�4�E��JISU�^��Ӯh���u���_l_�_>�% +����{�r�t��y�|+.�φU�*��U�_��������5&cH����p�8�?g�#�Tu�?��8D=����!W����5^�[V���3��E��x������L�:��V��N�ʝ +�D6��� �$��I�O�'x�f�|��"�NF�����fJ�%�>�H5LC#�a�Lh +�T����H�*I���l膡���䲫, +�dSV ��,�pkUm�)��9Q�:C�t�T "����/(¬j@�+�T4K\��T��Ⱥ%��E�#ʳT<o,I�a�t]\���h����5�/L�_b��MF�Is�NኢZ�+�+��^òM#p��7cj#�|^^_&dI�h}�RbV���jՄɅn�t���lˆ�+��*�Ld]&��Z*>��4�h�)�T&3�I�(+-<���0�UM7�(kB�ͪ*X������;�� +�^gdE�ʺjX���ܧ�E� +t����I=���tQ�tZ�����!��(`�OՐ�ز���b��T��$�tM w��\�J'Y /%�v +�\&��Q�}��)^��b�U#0j���u��mP��0�1�'�ڈ.j>�Y�zB��q �!��I���P +���y�(�5�G�������ou�������7��gdC�+�����=�s�>抉x�Jy��2s��ח��8��/?A�@>��4^q=\~� �I�����c�D� �me"��R�) ��o���xG������*��D�6p�ʚ�h*щ$���� +��m�������rU��ϊ�_�=�i��ߝ���e�D��dV��}-[�6�碽m��F���q���c�2a��O�2��'xLT{�&zL��'�T��)�N6�"*q��&�*��+H�`�� ��2�0JM��4SWd?�����f�D��IqDk-��G�HX������EU5�"dX3%ӈ&k�P(RSa��K���N��H�.��Z��T��Y�B�`�D*�2 ��A +0�^N��V��p�a�<j=��=;��耯 1�6�@���s����ۨ8��P*Q�fh��i@S��'x㜩|i�o�K�-2@�QM3A���]#O$dJr��u[����O8;:��������b�&�{� � �� c����� I�F#PS�8�j)K�K�@�5KVL�h�i�˕�=�������?qGzƞ(�rV����C���!fU�� +I�U���6Dg��g���r��h�)�zU��Te +g��_�#��A���PS7�P�fXv 8�^�qlj^��M�A"�`�TH"S��D�C�U��H""�d4Z$�tYQu��7hN�(��1)�@��FTKCUl����eVMbs?\�0��P�i���t���e�?U��hdP� +8Y3��,=� WOb:�rot���~�_��V�.��{ÏWY�I�dZ�FLg�r�`5y�:a��'+P�fi� G.�댩�*�Ml�n�Q�Tƽ�� e�t�U}���h��_@�\ߜo�� +V5�#����A(����C6��Zp[�W=�+�~×��-�"z���IIh��x$�zW ��1�W\�1���*�)~�*�mE\���T�O�me�m�n�*���L��D�$f��fD;����|�J�������b�6`;�N�n��SLC�����UO�Jr^�Ƽr +��*� as~zx5����1�PL�/��T��r�-0��5�[���T�N�O2Z�`�'u&U<���A� � +bp�VY��ut"j(R�,[}c������ʸ��A/x�|�6�����o�7�x+�ϑiͣ%yh�n�.�1�[M��'x垨|�1��[�mR�?�Y+x8��ٷ�M~Ÿg-�ʜo����O�2�W��O��̈v�g�`�:�p��,j<Gv�q+[����"���@�� �8�)_Z����1;mU���T���d����L�UX5��C �L�O1��T�9,��F���H�ҔT���U�?z�(���!� ���(�OFQ���W�"÷�D��i��\!}���S��1���ק�G�j�� -�}����lGM�(�zh��cC�e���9u����x<n� �_ Uv+L��ZL �ָ {G��2�Q[l���H֡�O8��h�*U�e���|]$��'8��*�!]� +�^�S�~ +@*@��>7%(����H��&Dk�H��{�Z +=eT�ҿUT�s_ӧ&�+�W���<�Z�\�o�1��|D�����D9���s�t���g�~n�h �g{¾9�훯�ϗO�x�[�6`���P� ^�T#7�C~NR��2%Ue��c���螗l�Z�����ܸ��z�y��Df��Oq�E�,��7�&���� ��I#@2�J�Q�B���1x����T���Hh��+KD�ז���R!փ��?Ŕ��S < Kx*K&�6�xRj:�<�l0�F�N ���*A��FE�ZUd8H�Tu(�9�.�B?�H��e�������@�H�4IV���8�Ƙ"Â�� +��fh��A� ��?I24Q�$�)���(4&�VAk$�^aUa"�X�"�R��h&��[c (T ��Q[��W sY�_7�\k���pf�_�Z�%)��~b�V��)�R,�*)��-�i�� +�z"Sه���-1߆pu��Ս��)/����h�lSӪ�e�d� ���l�"Va�й�B���I��z""X]0Z~"Au���������]iÒ�A`��C�d���?��~""�*����SÒ��n�2|��zG��Ց)��e�VMUUE@q�1-�th-H��,,�4��آ��TK�I�S�Q�0��E4r�÷$欬���D� +S\gc&�p�1 fjT�ϊ�|�dTa����e��K��G$��媌 +��h��Hzt@d1�f�-����pU�]8���8CSt V�mp��K�dY��D��~D=�3� +��%"T�7axh9!R�-��K���&V-]V���IN k�a���"n��1)�%�P�D��F3�KYS4�k�#��1�t(D �ta���Z��F�碭�<g!�20e�2t��h��gCnD��dD|mfG��le�����`\�,�j�=����>D=:��r���.����$��3��;T�����K����[a"����U4M�&.?�+0� �p*�Hi;��]r@��J"45?�t4&5$��1����~��1K��$�+ZGds��>���8� +DK�Q��$Ԁ�~"���������W^U�I3�`���YQ$�6`��0tX� ꉈ���\�bD\u�����.�/ڋ�c3&�E�H��!��c�ǁ��E�DD�0U����._�_��)U����Kuh������P��¤bHc}V��J[�N���^�LB�U�,Q �G:* �H:1�����c���[Ñ�{E�∔�A�I؏�߄�5�i�$Ȫ���^�I(��_?\k��ըX_��t��j U�k�їYB(��·�_�=dQOD��BGEf8�'�._��.���(v�5[;�%�t�<Ȅ�DI�M���簄��%�U8�*ojD��QzU� D$8A� �)��HB��`S�zΞbUT�E��e��ɱm��ޢ ]�'D���1���@�US�IUPD��Jv�A���z�(��������ti��,:|�����A��A�Jdt +�,E$f�3VC�QE��'� �%������<_KB���b�z|�B��`z��@,t� 4o������5IQ$�BC}p�8�B�@�������'�l�s�U��ht�Ϻ +��d��Y��^'�ҳ�f�O�&�OTF�i���Dk��N@ښ���ԡ��߇Z@����pG���"������K�5�I�!H!�� E�>\�����ˬ����~u*:8q����T@����lK�0a��PU�Y|�� X +G��H4RE?[U�3�Q��&L����1όeX�1Ss�o�ڷOa +�(<4|)��4��4�)~���*�L������9��6�R�0LIn�� +F�7����rH��p$�^aU����� ��h}{ő`U���Í1ߚ�s5���h�8�w8v�S�9 +�����4��&\W���BP���cڈ�ΐ�ੌ��P<QO@DQ��DD���*a���P°F��P,W��K[���#q1A9a�#h G�ɖQU�b�>��HD\LPNx���;W#�b1�ֺ���IP��l���S<QOD$ ������m�3�}�@I�i���H<I�)(N����o�ou����@�D����~�D@���m2�t��-J:�8*ԇDf� O�4u����WҐ�hj�^�D��P�7�c�Pz�����0(���_42D���m O"��<����^r�×Ï1ך�s52����٩X�4H���Hs�����P�(UnEP�'����xíM�ָ���N�[Ó�Gă~�s&�s��8�n���������h��Q{@[b(��)��'"���DD�e(4���r1�Nͪ�a+[&`m�)��- @��J �D7 ���X*�7L�$**�*�1i�9:\�� +�2��,��~i��)�RA(�'ꉈ��V���._�_Ӻ��:�%XL��T�L+��2;G�EUh����� +HH�<��d`AH�HFӫ��XHP4�l��d �-�;C�EDTw���$<���# ��:#"��f�+�S��r�4�|�0��{&�������'�kM߹C�1o�pA�D�j 6�1B[A4X�t��{0��R��{��'"��E#yt�[gD\u�����.�=r�S����#n_BEt�� �Qt���>D=��YZ���.���� �C�D�ӭ�)L��`��) �PE����`�0�OR + +�G"b}�r�,�oO�8��רw�,`|��_��x$��)L"b|�r���w�F��b9��9^)���G$�{�c�E�Ⱥ�)B�����������|2!��o1��/�O�إKD�M*vڨ>��'"B�M �KD�W���{�cw�4(P��'(J��)��9 �� x�f\|�S�jf�_��� ��$�� ���k�Te���[�C��?�n+vd��$�)z�I��a5 ���~B���:�a�_Mԧ����+�_�)��iT\O��ǚ:�H���Ά��0.>�8LV�� +bWD=24ꛩ*�)1"��DD|u�s��{[��B�>�f���p0�q=��C�9�����DD|uQ��q��U��l��E$1��ѠAEK�~-��i��dLP�*�ba�&=Y�(ӳl�Qu��)(�S��؈b�eh`���7QG����)I�G��i$<�P��%�т�H��p +��D= +QP��np���������-���8�@��gIJtC��,<'0����vVJ��'"D*�J��n�._��e�m�7+̞�N�0�h���;L���!�(���CEd�H�� +����� 0�mP�<�2,���H�S�H���r8l��p3C��sD� +�t�H4Wp����p�R��cfj�S��k�JU��f������,�~�Ta�F�WfD����a�D�� ��D�. 0��#�SR�M��p#�-}{��O<f�3��c7r�)D�q��.?�[l�ecbjJtq�����9��$ԃ<z�%E.@]�t۱�_��1�p7�Μ۾���{�|x�}��\��v����Xݾ������`���^��O��<�km�3���Kp endstream endobj 38 0 obj <</Length 65536>>stream +%AI12_CompressedDatax���r$��&���?�L�:���m3/=5+�d*I��2*�U∙�f2��~����/8^*Sږuҭ*��88�;���~�ͫ�7w�~5��]��pv}�pw���|�����㇇{~��_�tg¾�I�_�o��ps��g;�F����?���ջݿ�}���'?Ň��y���ǿ}����?-���W�2���������w����z��n�ߚq�>;�}|��������ٮ߽r}������?n~}���x�a{1�r����o��=�������gw�w�~�;����������_�oo���;�^����˻w8�������������_�����7�o9��+�����5f�������ӯ��������/?���5�� ����o?������o�z�O��~x���$�������G����O����%�����;�߽{u�'\n�c��<�O�+�����[������{�{e���\U�3C��#b�#�ͧ1��e�����_~���ݻ�4{���$�p|K����o����so�є��wo�o�Gr���̚f�:�7W��_?���n?>���,�ϯ~��_����w������+c���I�~�r{���3?�,�Ow�}x�r�@�������o���ո{�1��?�Y?�]L���������~��s?��'��G��s>I3��|x�&7Ȅ|��a��_|��\�{sv��+������z{�}�n�]����w�� �ɿ}�{���{�^������?_�0�'�on���͇��{|}r�������������'�|�n�>���֝�v��*�r%w;�z}sb�����O��s��Wr�����rewr�.�^]z=_z�n�ιY�s3��Nnߝܥs�ҹw�s��s�ҫ|L�~L�~\N�N>�羹������7x���ט����Ň��$�?|���~8yu�x��\���ݛ?�b��S�noN^߽���LJp�7��'������=����������W�����y{���rR����w'o?�w�������q��w����Շ�o�G9� +������䛻��;���Wo�WP���[\0_�8��;�߃�^������a�+�$��{�������'�i1N3��.N�H#����N���?BȘb�i�#�S�Z>O���� d��y��e����������Me���-�����n0�Lx��{<�� D�z�g��p=����S�x��H�;9]������D��]���*}�՚\��O�*��u:����ʸ�Ng�6����m~��zÕ`8Y]�����{�;d��v�Z6D��iGw'�������oo�>>`B�������~s!����o��h�A÷¦.�#����[-�[��_O'�4�MR�7�oz�cy��7�������_�h�6BN0]������'7��vy�a� 9Erx(��t&�E������77�}w����p��������7��yn����^����O���vf +'W�q��緘����-��5.36�\���zg]ϓoA��~���?��~{��ܧi���+�%J���� �_�~�W�|���Wᄏ�~���(���}���qw���ᏻ�����nN�_������t�|�+�W7����Y�5���˿�g�]��йy�zL���y��^�H�����.�g��髿y-��z��W���/xÿ�3~�q��ov_�����Etp��w�����g�>0�{?����9�?a�ճ7�r�v�Y����_�^���7����~TQ_/��=����O��7�W�������5�^*}��o���-0Ƈyҟ��3�>{�k +����v!��'��xx}{����o�����wNJUȧ��|}{�~��y����;�����\h� +�a�!O�~��cw��A:����������{��a����_˨˙��7���k����#����û���Lq �3�+����釟v�? ������-�纾��������=ܧo��9Q��� I�w�$Tb���ۧN;|X�I�Q��u�����p>OFS{�_�_A��c6�`��T��p1H�#��}t�_�;�8�燋��Yf���p����x���tvzvvv~vqvyޟ�s{>��s>���x>��������/�//�sa/���]���"\D�?�~��>�կ�d��5<r����h3�2�袏c1�)��C<���"^N�d&;��O�&ZN��t6�O��ijN��p�N��xN��tzzz8=�N�O/N/���a8��?��p���pz8� /:Ƨ����jM�I����o��>z��q����0� ���p�E3κ�9��肋nr����@=��h���{?�ࣟ��?�3��_�}7�ю��FO;��i<���b�}0��!���B�a +���0��2��D����.///p��8�q�q�c�q���p8,����y��/�/�]/N������-`ύ�y��]؊�`[�|"���9���iغ Fl�x�%~�y��=���q���奬�� +� �}����6���s��%�m��1g<���h������9�l�KÙ�p8 +� #R� �`��-v����V������!7����ˇ�Ǹ:Bu�cGrf��BdP8'<�E����٩$=� /���e߁J�2 +9�^�Q���(ǔ���8��Y'�����hO��)�H�����ͷ�Z�o��� R�M؇���F�>-�}���9;���o��G0���㸏~��7~������S����r���rju���㽒a}���q��_�%}��=���w�����������#��YC��v�ϔ�o~(���3 �}��·=Ȱ��ӧ�DW��Go,�e� ��������+���|��;�%���w��BO�>�3X�Ƈ�W�+ $�Q�'� ���3���r��/l� � +�4b�p�I��� �(����c�Cx-0�>d7���ڹg�H�H?�1A�Q/��cHGw*���Gϣ0�Ix�$R@�GDzBr"*��;��qJ`��{�\*W��9@�0�H�3L�)nNG�T�oGz�����p�0� �%��x`�ʄ|���sy��G����A�XȽ�����| +��F�(����L���� +���F�/�`1�z���3,�)�Z��!�$��ЃT�(<e:��� ==$���jl)sq{��<����#���ȴ�=���W�c��� ��lDm�p�K�� C�JgxB7ۣ˿��15���i�+���y�7�����Ħ�[���z +��fMRu��I�%{�����I��� {�%r�^HF ��Z&�݃x7�i�{ �q��:[�i������a�ߏv?�5�~���؛~�3�0��L��CX��9g'��ƞ��qt�@ǭ���iB�oJ�~#%o����8������5�A�q��,? .���:�nX�n�Uo�C��;��ם��bA-8P�Y�����9�٩�c�1ߗ���( �S�oJKI09�K��A�ԅ/�D��!t"�(�����J� +���^\��J�� 2��,�0 +�$�l'�ԋnr��ٙ �4J�$�(�D��I�����KB�Lp�iIGY���]�x�y"�D�%�w.�� �a�0��E���l{�I �\:�\�YR6:Q�v�e$�d����]�1ﭲu�y+�Yt^d�-�9͔�()���2-�%{�KE�R�<�0�I1�B���DE�߀&� 2�ȑ(�f$V�F~^�!^/��\P��Z�<?e�}��6?#���>#��Z>#��!��9��3v����<�|��.���6btY����X��q6���إ̔\/�ۏo����b����FŪTlM��,[L��<g��d��]�s%�1����e����/VH'��t��"�*��)['O�B���l�<��J�X��.�-q�5M�+cx�3��et[g��,-�b\��B����F®� +�e�{�9��Q}�����'rC��J�}��s��<��&�ٸ`��+�$b�q�dh��;��v?�jy.y?mt�0D�9��X�u�%��q���8�Mu?�&�/}o�3M�EW}�F���]q�h�c��cނ�+H����.e��� ��C�7P�� \f_��2�qr7Wvtͮ����fW�x��x��ߋ�/�� ��,��N +�������;L���� Pڧ�t��76 �>���,� �/�W�g���u��M��u��}6�-�-�+mwک��ґ-��w�b>.��s�:��5�Ϛlw��N�5�l -�%�[O�J(���q�Oa�E3uMf>v�+�^����w_s��$���Y8�Z�����6�_�.;��GPGlS���_O�:� oY�c�S�������l����m�k(��m����>�Q��:���O�5�\x��~�n���� װ�D;<� �C�$g�h��a��='�i�_�7���B�"�����"�_y҉�>|��ؓ�|��r����=�\f�$gy;����<�i��=�d\�-(aO/�隟 �x��1X��#Y��p�Q8En��i���y�\�ɭJk�:3��D�8h��69nGa2A4�(Z�]���{&|�\x�K�@�p!����{� K�F�q���b a�#��:�E�#����3�#���Qp���u��Z�Q��fX��ζ�O�U�����v*�O ���Ss�=��U�J�k�bq��Ϧ +��M��'3�1 ~�|�5�ƏR�NN�P�r���~s{���:��k�3�apH��.�!0i?�q�.ڄ���O��Ǧ.>һ8�tq�A�� ��P(ҋ �3H���@g��(�R���PRՁz"5yRR'{T��"�~H=i;P.'�L��$r��E�8�YkX�2PTâ��&����#?s�I��A"h�%��2�%#�7�L�`&/a:�MQxꩠ��x��C]����Hp#���SC���x�N�U�5%�By$�4����(���sb�CLǐ�NBKXb M������|����rt9�q9�����EhUR�<zا�nH�iG2O�b��lǗV�L�R�l<`�\�,)@2S2�p~Ŗ.D� ��; +;�����.ɹ$���+���Eu�����=���EuX�Va\�˼+d�v�aYd3����ׂ�V��Sp�`-7s���qt��2�;��v�e��^��ɡ�6"�|��&^�����5��]��ϖ��ձf1��QEW��+Ýp��1��X�L��h&�<� �x�xN�I|�ѽ���s��%G������0ǽ��s�Y�0�ɇ0H�7 C 4#>mD?�d@�T�eܙa�f���������t�M���q��q��q��q��q��q��~q�|q�|q��oɸ^��y�Ѿ�ُ?�O��Soxx��=��%�㩸����*N��u:g�w�٬�]t�-�r��g�E��T�Q�s�avWu+�U,/pz��]�T���b���J����ǰ�j-��bs���/���El0��s��8��y.��+{�;[�NA�% ��@qٙ&{��r���8#�C�R�.2f.y�Q�u����M˿\io������f�ԸE�[T�E�K�Kj�J��d��J��V�s�R7�J�YQ�V:��5T�)����]d��9�8�e��U�B�x-�B��|������H��H�a3C/��ݑ�G*x<C��<:�o��~�/�F�K�댌~�E�/rF�k�3ġ�I��N +��hݣ��\�i��iQ�hQ�Ţ���ǣ�����<v~����G[�'m�W�n�U4��16��8���Y�Ɔ�բw}�GK1���,�e������e��)+��{}��?mlP�ʬ�?��m�Q� 5'��mR��IA�j�Te�jڣ�%*B� +!lK ��R�@��RꎕW노KF�!'�MݜP��<=�J&-���s�^I�+){KҞ��u�����[���\��7��us_+��hߺ�6���2�~T5�9�o�_�Fk%�}?r��%S%��Nn����}�$�`������6<��Ob�Y�ĚM\I����Z�ZKa�8`\r� ��j�>��2��z�}��~=��)����Jw����"*�#T�w�,�b�*r�+�lj�t�2*u!�RJ%�ʍ�TYUY�n1��R�/�+w)�*�2s�nS{e]��[���`��S�P�͖�m��Y`צ��2?��?~�x���=�l��cG���}���f��'��y�N�)�ۤ�u��&q|I/��K�xI /)�Ӫ��\�`G�x���B�JK�3W/�XI���R� �N�E�,�����J���`0�r<W19I��u.6��zqU�`��͕ s�q7�������9�xUod[W�*ҩJ!UI�F��5�{tGz<fB}�nGw4�����q?ً=�g]�q�_;�[V������;��a,���A��y��cWYx�}��<f�w�y'� ��~c�Y9����mL<k#��̳6����~��t�/������ 7~v�wG����~�ݯ��&G�Y���CXL���t/�_F1�1���"xLЪtM�L�jo[�m갵��=���X=�i� ��cnjj�� ]<utO��>.��_[_]]4�v��;q٥R`Ǫ 4�"s6����h =�9''�U?IO�HΥ��É<{1Y=��\:l0�v-p�¬Y�2�>��T���T&|��̎E{��M���"74�n����b��u7�ua����z�{WU3����G����kp�a��`�v(Z#W�;�V�}���z���k�?ԥC����Vtq���AmmH[��A\�˪dY�2��*k{�������IVk���C�^�hXT.��#B��~괧��Y��QM]+N�?M��'D|����n��L��<�Y����;���c�"�O?�l�Rv�Ᏽwt�b\i'S�^��EKY�y�.��*���b*��N�(��w���U���l*_�����)�Q���(`���&�'BZ ��x���w��ѵmҵ]�Ge���� S���)كR���1�ص�r�dbX�_���R� +�}����Bo/��=Y��{~��T�qۗ#�K��R��T�j�Pzq�N���an�r�K����^^ν7s��8��ٶ�����px +�_��x-����r��r������`��6/�K/���� ����S���9n.�+����W�I��`���T +M�(4+�=��O�=M��I�����%�K̗�/ 0 �����_`�$����%�1�/ 0_`�$�|I�����%��'��q�_��(�|I�Iƣ��ƛU�?u���q�C�J�6����[ikm��j�U��VU?���,�^�[�Ό�́b� �C��SLl1m�5c\��M�X��;{����/[?o�y�S\b��[kVX� +�d]� ��6�=�P �:e7��*�i����I��+5Eiw�ߘ�b�uد��z��37u^�r� �kP�y�r��s�a ;<̄sѭ��=B9�ʹX��Y�Iz�մ����~Tk���-�ʸ�5n�N�3���:��xG��8��ġBSDe֤�m)A�&�G��;t� � +3<�:֜��X��_�����g�&����5�y�/ �dm�8ҿ�ٶ�٦��37�������f~鹹�_[o!�i�q܀�w�������8�-y�u�O^D�=i����mVa��c|�Kѳ/�4|��ç���! ��GqP���&��*�$��� ��}��r���b�!�.�bY<ON�nF@kU��Nl*CGԡ�e~9Fj5ŭ�PW��6z̫VQV�$+i���V"�:J;-��r� +�cй-�@>�Ƭp>+�k!����F��%�.;�cv� + �')T�Q�4�)�X�7�k�c(hEYĕ1�S�G0�Ht��&R��e!k"�V,�M�i��$[��Y���i���Lx������n�v�@�]�;QV4ߦ�#��{&�6+�ZƄ-^�ғ�ɹ�~�F�I��bq_x���#!����|�'�f��H��WJ����r ��}��_n���.��X�6�˦v�əZ�4]Q;jW�E�X�,f�V�l� ZE->�����ѵD/.�u�:�wǸ�d,��%���3���8{�O���%�����x�=��o�#�0�ݜJ�N(���1�[��}<��=�e�Өs���y�=���{�ms�ǻEy숥-���_��p�s������Q��~Q�s�(3k����k�k�5t�ݲx]���- ��59_�XQڮ����R�~+u�����i�۬T-Vr8��]e鬲��t�N*�*%���j��j���n(���S�K�]6N����}t�O��V��>��}��������)�I���wt��!��}t��V*/�f�Qś}�M�h�R��{��_�fO�y78���m۬4��^pW�������B�����Qo�84��a�,ZqZ��UIcK�XZyZ�~\�����z�ꩺ}��*�豓RXK>�x��GNy���?�<\���p{��O��͟k煤ʝ�4�)���9=�ϩqg9-.�8����� wV��:I��R�%�z)�w.�N��]�����j^���K ����� �����+I�s��T�k)!��bt�*FxY]��ld.��U#�Ռ�JF-�=�b�6j˴�U��R�e�%c|��/��������ͻ�_�ZQ������͐��������;��������נ���θqώz��6:�3&�C�������"��8@�����M��@!��������5��(��<��� �O����_0%�_�����7��_�[��P?j�g=�B����*��y�A�~ټ�;�wrz�p~���������� �?9����~r�U��o/��<��{�O��|�����o}��᧻��7��'��T٦pI��d07>�qgb�c�9�� +�6��!kq��;d�@�#��� g�~�>��g@��nw��;��aw&� 龸*b��*v�1t0�;0`��'����Lgx<��}��C1�����q��&����]č=-��[A��h� �:L���rc0��wr�a6��yl�s�w�<k���f�_p�w��1����C�Y���@�)���5�H�bD`V8��-���<����}����c dm��;xE��X�1�Al8���8Mn���y�f?�`ncĬ�ۘ=m��8�܇��3��N��x�09��<'���0젱1�����W�25aW�6�V�T�Y�\�x,=xk�K��k��8�NX;f��a�!�{\�!Q�� ���0�o8e��?b8��v�J�Ę0� ����10���o� +{h�/�7���qR��iB�}H��\ +�'�H��Ȓ�X=CY���:`�1h��On*�����>�H2��CZ`f����+����v�H\��)��u�N �A���r��ǀkӘ��� �J������t�X��w���$��\~�D"���0x�����M +�]�Bp�6fd�, ��`sAf����A�.��3�$��3��8g� �I�����ig�xp������;����u��&GW�0��s�x��4����g�7��g�،�g�P8v��0D�`G�up�V,8 +0f�M�|�[pL�J�r%��3@���2��~k�!��[�N��P��+�wz�^��bSc����W0�q��F 6({����g0�D���X��&�Ml�:��O=��.��A�{�^L&ɇ�.�ڂ�����9�E�Q����s�M.? ���9p��+�KFx���Mh� 2QX��X�������0x$XF�#��8�a"x�)f�ˆ%�*�0�c���(10�)���#(v� � ��}t���Lg����Q�Q��di��ֱ$�� ُW�����Ya��Q��F¥�h�z�3d���D�#��a�&��0�}qhȝ��'� ���"#S5pV8U��&��M��� G0n`�;I-����G�a轼h��{wwtC��?�i{��o��P��Ed����T�|��_c���T��(�icw��xel�����~� + �wi>��"��~ ��+/RֈTO��vOk�NƳ�6�F�T+@A����3�0p�����x?rr�|��"�y�q8��,Ȉ`h��%: �C��H^�{量�W��v�@� ry��96l;RB��'� |;��G/�3�ql��=�{2����a���i�GLip� F=���d����w��w�o@J�8[o���ɯ��nq�p��8y���ӯ������ߦ�2r�~s���oO���ŋ|������ +_��������������|����t��������Q�|.��D@�f�l���p3�����pE�T��?�+X,v9�<�^O���c��� 4v�"uG���"Hs���=�W��D�U�=ہo�<�n�� ,A]�v�R�h� P���vP�p��nW_& +�p;�"�`�6rW���u���A�t[J���|�ak��w�>���C�A��/p�@r����7$���t�A��V��`q9�v��b�|��wpLmCҞ�ŪsJ�>ZA���M|i�Մ0�=�J �Zk���,���3X0l+�p��:�tz�8$HF���(���d�E����#����'�6\A��!t� :���^�,�ӄ9��"(r�,UN&n^<�;� �ڞ�ԉ��CK/3R�a����J�y�d�5�0�l��sI� ]@�����Q�4Ȗ����-�LT ��6���L�?���e����F`l O�e@ôR�ہy�w`b���Pn<ဪ�M��H� B�"D���w�pf� 8�ǎ�Q��VXr �`�( �ȫ`��KN܆���,���?����L��:�+�T�2��*^O�� �Ҁ�����cY\pB!BhGT�V��4�`A#��'Z��/3�r��ˤ�5�����@]�x-(���%kw q.������ ��&�����ZW�����b$���ש�][�TjG$�8"m�s'/J��1�M ���e�ˎ��O��M ��H3��q��90�@���wy���;��O��'اH��#�r����ZT&�[����Ci�['�D`�L�t�`��ɬ���A�A��>�sdg�z���'/�'V��{���H4�&�EL;�<�B�v=�5cz���� +8p�nߓ�`�-�'^ib>��b��8� +���V�:���VG���b$��'��˂��!+Cd�`'d�P/�Iv~�3�� �$�H;�1d��@./����Pa���uCs�Y���0� p����@�,���:��"�a�(�7�2���z��.�_ o�H�.$� +���O�ܑC��(��k�z�u3W���-5Q�5mg^�65f���P�d I�c�D�R�] V��'h�d]hГ�����pr���p0�aP9���a� ;�*��Ը�J�ϧ��r���������`�!��5�"A�,�a$o)�͐,&�b�(�@S�~.,Fߧ%4R��RL�y#����Y@8:�OHBL�v$N/^�a;��F��Fn���Y� +G��P�IA�j���8�#�����t�%����AA�ez[lYlJPA�h<BN Sz�_�$x㡯�E�Ӂ9�Sq:���� ݾ�x�J��2O[x/y@��F�iI��@,qcn�+�+Bq;O2����I��Š�2 jD�V뇡�{�e�=5w��Ha&>BP�M6�#7��ʛ�/ǹ�4,�;�)4 +q��PC�rC٘�"9 �W~�@��*<�@����AG�~Шz��ͦ�d��l +8;I��*F�i�bt;�77�q��5N�۰P-���Y��'����2CN����T54�`X��p)ys�7ߜ:]�m��{B��lH�� �����^2��<��ӂU.�O��`+����SV�X��������|�����2�갎*l�@\����iՔ/V"r�ǁ.1�RY��� +|���am4vB�����Z�*+Δ���I������L#c�������z��ў ������d���I�� 3�-��6 Z���f��V3$�5v*��� |�e��H0���Y��� B ?Q�������F���%�g(��:�����&�a4|<Tf�f����'��� �3nx��Vr�5���#�ד44��4#AO��"�;N���Q}�F��˂Si���/�SdK�#�&����`��@��9���3ׁ���s��g�s�Ҡ@�t��s�lD�?P�����y5^�y-�oo=��|��x��t�NJN[�Ѕ�H&� iͬ��!�D{�iUɓj��x��~�������{�a��2N;Ƶ�ݱ�E���ҷ�@� �i��uQ����-�I�ɂ1��n +��� �F*f�F˫0��J2Bd��I`�����?����Mf��B&P�+j:9v<��Hӄ6�=�S~�of{�}2��\�0�Xh�<#��BC]��?@�g8�o��t���2�X5Ƚ�8�u��a�X@h5�� +|0`Ա�M�ni�bM*v�$��Mi��8C)`������٤ChrX���Da��I�>�U��pD�jZ��(*fsof����p�}��H� ��f-uU1�Q@^p���|��3���������)�9� +I��i����F�7���U��vXՁЃ[/�$0��xbM�1i�3b>"S���:����Zc�F�7�jY^G-�HTh�������T�Q$7�*&�{�džw4���h)�s[�0� Hj�͞���O���.���XV����'�`��A��Ԓ���q2-ց�YH;ELG�հ���9`|���C��K� ziI��@�s5�Y^�9=�Xz��QDs�#�r�5�@��� +����\<�R���Y���K�싪/�,�M'Z�dKTF������5�+d� +���31��q9��P;��{��Ilj5訢C��>��+�A,�A�u�4epHX<^Jܔ)�����Z�r��{X'^iO3%�g¾o�6��G���.;{�5���aD�Qة�ւ_0Ñ�ilRLc3�;�m�I��� >�%��w�=� Bh$ ��^u�@�o*�p ㉯q>n�3������?F�h�Ge��d�=��&��J�l ���՜�^t(zЄ<�-�.6�#H7�0��r�$2T]��#�0Xmp�Y �H%L:�������B��>�@�����&D ތo&�$�^�5b{�J��0V`�Ǭ�݆-F�H|�<�Z��,�Z��I0[�`@�T�:�i��<]�y5H�$K�IF3t/Gn�B��5�J��`pTc��j��蓧l��[C0z�i��w�Bp�]\C'�OPn�]ٸ��.�9w5P7yO�<���Χ�& ���� +� +����¯�.i��k���1�H[$����x ��0Ʉ��]#sCG w��b ��~�yb��Z/ ��@���G�{�R�-��`�6Yk$���o}��1�e���._0��Seʼn!0k���gjeL�Q�rd�jc�g�Z��du\9܇����i��C����;�F:^�N�e�[2a9��J���JlL ���Zy&{��� �Y�g�{� 3��L��)��gH��gCEѡ*�����< �1?�60N��8M+|��60f +pod������ud�`o�� +lLf�P&m 1�L��c8S�Wȏ��Z[d����1�mbJ�2��r��h�K������;e?AϜ�ޏ����'������̢c��H�����/$L\��0�\�3zlUʐ������D��N)E��ut/L��`��̇%��lF�k۠qI�w�<�fk"f$�$�1�E� y/� �����*&^Gdam�d\&��x8�۠M����@@֖�������dH���V��Hq���Ԗ^��2���`��N��`���C=q�21'b�N1�F�-��*>� +Dd��ھ�pT�=��u)�8�"ٸj���H+�h���;��=���)�1`bȈjS��e2�Z_jG��!N����@*'W>�V���i��6ҵ��r\0�h��x�l��:,� +2 �y`4�DŽ�>�k?� !Q��0�]{iȥR@� 0 �w��v������@=cOGK�Q�\�� �ō�0���f�R��OL�#��a�m���~}Fk@�,51��OOn�;<�H�p,+���(�3�IS��Y�c���t�<��͠��jK՞\�+�#����oPng�V�ɞ��[�9�/W�2;�[|V9��V>}��UH@Sr���Z��X�,�tCK����Z��ЉZ����������W� +>�@�&Qq& +ΔȔ�TK?� ��T�LFp*覉�T̎%ʧ O���Y+���^��`�嵪(&�KܓB�*Z����P+�G�(-��� ��N�bĔn��˔~��h�i��J�+�pJQ�C���6�N)�*f�9g4���Y�ڭ� ��^E*6�~��RGH*���l�2Rtf�� Ne:Q1�M� +!U�}��As��ʈ�"]� J�*3���mZ�T������^e��A�-˞�1��*8�UHs����1S�P++h �nQ�hme�-��ʌ���[�`Q^L�u�2B���� [E�+� +�WFto�4ƫp}e�W�������}y�P� ʱ�����+:��v�����g$��E�HK���U$�&:��t����J�����l���j�N���h��~�� ��%D_�r��4��K�M���_{VZ��n5ڝ'�6ybHf=+� ��h�l�.�ڵ� �#mLUq�<�cL`�Z�����s +����a�/�{�/ bXcbO���j��M��)����V_U�w��k�@�j~ݜ��e���v}K�x�,�o^�f�n�4�r�+Ҫ���:K��"�u���%HAo�:���*�w�R[%^�LwT���>�K.�V����&r@4��ODΖZ$k�H*+�`C��ŀ��t�F�.;���ϐqC�� T�@^}�>�3%��+��W��p�B��V����L��^7�u��ú��v������g$�ǭ��X�Y� @�w����e���r�1`Mg�����Po�h@�o�g9��;I�Wv)�M4�U���J�ބ����Q��"�(�2Z�UgT����6g�|ϴy7�=ka� �L3KN�/:��C2HA�#��1T���lKt�V���?�q�z.��<�&��kh�fc�)2H,�/%�"����V:�^ _M`t�xz���N��I�̺���*��YL�w,,�b�z�0�>H����6lG_]�O����#i�=#�>jVkv�^�z���i�rysU_������H���Ti�ͽ�\U�����۽nn}�8&fiJ��d[>@=/a�z����)��sd��&�1�2��1Q��[!cc�r��K�R���"X�:H=<9�,��j��~k�$���T�0��� +9Fn��a fb�E�e���� +��&�0���,� �L�]��5q"$1PP ��)��u�q��q��g�kx�'��{�d��(��ࣝR��)�"���Y���}R`��H͐j��G*�R��1��9UWF������b\P��crOPR��mVF+u�i�7,���3X�gdW:k�3ׄp61���|٩"�a�?K{��L������+�GmN0���k���&:@SL�_;�����*��q��(SR�B���A�e��i�-{�ly��Cl�&�Q8G����V�gy���H +B����T=���B���[��Ԧ+>���|@������\��c�3�&q��Hi��S<�֞,k�]�8O�+-��t*w��������B�����T��%�R�Ȅ����z"�( �D��h�cW��{�ok�d���%�`���`ü�j��K�����)c�#K �X�g�������u��mY�#��mI�%��g���-Rb� �$�)�2\(o�x�a���4�Ţ��r�f�����۪�Do�g��چ�ab� �6��.�N��,��>�7���%{DW�Bj�� +��\�J�Y�rQ����L��r���cS�LKa��9�¡^-`�eԂ�EZ��Ԥ�fM�Z�6r%����p@����[[UÒz�G4�pY�T`)/���X�v�����B4z9V��R$���_����iG��a��Z�b����Q��:�*7�����o���D����~����z�,d�z�`]�O4 ��.��0Jm����-KJ2��3�$ºW��+�*Z�Zyc/Q��$��/<0A-�&%и +%!�CO`� <q��;`���/^�"�"u���:Aj��� �̱�s�]~�4$CY�}3����Q��N:�媐��juUi���rV���]�( S�/�cBXa���&Z�Y�MD�����Aʬ}�a��f2F�����O�-218)������Ț +h��h�"�)2k$tRS�n��\)���'�DZ���d����W^b5%ƀ�KIG�@� ��3�N������X��<���d�K +��!C�hnP��1�&�]� nIv���fIN����bi��R��>H����/�^OE�9��`�挊{rw�u�(��y�&����Y諙�x:+!���몱�zn��z�{�T�~��]O��Z�^B�&�S��-WY����p��R���oq�.`��̨�X����j�J��/�0�xwZ_-��0��y,MH���N����2t6W[.e�o�4zec<��#��� �ڎ�P l��>��F���!^��<3��f>���ST��Z���WSM"�xҟ�Tۄ)�K���0�o��� �P6�bh�4�1�OY�7��-r��L^� +�tJ|�b�˽hk�N?(eR�A섆�4��'c��(d���@IdP��IS'���a�T�u��� )%Ct���^L+�Ta-�v#C�l�4�Ωϼ��� ��]�VL꽽���8�LY��p���;P6�!ի,�L� g�)������c?6����̰S&.G��#<��$0��������AdB7�%ܙ�e�ɧ7�A��1�����*c��85��Ð@��g�IFLf<���I��Y�A���'B&��z�^���XyE������g�>�H�{=��3KW��:5�A��p���9KjN�xPS�U���Ce{bh��s�����-�)Y�����L�6l=�dR0^���J7[�d�%����̬I����Cf��kY���R��%�q ���0}�z��w��z{L5��sSs5�5�j���yj��T���o��4��!�=Pˍ�9��5*����__���z�~C���S]�@�9����@�()v�Z� ,3�E2�Zش|���,�N�P*�)k<��_�,��;�o4��5��\(�0��N�"Y':H�F�kB~�� ����_� =F%�qQN���Wa�� �٦]��&� <����.�}����זu�Ch��0=Y6�&�G�r���1[W�����: Go�ծ-c�HR��ծi.`D=�?��]WW���߰)rm�6��0�Y��"/�k������%�m.:ޮr�٣��������\�I�>�$7�ȵeY�)*E��V�k�3��t�k�9/��Ă�b�Oo�g)dOW~�z��^3��9���זfC���I�f�ӞGi��lY������"FbbX�=��.e��(�ݖ�3Ffb�+��Ȱ24�%�3��n|���P�"w �v�]�AЖ���iCL������X2���Խb�Pz՟=�^��籸K��A"��^��$�]� +�d�s�kpǖ��5Բ�T���[�<�$����.}k���Z%� ��X�N�0�6�gb�}k��B]&ƶE����#"���?��0gI�5=Ӓ)yW l$�d0VRL�mt���Č`����`C��%�t��r�l��_�`C�N�,`�k�� -��PE�=�6�*6 +����S��a��u'�L�m�����ʸ(H<��"u+QLŢn@m�aHiR�1��6�6�}E�s*���6��dh���5�{�0ˊ+��)Q��Z��J��` �Z�����3� +�s����j����r�-}�n]��3I��;�05 k���)�rn��XC�"OŢM��U5�1A�L�(�[���k�s�wݎG��0^hT��!�r��N�u��C'�XH�M����P���Ў�5Ҏ��ݧ���Q�?_>����٦��`~��(h%�@��'���K��1��IsA{J� �U:O��P�%+ŹA�5$m�߀e�aۯfdFK�fà����L��*+�q���Ȯ=a��6,���8Q�5xq6z�L���72�B�D۫a +���bjf��H�].�v��x5��$`E��i{5$�B��!��T^ !���/�Ϻ�j�A��B�̘�j�\c��$+@�55֟��Ɯ�٫��6'�8m۫A�)�<��D��̆a���Ch�R^���Ə�j<Ϸ��F2����?i<�^p�J%۶4]�B�ZkT-q!�2�� �\�8�= �|op( +�eX�o�ˇխrfd�����ʕ�_�Y̏we��Ø�b��YA$vj��\3H�6}�^����֓+����"��Q��g]�M�J�q"�R֒P�e����2̅0)� u&�hedԺ|����$~Ll���\��l��+���o�{�vI�:`Q�R��@���t��C�D`�$�u�Q�m��ÙJX\�ŠsYS�x4.ь�J���*�n��D���\@�,Ч�f��J�� �dL�ܔiiBۭ�H����+`i��9�z^��p��h��`���0�;)Ŵ{C+U�;���a0���y� $bF'�̵�� +����4.���0`+ƥ;�+R��Rx�h��s� +1��ER���O��r� ��K�خ�dj)%Ly�7�,��J�a#�Цf%~jS���@o�Ԙb��R�0"�L�)���u����Z��i�c����jLm.��i��g ��ۥ�4߄�"�T�^����.�]�C�s�ܒ"z&-�:��uQj�e�-���B7��:n��9��,�9l�c˂�$B_d��RR�Y��S��v�{]��|V�z���srA,�Q����lf�G&����s�� +�e�]:°h�$�JhOGZ*R.���$�B���ê��j�w�M_#k��z�T�$��K��\A����J��5�¥|�co��k'|D�cY�m ����R��\^ޜVt�9�VK%y���%YĦ�<�gP�1s�z�~�]I�r�T���+��У�6��E^�EL�(��ꥠ>���t��R��:�7LJ�,+�.�O1������n�C<J�G�@�.閘�`�&�f|a��6�s!7 ��}O� �*�Ys�N[c�Ŀ�io���A� :��RT���=�ے�s�j�4��w�9������m<rd �������X���k����us�5�t���5���96.�a��oȷ�~\7�߅l�h�+�-��^�CB�� C< Q\�uӶ3�Ì�:F�a��g�ݗn�ܧ�+D�����Mi7�/tFy��4��~o�^).1����iY%�(�Q�^���6����պ,c��53���w��AA�<ll`�+Y�I����ֱ�d�X=놹q6��N+�4ŖdG\����S�ֽ��b͑1D�mL��u�y���T%�Eq����#�Ih�&e��|77,�H�͝��� �h��#�i�$�H��$�b'"�JG���˦�HddM�04���w6�#mC͢�#����UEd�M��|ZiR�z���h���߽��3���#O�n�Q�.4�@��G^6��#-��ܑi�Y�(Ӎ*�4Z]sI�i�v�L��S��jT�<��Sy���UeK�rWy�6�e��[��\�o4kze�*�^���e��)@�8��Z�9�\�,s�f���QUe��zu_�̧��02SW�� +�/㊄h��+¤Ԧ+¦.f�EU�&^�o��^���_���Z~E��R�J$�r�Z���*@�j�PB�AT@�YNQ�U�QA�R�qN�� +n�"� +��B� +�5Z*�ظO1Ui�������R�7��`t�ԨB�b��u�S}B�d�>�.�Z� U�Ui)��J�QUd�z�*�f��Uƶ�_�n��T��J�k��Pza�ݫ��f� +�����YiU��~۬O\tṨqҔu�V��(g|)��ttU�9��� +�I���%��@����MA�lpPU��a�.�=[1Z��g�G��]�F�r�ʮҬ���2�zx1������*[� D��y1$�"����,���W�h{1w�2��6�,_,j�Ƽ���e�k^�ֽ2���ٰ��_[�U���R�W���@H�M�yU5'�fۺ��>��(A�UX�u,Ze�n�~PvlueWo��h�H��f����٭��GV��̋\�4y�.�6�)GM��kD�{�Xin��-�v^��ћ����~�M�9G�}Ҽ��]�YV��R�O9��T>��U;Ű��O���"l��ڱ�$N�Df �ݖ-�����X���Z�*o�ZϮ�Zf+g����ʕ����Bp�|�MH�<� +)�y�P��� ���^�6��/(O�4�C���cֱ��*�A�: +BadD�B�*C�s��!~��V���r�`���/�:N����d�a3me���J_��3Zz�>��_�0#��AJmU��q���ã�Z�¬��:Jk6*�q]�Q����uT����i��Rǵ� 49N�uTԜ6 �X��AIE�){TڧY:B�eS��9ME&���gl�T4d����Ie��/���:tS�%UЧ2i��іAT�+j�LU�VϺ�Ѫ Xe�U��$��o�e����*�X�U�p��/���%>Y��UTs�L�����_V����/PK �+q��R���S�` �9X�hD.�J�gf�m�G�pe&6["�Fk+^EI'�_t�1c�bd% +F�ӭ�t�0�]j�,�= �+$@2NjL�J�Q ��#Nh�� +�_U�Ò4!q�7zAp��1^�K� +�7�bךf��Zd�&I�ö�|r���ϩ�}�k�:>�c�}�zjZ��'w�^�����<U�R�^�_�"ֵc�&��֛��?� �;=�Q�-���Sx�R ��0��R���@���L 4�:�.��e�"���h�q�Id �g�;Q��}����-�0I���"�Ah��}ؒ����f�_����Ҫ��'D�GMj]���,(�/�]����e�xA[�R��y����S;s�z]��3��Yu�ʹ��lpu�����D�!J5o�fӭ��)ԯpd�_oև�W~ڶx`w�TQ�n��t�AvR�ܘ#}H(!6�@P� S�kØj�o*a�'�M��Uە�R��-y(����k.R�TM�5M��0�/KsE����b݄ᑫҚ/��4�jj0�; 4H,�L�{m�i�A��z����B��&�v�`���d�;.a�xi�;��Q$�*�(��'��b�Զ ���=���N��tU�y;N��;�Y��ʢy4�J��Ć��T��"���.\�Ի)�wC<�XA�.��'II1H�R�Y���yʵk��}�~u+���T�v��N�e�ģM݈I�Ֆ�g��D��E�TW��b�O�ouCM��� +<K����]��g@L��ë���.4��M +���*=&FvKMG�Ecjؘإ�LOV��x �V�sG:-�,�˪��"Z��z雮�UhΦ�t�݂��7huR��ս0E�p��n � ��s(U������z����42}9���[��x� ��a�D���\ޭxS��c솑5��%я_U?�.��U�]���'�.*���B����R����d�*��[��W�\��W�b�-@���Z@�ƺ)��ԭ��9�����n +�-�Z0(�6_T���1��6�R�e5�������fR�Qk�D�ZV%ҚԡD��1%^u��$n%��&Q�Am45��U�E���X�Fd/�w\�b�X(��N�KDž�u\��^�FC`��(*�q�UyZ���� �QYj�08*��T�S�Q�n�g�#��Tdd@!��5�Ud#���œ������w~[zY*\z���ר{-�q,��� {��)%ҹQ&�� � $�˶�45)�%{�Q�Z�U�kjCR� +|�����C��!)�^���V��0CopsCL��uY���� +;5&�6�!I.G/�f�iB���p�X1��C�c6۱0���AG�]Fѵ�{���ť7qrѯB�,�����a�-U�~���r�z����z"���j.� +�z%Z����V�5)�5�5E�jCk¬kLk��T�Ѫw����M�I���{�=�� Ԍ(�RO��L͵)�M-�≊:omR��ъZ5w�)��p(��b�k���3ȎE~��R���@��1�^pht +�G�ݐMTg &��z��LN�+-��`bd����#�Q �@M6w�=�������Z�#hd&�m�����p���n 4Ni�aG���N�b�4�c�X�L��!y�Ɲ�V� O�����G�/O�96z�R\`u��A#��Fy��/OR=����L���<H�$��@�x�(�F� ��f �0��~��Mci�������QC�m�m%��Ay���/Ndy����x��gb|�9H���6g�7:ջ����AR{����0lJ0�?�8(J{[L�az�R���ͫ�4\�o�Ș���<#c�T� �Q���U��:.���U��B[c��+/<�0PĚ�������`�=�VY ��CL��z6�o� 6C�9� q��(�`���5�����W�~�jH� +��7��������_|�뻇+���.�W����̴�D0�@41�f��^���6�4�~�����V������Q"i#CB��&���$g�&Y�����V��A�{p��`�d�6�����ʓ�ӆ'��I�&�!����1�"��9B�<�a� s�p���-+���-n���@h�p3�������40^4N�80J���C{���Y,Ŭ�I�h� ��S�����Q��]�gmdȌ�F$��(�!�yM��0�uCO:�+p(^�g���m�T1F"0�b����98�!a��3� ��"�p�J��鄐酡V��)NqƘg+����hs>�x���m��00���J?$��4�H��M� ��X����Љ�@�D��TJ���&��f�\��9-W>�hb�*K5і+��p\� �ķH+K��ѱ ��*BBCL� ,��E�X��:Hb�ʤ�Qb�6, �ŧS�*�,�g%o���h[b1*J�#��-�@jbc'�]Y�&�"p1 q�ot��{�|y2��H4"�1c#�Ev3��0�!2Z�>`��IF�Ec�Y�k��o�Y)���(ΰ��hu�ӰE1�g��K1S4XBS�#o2 +M�P+�/�_wOo���ܮ0:2��=B�������ZĴ��1R5��h� �匱� g��IU,�u�ĸU���[ܔm_�%� �-��g.uga �/9悃��4�;i��%Q�Z��c��X��3�be�$�Ptd��~����Dk9���v� e�KLD���+�m���i������A�� �M���\,}���RaЖ/��<��%@ oO�9o i}d�� �?0:-�H��-����E��:�Q�?K�{�a�kCe7<G�ﱮxPnC�?4�1V�!o�-�u�(�L�k�s����ԯeH�Ĕ��>:LI��Z�c{G�~�L*�=��A-��jd�%�����,�<���aY��|��,�M���y�����0)a���vO���\�eJ=�v\��'b:�,�_2F�-����)x��UG��d�YM�E�����t�.uQ|~Q�^#q9���z`K4�jТ�TɊY�=�6[8cih�&�'uZ�a+����$r�*7J�;��X�!�#�`��{ �$�-24�r/z��- ���e� ��Nz^�Lg(m�'�%D�S��~L���ģٟa"��%Zr�5�x +�t��IJ�2V���%#3ү�ݏ���� �ƹ�~��$�� $� �RGkO�(� '��mA�@����{�Yl�S0�N��3�&c,�O�fs���Q!�+�G����B[ײa�!���Ĵd�P����(L4X��"}�A~�B�g�L�$�Ӡ�31�ZWH���������J(�#W-&��0Qp���R��&f�˃��Wd�oQ R��gW5rO�8C\��K��FTga��d�fYR���\\àь�� �K����0&5H�E�����ط��� yf�~`Qs�|�݃7�,&¤�AbD)�����F'��8��D�au2��,��ŗ��e�,�`�^��[�⌞�m��Bmd(B��iX�@�sk2�z(E����\@K��Y�%��i�Óh[�e�=��I�41�P���X�$�Ԑ,ۆ��(el%fSF�8l.kS�Yb/�Yv�3d�osJ%Y4(�"h�r�g���u�%"r(����h�(��i4a1�P�0�2��� � +t���v�em�C +^T�$��[�3m)H�n�s�L��G)���B>���3|�!F.�qK{8�ئ����@�>�^ZӰ��Gp�K�۠4YA1b�bg-4��F�FJU�O� u=0zI?�~N�(�y/I���n���m6�s���w�1�,��4d�Ƕ/�e�f�ti�)�O&�@�R�s�� ø|���Cʊu5�{�\�86�1-����O@��HC��|< ��<)T��EhD2�8!EA�;����˪��r��{8I�=֡��F�t�����t��9_��?�� ��J�Qlr|�����"SEN!��3�:�~ �L�4Q�R�x�k�t%; &��!��I����Q �б�!Sz�z�{��ۙ�_&փbW� E{���Y�Md�:�#����u��#��D˰��4� ���Q�-������&�!F푝��бK�����ܱ���&m����M�,/����1Ǔt�h5w2Y�g�4*����-�UR_.�� �,� +$(��1YD�ːފ}�0�Rj�Tw���$��3�KɘlG��T +}V=L6I�zpSFM�����u�V�mF�����������;�Je���ʙ��^E���>������ �By��˶��V��)��L�{C-7�!�Y�`E̥���5��_��<�����0 ��l�)g�6��/ 8�3#ކ����^A��[\=K-��M[�N`�<�P��v����#*C#<5��C'�G<-��n<11"�jcm��]ʶ�жE�ٟ��&�n�4�҂�V;")�ڬ��!Ô->,��>I�D��&Frʁ�Ք 2^�"�(\kID%�ő�_�&*i�w� C���GmJE�C�VUϚ�4P0s��̞�Ƞ��%��%�=�h/b�{I&�a�^�8��PC �#]S�+1�3��3^�������>4}��qc �hEJ��F +����c��b�Z#�Fq���X#��9��:tX����5%]_�p�\U)�]!S_�u�:+�itK�[TEFj;58N�A�I#m5����N�"m���Y��I-�Ή�4��.�&2J�VҨC5��Z7Xd�*��5t�0%?2e�{����bFh��pM5�Ө̒(tTͳ�i} iӶF�o����Ϫ�IZi�B������'�8]椦�F��JOs�Tz(j��4 vģ�kM|�����蘆B���S��.Cw�c�æM�oM����$۸+2XO1����u���=�>c�x�J]5�� �gem�A]��;d��2�x�$'ѱ��c��8���Ъ�F�K_[��r/Xb�JDm�� + �����EC2W�3ϰllH�R���ggt�bn��H[�x�1�d��m $_?�,8�6*���S$�k�M�ZdKTVLO<���m ����ף�A�T=�.p���U�l�ug��*R�a�u̚ds�U���1��t>�;���aO� �Y���en1BӧA�IDj�ʄM��B1l�GƦ�� �1A����t�������e���/�ki��C1�S�K�t�Y�� +�C1�@`= ?{xSn�t`�rB�'Z�����\�.� B9Q��!�v�p�م����3��ވ�Q�Vz� ���y-�-�6]��#)�v�>�,g��!��ϞrN��$d-&�[t� ~��a�|��lyF�q������\f-~i�q�w��1xo��<��e�Z'�vb��!�&P#}���1�^�R�.&H��X���OuzV|#\���42�1�Fdwt�Q�`5c(�)sTgz�}(��i�d` ���' ��I���L{`� ]_\�d,�RIr�{bq���Ḥ�>K�2�̅T;���,�fQ�h`eЮc#�&��"pP���%�1�}�l� ��9���Đ�zHO��1�Iz��nN��'}�3Ij5���@u|�CT�x�WHj�Mlco��vz�XHNO�k�wHM- �l�h���&:Z�:�>�)�u�X�ڄ}=l�Qӽ�2�A� �ׅ+�w��Ɋ�,8��0�T��(|cK]��g�B�����C(�"qW �9��E* +��qf?��tG�Ȇrۚ{9Fv�����5��Ʊ�4�H��&� ��f��V4�����'5�v��X}|�9)��`M/}�?�(n��p��B�^lt�?D��e�W%�g,��w�f������5}&�l�c��:B��UIIa'�p�������c����K-����4+J"�&��~��X�j,a]�G�D�YՈF� +W �J�Ƌ ��T�mvҕ�#��%s3юl4�ck �^SLł�j �=� �'���5���A�ԩ��D�A�#(��Nkc�(M�V�S`>HHP�FîgçB���HL��rԎ����2;"�ޓ*i�I����j��ԕ�~��|��w6ꆓ2aܦ`���BW*�c�L/<���7T��)��U�Gj Jf��3O��SZ���N�3?0�Xks��Y��h��>Y���2ڗypq��(�?1ejl�PG�6A�rN�Rz���ꗪ��a��W}�����c�S"��;)�N�-�˦q�H�Ȓ��S���ʔr�ց�Ge�p����g�k���p��2vEy� $��4b�+�0�g�M�P �Ӧ��v��3=C.�j��c�$-r���A�&���v4���C�dx"����c���r2^[��$�x�g���ښ��s*�(�a�,r�{�����Ֆ=ǒs�5ɼ��Ƶ��g��b�Y� eem���>��H��J7�~5���������3Adm/���`�ď����c� W����[���(q�;evL� Fm�,r�,�� ���M��xm����p[�mW�َ�/���"I�l�{�f62l3�ʦ ����bm�ǼHrJd'������˼O��r�pLd�!�r'�ꢀv\MD��|n�ܪ�KQ�9 v���}�3�����y;&Đ*�V��E^�Ab[)}i* �b�R�|�|>�����}��}GA���Qrd�n<Pd�,aY��r�k/�&�E&W%���0�Y�c 5x��q�T�����W�N��?���Aڵ����B���Sq�U�A��d�_�3/�����j��#`+"+�&q�H'�N/I4��ԍF +AF�i���H85�f,3uV=����������-W��'�w��D�����Z�_�4 Q�HPY��q����ňo���ֳ�S����9@�h�>{ճ^�j��9FCD��|��ɩ��c:�gx�t��GZJ��<��n%��=R^�Z���w-�?}���`�L����3a�M�C�����gWъ�+1 >�Y�����1�I�\�e�G(̺�4M�,'g��$Oز����荅�`_�)ب���ں�� +63 ��� ����@�`��l� fm��[phn�\����'0{��������'8��[����dpo��!)�������ntAv���ގ~��n��H �F����%`c��O�֮!T@�(,��Esq��@�P�(�m\�t�m�J��]|�����"�A��z<ˊe����ߤ<O�%�R.пM݄ƀ���k�њ��B�Ά5��#B:,4Yl�i�Y#d�B�G���Ƒ]�0���Dc�]YS��f���4!c�p�T�ݻ��Ϯ�?3�{7 +����]�M)�&���^��Br;�Km���*$�C�֝��^�4hł�r +�qm[���u��1J&��n[z |�r����O�%ܕ��M�Pm6z�l)A�Y�y֪ŷT���aa��ZV�6�>�na��{��������f�p�8�rjv;�\n�{�CX\a�~�K�r:�������2�@-L�-�t��j��*z���Ģ�8]���jZD%S�7�!*D{�67V\e�P�J��6U[�c�ڍ���U��o<�ZE���V�Ó�������{]�� �g-ԯ_x-��i���ٶ" �0�߂²Y�q�苏��y��a �i��Po�q^����NF���1/l�,���� �x�r�(볷��@T��D������uEy�_��$�+:R<l�n־F���<^I�x�3�B�������>[ׇ�/蚳�7za>|ѯ���?��~���YK�\y�����Qf�ڵIj�`�<�͈��*��?��.ѣ�?� W��|'��FH�ي��Tkh�'��"N>�5�N���7i/ݦ#��g~�"YnsԼ�ϳ��x/}������B��R�߀w��:O:��8��$�U�s�2K�r}����Y���8�˃�,���S�4g"��Ƕ�O�!��Vy1O�k6��\���l ���_�W��A۷���e��g@�ۃW���h6�����nĥ�n�����z��z`����� ��9�͢����= +�p����� 9*,�?:��Vb8Kx��>�y���!ӂ��l�oܓ_Ψ�s)ʎ#�R�� ���+X���I�Be�+Q�m�L�� iO3MJ"iS����u����ҫ��E1=��]`da,>?�ME���봳�Ր'+<ScP*��� +))�f�S95B��IB��Ш�Ӽy(��wZ��9F��c�K�NM��G�^�p�D��9�l�4��G��#��l������Z����'�^���w6}|� +]8�k��-�;!�%��0� +�k�����f '�(wBZ�w��Jr�;���b�f���ޥ!�c۩P!�S�%��������^�$E�{����w�����sD��l��[#�>�y���gT���%����L�s�ݹ�^�δ ��>]�M`�l����,��$�궪i�X'2x���s�ƣ�r��_z���y,&�!5�,�@ k]���ۭai�=��������~���N#w�-��{|x�p/dIN�1�@��G9��Is=�$�GY_�<���P��������&|Fi�"v1(��ĉ@u��r��<b�OR�&F%���s�I��;-j;3�F�?���h�,@zE���*�a���['��Ӓ����B�TK^�PDǣg��O���tr�U�%l��$]������>X��HW{��O���<�Foe�O�v���q#_��m�/>����EK�N�h�v3(�u&F�L�h����sA�`]��QwK:z*���·^�ӿ�d��cm��Ha���B� +f#�]2�w�X�WK\��I��ʓ*dI���D�G�y�d[�(%�LM�p��8,P�>sk�c�Y�⡣�t8�Rq�q��N�5����GSw��_���,a )^��M,]v�ғ.0qSg�0�H��{D���]b��θ�yP�6�!�4�� �kK���u^e�����)f=ە�� ���� +Q�H�'�f�� nF"�E�X�j�I��77���N�7����S�#��$>������aA��ś��c��ɎB�3����>�TY =W�M����I�K�j?�H�9؎C��-��4G��S�{T�*��!���.jRx!'�;� +���x�u�l�hFD�2+)�z8�I�k�3h�{��2;&*~����êe�ƪS-�o&F�`+�ȗc2�a���p +q��cv���O@N^�/�c$%nmF2%0q);�N����<�����}Ssˠԓ4�D��b[������5�fo���� ���m.n�y�5�zr �LX93G�e8�J*]�'�-�� �Z�H���^��H�^��8]3��t4�/��,q* W��a/�H�w_H���V����C��̞�~T�v�f@��9�<M�t�05�F�Z_�HRC� ��L�RmM�5������ ��Oü�"�v�KF|��Kd��?���wσ%��ؖ�|*�:7@ {�gu�#1����k��e�*�*��!� �Ȋ������&UV�H���x�>u���q���z�H��f��=KUO����Q�m*����[ǝ�j�Š="Y�cI>���*䤫��#��0�����;u�ʥf3; ���ҙ�{�P�p�cp�A��3U�7gJ�-{������"�I��u�G����o~���1�����Y�|��n���7���Ξ��c�UJ�ƶP��7g�;Jo�x���!Ui�8v���!���:�W�$Y�Ҷ�� @�`*z!&�����hc`s����4��h����i�v9��y'uNZ'pU����44�qe���392U)��I��7B�R��"9��Y^�� �LN�F���B% �&�t�7|a��e�����I������ʵ�dA�|SS�_'��\wa�n@w��c��f�Ǣ��p�Za�=~�.�x�uy�`�%�Xw��6�k�U��>n�4����o�fq_g��,3�]3ry�q\GĎ�)u+��.��zh�q�~��}�G�+�N�#5C`璜��A�;)�8�.o��lR�Mַx�1�v�� � ��$�+�(^�54��J�b3�: e +������S��d��� m#z�h����h�V۔�mau�*kȥ �m��Z4�_�s=�[Ż�\eVWB�IlÐꮀ�������B��5��A�a� K=,鉘�<�m�#�N���� ��4�ƹ��A�!�ƖH�S;Ėk���l��<Qq��%�b��L�J~�4&C�?�L��c����ҏ�l��K�h�7���B��%�K��� �T$� ]��i���ҕ���3�nUOԹ*D={��آ��n�T����$��P,D`�WCA��B�y!o�����9)ì��y�2��u1Ё#9�Y,_I}5���.zs��S�"��A{O�!�ug���'pcf=�Pۻ�b�66�9������ ���U4o`�8� {��_�8XÕf�?� �Ɓ�~�e��'�U���=�`��v&�M�K����y�U4o@�*�w)MW�&��ZH.�%oL�uy��~���e�L�Ĵ�-l-I,6�d{GN��bU}\�-��h�ȯS�� ���P�,@E;��t�UD.��76��<Tz�.�"%(��\r�%�}A��1]'�}�!mwOmc��f� ����.Γ�B�q;ۅkf�^�D�E�S`k�������f��X���v]��T.��VV�%�������]�b�G��m'�Ƌ�Y�h�����00���j�=Cr�(W���f�gB�զ�e�#G������ �k�Ǧ�#�د/0_��b����&��Ղ�R�!n�����k��j���!�FǙ�,�>�C�:�7ߐF��d�rf_`����ټ5]_��\�����wO��6���ğ�]�ÄZ@:+Ձ\��]������ Q�39 ^A+�v�>�鰤��nҠV��FʮTU�v�]���;N����|�]iCg��$D���Tv��B�ro^��T{��!)���FP���'d#�o�����!��7P�T�*��(��P���o���2Ts}T����И.~��n>7ڥ��Dž<�.�hˡ�-��e���,^h�Ȩuշ�P���%)�F��\Iw�(��]��dDL!l8d��.l�q�J����:I�پ�P�}�n�tZ +>-��^;)��o��������;��4� Z�orUU +gG;�[�8���D+�h�=������:]��L"8o�n%Wy�ʕ��$ar�B�p�{!�0�5��Ay�.}�*-�-D*U��#9)IX�v�(���;�E����#KSo� +XQ��YO�ںMtꭠq-�lo������R�J�o��Nߡ��E������=�I��j^��]j{���6��h9r�p�"Ƒ��vys�hc7��<r.|��z��6���g?=m.�do�l17Ф�8�/�r��<t[ �:Dm�g�'��r���h����֔�I���,�ՓC����!'�4"�q6 a`�r� ���+=�{4ڙ�q��Z +�Ԧ�^������� +�*�"$�5�JU�P�st��vxB1��63w c)�Q\L����59m`��3���ġ���'���mY]讳 m}}��;��~%""�e;���`H۔`�=��~+�Q٭\��*Ym�P��!,�� �Y"�3°I��Ts �T�b�Ϣ�3�&z�� +Z� +����0���c�Z�f�R�,ăQ�pf�|��ouR�h�E+"�7CK���J:��$*�slA� �&�v�|32�ȥ4��S���t�$��e�F�`��z+Xr�+ M٦�+��̩�S��D��nL�X���"��H� �h A�Uޅ�j���FX�_Ӣ[k�V5����7�o��,ny�'~'�qF�t^�p���TY�pT%���N�cN�s�%OJ'TJ�lh^�_��5?��$��E c���3�Y��������4���?;�Y��|�F݂!9z$S�}���x�St�fI0�A<� +��-;Ӵn�8%Q�`p�&�3[ +���#/L}�������w�� Գ���߬�l�\��� � +,e��k1�J�yӣ�Ѣ�X`l�٭A�C����kr�đ]�&�����"��ŷo���'�M�;�Y�|�����c��DQ<ߴ"�z�j6�=�����c����M@#W�X<vݠ���<H��{�� ]�(�5F�Y�Lh���j�=�u��4^I���=����ꞣLdk�\X�e%z�ł`���c��l�+�(�����-���"e��M�����s�tD�:I� +�0�襗>�p���p�^��'5���[/���.�r�A�B�ҹ�&�] ���wA�Z$(-o����k��v���^TB�w�j����l�!s5Sw^z�!BSɻ��^��_hŽ�g?���U�i�}ol��v�r;�f���"�X���[��e" +]���o��Q��ΜWW�qT�n��%9�"Ui�q��Em\���K.Ǻ�!'~&��ӎ�O��(����9nW}HZ"I��˞���b�J��aW���Vя�����]LTz>|u9H�~��Կ5����S���D��ԉ:�-��7%�qyl���O�wY��@�������ٽG��� <(�e�E����8��y.?����]b�p�?]4{J�x)��Oo�CUQ��}9�����Oo��f���e�C�Ė5���t(���n�:��.j0����E��/�h�Du6r��m7��ڿ]u��.@Lc#w�:��G�\�40�CI3����6|T")2�g@��u�5Q������x��p��Zv>�:�$u2�M�a�v��p�]�zqؙ���Ή�|u��1B\t����.�>�u����ފta��7;>e8l�Z��;�.h�.�=mvH�l���t5:(��N}U\W����vf�Qj��-:��@I�e��?^���Z�m������4w�n���W���z��a)�h�1���mA�EF%ԁ���i�u`�u��]˿�kc�%�̭��(\�FP��:}.����.�Pۖ��:���L1���}v�<X˿ �-��2)��//��~c���_��%+{�D��[8�X�<���>T�C�UЦ��՛�xWx���C��9�7����L��Q��"8��_�(B�|����[�=�6p6��K�W�a�pX�B!�W���}S��t��B�G��s%c����QoH�4�Z�<^������$�+6o��C�/�Ы8��b����^���]7���d�D�w�t���z!��-����:0l|����ƫ�u��p�:0ċ���7��&��?���q"<�*L�l~� 7�Vm�����1�a<�C[���C&|R8�I �p�炍�Lv�y�T���#���̚ +� �Gʠ�}"<���[g�:b<��Fn�� ܱ�z���n�;Cf+�l��>� �J]�C4�gL{;XJ["NEio�^J�<��u�ޜ\&Զ'Yc�[7I�g���W]�߹L�;��Շ8h I��v�x$�s��F7u!�&��&ʶ�2������K<K�JZ�GKҚ��B�wV�Pɦш p��O=���c��!3���*J�}� ����� # Ab̄r�S�Y1Ú�x,��($����2�\�ژ���:5թ5���N���>�� �E�'��<8�Fe�>\�>�x5��ж�J�m�(�/��x��p���f����N,��RNj�d���$9������j_��~�l�7�����t����L+S�i_�y?�r����<`���n[�'�m�0��3-<(�um��6�`x��6�8{�݊M�..f~����Q��^������#t�0BtY����*%��ZkV� �7��f��H����;�ȇv�Ng��l8�kߜz����7�s�SM6��A�8O?��s�DcsB='�TYј$�R<ϴ�H����u�a[�&�\O�֎ -�(�VasH�Y>U�XVi�G3!A����z̭bY�`n6�3�^�Z:]dΐ��l��e���1�W^偺<4�u"�N`�RN��֑\<I,�Д�l�/rI�Vb~I�� eXZ� +�I��15pA��P�cf���v�& +�C|��#)fF�TWf"euП��Nu�$։� +:���>�l��%���O�=�j�7�������m��+�O6��L�pě��E�f����U'�w��҅uR(U:\v+���L?�;E���r�_�B�y.�.�r�+9�����;.�� +yl�T����w��6 {h��lv�K�;���!4҅?�:z�J7�E��~��@�E��H��)���w�Ә�]�Aj�����N�D�W�t�2���C���I���z9Ur��]��O�Թ�¯��D$��E_�SR5�qDᛑVQS^��a��?�?� J��W�}n|�8"� �����S@o��n`:\s�� �%�����"��Ȑ�+(XI�o9��JD ���r1qy��N��6����X���=����� 6O�\�Rs����}���u69�jR�$î)������n�����]av��xj�foC�֒���u,�G�B�a��3�Ú\��vr�m/�>�;[�%G�Z��B5a�k{j`rh���ct�/�R�z��N�mJ"��[�g8u���xmv�Q#J� �����q!�k����X(�T�v���o����_ui�vO��v�D%G�Ї�0(S����#���BiA5�?��+ �m�2���Ĺ.ul4�#L]�o:��aӵJ��7#rAm�5g�H3X�~D4�y������9��ö-*Uh�٠�����"�;��jmcT�� �(��R��՝+��=&����&�(X[nC�'`�j�%U��@�=� K�=�0���d��JR%��Ft�Ģx7��q��&��$�d�R-�K�ʦ�æoœ�8�T?ظ�p]L8��#T{��n#'~cm�� . +�W}��~ +�@wM�(�9Co�y ���%����G�>���(+���t�M�Bڦ^�+Е 9N����bڄ����$���NN�0�>@���$��hI�;��6�o-�#ϗh�ƳJ�c��.u��pn��(��5�2mB�fҢ6�!>��9[���K�f�����&�o�#\���}[�\�(�g$u�:�!9�����͐�]|�䓍D��\I#Ȯ� +�|M��S��t�~B₯8�)��Z�tI�C�I�Kjٵ>I�F��a?�R��Z���ͭ�f»9 +x�\2���<�G��n4kv �A"P�`}�4eS%�s�>�O�GRd���8X��ͼۋ�31�YP�<6?�"CRΗ��͕È퍇Q���&�7ھ�{n��6������5�(6R�e���&j�)�z����lNh|��$l3��њ� ,LdH����mD/"��J���E�C���9~qm"�kou��R���D���ʀ�$��B�Z��lL���A���H�q�S�����q�ttI9l3�������g�2# +�FTr�fO��F:���썆����IĊ����ؿ.1\�b�����,�n۽�{�{���)�Ђ��*4k(�;\�&��In��ʭ=/b��g��6~A9oP�0.W�-�m�6 lu��. +�;��h>��_=R?j����Go����C+����8�EѦ���r��D���`�$EǏ�]���,ګ�zI�$�A�9��Yg�ms��0���L\V>�f������fҰ7щD7���v1Ӈ�[ݧ�d�ȅ�.4]�*�)�^�ظ����|�:�!k����<��k�5��A3"����E�xm�� ��S�CM_ �,M�O�a�["�?�x`��Qw���A��BT*�P�M� �kw6�:Xm�L_ބ����ت��!�d�&��BH#�R`W�� +a�H-P�\����dDGH�%t���pXkY��&���ޠS4�jz/�ю�:R��ݥE�F}�S�f[X+�zkڱ��Oϰ�{�>}�D3�(@B^HYx���ॷ饊�#H�fW�Ǐi*n[�R�����.'���_�˘Q�ڪ��vP�k�큿�E �h�ݱ�x�A��}��3�=Q���K�r��`�z�T�{�J)a q��t&۲�t>\��P���h�|[�1�ZP6�U�d��yY����BZW��1%-u�55� ���>Ō ����"�Rc�Ztx����b��Ý"���l9�Q��b���XI=�!7�9�d�w����,:V �� +�����X���Rd�jG�~�NBls[���Yk��S0�M}�� ��7�I4(��z(���MGpPY�`7� �kG���XQ�w +. DJ���*�(C����zh�k��� qQ# ���Ӝ1M��%R(H\[���7̃��ZA�4���^Urw�Ds]��bm��#س*������-� +����� +݅-x\�R]W��L;�p�ڧ�|�$<j�|���X����Rl��~�TnN�%=`z ��*�SR�M����PZ�-�B��h�%��ou� tm����n��B��M��(mg���֡�����BS�/>�r�E��F���C�ޱ��F�M��l1k��[��N�C.�uݠdnod�#˛��G�7$ �>�`u���m*�>ӸԞ�"��=|i0�O]/ +����v���7���:/h�x�sU����ۋ�6k�����t(��XV���rw�Ӻ^�b��7����#+P�����z{#as�"��Q�Wz�`�K��xf��E��[3k��G���I*Cr��Ҵ���jA"�7���<���;{/j��DIi���T�8�%ŃɇL#_��6en��O6���Wr�yF�2Z{9�1����YDC��,4�X��v��R�e��쯭�J�k!%��-v�g<�h)�V���'w�� +U�ہ��!��(%��VW�e{r_pU�D�U��Y�E;�N�i���8_��:S.�'�s�+̦C�'�zsh�k�&Ů�P�w���S҄��(8���=��4"�<�`]�[PIޘ�������%N�l��ꚫE/S�E~�������)ט���ھ[@L����[�U!BA��Qn ��l��p�� I��<A��`��c�m�7v�0,qZ%n<�Bzi�x/���r�7�Y#Td��cBߍ�}�ڃ���ۇ|1����5��q��S��,�:��R!������k�0_�@R٨i���Y�������,�E��%�8�44���EL��p�4t���6�R-�)5-���%�k�� +�qBc�G[ D����k���8ϥ�f����N���E:�9�������u�{><���6�� ��h\H�Z�CË�!g_�� �ԃ� =������M��V�����)��(,�T���Hl�v���uƴ��~�N�y�zFH�J$����嗐be�j^�X�e��2���;TzJ��j[8����dq��X +�rb�.Z51����-�kV�2(H#�Q_���Px��>gS�m��U�u�$�YfnE�5�(zJ��Hf�j>;�Z�۾�MN��w����ihGd���ͬd�dLs�c�5 +5�,2���a��0iqb>z�/����k�r��]�ѕ���]�ac�#Ҷ1�I��T�Ѥ�Ү��k���^�J�ݝZkN8���B�J���<��a|({���u�o{-�a�|�Pz��R�S#ש�)�zz���*P�ך�&.:T��Ę�C]�kU�/sij��Z7�I�o3/�z�B�5����@��.��EQ�9���Lּa���Z����W��Z�lV���-����YW~��x���������:y|Ak�}�~C�Z�N��?��O�yf� +^��vA�'� +���h�c<�_@sl�o@������#�T�n:����� �݊����so�����n�+�h5��� }ښ�����^�]{�[[�@`�~ Y����l� ����h����y�� +����L�ֱ[���S@�џ\���/�v��m�X7���O�2����Q�Н���!l �z��m��! +0�NE�.,����.��C�p��@3��׀5b�?��7�� ��s�������C���?���cߦ4~M�D@�̪D<�.)��!��P�'�e�b_�1�3��Uh��&�bSŚD��k".6x�I����5{L�LbhQ�f$�F����2!7ZnަVC�N�̆��;�{� +����h�#�n�5��v9��3���C�UH����mz>����~�$[+�#mWi��Y+�9n�z�&�]�$6�U���Vrb��"Ԧ��'�aKeIO-f�A��S�����ا�5.f�����w�~-��}\!ױM�D,�5�쥻bR�R�m����~�{j��wW,��ϮU��E+�2 +{\,^��^�9?� +_k��p�E8�Е�k�M 4�2*tT{�zl�C=�`�������,kq8��Z`�O��?o��Z�~�\����Yֲ{��k��13v��8�V�A��+!���!���� +����g��7m��/�ND��)��i�*���3���Ҽ��x.�P� +��fy�ye�@��!Y�ޙ�O�u�/�$�f�x�qEQdǩ��I�rW8`K��� +g�S;���Bq�B�F��a��TiC�``�8����m���y9nA� ��|�=^?��4����'rAJ������?u�� �P��9�Қ3�U�/ 3����:@"B?�{��y��������<������w�y�����Dr�ڦ�7�?�< m�x]�z�v�L��m���ԣ4l�}q�����������k%���0�rd@��F`c�(��T}]�H2�!��e�qY���@�{?Iq��h"40��pD�hsR��;�W��١��Y��od]��v���Z�Y�]v��ϲ��J��iә��Q���W`�G+����[�h�/`+��i�m~�L�����m�VtqPd�g���i eR�Do#c^�� "GH��1��h{Z���� ����7�� d~�u��(g�윙P24$��_��_������O�{�6r�w�]j��S#>�y�i0�s}VO�%����x*& A���J<q���T�E ��mD65�.��ɴ%�<Ag��id���c��[�K��S#��A�|����?�ߊݠO~�=ק5זD���g��Kn�H���at�"����M`���F3�M�7���܌ �I)~9S���n �g;��U��]����#�$Rf�ڴ����&��vR^�L��?+OU����k诖�MW�0�aZTV�X���WMYY�I`�^o�g�"��|��m�8�;�`Qr-������Ia���0T����N���]��2a��e�n +�Q�>S�|�q�Pr�7����s��6�O��Df��&s/�P�Q���nQP�c4�ޟ����A���Ǻ�[նW�RU�D�}�7H�Ko�)����Ym�ɺ�=�!��,�FPLD*W���<����:u�������"������R�<����ӕ�O���'��Ƙ�Y/q�T(�li8k�f���Eݒ�@�m���,&?O��ef���k�pJ�Bg�<+?qݩ�GISr�ĵkWR��½�-����S(�֛g4l%�U�h��7!I� +��w�ai���1�����~6����}�{�!l��]��&� +�v�b��XM�vJK�f����F}�H�s[�+]�t����I�ZlcbxL/��?���)L���sH�B�R�Ti(�~�#������hf�����G+J�Zx�+i��������/�4�^�W3��.M��G3����Sx4#O��Gs�4���>�h�D��@S��h���,����f���e�KJ�e���Es%�$���~˨H���MJ�4;��H���{f��<���~K���7�y��t���~K����f��t���~K�x�#���S�4W��':͕�~��,��N3��o�4K}�ӼY�o͏Ƿo�ѓe�Do��y�2���0�&Ft�gۨ��6��I[�Q{����x�)�{��,5��������+�*؝�αQ}�7D��3J�3%�Ⱦf@��\ٜ�7�E�W���v��+ _q��E�)����� +;�*�j���u����w�}��|��$M��[���������p_��k�n��|�{�W�x�����I7�K��6���`�R�LUv^h�}��0�V���F�53?xӶJG��u�_i�e��8�8���`mY�!bP���;;スEXb:��ע K�3��֘�q�uE~���)��� +���U5�ڰ6�I���U�Լ�gE��U���N'�(�l�X�a�'� ����JTk�]� �h���� j��6�N0�;qX���ڰ�M}ٓMi؆HTB����a[��[@�?�zO�P�U#���b� �ZV���)þ7-�`��:rSQ�mg��z�j��z�j��z�����`�n��`�z�����`�|�m�j���=�W3��'+��V.�'s�����;k�Wk�k�w�.�'��.�'��,�(�]T\�]T\�]TV�Y����Z����ڻ��W2x�~�&�ݢ�hQó��t�˳,��,���@œ,n��%�E�|6B��/��}�B���7�5�"ӕG@�m�������G��'������_͝�u���*���?�C\��z�ns��n�~5���&�5�N呝��N�E��yQ�Fvm�A_#\6�c������C,O[ݱf!(�z�g�||��͆� 7z��ʍ��#�Gs�m�=6rc< �[�?�-�1�O�.n�����W�1Z��x�9*��7���{�Fm�҇���b�6�M�p��۬��X��&��Bwm��ʕ�SZ\����X��J���QC-O��jt�;��B��Uɀ�2m������� +K�lxR���%M�ώ�W�&��MB�� <.nrwר:�]$_d|v�L�<�o<鍨�H�}s�ci%@���R@�[�h��,�Y +��o�Ƨ�����f���4O��5=P�ix�Do�xB)�= ��i}����z�ɱ��\�Γ�l��9F��k����1w�ʨ��m�H��xNv�9��l�%l��M��)}B�c\j+-A�S���O $�n���Qv������4�7�H��Rh5��,��ar���T��P������M�82�cY�s�w�ei`�rq9N��8��v}JyH��d �rLM�:"�hwP����^�A.�~#��ԛy��u2��@WC֓FɊ��)�x^�堦<m�6�l��1?�zY�}�ޱ�������zϹ�H�d���������%�t��_?��L���7���{A�-��N��C����zgF�k��0B?ӹ���"T��A����DɶG�w���@>��m[ڥ'Zoߌ�l{X=Kx"�Ծ}���A������K|�h�V��[9p·�m�s��+����i)�Wݧ�v9.��L��A9���2b,5˚�t��:˒c�I{ 2�erS�s6��[���UtNd�@����6�����~�*�k�Lx�a��~���Ov�0=��fv��v��q�_��G��.gU���Iġ���t��^<��j+��`|H}�U^qCP!7�7�z[T@�=:�W�0C��1��tb~JB�4��:�P�Ӗcyު,�ȷ�E1���v�9�b>�ߊȋ+�7 :\�9c�=�B��MM�~!Q�P~���NT����QP�'٩�AӘ�9��%��R�Rޓ�����T�5S�O�&�>��Ns��m�����<��V�Qh{���۬l��c�1�ȂҀ �Ͳ~�E��]�/�I�1�j�b5���=x�B>U��÷ټ���YU���옠>8!�m$%؋'��� �d��l0N���;6�z}��,@\��N4��mO/`6�J�B�~)���i$��?o���F(�V�s�n�ќ���#J��vZT�WMfo>����!����#;���%�����o;��S���{"�����#�f_��;�������j1�a��g��;w��T��������&6�A��ƚ/����m��E����D1����ڛ�������M�oX�r��m_މ1K +�N��-��y�A���8{?Pq1~�/�x\��bwNF�����5JQ�{v|��菾��KS���O����W?����O?��_���?������^����3]]��<}�=�ϐ0��U�fX����>�*���a�� +��A�6 �t���0&��j^ +��g7����a��Ӭ8��W�SMN�mkf>�(�i�Z��r�ܸ�L�1���e\�i���Y� �%��_t��)^�X���܃I�ٗ�f�tB�b����yR�p`\��6�[� +2�M���|&� +��:��<���£"3��G.�����|I�%��Tzf������,����`37bk�${��?�,B3���,L�9l[<�Z��r���k�&ڻ0d�w ���던��Ďk��@I�u*~���u��ur�� �8ZQ �T�)脫S�) q�C��}��WMe���7쬮"dS&��0��|J��N�>� �r���˿|/�zg�E#�)@״~�s�Q:��2�L\�dy`��d���X|t�n�DV���%Ȓ��J$���zɔѶ�*T��'��n�,���V�0�Ys�H_&�Y��|DHTf�9��O,x�u�I�)7A<��ZT�b3�о}誖&i��Wj.!M��)m��ᐈ��sgN�Z�u��Mc +-�7w��V�m�P�ZO�"�$G�D������*!��ޥ-#���JnV�M�;����W����0���G��ktF��ӠW#¯&�漤�d�R� #,� �-d�c��A�Y2!5>]�M�&Ʀ]j0��p���r�-�24�����*�B���^���:���Bޓ)8%w`���Nh��o�>���:+��!䭄�E8��mzÛ2�O���UE�U������b�C�C��ҩh;(�4�������*�MC�6��Q �T}���I�=���%n+bu�0K�h7sV<�Sǁ�[��������k�g�<ꝕ +��gxO}�C)�E�X��F:IZ!I$����a�#;�Y�/3_Tt��E�r�BI;Y]��v���PǞ������}K�C�T�'NJÚ���B\Ԛ�J\�b�� +���NJ�e�R`���mXi��ش�[�0]^�?�f�L"��]��Jl��6���}�@�Q�&F�H�����jer���61��2�u�b��ήJ�4s��P��"�D������/��7���(b�������<�b@�؝H������:'��;��>������N�[�O�}����Df�}e�!1-�pJ0�� �ѓ9g�&��B����r��+#vͩ��N��Dv +��IE��2W�'IN��m <D�]!o@M�,/Ax��N�$�2��^S���>RS��D�� L&��*��$���F ��UV�{�2�(V\�����������}�����wǖ�dg�R�ۤ��u�7?Ya��/4}m',�W֦����q:A%Do����mb^�M�M�[�W�E���;��'�@�Up@�6N��"m��>��M��e[���DʏC!l8�t�`�a"`�N�v@��l ��fJj����\s �.���k��M��墼�u̲��O�2��U;\�,�1iᲞ�6 +��v���� �D�S�؎���a�ټ� +��>���0j}^����U��Rj�(�&��]���(��vς6of@��CK�C��F��Fl�)� +�������1��%�p�;l�3����f5hS������IK@��J�S�S�¼X�m���l��:?}�il櫅T>��r˛9o�A��E� l�tX�T&�µ�l�Q$��5/��d��{;�\�u��@1���kV��ك�!�M�{����.V���;!����{��S�#l��(N���g�7��5(d����9&g��;��gaR�,$�V���4nV�u�*co�PcUk�j)!˒@�bc)b��pc�կ|�hߕ��8���}�N�2�&a�7B +�fR~rd3��{?h��j�F�k輢f��h���&s����;(6/�&e�8����Զ�;��׆6S��-����!���-����� ��U�M�mr=ױu�a��n��L!�B[���tk�k�aE�#і���NrU)��ȳ?�`,U��m0F�X��!������ �`@#w�&&�l ����������aP���Ԥ>p�N�[��5������$�Un��R�� �7;��<�mv~����N���o(��`NJBe���#S�<�uulrt}k�U��;9�ج-�ĹI����W�X�92��M�����4qeH��sKD�HL�l��Y�I�7ɬs +�0�M��F��YNS��r���h�=2wӍ\ܚ룏�*e�*<꼉5��I��0s���Qu�f4�ew�|ɇvzx�+fR��R�S�զ�)蒴EC��Yӽ���>G5��,)f($Ш��4��a�<�!~���~�,?c��� +97���O<=����������������a����Ǎz[}�������hs�bh�O.�F_����{m�Ǽ��_��r��U�I������j���@+�M���`.��a_߶k B��$(�=̟��*�Ta��94#���¦�vP��1 �[�F��_o�`��m8w{��W��CX���^m7��.O��j�1iX��j�$Rۉ: +�W�ѭ53ǟST϶:s���� +(������l˰p�������������&�h�vkRa����UZ���2�7�|�*�>Q��x���/yU�g��Ē�������AC�=O�'�������U�F��-�}s�lN�g��"����gw�AT���N亸�,��{� .��K������t�j���P���U +�7 2P%�?6�N�\�P�c�h4_|<�|�+��ߐh�˽��a@�6'�k<�"ir bd^�էG=�-xʼn��� 5�:åK�2�D��j��>�Yn.m���@�� +b�{�|��)T���{��^+�!v��^���Ncm���Gt�nk�v�9-G�xH~�����2CV�6G�ݳf��� 9FL�ߍ&^P3�M�Q���? �M$��v&b�u��6��X�xN{h�Y��<� +Ӣ�S��$!`��z� 7�B���N���y�T<h�8����l��<�/����=\&Y�X���4F���H1GNW,��w��xB:GN� ��~ғ_�71��uz����Zt x�۵���$�QoouL��3��}`�_�s�E��{*���$���g��loγ8�|Z��N����G��k�����UP�Z��sD�,aKC�iЋb�]&�I�v�]Ou�������7#H�d�0��}(&jx�I�C��P��5�h� �Uh�:%�0�����U;�h(���,#̌UF�Rܑ0 +�'$�CZ��w�,��]w� �.�)k��`"8\sy|קP^X�Ł�,��G�� T�(6�v��`!/)��^f����O02 ����Nt��@UYa�[��;;�A�+��ΧH�2.����Y�x�C26��:��$����S�tqy �u'���J���z���dR�R �%ս��'�7h]�BY�Gƪ��[h���֙i.Hى�Ї�S��y�f�%��d1�#�S +��%݊��$n{��w&�M�����~wB��Ի�����a�X�s��Ү�a��A�%����aw7�Ӛ����hӣ����2HQ�E�5��˵�����d���)9l�69�0��y\���!���BX����4;�����*� +&��5�[�����,��8�����f>���FߧDɠW_BB>�l�b�r��Cmbf�א�����o����ւ��k�|�ֺ�T�Y�M�����j�@v��#����f4��p����Q�S�j .�� �G�9h��4�0�A�]��B�T��y� +T��0b�LaTx7kU-�ߵ:��u��^��KQ�1'֒�~J���83��f��k�t�J�rk\lk�6.ص�_�K�8nk :�8K%{�o���u�%��o���v� %��it���ߘ��&a"D�21��֒(E0��lh@ul-� + v;�IV�`)[w!�[�� 2�O P�7�M���(�}�3�b���X�G.���`P���v��.� +� +��o'�� ��"v��_�u�N-���C�2�)V�]�L&V/�2��m$t�� +)��؊L�u+�1�+F�Fl��8j�s�g�W��>�^A��<+�5����"��ژ�X��1��b|���+�*nR3+jy�ᙘ�5?��1�4����T�j��� +� ������<��p}����6p�!� �wr�k��s���5/��Y�����w�CH��m8ta�r�߸�Ρ�c���#!�:PB�<��ls��<31�̈́~h���B�N������vu��]��¡*�Z��#�J�L�r"L���+~æ�RD*�j#"���hCk�H}*6��rr8+�q�s3��")K��]�R\c�I�'�y��տ���ǵ��^+\�c���Z�������pex6o�V��+oE��+��@=�t�o��v������`��ZU|��Z����)� +f|Gk�o4A�O�z����V^�g�n��Y˾a��q��o���*XK�q�5��x�U̐��_{3q�ϯv��f`%���Q�{�T+o����jBE�y/d�� �q@Om�Mj �e�>��`�b���f�y�bL����\���d�?FE��ߏ�x]8����*��u�O����y⛻�������wS'M 2������M�_>4c��ݚ�����TE7#�~*g�~~�M��Q���z�p`���3��< +֊7��"hĨ���mNQ�䚉h�'�W�&���G +R�%`e(�o�3�]��w����� ��� +�s������W��K��ߧ(<փ0Ή�n��pX����z�������r|�˛�������'\��w��:������/�/ni��,��"r�z�F\��v�o~��������>�Yup�f�#�b�BG�:���+\��%��'�2T�ՌL.a ���7��w{�`R�l��/g��s���!�}Q��,�Y>�tH-De?"cµ�*v�_pϜwL�$�p�?��_�Da�e��K�RѣI�`�I<!��s �A���c ��Ab���#�l�䕔V�6 ���v�x�?���C�G=�b�'��pȽ���f�X��hUفB�-%a1�s�[Np��+@:dQ� � j�X�F�N�J��f�:�+}#�$Rf���D���@�l���{^��:ɴӅ���FCykp��)�ܚ������9<�YΒ='9���&�G��������< j�zt���=i'�ފЛ�5*p�E@��� +����؇Sh��u�L�D.���t���d]�I%o���J�w�O�%�9g�gu����l���⨮u��K�{EA���:��P8�����+y1���]���ř�Lغ�B���E���VI��7P���)I��W| <��dl�����`��䝲_x������E�;���7��&R�I��=�%�����G�0C#i2VaJ����ph���A�B1�@�QN�Lu�JZo�KX�p� �z��N�C ����?��?'گ^�a�Pݶxm�y&K��v�tk'��.�g�2í��w�Da߾_ȽӇ7����g���f�)L�vf�g0��ľm�vY����3�q����������(v�%��k'�w�w�i��t���A/��ſ���^�}$���0�����i*4�gN(��X�?��R�jYS�3�x.��pո�=6'�s�J�$�����aM7�yΪ�N��}�C+Dˍ��< Hvں�R�j��zu��*�A[O�U���4=]]6�9[�{t��B��s�o��FfF�����G�����ɡ=0$������H^�@j���@�)ہ�9sV�L���LF[U�\%�Q%�Z\��J�A���,z:��f��Nh�"��%6��$�к�vn��Hy�ꆒ�=�'���<H�t�c�8�aѕ��<�'�6�^>���iT)y�*ݖ$��R�)y��>����!02tȦc�o���곞L5��� f��Qf)�]o~>�`���(5^�!.�v��ڏ���BOM���[��͜]�' jΫ�b�H�NA�2E�!-u*W�i' +iU�jj>��mS����X��ȗ��Wz�������x9�9��Զ�*�,^��Q-b}6��q���9�X��ښ+����r(z��5�u,�\$�0y�JvbSe�m#.v�B�}�\"�Isfh�����|��}�\��嚲��da!� +(Z.��p���F��s*�ͱ�)�z+B�Hޠp�;��0�&]����f��;z�b@�6 KV��m'�<��C�6jm2���/[eb�|Hm"�y��U�t��p��� ��^�Wf2�r�R�,��T���[���K�쿵9���d{T��c*�DҋP�s�ڪ���re���8�>�X�~wq�h�y4�,��5[�]�E��,g�h�����_���q�<k��K%k4���I|C�C�H;%���}Mj��U?�)s���C�i���P�_m�9�8��E�lM�}j�/ P�:��� �U�%�ʭ#�lڪ�b3F 0w8��γC���v��6S<PpTf,JvbY=�"����y�3�Di�h_�y֠)�6�6`��h�^t@ihx������� t���7�:{�)<��>�@e{w�] ��3/���Cڟc7�վ+���jW���ٳS@�\%��N{R�ʹwc��Z��1��a� ����O���$���d��ٳ۳����>�P�p�q3�@ �!>K���dǨ����`�m�#��~X4�{�w��/Z$ ��سN��]����ۿ�W�| �K�Eԝ� +�Ӝy��Z�\#W�Ը��y-���F>aR���y!ԆiQ�KanV��-'eGIbİV���iʴiG&4MVgg����v��G�E����Z7�z��@�P8@I)��>�;�{��~�H,j>Tl5�<:)��%(�}��ܠL��NK���u�o�%D����W]X��ۭ3�TY����(땇����B�z����ݿw��*���������kJ`�~�V�Q~LD�~���1U��$��0�*�M�Ş�s��`R��Ʉ���<����A�w{��r4����.e�q����^��c��9��i�/��W `�G���m�1T��ϵGn����9Oj����4A�R��@��f�m��;H���nϳu�uT3����Dc_j'�'.�J�M~���ǯ�e/�.����!<�W�;���[��[��aC�!n��I��07����m�����/�����f��/�����W?����_}���~��w?�T>��W݈w�ד��'������c���?���~���O����m/��fP�h����_f�������������������O���~����yy����~��?�������o�x���;y3������� ��Yr �x��{���?����������|��_|�������?�^���_|���o��������O~�����W?|4�����2v�� 0��G��������>�_}���{���������O�����~���S������/~5��߿��_~��_��g���o��Go��ЙlV��R�d��C*���<�,5�t�bޞ|D&xM�ܟ�?���ѓ���ڑ�?�'������_rz�_^���3����Ww���ͬ��:`���_�F�����l������f~������g������_������d��l�m��N�������C)�k8�/�A�� ���}�)�X��6��,�H�r�V7����p:@���l11���N-����)cɽ�#o�Wk�83�/�y���d +�����"�_��-�o@�@�l +�j�d��v,!b�۷!���F�����{�D�? .oF�" �~J)�2��{"A���>f2F����M*�;�#n�ܶq�`�n�ȋ����+��5��q�&p>���x���o�)��8ЅSmVܠPI(�O, ]`'�.���.�E����~�܋�a�� 3�<@8�$u�F#�#'�� ��辮.r�x�\���\\���8�(r'�O`�DBP�;���j��f5��8c�x<���s�Xh��T�s�l^�ʤui���w((qh�f���l�*ͮ������ߥԘ��v�H!�2]~�6��S� \=��4�g���A�; +oQ*�65���S�����ڛS+ˮ�z�o�V�b��i+`Qru��oG4��!#V�M�A�$H�fZ��w�t�P����Un�k-��/W� +�b�J��E�]ك��,�B�����B�h����=g��L4wjTF�i�ZL�����e�1���f��LF��K�=�^�W`8]-�� �1-��h�v�ŦD��=р��� �k��;�� a���$>{�>�S�{�cfLz���!:î� +�c��#K� �8����$M�J�(���ܻ����N� +;*VTмS^�&�D���1@�>��Yf߄,5 T'�^���N�eP�ƀ�����住�ϔ%q�E��uҠB ���N�+��lf9"h�U�P[N���U>LC�<�yc��>puN��E�T4�g�3�+�~�M��x���0%�j�"!V��)m���o~�����.�-�(� �ub��2u~I�B� 3�F4z��A@q�J]Hp;�}��r��)�܂�na�ӈ��9�\�YSG�`�t��V}�4D'˲�Е�1{?�B���<Es�ST�!�dz\wQ�D�i�9h�7�Е���_�d�U�_Wh\~`�@=p�j�h�@���� ��R�m=��u��ywx�p*T�ՠe���E�"9�q��)��hU7ۉЖ�'a!��?86�zyk��f���NTA +�j���mDR� ��3$����\C*� r���LcTB��Q;�(Z�_���0��`�@q�BCP4u�r!���=9��lz�*�sf�P�Q\K��o�@_ �d�V��k�2S�9����b,\�NWO�A��U95ᑆ1�� +�z��p�y�m�(eڌ�h���X��oML��l�]���/�j$�H0P@[�37�6����d�.��Ӽi���c�I3����ny@Vҕ�� k:Mi]N5=3BS����@�j��7�6�a������\��{K� ����[�⃬���AXx�*'���/���s407`d�����?A%�Z��Ij �8h._߃ �(�W��H��To12��n�σ�`�l�ͽ>�qKMb��>$��������韴��9 ���>,�W���{�P�����r~,��������%S�/����.��U�>@������nn3RM��R3%x[���� ز�+�~�O��WZRv�H�KE���>�*|�9�rH���g�� +R.�`<�G��5ͫ?&.]<%���2Q� t�T�R&��HB6���֨Y�LK��&HG����y@Hhlt�iFj0���N���� �@Vk,D�ty��}���끎��17�p����=�8���?+�?pIn�M7�B���;{�Sة�Io~$E��R�d �K�{����|���Ix9l<���+в��S�[�����D2���OM*��~�� ����C�0�H�wr}�K_���Zɩ�� 4���p^:p�r�q��O�G]��9+.}|�d�5���`p��2p���:v@�?&�r��!<����!-��,����m�q��"�}��u3�H����m�U���Bm��`N�B>����O��o�0��$��W��ڤ=ա^��f�~���Y��x�h8���kZ~vN*3�OCì�ӑ]��2�ND��[́��ToD�S&#[!&�F����.y_n?Ig)Fq��k�־˷m:�e����>b�"���ԃ���u�*ڝ�'k>�� +4�8`Ђ����w����>l}�z$�Cf]�}�Z����/�)�<��2H�¥Ԉ[:�mf<~��E�nlJGinP���� ;�u��K�l�`Ϻ�rv� ��H؈0��z�o��%s"��賦m���}b����L�Y��� ��ԯ�c�j����p�p�*��t�?ݘf ?I^� hui�:�]��d��R�s ����y���$�����d�\��)�ZX$:� +,���)�&H)̀ �Ќ��,E�D@�`d��|`��4z����'���s�1�, +�Ћ��Xb��~��C%>v9����.is�z���c0E<^O��sȁ��N�(��Srud)Y3���tрޓ=�]�?f?���}=˘�m�$� �c�Zhe�}in4�ѯ�#t�j��u`�y�)Z:ZI��JG>��A(i��=�J�Q��\�'�*��"��Jw*QЉ��Nw�{�XP�@��'�'i�#��йOfi�5��iP��x +�z8p@nQ��\x:h��s��P�'�n� @�i�3�"b;D-�����ޝ���~���N�W<�۳���(��r�n=����`���hNb���(�s��������� ���̧�h����r��:(+l|.��P�{� +��:%glӄ����h�[�7�i����vaFc�����t�x����r0��_�������ב�0H����B��� �mafz���"t�_�-qU���ٳja��00U�:cKԀ����������M��cx���B��hr��#��Bs U�)6�y@���Y;4W��Ge() B!}ON�=/��)�ol=x����B'F�;$�q�3�5�45�͂�l�:pOY�ޝK�>FEJ��E��v����X��T8�V� e��G>*��^��|d�B.�?�q��/�"��ǯh�1wÖNq�.l��C�.>�����E�������MLj8���T����|��r��%�1�c�����,HJ�w�K�&H�,�yh��8u�5�� +��ޘ����J��i��z�7��c�0�)��l�}b9Aޗ��y*剥�)��Wל���G}�Xv2���µ=��$��Wb1l�$��q'��e�PcTa�Q����6�-?h��~%r��H ��Dh��-����]���`�BBC��:ɁՁ��.M��`��0�=�z��bp���I���"� +���:w�>��Z6!�ܣ���iPiN�?V��$�����G�,-���{�]E?P|�I����÷@E�v�"v-�����s*+I�<��Y��X}��A��)�N=�; %l�����;uKZ����V�}����BN�Ejqu�ぷ�o8;� =T��dX�콞��`�l�D\d���$�wHE}��T�1۶�?���=93I�yT�F�`�����&��MꘐMⰬ��B�T� ��&O�Ay#i��.�h��zid���q���N��6/�H��$�j�Q��隅i��ӏ���1"7cǷ��>�����eh�;%�#I�($��_fL�k�%}:�0�[���OwJ��T����ǁ�<A�,��� ��.z��<�md���}oU���S1@����P����⚣�Y�fv�J���+��)Ak��ȃ�o�!9&��t�.%��X��������;�N�����PG%�if�\�t:�EN(��/i�x���u���"��C$~ù��)��K%b���x_;�q�f��̷ +͚UbZZ�����eZp��><�]�~��x���c�{��*����Χs�����ڬI,j���) ��oAS�Z� +Td��*̄�N�@��)��J����ˮ?%�Q��eBnFC��E#әʌ��4�::�ċ �����M�?�FT�@�J���ԉ6�b�ӹ�{76�]���(�<�$bkQ�<o'���!��ń�-�y5}�@��<�iҤBky�����%=��\�UT�E�'f*��:P��I��,�f���!~X�l�=�~�6q�:X��*��(�'"l�8�/�F��-^aO�{&���dC,�s�3�B�k�`�d����W�ґu�r�[wП@�I��#6�A�����'�9/��R�i.���Ts����x ��=q��G� |F�� �y���w����H�S�7W���'����1���b��Ӭ?�D�v���c9M��B W� .�UzO1�@�U`xd�:%6}9�$� \��.�z��e4F7�I�$վT?\�RE^>Ѩ�#�tx��z��ϣ&i�M������� �m)�)-�<�vV��C_��/t����({��[�A.DBq�^w���:M9">��7}S��s�`K�u��uܘ��h���Hw���\� ̱�͇�G=��@��`*]x +��������U���hR��CBp��}Ys��D9��w_ы�����L:��ިv�/�gm���,�":�xZ¥Y��XNwuJ�Y ��4,�$��#ۇ7#>�¿R�ǠV�7���L�7�h�䵪��W��]�2ٖ͞�_�i!���,�J/7��SU�Cq1���c��F���!w�G6^s:O�VO!mU!�`��ENp�!��c��&q����V�k<�f&">1߀w���z5"�f��x�Nc�-$9��+� �l�> +M[F5�D0� �\P�1�yvsm��\�K�dAގ����F���v�W���F"�vRPw.x ��B����}�P@�[ ���>����t?Se�k�a� �}�Z�uf�WB�C��C�ta������$�>� �1��� � �t��e7"ݸ�xl4Gu�tW�hE�p�� 5�+���!���"�[G<����I2�x�RK����u�j1���v��Ց���䯻���w)Z�ԮQ�tm;�]��Bw>� +Es����I$/���� ����o�w��PF�6P�)t6F@�!��P"������"��嘚t��S��������t�!V�ѪK ����)%�,[l���GL2{)WO��8�Z�K��,�-^���s�&���˝h_��K"Dg�Ӯi���!���%���eJRyne2m7���W��D����sǴ�MD�-����Y�3IK<m��|U�S`2��$D-;����qi���i�g$ Q��R����+��=�$ �|�^y�{$���p�0�a��͛�0�t��Qb�ƟO@>�C�����j\qMd��c���u�_�J+Xd����Lq�v���S�4���w����� ��%��s��|�c�j|6��k��h�������� ���j��*ͬ�Fin؞��x�> ���_��4��\�2�!]>�2���i���qP�=�&��A�yL &�4����@���<t/4�oG�JZX�� ��*s�;/�V}T�s�����#0���i����>�u�ޝ���a��)�?��������wKJ�#��?,y���))����㨿������T���w�]��M�bNm<$�2�6��&܌��g�=�xM�<�B�gE�c>�DB�����`b��i�Ƈ��$j��q�Z �I�B���Ŷ*3����*�:1��\G���]�uTo��ʽ��ؔPEj:��`�z �*�);�5�A�m��l�`\���t�xiz��i[�_��h��c"2���(uIB +,�}j�#�:�M�!˕<`-Q��b3�h���/��H�6g�9�-#A���lG_��*�/S�y�t^]�k��'�5��G3SG%NGQ����'��,���d|�t����N/~���fA4�g�P�N+�XC��*��&��Z��&�vN����7 +)�,�&3�H]��U��F����ž��1�=w���vN�7��J�Kȉ���b���_�����}��b�ˁ�x�Ӏ�9Ԛ�5B`m$N�$!�&����[�ޱ.��5r�5>��~j찉C=.�A<�7�H)�M�ţi�g��E5��=�d��5�m� ���U <=�D(6����Ң%�<T5)"�b��Ǽ�����x���ZӁ��n�����1.�d*kS���x*=����~W��ˁQΖ,Bvj�p^P�q;Z;^ V;�)o�'=�/AF�3Y�J��i�D�e�6�ӮK�3%4Yl�^�FB}$�0[����$�Z�\W +�@��u����l����{��9�V3�=�x)0�%:(�y]�<�� �A���k<�}��������;�$ D��] �]¤�'���s�y��i���vP�g���\)!���x���gMDž���-}����]$&������e��:z�"�RA�goR�� �E�y�2�[�2,Fw��� ���fH⩉���s�P�r��ps�nH#��8/�F�0��cN��N<�b,>�pE���a����d�;�D���w� u.��7g;��M�+�&Nz!�i\4�7����W ҟFF�}��UB/�:�S`KC�ZL(�P'�D�Z�(,��9F����"2��ω;��4>��z����T�+��@����]���/,�V�R��i%>�_HJs�e&� U�������)��(#�'�9n3�|N�����U,�rB�A�|g75 �"��q�&SF�e +v�"�����CY�EU���b:���Q3#vh�@�K��#J/�g�[v ��Z�P=|y�mҵ�JGr�ƹ�(�=�� +�ɕ�l\ �#1j&2c���\��m�C#z���,]5j+(��c斊�R��ٟ�P��*��>���xGG$�h�H'RJ�5�N4�Eu�v�����ە����@��5�����pT6�d��u�J�!�Rr��߽�y�`�v�RC@uuzgD�L2�b��Gxo=N���&��� $����"1:|�E�K��*K��B +=��E�$�ңI��2����n���D��a�;1�pż�����o� :��zT8ȵ��r��.�is��և�� �(�0�%�:�V^����ᤓ�=H����s���Hۖ;5)� +L �/!5O�}��\rV��J&9#�M-�Z,u�M;�)Iܭю�+�)���#5t"Ϲ!#�������^S�3��U�cEo�W��s��~#������������?��?������W���_��?��?��o��+�P���+�++ �0�����&�l���g{�x������z�����X2���}ec���jf�4@`�z� ũ��#����P�F��Ң�r� ���h�õ@C7�f4e�m�Av� +�>�N�ʁR��b��5��5�1�$��hOLֳC:�2���oe���o1�J~���X����?x�����l�%S'|�n�WM�0 z��xu���OX8���QX��l�o"����GB�����,��M���>`��F�����SJ����o����!Ljf�=� �Y�K�l��3�P�r�x�O%��zI&ca��L��X# �B����yr@1R�qYN��h�E���')f�+�X�� +��8lJ�QY��8C�hW�Ka(��o@�~����u�ge�QEQ�gA����ˏ�S�a-h��e�� (\+�Y<6K$d�i(�N��Q�����R��7��u^��q!����i��G���K�`�*HR�^��ҋL��Q"�5;$V�v{���7_�ӄu��.z(?�z�c|r���ثm������F�����P?oz�0yk�M���|8x�ѝ`�z%� ��A��E�ӆׄ�������YqʭI���dňPȅ�j8�Ǜ����g�d�W��U,WR����:9M|�u&+�xLɫYo!i);��@�@������4!���.� b3=��Y\��(}���s�1&��0'�W� b��Hd �|)g68�s�~g��M�3G��&��m��������[#�|�{�cTJ/5n�� +��"�g��$Ox_[��8��.4�>��{^6\�_%�[��j(d�u]��(e]3D��;�J�:�у����`~Qo|������T��K2���l~��'X�}���w`u�v����$I������7`��B"���wI��Z�A����h��_�*(&҂`A^�f��U�(V=!��Nv5��.��S�dg�����5�ʌ�]��rd��\N�I "��P��`J�<��1�QX� +JysK�)����T1�>y���8{�R�FQ-��|�e�T�pq(�iኈ�H�I�(���>��:&?d���햍��Dhͥ�Z��*Hn/�����i�� ˊy�O|����u߲F��z�ͫ�a��tU�і�v���+��B�5K��W�^��*��Q��mmP=����yQ���d�c܀X\p�ԕ^��(�}�����.Ȣ�!������Ns���c�c�)��w�������c�3�:I5�c~n�1�! �n�dj��|�TZ����!�0x�����\�̀��`(@.^���O�+F�Wb�;��=7z[���O��MU81{臎�&t,|8���k��8E60�#����V@O�4�� }��s�Nb�F*4D]�C��I���7����~�w�Q2�8Un�E�ҀH���� ��mNӈrl��w���^}w����ϒ&F������µ43O���[��5 ��p�a�(�̿��N��d]�.̖iɚ�O�!�Ѩ�� K�3�G�o�^ q9 O�#�5����x���M!.�Aؕ���%��s�.���!�ڪAy��2%�w�Nݯ���Q@G2�@���L����a��j�1��[ٔg��@7��SCkȲwX�8��O�����G.E3�J���v��|mha0�L��`�i�d8�MS�E���ij��qp�N��'�/X�e��P�ga�G�3@/\���@pH�2����TrA!��+��Ӧ�9�XwP"�h�>�Mb���7Kj�`���u�2�뺨����А��\�ؕ�gOhe�=��]�B�9~��aݬ��-��� �E�8���cG�%LV���u!�$�M��أ�Cp�vy�#~��4�h��j���ؕ�5,L�; n�ֳ!����<�Em6"�m_��g�b�jӋ��f��=|��K���Z��/�]z������C�� *N��F�z5�#w�(1��_��X�d��V4�L�ؗJ���� +�C���ܯ���hk��7̑����<!@�L�$F��ڮeM����k��`��ޠ�و&���L����Ң�/E� ���8�L�L�9�Eym�7�YK�%�`(`����CI����$�B?�5 +/�PrW���o� ������H^�2�~��W��$k4~�ҋn��!b���-�fV"�iV��ƽ�^[S�]dh�K���0�*�Q.�F�) +�`D +�z���.~ ���W����f��$B��R���Hl���6������ˉ�<ړUC5��9��FG�79���FD�0 +��hB +����3�t�`�$��z�Z���H�L����#P�^���,���)�`�7�@���^~��(Zjŷ���/�&(կj�?��ƣVٕ�9}���9*"+4�N#���}���9�,WLYm,��W+p����P� <�����aX��R1�T�I�K�[�� � �f-RR�=ܹ�m$�����]_�J*`�sr"Ą�zk�M�՛�)A3nBL�R�Nh���&&���RO�Cd�D��D�ˢ7:#�ޘE:5��v@; �]L�b�Fu� i�Z6�o�}��]�*���X�h��AUkr"��߲�K!�7�f*�����>���P�����4 ;�S���!<6��������N�C�ʨ���V���#^�|I��El-LS�5�X����,�)NF�����u��_���S�#'0��� +"\3��/h��|�6 R`��f�d�y�}YA Hx ��J�Q\�*2���(r��w�T�K�:�m,��K���>�H�~<�c���]z�G6�*p���NS��E/������GP�e��C� +����d6�S:�\k�Oډ�H�=�'�7 f���`J@���9r�h��Ì���q�]�na���أ���L��~w, �E*V就�0f.�$bI�ທ2���%-�|��U5��~ �� ����+�h@�Z�f��v��3��!�ZҸ�j��R��F��$_vl���\���Kɕo�Ӡv{�j&����&����_�\��3ʰJ��hF��.Kxk��_�m��π�kߨ��LXՀ�]����D���Ƣr�w�H[���jSc�X�Fׁq+��#� �Ą�B^yF�|!2��r?ΣD�`���m�$C6����աt�i�9t�f'��B +ʉjR��57���yF�{-R0l�ϟ+ +R��+���}I��G�Q��#2e�6z +�����4�U���r�H&�o�IY'���~,Kx��� �������P�P�,���� � +H�ʮ�)x��*��l|�$�U#��B$�ZL7��D��H�M�Y[�7��>֫���۲�e@&�H� +�SʋG�T��vz�+���ȡ����nQ��7>@8�'��!��Z�f�$J�at��[���PPX�D UT�ʦ��f"��.e�de� ��2I���>ʗU�v +:<г`�o�Wջ*QBoE�a�"�P��r��=Y����L��«=�Ya=�:E�SS��-s��Z_�N�G��y�B�z G����t��;0;�HD��T8S���N�r�y�x�VHXy�V�4e�f��֗1[�ZW�#o��73s\�FOd~R��Ҵ�����,�18�JQ�x��lҀ���y�q�e�W"B��I����F�nr������k9���^��<��ҥ� ��8M͏�������:�?~��A>l��aHճ��l˱ٖ%�x���g�_W��!��u�ȗ$�9Ɠ�c8��p��e�65�C��d�� >f�V�A��u�kY�)d(��u�W�<�-@�"�5�]�!��>�b�YXQ�U�{�(k����[b���ZnA�Gq�����Z��'�adb����B4���zbM���=�[�Z�5�K?����*."�[n��o��� *@A���#�S���9�( �#��?��F��O�9k"8݁*^�S\��>5WX�����Iw��C�o�O�^1r�`gԋ#(��7_Y�ٕܯ��^i�xV�Ѳ ̜48&��/1�v�4���|-�f�O-�4�&�a)���2(E�9'��Y����Wd0���f�-k=�9��e� %���a�p����eqI�,�Av�M�'B�)���Q�P�T�Hf��U�U���F�8,4嵣���p��IYՠ�-4+�D�z�a@H�4 ����J�&h0��,���gusB���Z����^#;�. �� /�챀-��w7��]�6�TT��Э�a�����ǣESe������C!w��2%��������?'i䢐��� ���\y~Ǵ�O�z�^� +�J��猐Va�4ot2����;F���8�X��>�q���UHPo�j/�k9?��`��*o�����QϜ�6w��t�7[�u<��3UF�[J���P�1��֣�w��k(�t�p�*��3��@.�B�C�5u��߹%��(�����sQ��lFӢկ69�3y��L��tF�Q�9�x���=��˛H��6r�jx�q5\s<P!` ;��LH�2!�ٕR �� ��L��h�D�e`3�z�n�*���Q�i����BZB*���T¦��&�"i_ln䖓B旜f�(Ee���LC`��kdP�*�)0 ���}���� ���큌Y�x�6��� t|;�︄���Զ�hE��+*�����܊�k��"ZKTSE���ۦ�Yn��-��[.$,S�E�@M��&m�d�^�d�D�/�g�W0!u��������Ĺ�hj�vJ�? +@Ņ�[ ݭz�?����Ng�6�?�)�K� �Z +1�(�m�u��C��L�Ḁ��"� H�� �@"9K�!������� h英]VP�[�u�+��Y��sB8Ќ�:�Q�9�L���_��f�7M%U��֍/���f�������_��Qs��MK��m��)�|[�RK}�K !����MjS�p3�fv�'yt�x��b@���9gy4����!���L���I{���Lf�-�ʈ?� ��i�*iZf!�<.b���R� �x~���+º�&�7$�[!��K=�{ozЬ_K��!R*��'��%��c� t �,���^�ҵ�n��Dգ�%�k��O�kY��ާ +�� XKm���srd�:�7X�Nޜ A�2��j�7�1��דf � +�z�N��V�� +��5���"*�Rt��������+����N����.ꅩ�"� +��J�Z��[Z8���Y����Fd���D%���m��T�*��S*�M�����aa��>�o����;����f)����@N��6�]�O9�|��̣����Iv�s�fI��6�J�I��=�;�'�V��"��p^ +N�2Y:5a� �����h�rR�l�V��N�T��h���`��뷆�xT����s���W�si�^i*���X�Е=�v��^r8%tV��M�E�ּ���>�����sx݄IV�u�@��n#[O3S�e�U�t���[=���p�y7Y���p������;f��7o-I!y<��� +�k�00�q�5�L�����[�����Ա%��I��Z �Brk. �~��h�"��R3Xq~"o�~%@A�"�Tٟ��n�S�ZF��R=<���5�Y�ګ��!�x�l#L�?�d֊0� �e�Zg����ɰ����^K��t�YcB�K��b)�����������DS�W��������y� ����J��?�ߴ�M�2k$�妁hs5L�Fu*�΄�'��ˆ6�FS*�g�Tj'��^ endstream endobj 39 0 obj <</Length 65536>>stream +��]�m���_5��j@ ��=�z'�@����e�rp9s�t�����p���#���K#��i'k�00dX̩|�QvP�Yù��11��q~6�g����]�8~�~�����xk��z2�=�uDY�Em�b��pF�$U����F��{',H�2g�[z������&�����C𠑉�F�#6P���8�!�F��"|~�$��N�J�`�;��s_xc����|���/�w۲��U����|p2��kax�s���m�;C�t��jHv%�Wg�k��'9���̝jɗ����,c��XƎG��^��J/����q�E�b�Di2\I����7�3�h��R��D^7�ُ@5n@G� +�@�F��c��8�-�[E �������D����ŨX7�E((�@�٠(˖Wd��-��p��#g9��>�H*A�M�ն�QgS���6l���%r��p<P�����Fmɡ:��h(1>�db5� +�b���b��:�,M�Q��L��(�*�`���s8#���U�^�� +1/*760����b�jI)�I��E��4~� ;��Pi$ƇoL�b}E��/P�W���^xܾ=q���q�t�%nH.K���9N��t?���[h�i���v噬|�=āI�!��!�y+O����3�G9�F��4@Uؙ"�+&0u6�e�,�=����"\A,��?,��s7@�Z p�h�ξ�JI��W�d]��I��ȍI(���b5����7Z�F�4")��I��[���w + #��^��]F-�w�u2IAiP�bȚ["���xS���2A���5#�}��|�^�\=���x�^�3I�գ�k�G��m6%�������D�Kns�X�0��}"���+��h���0�a�5�p%Y�6��NND����O +�f� �^�<m�?�`O�*����+�(r'0�L���3HI^Q�E i��K�ȃ#$�#�S��|,�|L~�NTa3L��~筇0OS9uޏ��{�s��xs�I4^�\JOY�{�v�K�w��}����͆ ~�;�o��aW���Z��l��G��I.�`f{x�o����ړ����(gth�]n:�PBq�A-��Ve���3�s�%"��m��Ԫ[(z��_=��g���bLy�!w�j��fF]H����K�S��HQs����:5�QM�\�v���w��ҁ +�MQ��R@�='����u�o�ܹY��JLz�U�]��k��֣ſ�2���i����@��C�o�i�.y���ؚ��ItT���y&���m=�.���)��5@mN\ָ��JN���z!_j<o�t���5�M�o�ɿ�I��Զ��C�<� ��#�v�h����T�>�(F +� p-�F6��`���L�q�h�+UoMP�������k�@�:j�kcy���_��M��HJf��Q�7�/��������y��j��[���w+�o=[{q�k�)��B:"u��R��S�ϜG6��u����Ћ5y` �H���8sh%_ד�c�(m:^el�W����_s��=|�콌ǙE�ר����W����Ka���%F��b^Z����k�8R�''W��#��s8F� +1���9 +�q)^�1��5�E��#!I8��ޡg~��<<���f{[��ܪ��6X�>�C����cy�6���W�cD!O;]�2f�˧�.*�I�J����� =z��.5ǘ����6Q/��'�u��vsG���R*j�Y�:�B=m�m�CϨr$�R;'�*�P�)��-�W�ò6,�)cu@D�˹Wm�����8�p�Q�UM�-_�21(���ZD{, :l1$$;�#��F��5�J�����?�^0��˙�ʢ"����sW�Ԥ+���L��K��#��M���W��äE�V�٠.���)p����H�?ɪ^}ʉ�x���nS�EE�P���!��>3�d���o=��P}�����T�������8�½�Z�zw�&�`�� �����C $�ց�>_���1h���qkQ P��n���x�������bG�������ɝ��a�MP�L���t��Ư�8O#��$�!*��;\3 +7�3�G�c��8�<" _u_�,�.�3+\+��E9Es������ +�ۖ� v�GzB���@6.pv�W:�fBa8�1gQ�E9dLG��R1�kx�x�=�h�t:�*�y<��Ū������W憱E����l�A�z<�&b��zQ���5�Ѭ�.�w��4{�k)���v�V�� �aCn0��5)�(R�4�c2e杤��w�S2�epMQ�maO�-W.Ԃ���L��>�};dL^q�@��=�ԓ���.����˟�v�T�u"`&������ +���e�j2�(q����r�ݼ�����S�1�݅�\�y�b��������@\�5�|�q���:�^�gz�E5���=�D��-$)T��1X�&N'3$�ۭBݣ���MC7�+�����q�����IfAS��K��P� �#�k'f@�!HȜ->W1W��4�&B�A�Y�v +�N���"��K��}?���a&��,�������`{$���ó��g�+���$p <d�|Q�A��T �$#.b�d �����+�A����~�G�HFb�~$�*J��|WO�����sQ�yB���ЈOҐ�(�NCER7���N#X4��#x����y\m_n��;�1����8��'\�ȫ�W䯲�ܤ�{���<u�/�r ߃���� M����;�ޱ1$�嫯�Z��I���3<�dʆ��[/��ƌ1��&��!k7�0�w="���+�}�p����B�P�.��L���ʚ�EF( �&B �"�^�\5S:�z��B໌yV�P��"���Z��ã@w�+z�^ǏB��5��L�u�Q����᰿��*�]xH�9�ؐYz<\���{� +Yq��;$�N�t�+1?2�j���6���s&�oz\B��3� +�0H��RP쌠�u c�(������q�5��V�^ ����k���S�����1ze+E����t;3w2 �� g�w��Z�V���9g�lȅ��u��Mu��F��k���BΗ�<�-m�ή���q(��]�^�*"����߮�_;��܌��E�@����� �H@�b�e�&)�es�ɽ���y�(v�@�]Y-�U]%��?ަ���CԌ��JMl�K�V ������ 6:�lOG��);I�E2.*̘������CN�_!��(��z����͆��(Xj��⢉������� +,�h��N�|:��4�>�y0���c�ǁ��=fz��KB8z��L�y�27I�8��i����UqMt#�^�����1>�������<���� dA��L�����p[h����|���Q�2ꣾ�({bX����ѫ#5�C����B��4t��t�>�#Q��]B��8�>���6��}�/a�J1���8p�S&u��;�֤4��t$��<.�2�2Ƿ�AT�0�t��cPy��Q��#m=�>t/t�瓙奅�4�Z\2*pv>��ֶ�8|Go�t����������J�Ўq>T������p��!I5I�@�pt���P��P6�{@#�P����έ�L��������"�X�|^���G���V{���C@�-����Z�D$_��Nd���E�����8�sfd���EC��W| +W�EC#F4 ��CW��a �|&�ꞛ$|�x��$ё1A�{�_j4z"���_Ub8Ŭ�Σ�'�7��kG�+��=��@�EVT��* +�6��V�a:tx��TY��8 ӳ<�6a��)-b{Tye{q�ł1ck����'�3Q���B��%v}݄�*F4�?zD|&)�[�Q�Dl��� +�?��}K&XGeO�������I����T.&nu��Ifϐ�1� �2_���1g�9x3��T�O���=��/��l'�sK��.H���1i���?��Q��,�3�im �M��s�׳�B����>�'%�����$�\/��㇛R�Du�>�SI��S���{��%���h��K ��#��$)�ݍr�A�:����Pi�.�9q��W?)��cN�6 �B�B@��٩��!����̯A���y[�uZl��y���~����N��D^� �Vmb��u�U�T%�̽��7�b G�_�Bn�$}�!��VYEʅׄ2`�%���nH݀��g<�ͼ�����^����7iկ=n6��ۃ����P������@��`��$�c��@DV�P�2��!�Z�/L]P�+���4�Uŗ|9z�S��+"eOF�X+� �{���-n�+�(�Y>� +�������Q'��j��t�\C}�.V�����V����AP�b�)�玪��,yu�OOE��%�)4�m*��Q�T�qn��ڿ~~gq{�ſj|D����]uU~1�V�����_֫���������5C+�1Q�hR;Dw�"'�=y6�7��ϊ����'~���Vi�\�Ω!YeyyL�i4�M�BU?��&��h;x4�& O���L����l��h�7�@�8�n��f*iV0��4|�|��Pu4, +dlYH�I��k���T��r����A�4$:�B9����b���G� ȑA^nT&�eI��(�lטcB�Sl,yH�l,I��Btr� �n���_�zL�EF�^_҃����)Q �.1�cÂgJ�Z���V�jk׆zx����6�MG��6�(JIѮ"x"���7�S!�/C}��c݂K�WE����P�jF��ϧ|��P���@#U1�1j`n:�SnA @� ��W*��a¨O�� C�U9��������Rt� x8=~o�W�W�P�^q�ܹ��.��� �9ګ!��Y۵ȉ���ֱ�'�Z[�+��h�s��tR�H�{�`�Ѹu5��:�oa��a�{HJ��!�$ +X���yk@��q���X�ڊ�97p��{�]��d����}���6�aZX������%ti�B*+�4�#"[��K)��q��ѡ�cJ*~>`�(Y<��By�(�>�h}Z��-��R�+@cحL�Pb�F��j�U$�����4�1+z����^d��{Q�!e�NJD���Qa�Rj*���h+�\���M�}ͮ�*n�?�iU[[�1^ � �XԠ�C{��C��\��V�z���(2?��^( �PWG�0RͧoF�v4�[�˺3�)�Ŝ[ +�3d~a���ư�����U���dϤ����l�u�>��j���{�m$�&���y����G��������>�����'+��������/������O����?���������?���?�����?��������?����?�����?�������������u������5�֏�W~�7<�5�Gɴ�J ��͂O�QPК�& +rO# &��@@ +��m�Zr�hl��J�"E�d��P���Xq���S3�������B�Y���`P2���Ģ݆�h����ϘIG��!g��Ç=�m�:Gu��`������:F/;qy��o�2�*�ɏ* �=bcė����w4����Dح������c���=��+�4��&P���X�d��?���E���U�N�Q�"�fq�5o�+�H8�|>(ﶲ��Q Z��I#̺�S����>� Kʷ@�J���;h�3w�mP�f5�lB�i:*�.\�j����g\�;�z�<�f�5���>��t�I:��G'Tw� cB:�C�)C���1st�N�S[W�o��nY#��;� +�B�ym_�Q�}����6���jݙ����:�Q Fه��N�hM++���u��m��x�1�r����U�?0�k������TUy^߹���) +(�n��l���m~?W0�>�[��-�!��=OV��5@E����b>�g�Z&h�k�'X�ѷo�Y��UD�In��c�N�c�&֭�[O!<�m��X��8��l)��|=���_��<,�+hJh*8"���4��>�i:/���#�I� ���G!�G�H�$�< +��ㄌq�ҿ��̙Na'�=��Ғ�\;�mї�*�>l~�Fx�h��������/I�}�����J�ȃ1��u#J���Z#] |�C�xV�9p�����g2\����6�ֿG�e���I����ך��F~_{|7��:��*�k]$���>���A]����5�<�?��P�gߒ4��F`N����o��S��15�f��ջ���6;E��|^�`<SoU�w�:�Az%��ʃF�xG\6^�A�qb��5i��F�c��{�5=@%�Ʊ� a:��R<D٬8ʊ��ZR�2}�Ix�)�x�%����z��*i�z���Fk�Sh� ��c|w��F������1��+G�L��l>�m��QU �9G�Ħ�xU�D�q�I=�n8���_��ה�2���BuId8� B�R���ž��;̖�`c�8�|��)��(��M�KP��3l���[;唂� ���m0'!T�M:��S�a�{���(zQ]�jaO����L��-�^Yf���W�� z�$��Ap�����9�m�}v����!�����tg�����[�ao�T�E�J"5��Jz�y$9�H ��O�C�8��Es2�!b<���Ȥ���C��V� �@/d�֓_3�z-��o�쩍E*��F�5�5�R7��܉� 2I +�6�: �����`]Hi���0���pH�]-*z�f�Gpi�pԑ��r %���Εl��@�v?��BAC�$4 |��\ �m8�z��Y���ǟI~�/UCD�e�V�d�jPB�[D�7� +��TɆ�_b��/��N��94E����9�!TF��MY�'/> Hp��`֢��22;�Au��N,����b6���d]|��>�>�"ϩx�Ӑ B ��A8=�緘�P�:J��h��^2���Yߐ��N��o��5��bB�����z�q\n*7���%dW6d��T�C-c�=.%��X/Yz�(G>_3��? �؍���O�!�H̏��� +Wg�6B��Μlx����u����)&V�����dj�D`�>�Mը���nq|xkX�Qw��Qt��T)���ZQ�˚P�f�-��\]�X�*�دo��駳 @�+���w69֯�����-P����yG��$���k�k�Uc�|:�4����3�����9/�0wb�jzq�xG~ 6+4�,�զFL2644��+�E�V��?�V��_�c~D������N �t�@��pF!��K�`>j�Mh>p��RS`㭟̚6 +�`OC^� +Vcq>��o�0��� N>%�o *Gl��[���sNS���z�H�Ե� G��|E~� �z�j��PM����L���dH�q?�6�p�<�8�5U /���b���O���k� Y %����7L+Ph�S���kE�$Ϥ]��H$��ņ���8§�һ+����}�'^���m���H��V4�Ҡ���l�$(a-�J/�^�� +�,#j�P'�R_�S��A��`��td�XC�A$����g1�v{�G�X`�`k��*�<��rَ*���E�OQ(�q�S �\�8PE� �=ؾ�u8����J�1VB+��O�Y���ulo��2L��2nj�.�|B���+�6z�:9�y�uK!���Z��DK�D��J��'D��Z+>Mf7E�q� +�|ƨB�)X=������wWPo7G� +���<+��l͓;z�k�i?x0��~DތF�ɝ�ܹ�#�h6���p,�-&Lې1��[�TϬw�y�Q%���g����Kls -'TAw��i�5��z�����9I ����ai���d��1�r�� c����QZ�d�}stpѕ,�����\1/[�������� B۩a�H�VLax.q��f�[Q?)�PW\�'�_��61k��i��H�g^T%����q`s�O|(�����ၶ=��W��`r���fk�汻���m�i��!��� -�B�x�*B� +�����#Fx9���+H�F���a�$�TLʷW�����7�x�|~��,FNrgO�lO��Op��u|m��F{8yU�v����� �/|���T��Q� �M��e��u=�K�o��O�P��)H#�I�=�cV���<&y�$��FT5���K�/Xm�X�ɦ:�j��䂟�ܺ`�>;w�[��*���y��L�Z�[��{4%o97���ԓu�A@�g-}��Ӑ�x�+ �$�÷�$*��!�[��!�u˾4��T�)_�~����%�c��C[_ ϐ���8���'"��E �����JY����d3�����O����Q�n�Vn�ۧЍ�!�� +��`��mk�gn|S�a.�������fvu<�R��m]�'���4(���K��� U�u}�)�oA��6��sc5����sODXY8�Ȧ�4d�7�U�7wh�����;��A�Ʃ�;��0N�p��8]�gd�س�x�@9 +,w( }~#����R�ܨ�r�/ +��Ɖ�PbIZO9�X�l��m5�+��LI>���h8㲇Đ"lS��~7��+T��O�uS� ��@o��Þ�OkHd ��}B����*?�gS�v��m�C�/[��I�����{C�+�/;��Uc�&$��Zi �]>q'�[��_Q��-�a1NԛQ&��{�% �0E��|���.��8�.9S�.����g2H�a1I#��+�q��C�������CZ�|EE�Q�m�/a�� t2�^Pjo ��v�6"Ǣ77�J�k�������B��i�8��i���j�|2T�� +��I[K�B\���t� ���6� d���T��ِ�&L�J��- ����h�������e���m������z�.��q$|d*�Ww!�]��l]k�P���F�����|���w����)Ec�J �$r�T�\�s�[���P{4�%C�� �2�6��n�8�u�0V�Q� ��v�6�����3к�Rj:��"@`ӹ�0S��ql=�Tώ�8�m'F�r/�Ə %��|f�����b�KT�.��o�TH�q_�����S�k��3Gsޡ��� @ϣQ!�I;��2pӆ&IP�0eYzz�6�i�,�[K�^V)��C�S��;բ��z�ˌ��~����^� ?�7���.�N&s�<:�5�ԉ�}|A��C�b�n&%4���bVdp+��H��� ��A3Z`��u�;g���:�?Hm��rYfd�e��t No��L���.l��o�2�s���E�)%h*�n�D�_+�'������=���]u�Q���v��:�7z�3Ë)~}�v�Io1!-9��o���k��:�z�4 +>��5_��mj� +�@�S���uC��jx͎UzE������F�) i�O���c76��D0�3��y��#��,�z�� a�#� +ȣ#_�X�۫Q%� +&�8.G˙�`s&��#ג_�� �v��[,Gx���I�����N�L@e�4��'Ej]��������~劯���QzCm]I�%*U|^��w�]�y>cy��S�r����`�Byr/�i�M��~��d�@��f�Q:����B�R�Ԅ|3���cJ1�k�P ��8�V/�q6�-˶�C�x�[ Ym[�m��oz���@ ��m���h��M +���*<�'��%E��sM�B���^(�����cZ�Â)�[�L��),�顆WM$m�X�Y��ȵ��3s9��ɰ���r3}Is��.p�0�Ɇ�*�n�K���9l�!T�+7d�(U�X� ɨ��]���������<�/���[��T�ۚ�X$�����X�~����K���-���;2�i�kB=�Ψ"�S�?P��vQ������/��o�S�o:Y��PT4�I��)mvo˪�0�燲�2[�(K���^*��b6���y�7D��m�gK�� +ajI��bt�P_�$�[N���RSBe�ǫ��~��w�_Jj�K�LY=�� ψ�L��ؚ(�Xe�=&=$��#�P���gr��]J��T�Eo<�/z` �'�<��#=�n�, �P:���une��YC���>#d$�]�0ͷb��= �;U1+�{���$C�֚^w��^X('r�}ㄩ��upX̶�=�6Ս(������F �f�]�9�0ql� +C�_T�!��P���xP��m���-^C*E�Et+ֶ7Tm�o@F! Spi ����xM�l!�4՚��+����uF���o AR���b�+ھ�=����W�g��)J�m���Urz��r`��a+]�Q��pC�eC���t���d����5���W���"n�X�)$zh� + ���`d9�#xνə.�o���M8�p'A'�R (0�����k����]�����:)�uvE��uͱC���mh�>5pӊ�%�9^����lu�����_�r�����!NpP��������#N^���<�Yr�� X�p�t+rT/�^6{����s�gM� ��ط��&�z���}� �鋾���|��ɼ�oi8�lM:wv� +n9 ���qT���)�ύ�w��zD3��3f�/ϩ(Q���ǽ�l+��)���WM��2ϴ���bB@�M�!���ߔخ��J��BI4���`w�6�.��_�f�U�-[�PT�A�7=����l���R}�H�QE��ι����G�b� +��Q +>T[��M�ӹ[���[_ +��G9��y8���Zr�6�y���:�6���j�������|i<�W�l̄����$��'>���{� ���#'� ���B�� �u��9q���pk�r\e&�G����e3� ���z���z_�{�~���� 8��WLv��'3�t g+4הY����Y������Rq� c^z��SO4�w�*�m��7��o���a�'�7��)a�Mz��f�4�H�������9Yү�p�S�V��ć�0���R�1S��Ч����3E�)Ď���K��Uj�1Q>�@�,krE�$��`�$gN[ +��9A��fB��k��fl�Y��(ϡT�v��pw�֯�1ο+���tH���]�S���P;�1X�A�RgY�I�X^�5��<E`���x���I��dv��t�1 �����j��AWO��{���A��8�����.��/-�^3,���V`��VV�y�Wdߠ5\���A×���Ta���&�����{�Q9�?2��V�%��48�c�e��.��I?��ؐ��R��0� O�0��N��k�FC��9���h�� +��q +t-v[�G��B�"����p�6���nk���NH�Nv�������V[_>�e��X��� �;B�dHIN�}�=^��=6���}�^!2�n�ebVBh�^Hj����E�T._��ڂ� ��Me��MEgVƭ���U��T{�<W��Mc�{�˝�x�.6�zX�8%�}y7��� ������Cћ�#�`�p\*R�['���}Q��%,y��z"L��<sJ��)�_e#��r~�:ƃ"�Rye�L ����)%��쁥�2n.�m~]�Ȫ4� �eh�{q��� ������؍!���5�u�?:�dw�1Ջd� ���vt�8�c!�@�jI�bf1�tԙ%2O���%�� &��|l=�a��8�y�P���q��1����f�EbK�Q�ag 8��;��`0��9��֣�j�_p[�����,љ+�C��5j�eY�V�hop�K�n�uT����ŀ�I��Q�g�^/q�W������aE�N���յM�;X��H�{�ۆt��D/Y� �WzMR[��sLMfZ� +$=NtT��T䴑�i9�ڠ�^�g��T�����&�F�헜��.=��]@��:������>�c0jIh��$[9^�b�X\o��[��|�$A������<�ؿ_p ���ϜQ7�Q�ǚ\� +�J�@W�"I~������< +p��a���5�N2�)Vǀ�ݭ༄_�)/-ϣm��kmNI��7L]�x�����ƙ�j}��U�6�ӑ7@�!����B�nL��ca�I�;��Jw&&e���X����'�����(����kRݭ���y#�H邔3;ScY� ��Z?�����$���؛[k��ԬC�i/���E4B5s!:�㬕�܈B]�1P�(����߹Fz{V�� @���T�ǹ���pi�h��R_���`�gN�'�~#4Ncj��܍��f]Ӊs?T�9���q��qݻ�8d0A +��C�i����}Ce�N5���4�肕Fj��UY�@7�S4N��4�[�����F���� +�ƪD>�厲SK$gvl�Zj�DH�q`d�<�l1��0��~��M�C'Xp=�@�����f[@�Ovq� l?H��td��O���P��B� `#o�L��Ӿ���>vn"EN���&�#8���+ߚ��]��!`�z���t� +�-9�|sy�X1�3h��V,f�J��K2"����#:eUj��i�/|�A�D��z�v�1Yx�kyZ���Op<7k��&�6��oJ��������K��K���D{�ɞ��t���t{��0�D�T6�'ty�Z�ْ(t/T!"p]dr���D{kAO�����w��`��V�:}!���{�N�q�BܖLM5]4������(a��gg2�8�\�'�#��d�%��Y��n��5���� z�=��;�ha�N�N"^ +�_�b�g�m�p���ѽA7�xt�7�]X}�xP�G�O�!�rtQ���dVpW���AJ�=,�syN�����|X��o=������TE���i���N��&��Z�� +8�V��UЋ��qP��������q�<Th��,=�J�g�~����tӫYeƩ��z�G=�D=�?��V�(==n *��zq����+Z�g��y��w��uK�ڀ��|�z!�8��ɯȠ��U��U6��;���-p'jDf�U;Ը�]V +�(U����I�?���ܝ�����[�=,0D�f�t{ă%��`M�hN�2�G���B�(bQWg�Q�յy��sN��lh|�تչE����i��3 ն��"C�&�����'W�cC�fǴV +�Ob����M��݃(f���f�[��^dC�ί"�}�=��^��2�~]�� +3�����2���ט�c����u�C�Pe�,�9�O�/�yH1 �Fk_���IyR���_Ebu���<�,�$4-���w� +�|PK1�p5�Vո�j���U�OZS�+�j2,G*��/F��@��}"?D��� ����T6��]_�!� ��p\�/�Ǘ�z�*�A{F���5B/��~��( +( �����8�3�c�َ�S"=R�iz�.$�V��vr͍��Ոa��Qٜ��L��i^]�]�~�EdH���D���p������j�ڠ��^l�e"��OՉ� ����� ���7� Qm�X�r���\2����2��Sa�70a�͵&2��^/�f�.�Ȅ�U��lo$��[�@�n�:B"l��k���\�jT�_-A�L���o�<8v��!�!��*o��ʆ<Nd�M�)���P-��7��!ó(Q�b��1pW��Q�q$x�=�R#��]�k�TV�2w|ɍɻH0j\Br-��]��[�Mk#~��\���?���{�����aS�:�)iæ���;�Ƴ�C"T������7�x�]���{�p?@4[ۧ ��X���G��[ ��G�z�x�=�?XT*���4"�NcW��^�.��Xr�n>��4M1Gfw-�4m�� ruILv�nK�0W��Cm�!�BȮc�~��p�YK`�u�/qH(�"b�Y�r���K��#�>QeI}���h}��w��v0��c-����2�T�P-'w��#���hs�K����qS"6��m��RG� "�T'Ov�u`���7&M��!��d�P���.�!4I����;"�f5����SX2d�-� ���o�GZZ�����(m�B�2˃�F(����,�� I���b�n�Lths�G����)�I=o�����5 +�� K`�g�+��R��d"�Y�����8��H�;@J +S퓭$D��-��_}��g�@#"0�nE��������6Ѫk�XYw�lַ�0��:�1�G }��%j?�i�>�F��*�W�v�/�r�S9|�K�@a+Ě�{(������1A� Y@&l�Im��)"5�z5�nC�9�J�5 ��;���o��B����Ϝ�����k��F��̨��T���I�dn^�;p���h�oR��v��S���z;�G��|*7���4�$'F(�D(�K5�M��`���Oc�\�}ß +��C��+r��K�ٶ�&�&EN���!6���ܷv��Ie�$��#O�blH5� +����y9L�����K����LM��NZFj?�bR��T�:2�a�������6�i�r�x�ށ�k!˙�s�E�"��C��m6s�D�zᚷ����l�$ h����@W��U��E�'j~7���~�6��汱��,��f�@�laU��tɊj����pǥ�eAw�Ƽ}�nl�W�U������� 2�3r��ɣ!� ����VK����;���d�c�|���0�#Iؓ=# +�eYo�����)_���%ҩa�n09�I9^���Ś��-։?��7�L���2�|�'3�(��8�A A��9l���p�FU���g$�V�Z ���> �\(�+]�rx�Ѣ�jD��F2�4�η&8��G5X�/|�T�n�K��>����[���hj2O>P�f�.JuA�a��}U˹u뢦"ځ�`ܨ�>���0E�Hc�@_�|�s#��@JT��Hh*Q�IZ��E��H���>� %>R����(p���C�M������ޡ���k��0��o�,��P aW��ߓ��Yy ]��7�j�����қ~�p۷'������|o]*����Qa_ø 1Cq�juj,2 udfWA<ĩ�J��doF��\� �Y��(�E ��n^Љl��!��aCbĭ�]b0R���)���%"k�EA�I%�$'z#�lR�d*��$6�#$H��S��=O�M���Y��9�O[<7� �y�;�p�� +r�h#x����V�^mf�����B��C�7 �k�`�)Q�<�3�46#�����CQ�:7�"]�f���C3ؽ�u�kH��k��(��<����cg��tJ?Mx +������:4�r�m=O:I�i�A6�{0�(/�4XD��*��:������>>f�l�N�j�FX�P*.N�ǽa���6P,� +�y`yw{��K9c�y�6�D?�^�� ��X�9�a�j<�,_��X�m�� ��j��|[���0�xH �9���� +�� 4_�S���ܔz�+�@�T�Vjv���d�r��A1NH�[� ��>8��QՕ�Yhk����5;f, ���=�\���!���t�bt��E���,�����~jp����hLl*$�ڲw�glh7 @��ksWU�'"wd�,'|Ԃ�Ųu%� + ��4�"$Cn����O��(K� P7M�����O�m��ix���=E�rm�u�OşWq�p`gi$e� �lݗ~������|<tyZ��K�&�5�1��= +g��v�]oS��Kp�e����5��_�S�����b�V�'M/���':_��8��Y�QGȂe�5����3Ҍ��β{���Nj^�6mp���h'0�X2�xp�X�d=' ̥����el{���G1B�77�\+��Tf��6)e��Rh�"��ġk�Z�*�R��}�����SNЦw� +�� �|� +�#T�ւ>&��p�Pg��6�Y��8��E +�=���!xE���dP�L�\�z��m�u�+����9�>D?4��Ԡ/���y�p/��+e�N���QC�0!�S�~�2$=BXMzTS���;Ϥ^����M"NT��PO�����+���{`x9���0]��%hjy��4O%���)T�#��x����+�we_� �&e�Yh�Tݺ�%-���P̈U\����T���L'������:�e�`p=�c'Kt,���U7a6a�%��B�^ݛ{I�|�)ܕ��ɸ�j� ���N��{�X�t�vT�jD��K��DcFp^���L[D��ͭ�v��@��r��Ω�X1����#Pn����*<,��NA����+A +j� �2{��"=�I����Ȅ���S��Pg��tWv+N�#L��� �%����wP�*lћ�=A�z�d���� H�>B���ݑ_Q&o��r�)bX�}�SX�y�ѪAJ�-K�� ����ꊈ�qwN���%e�ӽ���l�xX��𫧡*鶡}���wJ3� N�����h�+7]=Ӊ�zu�n$b�>�X��!�i6 +g:�2�J�<3�.��p8j$i��P�#�Ed/�] ��&��{���'Hss�:�0����H%�8�����հ>pb��Ԑa����u����U�w�Y��T��1K�j�lu�ĸd�Y�tW݁·���A1�Am[^���Qb"�8�U��<(Y����5%�1�"Vcou����A$���GS�r�x�q@_�;��7:J|4���R������P�a7��F�`*��(R��3�,�W�\������`���ӡ�wA���w��*��X�(O�5���*6hX�mE/ ��� 2V�V��s@�U��G2��d��t�(-�^���RQ\��Jo`^�v9��Q�}&��ө@Yd�g�V n�-5��m<��<)���xma>r�@{p����+�淡kzZf��x�:������s�0�9Q��h���1a��7kl�����mA@C���y���W��j�$Hy�}-�A� �����ao�0�(`n�*E�����JCZ��ey[E9j�`��Q����K�����qY�C��$�����X��^pvC 1����}���r�=���ĨqE�-/��L�"js\b��`["���-�� +n�y����jl�g�{�J���W�N�Y^�79���H��Zf"�>�?C���6��#�ɵ}�}jڧ�|4��8����z�u=I���&�u�"ײ(��Β����;c�q�^2E:y'I�W[+�n6=H�!�/o�$hG�π���x���`�0��\�'M ;�� �����s�ė��@���&�#M�X�����|�BO�Ω�����,c�4�4�\��n$����=�k��b,�Ⴟ���:�wQTa���_w~����2RG���Z�� ��`����������wM�P��G���uT�ޏ�cُ<^���1Y?)z��t\U�M�ĵI *���}"���DgR+۬c�ŹmQ�/~�����l�K8����8�W + P#/)�TF.R��(��H�5l2#B�T������ +g(�έg��ڵ����.��`5c"rBX��58������R�u�R7*�ě�ҙ���nV@Ot H�_@"��0��[ N��J�KE�ɥp��L34?���-�H;�҉�vu��S�6�LK�dn�ݧ�~�O�W�y.Mk� D�P�B0p5�1f��7�����H����ވ�������ɠ��z+��[�^�="�ĽX�n�۴��^7��.Ȏv�f�.�|~�!�;�'�V���L�.�r�_�7�����j�oPb�>D!��Q��;ܩ\4�у���r(����C'�s������"i�`.� 9VS�` L��N�$��� �] ���p?�Ͼ}F +�\t�qA�5�\�b�L�\a� +3���#�=�lV��=�L]��V� +��K�{�=�1{Z���+�YG3�O��?��24�OR�,��ܗ�UT9�V5��M���1.�v|��E}_�P4���p�|�O�1����µ����IG+���>��z/NEw��> �U[��^�pt��kf;���)���A�ip�)��H��|����&r��>���5�V^|k+Y=z�z\P�E$��Wb� �.Kj>�uZ1R�1��|��:�:�S��%KS�w����l�+�PL�����10&�H��,-��"t��a�mF#i���i���=6�g��x+�2�w�*QM\{����NB�`'�'�m�]�F?��aF�� ~�������_�E����dA���r��'|[r��W��\�����ckF�h�_T��[ïF�������Z)E9C$^�祰�`���,�ư��_�(� +:U6lwcC���d*�W�Ԥu��Ht��i���B����4����E�{��o>��k��Q)�1>ꦜ�:�@L>�q{��Twtd,�YdtID���:+A����wA���4d����!�����0����S����H>�g�"���u<���2msQ�I/l���v��Xj\=�"�pN�oo�_���x��i�v��VS�d��vE�������R4cI%F��rrL:��Q3�';Gl�f뇈P8�J�k�L�]m �6\����/J�^���Z ��p�s����[#I{�+�@��xP��&�bq���e��1(���T +Z��r���EC�Z��)]���:���d,h�� (/+�{+ +>\ ��Թ���C�8���*�{M5�ɟ��}���$���ʔ6[��Ỹ`����pB�BP�x��s!\zZ��D.����Qs4�փa�?���x���5k60l"P't&���Ô�d\]��k���;�m��f0:d��UT��]��)��D�^�7�I�S:�s�-�]����!@� <�j��͏h��@�~�1E��TgQW�'� ���� ЛV��+{, +/uU��u��lS�5L��6)�O�*.�_�$�tX&V��FI.k?(���G��u�7�!z��0`?�Ƣct�V� +��y�P[�/ϸ$�S�����{������kM�]9�mVz<���?���B��3�r��=���3%)��z`}��b㐸x-��Ps�«����A��jZ���`��b�Ld��˵��=W������h�� �I%��tc�'S�z_��=�ɲ�Z���X(�i�8 4�Db9�!��B'�����7M֬��e����ܥ�l��=D� ��*�_� �ў�.e���㗝|��}� %�o��x�54)_{-�m`��6snI^�`b{(�o��5k�I��%|g¹�Y�%����M1�P�����-��Θωf��`��y�,��&��&��ޏ����u=!�� �8��(Շ@���!�"T���>7b�����Y=�����8̲j��&������\K��l0�'E��2�GX��]�Xw�m�P�b+ +��w=Z,f�c��3|�����<|���4Xp���Vh�cp�3��y��Z�j� +��m���P�SW�� �v:E��B��t�zi�G�+ (8�n��Ȱ�G���!N����}���]C�-�J�����>@Z��*�zmT.��!�-ʝ4�û[3�g�� )��.hc������~��꺷^"� ���;��Jr��9�k.CP??(�d Y���3�E3��b�$_W4N�i����f��kݷ���۵k���ڞY}��Ntfp�V�sE�Wz@����Bz�-��N�4r�����R�g��e�>9'����������5�L�j����y����R_H��`3<�[��a����põ� 9��!r!���C��ss�^��EɘƷ� ������kγ�va�rw�]n�v)�����n[���܊�*���z��c{��K�}�f��b���V��_ᣬ�/��z9���u˲�CB~(c~����t��W�z�A�^w⁋�O�E�g`z����7*��~��c��Z]�(^����!���\[����#��o�p�1�F�&p�c��U��e4�������.t�_#+���em��.�ƈO��CݺK��|������c�KE92O��`�])�)@1J0_�3���W��㬅%F{���L�Y�1Y��k����Ґ�!���IW3ե��Z�N�k�J +Do�� gX�\ �o=��LP��C��M�Kw�mw/�mQ�L�{L��ͬ��у��A>N!�o=����ܯ��)z�����u��Ǵ�ĖL�IX +Gb���`����V��ab�YqG}�%~��y}��$�;�,�^?]�L��c�����u<�_5Ir,n.D2b�|�f���>ԙs'���}�wI�`�x����O%�Mgګ_�8 �o^��L��P�X�����!E{���[D_�;ť�lc&�>x� +MQH�U��Ϡ��ʯ�7��E}N�|#��7���7v-��N�htCQ��2@���~6ZG�坽B����9Ν Qi*L����a��l)����h�H��D%���h�J�p�V6��!\�aV���q�3晜�� +�$-Yj�c<���]V_�� >� J,"�s�m(�P�]�=r����,ε���ڽF���|��k��~b�Ķ}���ik�O��,Q�nmń�4��f+5�7��L<IfXշ�]������3�h�'������EaW�����B_{X��6��=��z�2�ф9[<�4oT���� l6�R�?�1l�ٜ��x^��!�}��%�.ؓ�, +������`� ����C�ڐ<{ guF�"�XL�>�3�b�ئ��Q˛�<E�<K��G�]�s��~���<R]��j?w4ՏDSEE������z�'K����m��]�l���&��P>�8���y��c=ƾ5�ϭ�}|W���k�3Ӵ�d�:;Nz��Y=f����xQ'�H��!�ȉb�q,���u�8��Cj�h���������U��Z�μ � A�Qw�s�b�"@, �������4��Tdm �q��z��N��O���IK(.��H'����&��|Zq���\��uuw��Y�ri/��3�:������k=(٧=���_`�z<�B�љ��}�N� ���yo�nG�d�)����5g2k�,T�<���ɵ{(�ڑx��W6�+�>����w漓̫��%�?e�Qg5�̬_���&�1�R�/{���^J���C�Z3C65����V��פw�r;BF��4�1vI�l�U���Ofe]��i�g��"qK3wJQ�� ekSO����o��Y:D7��n���VsY<�W�L��x���S�R�}���s_yH��m��#�` 7�z|�@��Z��*�HN��R����ݽ&m)�1P�N�n�вY~S{������� �-&'���V�r�~R�3������b��q��'y����8�}���^��e֍�"dL�7��[��9"�kф)��~�Ũ��:�� �9/%���E�_y-�DWv�sw�q�i�}�a��ݻ�L����s��O�8z��Lۻx�:M��C<�!��#i�#��m�>Dy]v��!`��Rܷ�3�K�)$�����A�:<��N���4�HA�xaè�N�I>j���=�8�^)�"l(��>�h��3�֧�5������ ���ұ��\x�(ɯ�f�D6���G��q�c�)u��V���g���-#:�J*�ƈ�����(�k�}E�ܾ�.����ƺ�X�s���C�j�1%i\�!S4�����D��m�{��`�6�+���Zu�L2���֪�E�{���7=`�ɜdvzAP�h �k�����s���$c�L�p��8��N=�O0d6u+@@�,1ZWn����U�]%h:��d�Y�'¢킝+)���M��Ӡ��j���4�.bC/��n�?��vD+�3P!"$a[�<��GvdLvC��� +�̊&}��1郪�����-���O�~�]�;�V���n5*<�qcņ���R�L*\8�� ��0%�~)p�Ȇ��N�pS�ߺ3��m��q�D��4b��sc�;&P}��Y B��o3�<eM�P�mbC0��Ϗ� ��o���F:Ӟ�3J#19L��3V1�<��=*�2��e��}��t�cU�Mb4��'@˯=xy�߿6"�%>�W��>�$r��)3?������ٙ'5�����X����x�4��S�B6Ў^��"�s�pS�$���x�"�N�!�P��;����������*�G�i�m{ +������AA�8H�<�Xy_V<��~Z�.-��zL2�����Z�d��!��k$��u�r�tG���v$#�fȒ�=���|i�N�{��:�"pҤj�'�c?��]5;�h +���i~C,���uς})I��p�QH$?�B�Yu�s�wV��fUN6��:�Q_`U�����7�կ=n�<?q>za�8U�:5�F�"�uD>z��L�\�NYHu,� �B��L��k�@/��%�!E;}�f@�������� +����y;��cyz� t9 +H3�R��8k{�K�L�$`�K�m�8|��4#�o ��=*_�@����a���b�^����O���Րir$iXBU��iOrF�.�)��(@|��� +�Ԏ���56��Y��] ~G���Q�1����^�]<l��mx��fh�<���fg#ղv5y�%O�TQߘ~V|U��=O�/<�`��M�jyky���(���.U��%S{`N�3�A��"&��g��V�ɱ�|���p샲��8�c���Ğ���nÀ{��|���,)�W;wO1P4U];����PHKk�?"�`�á_)@ �h&U������g��8T����G�����=���Nl�r_����.5�H֫!�/�m�����-��fN"��J�voG&RHxĔ=�Q1���֙�7�I�m�W�D~k(ߟ�_�� +�~l���#M�L����@�Gy+�z�6��/�I�l��䅡��Ƿ�Qt���/�N�-����p��`��jH�;2ݾ�D��F'ز}i�H��#z,\�FU�Z�$ �'6k�+Kӆ)ir���b6�8�lD��Y6(��@���w�){�tqLKi���� +8�<�*��U�{���wŧ�B���Iѿ�xݞQ�sV&�z�� �R��o��3a#���_�Ϥ������j�z�]4.aN���F�fw��8�f�y�������������O�.���u���������������W�4:83{�KffD�-9u�L4��؟�6ҿS����ڑ�}r�c�c��7�b'��DQ%$\���<z�R�&��!��p2Uڦp��J�n���{&P��W��Ey���А5%U��=W[�� +H6�"�oB�R�nE�oi�*�R%��Xz�w� ��Bo~5\�A�a;Y���-T��<���y���զ)����F��p�!�ihW�\��|C�t����%BW,�Stv���&���5�'�5���Z�'{��������â���X�~��["m� �U���` [��=)��������o�����?�������������w�����������?��O?�������������������_������_�����)~qq�� +~���_��b�����Q_0�2�DƓ�ןⳊ���:/m0�!�ݚ�8 7<Jy�*�?������9,?��И�љG7���eB0�zޏg�Ș�^8�#�$�%��=Ѡ|*U�[~��d�9��� +����H ��G�������J +� ꌣ+�G�8��-�Tl )�b�b�l��3}|��7Mw[�<N�y��V#+ܖ�ٝ;D�:/��xFK��H w�J\<^�|��d0*��uX�/!��x�����H���d�H�k/�������c�^�<���{���#O�o�����!u���a��т��>K+qeg���m��7q��!�FܓGO^��+��ǧ1B�G��+���� �ֿoh!�:D�z���y��YJ4��A! �#�X���4����{C�~躕�}�����5~�z����|4Y�������akU�&������Z�C�!^����̔��bag=���� H&���-�ΐ��Bh��.c����Fb���7�mRl�$�ל^@{eh&�>>_v��hwot�X�Qn��(=wنF:��=�I��d\n� +��{c�ƜK�0}1(R`v���������[����P��/öΌ$��(G�'_V�z�҂����Cp}"1A=��j���s�Y'������@���.�4 +B|^n�e�>d�O���@)g� ����B>̧̾� �Yi(p���X���3��]2Z��s�&֤|шYR��vۛ�Qz�?���g �Y�v8Ff+�0���-f�r�����Z1���phzֳ�����Mtm���D]uP6K�h�"NLU��.jf���t���MN���+^T7G��opr4` ��04�}B;��q6L .�"�|����mo�Y����= ���f�()::��D�һ(�rN����������(+�A�q '���=\�A� ��9P�a����i��)^D=�V��J���vI�BWu���p�f����3�|wh"��(��C��͊x>C���;H�I��J��n�}u|��� +��"Ѥ�콜�(44�<��@���Ep$2�<���=+.����F�P���#3ʩZ,���ij����t���%��2lX�>{�H�G�xK��M����T�7~���p���z$4�`�᠄�0�Y�h$٪����ĺ�x��D�������x�u0Qe�l��ǫ ǚ���*�0D�(`�EiՉ��e����L�Xr�9(ݪP�%���ҧv8D*OOU$�T�3��(��x�A�%7�?s����_�> +&D��g�)��C�Q����{��a|�ј_5̫a[�ēC'������o�����>Y���؝5I���tK�q���pc���m�K������^BT�~�&{�����D\SS�h*�߅`(���y���>*9��������~f6s��4��s��Ϫ�F�(��2��ʥ�F��Om�%���=��~�|�ٮZ� ��%���z�}��X����볇�B�9�������I��d$!���� + �M���T�����[M�a��[@Q��uo�CFǃ�$w'COD�T��f�-�D⩻L��r�Z��v�)X�=���E,4�n�p�$�����A�f�`(� =vT7������H(�=�Bʻ�4���ЋY/۠Wh�5"��aBa�z�wѩ|�)��*�ҤX�n@*��[6@�>�3q��M#�}s�h1--8]8(��cjl1�}9���r�`zl�$,x�`����C�{d?�e���d�F�#�9�;�E&+�C�����`����f͋QQUW�T��a����L�ϣ����yqV?�q"�9\��gɿX���4T2����_@7L\�t0���Q7Ӆ�W���0�ep7�}���|��uB���8j"YnEV�ϴ��'w�4�%�k")ZI����M�!��ǔ�8iJ�k� ��?)a�]�7�}��}�m�N��V�����0IGj�����9-�����,�gDF�4#�Ř_��3C=&������\�nm?�A�UE�pa�η��2�]&�H@#N\�!����{��V#����;�����I�۩��������R�~����*���x�P���b���Gj��΄������s���G��iR���L?��!�xz�v$pኾ7\���h� ( �f�H��� F��[�_ !�W�� ��v���|4#����V�%��E��|��o�+����ށa���ñ�p��j���}��]E�m}|i)��M�j�S�a�� N�ӭ&Z����xSiLL�#�[6�솽?7'�%k�ʮ����N�D5m{"��4j������p�,hX�a/�A��o�\��I ���*��Q��c��\��\5.�|5z�e�>�Ǫ[%8r�ȏFn7n���O�!���P�9��x���K��K�Z��5��DH�y5�O$��qB�}�Ƿ��&�,��:��5����܈Z�무 �{>F��q�B�ܕ��>�#����Ѵ��߂��?%�+��mjTWn�8�V���c"HH�h+5�WC�<�iD8�\���~D�N +6����ѻ*�q�?ĠT�w$T,�G�M�`;�c &�.\�Q7}� +k�ս��Cq�\�:��^~���1 ��hp��7ƴ���#d�����%n �P<�gk_~�V4��x����s��X�q?:�n0�!�2���dߋ��i�� @;8�H�UF�\�u�V�b/�"W�J��6��'`54tf�8Æ)�aO���ph��4=�I���Fi8)�v ��ݐ��S�l�s��9`�I����ᐗ�Y���)�%�6� p��~3�__5�p��� :�����"�m,ABC'�U���VJ�nX���5>F�1��W��siĀ��_�.a�X���%�Qmm�*�+���ob^F��y���Φ:S����fG���m�2�%@�q�p�%d�)���j�[�/��ύpՔ e���r[�/�)C}y�4� UЯw?E�$r'pn�?�b�Mk�4�1��e�4GCZ�D?u,\XG@kb{F*��h&UB�W�}2�V�%+���]�.�̃������S�ӽ����U�>��.�=��!�Ѝ�8�����)��\{mQ=���.ܿg >�Z�(| +���x��g��1�u3r�VR��6+�b��� ���o@���ie��]dQ��3����j�Qbp o6A��4��1�#�����C���q�0�9k���磷��3 M5]����5��l���(x� C>����Ɂ:2;q>����I��iQ2V�Z�C���E��a�0�;'��#2�*�İ0�<.�Iu�����G w�!(��Y`�5N3$%K �)!�e�h��i�{l�Y9ӌ2��R��� �� J�7�>aɸ{ q`�����'z,뭑�^�4%�]����y/��! ��@9� ������:�KnjU���q|-��T�f�G�D��kj����5�yb�����\�`���F/ez���=@\ ���N�:�Gb?���B�\ +� ����^{*8ܜ2X�R6��|��k�6 z^$�K����H��)h=��a�4�+5v*��}�5����w�+�Q?�����*��F��c��$�D�|���ݤI�@䪯/�:ힲ�CT&���w��˽�ҿ5��.Zƴ,�:V�Ͻ��Kk*����NS���6�r��^e��{*���=�q�$�:�3/����yu�wF.=����S�x�!��[����E�b������(9�$��Œ�Gd����@7&��(v�[�*�%$}���{�Ԋ��ɒL�({� +�c�L��F����,�8g*a�c��u&���K���狒}�h!t�D�J�ML��(c>f"l��04�H���'|O��\ +?�nd +9~�kn5����� 5�9�;ʫ!������-L�D�շ8��!�l;O��F~�E| {krt �f\�s�jj��8��^wl����?%[3���8G���+!�=E���@�R�ñ����Pd���*���A4���=rV�f�P�& ����>I�z$e��ʲ���J�T�S>Lj� t�>S�b��� �6֭�yGV���ar�W�,���ʰ?v��U�8�x+�1֚��M�Gn���q�X��W6� +9��(w\�Y�C@�T >@YG;!)�Mo�#�L��w�B�}��rn����t���1�F��9�h +�V���8�����{�y��Y�*H����J�A� !$$+��������S0���{��s�9�"D*{��ѐ.������(?,�w�T,�� ������~>"B?�x� �7ܶ��a���Ȼj�1Jigd���:�����F<tj�۩��+�h�,�s�`����S�5�W��(ΑE��I�1J4�G��v�&�kc}���#w�s����̨��H%B����W*���Y�sD�W�'B���?k�A<�@�6� 5(��@'���'���GjH7�|'�ϽT�!�(5�$��L8^�%���$xf<s�}�B�"Ϸ6�X��E�=G���;}as@)�fEd��8�0u`�dU#��W4���c���3��#��G(c5���;������ȯ���_��"�5�#P���x� �A���������O5ƽ+Sy���KrO��N'1�nI�w +����O��D�PCu7�����.��I +W� +Z�d�h��pś��[�q�B�rO���%�׀����0߸`�' J���� �H��*����d��P�W?���Y��&4'd.Q+F�UW$M���].�U�����Ҟ �`�*��϶�����*G������T{����i����}�e��";�v��p�bސ��_y�W ����n�Glۛ�.�Hp��ͳ�W�Rh������v���ZK�8��#o���a�2���y����^�r�+�"`i�%�H�hm�{���e�aidFC��h� +����辮�r����2�¡ Uc�@y�����CV M�;-��G����ʰ���@�@ +��E&j]�+��RX�Z�ړk��)��߂��3�JR�w�)��T����� ߸��|2hlX� ���!�)��{���R?E�'�D2b0�k��Q�z�A ��+t�q�Z�'B56�x����\A��d+š~��?X<u'��c�Xcc������42ޢ� +d�H9�L���{>CUE�%1CWV�L��r�S��f��+9��J�"�ZE�#�PCL���Z��U"?��>=R��)����S�D�(����BV�3�9�-�֭�`Wb�K�`5L'ˁMQ�)�W��l��UR<c>��B�~�JГat+D�\�Q�\��=��07K��h��q�������3��L)�� ���b8g�7�j�炩�Cl�����-��0�Q<�s��ކQ���Z;��*��|bN��V�k��T���FNj�5$������Z�(��ſ_T�����ص��Q�^�KBV��0^7&��.hm߂Diw/�ȺL��Y|�X`X�#dv���1����6j��xOܺ�#���ґ��(gt{���D-j�6�w�aZhD�D��آx|��f�{#���!�M^{�qLW���3�=�2aLy����*a��ܵ�jࢍp�R��z��G���mZ�L�L�M� ��ocSVI��3��[�KP ,5u���p���,.��K� +���w�jz +SV����W띊�)VvgGn�Ć�%�S�NZ�!.�rlo +ﯢ�je��Vv)��>ݫ�d9~^a*GOu�x��RM��C�mK=��L��� �yY��%�Fm�1���et� +ݼ�� cC�^�=2ٙ&q�@�7��Z��<w���$ �CSb��G�N�O7*�}�-k���J\�6��ˌ�f���0�V�;3�^�U�<"�d�r���6�g�<dC�T��ɯ������z�-(Z6 +(����Y����K���^a�bX�CЍ �A�5�R��͗�T�tp��Gy�U}^��U5��ܣ�j��@mZ�� ��K����]��eJ���Ԯ�]�`)�v�8�TM���'�P�����Z�� e:`d,�iX�kIֽg����Rq��SWl|�FC=z��S���_���)��-�s��zs��i���w���s��8��clKF�M��%��*�@oq+?蝴�a�g�c�Ei�� ��A,e�������Z�d'�H�?Ҿ)�������Eű�����!v�\\�q�-Ҝ��^��;�3��4�1���,�Oj��N��D�� }\ �J�#"�= +��_��nX�[�} +�h'��A;�'UC2�Og�������s�;b^�L�D�X5?������,�0sD��t&m��h���(b�_qK(�f�Q D��O� +v"ȇ�E����c)������E��'��E)_�����Y����4��qJ�Y5�h³�����<��)�r��I +��~��z�#�K�<�@��~�y���Q������PQ�/P���Y ��*@[wI��>��8�*�Rw�e���'�� +�cN�F��b�64#��/؏��Xm���k>{K�\�?E㘦tX�q�����|W�j3*MIjt�C��X���,��d<�V�oINF��%ub_օOt=��y��o.�(@��>�m {1� +2劅�G:��z#��9\,с)xZ����o�]��Edj{5��ST5�e��Q���e� �����bZ��s��s-2p�K�ŨɈ�X����w�#8�Cp0����� =��8�8 +!6��]�(�@�!�I� � �3�Ē��]���kۺ����|�.�l������>ø�� �J�n��+�|�i�ވCeȥ�Ì�¾)�Ȯ����yR���3O�����5�f$�r�ȯD�s(k������j�w�)�τ��w�C��Gd�����)����c����~C�k��P +~kb��2��)���Q~ I1sf��~z �q�Wj��=}�구0��`=�-k"ȸ%��Sz��1��q,9O���ٱq���o�� 5�<��-9]��N�(� iGN]>V�8�o�I?���/:�x�ǜ_Am~)�5e��Tp��l�QM`�畝��3�J�tΚ�˪��-�xa��^������ϭ"�!H��ydDۉ���ܒ)�B^�S��BG��"����)R����J �,��%��ˉ��^&)��Eu��>�/Ax�U�B���4���pJ��*+ΨU@�e"�q`ll��=�4��rD�!��z�5xR�S?㤈��[t�^��������D���v��'������=P�t��u�l�~z{���,�(�'���g��W�H떈3\6�+F�wV����Hp�y��m�F���$k˶,��@�C�'��}��Uǫ�\b�r$Gs��GF\��/�Πo�q��S�tߗ��o�R��c_N��^���(_A��MoH�k�����䳖��6�Q��L �ը/��!ń1�y��:��:���E:f���;n�(��& � ����dˀ蝎'Cu*��&4��ph>�K:�4�������]T�j\��s�����o�筄���ʜKQ�FRbX�USK\�Z[#��n�u����}F艥fRU5$���&�bx��Y2��P�%a�_�`:�_�5և� �}"��w�M1h�/�����<���4S��-�%�o��H,�r����v�|C�R"��@�5����/{� �2�;��~��3K��r�¹zh���BB^%o1�M��k�H��:�UM� Z��p�I�Rl�-�R��~��ۖj0��Wc����e=���Ƭ��8�+[� '��e���H�1Mc�z��^�������B�-i ��b59v�?����"�f�~��D�%��c�C�7��w��f����,�L �bԩ�y���P{���̽4�r�4e�;.����![q#]���8��� ��<O lEp�/<�l}·-T^w��_��?���B|[[k�����(��"2I<,�42#jIG���4X�����T�Z��?�O�ŗ�7Lr��'Mx��c|���B�u��d������D�'J��,ޣOq�$v�� Q!��C�i�vݏ�;X�=^�D��K�R��1��3`�����@�ң%�u�$>��;�I+��F*f�sz�⼰�W���� �ޫr � �i3�Rf�a�4����(Kt����Lė��\-��5��3�7H�1mS�`EA�U��c1���/��oZ~�r� 8�)��b��/YoM��H�-�M�MY��]��[xu�� +��j�I�!Q��7Ӗ�ȉ +���.�����a��!iR�-Z�w-��Z�p��J�F�"�m���|�/�`�v��u�5�* כ�h�"�0�愇].�ap�@���FS��%�:`#�B����l�w F����@�� 3������<(}���{ua��DS�,&�]D�6���jY�oϷ����!��D���C>@Q�x��� �����G: �63�)�H7"-�6��Ǐ�))���W`Z=a������585��J�DR�$;���{��%���=խß����U%�-������sa��Ѵ��Ա���H$���LؽƁG,M5���>����P�3z��C |��+�^�!����{�;`����X�||��cP�C��bQ[�=H�����O�b$�a�j�{K;ΙX��)y��=��`��t�W��D:�@�^���%�E�!C�t �o ��1�?�O{��k�� Lܐ��qj`��>��-6�aL����Q���r͇9+]�6�V���0]�d�{��%��2�汰��v'�BA�L$���Td{�?���N�|Obf>��5�g�P) +���i��`��B��9�ݘ��=�)�x�_�����3_C�p��V�e���H$B�Ht�����P��х�LQ���R��9��e�4:I�oS��B���\�Wx�����)�`����ܰ6��ޣW�����I>bQ'F!���O$/S�:U:i��mk�����!+f�K����G��\7�8���$@��F +9h�}�=�X�x4ZG���"nz�hޤ;(��g �$�t���B�'^����+���N -��T?_�-tp$\R]��*%�rE�#{�P��"��������� ]y��P�����[]#9Q �+���)$<:�<fh�8B�/�HF<���^��a����@�_V��xg"! ��^�Gp��h�[ԝ��E�w�EDb�T:���oAD�N�D��2@�c�2��%ʌ[�C)@x?R9�� �g�� �x�^#�1b�碉�a.%J���������� (D���C.�(�T�@z��6�Q7i��[0���wEBӈ���K&#�M�twr��`���x-.Gp�LOO��g��]��0�����9�nP9L�K��VXQ0SO�^\��\''��D��r +�Մ��$(,��7!A_x62�F-G�_G�f�@�IAa���-J���:A�#{&fŗ?3&�����/�ð�k��v��=M�'�8�c�\J��lj��á^��y��$�����d3g��-֒�f����4���f�����3:�̓��o������Etbz�/˰Vy[�3f�)��p �{�>O�$��`7G�X�.+ +�ԩGN:�t��� ��D��U�}�9�g�W2Ȑ�q��G��:E��M�E��� �$�Vc��Wxԑ6����ܨ�^��=�G��p)������Y����5XLEއ�b8S뺔,�bO�0����^T���l�F<������L�π���8��g{T6�=��Ӫ�=Q�u���a��T����ñT`�G��?�^l_S���'*��L$��uUa�" +}��j�P;8��W����?�X=v�����0�Uq蜣��Yk��Ce�����s�"����W��={��g���SΌ` ���Q�j�H���9�X �hc�`X�\34�q9�L�H[���6Ż=�n(k��q'G�_A~�>� +`�A� +Q���b,�g�'v��](��@D��ō�"3����i�Zb�G�Ow['���� n%����-�X['�q(�~o�;��� +�������k +*�q�q�B��d��� + +�J�����qzz�S��tH,2��+}ؕ +;h�貺��C��� &���#��EW�%�*����,ȭcs������[Ր5bI���Å�S̒͡����'�י�KP��dXdj�r����a��d@Бʭ����?�B�����6y`d� q=�w]�K��m�K�p���!K�4�&��=SDv$+-^m���V���7�F��v�)Խ�c���l��Y�_Џ-��#��חu9�h��0C&��mԁ��5��gc:�!��09�m��M�Y;�09�<�:��q^�����K�ZV�q��"�B�n��9l��gP�m81ڤ]t��I���t%�@��3gӯ�I#ŰZh�����9A�x����C���ߝ�z����Q4NG��z�|W�s|�ݣ��&7.Q�����|̓�D �À�Nk�����V��|������RH1��w�`.�R�ëZW�^]��\���5�$L���$ +�`+�����kӷx���*�Sp���X��\>��, +ʼn1L��k[&���Ҷ�G='�!}~��zF}�Q@�m�"�ݿ ��rmx$���R!d�/�G;H��ǁ�)���ŀZ��^'�~�^g��:@Y7� Q�Qt��@*��V#��P'`C�fʘa�l �K��õmAͿ�Vƾ����/H"|�%��.�jgd@�N2����5�0kޯ�<�T�5�R6���T��>�}`�_��g�P�E�����1���W���`� J�;�@�u^�*���Qu��b +��4�Ļ�8����l�ģ��� Y�����S��1��j��,� +�P^X�LDK��9Z3l�4���h+�K�$�J6�A;�H,�\ַ|�5�F�-�(-��x,j(W�c�h�k�G��s������oY��w�t�_y�_qs��}��"��]������"̠� d5���̨~�%tZe�~w2�3pj�����ɸ]求�IJ�EO7jE j����$���b������!-��b܄1j�kC�&.�f�-��PaP�:O����Q����M����8��Ԛ97b��.��?7�B@��B}�ŖMcawAt;����_�hc�-�E�ɱg��Ik��{�@%��C��D��/���Áˣ����z�D�J4��E��fl�y"L�=fZ ��b��H�yɢ���,�9% ��A�&�8�etEb�@�s�G�k���GWHT�����)����`�Mѧ�J�/;�B�B +��b0���F��4xe�q�!(��L��qC��2�5:yḵ���WP�Iͧ����-���4��;L'���{���^�' ��I3��=,�BXPžz�����m�U��2fQ% �vXP��}7�wNY���F(��)q*E� +l]�8�ZS��KpӊI0�ru��n�#H������t��� +��>l;����-��2Cز�hQ)�.`5� 3����Q#�Kh��!S�n�l�~��?7v1Ħ��)8�)�QT�*�)�^*���A�3���@�Y�S���x����T�:�����~ku +*�p��om�"/9�!���嫐�z���T�6{0g-���\���*a�-�����AT+�@����x0��Y�7�����w���O��_ �Y>L����w�J�lב��ʞOR�����"Y�S�^�s�W�_��J��ڳN ���@R]�+f��BN1\1��4��+�h�+M��%?'K�����XAA�ȓ��~ǖ���hTośn�K�阘���������U�j +�_��l���o5�ā�q8�� {$���=\��1T#;�Dn �gn� +�_@p@H�b�S�K�-��ai����)�QQ�WiVQP�`����������y�u��zT�NG@�:d�c�-������U]�t��xw3Tr��[\�n�)�w@���� + +`EcjJYJ��J���k!V�� /љt�'"G��+7C�M�ds��m�����o9�Bv�{�RC$H�?����dEJ<�ukw���}�F�IQ`�����SG@���_���Pk.�x����Z!X4��5If��H,��D}��]`��#)8��[l�Ah}0����y��<���'qL��p�|G����s�O��d�w���Tg�hk �U`��uC��P��P��9������-�^�35w�W �������AJ!ͽ{4���~��#��Ry��+I�O����(y��%�y�pa�^IT�8�@YL��G_�6S�\-w�|�ꯘ$�;M��(KT#ӛ}��p���E������7�O�Byp_W�c��b������MA ����[��M�n���A����=�\5�Wc?��=��V%]xb�C�+��[)�����o���O=~��(+W��s/�)�d z�;�B2sjw��~1����剓���X PDA�@D+�(����O��u�yd�{��{8f��X��T��\�hKՔ�д�<*`�>�R>�Kq/ +x�4^'B��^CdI�� [z!�+K���8���B�Lg�'H/��v�݂��h�BUs�s���~�D���\y�}��x��Q�博S�{��Ho�ܧy�=�)�Y��F%tD%��R����lz��CLU�kmnJo���鶾��zk���(�ӹRHo��'"9���6B�4�<��r����.�ՓC��W +�ʫT�nE�Ӭ�3��}Q(��?[щ| $Oҡ$�]Ϟ{�?����o�P�B��&ȅGd<�B�,��+˘����`��0�XWa"�1��"(L��S8��Z�����A�µ���I�z�f�<G�Ѭ8$���Eϳ$��̓C#�q�Cpܰ��0�wK��}�x�y�!�7��f�DYm��Q�@�������l(wqp$E�G VUd��졨��nG���E�GU� j]�vBF6���� +Kg�����*~T4�i�B|����V������-C�<�r;І^A�~-�S��&�8kUf:ά�fG�����FV4QqO:#%�*�3�VZw��A�ő�е���a��(�(�)`�w]����?� ����W�Ѝp�� �̀28���/�v�z��gM� 4������J ��%<��z_Y�1��W� � +_�(~���A��V��}P�yN�:&�5#=_A����LVy�V?�\�6Ve..�=�-�q=7�@,���P�� �2U0������r�� 0n�����͗p�`�tL�YF�7I��u��E0�������`���s\���-G[w��ʿ�~��/�+ED�r����%�(��Ks����3L�Q�5(d#Ƒ)?���.��f}I��kʚHs��k�y�O� ���P/ƹ�ƞ�!d�Q��2�l��1���L�kg��%_tJG�W���O��9�3I� ��g���̃�h\ʼFE���G?�ԕ��tY�<��k> :d�h����|V�Kb�8��?�i�kB�5�<��:�v�I�j���i��d��u�E�SLj��}�'�TQ��d�F0��l���! +Bݕ.�E����AL����m�MsWr�KQh���5�������:��H�]�ܚI@�݈� p8�)=ɧ�#[��ŷp=��}�*H�B�/σ���B9j�Wq�Uۉv��{��5iȡ��[���@>z�~�E +I�H�a� O`c���Xق4�+����>-�Z�����I�]��=�/��5�~n��~��&�Y4[�E3\d��KW���������A:(a�6��A1E��]�R(a��B�D���: +�r����S�ⷚ���|͒�����e ܃!a-n��aE��kl6���P#�똳��������孱�#^����'������b�Ws 6��l��]��oW�ۅ�$�K��]A��\�s��#eE^o+V=���U.D�¦�����}�=\�-Oi}d`���Pt�q�� ¼a9���1�w;�U�#_�n���+�ͰTM�5�����~� +%�Cp��J���DY�tb��Y��;1�_�� +�Ww +�R�Lx�}�r�l�X���͓""U=c�6G�8|�|�&�P +�I +��ߏ����O ���x0��N4���BA�}p�PD��L#�Q�NL�{|5m���� urO�E?�r�?w����,Fkj������=i�,P �sx����c�*9�n��B^O:���E��ů�#���P�{&���[�c �ь�P\��T/�+������7v�k������C5��bRO�!"K$��ƃ'Yh4 +y�R����|E�jX��)�Nl<�4�9�R��1�� +#�������=��LǶn�RSV�T�3Eyż��[�͎�v�~v|=:- ew(D��y���<Σ�}%�ZH�l��Jy�h�TC�S�pRI��rT����|M���u�*=>pV#�w#���p&fs,��ُ)]��K����F(�T幐�8�5�;{v�{��*x��Wf}�`��՞��f.�@������z��VZ�M;%Np�ya� j;o* +�1M�SH��>���c��ʜR�&��d��s����(a��u�Sn˪�E���T|{�Xd����"����o�G!�^إ�7bA��:���2z�[�Y�����?9�`}����#B��&�D?d���B ��G���F��D��}���h�mDu�!���$0�x]��L��vȎp�u2 �.|��Åz�d�q�O����`u��pA�Év��=q�S�b�"��>��I��+�8vc������j2�v����'�w#��#�<�moc״tJ2�(�^�Qvt������ఛm�toY���m +�b�z�˘�fw�� �gdZ���/���oIN�-8q�eJ3������F2ӝU{��pXUx�߁��=�WҨt��c+���u�zs���x26.�� 0O9@�P�>"��!E�.5��}z��F��V�!�@:��y�՟>�`���}�Y���\�̴T��b�"�{���!�����p�R��Ջ]�+ˈZ��}��p�F|䲼{�m��@zDǿ�V9��pa�A�^�3䨈es�Ӭ��f��NQCG�o�}���H�f���{��m'�x�:¤��H�≪�A��y������(>0�sY-.k�(�fM�>j讼��Z�ş�/����6 H���Ǔ�0����~W����DO����۪�R������f���{�q��/D!�әǕ��v�����F|7M�N����q�ao�:Z?N����܆� ��H�a/�*��uCA��s}Tj����臔3�r��^ +���Jʂ��8"k�dvC%lj�O��4�ύ�+�p�h��x�L�\�,��w����T�F��B?�r�!�����.R +�2�!F�s�זw{�����44�՝z���u��~�xU��A%9>{��!Q��Q���9^���,=�����%�* �{S��<*9\`�ED(7�J��;��L��F��{����������*d�u] +idÊ� [;@�5�&���Q�p����P�'n�yʨ�p�.�OW���]+����7�"��g��K+����rQ7W�N��E�*�� v���y�PTD��bgYX�ay�jH"T#�d� n�C%�5&jզ�d�~��ܥ��.��C���vsXUGے���0���lj�b0����אn��p��y������h��!�#$�-�j���vh$��XC1K�������"H�9\��_X��+L �)�v�V�����0$Ԋ���0eqM�� �_pk��.<�H�穡�7�l��N��c0��S�����S�xf�oR>�9���^���?7���+��f +:���`��?Z5��g�� � ���$��p��"�e���DH����x�c��S�t��X���9�6:�8�RB�����7� �o��u�<��4�w_>8R���I~���ʁ�Bk�jz���Г{;�x�v]?� O4�C�Ӯ��ܸ߹�g��꒩6�h�|��&L���w$�ԋ�R�I�������G #;�'D��=�*�����Y��Pf�7D@ɗ�-p���v���B�O��������6�,��y�����s���ܝW#�2���3�#�)� =\:�/%�@�����f� � �j��Q��#��XR�\�KF����߲/�����K�!��)B��Ȧ~�������~�����ǟ�����?����_����ǟ�����_~���ӏ?���������?����������8���������?��}�_\��_�;�W�����1c���G}�j�ߣ��HB�\{�=Jɐк��0.��^� �M#��*>@��8ztu1�oE1 +=c;Yg�eIR���[ٹ��"�^0r(� WtX����AT|�4��3�G�|�ͺ��tBH����ܴ� +��'L&�=0��Bу�C���Gy��A�GM�w hh����������{8�4�I��M�������9o2��6�l?n�Y�n�7�{��j :�q�GhR�6�j�bPY�&���B�o6x�ց�̵�}�@���7�~� n��V��|�ѣo�4�"��qwDX�a=�Y*^a� B!v�I�V���=�� +���IP�mၳ'�=$v&K@>���������t >�ڻ�B/&����v�3N�B���#A�x�4�pT{��OJ +�=�z��G/�~l)�ȏ�������n:��^����=�lG9;�d��i��]@#��GↃ���i�>��}�G�bVU�l���[��{�i��R,�3GТ�꒶�Q��9�= +��( ���^-\L @�T�9�|G|a���{MF����|j�@��|�-4hm� �.J�L���(�������Dgw� iVXN��!zq��衾K/aY�V���p����:� +����5����=P:�=�:(z�"���^"!D�F�H����I������8S7�(��ݢ5�e,N@��yE�|!;x�!��1�'�V�Α@fMw�E���{$�+��=0LjAΓ=��]C[���F!�y���Ac��7���C��n��!L�oG1�ad=aj���N�{��=ޛK�й�b�1�.��|!��D�)�豗�c�Z)ݶXs<�8��,����2�*��E��j��^0 "���X ��:���@k��K���T�6=�=�d�;!z�c;ws�g��HД���ke�q؏1���٫?�=����|�{�ײ�5��f=� +IO"�N-V1mQ� ��A�`��>9s��0U�l���K�V�?��LKt#;V��_�)����;��s�ѽ���R��I�(%��v ��E�ʤ~k��C�*��� +m��f�ĔAĄЯG^7F�Z�:�/{��z@�~�~��')�"RCI�@f����K�+��H30�^]���jC,���A�NG�Y�l���m/XŶ����Q� ��2��y[�@zdpF� ΠG� I��r�:����Gz�f������ʊc��9SF�$zP���~���ű� +�xWt��ג�Q����U��+�>�#JȤ�%�O�"�����KP��0�@�\83O[1���r �M�6�m�BȣM����t�4��㪬!oI�]v�d��Z�Ȫֻ-d����Uz�3���]�4�i�s��?�x�z��< ���À �rQ\�ux��&�(W�Bp�Z��y��� Ԁ�eF=v�c��KF����+�=�=Q�oe����Q�Rn>@�AD$�G��?G���+��y�: +��ԃ��Ldk�tz�D E�c\'�1w���I��s�Y N�|A.�)��]��>h�<3�6r� ���'�Ԕ��K���q:s�!Eސ����~��(�YH����l�MͰ^�g8��+�1dy��!FJ�� +;&�>��Y_����_G�NIl'rhe�pHR���Ȑct7U?KVά�RH&Gq��Gq�l�q��hZӋ�|�t\�ŔhH ��C�����^V��FZL���"���_g۲{\���yā�ӡ�r姥���LG��s��|��u9[g�d��G'¼&��e �q��a#ɚC��LƭC6���B]@i���������{9�+<�����P����D�M��y�{�7��r������&�4��x�^�X�JuqD��G�&��?8I���8��)��_�R��p����!#qtS�ۺ�-��'���l�����b�#F�'�Nh@R|�{XTL� `��!�����^���R:�1� ��:�Y�{��L;<�y]�}ߓPbb߾_$�Y�t(e(KA��H�=HhЃ�֔�%7�C:�F<S���g_��1`�%Z�9��c�` �%�yTJl�gx�٦��[���k�{��^O(�Q���� +�=Y�/eu��53��6�M+�="�B�H�j���q2�S�d�/�+qW/�t�wБyU����E/4�!1� 1��8*!9���[��:� 8EC���fE���哭n�����c��`Z��NKx��T�y�T��C�H����t:j�h6��Xl/+{ ��������aw����#i&��96�� ��C��=��rz��ؽ� 4W�w�8��T�e�8�t)ܻ�) K2e$�t�E��\�F�>[�K��K� +�߲#���ǎ��;��\�Luei5O��i���h>�`�8��E�^˯�(��R^���b�T�=��-p��l�CO�����ڣ��pܝ!��)�:�&��}D��U�(�vK���H�n`����,��n�U�'t�TyX�ڂ�Xb���>���}���<8jib��+���ɽ���L�8�ǵ�SfW�;-������!u�����7�^����o��%w���k������F8g7�r� |���{����2w0� .s�=������*W^Ү�Z�"�zjG?E��V�+�/���V�cR������A"J^��H���*�o��U�jF��P8����x:(�&<8Jh�B�c�|꺌���&��2rY1u_)�z���a-�O��LQv`N�9�-��_��yR�n�5���o�g���b������� ��d<�E�!e%��:��~���� ����V(�6��9[���衴�|=�_6B�D����4� �`H +�*��%}���j� H������b��V�'i��y�h�K��P ��1� �U�u���^�9F>gx�&2d-U�!�g;[��nb�S�9���B��$���W����ß�< [0�\��a@�ų_:R��X�*y�2���hQ9߿�Ϗ���^��N�]�^�TTr�1G�"�z��-����q�����i��-��,����k�rj��)�A�� .�B<-��k�e��۔�*Lqhy�i��\e�s�_��{ܡ6�|�k�;�~L�v�@���Q`F����k)Ź�=���6��&�����m�3-0y�^�� +̗w���$D�ۖ#W�̖��*ї�I������u&K�T��ף�m�ՙ� = +|,\S�J�5�<v���a8��K=�)�&�x�7a�����l�R�{>1�ѩ�@i��G0 �}�<�mߪ����C���J����el������S����U�c(�_�KM}�2� +����+�v�x�6��9���� %�I�d��vO����$��v�B��(U��\9��=f�����H�zU "���!q��d�Ǥշ�N�F*̞�;�̅���ke����}5#7X�vl�;���St&]��?�R�����{�Vo��s/��}&(�����1YW�k���j��_:��]K2�)�O=�u)����Yoǩ$�:���'�'��'��@D� +�t�]1�!~$�#f�}�k���&!���������/��!Ȧ)�Zd�_��\�I9�~�+U��i>�-Er�sGX���`�kf���`����H��H��I�W�w�uZ,��^����&@j*E��H��?��ElY�!��o�y�۔��j�`/���v�=V><S�G�+z�ԫѦ��A$����ػB>!���®۟�Vb����w���!����FnH��^D,'S��}���=��{ڿW����R&�~7s���ƒP�1uyE�}+��"���gV_l�H�^���ڼ �`�d\\�ǁ� ݔ��"s<�G��G�f=l��9���˼��b��EȪ�ٔ�o���+�kK tbF��Ht_�Q`�?W��jx ��1� +ӯoU�(pHf��,7�p��?@������R�2�Z�p���z����:����Vp�Ķ�u5IK�d�j���Z�@*mOk3.�*^����oI���47��^�שG� �^_FL*ֽȪ����㋵�p;�� �Xj�;�ƞ{/zH5�������=l�.EL��ڣ�h�HHT���� �so��ޓjm껐K�T�U������/�����V#d�/�Z����{V�?A%� +�N�Z1����j�g�H)�p�AQ�~K�$@��u� K�=L$��c�Wak��ӂ��9#Y�hTr�F��J,z�(���z'u����h��ī=��:�غ�kG��%�H��ǩ���eG�~ךf�(�uSr{�g{h��0U(7������A��k7"]�4��0� A�� q\my��8����B7��z�>G��?�z r+UZ�N=j��b9@b ��ݤ�N��4��kʌFn�#{�Hh�X�_V��ω���C��0N��lg ��&$+&93�0 ����3 &��.��0��~'l��t9-���o�I�)WP�u}"~��@U�KK�%���m4j�<Ov?�ծ��9}uY��M���lu�:,ߨ��y0I�!���:��iXI��겵15XMD��Ȉd�ڇ�@�e �u����=`V=�����Q�((�2�ꊘu"6aj�P�a&����p�[��D;�/��glE���8+��Fݛ�X��n�h�n�@9�zYBܽ�yz Ђ�D%�p��YA�!�p�|�,8�p�-6/� +8��T�^g�c���z�_wo�Q �;���� �a�v�H�)x�9�T<�;��5�"M�\-wx�62�~*�d�J�,X��<j�ؕ|�=M4:8�'z�*�F6��=�iPh�qA�{� z����z +h��)N{ < +5��Z�i�vb(�)Fb��a�ˉ@��L��F�k7t�4d!��v��3��/љd��*|k�b�{5M4�k�ǀ�\��6/��6Jۉ�c�' +�;9CM� ��=�(x��|n��|���������|𥹟�{X�#�r���Pqa �O"�ɴ�q��������"[;��u��#�ս"���=��I"6|����HHZTM�; b��Z"Y�>F�/z��:UL�>̈�i(j�{?6u�i����Ϗ��o�X"�d]�T�y� 2hw�H��D����C��N;��k��a�F��}�����`;�tI���Ј�-B��A�o�`��=@����Bk}����*f~����JH��L 0�M�-?Ң���0�2{���!���a��a,M��K�x� ����[�@�!�����kE�jҧ�s��\�?�":ߋS�<@MlG�D����=~�p�]&�{��o��o�}���{���đ%� (ub���X���ԝ�dQӔe�y��E>�}�c��A�h��{/*��a�L!����g7E���>� +*!ڝ�e +� +������X���j�ש�!nr~��#�L�q��p:��~�)VKĵj�z%K +P{0�.,d� � �e?���3���Zآ�c� +p�.��4c��G�HB���UvS3#����,Md�~tb�U��=��= �{*�?�WˡJ��rƥ��� �~켩d8���:s��z��DM�ݺ�S��)֒X�����,X�Fr~�c�'��E[.<B��J����,#��`�y���L�)��~{��P`�,p>�x�%���E�D�3-R1h=���NIq�[��z���Ӧ���}3�t��b���A���>Od`#��ڃЕR��b�>U7�fs �<s =����N>���D���D �C��n�. �,�N)�C�T��@$��f'^�Ml]��־�|�w�,�Q~��It��s%�j���R��Cjs�W0�����Gl��=b�5���>"�S�8���{L!R+ +���:`���w�ID�Z��%gvv������ +�m�+A=�{xJ&-_��Q̄ >%��;d~E�Ȗ�>9)��#���?����L��s�!0M�.Z���Ǽ��C@�����';Q��S}��X{�A+�����a��h�J���*���GC�@�C[ٯo �`b� +�^~*����G~a��}��b���(w�b��#��É�{��`��0z���Şi�N4P߽�45�Yx}RKP"�[Gt�R�L"�G/�*�1c�nRy���E��f%�� 4��=#�������]��@����J�{����U�7��'MD�x��=�~����7F����{��W���h�&_g��,�4s}"�� +�E��wv��@1}��K���~�nʘ��^w.n����l���"+j��y���������=j`��� ��#��^&+�����pL�G��1����J�� �DI��w��)U�/��{t�Q���kB��+����j?�B�Df�R"�ఙҦ���$�$�b�+v{^��F�ր�L�m:ۊH#�"�f��Q8�C"�&U�F6�:o��4a�z�:v�q�$�BNr��8P} a�" �x��� +�Q��������h�/D�:�D�i���Y鐽��\Bf'd�=`�r�t�+��y�QZ$4��N����cF<M�b4��#�|�+�6r��� ��I'�}�ʾ#�d��X40�4��K+�)�F\��) tMP&�<輤��ǯ�Ե��6���W�\�:��be���3��_���孂�Ȕd�3`���适(�r>g���w#�q��S!kC�O(Ď/��m@��ANt��w��̃r!���-�\���@9 �5�`��_��x\��ȇa�Vcue ^���˼0V-��ˉm����=��d2�kD��ZQl�G!ҁg?ϙ�Ќ}m�8S}���xz�^n�zTG�&�ÆN٘!�ON��)�|� �}BPeo���v^�=�'v�@�� ��-�b��1�]lLV��2ю����f����?a��n���w��w����(e@�vK ���5��*p@ZC���`�����"�M�{���0>I�/�6 +� [��yc"N�M���7��{0;���"��:Y���#� ��6=�����a�b.�ԏ2�p)pdLqYf���3'DVעى=D��~z�)�7�~��i����Η%!�ʁ<�@,�8U��x�Z�-��~��ݲS.��J����53�i��J�N��e�B��;�D���좰����������r�$�+�o�yi�Ŗ�'��d��?̲�-dˊb[�Y'tdK��y��E +mY�t���i9���Ӱ�F�Il߿j������`dkR� jy����cs�E�>����D��5��>�9��a +�j���H���8 R���+ ^D�.uI�� o����8�)zH�T=kr"�L��-A��Ak���^'z��Ze�ļ�4��l∸�d�a����<y����-J�*�J�r�������j�j���i��#ˆ�-"�K7����{�u��X��F�U�}�i��:A�L�����gU�L� +; ��xh��E�:���[��u���1ro��;�H�[>p�&j�M@�kI��� +��S�ĵ�9�"�OR��_�W��ϼ��1��=��.�����|2�f�9����i�w��~zɐVt؉�:�Hu8}?��P��\%z�B���y!C9N�O���`�%Dp2\0��?���|){t�($� *n==x܌T&zX���~���_j|�r+��y�(2�~�:0$|���Ǘ��Bo1#T�\���q���!<9W�\�N��m�ޣ�H���f�&5J��fcg)؈��$�P��)"�v""�D��u�DL���T$�<�b d�VlU����ƃ���{���� W22T�!gP��7�a�d,���S�E��}���p�|�S%t�?НV�F�'�.��$�(���(�H���52�0���9���t��)�?Z���=3Rh&��[�{�X ��b�O=���0ϙ�|��<�&�4�$�@LM�3v�π��?d'9��Z� +�*�w&������9��:V�$P�%R]Z���n) +�x�-�W� +� + ���p���%�(�en����y�ft���"��X�Ix��<j��͛K���@�P�BPy�,^�I�#�M�5��۱���.���f�� �ݡ����V��nzh��H�\D.��{[�b���V2L]R�w>�ֽ���PKH�ۯ�?���$�)�/d�0Uwg����#���Ӌ�?�*.���^��C�W��{����4�{�!c��p��2 bP��v���I)g��_S�i�8x@�#%�9���@@D�2 +\ +[븁1!_죉2�3��H��U>4kK�ho,�`q��CMe� ��,��|�骅¤{����鉄���m���Ј����ۋt7��2�ֽp_q#hv�x/��@�^d��z_�����wH�PME>��:H����u�u����iz��t�g:�I�����Kv�@6O�=f&�^��g�[�y�0���%t���o����8�5��U��x=Q��Z����� �xHTsp�������E��}Z�asШ�d��JT����_�)'����H +S�@�(�K���H]���B��TRMg�>�۳!��:3�|�����FlR��p��٤����BQ8 �M� �(���ͪ���B1!�G�?��5d�I]�[�R�(��� �s�O�A��^6|x�X}T�#n<{n|1)�gl!<�ff��ow��*{0\�o'�g������hጭ1�[c8��P0O�N���w�����1��D�SEy�m�jf:��li7���E����&��W��2:��R9n?̖�4���p�V#dF���N��I�e��pVz��FYCf�GAq��4�eR�T.$����=B���E�n�8�19�rK�{�;�j�� ��#^E����9EM#b4��Ӓ��!q�$��Y���f�l�H7/�\I���.*�?�Zs:q����g����Ό�q���^t����xrhEQ�4�A�k �%з{���H%�H�+����9���10sW�.����#N�B$sC)%�r��>2�Z�;�E�O"���p"��`��/\��z4֢Q��.'� �q<F`x�m�݃�A�����oʤ�H�E���Y��y\F��U������Wz���q1"#�.ߩ\�r�����St�늓��y�1Ϊ`�8�jL�[nj���2]�^�s��(��A�8�KhES}��7�Paz����G�/K�g��bL<0��B�� Lj�rziM�^x�a�������Y��]-ˆ�|x�d䘋�VB��C�'�O�0I�z"�}D��$Jt��_�3TӃ��«��8�<�cR�BČ��B-�Y��d��B\��1:B���T���㓦m�@_�H��$����j:ՂٌS�Ednoxɼ%W���<��y,h焞��X)f��}�^�"����葚_��{@z��(�f�x� +��tz�6��LO�#'�ȣۃGF���?B�5ً,q��m��9� +��Ҭ��+�3uz��R�� z��=J.��C�� ��2�i۫Bl�K��` ���T�a��좤A��H�1 �H���=�� ���G�O�5����Si!�b���Ь&L�?X{m��]R@%�`�4������~�9���<���#�ff�+63�%�D����y�Y\��*�,���?jg��N阵�����<T�}{�8���sEioY��}��\�c+p�%N\��Y%F���`ÍP�i6���m��"��*��gX�<�d"/=]� ɉ� �B|�8��I��UWL����P�JV8� �<��<� �el�,���t�����$��TjoAF�Ө�2�Y�c�P��W��0dp5�XB%�>VKp98;����ы���,����ADw"O��i�>�KT�9�P z<̺�:q77/��u B��Aȿ=��A|�c6��j�{"r��I�7k�&bb��I�ʪ���\��\c�Ǥ?Z\��3�^�k���2���oN�2����w/H�&/K�.u� �(��s�DDG&.��x+| ��#�08���#�R�W��P����R�ad��MH��S�%�X�g1�c�rղ�¶0?z����7� gJ�0��3�<`�vҧu�@�����MoZ[�G9��� ����-�Q%Ge���w��UJ-Q��9�P �����:�I��B�}���e#�D@�A��7�c�~3�]����zH���MuB��68��ٺ£hTG�U^(�q_�Y$݀f/�Q���/�h�Q�,xی?�πMW=��l����c��1 (x�C� +�6�&���W5�v�T�K���!� �t %�J�Fv|�`$d�#��!����"�9���2]l�=4Op;K�y�=�S"���'�#��W�X� {�@���GO���X�N��U�S(a�'Jq����Q�%Ϡ4�A�����.(�����oUż�� oh�dY�%WC;�n6{�= i~2��J+���GrojI��h7js��%n)�� +�@���Qe�\6�$>�_%.)*X;%`�3I��J��IVx�j�S�.��i��;��w=��� Q�҄�!�^n��Q��# +��Ad@����,'���RF?KGz�u"m���L� +�T/��-(�?�Y���P��Q�=d8H+�'�����@NG�F��g�fm\HG +`���0�ݑi��\F"e}{T)� +��'�oC\��eH��jg����x6�v�;LQt鵊-�)�x����t�¬�c����#^M�ݚ��]s� �r'Woq�6> �,���A=��a @mQc}� +u�= c�w�L�ن��`Xe71�t�������C�� +�ZE��4��z��{�b�#�u#Re�LL����d�#� {�,?��28Y@�,Y�X_^|w�u�71O�c���G�!��H�ibN��ċ<\���lpyǨ�U4R�&���8�jB�����5�C�<R�:}����$s��9s]���$����~ ó����s2�,���J�us�����h?aI[�����O_/��^�����s�=P��d�U�)����}���A����8�6��,��mF[�^����(=������ZY�('O�ˊ�:i{�dS8�b�+#��u �(<;8�0j�Ϩ-mJJ(H�pN�9�h�:��i�J�"�D��B���4A������ڻ�ڲd�yO�w8MY :##"#�iC� ��jB�X� ������G�}j�E�*� �+sμD���>B�O���4ySn���b�M������Ub�$ �*y����rİ��0�n�����q����Ŧ//�kpS������� +�E�&��I�G����p�����8o��rY�ɷ�*pC<�'$�j��e�?=,�%��r��U^?�6m��:�t��n�q��Kz�, ����-�ZQ�R����.;���`�L�Q��m�U'K^]o���Zb�w�@��|�~����2��-p`���Q���.�(�=�׃IL{T�d}��X� ��כ�#��:b[{�&���"�Y�^�����ߕj����"���!p4��rq�9*�VYᢢ�+��4���f�oIn��О�+O��wt/#� =#)Ŷ:�5e���̓(ui�R�]aqQ!B��^�wZv�����CJ�f��@ML�K$�Fӏ�((Fg6�<4� :|�3_��8P�5��4ٌy��>�X��}/�\w��� ����9 x�����Eu���ME��ve�B��#��~�.4�.�߈�Y�D����T�a=��|F4�gg.���)��,�Q�y����7�)�Ѿ�y�$a�oЮ�꿇���x���a��'�^�H���( ��螙��� �b�{}Br���о.��O��c����+�p�iؠ]��{B�c�g�xL +V�,�T�o�qC9䝌v���\��k�<�b�����f)?���Fc��|�:QX�m�5�(5ѯ�bfWR�m�5r_��y�cĨ�#�~Ys]ə���,��2�ۅY�}�A�8�"�_E'{Z�:�Z5�,,�%DDc���k�й +s�y0�����t�`~5�T�`0����Kb�;�_�ޅ������e�NTj�7�T�S�)D��_���2l��r����0S�-/�%�_�#K�h��کz�'��pe��}V�S�OW@�_���z;-e���C�?^�'��Q����mO�`wn�(����DL�R}��QY�D�\v<��� �ίl +�[�nc��q�ƴRѷ�Y��c��� �]^ ��������8T;���ߚ�!���j����Tv�[�ٜ��+䦎��j��7 ��a��vPp$z�[�� +�^��+MuY��@�2�Y���+��_f���:\��6{Nj��t�R���+�R B���J������#&E����A5�P8l٥�4�]Mb��]k5/�Bd���s��&D��&���!�F�fQ�ȥ���}��r��Ĕ�|$Wx,���+Bu�w �_��`�ů�fK�K�* �~�O�df/͂��q�Q�l�`����;�|�x�Kh������=����_@$��Z��6�4*JZ��M���w�r#L-�M�F��"{#���@e����NE��)S��� �����9#��q����Onk\aOT`�ָ����I�[�#[ ��.=��a��:���;6@ϱc��G#P;���F��Gm�f[8(�a|G\p^<�*¥��4K�"�����`�*q�Te�p��K��U���Rz\�~ ����;UI�i�x$�����2 �3%�E;�@#SYeJ�=-�����b�E$f�^ �9t~��ߴτ��N�������=u]�h�ݲJ�A[h���Q�IRS��'(�?������5i�����p��YD���<O�YeL����\:���=�y�+Q���$Q�ַ�8-0ٲT_��`�H����l�)�<�&�*{|ݔ�Ë�v�4���Ǜ�^�%�Nm��3�e�V����d�t�,l�@<��'��-�y�ŋZ��t�x>�Ŭ���A���ީOMPO<^E�3��2��/�&�#��֑�j���t���6��o�0�"��q�6����"D��h��ٽ�rr����l�fhq�(*�����rI9N��u�Ԓ�'�^M2���q}*�F��-.�j�\��)�o�=|� ic�=����1 �,�5X.va��CJb�*���ؙ@�?(�_�Y�}P���?/[ULy��%Z��}J2(ƃ4�v@���x�^f%����F��� +�����#��.~���HZ���̎E���8�/� +�����+%�dX���;�8V�.V��Ы��M[��j�nvAJ��^S;KF%��l߳^����[�Ⱥ���R]�@�[�.6����K�O^_b�w�)UO����ܗ��$�j����2��1���ַ��Mx��Y�I*;�¢�&��>����$�k�v���I����yU[���tp��߮��7�%)��X�����8�}�B�����Z ��B8> (��U5+�y&�e{�/���)!�Y��U�-R�=yݗ��G�K������a���CO���9M���&!r���A�M���\8%/�!5��Þ��:�6�l����q�J孞�Q�>7 +��L�J>�K5�z��@C;>)巷�S�v����ˎ����h Gi����8-�1ȃ���������Ҿ�_x�?�������w>�7/����ط�8Ze��4]X�|��s]��N2�v���#�L�z�h[%��0�Y\��{�#��*@1�`Z��߇2E4������ ��$�|8� ��OF�IO��QYl!0�������3���9F�ōh|��YÎj�S��:U� ���J�O��SȖƙ�\#b[�fgD�㔃uѻ���y��\��**ݻ�����E5��mr�=�������W��Z:^8��t�p���%u�h�;��P�|��$�>M���)�2{�3ͩ��^c.p�Ӕm�.8�=�O�����|J���Ӑl�{ނ�1�;�;�-�@(闔�������|��e��~�M�ʢ@��);�L���d��]_'��̃+'�OAQ�}"��ZrǗA�͢a0�]DQ���{�����Ř�0I���6��Iѯ�g؛| ���փY[$����G(d��>=��~{~8�-P��Zd�!�C�2�|�G�0��,���DK�-P���� �qU�ja�*:��3*��v�L���d�̚��j�*�����uesk�'�*�S���yu�z-�� �uZ8�����u�ϩ+&~AW�L���ł�V�� f�ND0����_`���U_c�������\���P�8%2�oF�Ý�r"����M���l'~`�{��hq�jENL�k0��<t�_�Ϩ�d�{Q��ky5�v����2�&V���+�J�ZE�(:�,��LJ��T��{)F��i۰�1���i��:��3��~���b�2�yVP"hP�>-W0^�-%�Q�Y�A�d)mC��'-�4����b�� +d`�"�ޯ��S +�����)��1i���B�.P���ܓ���6�!���*nju�^�{���柳��?�X�Sʒ�o �]v:e�켂w��L$��9�k��?�q����_ܣ��59,@��JxwF��3"����?��3ڻ�D�}��_�L#&��:��c���c�W��(�a�\�b�@����_��]����M���8#�g�.]�����>؊g���vk +y�.�����=�T-׳h%FNX�8۞4]2���j +U��S�����߁a���`r/�\.�R0f������naL��Kv���Jә�b�LZx���_��l�AI��o�<��jC��f>Ї�R�&�R���k���4�Q�^/��H��0��3cƲ�! ��֍��c� ��;�������\/�C=�&��_V���y� +�k �;���@����;f�$C��[j��>X.�J���V��K����Wn?��Zy<ъu�8�N�~�H�J'B] ��QOD<��6cΔf��S��O���" 7R|��?����15h+ӻ█�~T��Sn�T��)խ17��E<�&!��"�YpX�����_�E���*�9�Ȝ�M�E�z1�'��Q�"�d���44"7�@�z J���U�}�~�V�rb�8~A����#���-ԉ���8���W�M>X���Bq|ԟ����EA��(6)�'�x]��9��BIMJ��Uwh�j�\w������QO�W��QTCC-n� +�Xn|�f/3*�f�#���Vd�jsx�nq�&�ͻ +yʸo���V\%vO����_�1ԃVd��?%���^�',סL�0�K��5�#]0���!O�e��[{i`���y���k\��ħ��J���A� q�b��+�<�����s���������~�ޠEzF�V[�$�1��t�Jj���z�=����]=��V#�#��};#�#��ϑ���h�Y�� <�]����皗D�f�]::N!5/ +���b2���� +"RR�y8-�|D��b�u���;�8]���҆[�̋�W�ij� m�c��x�4�����qה5E���W�� ��dI�#*U���f+�"C#G����#�u32h�(�3Q �=N�i%��2���+7��b�-�����]�+$ĺ"�Vp�2��"�t+�^�}�/m�?"���wml����N�,ɺ�Ӯ�.�@����������M���,j��6��Ⓙ��ɛږM��Dgc���n�K(�3 +�Zf5O<NU�Y�9Y%Q��>��F��M8_5ý�}�?!��+����N��̆�$�{��g���m�� �ᕗt��K*mz�}��|+p���@�H s��Bg���?�������W8k��u��r�ses�]+�z8����U}��{ه�%�H`��L��vx�,X��������l��o�F��L���$������7�9|S�}|Y�����$<�s�8�Hn9VM�Nm��.(�;5�6�TM�(�_�ÁhT�sERש.8f���'���ñZ&�(�kVH����� �SUj{��AP�}���Q�����Ud]N�Z�u�N�u�6�%��P��K�hi�MԓΫ��^L��(��s"P��� n3�^�/9��~L2aO���s�(�t�$������<�Z�Iy�=��i��_�@�����0�ŭO?�s���&���R��%�o�I��%T���{�l*���m��9�F��䶨aw/�NP�!�gFo�aJf������ඡ�=����]�Dy7�����c����jI���D�(�� ��5��b��F�1j���=��~� 1(�F}V-��x�r=Ug�![<�����ߞҋ��3��"r��/���fF��Ck�B�Q0Y��_`�pC��{�\d?�Wu��*�y�F4����`���sk�|ʒPW�́�#=���Tuy�}�s0��O��R�QIt�%&����H�}�,��g��_<�8�g.���e�ɹ:RKN�5��_� +�5>s�����S��(�!���L��)��y���@ĕ05U{W�o�@v�-zi2���E:��@h�k�'BwXp���y�kTə�rx�4� e}��l������ ��CD��J����W��/��Y��I|�/Ǯ�4��d 9��� +i���#�}�"����SC����ms +iP(�blr���K�f\/��)վ(�[+x-Ǝ��C�;��O�{�5� ^�o'�X�+�d0��"G�n�e"NT,E`G���~9瑩C�`D�i����hG%H������0��].���Gl-��(?�dܱ�B%��W��W���-�3j�����D�� �8$�N�e�D�=��g�Bh^9��(���G#�R +�"DWr�d(�]�ٿ���D䚑q��]������=��gVy~2I�G��g~���`�e�S����Z^�V�@|����9з�YY#��7-���� ���x���D�$;ރ��Ba30���ϛ�l�ڪO���ò�D�l�;Y;K��驒��й@� �����k[�?D���������<Ϋ� ?z���8�o�?�ť�M��>!��^�^���z�-�� LD����R�U襦�ɖ��7S�h&J��I�'�1�<s����Ux��1P���(H<��Y��Ŋ�j3�� ���8� F�si/D��6�)��C/��7�q�|U�Y����t%��y�+�G)�`jy�����V-QZJ�"Z`�p�_h�g�Љ�o@��1i! �I`Z��}���(�H�d��5��L}�q�Y��P��i�^�9�U� @��.��v^�A�X���o=�hT=��\o��ޑ�M]����U�?�ܑ3wd��`Z!'T�J1 Zkp\�HSb>�lD�}F��0��*B�ކ3�%�x3��ͭ��=Q��自~�q蠇���Oǐ��'�|��Aj���W��6�Ɨ(5�=Z�>�3�v��D� +e�2�^�[�ןj�0�YOx�����_;z�{݅]�j}�I3�|7ص��~���;��a\��ߏs͗�;���GMdm������oA�&]�� R����\�됍*�(�sp����d����1?�O5ĨтnR�`�PSً��B{�i�iD�-*Ҁ�>@5������=j% �tR:3����ԇ)�t꺟?(�ܢ����+�����7M,Z%�K݃�/�ʈb�չ���p<�# ��^Ӥ�䊨5�(Z9]�r�v�A�"VE�U+��A�N���HÄBĹ�Gв84F���Tm9r�ߡ��?��'m�f|_ ��%�zrc �w ��o���L�v�"�ғ��@^e��0)f�%u 9�8\�߂H��ٗ�賨�ך�l����9�P�=����ℓ��~���&*���G��A �0%��ZqG,�9�!�텕�}~WW��&��)Jx"O�#�C�bg��h=����]N>�G٪�.:R��.�T�D�S��4�� %�[ +�F���#���\��7��_�._Z5KN��xPNu�M�(y��������5�1z7��(�tBP +���~�As�(E�]Ϟ��qr��8�K�����*mC��A����:��^�p�˳�$d^Ar�n�R�u{n�$^eũ�s�t��Տ{��y�3�GT�q��2&"9��X"n ����Vd�$y�T�Y���@�ޙ�ī輀�Z�A�T�q�S:"d��� ��z �����V>c���}�S73��5A�{I/��p��ZmJ� +�G�m.z{yYD��J�f�f��^1��_:f�.�~K�v\E�X�&�G��J�硃B��h��$����yZd[.j�SI ��и���Z�N�U�UҪ}��2��.F�����I��FP�nqϞ8̫F_Q�"Bk�Ѣ�U*o>�;��8TWۄ$�VkN�*�e�umF�۬��|�9�������O�*җ����d��vB� �ޏe� ��h'���n&͈�T]���>2 �#�G8�H�����|p�/�zV+�����y��Α���N�_�iE�EE�_� +�F��]7�;.xa�����>;��1]�_��;~w�����8���k�&�!����R���}qٓ��o���%�W�'-�Je +�����'"d�<3҈�Iq0w̯��B^ͻ�kCp>щ�� +Ӝ��rj��0���%9����5ߙ��icI�/�*D�����?}Dxg��|��Q��].p���%����A�+�Ht�f���f=�~�h�+������I%m*�3/u�Jw�{7^eJ�@ �E\e��Pg�����*:��_��s��?4�?"�"��/d9Q�]*���iO��1�F��p�Zl�O�OاM �� ��xU��/z{�wc�T�&��8EA��: ;"�MD��a�o���I��$�����~�_ǿ_�SC8���u�ZK�x�߳T�u��cL�-ʫ2�F��~WxT8<���t*�0dp_�>�s e�}�gQa��胾"��?�ݤԴ�Kb�uu�L�ejCnt���T��# �H��u �Q��\�^Й�;�VU����OV����ߢ>4��������)�.��k*���b/�#��\�Єr +�q���5���!� $�G�]��%�r�Ě˽oZ���������/t�H��Et��}*�Ӝ ���n1����2}Y��o���;� q"O���ל!�z�P�\�%�;�-��A�-�&�n��r4�Q��EO��xV��<o��(��QQ[>�*w��+"G���*9�B���yXĪ��?#R6lyi����QԊ�l���e2�թ��T<4p�X�x��m�N�z�r�+�[�QV���[��$~Ю!��c����X: +�8w�`�OR�{߮�GTqf[�\�?���h����+�C�2��[��� +,�U�����p�Q:I�����ނk���^�+���]��:"Ì��z�x��y�8}��/��и�Mϔ�M��E;5��o�1߲��D�_�t�Q"� �L(��r4�����ilE��+�J��!j��rMz5�N����H˟/2�D�Q�%<�����yn�b��Ͽ��"%�U�+�_����Xw��H��^�H�^Zs����4�"�5�B�Z܋�?#�]e��K~�Y ��gD���z �����Gd���oB����Ji�@EPW����_ȿ� +Fj����Î��I,�����5fR;���3a*��a<�ȉ����g�K2���k�Eԍ��>�t��r�,l�,�*��n�B�q3cޮ_%��?�� !B=ʢ�Jg��G�x��xV=���}n�i-�j-� +�#�x��q�Y@R4�g�s�o�۹��`��`���%�u/�$$��-c��5bjQ,6j���o)���?N��&ERE�q�\|�<��5��Pm�1�3)&1��������P�c3� E���R��z��#���������S�w�GO���4���Z�S�"^PS��6<zߣ�>�P/ +�[�\��:�~��l�tdwuzj�����-�5 ꀪ0�/-��f�z��Z�=�pA�*=�K0�sw�:�����M��;S�����|�60�?D��5q~R��I:���`����D{����������������o�����������������������������/��?����?������������?����?����KN��_���_��������O�_�������c�̵��Ώ�AE�V����i"��:מ�I�����s��ߢ������q��c6�Qx��c�3bV*ɻ.JN���(bTM!�ڇ��=���Q�����^-A���fW5��g�߽c@�:�P��?��;S�zl[�Z{*�`<���}�C���)V�I1�S1��X����qxK�� ����Ҫ�Hg"���Gr�9"��a���GcJe��(��ҡ����=�ZU,;���^�-��!���5X�~W7�$� ���dG��P��y��vCf#�9Zk�D:�>(a�S�k��iH�`�!Q �Dt�:��EWsx�O�� ��'(t�;����+�P & +K�D���8:�a�����S��NW�4� �l��2���0��`��vh�&�w�t���9D�����m~�#���ku4�����N}@<ѸS�X7[��?(�;<��=��3������?�uU������OA����H��!�]�m��:�G�H��y�~�T����A�@�-4���L�A���x*W���dG߿ze���d]ځ� ��&��_�Ϫҽ��<G��{��6��M��{�R�I�_����E/�&�q~���D{z��W�s� ���)�2��P�{|*p�4S��7#�lG�X��@��'3��}��=4��a�^?EL)��]P���{��v�ޞ�3Hw���fi���f�0�R09)�<Ϛ���Ȃ���QL��7�U�F�`��Lj�=⧇�#��V����dd� ��T@8�c��>�����C)�?����Y�eWtDt�qzB��O4z��4�����M��^��F���+� 3w?`��c����R)w6ʓ��ka�SOK5N��=J�i(c���)��υ��xi�H9�̮{)��}=�,�#��xיh���y�v}�� ���,�ڣ��:r`��+�:����3�E��g�����8��Ej�#���nC�%_Q\'��aʣU�+1 +$"�HҞy�!O�z��gR'/�N�*�8{��P��%�r��=���MOh-<�<�v?�R��C� +/��UՕw.��۶��Cv�j�(�7����f7Oқ̵a�lw�r���z�w��n9>�`�2ԙ�����=x9M(v��Zǧ�G�`�OD�C����8qK���>E�=�w�`�-���k �84�%e,J�c���݈�;)�t����=*��,�p���}��_^��'�MRTW�;� ԩ;N�Ժ���v�;3v#���|x=z��e�Fȳ������?(�xQ��<��X���Q��~3X����)r��u�\C%�#pY"x�e�#���P�G�,��!E�k���/A�SZ����M����Τbg�������)��lM����8�K�!���* +�_)�#c�;�r<O�>ҔF����[��|��Y%5|�0*=�nD)�B���(��U��}V�����K̿y�����w +Y_�6�T�T�JY\�Y�+#�������� +8埿G�@iA�KY���k��w�}��Т�ܪ�H����hL~����dA�i������!Qs:0��8���@6�!%��j����h�����Q�ô�����(S�Kª��et�0�į�Ǖ�I>���_����U�>֔Bz���Q��a���B�16`5앾����asw_H��5�}q��r����*Ѐ +]y�9g�x;�P�s��55F���C��8Au�����C��Ks+�7 ��Xha��ԝ�2��}F�7�8��D���8�̳�2 �0-I�>�@�#�$�{+>>�X�魌$4x���K��v�N�0&�T�:]�sظ %�R�͑���E����ﯽ�0��,\���ʬ�x!��=�����Y����\�ȃ튀"�l��9S����[*�0ݸ�ƭL���`�W3����5S��~��(%<\e��S��"$�� +����>��(�^u�{�[�؋�8��C�������>"�j��v;����p��P���P��;�����!�Y$�'l�B�����-d,���vvҒj�Vr���+�l8�8m��_ec*�H�kT'*X����\�bY�NJ��ǃru����es齙IK=�kd7�o�$8�;j�����:��dz�YR����83C�m*�kp�h~���L`c�CO���I�ީ2T��#� ̀R�@�sN+0��}E5�aH�o>Ն�����Z����T� ��2��|>�7 �D�ee�Y����掯��=��n�hw�3�C�w�F�q�|K���C�3{<8ҡ�P��h��<�d��R��d +Ik� Eq$"���|.�V"p����Y��S�C�u��3Y�} +���~���U(0��j��iV���{g>n�J�00�]dLPwD�"��H +sn�kHB:�z�kW�������z�"�L��&¯�*Q9��5j���Ç��|�kG"ƥ�0 +�*��}V�z3�͗oM�U8IE��(ن,�5���v��j�N����=�cS"������{���8�k�dj-=H�� N̓zl�>2�;�M��n#3�E��������$�(�n���o�C�[&L�p�t���R�%�>@ N�����hڃ���NS6�rzxp��ܘ�fǚ9?�9���"�U�c}=S!����>������%5�� myL1������|��;�"���A�#��a��mjċ��<_&�Єlq�CE��<������8 z��8����N�Pjd����xt��$��M˧�my��6�C�hH�@<���+F�<�S��P���c#�����?��� +��|���~-�m;F��]c�ψ�������(��t���Y�hLb�����Jg�C�$��Hq�Dӿ�Q/���Q@�)��S�B��d��|0��:}J��|�M��W>U�n[1�����pC��4�h�3�}�.�)�\���qf&��]����9��[�%Ow����S2�A��j���Q�BR4yj�p �A|����o�` ��62��;��%�)�m�}NX��1O���iqu'J�GGBzz�(����DD4�:P�#�Ҵ�OJ��#��35Ix��|gdE�&�yH�cz����G,U�m�6 �y�5����T��?�=h�y�$�l����ψ#F����w��� hK�F�ҝ�9���l�_����;�����ZMA_��,��8Ɠ���5�7n�Io�Lj�9� ��'ߣ������ʷ}l���OpѨ�MW^�NG��r~F��fڃ�����������4(������U��,�.�>����,��0o��z=~S��� ��� Px�S��g����6�\�;b'p�H�?��m� +��F�c��1~��W9��8��M-NYDO����OX�ۮ�"y +c���FX�k����2rx��$��#)l�4Tl���q�d�x��������wx�ְ"�o���8���h�+�=��: ���G8�?�j�I���Wם<b�CE�ψdMz(������eR�`��?��P�������E.@+�R�oQ#��C�+�0�z[VR3u�@����o���j��*Q��dm֞�+�q{��v쓣�+����'M���x��ڿ��f�_�~Dk��� �-��뉗_o�54�x�[�O�V �N͖�%�F~n7@O�;7��ݎ�|uIw������\�#z�Ka��`�hL�0u����991M�R�1 %Y��+R�8l���%����c{M\r���]Q;�J�>0_�rz"u�D@M'ʠ�BӪ�ǧú3�x�$�C�[�Q{����V����<U�cQf����p���4A[�I�K�᱕�-���0MP��?fWɎ�mr��:�L�(ZM���iO�B儲��B[e�D7o�jh���.����5�+Ɗ*g��6z��x%����Ȉc��b��f�{�|��F#�qÙ� vP�5��O9vV�撄�lWyyp�r��,r��|}����z�nִ��3j2~�5�e�R�5]��B)v�_#�O_�">�h� �����u��&rItz���7�/1*�)9xD����1��I��|�d:�{�O��q��;��lSlھl�Ѥ��f&BC�Q��9�g���ߗQ!�����#%����� endstream endobj 40 0 obj <</Length 65536>>stream +��a@b펵�Q1�3�ԙv�U��ܢ����O�"�> yo|��P��m(yt������]�>|�;�`� T6���b���K�H������F�L����^[�A���_�Tyjt�]3Q�xl,�|���t#��\��{�����O���$qϬ��Xbly�������y��u������ +������S�������5fW�H˶�3=ڀ{�P⫫X2�`Q��4!�"�2=��0@j�Fܡ]�&x�����<��P�S� +��gR٨+SL��t����]�R�ri=�+s?��v�p9�D�r��ٛɄ���bA?X�+#}TVݤ���aj��$���R"�cL��vU���U�荮蕈��딳��i�\1��yD��q��(�#��s�ߦ�`sAZ�w�d��<������O�DŽ���E(�p�������%�5�=U��}��+�m$u2�b��d�o��΄Eк�C�3p�X�L����e̍�_6��PV ��� +�cO��Z�1�yNQ��Gg�}s��b'ҷ� ʯF���RE@�\���'�_-]���,e!�wU�*m��}����<De8S�'�9��������)�NE�!�](�� +��|� ����!�+��w����W[��w���3x�q�"�� �c��o�D�h��dE:�{ϩ�[D�٥�C��`��q��@5p�fSߩ� ���OH��ƿ|��(ܢ��w�(�e'��X`ܓm����i�i�ц_���} +�Һ�#����P��yVh�����{���c���&�_�1��A���e��v����`/P�,��9Ql<uc�;3 +"���$ʆ})o9Jv��{�b���a��>yL^�QC�]���~�ȭ���}g�@;���Wa��� +j/�3�G`�h_�� �C�]4�Y�vշ��Σ&�*v"�ϵ���ψ?.��p� %�A� +�����ζ�B����ć))p%���1���(/�gu�U�`��S�z���l˒�3 +K�Y�)$�Z|Ey=�[˜�̷�����|��&ϰ�vЃJ�Q���qD��ux�t�<�>1�Pcr��#�� "b�]qݯ3�Ob��~|)������8�1���N�����3= +�a�5W�D�~�Ma�>�Sܑ��!m5s���33Ԝ-�ʿ��燈�c��ks�/���,Y@����V�Z���L�^����zi*�}��s%K*�w������>&H�xTlT�`����t�/·�Z���2��s��������B|�"��8_�`�x��|�$�U���?��j�,V�!r�n%f6�.S��^�z�Z�>�D�&&JZ=Q���'"h�!g�iF�w�dN�����0e���5�v�v;ފQ����8h�{�ʔ����O5b�\��\A��n9�(t4�&g�/a�ȸ�E�L蜩-n�A��oډx�I�=��@�)M�� �r (Rra�*���|G�Yl�U0��p����5J����V���qf(�(3i�I�(����<�-�i��q|����Cm[E@x��G�����U��6&K��ޚ�IM�䭬�F��g(17FU�d��d"F���QJ�� `t���ؗ?�G@�N��d����yM�[L�O�^Z�K�$@�#� +�{״�Z/��{�kç:m���4@�J��%M��q.�p��5\"������������Y ��g��͵�ĺ�R��Ţ��4@��=f���u��~�����ӭR�j�D��d=���3���3O�1lQ44�j���Q,WJ!C���o�X���Y��g�"v��&v�|��� ]��*lG4��aƈ��||F�+yar�~8�~���+<��*-'��u���>�� �.|���|F�m}�w.���~�8by�X?���e�/��秈�^L�� ��Q��"�X�+���1Ѽ�?�eٰ!4�����Q{������)D����V���F�r�v\h���"�o�iT�B�Q.��, +���1��ܾ<�I�$u��-��%T*���^��04r(�= :��HE��܄�+�pŜc/�Z���X����DLEUJk�Mv �ׇ'z�*���XJ��-K꿫v,VH��lz�����4X$�;��!�L�(c����Ҭt1�ǟ�bmXs���8����#�G�� ^���� 8���|d��-�}|3��fB�KPp�u�Έ����k�6ج1��q�9���Q5�0�����Q~/P +�'��;�=ݼ��i!\���q����O%��ؒ�N���# ��A�KE�WX� 5�2'��1"g�a���;�ay1-e���9VX��TR/��̐�b, +��uA���-�#� +���@�e8 +3iT�Ⱥ���`į!d�&Y�r(R�T?<�k��_���ǯ�lI��LT���i4���D(��W��8�G1&?@q� �����@T�(L�� �y�E��G1]� ����D2j$�?Z��ݽa��2��J��X� +L*J�U:����>�YhQzAɉg��?:��xl~J�^:�+5X\�n+���(��KL �]u&�]��J�KPe��T�B!��c9<m]�veE,Jg�:�+�\y�S .?`��2�SU�?p�߀�_#c3^�5QJ�Zv���eۨ����!�|ʽqS{E(ӻO��T�lI�����4ѻ��<���s�ujX��hK3yþH��\a��7i�5:�q��;�h�Og +�a�#�gV�KB@�3�?���1��۴�)d��A�������뎅)��V������ȬZ�����;-�!f��-�Ӿi�K�����~��@��U�}���C����v����r���g�P���,FS&��Z`���!�e�b�NB�nD+1����E<�?�D\n��ی�0hZ�s&�&"F�mw0�잊�b�b��Cb�u����� +��e�hgA��t�ypz~������� +�9F`t!L2w{1��聏ߗԠC�M�����&���2����h�6H��2�i�5��T�ս��N��Og�\ �:�2ڝ�^��87�3���BMw���O�����5���k��ۈ=�>����B��� ��|r���� +�I\���R�X�Zn�K[�i��rk����)X>AMd�ʉ������az�χ��|��t� + y*�����e4�/��-?�f8w�L����ϗE�����^C�*�}X��e�r��Jn 鍰m�>ƕ'�[������y�:��0�ЛK��W��!/��tsc��h���{�?���,I�ׅ��5�v +qEs��k� �k����Ca�W�3�MS�[7�^�d^}����Ec�3���q�Յb�Z��[������F��"�糴7��Qq Iͽ��ˌ�Iʻo���8Ol�]��lz��:,���"�����'D-�< j�d�������^�Q�N��4�����g�K�T�#���A +�AB0��N��@���{�l �D״�v�3�f�<8�C�h�t�4:�(x#�|������Lu� �F�J!Dt�Q�Ԧ%L��a�?���K�\),c'��UK�虑�k�T���|(&�A^�H��UT���?�U�{S��ܾs������T����OR}C�(R@��<��;�, +D���3���J���� JL��v����ԧ|�����βe�����ϫ����β��h1��"<�d��Z"{�U.�iX4n��W-�q`J�����O�wR��3L��,��/(QM��?U�%����}�qL`)z�|�8 �w�R�H�0�FrS�7X(��3�uԸ��*0�%�� ǡbV@�B.=�W��y���}!�&�m�%&0Jc���Чs��6�dV^MT�(8|��9A���g�U�ؚ�@�c"5�(NSپ��cx'+z���-@3_=���ǫc���*֎��D�҃�-h�m���D��ˁh����2�0�he\�_�s�:%������&.c�D���=��=�-��db�HH�-؈�ƾw�Š�e +�=��@h��%�M���=Y(h8&�h�Fٿ�Si�Źi�.��=��{����v���v\�ѳͬ����NY�@��ޙ�q�{ս�yQ��٩�N���ʲ^���W"�w�;�q�h�.�IЃD/ �{@�9��9��=�7���k030�#-���������\es�Vl�VV��3��V�1T��{�C�"� �@�-Zb-��C����������=�t�Vw>������&�(�@N^���8�����3;9>?�������<�, +�d�o)�Y�(��q��w��/Zb����Y$t:��F��j'��MԽt�ҧ�q�k�H<B��)�)^�����f������A�r3Oױ'ӎ}�������&#nҌ{q\I���H�qˆ�����~�tXP���)��ם�N/���������/-�Ms�W�^;�I�&be�&ЩR�+�摾�R��[ �G�刎YI��>��#�80$��$�s �#������ +�v�^w� ~��1���ԍ4Pk�j;���BkyfЎ�jO��K4�J2HW����jM���O&�@dJi�[)C�{E����o�%/��)4O��zUj��<��2 +�w��ϯ[�Q+Vu7_�+!���=W<���Su����;����U���Y��ky(/���0`��ǔN+�Zz=_����E���dr�`�z�;����Tt��P��Ř$?��3��fM�X�)�\�"tK���&B�a��sŎ��v�!A?g�(�z�lM#��2_� 9.�f������r݈|��>J�B>�.�"j�H~b���H+:5�+�!rq�W�Uk��� ���P�s�,"D��w���dz-�s�d���4�g��W�a� +D��]UZ�qc��j�0X�-����x*i5:p�S�}� Սse=�h�R��� �;�m��D��QU�v��̫[h�(��,��3�5\v>'�e�>c\e"�����UDE����$�����/t!��y�8WEM�鏻#"f�r.:�0��ut����Hv�a���u��_@N��T2֛v��م��9�H��.� ���}��<y�_P�u�C����K�Ӵ��w�$��Gـs��B�t����u�����6z$�D:��$���qUY�]9Y�O1I�%Py�.���x���_g-���n*�[�"l��F7��5���#����@�+��&�4ç@����R�u|l��1E�&ޙ�JQ��iR��U����̯��,��\9HR�QF��ط�����ع�s�#�(I�2�Y� �i&9�#]��,'�S�6��}0S��@�.zG:p_h�l�p{���߉$�&��å7������i6f�6���m�3� 3$���� +*���WҸ�S�6�� +��ۡ�`�6��� +�F+HOK�L4��3�����y��pG$D,H?�����N��c�8�a��NgKS��h�'��Q�m��G?�U'�_��� �?V��X״UvL�1� �ś�3�贙����U��3�[��>m�0�&����X�VLN$t�usK^ݣ}_�;��HX��i� +��Ӆ�IIVj����%����ѻ��-YEgWۛyiN�{�c��g߄�,�5���v�P��Ŵ�{�N�r���J���L{p?�.1�)�^�vT� +�e�p'��QrŔ��W� +�L���߇�NI�_���d����\�� �t��0#ڃ��/,�x%�FI�ub���^��}�l*��ҭ��w�#���|W�Z�b��8P�eM�F �o�ƹX�ֱ�VZ�u4#�!�gV����E�(j���y�zռ[)���_�R�:�ke>�~ +���G���L��8뺠���.�G�|�!E�:��1��N�%�g�v��?FD�b�Yr�6�eg""3���9�3�FP����7w��<����t�{���~���~�Vٺ(�K>�U��$@�;��� "/�X���������S�� �v�41���^}�3Ջ�ƾ5q�������P�t�e��'\�Wv:�P�V4����'�iI5QU>��1U��pH�$�#G�U�G���xrպn�YW�KS뉟�{�fm�l�2���� +��\�EznG�� Z�7g�\7���%O�hh~��a4�l3��5K:=�����'牺�TW�"�Kw�"AOKu�pm�N���]le��p/���~��b=4/L�EQ���٤0i��{M�]D�����t�x�Q�h#̅h�T�"&bOH�]��c�C��A`�dUa�{���lppVe]Hm�_�7�#|�NƜT���N�&�J�M�¦�7T��z�ͮǑ�W�G(e�S�j@5��ɘ0)�Y)u��Wz�W�_v��>Y[�A/f� E��U��Bl2� ��H���y������v�������.W��wa�O���'^|k�:ҫM��f����W�N��{���y�7����W�gִ����9���y_G����hU��BV�U.(6���g|��CT����G����:;��%�<��'$�s�`�V�����ň*{Cc���o_��ܴb�3S/���Ql|;j�S�J^ڈ�F�lF��>+B +}��"hOq<��D��R��%Q�N�Pi��c�U&Js�����Ș��>�/ˎ�u"�4���@�w�#^U=K�G�'��B<�#�cw�w��.w��L���d���<Up�:��ጶ��U�S�v�|���䋆=Uk���(���jo7*�7�!J��Rx3*�^DJ��x�������`Z�D�������;[�*.NR� +��%�� +�}�f�{&m���=�3��6�Uw�{�G��J|�5�H']� ��>���طU8Iб>�)�%l����9_��rl����'�.��S4_)�4�X9_M��^�� �c>'�ܘ��3�p�|���O<Wy�����gi� �����zs(}N�6����N���~/��uy��\�W�n�X{ҙ�������I8�=�yh{� Eֳ�D�=>u�] �:{e���nh|�i���4vF�f�����$������ˡ`�{��@��P�$��ٽ.��cr��c��& +߹_`��#S,�B����D���W�I��2���\e���y�lj��T�.�i�� �v�R�;��Bh���c���n�"�*l��������C�3�#x�2T� ''z7h���۰��+�gE��s��wZ2�("��eAhZ�p�G�g��%�Ȕe�I��4dQz9��܋��Ͷx�'���B� +c���+�Wtp�_!*����rMK��>ގ�揞)�ϩ���qG�j]BR�G�e�Z������w�x/�،fX��;��-l�[�ōGjd��\ ;�3��V?���,�+�����*��5,�� �N��rd"a����R�A fP�V����9��u@�)o��M��X���v��#� �OKD�gC�0"��w��� #��O�lW�,C��0�Z+}Ip� ��G1�����u�l$�+w/��U�����0H��H��$#��ԉ�`%��N4��s�(��#��b��8�����!Lj%���$߄���r�٥�NT��g��H�3 �uԕ�ꍐ�����L7���� ��U� �w��� ��l��L�<x�U�a[!�P �*��v����˂�����x���LzpY�u&���yW�ɮ-�$�ɲ�`��HvS 7�8�d@�� ��ͤb�����ƙ��6tW�j>���c���_�_X���+�V%lơ\�=�uw�Y\�(�;���KG�8څ+j%��g���-7�a�G�l��t����j[�W�2�4�n{��PɈQ=�u���}���b��h�����QDf�M��ʉ���'-���-�H��~����Y�U�,��"zIJߕ�Uu���=d +��4,�-3w�t���'ل�KO�6=Y�Yջ�=�����xmt$�x�4���IsѺ����[�o=�����vQ�@����g�P��udF��9K���z���ga�_�2�Dw�Dx�'}�Õ�XJ2m����p�&%��ߊ� �aMQ��!�T�=!(?Ap��Kť{%۽�����? �-n��\ +M +�������)�r�~���Ƀ[dӣ:�+���Pi�3z�����nti�Q��*��1�U6��;5n^�������o1KG��z+�5gzB7�r����4h�!w�{M[��p1�Qui+3��,a{7��� +�׃ �/҂SQ����r;���ʹ�U�]����|�K5X�ۛ-��TW̷h��3���oZ/_g���K�'��]�-��}���M� +�j? �ig� f�O�����S�Y����쎟r�y)�G j�"����ȧ�#���e H�<�T�j�RӔ0](�+|=��5�8��@2GX��b���|�MA�Qx�^�3����d-<�[w�����S^������<3k1`�Iu&7VP�o����(bä���9Kh�1�������jӼv{y����橒�ev�-e�M{KHX\�M�Zlv��F�7�(+!��t��'bl��L4Q��Qߓw �-`#��6ib7_Һ3ux�:Q��"K���> �*F� +�w�"��.���L��Kb}w�q�hC�c.XO0d�Ae�X�h)jm� +���sX�h��ΐ��U% +V$ �?*�ۘ��Kh�'� �|��#(?�MP�\�д3����}���_��fC����G�i,}zE>\"���ʯ�9��v�P��d`�x���*��om���~��)��)"Z��m�s�V�bXw��v0�")D���{֣���/� +W{��G�t����/ʑM��i�Z�Zy���x��6�^�{П�r�9@N���藺JJ��2���KP���bV��+��P�V[����af+q�� +��~�{?��7�����W���κ�#"���t+:��<��E0 ���U +��D����S�m��O'�`M�( CÏ�پ��$��U��>r�ݺN����i�@�eDpϡv�F� +��ߵ7=V�K��B����x>��n=�q�qD��D��8٨��f!�X�v�!�F%���-����c�^Z�{M�]��q�}�Ĩ��&�8����8-�0X�Z~�!��7������@������._o�P�I�FN�b��f-C{.H4E<����j|Ǧ�bry��}���H�m�\���q��@2&u|��%�\Hi��x��E�F�������𥂱�����h�6ꌦ;)��8]5S�'j*���L3�.;�q�� 7���u&'��UzºK��z�/�X �`W�b6���!���H"��iq>MEW� �e�G�*l3|�[�2�T߮���fX������WF�I�(|�/0 +�p �_$��h�;��-��HCʕ@���"=�L�|�M�J�Z�M����yB���&��r���,���x�|�v�px�?�b�e�p�5zt4�����D��1ao�k���v}��,�U�?�r� @����"� ^�E[`��\%���=|7]fzLwe� +>�6(�ɖ�H,��A�2�v��Vio�CH�6��M��������{ �c����*K%��x'����Z��� �zH�w6�3BnO��L�2�TF��a|}�o��r1ց����M��t`á��ۄ�$�p�w���j�����-��)�nՙ��t��nǍ� �&7qAQf�ޙ���'܁_ߟV���,|��"���w<N� �L�)1 �~3����Z�IN������J_�AX�� +X ��q�n���4M������5�vt��~�:K��`*C�8���i�9r�&� ���<QsI0͉�Q�q�8��ـpEOt� � 8��4DI�?#~|T?�N�����R�?��q*� �����7�It�����T�������d�Y;���xѺ���@�4��l���� +A`����,��҆��q1���J���=�������9�7I���q������8@w�猒�(��*�(�Ů}����I'G���/��( +=�}�Q��CV���#/�ң�M]CB��'�h:'7�&R��G���LJց6��}I��|��?�H���}�B��S����Wє]?��g;�t��e�-<%�9)%�P�����f`�l�Y��i^`��v +-ƶ�XMA���Ьtt^<Q���(׳�F���� �/i����g�A�zMAW��Ӽ5/�Z�,�-�,"�' ՝GXI@6�k�b� �▣���f��6&L��z��jv�\m�����N(����V�L�G���|�x&B�����D�M��"�/̑���A���r�矠�P�9��Opr�'@F��Lo�]3�D�Eܑ�xh����r�8:�qB�QP��"��]��w�����A}�'����N8�A��i�[��>����|]�n�be�v��sJ}F�P�b�������#+�N�*�l��v�u��n����z�� +!��ѝ�y�B�W)�LC�j�����/պ����p+0����OŗTf��r"������#�s�^�!Rb�Ft�iv�T�{��|$p����l|G�t�_J#�����CX<��ty`�?}�L��vEf>8+ƴg��!��_>�렾:5R��:us��8���u�D��6�Y!�̦���^.��}D��t�8�¾>�v���2ΐ}�:ҫ�^�~�iCS�b3�LL.^��g���32d�ں�[Ŧ�u�(Qz"���9Syx�i��GD����*DL���8��t_�VX;�Bo���w����N'$wO�.|M����jfUbl��)DvH8Ⱞi�(�5"�H�ݮ7�в���`�� +TӃ�O����qu�ת)*���C(�Q�9�qW�Uc���s��O���������mC����q����4��yg�\����s DT�٫�P���8�<����.���������:J�?�Au��(���l/��g�\�2�q�¼L���FY�!..���Vt !�_O��~�Fd���:7C�S�}��U]�h��'*�Dž�:��Z��G��3Q�3=��#ʦ�į��N�xS�A�z�[=��a&6|B1ː�&���U�5����4"��(���>��ߣ�ω��� r���q-� +w����v?�g���<�euݸ>���_�y�u%j�v`�������A�~��}FQSѤ �:4��3�Sr乢�*{���D�����{�u�f�� +�����l�$C������~�e-��=Tu&�3���e�~�:�kϴ����s��� �ԅ���[�]u�Z�س�ң����L�Q��ۖ Q�e�%��U��nw��^yY>l��ʳ�0�� ��X!U�� V�}"���K-�{�yG��q���>�V��v-���4m vm�oD2���ֈ6FCl��C��/C �{χ� �Z�f�A����5�#*U|v6r:�Gy��9P�{Z��͂i���W�A绌k{�k]Q`q�f��W�����]b�]�R/��o�X��ȋvw:���)lWzG\Q��� +s&a<g�����K1DC����� �����T����<�j��� Lݸc�|:Z_����W�q[08�%�*[�;��h��p���[���m�s�^�@�6NՊ@5�w�k�i��i��9,(�r�v�MG�^�@��ћ;�["��nӜ�\�F�:�}��1Jzj�;�~����T�f=��*��!_+��!�ӊ��Y�u&X�D��}�l1�~�C�A:�h���K���_�2����w�;����Lj������J��3��5��r?��@�*�Ȥ��jԪ�u����q�r���Am*���\������"����a���79)��q���j�,��늣�v9g��<�Y��^d�W:4�g�F���P���QP���!��m`��=���a*�q�+��f�,}��yn�*⪈��?{o����@���I�v�P�mr9����5-r�ꌫ>5��GE��Uo������N���u��y�����S���G@��B��hί��_�����qՍ�G�Kot7Q��3�}�M`�jf��>YK��}��OQ�%�tD���Tg�@x��F�}��N(R���ni��w���T���h�̣��#4�L�����=S�>���5fwL�/k7�bՂΧ:C-d��˕�J2"D(2q�Y��ƶ�)��M�_}-/n�JEs�B���F�'��x�.5F�<������`�yl~�������_����{ +u��8��$��{}F��E���Ҭl�[��R��(��>wN��������Dpe����T���8��$y�T��<��e��e��ۅB�N��-�tD�O�o�R.�\����Y-4z�D�����t�ܷ�� ���f���q��S�Nv��@��",�Zlj��j�>�m�x�M����m��j���Q����$�S���"r�F@HX����q�W�"�9fe\�N쭫G�#8��RM]�Z�=:�5S/JRM���Q�N���������e����3�3���Fsĝn��|��'6��G�㈌Ctc(2���_`Z>D��L��X_��ic��@Èj.1{��4�;D�o���A����-�ˈ�"��+Q�: l�G�� I/�R�������-hT�^��g�H�}��rA�+M"�bQ�嗠�/y�2��T\��ٗ��̺·:���#��5��%�;4fCY�t4�j�xUU/��0_��@y�ɔ��-��K���|�WpU9�}]d�o���7�[";1ho�!-��f������?�o�� +���6C��xfP��"����V?Q*��(��jßl`�_?��C��O&<>�\G�k%� �Ë|E�H�N�bl<�� �Y���F�1�ط��?�2���q�C�B��j{_�e���Q�9N����w�w��R�~8�s��\3�,=&�YV�ψ���Ql(qI������Jen��-�[}ۅ!�cR������S 32b@Ü���-}���K�GC�Ѕx��YO��g쟏)KQǘ3J:E��߹��{�݇� +�����H��A���Ir����~�����輵j�x!#t��e0N1$�xtm<�x}���U?/D��56<ޮ�OE���+�(�A�ѧ"��:���}#k�i���"��Y��>��i,mIr�ߙ}�_/|�]��ژ����n6�f�V�y=��� �����~#%��h�M�Y��Fko��=�+�͔�-����p����Ӣ�H6���~vNE�����F ��BE�<����N@�X��Y��쨩c(LT�v�N'����Y�̺���{\W�1�+^@j��Ni1�C��N$�j=�8����]Y��Vo'�:c�y���3�����>:[@t��H�1I� ��dxe;������q�D�wN��;��Bâ�*�O�㶓��"�av������q0J%�j@��ڊ�����#]�=�o���b����,d@��Kdx�����a�6�!���^�;�L�H�^)z�p�ńM���6�y���{�YGo�$�+��F!JL� D��88�@Fؔ%�]�<�/{���"#���i���;�qC͜�HǸ!�}��%�H�i�]���7"�5`������ѣ����S���y�[~��}K�!�4gD���xrD����kG)�'�,s��@�(.�C�T���T^��Y0�Q�m����|`$;B���DvR�Q��i�V}�xs&�ܜ�"V!6��b��]�paBs�9Sp��V���#9f_�K}V<�����4y���m�Rf��� +�����Й?-�p���~R��Bfu��[o�����S-J�6��������& j���7�>���.�7�'D�����J��e| +ߣ�~�Ӥ��i�b;�&c+a#�}m����K���ൕ��G�o���ǟk��9S'���~����T�^�~��iT�/�H�UN�`Z�kҔ+ R(m��w�9��|8Y����x�M�����|�6䔶Y��[O�����í��8�1�6� +�Ik�Q<��+��l(������˜� ����2�"s�J��E�5"�OqE�Ŏ��ru���?�����rM]�A��L�⾎�C��q�>��J�|�uς��}ꋖN���́J5�n��{�{15�Ly��� ��{�?�LT�xr�Vjg�:��(R���H��+�4����P�x,��VUŖ�O���~6�?"�o!��/r9Q��D��i�F��-���뒉�e�X�z� +N[�#,���Rۿ�e�["�������N��f�u�yD���qG�^=�!����R����w�o:�!d�����<ڏ��xм��Y*�:3HH�r��5nH�����"�ç;�T����u�$�[���`��C�1t����CiM���-v�m(7=L�E���O�����2>#��\%������}CD}薢��\����d$�q���+��-�C<�A�!=>�-ο0�aW9�(��(��_K���+����den*紅A'��ȩ��й!W{�^�}��C�|H�W2~!��ܨ��q[�%vrC�%�5KY +��Q6&�i_K���լ�( 8m��9N�v;j`����--�E�&�7pU'�n�� �ԙ���^������M���� +�z��xz���L�l��jh~eh�3�t�ih~��b1�h�����V���g���ik�pH�`)1�s1?{ ���w���Y���b�s���ˮ��+`\�R���)�# �Єv�1ݬA-�%!�4�D�����1a��H|�à멹�/*�0���%h�r������uo�^���qVi!������"l���h/�����AGt�q�Jg +��ZŧbWS�{%?��'�.ԩu�څ�|K�'#=��P�3JL�ݵ-�xv��<\�% +�bc��ʻV|DӺ��������r�#�d�l��E"�\f�ɞF��ȂĶC}�����=�m _0��jm#����\A���j��ý�5���Uu�G��A��kkWW`��QC�o��Z +��"��=�ψ\�Yx�E���8�ȇ4u�u�H�4{(�Ȧ���ͅ���\���~zAD��$������y����F}w:9���ܼ��u���6?#p�X��Z���Eԍ��;�V|R�b9��HA��b�ۊmN�~UE�ÿ��vX�Sya��7<N@O��Y�W�Ͼ>��d�ߣ�R�� �P��?�,Q'$BC����p��I~�U��U�z�BK�j�����ق-c�����v�rb~�+J�#�^�ê�@���2.���~"Ҋ�����K��4]e8�5�"P��1���o�"GG��EL��50Ł�����Y��j�K;څ�r{��̂����gċh +�c����݊=ɕ�}�=�������C�1f`��{b����h��{��]ݵKjb�F�ʵ3s玌X�����<���K�+<Nͭ~@w��#l(�{�ƻ<�@ ����j� H���Y�kV�~h�cػ�p��$�dR�����B�����wKlo�D��rmĦ�����[��$��Y��_y��U}�9�����?�������������ǿ�����������7�����~�������?��O?����O��?������ӿ�����/.����+�������or�����ot�&���M�U�bB��q�~��Au��ү7��2 `�O������ +�v�>���!��D [��g���3X�c +D�Rcʫ��{��@{‚��p��D;]��z�����'��K��ϕ�x��T<��`)��3����o�O +㊿�פ�WS��Q �G��=�Z���D�r�ӧ��Т�'飰<���Wh> +��:-`(��Tȅ�Z.�� �\V�vb�?T�+���˦ˣ�E�(����"�c��w�D�:�!�3�&�tz���.�����n���qN��p̘8��S�-qs�r��W�b�5��D�`r:�@j:�a��&4��a��'��U=������?�J|p�wLlQ�eǖ\��y�F�����t���@`����7���o/�k�Ԩ +ے�O]���_��z9�������G��7K�#N�*'m��]ӷ�M=���ۃ���d7��t=`e��&�I<� �X���{�ke��&�J]���)yf)�e�s�v �M���~@�Ɔ߯�Y���M�>o�P��۱$�ت:�V�j�~H�@�叜�Lt���S����{�)��+�α�3' ��+�_t����;�Z_z���9�^@@�.����x��7홬���0��V����`m�S��cI<C?ȋ8����'\5���_����':�A�����`�0�#�Th�ס��w�&p�|sph|z�Lq{ J�KP��.���|.�Z,\���S��9K�x�%auE�~���I0��p�!D���xCv��щ�i� +�it�BK�^�I��s�9�! ^�Q�s\�QWJ���S`t y�x{;�g������kX���lG��3�Q��Z�Ga��:R*��J8�����H����D�T�+�&͑��D�#��4�=�����ԩ�+�K�)�P�����0˗t"�w�r���)9>�mVG>���^R�42C.����y��0��+��ZP�є�o���8d�����$l�Y���~>�6��Cd�2[|[��}p�m/��Oe�c�:{�����"�)��|%��m" +�-Vb�|m�@ӌ��i��� �o�q.d �c�c�M��&G��������&c�ƿ��xߘ��w�vJ�"R[j<��A�' +� �#H�� �6*��<��� +e���ϲ�Y�A�7`�@;݇��EcA�����b]���y�@)/؍'BC�=̨�W�^�-���p�u�?Y�c�%�FVq�G6�!�-�E�T'x�;��P���4���M��HuO��髯�B� ��{���5L����~Gtfirpp���j �!7���E�E~���x�Y����r���A��9��5e�U���.o�3�f�����vEz���3N�c]���������;�%O�n[u���c㩙�Bù|L<%R����@ߣ���9�^��t�`9�\���,tP���N!�_p�XTJ���j����~�k�^�f�C7�����&�����d�9��QQt|��7� �V +fHZN �!�Y�13W5�۰�����P�l<��G�5��U��L�T�fz-�JV;U�WC�(��Xіg��kɊ���Y��N��*�F3������M� ��S��lU�kL��u� ��f����椈���tܚ�|s�Wq��2��A���"A��L���wt%5���{P����P��/�;2��H@n��~<d�9��*F: �1�V�mD���{0���P�|����]<:�2�5�(��(��w����%an���-�R �IT��&��0�̢�����c�G�B��+�0JwX�X7�۸w{��1�F��h�N��%�}q�;�u"�4�w�#vĪ +KD��ҋ���`!�0-`+��z�_��hB7b�Im�R�p����_% +=�b�8?-Κ:���,:);C$#�@N�����7%���P��=(�u_ +X��jY��=�b�G ��Z���|��j}3aM�XH�n�Jl�z��I�S�~(�h��|%����������&c�4���G,�W�Z~ �f�(2�LF�3�� /���*hШ-n\g�����[�2"�%B~�����Β��m^3I��m�՟� +�I���"�s\ +��F7(���o9ewsd�w���J�I,y����t��`?���b�t��z�1yA��j�1��.ڽ� +��j��^GO���%�F���~�у�N�3�kR��K��]�����7�8� +X/Ӄ����tf��Q��:JDu9��ĺE�柳��i�4��[�e�̟gO�=�Q�ѥ��W�A������U�j���h"��H���.)�4_c5s�j�x�LA���N���8�#S0���mgl1����6_?�/���d39��`��3HU�UE5=+��*����&�ibQ�`���6��<��/��E�Th�;$=�{1�5��}9q�c��a�'�TD[p��h��yi(\�����J��M��+�E����(;�+����r*�Q��)~s�f=�ɽ�MMe~��yG�/��< �ԩ +J����S���Ku�ud�(��h�1{����>���Yvz�@�t`Kk�����uro�h�=��pv�Q�%|���"��¨�1�1�^)����!}��h��w� ��{�����4K�x�E���U�Q欠0��U'sr�5�t#��G��(&!����h��pU6")9�ae��.�x��\�"Z:�t�A�r��K��0�3JTwE3�{���b�ѣ��S��o��|�H�jȭĕ�j��-1�dC�J٠/�#����,�4�i�W�5F�ȷ�̷�1耡���ض�)� � +@<�r�X�J���&��(�y]߂���2��)��HL���%Q�4������`v�����x�V�l��7א=�s�6bF��� �O������=��w�Xߩp5B��C�u��<`�9`6�p�Pw�o���N��5\�)����O��E���}�J����lai�1Ǟ~��(ȁ�R5Y���|����5h��p���<$#Iu��dd�dd£z��0��D`O8b_J8�YU�. +_�li�r~�P_������t�A�G��Y\�w�/*�G�1��%��3W\��q���hՐ�M��Lf��� y�@���XLF�` ��Ds�}�Dl��P��qSC��)����N4���$��>�㝡����ѩ���_FD�P#y�����o�HH����Y�q�:�2�0�t%0����t�_:0��g��������oj:���eD(����r+!��d�U�����Du��yjL�Ԟ���Yx�����Ȃ`lY�G�i���Ka���a��~���*?8.�q\1 3-�yp�Jq�,l}���B�a/w�SǕޣr�uqs� �3��Ӳ�E'Y�,<�[�����=�d@��A!��'�j&7冺[2���۟g���W�2��vBY��1HWܓ���ڧ�&t��% + м̫Q=�< +����=m�|�����@��m���<���2Ú�E,�O\��"�[�ނ��GI�B���Qv�:�����<���,17��ʾَ���j<g���n��h�G�{o\D�������OC������f�!!IrK��B8��ce�)_�f@A�FC=}�(.��`�6"~Y)��[�ZQ \���~ +��D�ܶ[�����+�NZ�ԴO������7���|�;og�q����)�=] ���-������[EQ�p�t�H�J�ț�k\{�\��;�w�i4*�Hu.�]�k��1�zN�^�.}�����F��᱐�ZtHC�_{ muv��Ym^�k=H�td��J�ʿ{t���P�R��4�+I8��rM9�J���?��s�`?rOfە����uu��:�Hv/J1n?\��w���oY�H�E{R��z�_�ZSc8 ���'DE���n�!B )&��+��R��upRx��0!|�!�Wlψj:K4Z2�h��~�NoE�(�ҨC��������&v 0�eB� JNL��P{ ��ʈЅH��fܔ��=�eo��� +�p�b[�v����CI�S���²���E�/N�6��gG ���R�is/������5���E �'�AG�G)���=I*��{ހ�3�����+<�s��|��2��Q�)���SБ���Ĥ������������,.���h�Ǫ vթ� +��٢��^u2�w�p|=�B�И:[�l����!�Ǡ�Hy<q��Z�/dY� ؿ�Hه◦�r߅�UQ��'0���|��"9��#O��t�V �͟�}�8����) +��'�#*�V9~Q�9�N����ڀ�ņ� }3��*�p�_#�_�߅��TS��y��T�&y��$���q�ߕ�~���QX�����8Y�n�}D����ƙ}0�Ԡ������m!b�t����y"�gL�5��2��������a�|���Q��(�W��~K�Ǵx�ٰ���-L��"�YA�s��ԭ��o��?��(�^42؉��aB;���!=���S�xct��;�uĬq�~�4D���(�ڸ��A�)�\-b��-�~� �2�PF�t=��ے��/��(�\��h@��6��f8B�ڔ�vԐl�gg���Yb ls������<0K�-~��9��BZ���"��g����Q��C�w��s�3n�92��률N �1�J_~{ Lv)pe�? Ha�.�' �'�t�QC:$h`M�+�wV}�P1C1f�T� ��Űȹ��,�b����c=����-�'��v�I�D��������0GX�O��"Os���Vޣ��Q*G�[g#���b �^!�+��I�*��������+��J{� ��g�͜�x������VvG���JlJ!��Q'b�/i47����E:������.�WI75���0蘺z��D�,#�M�~��(P�jf�-�^�z�*��B�m�i�PsV����oO�U����,���詔W;�gle�\�:� �mɟ?�7�k��`ރY�}� ������2ŗ�ה� ��z��'A�`����آ ��1RY��xx�͖ jz�)��ad�ʙã\�@��_b�h�q��;�*"r�Ϛ(��y�NJ��#B)���`/?��I�����V�0�d���s��g���)�E��3��Ե�A�H��\m��Qò��Ot�����3ݛ�I>�N����ow���`$�΄"���"̌�u�KW���4;����#J��|?�����@2�N��U�p�=������$������b���>�Ca~���X� ��)��f�ŋxW�Ҁ5��I%6}�`������v��w7�)F_�u:�9�:�s%a�_���#�eg��Lܯ� �!���������<'o������B�Ї�� �G���5�d8�n��6��=���.?B�{����$���I~�qMyf�O���t��xks�>ˌ�#�!eU�r#B_X���@|�^�]��_p�M�j���,z. ���n�Q��� �!-�n��(9�s��c�ˍ�S�)#ɾ#*����?ĥ�S�]�L+h� +T'\ +PUP2uP��@ ��VF'��)IJt5[k4�M�e������ꂽ��i��Ϧ��4�9O[(�y��dS�@b]��_���>~�X�4:��<���ԣ$�) �P��(l'rب��4��$����1!Q�w����c����������BB���;J<�)����~S,M�4F;L)8��SL'�L��S[(;}�]�;��Ӄ$'�JLW&��X��������H��=���&�����}�1�#��b+�Z��yt"�����c?����-ݯ�F �M'�V�eپ�P� Œ��jSX,�P��!��;�M������8�x����0���b���>l��b5(�[Wԋ +��_�o]��D�w�a�e�sra}t�� ��tO�6�x�N���9�(�'����pj��k�(A�x�(�����ʑ�N�f����M@\4�ay�q�@qMk;2�QB{��[!��h�elA�b{3,�Qn]z +љ����0 ol{2��ѓ���6��m�� �F�J�9^pn����iUˑLA�ٔy�&U��_�LG�j{�PT�o�lyT!����<R���vi�3��V����JMX�";��r����ߎ!�=AĢ� �'� �b���k� �\)$穐`�)��N��اU���][!�@G�O�Y��'���U(5T'F�h��X�K�xI��� ��!�<"DU�|�(�B�o($�VV�5,���US���y��v�E��G��z��A���*�!]So�����3�S�]�U��L�(W�I��J��TΓmkG�9Ϛ�a�O��I�=�HO���Ud�4�X��9hNw�<�.�7�FÙ�b_X������\E,"����OO��"W�UO�F�&M��B�|Z��T���)�B�J��2�����y`{��K�cBV��{'��h�~:��P�I����2Ck���W�2������:Xjh.����3�i�K���f|׀�#��0�G���z���%�W0~Y�S�+�� +��]!ޝ$0���s��0r�`e��ו�^�¦�!�o*)�H�Ta�G]�_�b�v�|�*�����E��l��#�3��.�2lY�������#�N�v�J��6h���آrU�G�V��P����NE��y%z�\I�pE� ! �zg:F�,a@��o�6��&�H�����du1�`$ ̮��7넂)`��|ͽ� +��a>��C�Z_`Xw��c>S��*i-�����L����X�O��ff�(�����d��R��3/"B����^uo��4���#슈^Fm��^� 9�~[8���jX;�WO�R�����jq +�Q���-Ghx9T��w�^��2�C�����$���Q]'�\�"��L>J:1�=���� +�#��%`5X-YkS-���4r�#J��$�HrTs�� �5���M�[F����I|\M�J�.4�L+v9 �iݷ���d�*�����x�� �@����$~eM�&��</�9r��pAȟ��ɕA#��>3��Q:>�|���8(�RR��P`����'�M�U"�t3s�9"Tl�Y�n�@T��7蹹�����O��:,�y.�Ƨ<A�k��⼋&u��#/W��HK��8��:j� + �8���:���=Ԍ�BE��t�i}BbܳM;&2�c!�;��\v(J�8�5�����X�(?@xf-���O��,�ۊ\�J��L2�xG� 6�e���Av��Ot�sPs�f��l1�'P"�����n�s��w.����R(���Bb����)��;r�u��T+{I=X'6�tMw��1�IUJ�5<\���[Z���f���=��o�nP�5��82��2�88PJVTT�B�k��#M��X�Bgc�H�Ȣ�Y�4Ŭ�]r�j�]tx/~J��d �t��"�Z g4PXF��]�:Ч �p\�ӧV�Q���ugS�贬@ׄP$�6B��Eͪa +�ɳ��e��0EBF�~3<���� �/��@)��cu)_o�I����9��t�~��lEѸ:d�`B+�`�I���a}��<�����ri��eX&4�Ip|N�(Ck�ȫo�L^���B�4ϭ,"3 +���Z��� #}ȳ�!O@����2��I-A���#6�=���=O��`������z��X�*�`��Ua^�t�U�D�F���s�c���0L�s�Y�q +�0�aUr�� 8���`��,:ol�2���+!��E�T~�G4x�1�d.g��B�2BR���S�b���gO-v�����Û~���U�G���V��^=������<{Pa�7Fp_��`�5���Bz���Nn�.�.�]%�R��|%��@�ހ�>|UVՌ[A��Dž�r��j�����'�_�q"D+)\����4��5j�ԬP�����d�t��)^U�b�+v��B���U��G���n��is +Iao���o3f�e��T=uv�:���{��)�Z/�@tڈ����@�b�~�y��g.:M, �4(�X!酂��B�aJ'�+(���-�r2 k����8%�|��w.�.=��8N�$�M�W�9ګ��%at ch+���e�Z�.b��^3��XZ��zb�Va��[aF�&�0�װ���q �WL65�I`�s�O@�wނ$�3�'�^�x����s��0)���d�*ǚ'�ĺ8KtѪ���������{ov��[&�Ȓ?9 +e�{ْ1ӳ��a�k(T�x(�����nz���F)b��gi�2�z��5�sEب��P�>$�Ha͇\I�f�f�9��&�n��SO9��}x=�v�h�x�Z �.q̶ầ�1��S��J +B�}>x�-��!���F��$V�����Ro +�]c�"�b�l?4�K��%�}�K7C*�`��NE�.ᅬ4���T}8�3�T_E� +g�KZADu�s0>$�[�+;1;�P��E��^v��`W�+�v��Z�����C!���0)D=��Lm�U��L��v;T�� +���O��AڤHx�a3Դ<���'���y��y�%Β�,@�$�f����xʒ�Nv$�9���'�%VH�LYL��`8�!��^��]�8B���f�� % +��������\_�-H*�|h��/������X�N��_(����b�4W�@8�d\[Y54e������jm���|�Ί�-��Y�������T(�f�1�1���ᆳ*e� {5��D�D�*r(��A���5�[�ch����TDT߄��~s�"�9 +���N�k�Ohī7Q!��=ڿ�)���s�W5�-3]��b3Cf5�-9�p`�ܿ��/\�,���^R��ԑ��z�c�誽�uv�RZ�Hgb�����8�K���Ľ�z��#4K�}�Y��Pa�I�S�V�8y�W9�*$μ�,�܇'��<K��(�|g��ȁ�Wt�W�!��*P��|*��5Au���; [\ޯ=�5��ʭ�Hڊ �4$�˽�x�9rH�祤��1o���� ����/�5D�m"Pwo�8�`���:pg�M�c:Rg�x�#�����C����= ��*�o3ȵ�%��E��j�Ŵ���\G.Τ9/*�E:Vi��� YZ��o�s*���5Cl��uuj���-^b�B�=!t�i�<���;S�BJ��Y6�U9HQl!�v����)�CT��}T��rя�SD�!�k� +��K0�{��Z"2����2=4�u�Y���ҡ������;����9[�믻���ʘ��٪S��F���`��a�{͗�fA �h��Ih����A +�����UhKP(�om�^��^��d*�H](k@� +jc��1�j�-l�fȫ�;u�q�utT��o(��jD� ŧ¢< ++j�p1�n?�����GɔU��8qu:�+K�� ��}�뼵0=�����E�Pm�y�͗R�������T�^�)�c�bI]slW�!��)U�ҥ����|�53q�(<�c%N1d����G��e,��m�0�c�|�)��#���tB��I����V3e�(�W�%l��/j/����z��`���~�v �T�7Q�bV�S��q�t��N�T?�:3�"t��ʡ��8�/�DQ�_�A�fsle�d��8�h�Q[p����O�H���7����܈-wc�:��g�:��zK8����yE�g�@��u��#�x�4���7�,� �(v�� �O�G�zj���0�w�C���(�}���%m)pۡ|���E���H%�`�{�.p�@�����v�8��Z�$qy����c"B�������J�qp[K�ͤ�~���� nj�6�����M�L"F�#+��B���\AhP�$��0+I��qHM�:�Ѡ��È����0 �S� wSQ�� B%�c^�o��A����ԋ��G��}erx%d�z���,QG�r�f�� ^�]{���>V3qY��6��c�$R�L2��ރ�Xs�Ϋ���"U�>�T�fl0l�*���h�<�4U�t)�����k���>�*E%U;Qc{xU�A�r�w�$;���mE�V�w`�ӷ�*�SC�9g*��=� +�ϑ���l�YT +��<�µ"�M)�%F�qR.P1Q��%��J�5�c3��1C�`O��:��ݪ���s��`ؙ��5���1�Z�w�+�Y���!�,D�f�Q�Q䌖Oz���#�zsD<����"�#@����Q� �^�n1�l�[�Y�������iA5�ȸ�-(��E%#,�A5�"��^ex-��~��s��3w���>���5�-���ӾRl� �p� W�=:��� +���U:"�Pϔqt0ߊ3(9�{jF�(�=&�D�z$��f��Q��wp���_tz$b���t3�2j�͇sQ��v���7�!9����)���V=��e��#�������b2�3��?sʿ��0v���1�~.a�$m�eԹ�*�]�^�H�}Iկ����=��A��������eo���i�i._�� Q�V'5��Jj�D!Jq�胨�L{X-}t #!���ۑ}U끉U�V}W�9^Qf��C'��S�4x�.��WVYgtD�l/��5��-�˨%�g�1�k�6�!�".$�N�N������8���?#��gT_+���J�!���ֹ�1C�� ޣ^(��ݧpեHJWm�MN���s��S<�P��b~����B�aY�>>��=a�~wVɞ�x]go�+ +9�<T�q�~�P�B� ��"�C�\+��D�C�؊N���(�g4k�m]A['�T�� + >�Bvau|��P�bpU�[az�>i|~5�{Q��#ܻP�ox�P��3���ΰVq�.��w�-,:O���ɺ�`*wi�O����ӭΉ��H��`'��:[0Ѽe��{�Gy@�J�R~���w����p�b�{�A���* b� +%�qE��I��E%;>�]{n�os��*�s��]M�DFP�T��s�^G�l��y4���v�������j���z�Y�� �I����$�G��b�;\��֬��kI% +Qř��]��f��BQN#"���j\��Z���q�� +ڽR��5�e %1��G��c��$��_�<���h�S�e�jT*�Ϣ^瞛Ѷ�}�F���\ia��t��tG�dt�������ڝ�w��F�]V�Nɴ����1�$0�=.�]O�{$�(����{Ȫ0m9�d��!��gDx��'��T�-ANu��8�VP�AXOSXG��u,�\�yj�d`�rsŸ-�!ێ���.`�P(XpE���8��HZ��o�P���ÒE/�^�H�pdp�~�T{o��s�]��DQbc����[��Bd|�g�d=:A՞&��TJ����y�(�V��蔚��!�q�kU��xt����f�u���g8]5$��{\�`&Wq�8�։��}�Hal�uG�]�T�s��Xݴ�,�l����V"[@{�B��b�����̄�zT -D���l��N�m�z�?�����hX0+bVi��Pm +�E�i^fd0)���p�h�:�q�Q��b���������aʵ����"9я�2��T-�7]�,�C�[�V�F<.0�%�F���SG�@�=���F�p�R1�a0��awRh���Ⱦ�]��P)�G�B*XB��= �Ć�X����4�m�j�͋����d�W��:�ď?�z�8���F8"1'1� 0������G�#�2��Wz�"�^�z;�U[}�Mm�l���X�p7*���E�]�*lTM�����p��Wٞ�i����0P���I��Y�t� ��~g:��y�x]@ ���%���J���`,���֭��k��D�����!B�o3��H�r������VHuE�9�V +U�ʮ����~p1f;*ݭ,�\D>��բ쾯��JFv�N������th����.1��ا��?�lѱ-�4[�6��+l �>�c����f.�;��rQ��)�#�&�Qq���c{����/h$*�b�6��<�#A��=�GDo/��{� ܌�� +���6K�6��ʡԨ4��f��G�\����O�En�B�i�3���9J�,�{����R�Yr�y��K�%H���e*�K[m[ޘ�P4)7��*�N�ds^U�C,+۵����n� �Ԟl���&�-J-�InXȄҨE̺������;�}��\�^��B5/�7�<�4�cG +*�~j�L=,�6�D'ڔs�������l���ٲj�}����J�Z.����rN����@������3�RW&Z�j�(���4���`)����~tq��?q �S�UV��n^O_IA\��(dA8�9�N�F�$|������16�GP��]��k��MCv�d��FO[1ĥ�1�P�l��@�$|r��|��pDq���Y5T�}�./l�P��[�?�<�[�����+O�+����d +W�6�e��.�Sg)�;=�"(3L:;jQ�~��)�:�Z�n��q����Ŝ���ػ�7 @��B��PLQX�8���2ݫ{�ms�j�0$>�U�=���i�����O,��D$�UB&��tz����L�Y�3FH)v�ԞB���&jfi��]��Q�ϱj�&E5d��u9 +�bӑ��ވ�Knl�$���[X�u ����2R'b������F�rC��m�I��%���"������_�0���A���r�(%ؔO���'Ӑ8����̨��*�8n2��@�;<�^�u��L�����3�I�u����13�#�^KPd���i�k3:��&{2���С ?c��Q���H�qB�yf��@��3���@|� ��������cR'hq+�L�p����>C>{]�Oin3����*��<g}��Ϗ�����9V�qv߿���<iɝC�o���������l�x���M��!b��ϕޢҊ�zz�`��(k(�&z� �*&&;y��y�/�܂b�B�f��S9�0��YckY���z����a�'�:U������5�!�L%>���Aڀ+*5F�f��+��3)����x��o`QS�rn�g7���83��{@F�^y� `�Cv�:- ���g����倓�>�yz�Ղw(?/�=_A-A�@���*G>w!>���z"3��] +�D4�� I=�D�k�����1�5�JL����f�_#��oQ�]���=���W���h=*N2$]���t=���1v�u`��c)p��} +l�/�)ļ��=ӭqPFA`F B�#��C�6�`V�Pg��e�i\U���e�����z�X��������wp 5" 23�Z��y�r�x/Ǽc�M���r= �q�5�{!��%X��p��_⁄@*���#�tخ�J�o����z��[1�D�{oW�n]2{�{B`�� K��zDui��"!BF�(�ǹ��2h�L�c�{��1�����_i�~���w���%� �p:��{ .�Si��b��M�^�;vN��9�G�-�(�:ɿ�C��a]y4~�/&�˄��RH� +�`%:ތ�)�iODD�N���6WR��e�+�T�!���a�B�W�n nD�,K�9-V���֊Y�eQj�I�7B�Go5z�R�<9��63����N +c>Xڥ%����Dֶ�#wdQ~t�ͩ �UY�j�;�\�X��9}jWͭu����T�[�z�6c+!6ݎ�����_�Q��(���l*D���-��%,8������0�N�+��@�.9%�5e��7�l�t � +'��31�٣+_�c��_��[�Rǫk����&lɾm(�������o�6Ǧ��� ��=�S|=�.�ܐ����Г �^���:����N�+�E5�E�&$U��8��'!�>Q<Y�D���-Jl_�� m��&�D0��z Ea7<R^:�H�z��"�i͊�8��N%l@�Fϔj���P�:�\�B��TH��c��d�������k�5���I��]�bE��{"K�xx��Xi���C;M�~��H' +G��I ��!���ř�%b"\���W +��Vg(x��GD~Un�)�Q��F��G�9T�,���ja���yZQ ��,�|�ĕ` Aw��}&4�(^)��y��0)Z����p].�p�ٴ����Y}�e�#��*J{�EC��9AX{�N��B����a�5{��B��}�ؼ��{��X�)������į�q�ٿ���gܮ�~)mf|���if��+��&J�A�%�C��C)��`����AF�݀0��gHəmR�B�!X� �n9)�k�,����4W��L��ֳ��j*VG��m͑����S�PP�W:�.���S� +&x�����K>����p���R�� #<�E� ��0�0+�'](.*c���s�3A�~Tt� �!��3W�8yg�E�]��\'��(�I"v*Ƥ��;%�&́��LL��b���χl���1M�Ͼ"�����b�����M�J�|s�������u|��K@��k +9�@5j�x��{������B��>��ӵW��b���P���7~�=^�A]0���@��m|PX?�Js<�-�G=b��d�{ػ'@,�ʢ����Ր&}� TV�����b�ԅ�ڹ���C�N +�/mN�8����-2������r���Tܗ���-,ݘ�dA��~�ʚ~�ڌ�eZ�d�Od���e����3���f*�u�����$���x&����@E�� c�h���;:�^O������kѲ��l���y2�!�'���f@r��;/��)���B���-7F�hoT�~-ø���Ur�c���<i�&24�=<����me +!�F��Q�y�AW3�����3���r�tFu�f.��Ī�j.,���als{�����x︮z�ŻxG_�(e�- � ���yh����5��UŨ���اYӞ0ꮺ#�^��R����/@���Т��9V��{�eJ�g'����*�Q�$*��Ğ@�����x�+)Ah�g ��m5�Gӆx��ȁ~0��l��{Kɽ��K�-���Y��,L�����Q�^��7���;�G�%�0����AQ�@Ԩ����֨P䚖��C�bS��� 2t��+P֒,��8�}���g�M���̗Y?���!`-uǶ��G�����%��/pK/'��G +un�&خ=Q.LY��8�/�?�=U�Ԗ����-�*cOc@� ��ۈ����r�m�����Ep��s���| �ܾ��������6ɿ�R�|���M�\BT��R� +J��4�����N'������)����'2�$��C��_�`D�>�������9Īw������ߦ�`�_�%��� +��R�9k%t����"�cNA���"s��2���z_��H(T����$�@��H��įA�/�+'K��<���3�R���$[���%��#N��� �O�qگPU�$&�u�,Z����_��_���ͧt����Y4���WÁ[Cj��2�ch��A ��e����s�`�\�[��ܱ[В���o>NYK���OJ;�i����~�d:��=n����,��B�>4d��-�+4dt)Ϫ��h0�T`��� ������s֖ba� ����9Ļ+G�F"�5�+O�]�]p�XA�B8"T�{�����@�)ǧ�Vd]�T���'����xS��9����h_Mj�=�}vET��c�uy/�&0�9�p/��;�s�8�����v�λ��P��{W��L|ȁ�����I�u����:������+ +���"� ���z��� ;qPg�i�R܁(�s�ڟ�\��KU��~��$j��~b0�@���5�Q��|b~�q���N�e��m��8=�j�`D4M��l� ������@V�v�0O2�:�Z4�vK�_���w=�����y�8�(C}��Iff�&�XdP1c��_�H��x�\�c��R��i9SE��uآ@��n�{� +4S���~{�C� P>�= +~_ qGcQ$�8N>���{�w3�[T�UÌ�p�v��w�0hr#I�[��h��7&�}�#��t�<��S2�A��iخҖ�H=G�N`�VR)�Cpw�4,�!Q�<;�t\FI���гg�a"귗��v�_�9��k���o>��F�67�����$�H +j�� +�ޭ�5$S=%�v���'*�(���9���$f8"���84V8r���o\�;#��d 3(���NG�1 ,�7K�r�����g����:�WS��!��}�x��.�{��ɰ�| ����iX6qK8��Ё9��š�6}��%N���u� +���1�d]�iMP�����r��`��C��I}�jD��&z~@KQ�z,���r�'ٴ|���g}���";�S�C7P��"���"�a����X��5���"q+V��6�.i��d� c��1�u]٥�!���8�<�����u�2U-���B6xv��5����^��j�v?RQ�����B�i�r�Q�D�e8�����!�6��H(��,kF��ص1�P��|kZ����k�5�F��}� �b��l��`d��oi�>�)�\/�f�[�;v)�-} ��($Y���".��=wK���2tgI����8-��O�9jH)��(���M0^�El?m�kGF!F�`�0�`�q��E����;:�q�Q��K�U�ƹH!@�Y�@��@.De��/4V�le�����}�3�����ϻ���Lj�&Oj�&����HDM١5 �/Po�v��b�y>��N���ܹ�]�����%��b2;�6�]�9�|��@��$�_?��|d�+{���s{~ml�����E|Zz� ���n���dA=�� +���}�����*��gn+�Iy���wOB���B�G]����>�Ɖf +���)�����E0�I�,�K��օ*��䴔<��єɊ#�#��Z֭�QM?��jĈ��3S�)�o�o�����H���"G�]��7_�c_#��AH�e��J�K �A�v��u���~�h8���a����}��9hT(��T�V/@}g�5"�%�l;ܬ���o�2;�p�M�O7����u�7ތ��� �_�E~B�J� +�����ͨS��gr/9��yt��H�0^ /d*p=��zV��="����}|�F⩼O�g3J\�4��[��l�_�_(P��$*�>�F[��8�h:�bq0�:����M��x� +ȣ���'�t /ZЊ�#�[����P��Ҳ�Z�Z�h���&�dH��#C�k��=��� ���eE��(q�@� �%��Bf%$�t���![k�3��nf2B�A;>ZM�]��~�HdV >��PG��ԃ�`srL�Z��K�.�#�(b�<���°B,��3��8����|fJYq}����:_��8�֝-��ѩ�>��ߢ��P&����@jz��,�fA�+�=%��v��nVg���g�[���>4ܔ�1��cd�-L�ߜex�Q�3���jk�%{h�4/E�Kԛ�*��$_s�Xs���d�x �<}����%4!N0��7���aH�쁬_{\�P�����Q���^���]f@g�+��F�ۏ( +�������mt�F�1])��GDEA�#q�#�h��(�Di�e�r�y���|8BY�j#�bȼνX�V��@9W�qm��p�k?�Y ��=�_`��Ց]x�]V��FѾ�,(G݄�+O�S�[��Mr��lm#k�x��1u���>�Z�|w�/�b`���j�+D+ۿ)��F�t������FC�@���7�u�&�pXy5x{��f<G�!Ũ0}������x07&I��~��T��ǁ3CM��1G�Ud5F����S����#U�c�.��)s�|�Z@�<q � +�E�K�C�d]�[T +YQ,��/�Q�ix�0=�ȉmS�g�Wz�Q�5�4��,���~!��IL�{|\��'��'�� �E#,Q���}�O��p�Y�ODѤ{���S~��������zg}˺Ij3��s��h F��vq���p#�0�6�:�j^;ΡN��]���ReB��߾D�#$��X>�g�x��/P��B!����Ҏ�="J+2=X�}��~��#O ���_m�=�*\�KTj<����� �WD�Q8��ù�'�=�[2{~E��a�L�g��5�`B��:`�E*-�^�g�".��M�������~W�ZZ���EX�$�\������Q�f+��F��×8f��XǴ���"�9ߢPw iC�m�bD���J���k�:�\�99�o#ϣk�C�z��t�w@�-vn\YV�4���+�PS�P�Y�.����}[�H}K.��o|�:)�OL��ht9������&���]Gq �is}�OESj�5��8p��|9F��L�Eu!�Dng�@�̆�#N³����bCC�aů!�}B(��;���x��`������c n����*ν4"��(��i?�,4�o�����gi������[���h�|�ݿ������_,�����?�������_�?��_�駿��?�����?��������������?��?����?�E��������o������/�{^w�+l���������Y�a7��a������(>�w�`b�p������bH�EA%Y�{j�M7�"B�}'�F����+�Q�Æ��ahl�����d�ĉ��8���QTN�^U�1H�Lz��Q֟6.�v�V����R� �h(ۓ��nF��Q����4@iq�k��B�X$���A���82e�@���Xq�̈�)��� !z +ْu;-ą57�r-�jէ>~��" )�h���G��2�����P���%n�!�Q\��d_� �WS���$�Ǣ.�[=#�(D�oa��b^!}�xRʴ�i�O������&w�bw��^�"��g�AIf���9�� ��Wz���L��Ƭ7Q��PjQ�:��@�4��}��4@O`H*7\6���_�OG���D1&�!`oD�Y��^����;����`&m�BW({Oc��rO��C�6����ӈA����[�B�����8*��8����� +`b}�]!�E���~(���47?����]i�=� +���UU�Sp��l�z/�ht����@��NZ��ST �mxr����:�o��4��=c[:x*C��� ��W�(@���Ïe�"��7"�r�����q����[I���+�-�$5)��ׅdm"�̰'��3A\<M�#��s����@�i�~�)�> +����ֽT�T�p ���VB�4JH��h�0)�GG� �&A�-�q3��Vڿ�b�^*EJ"C�8�co�?:y?�W�\�P����-"��b��K�Nb��y�y]��ž������w����!V�(<_���ن�ގ=���A�UA�ci32�&g��b�n��.��2Y2smU>��$�O��F��A�#�)�q�h�V��" L"���N��ވ�v@q�22��a�� ���(�����<�a���W#�5 �ɇ>�����Y�͞w�b�V>�X��J�~�4�����`s�� "g9��h�L:���[�WZB������< �g�2����'���yJ�<%�Ĝj���uʕ�1�y�� �|�K�$|W1s��31%�3�ș�r�u����PY(� � +�2��]�j�j�+NR@@�G`-�!��؋�x�����s+'������o-�5V� j�x��~�xp�3���l��D�MS&��3M�3M�8?S9��-��(ʊFq^�%�Kϴݧ�6��F���ـ��0�Y��-˅�AC�0ż�� �A� ���׳Ȧ �����D�O!��I �zk�)<�7���zT%��n�s1��GPb���/.=)���P�q�SSuʕM��Oķ�@+fgM�NMl�����,�l���ڙOD��T�Nkӵj~��y�;�" F#�Ğ�8�V�"�Ф�G�b�q����-/D���5l(���9�kK 4) +��Ui�<mY8�ьg��;�koȏ��Y��оa�ԃ�&a«k�����IP�uA.ьE��,���L�E]� tM�D�\���J�4�\3�)@�ɸ�3�7E�S�"�#@�(�<l�m��4�ﵜ��u/D"3 ��i�C�yOz������zB��|��Pl�)�^�"Z/Mb_�v�%���~�퐦��_�C�u����냠�`�w0�F%1�-�AAXH<�K�����ɢÕQ�6ô&`� [5$�|"�y�OkZgP��3�k�L�-���G���0���%B���Og��&cOw�x������j�u'Q8N���'i(R,�I�Ҟ;�=b,�{AUr�::-��'i��@&�A\�K�K�0�%F�� +#z��N��'P�>$�Ϙz�Z���l +�h����d�ae$P�L�S3S��]�Jue$u��P���&ə�g�E��~v�>ĺ��Bi�=`�j���v��u�#f�cx'�kcSȂ�K�^c�JR�5�S�Jy�aB�~O��35��n�G\z�tm�X�5|n���O�>M?#�� +��(��T�`��?ؿ�5��NN؎�T!�Z�X�=ǝ +�b�ݏPUU���4�a�?���<AM�_�$�{{�-�0�����.�آi:tS���g(&�P�����d�k��x)�9��Q�@l����oQD�;�� H���y��Y�)(QS��xM�|�{�:���A���{��]� ͤ}����}P�m�r��]�%6�M~�='![Uש��µ�@�~���� lT�q4�o#��^������g�K��bǸ���nV�VV�`����&3��NT�Ip�w����'�q~Swϸ���E��sض�'V������bs#֕�礁��� +�w�Qa�rB+��6c��DT�.�(z�Du��v��$F�##����'Q���߁�'�s����0���ܻ �.�_���L���ۧ�zg��ρbf�r�Q�BC�~ȭ�B5ÊPQU�VI6K�ī�@�0�2!`�W�'9����)��,gu5/Hiv:�%�.�ZR�N����� Ώ��*y +��+�-�`�u�+d�RV�It6�̑{�זͪ�cM����ي6s+nZ��F�<kYC�`�j͕��u����<��#��I�a��� S�9��d�7���CC{xT�c��\�|"3T� +��z� ]���M :�m�@�'��{�tA@��|5��H�S�NLJ���&a�b ����8���M�e@���1�5e|M:�!���P�ޫp�p{�w�F�dv�{�c;�+Qv�Ru�k�Ff�ui��� +;�0�}7���i��j���B)#�0 d����'����\���\��"$Y dH@�}}� dz��R$�����E*s�,3!�C��� D��@��w������O���~�@k>�z��4ԞvFر���M����� ZA�����y�V� v�ܽG���E��2LG�iXM���v_,�=s��<�$��r��*���Yr: +�n ɔ&]�.�y�F��J���XV���W�l���c�lߜ8j��K]ս��DN�)м�M�6hq�?wp�"�bo�'�� �0����oJȊ2顥�Q��a��M�J�ý��^�`���JQc�XC�f���ԑ��.���$��<��(��PT��������N�Ȣ(ߐ�Q��q �q[=[Ý��L��hi�� +��)ý��@CjG�#Yl0�r�{o���Jϙ�5�l����;�����SqKx-v����v)�f�LD�Ǒ2�n��d�s��@DA�HΜ��P��+���j&� .d>��T=_)�&����J�2��$��S +�@�8�*�AF�Zň�e&17�xۏ���$_"�JhB��>Nrfqm1�M����):��o��aB��.��Q-`v@%f��O,���92��W7�$��2��%�k�W���-���i���Z�`1��[OG�="$��e���L�ׄ�~4;z�[���2:����c�㶶�q�Ѩ"]�߃,�6�Q��T�1 y���+L�P]�9�FAf��߲3�����P;�!��,�A>����F��*C��7{��<����]ϥ����������Q1�_&��4�98��;�lq�=?��>�8�;bL����̀�t p���u�SXPc�}�7��R��X�A�=�^D�i��4�K��#α���d������g���`쏒}/H� {w�0�Z������|�zk��A�JH/�EĚ������w���<��W톈u�1�|��]0�z岿�B�I�8P�k�#���j��W����w�ru_i�b�n5�����M��1� e��`��i:?Վh��U��8�HƑ�Vf@f�z�7V��+�ݽS��ʷ{^�I���!� +� GN�͇�(�d��6z�:��krw�M������D���>��������f�Z����}#���F��(�_���1��j3P��v�������"�0�ׁ����÷ )���,6�9R�'N�N�h㼨�XhM����KJ���[�#�*K�g��ͼ��5x`�DG8�����q����I} ��m� ���Y�%��:��=���3�Ҵ��շ��ȷ(�rOi)�h:9z"$��9�.���#�fF���LD���u�i�✖B�Z�O��>gSr�5����ٚ'�����pM�N�Ԩf��R��v.D�F��ZN��A���u�_-'���Y)��>�����ZA�(�?z� �-�+l��s��(3�aO�a�]��-�Lv��AŌ��1�Gĸ-"��aӡ�c�B2�!�A�+u�b����$+�~��U"X ""wKs��>��A�� V��lrP�q�f;[d���'2S<L���W��z��A#���9Os hl��_ eh� +��j�UD�z��f��g�K�������Hз�q͵}��æ��ڳ\͈��� +,F8IP���~�l]���L�Et� +��DMV�}F�P[v[��0����"���V��-&Ђ{�>2B�)�[j�����Bh������b#���ڠى��v�3Ǝ0LZ��+�oF��R!��EPU�V�B���:�@�8;z��ǻ܆�e�p¯A��V�i{w�tGP�93��#j� P��o��#ku����������,�ZG�'����R�0�i�����I'ƅT������z8z�b7!��JQ�wTʞ� N�D IA���}9`�F�5�$ +5AKx^W�d��[>����[|�F:�Y�OCGOwqҋ�^:t�黥�f�;$��0-(T�'Ǐ�xz��Ĵ{����ٻ&{�Ji���ϥ��NC���Ń�}�"�v��DPJ'bY'�)�1;B�w���� �ͦQ���ż�3v��8q��=O��q�d#��> ��Yk^ ��/`����`���<5D����}���9X��-��{_��:� F\���L�կ�x��-��Nu�� ����(Χ�1~��P_�ג��e��ϐxw��\�'�s����-�9�Ȭ�Ũf�S ����\:9���a[��u/���h�#����?)*��D¬�f���M�X\z�>~>��/��֯�Џ�#��� ��O��JR��:�n&���Z��O}?�� � ?8���|��q`h�7�]���:���L�v{��c���%�5L;_~�7�5탇 +�5G�Ow��0@�XN��z]�(�*l����vz|�ռ��[��p�ئ��H�u��1-|I��O�6��C*�>;�o��zC��=�A�� ���(6��]�~nx�>-D�wh!ڧ�S�N�a����D��`�l�LT1�<��6J86�Dh<�ҳB̑�9�#��VY��?�+]��T�%����A�S����Vl���EA�E�����T���bI��/�� AJ�ϊ��'j����Q�=�NEHN�2�v}��]��!I��N�k͂��cbsF[0���b��@�"�!�ܛT�����1ẖ?���រ{q�"B��=.�� +� �y�E��_������}�2[0+jA��i��k�4E�(�������;N$���гB��:��]N���3��ߞ��,6{/�)k���e +�O�i�2-i��C��[���N��1���p����!9;b�#���M�)^�=���5>��T��������l�jܧ\b��f,5]*�~G�:������� `�h����}-\���@���v�]ŊlDw�s!�T�(#a�K�#h�.��i�Q䥂HT�熙o�@z�*p"�ܓ\7���|y��L��BZ��>��4���]?�ޤ���Jr��yQ�F0���й��(��h�cDEѦ����4<�2X�\d��~`}�L�K@�����g!�_��a��LF> �6S2]��R /��0�vz{�B�K���-W`���$\m�tGM �5�g0���y�K|���ڽ�-kF+�G��w���)slwL.@J{� Ts� ��I}����q+��˥����E��&wځ;Wz�z4�Yk�����Z��%�]s��t �=���_��=H������@����`@C�0�ܩC�C;eC&Qp���s�y�rh >��栫��QGT� �Ihs��F�eY�Ľt���&�sX��W��T�AC�j�|�/XKz��`��~��.�Y�DC��6b�p}D�9�+U�7Ľ'�"~�cv*�w�� �����{D<���3�~s�q��h���j�8TPѳ��}E����ύ�a�5����Ѡ�rHv�fq���u�� �7��όܞ{��G��N�{qw���� +Zb�IH����QmUɯD�ԢNlI���[5y�I)�~s�uh���=^*N�JI�o�s$�_�Ñ�3S�$�Yܦ��ĕ�`�3G%%��Cu�}�-�@�P��ҋI�{�!-D�ɸ����[�i���&���8�b�����<����&�S�K'�H�2(D�KPQ�hX�m���W +������9��%?�S��h(Y��b������ 4�iM�������GiQ�������g��$�F� L#�G]_���/��Zh���Ej���h�&w��]wŭ����Z�I�����)kk����QL�3 ��Mj�v�<V�x�࣎,c�l�;��� +��g�gH�������;!5ʦ���l�缻8Q"��=��M��erSH�SU#�̝�Bq��e�<�ma ޢ(:u�>��3�Ďg/�6%*t�щ�I��5:�l90�����Q)XANC }۪��c��%���A�jX��\�%p�T��1�o�ӣ�Ɍ�R���\m�����B�b�ꢢ��^�ӈ�`�ED��2���@�m���~��s�R�+�����?R�罛���:N���C�O�g +?E9H��i��VW�Ns���a�Ǿg���@p'�[/�[� ��^�l���v��\a\w*j0GX�Peq�4I#���pČ�b {RaQ ��:�������2�ݛm�|����J��jbN�)��爒41��z<w��J��'K�<����<��w�0�˛��i8H�z"w�f��R�zN��� �"����)�^�fW�qcs�GO3���Ҝ0�R�Ηj�A�Ә�j��v�^��K�rw��˥N���a�i��)��^�� +!"#��h��E; P) ����2s��"5bg��i8��7���@n�hfK�b[��s8t��c m}��ÔB��v�'�b����ǣ�<7�~M����l��:���#��E�3�;1_���#�J�Da��6����5#�j��f<v�Wr��-�B��Y�G~aFD�ҟd�����^ S0V��+ƭ���K� �1�b0N�d�NU�Um+F%*-Թ}�eJ�M0�#��1��+�6`A~}���v@~�+�2w��������!����&�#����%�G��������v(n�N>����<s�L��Q��n�i9Ћ{�4�:�>;��>�>����t�h6��M!CG�� M�`;n*T��L�&v��h�t\�u����`I�����-'�ͮGoYϪ �����D��kL +^�D ���c���<)��j��@�P^G:9-<�諦?ND��{���Ͳ!h(�u����z;�'�ǘ�O;3��f �-������FJXx�a���u�sB������ H�x��C����عd?�o�.h ��bJ��r�-]`��/碃�V�ϓC��f�ޢ����͞;��)�My:�'�Ȍ�7�U�ۑ��U�&m7�*�V�*['�E�$�R�k�rwS�o���~0��U�ׁd�f,ؗ�=� aF�Bɘ����ǩ��ڛ�1-�]T��w=�v�$��·�@A+�H%R C�O�>� �o��r�������MDaB2p�d�ر^�k�\*<�e�-Idy�,��LK�nP����Y5v���еu-^��T��I +��0�l>�.�ZG����������_�6i_�-���sVf�Ll��J� gp=��Z�!I�XB�ۆ����� +�l;r��4�(q�-�VE�X�Ǘ�ŕ�a�zȮ�!GD0i�_$=L���֚zm�1�F[�z���>���gg���U���Т�g�-��x��7� }��H[ �a�sY��p�$�/�?� _F�F��w�b;�{)B�t���U��!b�b-BcB� �#K["k�E��̰�z���CQ����@�7}�E�����\S6[ :3�������S��TR�V,��! $�_4���L�� +�Q�J1,�T�(;s +�����E�O��������Jh��E_�4 +)z64�)��c��l��Aч-'�����L��Z�C�_N���#�o�~��b +�(J}س�wѐe(k �bϏS�R_��)�B5��� C���B��%�q!$0��#8��.# x�� �F�q.����]5p(�{�AzK:Vq�H��S�o�q���4�6�i�O0��M�NM�V��Y�|�D��S�j���M�>}���������Wvj,z��)��V�V��*����/�v�+�h+6���A��;)��W����ElZ8�Z��H�x*C�r�^h��' R�K1*g'���Lz@ x�@2�����<�k�M�I��}N���D�<����P/|��!��`;�n�C��~\ d�q�*�ɽ����t����5I��O���Xtw��ٴb�����ԝ��v����u��b��m����h'��c~'FC��*�1IMȶ�2�4,�9|��k۽o���L��c�%�5]_#r��iqU��ذ�������i%��} ᘴ��xa��H�v��+<��1'l�Xb���,�'Ag�\�!����# +p�A����<ẄV ������M�����]�>!L漉�#QCo��C�Ėk�Toj�"M�K��C͵f +�W�� /��ڣ�H.�Z gC,�t$̄vX�]�T��3�$��������s>/8o��5�z��A;7p}�l'i�K}�� %X�!q�V������oM>r5�!���D:O�7qt���a�g��^�j���v�B�*�����1X�Q-WɁe�Ǎ.@ԕ�q��Ý��n���y�=`P�K�@����w=�%������-�5d��$��<J��I�Po�(���6�hu��W�`������W����?�$9+Z�u����V%��GT�~����K���OT�l(�@*_����`h�P;x�6"�3��aD�#�����N4�;n�eǕH��(�x9C͛/ǟ�F�蜭��R[��S�INMg?a������P���k8I=\s�����Ԏ�"�i�萖p��p�� ����js�}T��V_VY ?!,/UY4��c�DQ��Q�@��O+���������fD�xl�BFI͊GÕAfIW���H]*p' v"F{^W�b�)'C��.ғ�+@���0L��:�7qĔ +��(��)�#m� ����s�x�k�F����`;���'��C��&��5��3�}���<�ƺF�rRsJ�T�+T��n��UNO��p;b�����n��+�y��֡���'�Fp� '�����"�p��������cJZ �|��� ��ͻy�{}��g��>^��1��q�V4�o55{�c5uߐ�e�����H�~��D +�{*��7��W8��et7 kYO��Z3gʦ�X�h���"��c}��+��Fv%R��M<�Z��O�jc#�vZ� �uTƨ�^�%�~��x(*���z��CH�U�����}�����P� �ӣ@V�*�&W+� +&vK�@���q�e��"1�ql�r���_g{(G�*JC��_��=�k^�� l�Ԧlߣ-`�Ҙ+��2 3���g�jQ�����g��[��У�l3��o��L��=�)ޛ�Ld��%��s"�����c��3��X�������vR�"V�X������pQv�����K�zZ��AD5V��)�������T�J�e�������r�Ň�����os�q�) �y�g�A���"y�Q�"��9EW��9�+��a@_"����������& f��%�R�`��k�9��>��� ��s��l�=>���RF]��gi9B8hs�����A +W>�`@�����,�X�/���ר"x���_jL�q��v)�%)�i���Σ�@�j]��i4��Q�ʛ#~�&7Z���������>���*$lr����^�1�g"��!ѡ��K�_'��G�n�.9��=&ԝ )����f�-�DV릲+htG�d��;l�z��L��X����v� 6�:�}Uf�+�h�gqPU�U��ISZS�NQ*�Ԕ0�R~*��y������&LS��@��.#�g�QK�M�� �. � ���`-R!��U��i_g������^qᗻ��5�Gus�Z=_m���7� aKNt�b��x'=���y({T�ax��S䝍�0� ė4���\$Ȟ��v;Κp?G!H�~U��M�0�j-G�OG��<B+t���T��&�E�=�IQ�Y�j�����G��2�b�_���7�=����ڗA�Jj��>ݙ8�b�����B�yGql��<���:)�ΫyD����P��������O[=� +�R�똬�>Y��j��E����0dwQ�DD& +_���V���9�<:(;)x~w^�}�yY��z%��E��#����x�`�r4$Jx�W9�%4��4ڽ��dVGMU�tOͻ��Z���S��d�ih5˸Pǭ�ǭs;� �}i�V�ె +IJ+��H8,�x���IF��Ԅ�/!-W���N�T��Wq�]�E@�|z�W@�K����! +H��k�5��;�ZדZ�(��!�^o��n�C�#�Cmcxx��u�l�TC����U��tiv�N'!��PJ��a�3���P�賖�T�xガ�*=Uc�MVN�"��}{˾�\uu��ƹ�B ��_V����_��cgn�*� i���Z�Y�)|0X�a:^=x,3'��i�~N����� .,x0I˪o�� Stё�=��I�uԱ�P�I�+ݒ|��S4�C�j���H��Ɵ�����S����~�p:��:�����E������:����f|v�����jQ���7��8���EX`0s�x���Ϳ"S,A��9J���4_v-��7������֬$� +{Бf^��S.Ň�AT��O�}<$��3��2K�JP5��p��6�,�I��KU�n��F������a��t9b�QM�q��|";��q��nhT-���1�<t3��SY#�$5~���<��`�� +w��`Ϛ�v��!�8j��b^^Bmk"����)�oKqd0�N�$l��_�Y$�KXnY����)�OE:��V�a��[��1�X��,�UI�H7ȳkLxc� �Y3;�=%:=�i�`Sa8��;�^��y��Lە�? ���=?q���/��YtuII�=��2%��Փ,#J���2�X�o0u=za�O�[���v�S����>�ǣ��kNН��aQ��=��W��ю���?��0��O�u:I�*v�;�A�Ն��['�8ƪ�48CW��������M��A�X���)��2��a�}e�D)OC����4Q�X�T�#�n!����)����5����v"��%���=���g�W��m��D�$O1ʵ�G�'��4َy���_!�-v_��{�1ӹ�z����g�\�[=�.��1��g%"�D����;�}\2蓶��UtD�,�"3�=tj/ٚ�Y�z-!�M�����۴5ɚ�#�'S0M~ރ�)�Q�G��a̘���n���z a�"1���FOP`K�[fc���,!�Q!� ��\��dj^Z�����Ll�c�*3�Q��"�����I1�Zr�CtXh�`�8���M@�+����?��3a�.#�v�b0���f����Q�Q�gj�}+�3B����0���ˋ`����5 w;�,ƈ3 +E��1�P�e����>~T���������އ$>C7;�z�luaS�<�X4L���裈r"z�c������z_�DdL�\ם<�X�CQ��t�z>�,^�]�x�K�Ѳ +ϙ�J/�C'5�#;ґ=D��,���@�Q�qL�d���{t�0�+�g�j���3K%k�:���Z*~U �,�*�<4�xU�����ɑߝ0 t-.{�5 %T����@��*P� +˃u���I�{�t�G�z���+�Ҳ�&�;T*7�(�WBZ��Su$��A +�x��֝�k$pn��~m�</�ܬ�^uG�T����%�:�{Nt9�6Q(�_iQ�[�\�h�2��ը��=�9|��wM���452��$4��HQ])@7[�i��^��TSe4y�;���+J��~�!���X]���>�gտ������㼪FT�څ�K�XN7.%'@�W�R8�m��lR~ѤmU�i萊��|#�C_DI3P�j + Ο�W����8G����������s/����2kU��6J�q����5��m��1Q2��^�}=���u���}&G��m�5�x>9L +ˁx���iKY*���|��?���~���Ȝ(��RF�0���(�]Z+2���e=u�B��;m����:셟0Q�µ=FIl,Q��6�nG1��;�;b�e=źv����M��2W��ƻ���GZ����֛����ѡꙞ0�Ln�{�rO��/�`��<\�*�&�+V��O1Ƚî���1q��<�P���ڴ�D����`�p��ES����N���F%���� {�ZC��C'�&4�S0��L~%�Gџf#�����zL��4?�`�����!`��80�?�.L�����\����*���&YX�hr���r��|~$���D�D���4��K:�?��Í�N��p�a��XBZd���K�ݟ�I�da6������L���z@a�����TC�x\��<�����Qcx�~<��#ݎT{������Q�+�-�����y��{��| w���bV���;�qZO����`��q,(�zW�oHכ����������aI��4*_g&�H=���:H� �S�"T��F�p'ޞ ,�/�{�g%��[Ȣ[��jƨ@�N����>^ +�6�jƥ@�r�ܸ�����bO)�cI5y����StY�k�]L_@h��^E������ +��4�4��d� <�=+�T{'���e'�����E+�.�2E���z�� ��<Y�1���*\��`�ÿCXr�Zl��� +���h!GN*�px���m`/Y�#?�<Z��b�/�㷝�&k ESxd_��� + +�ک��zގ�&T=c����@)�@����>�A�����;|RJK&�(�/��;���Q�j�*6����N+�+�2J��{����D/~S��?i8�fO�5��!�}z2��r��w�F����Ċ���<�]m9=�ɘc?�@���.nϖV�p\G�� ��ª-�� f(!�NI+-ѡ&s�{�D�^�# `7W���0�}����9��x{��o����������������B�<-V�Qq��Sy9 9��ƫ�(����ߊ~�R��:����=V=�c���!�Σ�r�1P9|1T�Ӂ��?z'ڌV���_���#R�3�3&���#a��`zMP��'���������cx�}�����n�E(�[=<+�}�L��u�#u�ey4r��_�|�GN�橄 ڿ�+]�J���/V.t��=�8\gM0+z�v$�vrs��9hC~��wT��\��4�����o ��wW�\�,o"�x��c(2G��T|���Î*�K鑻��j��/:��|�� [���@����#h%������{�1}��0x~���k�i "e�'K$YR�P�I�x�i���M27S;�.�"�3~Y�0�h��N�?��БP�gS5���w��<����0*pl�Z� a�����^�P�&}����cFx�i;��P���A,C@ +5Q�����F�����ьc�5�SY�������V;H3��ހ0s�|�}T �D�S��G�(�aٝkI�Ϣ30p~�`F��7L�����]�a=�nP���7�"�����0��H"�>#<�Q �Qr.��� J� �$H�|�Z��~X���t ��|n�L�4���jF}���\�t�U�ޟ<,�`@E��2���W�렡�_,*���Vr����g�8��W�s24��| ��Dw���B� �����J�6��ND�����ȊS7ͳ��e��xoG�� +>�u����Q��)�x�����A�� Q��{!�U��sd�)<�iE�WJ@��0�??��"���&ߣ�]���\S�*'ƹ���x2�}*�>EZI���N�A �e�NxZ��:�c5��n����?|�ó����U����I �v���g*W<t'ޛ�����wd�$ jq>�(��F]��������j����` ��L�"���X��k1��j1e�?C�'=��e�\�zܽ&�P�fWA�� �Q�JB���f��#H�^<ag^��;^%��G퇼T�y$�08wv)�8�o�1�R������a���N}h�j0@�3]q�>֝ב"@}��G�!���W�E�wy�`�Ȅ?!j�� +`��r�LJ�)t��(�g��&_���Q�@؈g��_�,�ٖ�6��C.��H��UCG�;I!�&G�\�s��:Jz��t�gq���Uˋg(���3*�.Sהi�d�`��H���,��.�Ù�#z(���σ\�zq��� ��3�1�0����c ���Ă�TjD�r�S>a"�8���}4��z(M���/��Tc��N����v��2��pV��}�c��kZ����o���{�P���kh\9�ۇFj��5֍�h��Rߒ���tQ�ϿMmg��-,����7*ƤD]-m_w_���y]�fdh[L�FA���x��D�'Z�#��\\ n��t�c�S���j�EVc���CL)��_��cQJ,G��Ȍ� +�����he�B�jy~��W�O��T&�ʸU�:�9ћ�(ȍ���՜�B�ieP4��ߝ�]�6�T=0��Rs + +���L�=�z�Nu�|�@E�u���2�6�N�T����v�i;Σ �õ��%��Y���<!��<y����v�%1�8-`�F4�J�*�� �m)��Kg��Q�P)���҆ +�Hш�Dm��+�Ͱ�E������U��c�?��͵b�{"�槓�ۈ(�����JD��{��z�|]Z���\9�%�"�D�d�<����쯙ޣѫbR�21-S����D���#��bI���~ z��P������o�FF)S����j7vbT�#@�W�:4Q +g2f[�L��>w�?"��wՏ�(�V�����b�P���L�[-M?��}�2�a�Y�>�h��Z'������䛖\K��fh�~0��9�F(�m�DA�v�~D��;��s��(W{��|U3#�֙H��E�7����+�B_���w��+�яެ�KA��^\�B�A���HЬ�3E����:��aԼ�9S��%�ȥ2���2�Ļ�Fw�^��ǡ�7��N���c���͌wN~�� +s���G��m+�˯�#�:(�R@$�M�m�@3���L%���{V��`{����>�X� -l�X�<�����>�K2�3��:�'�O��Y�9Z]�z�Gh,Ўv���5܅y=g� G���@~ꨆ��`�����*.�]��r�f�o��������2� v�8�kGQZU��;��!����L�ZDWv��g�Y�e�8*����}%h��>Fa_�DʦE�����% +C=��k�r�#B�21�h+n��/r�[�/C�Qw��O.�@9��U�r�6�};ڊoE?��K�/bW�G}�f�K='�5P9�a,�D�#�QJ��(u�TÍn����6��;�}Z��k@ɱ�^�Ux��}�r[�r�:�-Υ+?G���U>��������B|�����[]��0>��m����H>�a��##z;�s5�@ ��D$kwO6�;�} ]�i��pt�w�kdl*�}��\�-l��h�i���u(��Q��5�g�OK��5ˮ�x8e���A0�o��(} +P^^�b��B��7��<�f��F&rlG�wՙ�@��J��ܠ�qQE5y��QPK3�[�"u$�2���b���쯄.���n��^@�QO��/<דE�e���ꪵ�䃋[A&����w�_���{�d#�CŸxw}d��S�h#�j����~6��d#�_�}��u���tdi����A���k��1���3L�?���W����E�t�D�}�\�)�,t��.�x���_~�x�=ԊO�����X'MGT�oi q�(�����D��X\2F�Gx���ߣ4��9V���Lko��z#f"d�k���<|��t�܊'�c�[t�{�@�V�Y�^μ3+}�ޱO�%�c^�XN?�aLn����,�6Es�K'����f0���{��e��"�X��?�&<z+6C�5d����M�x��{��`E�����H[��Cל�w��f7����ev�'�Tu�C�z�h����Vw� SM����>�+�-#U9�F�nG�{=�l� v�z^lt�3�}�b5+\q�YHf��w��Q��k�L!�<�����_e����V�b4Y�-h���H���rGD��(�������Qz����Eki�I�#�o��T��I�0�;V���'�]14�}�G�\�v�#�G�Bѡ�U�8 +@���Gu���H���M���Uak��?�seBÅ�+?��\,�?�����O�☐���;�; �b{�tt�fX�& ������];�G��Nq�,���q�>�z��em�-b���i�)��)��}���������{�Q"ۙ�]���H�."]�/�KU��j?D��������p�W�����[�J�5��Ep);�Ü�-��݃��z��%��"kCj-v5�{A���s�P]mI'mr���A�-����nG-����zߪ�㈚S��%S�t0RDF�9�Jp�ec��UZQ������v��&O���=�bl��-�;���i���O(]^�O����ăyeE��(��^�. +��PgL�g�s��(m��~ �_@̶��"V�;=f�����#2k�����G��?9����W:�Jb�������R'�6V���5-䨏=�u +�]�o�#V���<k~��_d��4B�Y�# 8g��2va������T�>�$ �ZΤ/��"j=����p�?��<������G S4�9�3������,=$cnI�'Jy���`�Q1�:�@(�!�)�'��m���n/�^:K�5��q�C����ɸ�+�^�2e5�͵��6�gğ�)�n�����q�x����+)b�@��������A�m�'�Ow��>k�r�� +�|��@��L�����,����_5��Jj��ԗj� �T{9���h����g�[�Ҵ�=9���V�߾L?��z�倏ƚ��w����[�����C�6S����lͳ3�(���,�E��c0HR��>�����!H�����&��'b%b��D+Bc� �&�<_M�Ԕ�# �:4�;��+},�Q�^�wJ����:�г��_��cl���*�PRݙ��b UHi2�/�`���9��|�#��4iR&0�<AyE��z�!�{��>����~����}vlU�g�>H;�� \e����)��݇°��M�"��QSH�p>�+��qB|��c�����;�F�����ŏ�"���7���߹~���\V�"��K�d��m}b�9�Q�b�2��?6yQ�����t�=�4�'�������|*K9���0�-)��#����]����}%2�wr����<�q1��猸j;������\�� +�q�j9��d%Yh�)^( U��yRO��!�`Z��$?�7�1�!�ll�\���s"1i-;4]�)�8j&��xgz����j��aǨ�\}�8C#sۆ�r�T㖴l<��amC��N��xUֱ�2@��ːB�> �(Y� �;r��?�#�*��G�Jt#����}�E�Hd5yC�/���#�G^��bӢ억�SS`ofD���|�Qj�@�Ҫ�(�3�ASB��7���fA�YǍ�A%Gj�_�-���,�:���Ӓ�J*+d��MڪU] h�ˁ�ICk�%�2���圿��d�,�g�kO�f�!�lg���b�FI_��q��UW#�f�kX�q(�]�{Xc���e��HG��#5�,����i�Ȟ`�&z��"���J_N�w�8@����V�]70X�������")05�j�orWH�T<�ڱ����3|�ԃ��Q1�Y?��Ɲ�Z1bL�î��#(TR�"��G�z��ܗ��e��7z�V��yc�p������?�jD����{+� &��Yˌ�Ȓ����V>4Y���=x&���h��X*ɻj��6Q�!>��� 3���康��* +�%�ķ�uhM�#��\����Ag�&�������}�9�4G�~I���ʄ��e���#��s�r�:ѭ{�u�tQٴ�&鉔��b0wu�G�gd>��F��i���t��GqJ8�]�ۆ��Ճ���1�:p��e�@�4u�o��qD���a�Wj�(����(mj�JK������&�/�2u�x����Pu�P8֫�6�Sp����b�x��9z0���g"�? �����D�;�r���+���~�N��Y�߸_)���G�����A&����Qա��̀��BY慴�{hU���ƍ�F'��_U����C�*��?��4�5���4��j:��8�՚n��( �7������ ����(��(�}���� r(���4 �A�Z� ��|��f��C7� +���a�㡢�~�3�k��K_<��qೂ]������^f#ś���A��ʹЊZ���dGB��>R|x\40���㚙���/��D| qT��;#�֍�8zӨ��|���G�S�z��T�����eK��saz��jS��#VX��5�~��`�z��$A +��]��3����Bt�I�8�p�j�@Sm���:t�*�ψ�w�P�=�ǁ��eu��vj�PXa%�6 +w:�!�����E>%���*�+��5�c�'�o>.�>�����-�Ǟ�t0r��8̝�cH�q��ƨ�E�S9�Yz�vr\���1��V�%���=Q�������R ���8��#풮�_/��������Z�W���?կ��D�Q��C���/���J�_�EB�:m���Y ��(�4�N�0d���k���)Q*� ��yt�"��^zRhe�S���h$�',[{��9�V���d���5��ǧ��6Շ"�� ��_����WG�N+x�K��l�=�&�^�3���\�$�~��{��Q<fF�g���Bħ�hǧ�]�2`v'����3���a�;�u�c�`��^B�0wh�J9�Ӂ(y���X���%05���;��'j�Q��\�� -�ji� �a������x���i�e�2i�/����EՑ�؇)���vŃ�e�f�U���3?�;��:�K��ӏ����I� +M����r��.�V�He��T>w����G�u+�{��9���1uPG��+aa����۹���8f��|?jX�����[$�{�,�E0�/U���D���5#���n�u�U����_���}�wyb��`k�I(�54Q��R{Q +� �ʫ��z:Ȃ���������4��ɦ<K��R�P.����~�B��݀�GU�= +���ڕԘi�;� +������/�j|}Ȇ�^}�0�u�I�p �&�ڋ�^5)�I��1�{Tyf>p������iMN�.�]@ +/�ω��P<���ػe��?��k����������.L������������_�w�����?}����?����߿������o����o��������������?�����������������������_sҟ�����������?��>�_\��u����S�����{�K�����h�7Z֏W ��<����N�8Dڝ���QU�5�`�u��?��A�l�RM���y���"^�G 1Z���o����*e�#��;����K8��;�N"_�Լ��6��`�j�&���1��E�}˙�����˙�<��G�u��2��Υʮ}����;�2�D����u'����h��6Q�4�t�����(�R����PlW4?vȾ�z<��T2v{�Z��v� �~dtTx�a��=U'Lv�PC8u�w���چ����Vz?( =#(��� �wpr� +R�.��{����m�n����0��R[:rZ��S����A;PȿQ<y<m5�'�M����hZ���Wh7`5ȿK���@��(���l�"��`t��0��(����0r�X��˯p���\*W���.����9��Ԭ�V�4�.�kUc����m��a��[���]`�2�����t��XU��� ��0D��H�N����\��/��߃��/k\Dr�ay��f?�Op1v�J�����u~~� ��NS��Փ}�ٷx��f/N�q�H�~�^wU?�?1�K�k�,5���L�=�;��iϢY�����>��%M�k|���tu��Ce�cxRE"�ߦ;�&��y�$b@ +(��ķs�!� ����I�s8(�'�4飄�A��T���1tƾ���M>���p-���W��?(�)���]宽�`XX���C�0��τ$6�����8RPЫf��]���1��!���#��!+~�xd�-�6q���������q���W�E��a��eB�`P�W�B=��pj��~#�I� ����(2_�H���� ����R����]�Gh����,G�o��G��e����f"�M���҂�9����0� ����0�qT3��u���͗_�kD��EhX=�f�u$�����9ǣ\x[�.�%F�����Td��fwۂ���$c������f�1��>��!���v�ԧQ����M<���<�$O�|������2��*�ƴ��u3� +�;3T���u��b�Z(�k�dQZ �˻D�ހ6=(#>�\_{���g�"�^��چ�`� +xf@-�����f�sS�����r|%1��(�ݠ����m�ȅ?݄�ry�[#b��5B�� ����@��<} +�SZ��ГU����D݉��*�w�հ��;&C,�If��i�ꔐ-�KL7{�q��G��ƨ�m�>�.�X{D#/}L)��+Bݭy(�L�GaՎgOa�VR����A�N���JjX�Ί~B�\����Q�~�C�UI�u��M�����8��̛hO���xz~DK�s��K(a�^O����+���EV�U��KI��- a�oZ�0L���X�R�!��?zE�tި�� �~�mT���wF���ߝ(�}���uևu?ƕ��Z�����asw&�v �Uä��/./�s&b��ϻͶ P34O���2��ODWPm_���a��k�H�}zU+C��]X��т��qQ^�ߪ�.1���<.��������R��� +�[D�"xp���.��iM�#}���"t�=�EDٯ�d��䑧i���^7/�����@>��B +���E���J@�]��ZL����N��g��Q�j�"��<>�_�r��e�I����L@�����T����<hi"CG� +���d�BY�������h���t�7_aXS����k����r�����i��"x���|g^���o3�oi�k������ff˱}�}D���]�jK��{�==��h?裷�O�=���ni��}���\u�~�噙��h�v�nq��g@����gU�Co��iE�$Z�%�p��b8hL�^��3��t'E�f D(�h@�1�+2�?��sp���?=-�ꠧKD�:�=�~9�5*.��2��8PAlV�����x;��F4y>���@n��H{�z�b���V,'��ڢ"�Ą�[�"r,{M�!�9��l8o����h ? +P=^0�E|�J +C�1XvA�w܋q��="�U=��]l��qh�����O��>��"Аe?%���Ct9�q�G�y�o�I,���:��]��A-�����*�h����?��C�oe�??��ɝ\NLF)}��՝�lk!��G"I��9k �����!����J�髴� 3$�/�����r�_t�13����`���uQэ/g��~�X����N�0*e���� ++�uI��X�a��|!�w��%����(ת^Ӯ&u��. ��|<o�+C�ۀ�%S�;���ؼ.9n��3-.9]ې<��c���ΈK�;�{.��Cܳ~*sfk3�9�ΖZ^>ĺN�|X��o�ae���M��Բ�?N��D�C];�S����J3�{��C�%${�%,�'naQ�\��G� J�v���}Kh:$lN�An#.J�ބtGŀt�)c�/�2�ܕ�cO�&��*��3͞��b���$A�b��Ξϛ\QN�l���^� +X�է"����� + ���]�r��M� A�똟���B�i:��tR^���Q^+�6W]O0m��2����n��IЊy����c61���8�a_ڷs@�oN���5_rS��?F�֨������C�p�dB�|z�X,�A�M���;]�r�k��<�5�"j��eW�.36����5������~�Ӯ�χ�>�:%�߅e�������ґ���;�g��亾~�����K�"�AC�r����n�ۨ5OƷ��o���r�vz�Q��p�^T�ح� +�r��Hö&�Lr��������i_"!��J#Ni���gZ�0���ma���K�jJ9��d퇈=���)P��8���#C�bQ��P�n�g�_½���/b�R~⥌�L̏��FM��#rm����;�M���Տ���W2���+'x�|�?�E�wyQ~�`T[$>��w��=J���!�Ns��y8�����G]��ψ�y�6Rh���_g�MbGP�G3��k�Ż>`���^�A��+�Yp�RD�Q�r^�Cˆ��K�Gm�O��Z��̾x"�I��C�d�ڕ���9�,��-�)!u�vz Z�FWbo���aFJIZ�7J�T"���;v ܳ�-��ƈ2��Q�R0KE|V�<o:>�N�gD~�@��昳$I�O3)����9*�ڝ������� +l8��cq��B'A��Q�؍�d����gC�ӥ>����<���?�r�ݭ�j'�CX�_�2C9g����f���zP_�Ѫ�t����A�d)�@h�� R?#�w4-BD|�h�_k/D����R��?[bɠ� j����Q+>Hꖣ���A�ȩ��<�}�Y�����i��{Dn٭� 0T�"?�C�r)���j?��8�ٓ<� +V��I�e~]%i_ޅ�>��V�lW�a<����f�ʩ$�R�ļs�j���=g��Jb����&�l��q�����N�n|��{�1�<�Qu��& ���^�¢�hz��)� �n!���BP4�H1%\��y~F$�(�BM�s}ݠ$��N�8i��Y~��� H�1�/�P�m���YI��[V +f@� ��*�/;�_�"�x�1�o�8�'�<L�g�m�y��a� s�"���'�}h�v���ꡋ/�� � +r�U��-�1����ү�S���)�4���#���$X�@��ӵë��:�W�Q��l@<�ٸ{~�'�1�<O�G���q��c���0N�Y�Y�S��uM����C;y�gf�_���J�ic,De �ׂK�5�M����c�i'��&�8nz��h;�z�s��e��7�4Z�O�z�x�{�ź���~�i��Xn|?�52�� �EBj�}K���7��QQ�����ǹ%��r)�[��WŻR�I�s#B#���Ybc�x�L�z� ��N�G6��s5� +��\H�ҍ��⼡�7��sMܠd�1�>�"UA��8`��G�Y�B�s�}���_��ͤ�������B_@[�S���/�沙P�f��έ�]za5[�>�TP��s�e$�q�J���F���!"��:�&��"��5M7I8���لB1�D�a[�E:剅�s�"s������H�KE�i���8E�Q���|�C���/H��q��`g���7H�N���:0���G]J7���Q�o�i͙�u5�US�Y�ǝ�8b���CI^'��/P�}�#E�^=2��?�D�B&�$h�9��o�a5E���Sv3��D�jw���1����"3b�+Ϭm +�M��G������[SM�R�j�R��`�O��gj�i�Og����P|�`M�� +�]����y~��"�#g���*�,�n?��!g�H�� i�۸e?���=5��i���4�=#n����:')Ղ��:�ǀ6 +*ϱ�g(��{��xe���L�>�D��Qb����tqD����#٥�{6"���s��/l��*��Hc^�l��1����?�E:1�Ie|��t܆v�O9�P�+ ��<"��ri���|�~P�6��v���C�B��z4S �Y��-u����k�A�}�H�(C ���b��O�1x�*sn4u/�Qqq��wz����9�<j�E���톒��/�"�y��b*�̞�� +�[e��k�u�<8����Lp�8�P�&T(����<Ѳ���T��@U{ǡȕ�ڪs�|�W89�����p��B��y?�S��Nv�����u\e�hHG��ae8��ǿ�5�)�}��*�/ ��?��Z4�~�C�g8N��e�Z�/�I����~����;bo!�a}^�2�E���*�=�B*����7�߽]���J������ĿL��(杮ȣ1�չ��d^<�'��]�L��۱Z���R�ߴf���h"�$�!N�a���5Ŕ���Nz��ƨ4��Zi<��Mqۂ�e,k�1c��0��_Ձ-�����֞/{�(w��$�([CS`?��߽e���.5��x,�i��V�9�<���?#��|K�>�u<YCsx)ʰ8�S�=������`�>�(A��lyLW��u.��,���ҥ�u!�Ͻ�Pѷ�?���[~�DA=T� +�ʰ��N33vyPJGX�ÊĒ��z(2ࠖH/f��4ĕ�@2i���mS�v=��Ŭv�u)"��"���T3�z��r8 +�P��|����i� +��<��s!�fM��!`����;"*�9����_gr���Y $�I#%+�̍�����(������c[x����z�O��� @�D /�d�-f��v��.y9wa��i5n0���gȚD��ݯ��_D�T�?t�����5I�A��늒,k� +>�����:��p��c�T��/B��8��}�@��A��hM�hM +Ղ��7��@��8�빀8Q���c���@Z��ܔa�~d[n�/����K?�ʲ������ŏ��s�{n���MT�Y�O]^!2�Q)�,술AK�J�p'\��9���3��4Bg�E�v�:SV�3zS�>Î�ʹb���lU2�1��P�@�V -c>+��f�b$�"��wo���o��Z��gy�I�H@�`�0�C�#�:w���|R"w�H�[�H�?�6^�@��*�DP�~x�i��8Z�:o%��e��w�)�~�bv�V<��q�.;��0o�����(��\H8`pkjZ��4�y��5j�0��!�+MzRT��[�1�`g��2"9�1�d '�# MI�)��J���D���~���:в*x���f���,�J��l`�<���_�o�n}�LQOl ���\$��}-;�"���/�x%��*���)m�0�x�iM=�����P�1s�>�s{l� v)GE\� �ܴ����(���!�x2��e��DE��K!K�ͦ���m��K���_B��*�hx��`J�]|��"Nz3g����~�C +��1��L%�@Y��vea�po�`}����!��^}?̴����� ����8;� ��|�S�>@U?w +�d��JF���G�y�uzp;*x��h�}����z�,��%3s`6��ݾQUo�,��x�����ψ!^�ukoL��~D��ErO�g��|X�M+'�MV��a�P�]`���B+t�~^��м�T���h1��|���#>��t��Gao/�a��rQ�5t0C$���H�|���`�L�Z2�%�����ӅӤ�G���Z`^h�6� +Q��r��j̱ׄɞg}ސ���h������ 0,68ˣ�3y^�~+y@��:A&?��UD�+� 4U��g�2�D�xG�Jj�Q~�������)�J'��CP������bG�+��·�81������3�\ԯn��yE7�>�� 3�:g$����k�Y�D4x�UO9ӻ�Q7���H��$䠶��!��J������'��c�AV�&*nY�s|\x��T��z���iH{�K3�~��Æ��*R5ǰ����J +�� oa��b5�$ZG1Hc�0Fc�Ds����],M?�K���`�J���t4d]�� +0?fny���e*ctBw����d����������E?%{Pe��V"���J��HW g(r���峑��O�Jx�uB~|0�ٕ�L�<����M��D��Q��l���*��Ч��J�Ji~��@mk�AT�|t���>��y�JF�X�2��f��H�9ҏ*��0�G|gE%�I*�cS��;���;wD�P`㱆8"%X�� ��ʒD)Qj��&��ƪJ\~��>(C��ʸ����^�7s3�:j�F���e�i���p�'b��>H �T|S�D�����Ĩ�Ⱥ���v�w�}�ۮq�E����/� Tʎ�x�}0:�h]ɻ�ZʾX��3(h��4�3�%�u�I\]0��1�Qo)�R��.�<��cx��I����h~d#�`SA��֍�CΫe>��م�*��s��ׄZ�4���i$��5��~N&���a]ê�����3�b~W�����?0�b*�x;�V_Psq$ +\�QK��E 4��B��0�1��������<Pޖ3��?����� bu�Q�b�:s�>"&@�"t��Cd��[՜p85���u=��R�5.��b[�6�.�<<��F��Jx&[`������Iį��f�d~gt��G�J�0�ߝQMd�V��j��Rt�잟 �Z�w|�W��/��5��8�ܔ�(Lݙ7L�5�'�W{��D"��DŽG��$Nз��=���$��1P�ې��n�x�Y/y��� R�U����}�4r �E����������:�����r�Of�Γ@s��;��{�b]��P��$ � ?�ҵ{��� ���C(��s!z׃�0*/����fN�݇X/��Y�-�rIY�r���ve;�J$Jz:���zj��W��M����6���v�NZ�j����7 + ]�x����ƛ�@V6�)_�҈'��24C�m��؊�2t�!��w�z�����k[�����uB��:M~U {�M��W�ӆ��>���>Y���L����&jo��������}�{�,�:�&�(��(z�$n��)�|��h����e:c��z����돸��w2 +���!=��������滎��h�LD$��뀨U�ef�~�(���oӊW^����(A<Vl��\��G�J�y�iEn\?2JW�����L�8��T�1�Z#��\ʣ� �K�4��G%��L��,��Z���Ϊ �� O��|fi�(�ޢ��H�TC���㥫����#��aK�yD���fD���W���B +�D`|�'Ŝ��d����x2��Q"� @�7����X���Ƌ��)p�#ݩ��E�����1��':���['�>�VEi�ޥԼJԄ8:�)�j���6�{��t�p��*� +��S��D��A���:�HW@1v������N�����y��n@Lg +I�a��j���b��eT��w� +��9j�U�R �I2v��J.�PDŽ��]��c����|��b��+�P�ıI�{$����@8}����"����t����(�u�U���;&է1]�(��ػ���`2�8,�8L���%�P�c��4¼��4"����q/kIl���( �r��O�a�~���5#�3�P��v6E@e�:eA��r��n#�B��z��J��z��Ƽ��ys"X/�x�U�}� Czy(�{�h���ߧm�Ҷ7�������юO�q����5��il��� ݮ��/Ѩ���e�8�t�j�n+hq��LɪV"���;�W�Fܝ��^Mo��5�����>XT���h29�@"��P?��v���i�� <�=)#.�G����F�kߨ?�:W¹�� _Bz,OyN�*���i�;�PQrS�E�Tl�� z�o��Цa��P�[iʀ=�.E��Po�f�ϣº�����Y����<v�|�S`s��e>�c �H+U�� +��G��bQ��V��Q�fT��a���sV~*����"X �ߵ�Q��5#Ї�_ �F�}��^v��S��\Sʼn0�K���^���̝�ӳ?vW.LT[�3�"�7>�����,�}1.���q�VR�e���@����x%��b �"g��!W����A�U���.����G�#mM���2�k�/�X椗i���hE���sOs�g9��[5�����D����.-���<�v�L;�eNp��l�ԥt��d�|U-�^�MZ�x��X�������B�]�-���Q�7�Ō�I�*Cp+Ǒ�vz��/�n��� +��.!��`��#w�1�3��2�FKv�U�seɁw\���Oy��j�E��Aq�H.x��.���K��ɮ� +���"��;Ԓ�#�oQ"�I����T����_U�}@�X��<��ͮe�q�d�e������]$W&AA#�ٝ��D 38: +�5��S��fYS1!��w��o�k~��&R����< q��W���<i�K���'�%*��/���f��`�ҒqR8���L�e�G'%Q@m��1��Hu�)j�܇d�|�c����#x~�i�C_�_u<��&��>W��V˙L��������;EBua2A:ͣ�q����9O��?�e $T� +���~#��������0�rD;����l���AD�*��,>bۨ��*�`{<���c�#���LYI�#��ͼ�ee�z�<��E��Y��Ԣ��O%@��ӎv�J��/$�(�w��_�Y��B&8d|^d��p��>L�c`��>���.+H�%�-5Ȑ~��ȹ�Z}��mPIy�ۓ�ͫi�er�S;��� >C�_��+d-�_ΐL'MA�J3{�l�jG�أ������L<��(y��a�'�Y��8�[��]@w��SJ��^�p�g!���� <Z%4T��B!h,b"ױlc,:$t��� �̓Yw�7ק'>������g�7Q�l��3G�6F����b�yb#F*��b�[x�Q*C�ڽ�ғo���{p����HiqYU���U ��?�X 04ֳ������.�������+�O�H ���N����.�g?��8+�����ݖ&�é)($Y��=J- +�b�:��w���woS���k��Dk~� {�|�s +����M����Tx����_hx�� �?��t@��F��9gꤢ�G+v�Qܒ�F��ux���,_#����,iN���ߺ�F=N�F�<�z�b��*���]�;\�X��5�e�Ȧ���[(���w��f�i-9\�M@V��'^��bT��?GK��m��4�Q|pG�o%��!�_f�����OG��%4u�w�Q�aY�ȧ���_�Qo�M43�}V��m:�qʷ>&=>Ĉ�RD!lvG]�,��Mz�������n� endstream endobj 41 0 obj <</Length 65536>>stream +_/��x�����s� +��+b�(��d�ʻ��Y�� +�5���1tx5�+�w����|���<�O@�Ԏ��^�y��6���E?���1����4s�!���|5+W���b4-�a�U~�x�˓�Q�S��v1�*�iYg�쏾D�9����Fw����si� ˶��̧��V�4i��� ��u8���X��v_�[��;p63:R�@ݢ�9�/�u�@�}�X��&����%4�.x.Q;�bWLύ��,���|EC>'�R�9jv�vt'�鴯3 e�Qݦ#�N�y�_;�PU5j[b����p� ���:/��r��^߫(�wň�W�x�69 +�`�F��+Z��Hv �rJЩh�|�+���d�|[�� ��GU�:���H �k�� ���<w�P�V$�.v�7���@aU=Xl��С� O����ʓ�hop��� +��w��SC�>}������>�C=��0�4�x�/-���E=�f �jD�fw 8�����6#���; +�k���P*�?���J>ע��V� -�˧�of�1�B���u"�ٜ��#<�ɾ��{9 y�[� v|�9#��8�����Dz�&��?P֎��N8�$�b���V�UF� ;"�E����0X#�������kŃ�|��Ӟ���/����M0|���߇~����Z�� Wx�<2WԜ���ϔ�n�/�����݇�ʩ��YC�NƄ��`�u ��zO�6_�g���tZl���z6��iC�y��Lg��Ӄ���k�]�Q8�y����C�����I��(�*8>����+���%�q+d�+䙩� +��}"�6��gxK��J��mp���m(P�7�����5�H9Ƚ���˰n��-}��k�����:lutL���q!ֶ~��<=?�:�h�U+z�;��g@G6�Xy�;�����hǯSa���.�����c���0�aב�6b���u&�(4����+�C�u&�.V .o�$�L`�F�A[Ѷ8VQ�fr1r)�҇��D�\,FF�y�?��h�s�"��=�&� +��~4Pet�P��k��,eE)DCΉ +E�x<����`��9�v(}3Fט��H�R�����S� +�mzWLL��H���]��D"������k� F���&�F�.��e��]�����ܒ��y��S<z��"�`a�M���w��ח���E�r��q����;Ud�����yS^��$@���yT���?5Fz���,��!�֦�'�.��b��WWʻ;������W^l�ޗ~�O�����/���7Wp���#-tɶ������d�c��ٻj�Y�@&�iCI X�nwK��:03��v�����<괍�� ܹoN·�+j 쓃�� j�G�KP)l~�e�دh�iJ4��RB�t�P3>,�I�+�V|PD��?c��?��?#���p����)ʡ� ��FnL=�8�� +eI�i��q'�_���bq�@�1 +��7�'Q���V��$�RC�����ۛ>p]ԜS��[����� +�@]�2��LW4���h�ȡ�##����W.E�c� U���y��P��آ����dޠ�q�&h4�0b�4����Q!��nC�Ef�)25e%c�wņ�q��%�X��d��\��g@y�;lJd�"կ<���-�'J�/�ء�F���H?����La��t���\���Zy��(�D�v(�Ӷ:L��P�����?8�U�rw��Ί���1�����-ee�r�����u����]���uL��j�T�BR�79�Ȩ~���ɀ(]�Y��������<�OZ��Vi���^/���������k�< +������L�_��Q.�oY/�ž{Fk�V(_B֗C������9��h���{��V��L�A�Ҁ�a�"!@h2�9QwµQ^EΫGt��8�t��ݺ�a��|��;���0��J.�CP�3���$�s���[�Q3�)��O���q��gh���(�6|3���o&�.���'7� �y�f�%��^-y&U��CB6h�ky��V��pZ�O!z��}�*~��q�I���6`�C�����l�,?8��T�8y7������]G���J�m��ҧuB4HT���w���Zj����jðN�]�i,V�ln��~m��xը�G�b�!�,,}�����*�v��`��pX�By��Xb4���u�X�M�~�ɂ�f���a�̷,RW�����k ���� ��(�Rs��ρ� 務�b��ʏ�&�T6t:(���3T�U���Q�����S��:� +�g5,�-6����=� +�\TQ%B���G�L�Fs�C���-��4�c.Z����tq���D�$Z6��1�[�q�D�Sn)J$������4� �����@������}��-� ��H��ä���!_�H����M7F�s�����kO+S��ꕌ��)d/�ȳ��&�VZ+"��+GM��6tƻ���mHI��~�F��f�r������=�氓�v��P�_w�D�C��7��ЍR;�(�j\���j�>��@p�`�P0�w�W��ak�r�`�J/Q���KW�`/�T� 5�o��k�4���I�5P���Y�EЙ�$ե/�<���!���(��&��RJ�.���$=����!#R4$ ~���:�����i�%P�!��|דUz�PR����yה~F遺��C���e䐪otaG�;ǢsFs|"�\c����F���9��-������z,KޅJKD�-� +K| U��l�[��Z��Ǯ���O�����8�+ +�btk ���^���n��[=�\���̉��̼~3� #�`�:���Lk��}�K��8@�������⓵�|�K�v[��d �ǗL�LU��c�OTq�1�������4��˖;N���!�ī�fq��D�u��G��g�u27_�dO��]�2@6�k��j����I�r������������R����@]�T��r�������S��w�ȁ��� �,H5-V�tqno �ԋ|_��a���a�����Υ�~�v� "0���Mq�l��LxiW��p�<* b��U��u�<X�.���*,7;s�n?C�ĥ/�� ���_G��)����.:�@��|`�Z��� ����0�J�0�R��_+=?c��W!���u�v�v3���������r�=��>�ש�Б�_]x�=���3F`�Lv�&{%�tI9hNڑ�)���Tm $��O�0�{�D�Ä�B�u��D�,T�KqlyVk2[��-.�`-u@ه*[�~qC���w�u]λ����Q�0v��!\�:��p +Y)��v[��J�7���8K�������Ҥ�+�Z�5�bK��v�v������V���>NO����іw)䶇͂��$�i�t�J�|$��*z-GD�qVi0c�p>�*�2�B���T� +�`���̓Ǘ��M�}���)���(�g�<���y��q�a&��&��������O����F������ +3 +~�\[췛r��NPVM�?��� �G-�U�����{�ށ���|��h���XO���TN!�E� �gE0����jGq�Й�>������wG�S],�k��VUu�!�k�7����t��2Ӑ���Ǹr%����Y/����4���Bj�xX@�P� v��-����1�ת��p"�w��Ǫ������J��m��сc�VѼ����fp�!�V��֡#��T���T�<��(F���J�$lZ{>=�$O�)�K�R&_(M��aO2���*�Xbv[��lf�@{ �|i>7X"r�1>��Gg_{�=�ΕE���DP���<hr2�x�IZ�3�C�K;����QX����'�����~A���7���jX]�RNb����/U�]�3/�X�6K�����[���C���ͦʶ�~}s z&ܟ&%99�w���� ��� +D3����X�A_�F5��|X������0���!�4�A]l�XJ�g�@�r��O��!�^~�b����z�����:}ihe.�艙�����S���P��J}�3�p���^7�k����%y��[F��o�3�#?t�Odn�=�zN�A �2������-nT{�0�}���js5^N4H��J;3;�P��YB��%J/aa�#<Nڍ���1Z�[��~ '�^���(Gް�������a�4mn���\������}"ډ8��^cC��3���쒋9=352|����O�G<|[����ܔ���BC��aX�s�JS�&c�3�k�E�ѻ�!n�Y%3o�h��c�`c���� �Ba!�T�Q����_��7u���d��|��YU�#vu��`B}�*�w�w�0�������A�r+�;kK��ME9��<�ˡ7@�G��d^���w +�>��Ұ�M� h������#��F��LJV������f㛱{�3E�Ls +�%�y�����e��f�( �y�{[ǞO)�*)��i�1<�N��������˘��l�3N(�| � +lK�0GUz����B���w�����������x`��x�0NRvuT_^(�W��?+�h�:ʖz�#KF��Kk£̙��_r&�7�]/�����(I�F]��섈��R� +s�#���ڴ{&Y��z}U�e��8���WU�G\���hIfG��P8cNb���(�%���Y�����+;q�m�R��� O9���+�����w"�j/�UM�GJ]�_� +n2�����(��?L�����!VS����#Ƙ��ɜ�ʜ�dx�Y�/�d�HL��zN�nvf�r[ܽ� ��gR��^��q�Ka�w�#��h�[��4]�^R��J!�^�?�_Q�%����Q�7��k4�r��'!�u�C`̈�%]����@�Q�OW�#��1�|��_<Ɖ� %ad�cF�8�_���,#��[1���OQ����������{Qy$8r:t��"�{�4�/P����}�������R=�P^���a&��3��}�ܖ���nƈx�a��!��Ř��� ����N\G��w� \�{dy@C��V֩��ͮ���� "�fv�u�8��d�3AS�K��L�GDZ]�E�߉�ׯiX&P��Ý��Htf�j[�(�9+���.@!�����.ʸ~ �);��U����o}��h���A�N�IԵ�����fj�\�#Hj�Z�p +��=j���|�U�>�t gj�_���)Vt=�;q�R?#�|"��\h����q���Dn���."�>����z���Wu�3�W��,Z^�3����i'�Q���{!��y����V�x%�A���P���[�㌺����-�ՙ�����GGTՓ{���G�E��梛�u&�L����p��Qs�I9�ݾ�53 b�A��R�롏��ӗ�9��x�)3��僻�NL�2:ܷ�&~��=�����{���6�_7�Ϩ뀀�ZTϽ6��ȱ骊����J~������`���� �����ۉ�����}�vnr�ױ�# +jӘoREi�)��N�H����)G �h�e��Nd@�c�ֆ�����a���2��2"���q`j��Yy2�9Dz�}�dN�b4M*��Ei�;ذ��h5)A�<��gJ̊�n�ȇ��r���َ�ҳ��[="SUS�(�QV���}�Ĵ�J���qg�l�5s�եZ�Y�j���a�BZ�Y"�����U���N^G��_~�`��h��φ'����I=3��tT�/������\7�d"FY/� ���OF?˚��c.`�֪������Ov��D�" ���>�-���ܫ�����NkA�Ύ|��ّk�&�[E���>p2:b,N�ѿQ�]1�]�U�����cgz�Y-.:��H�67���`�86�wČ,̈C�/M��RC�;/�1�q��F���t�%� �O�6p��un����y9�HT�?�k�"������1��K�������-�k�8��趃�X��8jB������̠� �7�� +`���z��mz�罽���/H^�ّ@4^-��`nr�W�U]�����Z��K�#�Df�=�l�o}��w���+vD{FA�$���a�"j�Oc���`i��E��v����@�N�� +�L\lh�x}���`�0j�g�!�K�#�IHL�^=u�։�ٕ~�%Rgz0� +dlϬh���$q�Y�=c�~tq@�ܿ�d��0��y!8L���Q�����U��_扸��öf�4����M U�jV=��n�a�Ks`֞�[�W��0�q��2U錍Y�{Z#n����'�y��^!��.v,y ϕ1�rŷ�0�[�'��̇�"04�z�\��/��3�o��<!�'˲��-!7��|��VM<�����E�V �X��'3��F��hfU����P'(>gj�=�}��N:��~� +����֔�Y�!�V(Ze�NjW��{�Ծ��w�so�\�'�D�*�i���n5x�iL�:Z2U�H��xH��ל�Ams2ތ����Pn����#v��!!g�r��<���_e� f�k"� �&�` J�Jv8�XQ�e�8e����I��4]h�gDN�bD�f�I<Q�N�7���?�d" +s���1`���x��%�:�}D�l�F�mF���?`�_c��a�!y���e�=�� ��WP�}�t}����������j��`4�<�Gmhf\��;e�Bp�wN[g��/�"�6�b(�>#�7�zg��x��� �d:<�J�%�.�?FPD�D#�Wo� �{�(���]��<bs���8�ʹ�����F�g��}��w=($�t�|��P[�8 W��pa"ծ�Cى��%����eP=���J��K��f8G�|P!'�w�U�( +x|?F|?��>sŪnG ]���t��W���e �U��JO5���C���9��W��G��| ��-�Y��T�dM�Yd=�eUN`�E�X�ٸjA�ѯ������D+�#J��`��*�*������#��k��6�?�4q� +�t�1!�B�f=E0����&�-�'������GX�8���ƫ�� +�0�N�� '�N �� �j"pA�:A�Hc��k����)��3�G�����������>6D��8�%��r��ZU��~�� ��(��vi��5�Ha��L�|�g�t�'o��u����:J������%����F<>���t��q�����JUЯ#ۉP��55�sFZٖȍ�cz����?�E�j�p���X���!a��R�t\�9����qz"�~�x���lE����=�B'������������=�xш�����ܸ� ��8�A�c$}������;{�{x�Z�p�� �����'�U������X���&��9E�����$GݹoX3�mϬcDo���U�-ƿ��|g}D��i#�v������-�5����Bۤ +�|�0G�Gjq����z]ɮ����!�aE�ގJ�ωX�e�:����ODy�ܕ�+d�a{G��u��whKW��az]j7��T�,����%ܒ��ݏI�����졞 +�-��ҩ|-P�J0�����#�q��(�<����fL�D(���20�EE��8-kȺ����M�U��M�����k��xbF�^J�n�)^jG�>BĮ��9���*`�\����q]�/��f��zl���o?FhMv�����\X�ߠ�Dъy���ƭs�Ih�~\��Zj@����4�@`[�lAc&�]=�q��V諠s��>S�?8N��1��g5ͯ�1��طTj62�_S�+VF����{�&��-��b�� *��N*0{\�T�q�8R���d ���Y{�]ے�L� ��ƀ��Ky>\J��6��nAhC�@��m��J����9�^sn�E��r�9����aᮄ�<c6H��+ހ��)Uw߁��+-��[�����H�1�n���%9�5[��A�N�R+'��rє��t,=J��c�j���M4m`����݄�r�*��9���-�(~/���n�y�Y[�F�D=L)�d +5�b�ll�q��`2�,ec��o,�� +D�̌U���7H�&��q�ؓ�^.�$�Wɂ�z��N� +/���H�+h*oh��� =�Eet!u�N�%�QE�l�iuOs*ԙ�Cq&m_%���+��� ����̖c<��D�Aw��MO�A9!�zGͣ���������鸱��d����i�[�}2+�e��ZnC�ju^(0x��HݺG�F�(y�'uܿA�H��j����.&���S����$tا^ �@F���!u+[�S����t������0O?0�@��C����կU^�9/�4�9�\"��tstKF��5=��3S6�P~�0���������/�>f2钦K�n�5���y�]?,E��We�[���\C +| -��T�B�������� +���bxM��~R�WzHƯl��TY�\�/��@X�j���b�؈���&���إL���`�������vs?FfO~� !���A;H��&bE[.�{�)v{��yy�'D3E�د��h5,BjX{Vc�w�5.�f���"I����T� +�S!��6�R��&�nR�L��� ���jҵwe p�N�Z.�E�/r�O=J7_!Ԅ�l��l +�1����hd�\dº���J[�e&�A�U�,{�K�Q낢�ke��� +�!���⇂ f�0(uw�lv`j*ǹ���(�U���ߖH�%�Cd�֟�i*#M���@�ӣ������[��K�&��OZ��X���]i�/���BX7ݝO�o�'%����2����A�L��4�p�c��;Ί�V��� ������TN�=l �X�M���8���+D�' �إ��|�D��U�\���l*�I�h��P;ǃ8+�]�9[�EO=��A٧)����%O�ej�����p��х��.��u�t8 +���Օ��p��0��M�h�Df n �*8a��[�L�����K������I�3����S&���m�|�4s>�B�DU�(I�}�y���2�?q#U��M=ްq"d8-Of�[0.��:� E>RJ�;��,��甘a63Ƣ���^��<,*�Ʒ�{�+�2�0�l/���,2Ό�D���Q����� ��5~J1��~�9�g@�ӤY��p&�!&�t��3� '�1����tK���$`,���L��&�8��fbL&�-�*[ۄ#1�@8����}�����35���:�>C{�Q��b�� +H*qUG�.�jgʯ:���(����)�M��ե J��*�I���~ϖ�0%y3.��b!#(k��@���D����6tg҄O=I�hj��N4����rU�&�켦1��k؟w�;>R��PYE���l"���� :eDeCb2)Y�|L���~����oԟ�R7��*~KM�V5���i�'�$;�E'�+u:{��:�B���ɯ:E��W��g��|=���-�C�A4��q�� I�@K��eN��KO@�xZxn�)��[��8qP[����?��l���a��M����������ݢ牾�@ڥ +0Y��=�D_�j�V���J��b�P��դe0�vu�}.�Zb�G�J�sXeIyeV�4��֔l��3����=�M��fz�aa���c/UPk��f�s^q�P� xP�V\�l�jqw���nߐ)K&�gR[iQ�%AT�y��z(�p��Q�%����}�. ��л=�С�@���?�Y���P�!�'<������N@p�����9���L��%��n�����oV7wcM�����:�p�S��0p�+�b�ۢH�4"�dC�8�ڠa�z�ӈ�����>$ج%�Q)EKKF]��������Oo�����&��O����W�.���٬ tO��a�F���.끷����1}"��h�,�R��S��?~}��x��?}�������۟��?��۟��/���?������/��ۿ��o~���~��������������;;�����~��/���ߞS|qq�^�O��7��y�Ώ�?�~�}��3� O�`�8�C������|p"�KV�ܒT�2���&�!)2�o��M���e������I�]NV6�"��Y�~��s 'r�ӣ�1t(p6�� �oh��s�����%۴qɪ�&�Q���\�e�j}�>����ȩUZ�_���p�'n����I�4�t˝����z��h"A�䳣Π���# �Gx�X���M�ja��+ !�q%H�9 ��Z�P��u�盕�����RƓ�B6��0Kx�ݠ�����ńQ�6b��t��&?Qfj��<�ˠ�|�:�䦑x�Q"> ��cE*�Tզj2: $<�}]kڀ��P�q�t��UGR]kIn��ӦMI� ������]\�8�$��$gi7�c�>N�gPCTP��|]dF�2I����a��_�eթk ��#�����.T���B��'���V�AEk�P�2�y���8K"GH2�����#R���G���,�A��D�j�&XFA���l�,2��(O-�3�^%�a����MY#o�]�� eG�(�-i:����F �m`��'p�2Q"�����x@_1X�ԟ&a��{�h��;�^��p��-'��f�ȣ���I��֎��o6�]��ؘ�ɂ�f�*/E���(T�MRsU�6J����<��O̜� +�4B6a�x���e���Ї�{� ��J�:��E���&�6WC)����]�0�ަ��,I��e�W��oZ�=zbdr���&H[yqp���&ُ�%��"��l���~���ٗ.��Y����_�'㋝x�,vC���%2b�]g6'D��8��,�ٵ:�^�p_����g�㶔��ҙr@J(% �z�CeijdZc̦�E�7�{���Afb�q�u�@U���G�?l�-�J�k�_$=rv�m6�&��bQ}d�Ho�T��LgaȆb2���q~�Zo9mo�0�r�����%��� �<Q�f��%P����p�Ĉ �y�'ԃ{^��0��RH]��{�O Y[��c����}f��q�9/�@��@���Cf(���6wj�{�����H �����>Vb����r�uu��p:�T�3��6Av&?N�N{b�ܦCF���q��h�_s��R�B��>q�Yv��-l�DbgMN�l�4���&ƹ��ߌ��A� +g���O�S|/��:�*�-��U�~�Z��\��P��rU���4�^ov6bY� ����(Δ��E=V�dӋ�L���T�����ƑP���\��h[�H�m�ɪx�I6zKB�~��@�*���Z9��,lPl���,��\E�R[OI�i���E-a �V~>8��W�c��T�0=6M�sXMf" �?�բ�ţ����_���mP�i���I�t;�%�5���R�V�>�X��1 ���U����sF�M(c�8�2�!>{_[ػ�o����zէ�t!��tT�N�qx�u��t���*��y����`�<��G}4�Q�R�k�F�㠡u�wP�~SB��.W�L����j���v�,l�|:8J�1ȴ��QǞ�q�iG�7��H��[ T�G�����k7T�X�ꕭc���%mnI`d�9R��͟��R%Uؘ�m,�X��JGE�c�n����yg� ԩ&R$3�/�,;��Lok;�1)�=����9��&�6g�UI�NMEDv���w�ۭ�`g{\q�a¥[:7�kX��5+��°��Ք����q �����F�D��.�l^8�L��MhY��#!ؐ����z�r�)n��d��y2��3�z�yd$��0�l8� +�~����I��Oh���5S�LW�(pK����Xҝi�L��;R{bIfK��$����U�Z�QQ��Yq1�$���p�P��0k��|��4�Tٙ@j�A'�!��'V1zp�DOi�b�3 �k>?Kt�^�.]��И��=oR�!�P<�:�z�O��a�tc��6u��T.z�4��ɨZ�g2�Y[�,`��J�l� �%�K�.�`�I��N�|��1��b��xtOF�a9��#�KR0P>�#1n��^�#����U,�I��ԒTӑ����xt@�� +�M(�<S�AU���p�O���7���*W5$��z$��ބ�=�v&Ml�k��N����V{ h�փ��3 C���х�,J������bѧ�E +�0����>�Le�Z��n�Cj���k4�jM8����%��+�����bƙ��T��VU�.+˚�G��X�/L?�x�|����M�X �~PD��t�^�͊�$��u��(�m�m_.�����5Q߯����C��z����R����K�y�j�e�gk^M|\�l��2,�W�T8Q��1<B���K���Y�T괤�U�a)�v ��$�%�A0��� k<d�3��'��rF���NC�`h=�ZC�Z�{�6���˃��wD�M��CX�SF����(�x~Q�����E��C�T���ǫ���8$�R�#�uzf�(��3�}Bi�&[��}G�gۮ\�79Q����j��0�5;����Y '�,�)[���s�6�jH�O,C��x�ɞ:��.k +$ �n���=����E�*�& +�#����Qd���\FK.���>�Fn;n��(�=��/�rΠ��ڋ^y��$��kT�["�@\^���#�1��w�����L�x�������Bfw�=ͦ��!�H-���!�r��z1̒�<��c�·�~��j��ɴ�a�wwX�� #�Mh���^Iq�r�m���'~z��V��=k�l٠�\�6u&�,[�{"2tPK���ԩQ.����D� ��y��m���Y�M��N��π���9A)����z&/��|����v�Ͼ�n�{�������W�x����Z)rj�,���0e����ɑ�x��2�1�L6�Zt��@L�x��d��v�@��>�ˋq(P@g�M�mZQ�V'���c7UH��%!�χ^ǔ����YW���Ab��=i���y�9_�'���*u���1 +�I�� �����zE��c�i�'�1F3����7�9�Oiu�=[x�f9l?���=�>���ދ��|g���r�(�St�=:CzE��x�[L�3�����{l��f��3��n��\��@lSz`�G��M��y@T�vϴ:��Y.�h�?��b�ʄ��X�f�<u5����l,�3��&�p�OA@X���S�Y���Ȇ��5��K���`�)b�>>��B��*�V�|��n�MC�M|.*F�y0��=��c�&��.Rtĭ_��>9tvk ���?�e3�S龡�P��(�mɼB��z�VCҥ����kg:d�W'в��r��Ξ0��3iZ���� ��ȁMdLI��[�`ȝ^�w���N4�^'@���Hү>=�m��F����8�/�Az��8=�B�z�7+�_�̙�6TxP"Z:���S*g��/:��*[�����꒽@\8GE��(TJ�eb�E%�*F�}{G7Pc~P.��-d��uM�[�C������J���[����� �ڸ���,�b^<�M��sa5M���h2y4K"�DH[���;��:�*�9�HIf�o܇Q��s��P% ���Fq�Lz���"���t�U�;��yo�eʃˉ�]�^�:�Znr"��cV-�5�W�[^��4ny����H1`�8bY��WM�|(_$^�pJ�g'���Jf0b�P�t��1Z(�:C��e�A9f���*e�a38I�H��t +���@{�ݴڲ�?s�f=�~I�J�.t�W� �/��Ug���M�v`�� ba3b4Ne�p��$Y�7�=�1���~=��1�i"�c���4�[�{Y�Xh��YG��xHS.�-��xw^'���6���{aN�$+u�����ur����l�Τyw>�<��$�*�yq�&�'�^�݈�[d���Ѫ�ݦ��]�V����MJ�,(���u�id�2�c8U^Q�B�YX��:�����#ҧ�4ol$F�oac���O.�m�D%?z>s���IhKo�DG�ʟ�)X��Z,���u��{���� ����8�9ó� +�;O��Q�HS���jK&(LyB� ֍4�eS�ɸ*6�u�m\,�LJM�Y���y0S��K��Q~c�F�4QI��-���n\����&y���NS�%�d�IP�[�����z s���ǧ\�-;��] d̾g���/v=Y>�`�a��Z<�T�,.$�{��r����g�X������+v(SH�pPvY�@b�T,�̎���l֪T��<���X�O�q�%��X[�(A�$T?�ޠO~z,J��%�P�1�\ʥ0;�.[-zU�pt~��2P�Z�3Mֺ�/�$��e�H��rW�x��2��� (z��&��nr4�W)�S>�%����n����z����,p!�4��Qw�<�$tV�3R�X0��e�)�F}꠫�Xh�N��ƇQ�ӑ�²|���s�j qy���WkF����8 t1� ��G���~�죺%�h�}�a��&3�V>��8z?��}�ā���2R�gy��m5O堺>��MU���b��c*7i�,������%� mi�k�\�P�x&�J� ��K ^�V�c�b�&�Cآ-�q�h���?S1���.{ё^��N/��q=�X@��H�B�,</�%%7Mbwu` ��H�g~� Ck�)ݥ�4.�m�IGP~)|��X`j6����H�?�e�(4x�aO�C��<��b7 +Kׂ��R�n�=�4��ԋ�����MW<튷�H�u��H����@ �dR����W�bR�R��O��wa f��Ʒ��z�:�!HTF8�)h��F~�P6Hb<�9��(��H[R9eQ�3"��$Y%9��ڟ:78��%�w����!����6�(���%�;�/������mЋ�[� +�+���5��j=��d�,�z`�{z����x>OX�q&[\�u�����,R��+�j����PhY>e&/��-)DW���ciE-WA1�(�?wjhu��X_A��7GIq� űA����B{уx{��lğ�F��u����H�WͿ�u�!�]t$�+���I�����<�*S:CY�^[��f�g�D�8��1�$=��j2��bBm,��%G�[pwnT�V1,�����N �� ��0,�\H�k��U�N����������-��#T'����.��ԃd%Z�xf�c�guzt{�����D��!��e�tϤ�xz +H�d���_0�(���0�_b��RHRCz��Ά��Z$��� �%��3͋��3�yqH=�Q�6�K�)_t�{���m�{��KϽ�'ٛ�I��`�E�A��B�t��iS1�,�خW +��<���[Be�1r�T���Ot �j����hЏE[D�ʒ�C��"����@�t��XE�(,5g�y�_R��E'��lD&re���&=�T�g[�����=@�_0�)�)�߃[� �]5Мy �y�C��Fe�9�R�|�1��5��_M�=�~�m�)�M�d5|��g�M�nSW�����9`��$����en�6�g=J�� �/{& ]L��:�B5�;c�P��������5`w��$. �����#�չ���Y{p��DB�po2k +m],���b�� +��323o���g;�Y�mޤ�DŽ��ݲ�ڪ1��rތ�q@;|h�8���q�=�^5��0;�7Pt����Y<�l6��b^���C��w�4x�-ØP�HBg��PbpT�JO=�KC~�g����W�W�jz��,��d*t����e�M��i��� '��6m�I�U�6K<�j�}&�B/ +cŊs��J�k�βR>nۚ��7,v'vD/n ��ml +b�#�X�� lv��,��{A���8%]i��@��s�d��0�X���F@:%H{I ��������6�g��U|E6�<2��6��]�g�=�F��&��ޢZ��+�ď�Y ��Y*I�4��9]܁sF�nt@���Ω���d�G5��-7�07����dم�=�`��4<w�~�}�%��+P_�]>�3\���l����5ЪJ�������R��^�x���Mv�Mu�n9n�a�#*�Rqۺ�7�Q��C����n���I�z� �E8�1s���(�Ҕ�e�<�L��]`��@6��H�@��^� -R�QXu��'���IS��,Y���]��z+��F����P��Y�!S=F�0�-ζZ�NT���W�T���i���S�ҥ�.��/��,q~늏����i�vp6��M�&���gln��+Ȓ"��x>�g�L�δYN\��-a�mˆ@���P�׀W�Z2=��� �`����hK� ��S�C�P� �)L��bdt�b�k�ZC�b�dž�AXt�mR�V��IHA�� +�� ۛ�婮^D��s� +� 6: -e4�T1?�*v���B?b�Tڠp5;��젻Q̍D����l����'�9&�X�W1�3�r��`������`[~���5r�T����(I�ڈ��e��R�*�K� ��99�ЯF�ў�ɕ�S(�YQ�mG$��D�����jQ�BR��\�i���U�I3�.� \�U�N�l�Lq/`���C��:�+,��9�����o���;�=���f#ý&��ۥ��h�� ���Zu���j�� b��T��v���~�Ap�:�H������V�����[pXH [=*)pz�{8��YnD6�i��<��l�L��0�!�Nh +��1�yXƢI&�{��7-��4F� +D�֔-�v��e����º3��_�Y?Ɍu ��~�N��8=���dkj�z��1��()�Z�������~�����H��D2%��i(�k�, +��3>�]l�{��i)E���ߞ�h��u��9�o�,�{!T���Ѥ ��@�gi�l�7���a�8��o$�EJKe���w o�ؚ��I�� �+)���ެ�.�^�g51�0��59��<��s�: �O�*o'N�z�����A�Җ"�]�|8��4�t���q��Y�`\�� =�i5A�(*�+�?��dn���g �I���J~z$wZ��?D����٧4��x�E9g�b@ �$��eń�=�>%ܤ/TX�i�#�,�#��D1R|Ft�ɹ,D�v���%I��}5�B���������o?�Ed�RG�Z<�ȋؐ��{5M�oؓ�'����&�~6QE�^�rD'۹!P�o�ΐ#�%����o��a1��A�Hu���A5�[�_p�O3 �9]�: +�}zTa�N<,N���<� ��h/׳QQ����P�|��(6*�Όzv��z���J��]n�R.��VB�i�{���M��B&�L�ڡ�5��?j��8�6�Q�oӆ�r_h"�t��qP���X�Qn�Х,���~� +A�'����Д}f�X$��H*�%S%�U/���\>vVtX��t��zR~��̝��ä��T� <3<���s��G��M�l�+������Sm���n��f.�~�T��D�KD��y��L����9w�L ��\���SdӼ �����ȧ?�W��Ȯ��� ����~oB��(D��$2+cdvU����+�{�`LS����f XI�L�9�G6��W����279����4C�<�P�,Έ �$�Ew��&"[�U�DO�f!��\���ǐ��%��k�?��An!�Y���3!��nvc?���0YL(a���f�:H��$i��k+^�������,����p��b�X��ՙɸ�h掑��E����́-�bX{��L�8{q$t5��J���QT��Ҡ^�5�"�L��,`�x92�L�q$5$D�@NJx�J'�xb�oj?���s Ǎ.��3l�w�k�ܝ�+�)(OeЭ�p�Ns�1&;��fE����0�̥!o\zR��3Z�h B (t����b�IOCs3 1+9����)'��͗Y�����FU����&���2�{��!�18�ޣQ]�����$.���%����@t�������ƥj��E�b?%:}��#V��,��;�Ƕ�I� @�=���lf��#�;F,T�c���!�.����խfXXa��(�$큹�����AU��6�!/�`ҳ&�z;�:��>�R�ҟJy����%ê2� ��el�'(v�j����-�A~����r�-?�#���7*����J�;�$s���I�� �� +$k�;��u�>�a\s3F�b�Y�a�3��3#pZ+��cU����V +�:I�a��HK��$i�A���C"|�<��A^U���D���bIw��@�f���d�?_����eF�4��E��4�'?��᩶m�����l���:�U"o��Y"�$Ǵ���6e1+�ua۰4<5�6����G�o�H��Y��@H�_���P�HQE�����d��E(ٯ�\�Έ��}���Oh��K����nj���R��jY�E��Vwv�����鍲�8âԉl��'Χ@��c�2��=��](��M�SD��R��$R�Tɨ.K��о�J%�3����u��Ué��HT�I}�m��R͏[������qҶ�Z$КeN�� LO�+ 6�U�&P�����ryV�D*Y�d�b��b'�D�x �6�ы��6�|bs�n�ׁ%�S0Nv@J�s�^��6;F��f;²�e��80�kغ�HyO���t�(�U���"���P��+2A�sq\��B��a���D8,cdzX�j8v*���$��y\�ITN��$�Z��L*$uZ'8a�/��bƔ@ǃ$ϥ)����0����SY��ÓCn��u��BW��� +8�N5Sb��) +~�XFL�&Õߋ�O�ݿ`'9�P�*(��e���3 �>�){r�] !(BE���0#c6$/����qtm���LI[�� �r;6k�y�ԋ�=��(�k�����w�A��OCc���=�:����M�����P9��������PA��7PA��/��F����y����I��^�t%Y��@���|ԈQ4�M��5��}�)k�: �Ɯ� +����Ԏ��y�>q�(�S��Á1�&����Z+79�����K���Q��g��qa�<bHԞ�}.�>1y��9ퟹdM��+�{�+����JY��%Yܝ�\!_ґTߘ���r��NVn'D(Ԝ�� �]���i)�40|qGf�)�ك��c[��4]�ld3��{���L!B@��Ζ%�i�o��T*�طKB<|�S���$o��g�uN$�,��pYp:� ���!5[\�t&�J�7&�^��X�?��!&3���`O�ɮI?͒P��wRH�!pb�pL6���-b�e��FI���j,P�����\T2"�gg+M�؞�$?��Eۮx��ɠ͕h�,�D���5�n~�xV2B�9�h���w�sA� �5dD��ow��dD�a8���B+�.�3�@�(��.-�kᣥ +M��߸e;�I�T�k�B߬-��w�{Z1�L�'Zg��H8л�mI����W��J�Y�rj�u��Ħ����pj�l� h��ߪ�P&D�t����^U��Z�p{$l9���zv#Æ�>.f�S�m�49v�M�L��Np��EJ�lԚ�K�X��9Z����r�:��1Ov�f�ǔ4��O��15����p�������?���c�?�� +�� ���+AW���R���,����ͣ��@F &�� +�-�!Ӏ�Ù6�BWtvi��r�7J�3����rQ2xSӤ��v5��j������x�=Zj��Ҙ��K� +,�A����]�����bR�,u��̠��|�*D�>+�#!��D�Y-��2Ϧ�&�����R����[���}�<�[(��2��6h?�4�9�md��TV��K3Oj��K��D=Y@5�6�����m���9�(�� ���7�����b�PLN|.��Cu�'T�20�_��#���w[xA�;���1b{����I��R���/T~=3N2��Oq� +"ꪒ��gM'����t�.�u/�iz�}�8�� � H�d��{ @�Ͻ=N@U����ZD�'R�h����zHss!JkW��q��4"�y����[fYWtĖ C�I�Lź�!�@� +�j"�'�A���������H2�G�o>yH�(}�)`���>��]S� Y� ���Krv$~��I�����,{��be.2���y�^��A���| {�6r����8�/0;�%6Pw��G�Ă���Y) B�l��"l|�bi3�}�Te�Lɀ)�dڝ�o�Pk��0�U��l���O�O�g�e=V,�|@3}fi�Vgh�'6�_�������S��LP��|r�c����X��z���ʚVY��[�&�-�� +:bㄅuHr�x�l�g:)i� o�ؙ\�~>î�8 ��"���#9(�X��W˿ {�c����g��T^=D��1s���L&Ű[��&�^|ZFh5�j�U�q�d�ҋ��#�z�X�Ո"�Lԡ�ؚ��p���j3jhA�c�4�KTp�V���es�e$,ӑ�6�WH`�"1��X���P�vM.�Ж/E��繙l�Z��#,�z�˨�XO�c���H��r�}0�F�;Y�����;�$}��3�>���^�@�q�ٛc�>̎��X�K���: ���Um�߳��芠��L|�e�L �����A���VT�Ĉ!�Kd`����tT/����I��Ħr����B�i�V��}À0��@�Db� ��_֥��f/@�MH9G�����ig�fLx�Sl��Ϙ��+b��V!��Ql�x%�n��!�,�Kۗ"��o�J�����'B@t��� ���ApF�)@K�}X���L5��z���JR���g��Q�N�y�n��R��6 �1 +`j�OK�fl��'�E"]!�g/�̻�����yc�%�"a)�&zJ���������[hӆ`7c=eJ��t����8�H�~e\�~�ه�0N`+˙���D�F���6E��|�5M'Z�e,uz��r:�P4F�!)�٬�U���\�,�Bղ�� k�DҦ��)!hu�ka�����8w{^^uu��ѡ��W,�\�$��d��f�(oׇ�.�[@oL|�����_�m@�U��:蜩�N"��j�A�3�1�l��w_m�.�RL9A�y�����PL���/�/���3�1�K��=��eA|܂z6Ɍ�X�#9�yNS?Pq�Jv�6�HMsh���Q��8���܋�,�=�eiMM��2K�]U3�����ũ��a�0��}�d�0���N/�8�*���?`f�bj��S���Y!�)E�ag�Z2��w;�c����*(@�l��uZ"�&]YQ�c)�<�`�0�lT]l_�����k(7lg��-�Tϙ�T��"�t��06��ʹ$�O�E�e�� �Gl&�y.�PD�,Y����",�ў&�J4���˺��#*/I��(�:�3.x7�҉�X$[P��eP[�'J�(���]�m�3�>���j�t�<LD��� ְ�Hʆ n%��46.Di}%�.����m�L�(�%z6��[X���L�^ ��9*G�M�p}"�zN���NQl�̨�̜�?5�poCp�*w��a�/,zJ�v�xjꥬ*��$A�J0m�m�)����5�÷����jd|Z�35W���ۙN�R���*D=Xѩ��ۡ�f�+�.љ�U�1�uH��љ�J��I6�Rc��A�0WT"U!����:r3+�D�ڶM��K���ݒg����0�k�c7Tf�!�B +�-y�i����q� +'I�ib���b.�g(/G(�[V�0�������6��ty�fq>�o��̌����Hi~��+�X�p���k0��q$+�3��[5��))#z.���'����eqK8���4���4QT�Q7��v�`\�%,��fIJ�L$�� �%�-�jL�`+�"����jEo8iT��0����+����Ԗu8��i���`�R�Y�zs�p/ Gx����̟�� +H�s0x�v� +м�Wpl�#�I�`��=���PBk[�l�4͜b��N<��U=D�����=��4r%�fl�\N��O��\��W��:PBh�$�%���C�Z� ��0�'և�D�N!4�5q�+�E��n�%��u��(t) +���,p6�_#n�A�Q^�vmM�b!�V�K��\�WP�*5-Bd�d����i'ی(*%ʓm�M�\�*�^�5Г>?MK#���*kt^#g3[';$6o�Y�>��%ҥ�R.�`iF/�4������L�qD��ki��˸'�3�I�+p9&:F�rM )A��*2^�U�(*+S*�O�����'Y��])8r-�x�ɷg D��K�Ii�H.���>�� ��P`ªP��ғ���* ~�1�.��u�x�9�DE/�r0f��j�p��r�P�DG��<+ F +����E�6^ +y� e�q: �Cj{>��8���W�o�V\���xK�#H|����b����G����Pm(%Ն&�j��SY5�������B�����*�+�\@.x^���:du讒s>5$���N�I3,�I�I~�!a�&m:d���ᛉ=UuV�;"�k�%bL����X*�%b�TEĹ��P�e���9�-;�llw�5㜜���� ^t���J�Esl�Us��< +?�cb���W�>���������LQgP]�:�� )U�q�:����I3"� �;�#�9�TI�et@��90,�c�����+H��\���'�A���3C��j��O[�Ж�L�]1h�`��٠�O��$� ���>����8� Ms��e�!HE�Qk�i!�u�JDH��A�$�lE`E���VARk��#TS��܇�j�©o�{�~ҰM�Y�A�L8c�r�L���"$E�wi}�U6�g.�UsFR�|��o9έL.wIЧ="K��Y�u0�rf ��$��G�X�"�F�ٱc��(��Rc�[�A��T�:_�h���N�@)h�@���s��2F�KB������"{Q���,��X������6�CbP藬fp��$�����T�����K�+ bzTh�P��I�`]{k�[%�b5�v@a_�[�P!��nS�z��X�a���C���D^.rB�f��&{�"Kl���xѫ(� ��,7����T��E��`��0���{u���G˰�c�8k�4�(�w(�R�%.9�s�G��@P�B�f���l��=�4g��$�qQ�s�Y�����a-ᮟ�MxDd���l�hR�-\�[�ڕ�@��Ð����LJ�^��e���a� +�h�eU�A��8���aBQR�:��9P�xWXk��TB �5U=�X��6[%0�/4Gn�ø{�-1]���Ta%g2�������4~��{!ljC&7���#�.�G��e榺�ea"0!�4�uF>��|�)Z�b��S6 +�'"����ũ^H��h�>�=u����l�OK��j% �b=b��0O<S��l�XH<.���h�+ر:H�R/ =�(�!Ӓ��s��:, C7>�.C\�kkd]�ٴp`���jӟc�c=�Y�i�r��U�F�W�_�1L];XZNT�ڢIۇ��xbT�-��'�T�!0�@*�ݟ{X +�Y�̄��8�씍B��\��JxS���c����� XZH� �'�l�V=:�4`�4��衢�����φ�1eB�� +��`����w�*�e��1d�s��V=��l� =� �D��c4A���p0��nw��h�2�t�ܡ*�fc�����1��ѭ<��集��������x<����=(|��|�E�$�V��L�-?=X�3��.���@-�b9�:��3[ۄ^Mt9���1���B���v-)�T���)/�*�,#D< b�"�0��o�d.g�(�y���="���h��8 p��d���ĎY�4����Z.v쌷D���=�"e59��I�Pଶ[�T(��!I�fϒ|�e�f�<3�A"�����n2*ħ��o����FMJg�7u�ӹJ��+.�'��@�����`���om������۪]5k�7��K�BB�?�]|�c~����f��G'��ɞ� +�HH_ak ��Qx{����\v�o�� +�1�.��.��XR)墸� �c%M�,O�1P(�?8�V�}�QI�%#M̨�ad����xy��@��3�[/��Rb�o�V��k�ط' 1�~U/�|��b�����P��i�m��W=k���S/�8MLx��9�Ff|�wm�0�W?�xWS/P��tl�lg7����(���"!����hfh�JL����a*(�U���=�{G�dn.���>���u�ql;u� �Ɓ{pzL����]-;6��9�A(xY� qE����A�3��?��k�?<��9��L��Y�K� �+ʹ���(�uVQ���m����<��pǚ�i���p7iU±�q��4����ĖACQ�,�^t��-�Sk��MΗ�bƇ��b�0b)�E/i��-@Կ ihT�ń�;¼R5`����� ��n�t�Y�|��xFB�Ј��`C*ZA\5���{rB[)C�!�F���zX�b���$ ���.Qr��^�f�G*�k@֭����gW/��h!�N�*!jz{ebk������ +�IEk/��4;t�g�k�Z^�6��#L�='����YwK��0z���,�7�����6�B�#Y3�,{g�_�l�r�~���OÀbPƩ�����|>�d� + ������(�%��ؤ�?�����{S�s LQ��h�DM����u��9�@7��.�)?�l��.<��/�uOzU9��Ӿ����g_�{_��3=L�U�*�db�&Q*7@9�|�ivC-���WFA[)���۰�f +�K���2�+� &�X��$mc�(�b�tޚ�:�~< ��ԭZ�T,���S���\ \�1%�,z@q���@E���cՉ��v��a����&4��c.';�Ri�գKZu�������h�5��=z��F�@'1N�)�t���L����&wR�à������t�����P�8�v!� [�s�4F�mi sQ�[Oo�2�ՑO��a6�U�-��0�ؔ��b�l��i�>M�O���>� �r���T�/Pw��d� p7Â�+`�{w���D�ýq\@b��kb�7��E`a�~~��~N���$�B#�pʹWԢ�l��f�b�@=:�����rj ������PuGc�����>p��It�e��0l �J��z�ay�s����" �a�B�c�_u��������T������$|��"*R��p6���������I�q`x��h�O:(00Xa�Y�*�Ͻ�d�d�0B��?U"������Ł?E� aO�NC.��(� A]�?Z��ࢀA�cn�,��>���JO�3;��\ѵE�xp$��n� �����qb�7��6��E�4.�O�Tr��ʹ��p`�D���� 5 ����l���y�,=k6�/z�b��t���|�IZ�ӵ�lX�0��0HYf��~���vNM�_�5s5$��NDm�a��9���r�`Ϫ�"�d�|�����{�u���g�P_P�@x;�� +v��PN�i�µ�Ԧ�z����0�>g���[�վ_k�X�l6�f/d\�k�„2�rG: ��A��z���BB_�<@DF�a6�p�{Pj���~�mڔ�}�ev�� ��<�߈~}�W���NA6��4dIo;�T�i�.:�U+��C����kRt�,��nX��<�w���W�Ex��d���J�LI���倷��L�y�Gvl���i&PoJ2gw�ؚ��4�!� jE �P��<|�`<�=� ?^4ٳ��jK�������&��]a�`�O5QA����4��6v-�I�t�i�w�:�ݐ����**�3�W�L�G�g��v1�i7��0��䶻 ����bi��ؤ+v���ٗ�rv��{���O��*�*�d����0 �d*����A�F�g����ҞNPH`�L*��T��ې��`���B���2y�&��7�l��,u��=��+��� +I>"�T4̲�B*NT�'��dTV���J�f����eÒQ�`łF�դل���H�~�� ־�C�p���hlZH��Zr��I�����/����P����;O�%����оb��91�dC�����L�Q>�#Z�����ךm���@�U�h*� ���x�WQx���fK��C/h~F(�*Mj�ӈ˨6|��z����{ � +E��Z.�c.,�q�(J&A���C��"t{s�v�#���n ���A^�R]�P��6e.�*���gr;�1�&r�ױ�L�8���B!bNĹ6[e��V��������6��{��2���b����|��I\PV(����4�ăl�[�C���A�:����TI���qC-cz�i=z�M�A������^��3BL/�&�Ԫ-��ѡ��p���$V�J& @�6�Կ q^֦�W� ���[�;4fu'1�;@��� �[�H�o��B ��r�C��iX-�)�����xnna�i��&�h�?�|E��]F҄�a�֧�F/����8(�#�8�<>�*���'�A��ߝ@�$J�"�(r�;S��G/zȣ=5%�����ɀ�`�BD� +���! ���-G�����˝]��~�b�����������j�xBGq\�7E%6$�jQHIE�����m�����L�^������Wg�0�/Q1�q5L.#��Ɗ�H��:֬UGw +�X�jv��0ű��pl�oA��� �Q��G ��z��4a�� E5�٥���{2W⒀���R��h�2�G�*zda���S�P����@Z<OpP� +h�gys�c�����\�.�mϡ�F�25�0c�I�X��a:SлR��v㈂6^��Inf���N���/�z3�ax�=�N��SRr��ŗ �#X*C�?���ѫ�kMG��ԉ�G1�c}�(Bn�C�� *Aȸ�� �(?ΣU���xs��S���8'��~j2��6|��ܹ@�"R��&��������hW���Y fզ�!��E�7T������"�镄���6�b�/�qXw�/Q����(6�/���S��2ɳ�� {\]\�V��7H��L^vv�##K��G��qm!���c� Q@a�˪i�B�%,n�)M�)�eD�/#���ǰ���Z�%g� ȧqz5� o�(y�U]���s�/md�K���4��[Hf�W�%j0@�]�^���ʎ���_d��x ���8^(�5`�E[��gsFV��hS�:�~��x�C|F�k�.B�홺�e�\��M�JħljQ�^�4Q۩��/�):2�I=P����!,�� ��s���=��HƇ'�>�7k��BW��s=�n�5��O�2�IU2v�~�ͮs�&�,@1����0�` ����p����� ��@3���\4��blU6cMv�PEʲ?![zr�W�rH��C+;��|�Q�����hl�"GA/�(t�0, I����<����to0� 1��0Y����N�Y�k�ɺ����&�g.���F�1��Sz6>�:���0��i��Mk��фEx&X�<Z���)�]���ӣ#hJ���Q%~� 8L�z|�C�������ycX���&97r�q`f����ml�7�o&}��7AUf�oU��i������HC�|�a��va�|�8�;���K��/�OS8�JyTN?�� ���2K��0��c� +���:P�~�p�y������0�H���dZ�@-C���������]G�OH�пa��E5�z���{�p��0[]j�: �$�@�J�2�^z\a :����n�NdX���ɮ�HN)���g� )G6H=��m�] +)p��������{SOv�j��1Ja���+���3�/�n�dOx:!hIJ���"L�JI�M�$���b��p-uQ�+�x�a��K�=�9��2ge�$.@�t�>�*��� +ۨ�\��Ӷ><Mh��� �}«�}Zr��m�|c*4�%Ԃ /�n�|�h��,7Se�G���U��I�e\ �C��|>�eE��@6��>��9�ô��_�A[��_�]��0|�.�'��=�-��g +���^�D�E�_SlT<���O���J��x{~Ѷ;UD1a���$)Tr�e!�oB���m� �V7��*����>���<�z��W�X.g�=���P�n�(��� �ѥT��b� fܟy��� s��5'`?&H��$� 7���|(�w-##@� ]�='��ƫH�J���5���o�zA���cXIY,�JV�Ԯ�jM!����֟{X�aY�-q��^��L2��2�%�m�)|���}��&/�{� ��`�O����z��N��ٯg���d+VU�+���җ�z�&�"�8LO�m&R��km��q�A�?�%�$U`p����r %���G� q�ߚJE�cq��ogcy��Wﱭ��� +�1�za"�(�T�����4��7nCn����6�t)��R���\oW�%���Eݙ뤓���hIC9�����b�t�%�9${�%t�5�s���"��&�Ÿ��VF���w$8�FEG,��-Y.�$Xh��1� ح[�O8��2��y&��E]�<��b�����@�'rv-�9""Ύw�~�F���p�J=7�\�'$�"����5��}w�?��]��&-x�r�_���1�>��~�v�,a��j�?~MI��O�������'�o�?��Oo����_���w�������o�ꗿ����~�ݿ��?|����͏���?���줯��o���w���_{N������g��/��S���o��o������������������������Eo����?}g���_=�����"�kg��9�������hؿv����w��������������8�������}�������o���_��o�������}�{�A���o������?����o���q�����?�E��/�k�K�����������yi<���n����8W�������8���_��_��c�?�?��_~�ݯ�Ɵ�,���������D'�����}A!Oo�����i�����Wo�����~�_���~�����_����$z��h��� ٫3�|~�����o�����3��������~ɗr>�,�#S�=�5��E`����8�R"��&})�E���`�a跧���?�����j��`�_ULiQ��m�{�w���$W����A>��w)_���lt�B%�%��t��a�UPc:�7;�±C�U}������A(�w��mW�B�g?]���R�tS��A������m�k���|$N������Lq�����z"}z� ������n���� ��qEc;�7b�g���*X����H��G���_��i_��?��ܶu�����d��u}�/���*��}\���s�����7��7���n��z[����'?�K��oԸelA�^^ק{���ξ$��ケ�6��^q����e����-���q>��x2+ѕlt'~���C�1v������E���l�|�A�<��q_����yOX�>S�lfK����N��{���oC�\�Q��w�]}_^��;��9��;������w��mEoҟѼz�ي +��%��#)��^�-.c�� ��7�ͨ��YcZ�o���E��^�2�w�;�T}���� �'{"�r��EBm|ya�+�p¸�2��)*����h��e��C���+?�~g=�=j��%�~ռ�s��^�-��S��ƈYg�g`������lhJ�ӝt�����h�0F�S�?�u���7J��r�5�O|��껠�0}aO��`�������W�*fD\>c�]V\�Z5�3幵/B<���^�ケJ��^ܹ�*J��(��?pi�m�lb��3��������|��4�����L��Y��l��l��-���t�u���S��M�>���S��f��^�^^��E���=�¯���7�Y���b��APX��5�u�蚢+N0O�~���$3�|ʝ��[��W����r+�o��;sG���w��pqi��������i��B���7W���L1U�'TP$�wZ�L��-���W�{���y{��1qָ�X�;q�� cŝ�i����L j����Cz:��dz���u������[&M���7��1�ɺۦ�:ǝ�7J��'�o�}���~k�N +���1���Rm{�$8V\mݳ���:n��)��D�����'��}a���w��D�4�����y(nX^i�+;�^�B1��w7yѷ��W�4�h +���ќ�)��l�n��V4�⿁,�]���{θ�Iocϱ��?�pQ��c�����h��f︑ȕx_o��N½���4��G�������q�X�杹�㽼�ǂ�o���+D3RTZ��=�ߐR�Enz�'�z�}�c>�� �/��������$� �����7�N�7������D�h3����+c��7 +ߏ/��+��K�w/�o,T���Q���_�o�w_W?-�)�췙�~ܛ�zj�����+�dow����=��/�B�I[ci���X4��9�υ���}�!���סY�O|�w +�>e}�8(Y���m�b����z���3{����c�ͯ +M���� ������ ������qz_�=~A�5�>@z���,]R=ť�5�cr��>G3��j���s�S#f�o/�m<t9A�=��{���jo�}m���wY�"ȟn�j_ �s�ܓ����s>�\�Y�X�r]��y�N(7߯���e}�#>�)Na���)n��?��&�S*�܀k�H���=b�.�n�+C���F.�F�#����|�����q�M����������5o�eG�_%�ȌQ_(p>,��������|m���V���nҶ��};����c�ay���9�q��[��_5��w�;��N�;����O�|p������~[?����}�Qo(��}"��ߞ_���12��Y��;;V| y���ok�q��T�l?q�}�Ec�/������Q�/�;��4c:ѻ��}���$OlbQo�D���me��hB�Į#��ѐ����s3co/�����w����ª�0B��ȱSo�@j8{\��~��&���+J��������o�4�~ڊ���ǽ�7[�C�;=�\IV�43��,Kۑ�|d!L�q�G��V�kٯ���[�>�5�@9�0p��(�1�����M����=�7�b��Y��B�ݝw��W_\Ļ Ί��� ��wLN�V~~=�/jU���G�Fr�QK@�Ƈ!����s�?��F��p2������l�<�3Q���, +o�z�n��=��7�˧���G���V_�O�o�1,��%..�m��� ;)����pA{�*�Qy�����$K���Ë����Z�.���kb�1lw;E������+j����v�4{��Y�����p!��3��+Z=@�آk� 8���X�c�]���,~Y�ũ<o�U���x��(��w���6�-���1��JL�<<�l3�h�?Wc����� �r��[��*�-e����\G���-K��چ'O����D�:���ꀕS�R�ϛ5� M��X���1ŖDfZ7:�U���dGď�W���pT�rV�[��:��G>[�����z���ޔ�����a���7-�+2���E^z܍k�/��I�4s4��n����o��i��w� ���]�[fc���/jo/�~[Kx����`ƫ��hn�ΣT��q��0<�ѣV2�V`�f���% �mDW�^]�_�T�ج��Ws�Qܝ>2���da?�H�zcқ��wSa;uজ� +j����U��Xâ�W1���J���[����O/����El����}4{^N��cdZ������l=�$z��6��;��7}�A����]��5�Oͺ��G���]s4F�z_�G�?����'5��;}�y��O�=��o�������O���ٜ~K�^ ��TnR+٬��w{����ו/P?�{]ɟ&)���4c"� +�� +v��>��b����F\�$���+x\Z����N��c:�5nO�����gUT/�{oP .5�?�a����_����<���/��,/���7WQPԷ����C���-s�h̾9��s1��FϢ {9_^@�~�.�ƭ��9�h��F����}��f�}g��tp��i�jM��A[Ԑ��˧#��<Ç����W�R���jl ����'���Վ���O�u���E���Ƥ�z�}�ͱ��H���4c�@����R˾RE~��<���\4b���X�E�ҝ��z��LM��ɯJI���<S��e�+3�"�}k����xc���i.�أ�e��D%=���6n2��R��C{�>�q���"30���_�5y�t�zDo�����NC)�M�,��0Zn�5R4Ƨώ��x��{l���Ke�w�j��y��AhڊZ�y�5�y��v��n��{���X�߯��� v}�J��Y�L�l�����hU��uS�;n��2��;��l�Ҥa�䯲 +46�9�x�xo?{k�O�J�w\�0�Й��,��pw-�>��0[lG�,���x�(��u�\r� +��ɴZ�Nq�D`lֽ��J�od1m�uG#����iٔ@��v7Ovk�ѓ��4�]�����>�_��oB�x@���Q�Sb�M��K�L�xT���98���ih���I�c�H��t��n ��5�X*�c~��IJ�^Z0��`���|W�o,�,`�w����)��7�=A?���Fb����b�(:!�2��pT�}K�Q�|ذ�lp���L�7c�7��b�܁�E|����sAV���h�({�iLѸo�m���K�5�/�O�Y�6�\�)>�W��qYZ�����Wyk�7�"e���3'� L����>���D������'.�h�kE��K_M�T����q]��j�da�����v�7!��klҚ�d}L�q�{5��n�2?rG���#n��V,ks��k���-�l��1X�F�����&u��`��_������º=��w0լ]����1z|]7%�}�4 �+� B���=��o��;�Kaǭ��������r��ٵ�H���������^̈́��*�M����5��H�X"4��y�܋��B�Gy��S`��'D~�Xn�E_���5��e����ê6�9�g$�c�� =��{&o�v�r��q��a +�h�\��&(����o������a�>k��]@�1hw���{g�� +̋���Bk}�m����u���� +{ב�q����JP��:��[�(d�/�\c�F�������Rn���@KC���Uߏ�q�x�fk4��9F�Kk~�s����6߯�q�Mi����� �>{s��Y�Ycn��*�f��o,#�4n�i�����ȹ��"���?�Ķ���Ψ���c�'ho���+ݶVv���ۜ[[�m +'jo�������:� +{�g��V�F}�~�}kD{m�K�������~��go����w�i�Xx�����q�g�F䳻T�YuCߝF�~gڽ3�V����Q,��~̏��α,��aL1;GDL�ý��=��F�W�1ڄ��f/Q7�Q�E#���!��Z�y�1<E�Q�\���]j*q>w����O�����<����3����;y\l�_�����FĽ��ƨ9f�}!�m_�;F�����j-��1@�ٛ�7�{~�ap�<7��⍾+�E������Z�cX����f��⌥5` �����66�1�{n��[�c����`��ry �\n���6AD�<m�?�c����j�~��C�6�C��+�vXm�����"rk�"��؞]������v=�,ӄ{c�>c^@#��Hگ�F*9�[[����`�~ab�r��X{�m�)"�4�%_�����#m����� +�Kl����<A&�.��]��| p��ٵݾ3�/-kM|wuD�f���[$i�:V�@ŦZ ��,!Hb�v�������&��z�O-��̱@x_��C�=�w͈Q +�n\S��>��B3��?=�hԢ����;��w�V����[.����_3I��a��W�jq�&#kc�r՝t_b�o�Ԁ~]�<�� +z�i䘵�؍��a�Me�G��/��>@��6+>�i�Q��u��c[�o��Q��ނY�a;�� +x���;�6|�}�;�AU�yX�:߾�B�-�/H�R���*�}�!�*���f��:o:�X�`�p������.:v_u^*8��.� +��V��lt��ܸ�1c�]���e� +��9~���(��CD0�n&w"O�6��ƽ�)Nt�*��н���R���~�*�^%�^�`)�L�a�K {��`��\�?{s���;j[�Vqߕ�bST���&�ԋ5��#&�ƨڈ���GZ�����_W�@���n� ��{n�(���^�5�T/(���ŏ����WR�w=�4h�ֈڔ����moe{�|Ӆ���0fQ�a�e�ZL�N�mB��N�0=kܾ��vDɓr+��܋͘˦^�����˥�ֶ���}�����N���r��W���/��@T���k�uQa9�k/B��Q[0�D��u9��v�/�����x� 8����|��%����,�A����5^��Ǣ�#h +r./I�Nk\3���nV�Q���)��*���閯׃b}ið�j �^p3x%;���v��y���^-��9�[���N��z �^���y /��b{� �hw�y6v�5���F������1�׀�`o,c +�k�3������V�x��W��y�[O��/��zRi�ż���x�~�ϥX>�h*��P��4���%�֘Y1"�+�>��H�g�r[DWS�u���d��4k���w��ӥ|��#��@)[���r<>+��6w?p)w�Yq�D���|���Z��ď%����r�1��%�aJPl��ƷX�{�آ�[/g�x�c-96�5����?5�V)y�m � ^0�6$֍����O����6@�=��]s`��.N-%��ȿ��Ac �⧟�W)$���7�h�+����3/�B=o^f>h�%. �2�|�����#���^��M'��^��l��$�t��~�� �|��'�:�y�xi���t�beXo��W�H"�%^���h�:���4b�����>����I��_��sV�G*��`�����<���X�N��#��j[ ;Y�x�|�]Ȃ ��zB��|h�8��,�F-��$U�����<i[�H�!Y���2���5��x�W��o�z��z�g�Q��:���W�B�.����v�Z���@�^�����w�~�"��;1�.�лI����[,}��煒ɽk{c�����X�������G�{���(�g�;�N��H~F�О�4���Kz �F�9p^�,��;�o���䞼�ͷ+Yc<�l�������Rk����� ��G+�K���'!�8�����8-�G,�RDC���o="�������J\lTVr��Cy���=����fy�H�B�ǣ���j�51��>9?*�c�X�nM;n*`�(���m(��X�ԐV����L�k��.n�U����x��d�����q��b�A9�ʀ��@D�\�U[E� eרOλ�ԛ��ǧ�M�`�������GV'�<c��~�@'=΅|��r�����������Ϋ56�.�7�;Z�v��|�y?�b5`wj Z�k}M2[A����8aN����!�L�|�j�n��8�'4 �I�m\�ٹ)�����9�e$<V_D�t)�Bo��p=�f��xŜ7�E������j������[0 T-�/�� q@K��Ԑ����@}��G�g�N.���}\�Dk�N���)b�+'V/�|v�������{��l��ng��;&L4*�/�1�]���\[��R��ߜ���79oQ�AB�����q�xe���$�=�۸�|��a��?;���ޙ��OO�������堜)�)��s�`-۲-Y91� r�(����B ��{��}�*С��>����_NU�:�}�7*���kS�:U�K/�6��=/Y(b:��d�&�p�R-/��2��:g�?�ʙ��"�E��D/��-d��R%�t��Ӌ�!g��햒�L8:���VͻQ�B�#�I "k�ȞR�TP��Au&$��2ǾR��RvHLqZi!u-�T��DG��%�-sv�|�K1YT�a�*�ri*���IcA!��(%ed�+=sP%��˩*��������N:�'T��t�T�tm�/����X�{Iԗ�lB'����L� �����4T�ȉ�y��u=����w {�"a����#�T�{1E�ˋ�q�Ҝ�Mq(t�Tn��}�V��J����HqIu���,Gid�\Ny)Ul���G�a��5J��,G�.r)R�rr�d�p��eT�k� g��(�d�+�A��D��Ω�L��Iz4��]��U��V��Qt�8[��Ҋ��\PH&���'�.j�^N�=�C���I�N P@�#����L,��p�uɠ�t���S]m2������+��T����r +@e��� �e������]9��l�TE� +��lqp�|�Bq��FFH/)��[I�*� �(ζC��Ȥ��lR"@���\jjF\X@����32tTIbd�a �N�(��{2!�(�a���2"�WqNXF'5ZI�5g�-����M@�~�^���CGZP�~JK�@N]����K�k�(�]Z����������.�4�\��I�8��Ҩ��lw��$=��ʽ��F!݂L3��42�R�k ���̷b+�2Ќ�Fm��\�X�����<��!����rÖ��>e�F2�<��vg�^I5�)ʥ^�:+�:���8k8� +�(Wl�r*��b����m��QS���Nm�l���.�,݇�q��%$1.�m$,��@.��CRr�/AL��&su�h٘J��Lh8��<ϣ�]���J� Y=�9���0��)�=��QA����D�\�^>� ��B*��I]�ռ�uY&����d>Kη���l���ܵdm~Y6 #�̔в�#��S�6����/¼K�,�';@I�je�\�ٙɁ��չ�PL��\��̢#��(;��Z��ɥ�T�ĥ�TVe��0#̗d\��\B����}qA��Vl�sm�~�(���$7��J������$Ź��O���g����FY��:�I�ɇ%� �%˲�2+D�B��Z���*W�!�oEN\PN���fR���̤��섡�����l,(+̽-k�H]E�0Q�OiY�Z�aG����ᤲ+͉3�u�f%g)���Q{��t��d�nYV�T�0i�Ȫˌf'[P�2�҂Ps[L/�,�^D��r����pi��f��|ngYi�s���>�oI���NJr��D%�f�2�|i9�l�(�MY֎��]V˲�$g�˩�Ռ�'k�ɲza1�&�'ZQ��e��f)yFX@�Wd"Q� +(�T�E�9qY ��)-ZHQi.'0#,����^E��F�k�r�htT5�LyBk:{aq� 29eY�VN9hiT} +�+2�K�)�S���*�̉I$�˜施�` �8�*����8��"s��3'�R�IE��ȭ_�ś�'�i��I�� �����7.+$�?�py�j)�F�(�[J&u�2h22rYd�p��u �xF�ď�K�fG!�@�Y\��e��{.�e��<�79W�.ӈS�BZ.窼�jT�4/��X^F5**��8)�QF�������l6b9*С2��Ho4�p�d�bY��_�T�~���_��Ί���L� 7j� GυJ/��R�t�[$�*YΏ�����M~X2S�,��|�z�\Lv�CoPN�//�%�Wd��"߀*�)�-�L1-����(/��˲g���@:(sv91���)Y"M�� +�eXLu�.��)/��k$S�V��N�F�3W]R^L� CC���Y,�,m_O��b +�в�n�גю�2�^XTN��LNb���N�ُ�;���(�I�J&�f��h4z��PF�Ғl��J'���n��|$�P���*�7��Q�h�)���S��H��9��(�-g����� ����Ҩ�{�`����� �(w�D�x�RGQR ���s~t�cY�K6��>�KˮEt�f>7�j��HT�=gV�>�bRSe�5).,�O:yD=�����^, +��(� ɳhh��E�� +K�EV�!���L&-�iT4�l_sHz��}>9��\�� +,�Ө���Ϯft�h1٦���lMY�-�%��d-?�F�C�KPV����+��[�R�h�� ��jђ�X:R���2�˨i���fdb�J�C3PH5_( �[��P��J¤�Q4,Wo��6_ޑK�A^�Rj�彼H����eM��JrC{�N�h����wHJ'�; +ȥ�RCI}@��DOU�O���e��7$��T�E~;���,w<GVH�xѧ#�@�%TOY:U�N��9�%�ȟ]FjT2����'�ԡ�ÿ4�1����>t�7=��F�\ z��Z�o�G�}i.!��Uä�����BU2�@�t�!3Kʨ� d�?��E�44�`U�Nֈ�A)�Q\� ����Z��JPH���Q��Jq2n֬����U������\ +�f��[�hT#�rR��&&�M��r�02� FA�Q-�S�\�ŅdO��"�`��u($Ko�K�}J�=V���M�'�����dc�b*�4���91=WN�v����k1h%T�������k�h9�F�Y�A�(�_B���ȾI,�?��O�I�Zq}i�f�9!�"V�/7����p[B&أ�V�2�����4�"'�A��=L�m�����!� 3B2Ԕ��9a)�}F!I$.'Ccd��%ZD�<BV��Q�({� +9���S��4*�J6����[��} ��1%�Ԕ����`by�ގ�o�!0�� �?��K䌢\��R���˨ޗ�W=_���U�������R2�����g�T�} �@�'O���$����l͔���<�~��� E����DcSX����904�S�R��_z�\')T�UHR���~c%�p��:�rQ~� ���D�[Eg%TEb�5>�N:/ɐ���Onh�����ʨ�y���%�gr�����~��-��tZ���O�����!Oq����+.�w�T�q�ϟ+�2�tV�dy�2��L�(+*%;\S�%e�\}L���:����plq����%4�)G�W]ի��*w��s�g��:�2���&���{i���8���l�F��� 1��W�;8 �h&Y�O�����SȲ�L �.UXJ +���{Qi���p���*��TP-J.��8�����"���⌌�%SȾ�(~D��KȾx?{�|w?:�mK�jJ���\�Z$,'�i�d��r�0Ki��~O6)�z�r*�:��, �������Z���B(,%[�g�bȭ�oU^Z���d��|Hj�� +K�ΙdrM�ܕ�n";L�����������f�d��%��8��F=�<�y���������sͷ�����g�nVL��Q��E�t�,�(�GiY��HwT �؎-!7l!�~��(�H��Ϩ;�;��w���v��12�i1P�˃����T��K�ωIʈ�Q��]�%Ty8*ߤ�_��=��lvQJ���ە� �Kr-Ίѡd=b&��F���q������j�C�҇��� +J��*d�dIi�]1�jB����'���ε"'��r`������ʨno���*9�A�P�+ +�W��\��&��'8JY��r��5cI�N��ߔ^N~ӒL�3��4���|�%J�%�3��d���"�Y��,#� �d�&�4����4�ݓ��QVXVL6��� �N��$/�eE��z� .�y/�,����?�|3���L�Z ���5J(pH�ɝś�3�)V�5,9!Պ���o�#���fJE�9qy!y�Ny>2�?�#������Y2SB%�I1u\�/r��y�(Y�,Fx>� �uI.�^�?�:w������ETsz���O�sUX�l�F)����\����l�lEVX��Ѳ}���������'���l�2 +��2u��id�Z�3V�/���^@���gkn�91��gˤ�B�{��Gz4HO�J����e�yO�ϟ����wȓ����̑���?:��v�}F�.��-�����1��?9��S��G˺� +3�&�0[Z�W�X�:"�Q��_�@g�_|���R����&�Z�Bs��.1����=�y5���-y��8Y\�FC����ٻ`8P�x�~q�;��9��'k�2������H*��Y�W�K��2�!����^��Cy�)N�>1o�����s6��;e�q�L�vv�e���m��G���E������u��ːmX<(:������ �����E���~<j^��'�/��6?�����t�hg�&.DQ���;훩rD�����\k��O�FJ��}���{ߝ����U\��k�J� +<�>����HL>�Q��٫w�M������x�����6\f����<,h���� k�2b0��Yq :ʆ�ە�-�ę�\�ٯ[��V�����v�L�8Z �Ղ�;�3!2D�~��QD�z ?��9qF��Q�͒���'(�������(e�|*Z��y���;�1��G�Ɋ3�-?)?�{����h��P)m����/=��Z�e&yڳ�6�U��0��3�4�]�TZRP�}�����-C�{�U&�f22��ɍN��`�f�ȯ�KO�7wj�F���'(-��{�`CYyɏ�VD~�^�������P�!��{!O1)������� ����o��������뢢_0���ڙ +�43��.g���?�Tm����E�!��������K�N�y=��3��;�����l�5'������蹆���W�ӄ�cIf��2�+�9�����"��ehX��ѿ�� �xn]H�<) It�;wy�c����J,��S��I�0���ղw�d�[�K�3�U�@xx����th�q2b�_��%-�K- +�č�c��[�����������E+��*;"s���Y��h��㊆7�痾g_}�8�`�L��c&���t�'q���\���|�c��lM*[6_No<�>��<<�}0:.8�M��V�x����G���Eڲ5�uhm������?��gq�Rd�q46ǯ�;dݸS#����"3����̛G]4lZT��1vyO�$m�YԂ�G#��e��c+�[7�1G��q���Q��&���ǪVl�O�3 +��h�A��_�9���'-���%ܤf$�jΫ'm�K�k�{}�������W�U��3�q���BbN�M��3�:̢d�"�2���)=g}\Ѽ9*n����<�1��>锳Ꮥ�ɻ�&aux�[���nO�E�ė�6~��^?�/JظRv%{ףQ$]Z���s摵�31�N�9��Y���)���Q�#��"�P�֦�U�����ʞ�E��6��Z�Z0^Mx<�#c�]2f�-튘Y����q+�,f�����<*!�uaNQk�)n ������#���N'��k�v9|iG¥`� +��,���4�D�*i�ݒ�]�J�v�xu��델�`ܱ�8�&YǖYҌ�_̩���Z��7����ۏ;�Rܩ`'}R���Ĝ�ƸKґ���8�&<#��Y��{�Zܣ�$�Uj^��H��v�y�ɪ�ؘg�3������+�<_����q��u{�����=�n����;`.}z�vǝ�ꨉy&n�]��·�%;&���/��c;=+���L�/��`��t�M��aN3�m�ʛ�����}����o{��D[Yd����s<n�>5�gwL�֨è���O����i�������Dǁ�4��0);#fI��ѿs�l��Ů�Uѹ=�v���ӿZv����u:a���6 shx�]+��3�v�0nW�cq}l�s�p��NIkңU����S'�5$ +���;�Қ�Eކ�����t�����_U�v�P�O[����Q�5�9����OK_W�����`S�#��頉w��Б��<�lR�A8�������oN���{��71��M�c8�ܩa%3j�wa6��pԻ�0�Q�cւ0��I��q�g��RxZt16%�&l�F�!�O����]P���'�Zq�ʽ�e�N:a-�=�[�K8���K'Ox�cv�xǤl��8�]/�}ZUܯ��*~�9�1��������ǭ�ɀ�zb��z"��'獗S�_^�*ᐴ&켪���H�èH�X�!{�����CI�F�9��蜈EPw�.&�ܚ��_13O����G��=)��7i�Ƚ�[��1s*6fzn�zǬJ��|�-ػ�_�I��HxG`��/�N%'b�T�����]ڞ��Hx�<�C�1��.�wiD)����/咤O��]JN�&�Ǧ{����h�:4斘7�\⎵�ƏW��>Xo�08�>��p`��O�Tv�=�����X�����]����8�tң�"�v�.��*�ѩR^�wʺ֞q���O��m�6Q����z��s���%iW__�&hx���w��k��ʚA?���!dS�VG90�Sl�ƔC�73OnN��V�|�1�9�i�Gy��k�h�>�`�62%8�e� +M2��>�,��r�_=b|�Svm�D��_��l<i(��t�%<�V�"��`�D���p �$��̦Ĭ�渍W��}t����kcNVe�"�ی����kkLՀ�i�9i����#�9�_]�k~�cn�+מ�o<��~���b�\Z���볿^���O���������[T����ݟ���X�=�q���+k�!��>����[`�`-u�}Cګ���ʸCP�}�{��4Z+~�!j��ĭ���C#�����y5�^�٤����h]At\�@���vfYgw&��<J�^@���~0�U�bv#f�I���v+f��b�߸t����X0�~§��} +ޛ)��M�+�GF�����7�^Z4^I������vAMh���fk�4j�8�ej(�2��u� +�7�;L�.i%��&��<C�X���诟־�6�\��%<�#��'8'n�u1��-f�w$�:=�S⠗Ӌ�w���{1wo_ة����J���>13�d��0��l�J[�L��p� �eQ���K 7��E��֔Kа�b����Z���]��o�ḲӀ�kۙcWF��ƨ�[�rϭ���|Y��W�1�'=7&7��*Vt�n�2%����W�t��q���p� W�1��Kc6 /b�6�M��Df�I�^OsN�\���QI]� +8kN��p�����~}کW'�Zy�&i^����8���1��贤&6˯�[��9nf�vbn�|���V�o_?`\��=���{8<)��c�|��t{�s,2+����ZWra�����ݢ栩� f�]��K����n� ?��廰����Q[���lǁ��X���n��u;Ӳ��qQ��(�%���h�'돚>�z�U�MKj�<n/|��A�~!8��1�h���������W������Έ��VB8u�ד�S�Ye箧�J +���T�g/T����K�oMv~�5�=���NtG��ƤS#%�:u�k0�͖�nq���l��.�L9T��e��=�����;�>���-؎38��W�[�w�:?�|�vA�}k% +k9b�4��j^̪fa`C�6A5x����%�5|^-��%�������e�;���J���5�.���y�,�gwa�OoL8�=�YΙ�K�� (��\�����=h�V`����y;aW RN��0k�Q�)jI��ٙ�M��W�t�E ���+ؿ�K�u�:w��7�j5�(��;� h����`Nnu* f�X��K�X��|�;��\ߛ�jw畒�W�!@$����t�yS����[�M����}�C _ߕ���="0�e������I�A�ʻ���%�E����Cp0��2dbN� l�`��0��is�}|mBZ�=;��1k�1��&:�sdk���������!���j�u�w��W8��֤]�͈��s`̬��9^e�&��1��������iEǞ��/�u�-���Dp�wv�9����Á��%����ǂ���uǦ����Lh���U��/5�a�n�{;���D1�/�9:&fi�$4]�qx����LkYh�볨Mں:#n\{�8�8�#k�'��V�=��ip���t��/����?�_�7j��0�%��z�Ek��ݚ_��⯗�����'�O��u�e���8�wmFutF��9����,����趉:O�N#��#d�"ݒ�I{�p�d@�Jx�=q'�T���ڽ���掁;�q����R��w%�����#�/��o��W�.�4oy����$8�T�3v�q4��%\��W-Nz���?�ތ��/� "�NC6����!�t���w`^cܭ^�jwA�����]P�ҋ*E2�{���2��"�C7 ���@����F�\P�p�S�5�SҖp*yq���v \M��.��Z�ՠ�>>s:f�W��'0�N�H�vL���G%H�n���n��t�����䂔�� ĒB�/��Q7p"�o��ۗƛ���!+�������� ��C��W���Ղ�l�[Eu�YƑ�,�x��9u +c�p��� ���N�cV�>���k����r.��T�:f���j� +��9n��N^uh��WO.��ճ��^��^�u��2?[���$<-8��&f�5' ����?l�p�n��� +����Qp���ƍY�����c!Ss���~�r��ϑy;�R W�2?� +/�L�s`~�G;h�߷~�y�߮1K��)�������1���hϧ���OC���I��Ѯ�]��91s�n%78�=�1����D|��;3��G��Ov���̿ZGN���Wܵ�wbV�B3�������)���$��ʳ�b�wu�y�<<��}n�_N1��>m�������z���գ��l�;����]Ɏ�N0a,�Ÿ]�:��U�,���$؇�S�ޙ� M���@W�{����9£Q&���7����R�>q��3fg� �Y~\���(�"�3ż�΄[Ԛv �����*6�و�}&��V'��4�I�3|s^�9�:��0ؤ�YΩ�r�ʶ�q��{oIk�@��}���5�*`/e0[j^g�?}ܥdGm�/�ZYp����V��J7����#��ְ�q<da�L��M�u*�.����� "���0�`ʨUPw�@&nY��>��h�D@�K.jui��G8`GT�y��X���� �o�;������ C)�}�7D��J���_�8�nژ���)�.-peam�"���l����>�����1�&lUswa\�"n��Du��\�r~��9b���{"�6����ܿ-|{���:>�4I�^M)�fn����z��&ysh�>8%�\.8��1����֟����5��qީ�q��Kܕ��E��nN�~�i,�m,�Π5��o���~��1n6���|Q������U�O��U�h��/�����/8o����-ŻI;a7`�kO[�����^=����6�y'1��3閳��#v`�Y[��'�p}y�W��������G���àۃ����4���h�'�㌃1�b�!n�Za M�*p�V�H�<m-p�<����n<��l�slFڱ��(c3�] �N��u�S-��!+ph�)�J���ش +�_�o#��=�����l�t-la�!^�z�@��ot��{�#�8����<��"n~#�Y��%�:cʭ,%l�O/ +;߮pނ�Oy�����2������o]��/���� ���ϛ>�.I��T@%>�Ĝ�Z�%��}:}ĥ�7R'}�øG#I��݄�W�=-�\����B�\�V +�~�,��EB��ji�b��=6��4��oN1�̼sQ���j~t��Tϡ�S��뉀�/��hp��gwY�K-��@�%�`���ZPkp��ٙ�đ� �^��<K�a��z��¸G��^D�(�vn��g�[�|~I��M.���Ja�«ޚឍ9Ɣ�w b�4�fa���'�7f����H�5�3��;�����'#Ӓ�G�9�of��o��{���9�T06ǻF&�������QU����o���`_�2�ا-1�ˏ����>�Y���� H����,����N��S�Ʉ�O�R��E֟��m�q�����gU����ͣ�bǵ3�������?��)p��(����-���V�m���6F�Gv5pp��ܦb�z�L4|�m)MZz���# ��ipT�>;S�3�Y#nW� �}i��Cx�u�3M��I[̦�l��π��ψ۰q-n^�A'E�x���>y���Cܬ��V�3��q��3fr)�Y����k�+�fn��g�Q��G���2���+�K1��C,�T��Vk���k�q��j�s��"憢���@��<��.�@��_��}�����������y/�ȮNĀ5� I���,�o��~�,�ck�.���큾N�|�!nY8gC�Y����9��6�Wޫ� ����_�Ľ��/jK��z�=�Wڵ$�Щq�18A�g0N�o�X�Vi+�0�6g�o�t�'\�73|ץ`�l"@��n7�� ��I ?�w�v20t' \h�_r^ܝ@vrQ�G6.�P�0����`���?��,��I�Fwj1����R�d��?�=�7v�G������ym�st����d�"�6��wj�Q۵�A�7���ʽ�Uމ��|ܧ�'��ިY��lFf�7��z�O��g��֦����x'q��C����q��ȸ��N������qi����[ +7��NX�B�Gfе.� +����{������ �Y¦W&l�Q��e>��c��V�W +Ou\�_��O?�1c�ʎ�O:��<l)I�T��Uň�2��>�������|��Z\C�՜�lʹ���N��:��Cd��#S����[ +F���Ӗ�7�;>M:t�����Z��e�-j�ZD�)/̉]ܶ <3){��k;S�ӫ�����4:ͫ�愗0��)Xfc�sbxaʪ�����D��|�c!��R�*iJ�� /%@������po� ��;N��)�_�uЏ��M#�[ �p�T@)�}��+hH͋:��J��b�uЧF�.���� �������{�>� �RӀ���# O� �p��M/�J|�0��A=��kp�۵¨ݠ��o��P�������y�b��/���y�0��2��/����w����8�W��V��q�^�2+�&Z�6�4�� �2�s���`m�`1���^컕���k�qۭI�~����{t�0`V� �����-h�a���9Y��#�MX��9L���I�G&��C�M���Iae�c� ����qyK�<t9h����������G��6�ތ��o��d북��g�-�VK�S17�'��� �o�%[��&©W.��:wi��N�!��8'B��aK���cIEh�5�M¡W�`�`��p��+/�nk��H�.jz�}�l�O{OA�5R�e�Ɲz�ά�k�Qm�Yw�����o���cB�<����Tҁ|w��UҲ|��wK���6'j �Y�s�k�?�wK�7O�����ǵ�+�5�ygJX�|����'�#I�J�X��[|\T��E[���$pQ��^Eҥ�<k@�ϙo�[K�5�18!�r��o�������مwH;��M+���M��*��s�询c=��E��C=<�ꎘ�tq�3`�����MX�4�\�1�:�p����%w^�G�` �?f�wEg������Q���;�� �����X�E���R�ÊB�y��v`b��t �^�� ]wk)бo�W ���uG��$1���Y +��v��n� a�5�?�=���5���{ 85�ʒ^�4�s0��y�̿��X�E�괘{��-��%�P�A��>�J���e=�����p+Xq�N�5���FM��7��z��~C��J�^����F�x�����M/Nx{��������R���"�g�V�j���u���`�+���q��U¯���{��z�O%F>-���k�6�_��1��ny�O�j�0À#���p�Js��A���}��1��-ꔴD����K����}pdk�(~5*<��� �.��KJYܫ`G�nĢ�ܞUG�ʮ�9Q��j�{�O��{��<}���p����[�[������D��'�c�����9{{#yw�"kY������Gݴ�Q�q�ݶ���S����U��ӣ�,&`�F��굱�bǍ������w1��~{�_��^ �U2����_����-ݩ��뻍����~��'�<�����=2-dV�̶��,���S��]�^�.j}�R��}�bNI��D�����V%g��k3�T�f����~5�9���-��LH.X�T��2p�7���V&���{/�>6�z��h�w�~�,mEv%l\|5����� +��=�� +�i�q��'q��WQg�p����_Mk���>��}���`��{u7�{����!�'���[�u���S�^=�T��ҁ����o�.�ᅫl �������S��լج^�[/f��^�a��#N�l��#N��娠b����ep��\p�z`8���F�fI�ŀ�lY�������E5'��:أ�O�Ow�b6%��M�G;S�o<�����`���7%p 3�4$|�C�����%�#��M� ���ޡԢ���.�j��Y�O�G���{���{s \I�&��w~{�$f%\���[���AǕ��M���^���W���� +htA��y}�}2nև��gbQs +p/X+ s��]����m�����`ï�.���K +1�k�ά�;b�rb��BvI����닆�m� ���WB/dы2���gVсYTL�f�_(O�|�O�mR�oL*Bfq-p���!jV��M���N�=��[��q��cė�6���F;,~[�Qp�{.�Pcv'�Tr.=ׯۚ��,��,�L����6�"nO�+L7���7|��L�^(K���vl�ڈ]Қph�i������L5�L�����>maW����#1�VF�~Ƭ�� �Z�e�T�~��YlF�&@gn�pN�Z���e�Y�84�h�L�[�3�vӝ�"��?���Q� +w_}�e� +�?=��0�qD`��<��̪٘K� +����U/�XU�4�E8��^|�y�fG�?�&U�]_���]֓�(8���](��W#[x�<rOq���\��C:0�(��$��UЦ^�;�;o�|�;$-�Yх���9 ��%�S� �@1Xg�o�v�_�c5�:�5.�M;{�bvaw�_�> +n�,�[7�j�L�*^>g�1+z柲Em%�����n싸U��Cھ=#8�x���1�lB:��]�:Fp�ր��� �N��$�'��/5/�K�'}:=�iq�]���;ĂqG9`��>�2���zc���f��D�=� �e���=�{p�|�ʻ�p�z�����Q�^��^����M�na)���{5ƷK=������`��`+�6yG�!\(�LT�e-�g:k��Ɓ����������'-�~�:��6�:bD�;E,y�Ll4fQ3w��U���y*w&��b`;^?������šiY}�,�ۙ_�ʚ��d�ˏ�����?xԲT +�� ����ĄӨ�����nM���3���/Xq���iImܢ�!��~�E�'��{�M�o���ħk;5����Q�r�R�^}dFX�A~g��������U�>^_����p�_�[{�1�����ﳻ(��-���)��p[�>n�v��|�9�� ���k�[����9p����� �1��j�Xc��/�E-7⮾��Sֵ9��Y��<��!\ +V�)j���� �f�&��@��zQ_0�E��{.�2��:�W�D\W�b��������qṵ'�C�����V�<����n�z�. +��z0��ipP�/�Ĝ=�����������0�A�F�ߝ���~I7f�>�����w&9�m�S�������������t�C��q���" ��Z�"ܯ���G�=rV���,���u_���"^%/�B�W}`����>�;����9��5tk�fЮ� +����7S�o��z��L��wZ����[V�l�dTb�����K��d@)Ix���[�ܶ0N%|jubQۻje�M/��}uy�X컉{� +R����_�����8����E�2uG��*�%L"�]b�0�*�1�N����( s���&{�n��+�(�ɢf���+C�J�װ&���z�uI����Z���Wo���1�pǜ�.���U/F<%�P2�c�+�I�����#a=�P̴�|�b�����ק�Q�ٛ'uZ{�X�5���1�*6�?1�7)�"?�zr�7;Ϛ�O��]�]P���k0��36=��镄,���+�}{� ��R�#e����J�%��7�y�0�4a��c1[� �.jL�����0@��N�����;/��"��wrk�1b��D%�]0?�Ќ�':ק�����CS���'q����1��-b\��j.�b8ؒ��S�w�.E��zŦ�#������c�V���8�� +8'��qkdNX��z��{ �g���g���Z��O� \ܚ��yv7�o����NF厅u.l�� �t)���ءR�ۅ͘�)�3�/�m̴�h�1�͐[��vk��ؼZq3�$��f�#�HxA�{�}�)m��&�ɿ1s*�&;?]�f�������B��5 �� ���p�C�V��|������)X�ȗ���Oڽ���y�7��[�����j�ޒB�V���y�ʅ��8��sc^` �n=�~�b^�O.(�1?��˙ڏӋ�ߥ��,7��joq�`}�Zj��j��Y��ss���^�|w��|D��% �Du��|���=v�*�&;>��ĝ�Y7L�څ�=%�) k�`�)l�Y�>۞����G�������,�.�T�������.����&�i������^%����ܚ�'m���_�&��T��6Z�v�?�~x��YМt+y[cm����)���Q�7�^xo�iMq|�S�t*��Mpik��x}�e�ؚ�u�>�UF��Gۏ�-2f +q\��+2'j@1ɨM�t%h�v��͋:����2�����¶��a3�*nS1��ʶ�34%���:���<�&J>��4�u��j{RӃۮ��z������9®��*i�&�۞j;�9�RL�3��*fU�q����� q��)���-�d{��p��ݨ] ��hD>�]�K�tƤ����%i<֙^P�R˃��@�-�M�5����2��E)'bi?�9}�������[s�ʠI�L8Fn���_']zmhNּ3��ژ�mLu�8u�M�A��2��|G�� G����q���H�@<էDl��)g��u�{�j=� �zy��yqO|��kp8�9ܴ�A��W�/��}5�<��NT2̫�'��A�@����_^�}w��q��=���^Zy����,�"�t��a������{���C|^ߏ�R�'�yYua7�+���U¯70?`;�I̫�S�%8�N�Rq�øW��}�֥��pj^�HzuJx�n�Q=�[�����ܭ�u��q���z"������c�t��*����1s/bf)3a뽒v }��1�o�x���t{JP��Ӂ��Ĭ���zeԮU6�'m��ab�㞊�]�*8c���Tm;/D#㼋����� ���d��)7�n�BԪꎚ��7�p� ��P^v�F��<� +�^�>��'�f�2�Ӫq��sʺ7@��gEu��ƫ�E>��Β4蓿.�D��q.hb�fb����UA8%�!����|/9�ntV)�[����5�=�mY�[6a��X�'[+膵e�4&�}�I�ջiW�尙{~}�������Ɏq�F�>�hڜ���1���n�$= 7�a��=G���m� ;�m����HʫS[z���������ZVk#�V���k�š��%�&��ani7��S~��/��)�^4~��m�}gNv��/l��}�]�vf`ǡ��)ZW��U�o�a�Qį�c>m��w5�����"�5��]�6�OŜJIzi�[l^� �8�a�|��:�/��(?��Xze�~j��J +�������K�! ��F>Q�^ ���t!�B�'JQ�#�L���������ͫ�h͆���kӝ�q���P�o�q�V�y�o�C߇��>�8�Vrp���kY<���z�~ۦd��J����PxX��;������Z����(/8:>��Er���Ԓ�F��� PI��;jS�=�����V�?|7�黜v� &:����C؆��u�L��k�ڮ|�3g������;fU�R0� �\�������y*��sI8��IΩ�)�9�b��\���2Vl1��f�|}Fӕ��Hz� ���#[�]�.ܽ��o�ii������۰7p�^�� ~���v}I�t�<g�*�>"����v�����d@���|���QG�e��������<�F�[Ό:��m��q*��VQ��C־�6�N �vanw��.9#�V���JZ���S�����G·M�KI/�7��0|C̢�I8��Pl � G�| �Q�]N��Yy�:�x��4�3�~9goY.J/�oQlzI�@qḥ����荀#/��~J,��H������_�e��D�;E�z�ڴ�6n�|+��4���xp�iP��0�V���g��E�#�1ߍ�����X@-z�m[��ǝrvb�霰����6l��{�>A�����饾[���/~���a$�0�� �o�㋗�F}}�W�j��M�Hx�]�~~ӮOر1�:���/��~(�i��#j�A��gNzDmi�Zߋ����y��`>�pح�F���o���ȟK���lZqdN��):�N� �Q��$�6��M��">�EL��М����r�q��C� A\��4�W��KZ��~(1��F����8p�]�N�j(���`�]�A����C1���3?]��^�����s3n�I�fk}BT�� ���bV�KI�p��і��&iѫ���ޅ %c�ƘݨIz��4�ѽy�,=/���K)/b�4���Tn�([P�=a��`.�s�� +��$��ω�Ҁ�S>��IQ��p��Y4��k`���L���w����y�h��A�+�2��Q���ۨ>aFX���瓵�C��]�1N�8d�{�a�5�5��ڶ�j1��)���[�G�m��m���{%]���1%� ³%��ڈ�u:��נ���S�Ly�G���(�i�0��ﹻ���2K�w;ˑO���=�y�Qk����F��W +�/�ҤG�Lz��%���Kõ�K���:�����ޛ{+�[�%��ě���`�p����[+ 9������/#�L��� +�k�K{#���Q��ј��s<�{=��ļL������1-{�|�r}i zzG�W]��Sˠs��Z �_��Ɓ��k+����4��|�-j�1u�zN�좦��.�� h`.T��G?���6أ�)�R����q�� C�8�R$�W�.IG� �g��#؟�7u:� S�[���Tn��O�f�5Q��(?n�_M���L�N�-���Q�ٍ��Ϸ�s��4r�����m��Y\���`�t�-��o��X!��9 �NH�T�.�B�mø!��&j�ulΊ.�z!:�������x�ʭ +��v�����ۓz��C�ѕ'���?��A��nץS�:��K�m�y�W����!�N�Ӳv]F�_�W�.*a�HzP�졳ۓ"��Y�.������/��Ԅ�+a��%=���MX�Yx�v&Y��3����ʽ�� +` +��N��f�Ř�{�ps/�.VU�.m��z-���Dcf~����_{�9���Z)f�5ā/�jAҧU����B�y5 ����wI����=p]�ɂ搭���\��[ڕ��ba`k:�nY���wwWTZ4�!�9�����9G�Dza$�� ӈ��o�E�5b^��]ⷼ����{!�ԦAg'�e�qw���A���7)���E�5ȏ�w$�/���� ��e������HX�״�%��^������.qG�"m{�ֺ�rG�7g������^#�6ǜ�s1�Vq|1r_}�8���\��X��G��ָW��j)��Ix����FCz��F��#j5����՝p +;���i����S + �._�L�z�~�{kw^��������CP�����S�:�~sNʼn��o�@���S��]>9'�6mO0���Y������cΡ��ZxJX�� +��m���y�Y��~�W�����q�vQc�*mN�����E���Vq=a�u�����Y #j�I��,jR�����[��_�T�8'�'؇7Ǚ7'�_?�\}�81�N�L�aX�a3��������~W����{���(P=3KC&Ƒ���q;�fgVP�5&�HY����ES����VqCp�s|g��Yp��9n����O��t@-�Y�;����f�}�&��x�Z��^���q�ńE'��O?�z�̯Mv�ζ��ξ�Nx3v�����3�ix��,IE逤;�6D�8g�'8'n�*��ā�$��A�� +f�ů�6u|��KX%Mh�j�ڄ�*l��]�<��=���tH[q���`o�բ"�tjQ�I���]�� ���� P�M®�6���u˘)������6 e�-���ɞC!�D: �Q��3��!`�}W��Uԍ8��y��ʡ�׀y!|�i{S���$ܼK�K��{%���CD�Z�� +lɵ伜���qXR�B6q�`�u��ueTp:j�:{6�ĵ���%� +.���,�r8iܩ�L���/�U)��i�1�C������Ӹ�{>i�4���|� |��:�K��`�����9�����%+�;K^>�*ݞ`E��[+M�t�L +�ǵ�|���1�!�͎�_}�,��|���48�:��V�>aZ������y}�����(�Y�6kyK��i� �ɸUX�u���n<�E���/�op> NKj֞s����)��C��X�ot��n~o���W��E��g0+��͋Nګ'���ޙ��t�̫��X{*8�����[�G���Ķ�ݺ�[�VTQ��"���{o �����{B + %tBOit�>����{��;y�Gę5k}?mf�ZB¯9fɏ9|ڥ +z&�~;��|=�����R��IYf)6jo��u�`NJ<�#y����s�s%:�b�ħ�Ÿ�Ke9�RU�9W?�3�g +f�IL���0�C<�&�>'*d��<&�b��슜�9��!�>'�?��8�\��}Ѕ�Z�� +��c�Q�� n�k�F]���U����π6|_d�/4��˪�f]�3ʾ��!� +l����A�O�~�It��%����91闆�?�����kL�0_�$*�BE���F���@��{�����^( ��J|�E�>�o��t� g�ΰ��e��s��5��<��2��Ag*Lܿ�舋Yr��y�o�~��r�M9<��y��l"����5&ɾ��0��o�h���IC�{���A����D�?�`���y +�������$�X&��IG�ؠ��I9�o�q!��h��~|���%j����0V�������9��jD��yl�e���� �o������\�� >��e��ns8�^�?K˳{��9�b������i�'J.�HZ^l��S��`���[�P�cU��M���<�*��je �b��]x�����z�^�Il��(�g��i�GG���If�a���}��X�r4� 9c������g&6�BM˳�p1�Σ �0��1T�u�m"�R|�Zw��b��1����)�v��G`_���酹��A\/e!�%!69&�,��lr.��.�`�F����~����Z`�Y�s駉I'2R +��cI�7���8\�Q�IT�E/���7�>������@�)�����0��<���z +p���U�c� pB���s,�@�d���k��.�}%n�^ȇC1��_�����<�TIL��D��Zf"��t��@��?S�g�������{���-���5%˦D�L{�ŀFO��'��C�����~�b#���Jq��)|�i�8 +���-z�;P��G;�"��� k�)�IV):�<i�G��T��l���)�6W���q��a���K>��C�����1D���݃�pR|8��YmC{-7A���!�� ��P�s�.��?�Q� b\Ա��m����y x���)<�x�4�5F`_����S% � =�R]^������&��Zs_���:�N������ �^��<�t<�,6�cC7�Jެ5�_��Y��Ą��-�/N����jl���#��ZB'����`���y���k���RL�}nׯ5�t���h�6�>�e�4�:";�/������p��QR����s��<�?�`�-�.������!��clRT���^pΉ���~�U�0O����<�[�hk +�P����q�]د{���=�;pO� >x��y4� �L�-@�8W�"��[Ĕ$�.�`���f_�;� ����z����� �`t0����.xm�|���D?Td�a�&�g*v�MN�ՏbC��0X�q6�;�"#�;�^�G�1|�y��h�"���[&��6I��M +���/�2S�r�0X�-�h����W�h��E�L!����mRb��4>�p�w���U��f�to���K��B~�h-r��+�da��fșG萟�,����P��zH���S@���<��k��:�'���ܦa�/�����m���l)|�뀼�u@���!}�@�Y&�1�rj汘�x4��?E�mv����Z��q�Sˣ��Y%&�|g���(PF�k���g���u�1�IB��ڐ�b������K>�4徜�=��f>\o��9Dnt�d���3�܇�U����Xe�8�l��E�m8�� ɳ�١@�,�����D�P�]㦑���j���6�;��}f��nk����r�i��qT����\�b�)���6��<�X��<��J.4uu�iV�� �fl�F����xo���VK�������? ��&&�")�l{� @m徝�Jxx0P��RM����Oʑ5�� Fou�~:�/���)�0'LqXm�~n�]�D���i��)Tʏ%�}���>�DUd-p���pZiJr8�(�]j+p?�&e�Z�P��t�p�ǝ���� c$���������;��!l�Z��zc��^7��j䭌�`zg� �c�P3mS�<����7����y/��<���v��.�&��T���>�&�ii{������zS�Kcoޛ��l����!��zs�+�q������}P�պԇ�U�֪��jSvz�惡��K ��>j�� �N?q7C�!W[�^k�Y�֚��N C���� +.�D�(�H� � L��o{��뀗\�Ov�z8AO�"EX$�h�/O?B���*z�R��l�>���:�Iʋ{l�ӎ�z2���1��!�m���u݅�KMiN� O��3\�g��/shg*&�H����k�k-~{0P��h���7���!Tؙ��hj�h�o,��u�=�S'��~4S^h](G۳���IUE��yA���&���"��J�u7:��O�S���&0�K�yϧȉ7G0�7ѱ7�i�6{�A�#��Ֆ�7�ӄx�6�tھ�K�eE�=Me��冼�Rv���Yj6�4AN�J�I���M�ϔܴ{*N�}ue��.X�Rf��n?*�d��ov��w;��l�y��)t��ə�Vd��V{p�z%�LS]mQ3������Q�Obo��������m���r�(9�n�e8��"�N0������?4��_�ḻ��v��N4�f'�O��е�Zm�v��-�<�!����?�x?�m�);��"������{��}w8��Vך�ד��BE���=�N��~�8� ��/��Ԙ�mHx4[�*�y<�n}ޗ�!d�FO�;;ᶘ�xSBK���e?���o��BnM��##���y����:1������Uija��V��)R� /�y!ٹv�0F������qs�.���qW�N`��/c�麱aU���.J��ty!�o�觝6��vk�;muγa��� �MƄ�Y�.���^?��<FI��E��:a_t�P7��jK�+�8;�0HM�hG�G)1�q|�q��`��s�Iי�f�6�q�*��F9p���0���y�5����]��!��9w!�o�����"�����0�A�J���=]�K�֜��PT�Mďu�D:��0��+��j��r�|�r�}g�z����);�廂���x���7T�Օ�h���@�������Rd��M����\��Q���%��`�@����d�������я"W��>�׀���@�m�#%�L�Ϛ&������B]W�O=� [nZ�)x��^�vn�R7��B-���9q���e��Ԅ����8,����@~���$|�����Ql����HD��s��xo�6��z{��YR�1�IW5�����]_h,�hU�6{�� +a�� b�� |���OD�k�8p,��i�}���5w�/���|Sɍ��kK�k�p�l��u�<�5�2~��yq*�� A��{��{�%7:�_^�ދʒ�\�[�=/�9���ۑ��]�~�&��Zs�K9�r��-RV�q�[t0����o��^��y�P��T���TI���~^o+�Xm$�U�\W��7ZJ?l�c�G�ιߜ�HI�'Ӝ��n��in���܀�e�?%��[�&臙Z�kH��?��W͓Ԍ��{bR�u+��0���y[L���W�Ń�F����((��g��0I`~;}E��s�M3R��¯�*2�������6���p0��PVf����y�X��|�'�]K�_��Mw⦽��9�q1�<�-�^�6���r_(��wF�߮uCݯ*�1����'���w�����_���>金_�>+-P�A���0���v�����:z$"���DZ!�gj?��ğsؤ���w3�IN�<�a���Xi�|��|<�G����|�i/ �����Z'��~�텪X�冬�bRԽŊ����D��ތo&).ys�j��2�@�X��J3��8)��0.�f�=���:���T%�!'���7HM }��q ���C�o�m���[���{J?�u@��;J���D��[x0��_k�}���u��ݭ��&�$9�➶����Y2�����bm��)F½���?�^W� +]�� o�1���n�E�O>�&����$���w�<�����G���+�քIy�+�z�j��E�~x4R�Iߟ�n�#ト�sSב��TIo���m4���Fn���� ����o���K͐w��/��#�Ng�p@[2/�\��t�>�~�y�D������R���$��k��0#�W�^n6�:�7�9Ji�w-bB��a�b˹��7� 2��ڜg*N������;]Y�,��4IU�ӕV\��X3sw����R�z�:빔��JVu&������\*k�[������g�MɎ��YκV���^��lmћHП]�0��0��/��s�o4�ߨy ��d=��|�B|���b$���R�H�G�g'J�n��|��A���M�N{��-rd�?���xe��~k7H�����M��cq����I��m�D��$�ay��-���7�^k�q�6f;.7罘��v�a&<��$?;�GW���mED�KI�փ_�� x.]g�۹��'��7e�@���|�az䳣l���+�l2R��& ��NÃ�������b#���(x��A\�Nw��q�gEl�M�Iq�j��&()���{���`�(5c�b�@E��%j��`��4`�3�Յ���m��Շ �qr���6� +ߜH��'��eS�z�ۍ�R�\M����������Y��9lov,!$�ĸ8mS����Bo��W�;@��@���|��+|<<H]��y��CKy�CJ|�'�*��z��iVҽ)F��1r��qf��r/"�$���WA��'?�p�}M���s_m�&9�7'���2���I������$� �@)a��ŪX�G�������_��}-2\�-扦*�헖C��ea̓�����զ<'�%��ծ��'�-�Ee���Y�2�N88�*�E�D����W����]���qL�Le�o��L���96�,- �,��ܜ�Ԝ��:À���W{J},S�ܣqr�~_�'�0��Y�b��j_i���K��{����&��;ӱ��RU��c1)��� +���JΑ�Տ�[�����|�����j^�c1-�V,䚮�'�hj�_mwQ��z�Q}H�k���� +�ߟ��D��Lq`��� ��2I�9�d�m�A]�U9O���RF�C -��V+&�0&,[i#/�B>/V��Rh�2B�Xd���6D���$�TY��Ä�`�{��4��Y�A���r�n�#�4��Ok��Fi)+�pϝ.���(!�plƄ�Q��L�U�,��9��*䟵���Yr�!�y��� 6)6�ds&'�Z$�Lm+2P.,�`�rɚ������jA����������*R�Q�J@y�n���Y?y��9�T�K4K��{=���*nnue������?�P�z���~��ܛfF�����K�8_��֚�1HH��?�`�{��pI'j��� "�`(�}�7�m�>��vW��Qvf2���:CN?!����?n��z�GJ|w��?j�Ӟ/w���2-Ԃ?�z1��ø�C [�dL��:L^]�&�dy�8,�����iz�M�.��r����8Z����Վbwmg����� l����z�2��A/���hY�m�p�"A/Ԅ�Cq��=��vwY蹊Ybc#��pUeʃY~�����Xʍyy0�P��� +�om��`�qX�*�w;��4��G����G ���>Z��rr���&x��N�{Ù��qR�i�]|&���)���1T�~k���Q|��p��ZS���&��u�?��%=�`���M�?U� �|i�ϵ+�:�-��J� �/^�Y ��u��ך ���h������g.�A��Jk���^��n�+�/v�'�^�+q?!F�"����ݡ"�(��ܷk��������t�����b���b����v"f�7{�ው�/G�XuƯ ������9a�Ӄ�߱�Qp����<�M�\`b��U5X�*�bj�z'��ׅ�ֵ�>Yǘ��Z�4'��jK��� R<��O����rv�cMu��f1���3E��2�}��&��66^�UVl��}SVf�5��hNyg���Z��YR��Ć/4g=��������(5�"b��*r�J�)�'Y�c�=R��dfP{�1l��x<Mj��7l_� p�*Gj��^N���Xm�z����sR]6: +>�+eK@P�* ~(���]*���·��)O���bf��݁���S��)r��0>Z�?S_iSы� +ޏP#�L�ެ�e�[kOm���;���x ��3�"�_} ~�d쐇��v�K}wGJ}LbT�q������~Jƙ��o��g�w�xn��zIyIN�Ȼ�d���Ϟ�'�D��_�/�:��K�B�~�GoYz��d�����3 ��aB�c�&�"⏤��#)��t�Vr�����ɹf l�p����'K Y�g�r�e��;S�J.���Ғ�VYI����U6�?;5çs䢃��/ߵum��k�g+&19���#�q1;SĄ6R����2j�U�):��s/��Q����� .ϵ�]8�SrwK���|6;�>�d:��$�d���y6�(e��2��������π��j@�nw�0�|���o���s���x0��?q +�ZK?M���c,֧������A�Ӵ��B�B[�9v(�D��&;���N���`�����O�c}��ѷTB�������H_���)&n��ћ����ZF��1�"��l���1z�\U��IJ�m +��Ty��n��u+�a��̫��Hv0��?'%} �P��'r:d_\�}(G���cE%�`�������9���~)��Kp���p߃aD�am�bC���Du}ғ��2/���h�bO�ٜ�ܬ(/�DY�:��Vy9l��쳶9煦6��J[��e�� �d��&��47��:M�M�s�`ߖ�2����?쎑b����J�q����V��`��,�*#���1l��?�֤��V�>0J0�dzl���h�`U�I9i�bt=�/��{C���2t�m�=L�~j�`�Nd���¯ +A��8-� ���̗�J�|�Z`VT�,3�,�V& 9i��m�w�k�~�!�n��"�U�$���.��6ħ�1\�Y�O5�p�F)6�4���p2�y�>� ct깶u¤���+ʡ�����A�7���2��%"g��:�j�1���V������}��.x�3��z�+���%�ïU~�Œ�v�G%!�b���D-���<�m� 1��S��������v|ҳY�u��l��o��mwzIчc�T��7i8� �����4��<�[�X�%m�a�e�4�>�0J�>gg�c��RWB��t��) �Qf�q�[���-�@�n�bS���aJ�lm�+Eu��F.�2�F���M��轾B����W���L��D.5d8OP�J��/�|��Z +�L5�q�}cQ�ݵB�?�� ��E� ����sgy$!�}�c��)�˭�wz�)��&���+U-(px�� >��$-���<��J+,b��+�|XWz��|%�&�\^hA}7��<�Rd�EMCX���4��p�����xa_�8���Xї��$���اV1!�LYS��ˈ<ෝAj։��5n��2|�QNH��3ᖕ�����0S��ORӷ�#��b_Y?���}�DG�*�tmC��ՆB]��`��{��`X���~T��:�QL�>_����V +%�Q�וN���.��rg���, ���#)5���r��~���n��Z���0Pp4��:VrH's�Ly1������R���J�c�K�qN�M�nfiY�}�7{�LP3-�z�i������,�8I��������/p5Nc���[$��0=�`��x�حh��#�k�3�}g +�=I.�D^h�Z�W�:�Q +Y�:�d����.�9_��t�8^I�QCQ��Fe������E��g���d���+<�UC�/v~8��%&INJ��#i-�`���ڎ����4��]5�G1��+x� )�;��>��0#������QT�� �ABƹ�g�U��D��3q����F���ŊԵ�G�U�>�®���H�ފ,C/;e��8�D�l�6QiW$(U4��,��,��Ɲ�r��;g +A�vY�Ly��Y�f�`eovW��W�7���������t�P5�S��$�������h8Wc���p�[p0��3O�2l2>Ū��*j�-2x�������T����j��z�r7[!{=U��6~�f+|�����u��|9�(y�̧D�G��;�o�/� +�u:Ǡ��4��4�[5|�Bk��r;���V�چp_k,|��u?��X� Y'�hX��ֱ��ڄi��&�m���c%k*s�?�v��㞬�� +��Ӭ��iF֡�Sz<[A���l2N��.t����m���"�b^I<�f2��r5%�l���L*$� �}�u�Nb�Ku]�Kumg�UB���4C�?��5l��"8U�7R�� v��z����q�' ��I?P^|6]/4�W��ۈ!�^j̱����.��.v5���'�q69��d�Ur,�'�+Þ�١�t}��U}�#�@@ZmGynuS���?��"���Q*.䃊 y��H`������>�v�{���n5��ڬ�K�+��Cu%�x�Ur�^�}��"�Q�Ɯ�����G2L��J��b���P�+��$�����s����B}�i�,f�=��Z_ƻC%&�|���5������R��QKv��$��� ��4��J�����+��G��r��w�W�WH�>Ns +���p��r�?L������}�n!���>L�/G�q�]���EY71�9�qaW� �W����ޠ��FJ�-�(����X��&d� endstream endobj 42 0 obj <</Length 65536>>stream +S��;�L6�ˡ�^R����7��\��%MWR��(�W8���"ȟ���k��ž>W8���i�7H1߮e�|%��[P�+GP��g ��ە.D֣ͮ�d�H�8��e�N ��>r�<���ڜ�ڊ�q&�E������8�6�E�@?i�d݃��^u{����]P��W���F��ԍ�`@7�'+�MKG䴢�.���.�Þ�Zr���o��2Ŝ���l��Y�F��Ur���� wXia�0с�c?������������L�����̲�օ +֮���'�D쉐��o�ҋ9EKm�@M�W*�{O��}�,ga~�Ch�됰��~.N�w�@!o�_�'�9t�߈x���~T ��r�'��D��}9���`�xd�����]�>���z�U�U�'��~����B������v���'-9���k�.Ϯ�{}����S�co��dQ����Jƞ�[�5�^��n�#�:P^�����N�Wie�K;2�v���{����������~s��� p8ܾryx����$�8�NJ��_[l�u��>���iK�x�ʤk+� +�K&(�G3��c5bRp�"V���HV��,IzQ��Wu^�-lL��|�����If�c/�n��Kǫ��#���ƻ�A%2��0�Zat$(�� ���>���]��Ǐ@��ݼ�;����@��.��@�+m��{���s �����jGq��#줙~�h�c6�6�q���v r%��P�Πw7P��7(�����P̧� ���A�o\E�j9�Õ���[�-���Ʋ�S���*���Nv�Lǿ�Jq./��D��^� �x����^����� (�3苓���?@��@��\�}�����7 ��y��U7�L�M�`T����j�g���vlF��2�R��]I��������%|�r�z �ǣ�wA��������}�����j@z�N�#�jt��0��b� +F�d%M�ݚ0%w(��Q�W�� Tx�(������c��7A���z��6�9p?���7�"�[�?���[%�z1>z��y��m����Z����I��V�����}zrw|z��>���}����@n�ݸv�y�� ���O����|��Re�m�O9[�Ӂ�?���o#�M��-�G����q�1W���A��><|� +|���-���A/���>~r�ut��o����R>���Y�� ��ۣ¢qG�YYWy4#�nM���M��C�S5"�1-��+Qn���O@>ϝ@A�^���s�:�p���n_������ +�]�.t������-2�����ׅ5:Iy��'G�G +��C���� 3�롹���Q�%~����3P!���wx�������<�@e��)a-���e�kS|�P�M��!Ux�VPt���(6�7��W߽z��ˇ�@�E}�v���}� �x5SI +\�B�XTt�Y���&+����%������ +�Z@?�Y�WQ�1W�q1W2��A/��>G�����q��G��ϟ�D���FNyЅMu��~X�&,�uU=㫪��Ssn&���∏0��y��]?�|�z��r������@N����O���{����@��[-��� �P��=^7�N��D��^&ʩ�,��jX��j4�/|V��O�ǧ ��<�\ނ�>r=��������#���(�� Fv�u����0S^hP0�Ø�ծ�OF5C'����Ǐ�����ʼn��{����8��=@�=��OН��qp=����'P����X��ת����:�G����qB��0!t��M�A fc_���/*aEw��WR�}%zy�b<<A�����v���M�?�������u�����wW�C|�sr�-rf驖_~���/r�u9lg��0�P�F�H�\�*yTr-��(���eG�C��������Ao�z���SgЋGOA�N/A�!��Rbf�~�����UhR�լ�Qc�z�s=��Z�Sdrĵ�Oo@��9��_�����}��-��@o�,�������30���_�\�9� +Ã��%�ևL��;����.�=^da�����*ʁ��nS"Č�1�м������?^��� ��������A�n�\�)���g `,��|�B�θW��|�� �4g;͍pR���5,�:ax��ډ�>�&s�� �/1�ew �y�0)���<����Ƹ�~�R_mw��|��d2�y���8[_�9S���R&;Y�õt�^6˳�r�C��5�y��<�SI\���ؼ�Č����Ļ��T�n�K�P��&%l��y��#�*־�����#��7S5� �JTʽzd�sQ}M|WM}$E}C�+s�'��Y�u������}�����<%y]����u� ޚ&a�j#f_�-4LW��S���a�����(�����(�|:�l�Z +Ӆ�>NJ����#���N��~sq{�\�� ���v�(��V�j���X�����Ut���2�E����������^U�S�֗76'I�⬬�!���y�"����^���ߺ��r�s���]�8���|V��@=�(kj؝����a�V��'*aK#�xe� a��������CJ�E_ ��0��݇�{��wv��&��M�:vQ+�7Fkˍ�r�QF�9^p�֚&��k:NW�[v��z��(���P_�I�*� �����̻e�i��|���}�������u=�ߕ���?��'i#5T7\�<�Ա����dw�<g� ���c�oN�Qd�Iu�#6=��?����2�G����%���k9 yI�Iw�����%�(��^.�[Մ�:��~��St�R�x����0�H% 4u�[�Z�t+���z����#���wOP^X4� :�Z���u��OA�A�W1y���a.�<z��P%�`�}��`�\ᾢ�u00;S�����j?3z���=.@��!C]6:ۑ;���ݱڡ��a�װ 2!�@�gkx���I[�l��a�e�2�RHܚ�@n�+�kS����&���9��K\�����M�T�7�6a{�������ESU~$g�%�e���"�0(vdB����|w�����N��U� 4���Z ��A����*jlI��l�a2��ʊ�/�U��[��$����&on�)�dz<���x:/d�f�8�ì��nJ��(�po��6\]��K����t�f��b���*y~�t����!S�Ҙ���y �TGJ��ʶfj�F9c��@��̌�������Z��d�G��FlJ�I�Qn�P���*j��=G�і�H�9ur���b{9�Ϫ6v��PC�nT�(#����R���ڼP�b�o�:�o8Y���d��yT/�����hY����>�\��N�͆����4'��+���*�+*>6W�xN�r�7DmB�l��d�q���i8Yk��7�شՍ�w�96r_��_��i����UD)ZxaKC��Qo��p]���>7�N�je>�W�s��t��:������ i�:/��kEX����35�;��ԍ�"v�y���0��U1;G�K����n����v�Fޙ�$9, p����ۤ��E���8�@M��i�>R +�;#�eu����"��e���V�ֶ�D)��f���=S�X�T!f��2�:*�m�I��0�`#\1���L�VD���1J��0)tu�͢2��|�Z/���8:��^��x�Sv���cV�U�U�C��O��e %_KB�L�p�� +ځ��j��c&qQ&9��z�m��>���*�p���|��l�]|���u�RS�Wq13���Qt���%&d^�}�Jx<[+�)���eC��(��bʡ���6��z4U/�ʅd���ݑ���Z�u��mS3�#���AR��-vO�Z���Z��d=ag\�d$�$|�����hھ�XU����鋅�~������ˎfʋ^��8��x��u��暔|�U]Wg�i)*d��-)z[D��Ki���$��4�K[��f�������y&��L��Vd�ab�F�n96��je�y�O2�4�b]�i��K�Ա3����ۖ7�WFhѫcB�NR�ݗs�N�,�Ţ��]+����{�*�:�&�����+������C'��#��� ߵ,�Uł�%l������0,D��=cZi|M��]�f�+�'�u��FϖkZ��D��rU��Z���j]�Q�,<�l �]s��β�Yqo���ч�>��#l� ���0m;���02xa��aaT־��= �|�:FB�4q�T�z�DǟL�BMX��*�<M�9S��' +.�rY�=^���K}�� +<6�Ҟ/4����E8�zr�O��c|���$�@^N:[oU�/T��4�X�xY�X�po�*�ّ��c��ϴ\�+mdd�}�ɋ%a����t[�]h����_�aY��Y����v��y�%!ߺ���,�!�YR�e���?V�3R���Ve۩�u�*��*:�-��^�ly�EFMӋ�q+���2R�|O��R��qJ�q�o��ZU�\���t�f��U��s��Η��狭";.V\�, | #%H� �3�\Ek��T��c���t�y���)?�����%���>�ݤ�Vƙ���|��Q\��BCױ��Ǫjn3)xص��w;}E��#��}1-SV��W7ಏ�����/�|�}O��yb�q���Ԫ"�-Ե� +s=(�#%s���8Q�5����m +V��&n_�?_ +O�v�9�qʎd�b��Uz��p�C0)ɀD�Ƙ٧���yzO��AxL�А +�3��Z��Jep�EU#�\m�>_o�L�]G���9j��f����|�|����^u�}���y�l�X�cWp�H)4�I)'jz��J۬`�����m ���Q��g�M�)�9�ȯ��ס��8]���-�v���5aé�a��[5?ָ��E:|S��~�%Aδ5��K5M�ڪ�ˍ�A��x��x^Ε#� +J��(�}w(����=N/��EMR2N�q���5}խF 2ݒ�>������J`��}�Z�]k_��k�awr�����N5��4�ؒ笩My�ѝ�֦§�g0����rm��(6cB�d���u�f%�h���#�%���b�TT��*��r�A�����c�8�pſV�|�9�DI˵�� �"��rG�� $�r��?��HŁ�,ն/7���D�9�h +`�*�=/�2H���ک�0˹��v�n7+�B���][���hcC�0~��%���,mS�G�3�0F�<�bv��>��%��)l�@~ii�t��W*�N�������+����eQR�m���]6v{�4��jM��b}�yF��Lѳ�_�"|��� +�Y&�*�H�]�4ǽ~d��aű��9��@�Z-2J�9faS�3��jd��Vx��Q���8���fR`�� +l�AՋ�gH�F�J?1�8-`�/7��i?�q�GS�t����`"��<Kʜ�|^�F���6��=�JH1�ˋMJF�~ +a�������?�5���<��.V��~n�xZ���\|�H/���zZdl쏕�a���۟�B̚ᑪ�¨���l���g�u�H�O��O`߳ۤ ��4��3 ���b]���n.eg��R�f� �_.r���`.������{>���y�T���&��O#br\���Y ��i�,�? �b����j)��5�r�W����v&i���U-f �������v +p���v6��8�#�0�%�<���� )�(C%���C%!�4KH:[����T5u7`P +�6���}����D/��#dm��;�P<o�*�__��a�Y>eo��d���u� �-a��bD�n�2�ݙĄ�3���%.�XC+>^���-����k{�6+�/7�?W*��icjU� +�{�L���焜��}����-Uw���M��4��%V5��|�}Ѻ�4�/�!��tL�ut�u,��l ��g��h�)G��"�Q�οT�u?�|<:��ݖ�ڐ�l�⡟�GW�d��3�/U��� +��9"���T��o�|�/-a�[�����YQ{�e��2B�AFL�����jRα���?��:����'hI�z�i�y0H6������!��VO��d�1rw��yVqyɁ���5���"EM� +mRn�M�Fe�<;�.[����|�Ȋ��9yW��4H@-Wל.��`��5է�u�����\ҩ�4�P���C��Q��3�"m!�$�d���5k�H+��V��]2B��6��T7�_.�u�jk�s�����I����r�Ӧ�SZY�PQSq��4d[�m<��پ��n�BEZ��@Σ���B�bF��bC�w ����U<�e���;��ΰ� "J�09��v7<�ߛ����> o�8�uY�ad�J��t��`[�iۓ���"j��7k����t�g����;���|��8�gu��?A�ۛ ���r1?kj�f��S5gU�'A��7�?� G����\����~��IycQQK~��oUp-.nOZ����4�J)yk]o7��oN@N[f`���È����'����` �K�U���O �.L�j��u%�d�+<]�Q������3�����5:ڶ�&�f��#N�\ʏ� +��U^���Z�C }��E���h��\�s7�+)�̣��s���%�_�U]��<�C8'�-�VMm�m��<Q���5�ңqD���O�k����a#���f�%'j�MDL�킸��Z��i[C��Nr䝊d�@oMRf��0*`k��mc����`������ixH��.K�[W7t�¯�p������a���iZq!��'� &�4F�_k.��\�笭�y�X��d�:�q���$�e�:��n�� �MV���`SqP'*F��2r�?�A\x:ϦZ�t�]l���(�'���s :ΦDDn��}����� +.�6���,|!�r��s��A, +b�UEN?�&��O���[�.�c�$MGY�F/��X�,4��aCe��w&%�\���sL���]j���@V��{r8��t�����;RJ���5q9� c���4� ��K<�UE/>���� +F�YJ�6����^��fXe�oBO竅�چ����Z���b���w���jN½� \ڏ������j&�$+/���̉��;W�1�2\�~�y�`]j���k_3w����j�LK/����iX���� F��`��o�R��&�q�z� pof�@/���!"��x�5 L��vg����s�Q|�R�jS�P&!�0MM���o�@�1�Ť�=%�@�(�m��hks�뻑߶� += ��8����9��7�Ʌ?6���79�S-�Ȫ�%��AY���b�ߛlڑ����[�վ��rU� ���o�t�ܪ�8[��������~K3����L��d2��{bb��F�{�# H�#��@)"M�4)��d����ܜ�.��ޫ�����Z����WƮ�'�lξN(:6r�GF�3���X��/V*���q���K�1�2J��uprݲ��]Uć�O>TRK�JZ�k��䝦�k��#�X�81�p�Q��zf��v�<S/*����_mL�:�o��IJ�]����o�jkl|�l]��D� ����n+�q`� d�R���z�i�`��b�Ŧ�� Z~� 5'뼒�yA/�rX�-�4&�>N��=� +��='#�����w�h����D�4��R�}cG��m)4re�YU��pG���p��<2�#-�`� \�I�>_qn�����,��9Á- �B���O�9�c��ᑑl��ȭQd(`+�C��ٺ�@b���G Q�� �1��]�.{��[��-��.x�:�x�%T����iT�>`�^9��6�H�_�WY�� wy��H]O��QT?�]F)���#]S�x�x���!�'�0㑡1�o�^��eOWӰo +�[/�E}���=0�e\����#И�ъ�c#гu5^�z��2�1V��_h�+~�Q��J����j��u��5�NjL����k�:�%AFyf��U��G]b�{�"�#e���w=�jg��5 +[FE����z�Y/7���]Cc�[�Ʈ�wZaGÄEMG����)l��!ӧ�� ��F�|3$��v����Ao\��8 �$�W}pJ��F���-�ס2w5��c���W+�Scs����u�=�M���ZʣbV�빌kM���S�Ҷg�)�9bᾁ�_�bv5��R���r���"���D�٦1q����aD�g�Rb���i>M�ԧnj�����9j�S�r=������g�¤˫}�7��� ��<��{���C[I�}��{�5А�:��/��{'Ɔn���w+�0��6�QkÐ��1���y>g[+d1(�p��9��������tk'��bK�=SS���]��KKPrJn8��?�O�!C���/ �Ew5�W&�i�:�~^�!�;'k�KC�P`��'�Q>9��'r�,�p����Tx8G��{����(��笭�O�S�# ��(e�It������0�{���'�l����Q!�����NL���^B/4�W�ߚ��e¢�r̯Z~�y�$x{��5 +;]����O�iO���F��y�m (�X_}���Y�O{b숹i�-|�r7'p�+���yL����������� z���o����xfH�͈�ݸ�g{���u11]W[vO�Ͻ��g��P#�c�5D���5�(��ǻ�H%�!d�ʐ _ T����>X�3��|ΗE ��� �:Rő�\y�"��:�=��Ҕ}c�;����p +�(�:�-�%9��)[��؍�Dž���k8�)g���ܫ���<ƾ�U}� `zTlĎ�;6 +�vjE��<��|S�[U�ܞ��f �}e�����ꨝYd�m���|m�5S{��S �e��kO��s��>���T�4�I����-�'l��������)>wo��>\`"N���T�"ay�~��>2w.�.�6�[jZ��5�� ��h���pC�K��s)��� h��Pp�(j�)y���G}64=��us������o.�s��)����֎�'�p�0�ʌ �/ccޭ�9��X��%f8���ρ��������/f�:JJZh�pM������IB��@��՞��ƂG}���QL�(7�-��{2zski/��P�w��T�`�6���.��rW�3@�BWGq�K}�\�E��3�"�,��S�`qf�{kw_�� �$���9:�D�%���R�k��Җvc�z��}��S���z�-f�(���Rf�rw�;1.�wf���~��R�ه�6ltku�����|������/t����cşLmĔ�����#�ؖvmu ��WOܚ�����s��}@+�fyُ�\�Wk������A�n!B����S ��` '(鷕���� �҉�8Cͺ4�M�KF+��������C��OPr>��������s�խ�D���R.�'�^�.��{\��+�mku������`��f�.����pv���Zk���� O*����"�1�+�]-��_�R+L��^��7'����kh/�i6 .�ۢ�ዞ��f�Vy����)���<�H �6�*uJ��{JF�ZO��0������8��O#�o�aD]�M�3�����[z�#��L� ��'F.������y�u�ܑ�t_GG�h98��^�1ML���䯹���Pz�ġ�哣��D��J�Ȟ���'�����1����⊎�,�g�U�T��v�E5kb�H'����(9���1NH�v��j���\��2�:n�&���>�����c`�tu���DZ�ذ�Qr������:1R�_���V�xS�9Qd�@��iX��ID����眏�H�%��R�_�3CK�c�����4)s���p�_�g�o����ʟ�uW�tO�#s�*���]�7���:�42��Q`�-m�x��^�~�C5>�6�O���9�L���Xj;v5t�����RW�]k{�������-1!YWz�ه�ޕ3�612|m�:X.(�����_��d��09}�_����挪�8�XM�4�d�l��@I���4��oΡ�W�iB�)� �2d�BkvC;��|J��5��#=g!oc��@�D[�8� �pW���+��;3���~H�Jw�cC�d�8�8HX���J<�9A+rN��)B�o��هJS��T|�eNP�'��vd4�Zw^ߐ�dc���DA�8$�� �k+ g'��˫$oO��#�T��������U�0���H�W��~��<���fw���1X��6 +���Fg�k����d�L�ӌ��GP�/5O�3I�Ѣ����[����[c�A�6ӧ�SӴ\�����=��_���W}f���jg��c�웅/:��X����+�)!_��] �pm�n��=OԷ�|K�ɥ���-U/VƉi>S���r�·eoW + ��ʺ�ҙu�ґuߧ�e�-+�' !�B��J������%��k�(��Z~�ī�yf�^x��$�/p��Z�7�9'1Ѷ���� ����u���[}�P�>mG�M��g��-v�\�&��oI�;ƣ&���i>-8��8�Ò4�'F�E�lsn���4�H�!>�����Ix�B]�u'��VP� $2���փ���3�E�ZK���>�6I +�C[�|Y�CJ�9��W�� ���>lM`�\rV�[�C�)Hy{��h�T�{}s�m�:櫩���(���� �>�&1i> >�#8U�M��!#�W'LLH��YX��&�+c�L9�����}Q�Ⱦ���/�SR���"�z�U¬��������'��e���U�D.���!p��%��W3O��ʯwqek�����}�p)$싅���11.1gGM��u�Rd�rwi���xV+J���^��:�����\�D<����l��S�o4����@o���Ӓ��#�*xd}4t��nOI��ظ�,�D_Mlʮ�T�å���^��5�I��h�'����vuK �ڋtTF�!�=��0#��������$&aWA�;P�*��\���띯ΰI�暁�8��憾]%�j} ?�#����(�ʀ���̐���n)���j��{c��7k=%ީ��44v{��[�^�?�3[��.�1T�bc |��w�p������9��9T�Rr�%gb=���=K��0�>I5`��/\bpĮ�P��l4�W#�tWU�r�̩?\m����E�E��j��v���# 7ye�]]��-�H�y�&���"�c�ґs�6���1Rdmɾ���v��u@�l���}Rt20O�^�x�o��w�ZOG�9nGG�����ÿ�u�������U!�j*�t���� �=�fo�\�=���D����]ؐYa�=s$zs��6EO;7���ϹomC}��nO����(��>1�bT� ���>�#�����-u�_^h��K��uW��=4�����^�y���e�*.�h��m��^��� |��W|sFXxc�^�)�#��O�11������\�=���)w��A}�T����~|�o�Yq 'f{��a�̀��bZ���yX��j:��+��0�W���7�j|����<Z���٭�f��ߛg�{�>X�nm�y[���ȉ9����Ɗ�iLҟ����C=�JӚ~W�{^ߑ0H��=����D@c�}�Td���V�KC������e. 8�>U��@��{�;e� + &�ޖ� +�5B�} +c�-{ln/} ed]��9�U~�1���CX%!Wlӄ�} �zm�2��]���Ut�қw�#}�������- �`Gŀ�, +�^6h)`cs�C5'��bK��4.y[Ʈ4t"����4`M��Łme/~탼=3K��E�N��;U����v��,*}��}�������Ȧ~1`�N�,�D�c{�MSGҕ�K5�;��)�R$tH����ڮ�����������͡����Oߖ-nmm�c��>0��Y��=��hs�,lsE�����ycc���US+�J���N�`K[�A��6���{�P�{8���Gc��m�5�M�Ma�&Q�v "ҭ¤���=]s߁�m���<|bn>5j�Z��`��"��jb�SI��hj؛X�> 5�B�YZ*k��ז;K?�ň$soU�b���p-x}P�㔭���7\��ZG�_��e^ �K���2fŮR�����6)>�3�I�|OG*q(P��il�����<�SqP����Y(��� bL]�VQa�VՆ�Y��XZXq��K���49���6�����Y!�[��9AͷtW�14d�q��B�:���3��G����:|���9�O:�X�z6�d�C?2�Ȼ�^vΡ��}EO� +X���R�fC�]�#m��]P�#��+��-)���.� �×F�q����V:*�����y.yG�� �!�-�o�5w�1�{pr�v9�[�|��п�����쓘��!�k�̿�K@ҷ�"�r�����̪�Y6lw� q��Rf�)7�I 7|sl��06].̺����}h�0N�� ��t5��)j�W%ฤ���yj�[�L^�x�5��1X��_��>��f�=XAf���'Y�O��ܻ�ax��:�h�ړ1�׆+�z��Z�2���C=��> [��>��ؖ��&��m%��j�7����ܷ]��g�KM�Ǧ��C ��)��4���on�����o5 ��fE�H�Bc��j�GN+YD�:���0&iOCG�.r���z�:*�6����qq�)r沿�RK�ͥ��;sܨ�-Yw���o|��W'�__�����NMD�9�0��ށ^(:4��j�X�'�}���C�Ѣ�|zB�SK*��?��2n����9MNϾ�R������?��1�m��ϝS��9���{��{m}�����T<➖Xt�����]Џ�Ͱ���z��%�:FL���vT�_�iߖȐ�-<��QT���� �{����6ѧ��:��0��2�-�xg�Ѝqj����� K���=� �>� +�s��p�T�w�;I˕֕�n�$\\$zfk���x�$ا�|rJ�^�-�2w�T�C�@-������tW���i�E�y&a[E����Y\�֘��(���s�p�n�<�4���A�/���fEŏ�!� "�6���־���il��02��W�bm��k��#q��Y�T�����+u�'�z�ZR��_[rc��Nt��%�t$`���t\�s+��殼� +N��YF�_]��۲�y�T�����{�`7�������^;�J.fc��c����Zȓ�!|����5��Y�("�_�TM�����/Cg��fL�݈G�3v��c%���ȵ��g�������?��w��"�mI�1�����j� �Yc2�^�A����+��+#�X`<�#����#�.p��Z.�D͡��B'�w��>��W� 7��I@le�h�w�5�]���@_#�Q�()�`$ʞ��E�8�U!�q�'���t e�,��Zse������O��w����0�n.䗕>h���E�b&W��@�N�* �����r��<����wbpO�|֑��L����jF���=A/ 0w"¥ܢ���I*��*N^��`Y1�Î�a�|���ti��GF,>�։v�B�[��gY��R6��1�Yb��!U�y�5M��D��ZJ�oᖁ��3�`��c�|����Bޮ�C<6 +k��|��o��<�����B����lM���O�O���0&��Z?:u����R{�S)3��\��d\�q���r��MH��г:� +��#7Đ�>eu�e��M^ө����R�������)'Kl��U�{di�7�6�qť���<�=�O�r�1��ە��}9��6�_l/�cj˽�:���+&x�uEOwT���sI@W{5�<����#�([!�f��홅��Va�[E�w�3�稰�%��x��Ue�R���;,@[R+\r\��`u�����J/4rc�*�1U�)������R�Х��ؤ�|��V��qIN%�5C/q)�p]G��e1���'��-���11����]���#�I�TR����]_�/ٞE�����n. ���[�Z�>{f���rk��0)sm��Y&���8xb�⎌�,�<��1��o#�Q_���51>�4��s�x�/�����{��B'}���w4���^P�{�V��p+w�����k�ıQ���%[Z�x���Z����>��@0�W>]j�|���V�u`B�y�7fXI�:�������� ������(.sk���ŧ�j�%> ��� ���k�w8���2��,<�?�_��{�Oڜ��Sª�nv��Sv����16��oBPe�C�Y� +���/Z���,����QX��<�"��%�|����� �YD�c��O�3'J�d��b�S�j +d[��ߖUEx��"��f*�ߋ�WOf=�-���٧����� +�ԉ�����_T +�u��n6��^27c�6�ȹK]U�Wz��{ЉW����=3�"����L�!f\Tԃ>m�d��Qu�'���]�Kl�GˀzX�}S]�ᢠ���#s�侱�c�Xײ ������Y���Qd��"ïI��=�B���ӂ0��;漩9����4l��tQ*�}y�h>�6��S���_�l���BC:�����>�h��8T��5�w�$�K�&��� +���ﱽo`y����~�m������Y\��(4L�\xoi�Q+�̼�-9��<�J���km�w����88��� �ΡI���n���n�%>u-�PW�tj���*�����%1'y���5E�2v�?R�_������$��*L�M�Z�7��߷���$�U̬��rb���Vr��t��)�X��߹��=c �2����>ok��V�g�54?3A� L�Yش��i<�����\̮���tW[[�SrP�9j[F�R�=EH�MS�<3��$*�КuWW_p��E�m�$��%����{0�̸3�I�8MN�dn)yb�$$ϷT��tc�|j!�!gV�-pi���!�������m1~y�:|s���˼�!��� ��s0N 1��X�����Ƣ���rr�R�%�>?cj* ���3=2L�G�M�O@#�zr_��F\��Bή���ژ e(�o-���[�:�_�<�+��Ā+ޜ.y�Ubr�q���a���po�(}�'��ꘘ f�gЩ�֒�61��!�`曫>�@��K>�}��TWq���>���AG�ч���҅�wM�V��o��7��,�eS���j���^�T��]3����=�q��|ᑉD���> �Q�s�j�h�qloQ��� �+c������^y�g���Љ�mC��S7�#�F8E�VX�s��2䂄}Sˋ�fhiyGa0��ݟ��@�P���<��&�,���V�4��\i�`���[�#n�.7��[g�[���^�/����= +B6�F�ٺ�Wݘ؋K}�p�m*��\㒐r��ád�-���M1�p���IJ��0:˧���h���(��.��M�Am�9��c|s�GYS��<���^:W}ՋL�6�I�em/y(�?\h-�\C�`��8f�ه:�P��E&��L��j��q%f�j����=v翏�g�� +j� q̱k�m��wۺ�^�6N)80��횺�����jCkw��j+�Wg�%3u���v�Ղ]�pG�F:'��aD�Z_������J^�y� �v��V��K߉J>�rL`6F��͠�kW�����[�Ł�)B2���SĒ.R�5����j;'��Q�\S��V�=6�� �e�<L�76�-#;�б+��w���Ǔ�ܻ�\=�eG�AN�xN_N؞�$-u�ޱ���S�']D�=;F�tUL����[�냾k��;oia�zč�]��P�L�QW'l�+�:�ʃ��D�Mtˉy�jJ�L4Կ����گF�HK�[����X��&������s��c�;�^�ro�����a5�_�)�z��+�[��[�骵�8h��2fy���\�k�V┠3���ԍ)�@ߢwU���9fWM*ߒ���s�m���<��٧�T���D@�|��v}���D�W�H������>��_�Co Q��_�u��Tļ�ah��>��-��`�c���[�̲�AF�yz`���HF�c3u���]�/�4�=e'?;]�p*���U��)�d[�qCS�RL���}����2R��6�ϲ��í�舵1L�MB�^@�뱥;��Bic� ~������P������R��V��m�"yu"�B/6Vݎ +u�k��S��Izɝ��Z�C_�)~䛩��S� +���W���0Y�w�ȥ,�6k�svii�}�<jW�D�|� "M�̸d�F���E�}��c�ʯ��9I �A5��4FIޘd��jbC +�>X�5�;濭���{W��4Ȯ�����͑rtݐ�ش7���D�4��_��6����~��Trg���I/��*(*��R��8:NQ�yC�I�`��X,?iX�;!Y3�H�%����R��3?h����L�C�~͡�C�s��4=g���5�(��b+,}OA+���ن� ��{}c��Yz� %�2�>B�3�@^��snl��B�*^/������I�#�oMTG-�T�k�-�0sTL��Pէ#�S� �ST��s�g��e�$�4$x_E(ؑa��60��]�����"��>:&�S�'q�M�bF��^|���2p�&��=�"`�J?�9�L���T�O̸����w+��{2��A���QKݐ��ђ�Ni��d��,�ti��6���1d쑁�>6�G&2��B�>�P2�5��b���55���.���k�}5��9�d����%][@|��s�����IL�(5��(9����������ؘc3�|l��M��C#�b�D����x�_�"��e�SkFDX I;��73��5�8C���P��`��nON.�SQ�g�����P���=�ʹ�V�1��>\�xn�V�9��m%��� +X���2����.�.�#&����3�j����_*VĀ���۫ߋq vU�^l��!*������aP b���s,�[����(`����T�V�r̓���-%�}����Ȧ&�ljB������t�M���煜]@�9�����@�����0_�xu�l +�wMt���U!36�-�1^��l-OqH������m���-Ч�䌿:��~�E�<����-����Ҧ�)��Ց> >�;�M��� J�ɛ��t}/1j����5� �[ڕ^�����E:jWǣz��]^K�b#˓����+f���e�{�̭Ч*F��0��s�2JJ�>_h����S2��u%�rd�����#���9Ἱ�,pK���G�����=�g�Q������@�/2�U�V6�_Y. �Q1a���ꋒ���zO�~�&�) ��\����b���� �y}��q�3�����҆zg�Ć�����eA�gk�_�E%,4��r�x%���9R����u�!����ֵ=�6z��ku��\�u�f��K��>2�+���`��k{�\���}�'�co��%�}ֶ�{����ZQ���D�V� ����Z�ڍ��T=_i���l��??{�`���ZC㥂�[ 4����n��&��ԿWk:}���1țAf�cD���~6=�6Pn����[��������_��;q)OH���I8Ywtdġ�>����˽@r)�Y�Yb�S�'n�0�|*a�G>]d�^� +��#��ׇ��k3ok�`!CԜG���ߚ�Bj*9�Z~~��"l_�����s�j�d��+�iZ����Rtֶ��-'��q�r�Ġ�鄝Eæf �:K^XFa�ǫ���N�<��� +Y^����t���I���ᑗ�����窝�����Q � ���آ�ڄ�;J!�=ïڞT�Ǚ��=��y^�� l�%3�k���f/<��R�b���g���4X���U��Y��ܙ�`���;�,� +h�/KL���I��Y�}��� +آ���@'���ٕ;���C��P.$���VZ�A^���b�pN#�~��?R�r��DE��z �9!��fB���X�4:n�KJ��!�Z"��y��ԼЋ�撔#KӸSF)^��n�1{*rѡ�Xr���oKH�V���Alޑ���%�� �3G.��|�C�r)j��Uxy����Ϭ�/�7��8� {�c"��qR�%@ +�Zl��t���������́� +�X%ʸ:B�M�{Eߑxiu������PߨnED��`S������X��gc���FF~Y��*��Ǝ����s��wg6'(��H���J y��U1RNf�L��h��;S�d�� +2�W�F0 ^ 5�3�K��pY^�zGA�yI���Q'Z� �,2ŭ���4T�Wsm瞆�8�s(��\-�㎒Vq���6������;r~��N��K��[�CU�����}:����C�_��ܖã\2x�s�*bGE���fc +�䘥j�jw���Xu����5���֤���C�PI{���ѯ����#�� �?))q�+�F������Xq}���tFX���w�7%d��8:jc��#Wm�pٖ��`�$,b����q��FPq���w`i=Yo�}���.Q��@���Um��4�Ł+���86nk�b����/ ]�.|���b��@,�|5��z��_to����*�w1����ߌ5����}寄Uϴ�"�:F�ɮ��yQ�}}F�K���+�uh�/�x'�yC6�H�g��h�}�3C�uO�� M:؋�e'4�l{e��5�~@&����������i��Ȥm�U�����SR1W�vEʉ?��Q��5�I��p�n�O<JVվ���7�#z��D��aK���� ��0"�T�%hx��pOͣ�E,�-s ��M/�DO�͐��~t��8�H][v��}s���t��,�CꚂ�K�Uq�]��P�Vp�c����U�l^T���y�� ٞ�:�2�3J�������݉����D��09�FDʑ� +pb��D�����rO�kvJp��]�Kͅwf���s������~��w��:*,~�.��a�A�n�he����3���bҫ����˽e�ݳ4�s�� ��>�M|��~��_���K�Sr�pcc�37���ì��}��@���p��s�bd��4FY��FL���d\[h)�Ș�Q���@*�h�o+��S3��!��@��F+^�Ϟ��:��$���(:�)%�;&�Y[���m)�4��Rփ��I����M�~�cg�\�+}�>�N��W閄�g�E֖}:�|�}��=���..ym�V%���16��5 +[�W�M�3��l�Y˃e�?p�_�m�kM������ %�Y��9\�WI�,B�3D��EjN��P���E/�%!F�wJHyJQ��>t�~��GiY��9��!����gB�_F�_ˍ�v�.~�M���_��1b�����O���/T���u9�[yA{sȬ#_tln|��9G-tʘe�9qWSCߞ��;ĸX�(.j �+S�Y,�^Nȏ��{5 �g_R�3o��3+�����2x��J�4�jk鯏��Y�/z�+z�ޛ��%.�1)�*�@-��$�l�4:�XE(�W�S=rD���z����2b�д�kV���8[�lK'䥜���5�,�N7���Q�c&O� +����^�������'���?EEA?��>�57�?\��~��C�C��R�%s9�1&��c��S��1w� ���/����U3�{z��HE����`�X��@*3uU�R֕>^�f����d������~t�r6N�/y2�J���?��R�� �*c_��k��ڥ�bEM YN�m�06�ҝ��p�C8\���hP|��+����߬<��ȟ +�>������;*~�%?���49�r�~ϫ4�j�}C��q|������ +�}om�z��&��fX���G��*"�j(��W���F +bk���J�]�}j�ir)�� v�#uM��SϿw�SQ��b\�m�y����J_ŋ519����wt��_�K?{�x�> +�5w}�4�?�A%���~��=�s +�-C'mM�?�ـ�j�?YjU�s6tdf1�< �yU��"�u�n�6K�͵�.1�G����%&e_����HE��p���P�@��̵��P� x�3 �l���9g��&H�j��g0�A?L������ڒ���R���}��(�ӯ���� c?��6 Qv�<m����P�|��穐�)d��85�.�vt<�CɩR�!"��ܻ���,�R@�̰*7�1Q������bB�����Km�O݈��R������&��r[A�FOe�s�h�F��j�/����&�e^19���'{�<h�1���48�o�`_�Jt�¬�e�I`z�q�Ah���s�:�-E�lKqI�JV��<�%���'��~�����(&�dدӔ��*~�UCc�] �}ֵ!C��qg�+���Kߎ ���x���;A���~V�A�vbӮn�s��*!]ߒ�xm��]�I\��iH��:~k�Vh@;��q�ެ��"h�հc���Ƽ�����Ӓ!�&�ԏv�p�\���lC�/{D�|�+!=��D���6P����06g��ql����xQX����m��\����\c�S}'��O��.5xt��V���lS�� 1)�>�(\�p*�E�w�F\��|s��"|��GO��� ��M�E�><����qF68�ï-��WG +����p�� {\ٱ��=�3�n%k�aT�Ԕ=_�'�{�~�h��r��)b�G���}��G1�^\:5�gl��?�����rL�4;⬂wY�X�P�^���]�nG��?4r�� +!qV�q�&���X��n5��9�p�b��2J�WM���.�si�~f����[?�M'��Gf���w���vi�艾��2έ�U�\$��i�;��0�Xi����ݝ��_��.(x%��UO���P���N_U��]��k���&�#s;8�6���¦��P�bf�]ku�{��m��%lN���%�b�\��3�]JzMh� R�O#�{�E�4=o��n��g}���zᑿJhy{i���^�����r$��/��ԫƦ��mm��al�a~�/��苳܂�翬u��+Ie���g^�M� ��nȳ�*^�8���}Z�}/���� +�]��'AB�g��i��ybW���,~k�.�'�+�GȎ<�N�k��qy�|q��u�(�<�&�\����ڒ�_�)o��J�9O�Y/B���X�xq���}k��H���?�S���BƎ�R��B� +�n��}Z�;�g��[�Vڦ��݃pKZ� +R��(8|}�9Q�#���8HK6e��~c���G���Ao���O���\����@�� +l���өEP��c�&���9&̭������/���C#���gx4�R7�[Ӥ��)R�m���6��Z��(��G���G�O�˷&Zh#u��>z�b��-��0>��r?2�>�.��2An�&=.Ϋ�m�d���I��+��w%�ܧ��� v��"��,®^��Vqq{ +:X�Ͽ?�K�k��s��]��+Ŧ�8d�(&��W�-�nN�<*|�K�HZ��ڤ��]5钒��{$�l�� +��)�8� �������nɨ�M�1AͰK��'�����g�X�_�u�_�|���K�酜51-���w8���I0��7 �J5M�g��}���Bm���^���1b���P�v��/u�T,u�cև�����{�Ɯ�����5l�OC)_�����"�k�L55;B�w��q�ɹ�.iW'���|B�c�Q�f� ��[ʟ+E�7G)����%�y�v#3�IYyw��!? ��~j�x�}'<�W��$��5� ?���p�?���U�,��=��\/2�O)-�ZPhl��,w�M����_�g=Ӹ�Ձҧ[àW���G]��?�@���i(y0�)�����Ą�?�:o�k�HI���댴?���.���J^��^��9�����Ͼ�4��R�t���)㶘~����O��Wg\���ql�(%�����㾚��S�1�)j��,1k��艔~~��8�1E+�'��²����Ŧ���nd���08j��|���ǵ~z����k��;F�3츛Z�����Å�D���ܝ0hY�O��� ��|)�@U�F"�t��86�@_��4: `�;���9�G'�I�Ԕ�k�U�[C���B�c��9�+vL`Iy}�S�6L����Z6n��ik����RV�U�צX��GF~��(<ʭ�����h�iX���V�� +Vё�����F��}/���wmc�! .iy��0I�CJ�]A�700_���&�.������` .ew� +��.l?01I����e�:*�!'V�x�c�{����L��,�`O����/faݷE�x��)(y� b��'K&X#*��3G̗���5M�w���S��j?�����������<�� +y�< (4v��[:i1�qV��vOY�� �s��!��#�/�ݕ���� �� u+�H��K�76�-6 ��-lϓ@[T�KA/[%�����YA��d�H�� +v���V�B3��0>��|���Q���%&%�%���1�'��{��ݝ3��T���16�9�NpK�.���z(q�b���ꕾ�#�`��}h��K]�o����'y�J����ʈ>�[]���M��\�~�����_�����Ǽ���{Mn�^L�MLz�YAQ��aj� N��?&�&���c"~"�_W ��'����Ht����Q���� �z>�>����`iI�"g�]Y��G�٠�Wg��@Y�4�>;--e/5�����ζ�^�8���}e���(��Q���qrj�g +�n� +ޙ�Gz&K?O���6�=�E�H��8��vn��|4O�|��Y_)��*l�[Z�8Ï�=J���4��KIy1���4�H�?C�z�ы�ݑ�m�� @)���}�i�R>EN[��뗼9�,ݖ���)b��9���A����!L�3s4}���G�߿�c��Y8@�a|Z�)g e���bL��]��/���(y1�6���yg��א +7F����>�)P���� �`h���Eĸg�E�J��į�gC��Aǻ���C�vbd�9�o���/K|��"�u��垮;�^vz���~Ϳ���C%�l��~���Y��_�~c���@��������Z�c�W�5JJ4w�=2���0�����D,ѓ�[ �]�On�k郾��_�7d^U�Ү�'Q�^%�S8>}M�a���F��5��4���Mѡ��s)Q���sl���3{�qf��09u����Y�~��O�_�ш2��3 +��M<�� +���ᦎܻ�mY7ׇ*�< +J�k� ��!>�h��p��/�I������Ŏ�W�#�H�٪] �����٘�:e�W)b9%LІ�S���z葊V̻�!f����2]�x"&��O�Q/�"�K>f� �Q_W�TƁ=�_������d�?3�J8�_7� >vm�Q�%"W�MtY!��t^�) +��\[�|c(X��4���g����\ewce-4��]B,w�@�W���g^@D�� �<3��;�� +2�0�`����<�]c��k���8c}�}� ���3��Z����� ��ٱ��7�s�=��q�o������K3M߇��$S�L2�>�����I,�%��Q�#ҋ�TT@�^������{�������7���~n���(p_��`,��=�^`%�k�x��OX�鬏��??C�;��O� ���=��eC��^T�o��'�9ONL����YE�1w~2R��� �a�v"��%�yiW����H�y|BO��4�SN*|�����o����Iiׇ,\��S���ZBڙ&Ss%������E;���%ei�r_�����Ў�g?��������j��憝F��<�k�����e}� �F��A +|˃*ܰ�D�g�J?��7��>�d�|�f'�&��_�%�� +��Yfw~���k +B7ܸ�D� !��B?,e���G&o;q�^t�?G�*Vl��5�a�ʬ�4}\�s7�G4_>&.�g����D���j� _�0 ^I�����'��� �u��: +0���ܜ�V2�OΞ�����q��~i�]��0����&��G��r"3vg3v +������.j�Ů��_ԍ ����m١{.u���N��?��U[���o���ig�ҸdA���=Z�As�=Me#�����ئ��:�k�����v�K��uڈ��=�a���a@#ͨ��zTʂ_�=L�-��5ý��C2DXPͩX��Z��f,jI��]�x@&]�lH�M�N�:.o|</���@����������A�p�ɬ�6���F��0��u�ײ7D���3��аdc�i�{~z�HȚ�QK���=�q�.g�+6Z�*u��E#�`����Ƽ3�j�Y��G�:l�_\��HJ�:�ȿ?,����!eN���C������I59��G�M��\���hl*X��kV8�� ���c�u�W4uo�F��ɮ�����;3ʆH)�� +����]v{�L�������Kv~I̚[4�Y�pLZ�|������)e\�O^uP*�|Ժ�~Tʪ[~4���9�q#�f�O���� ��M�|'�ć�kH��֬زiq�iI�-+����qi��,, �/pE�!��sC\��C���4��u;.Ŏ/��#Rv��q�`��W�A���m ��^�H�5M��k87> ɻ3*)y<����T�gW6�H-��{>�M+��@[�5;6�����Y�ѧt�P'&j�Ψ>��3�����c?e��rp�/�ţZjI7�蚭�b�C�g�-`q�flƂ�X�`�V�m��^�|����)e��V-�1vq���a^���g�ڪW�&DҬ�Y�K/��֘|~��><؋�8�Q�tZ^�h����2��V̈́����m�ms��ܤ�U�pсN�X������U7&oڄN�2��t|�KUSڕ�Z���ްQ�ۃ4����C|Ƹ�h��:eQ�L7�Ls_�g�)U+vb�������-ZY��]�73JJֲA~� +JoMt�<�� +��\���p�j�ܲG6����7��n:�}��Ӱ��c5)K�����aa@&TP}������=DA(ȣ �`_����� ���L�U��-�џ6��ie���v�J*��:��^=�\��Y�Fn݂�]�he�M4�����B��9�3=h�֯�ڶ�<����k>m�N-_��s� �ĭlޖ���k��B#�l<̂�Q6� &���9SZB갂�i\C/Z� +��:J�G�~4�Q�fk����bZ�K���ӏ�d�ϡ��{��R����Ϻ��aS�=�S:c���{� �a�����l��Zpy�nRŲ�P45��H�A;�~�+��Z{�s���䚯�پ��εᖖQm;~D'��*1�.Y��i5�����`V�mkL��l��M+dL!Ej�������s�YU�s+�=6���|e�O�;�筌�y33g��.Y�q�fŜ����D�ȷ�rᨚ�;�C˟�3귇���<�'�Z����n��.bn@H���S�Ji�_����I �zn�����en��U���a55[�+�ʭJ�m����d$���G����S=�W��y����n� �W},Բ�Y��b�W�lĒ�V���f-룗����AZÐ���D�_�eF��43k�<욍Y��5�z(���ڠ�]���G-�#,<�-����n�G���p�^&|�B��FE�k�&.�+�����I+^�Z��L_UĒ �����{�]���an}�tW��g>8�x�y�6ew�������2Ѡ���PK�L��N������iH�����Īm/�b\y�d�d�� {>\�P���31��UkS�D<j�Ikؙv.z�K\�_(>���{k�w�U��4@�����ŝê�LwgE�Y�Ґ�^d��T��֯��Nac�����nM̊�~Zμ�^:c��ΚٰY��=�lN�5�ÄY�0���m�_�Kfb��� ���2�[����3N3"��O��A�F���af�ɀ,����6m��B���JtO^���6�ݰ� ��DТ��u��J4k~�h�ɨ������[#D؊�T��%~Q'�g������i��6#�M��}�(�Gx���Y C^@���4����G,=�����9 ,.� ��5F̪�v��5���;�ڱ=$w�إ-Kt���N�8��3_;�����de5,Z�ث�N��`3es��椔�Ks� �z��o~�`��ֽꕩ�=}���B��Yi���*_#yFN/�r� SzZ�^���юz3����[X_'6j��)a�X���X3��%�y9�)}S֤����uo+o���^v i�.6r����3٫���!U�'S4� FM�P7#m������� ���� ��ȿ���$O�1Ȅo�J��:LG�片0��VH⼮6jF]�j +�V�6~PI��PJ/�*=���ƨ<v����� +x���nJ�6��A�|ZC�X2c!�gϏ&���q.���m|����O�b�)뜶 0�����r0 �}P6�m�8o¦�9h�[&z��T�6D�/as�&fN�{o^_�n��H�kmx�:(`�K�+�f�*�a�/˝P����?��`LbXl�v�� IM������0��4��O�(��Nr�`k^>g{Lܻ`|�� Z_�1�<ܸ�0��gLX@�LX4�a��0���@� ��E.w��@m���u��1�L۟iwnMq����ͩ־�Y�qgVط;���h�9;ВrZ~�ELNn�ϸx���1oc�EڨU�t�� tQ+�� ?�cT�=�� [���N����{��o��㼀5/ ��d���d�i#�qJK,�s}���kn�o��m��{��Y;!o�C�Y��Ă%k������c2��@��`�]�r*j��VP�����K�J��{�|ֶ��[��k���_�͆���U�R4�Jyĵ�;*�`\�����|ʄ�^8�de�d��ZP��/8�Z��`QǠ��ŝ�C͔���?�7��'�B������II��U?��i�V2h�̬Y�&���qC'eD��ً���Yƙu��g,܆!92~ZC��5ʚnjz�@��nk�\д�7L2没[��3��kŻ�Qb�� }����H�k��jj�9�:Zɦ�^���lyH�KF}@K͙��!�6mBIJU�ݴ�j�\l̺��_�0aK�� -)k��[n��8�`�C��"]M�+&j�#j �Z� '��!��o��H�kn�x�Ɓ��hoKţ+�d��&��2���XWC�A�E�=�ҹ��R�]͘%;�f�F,�3!V�3�F�-�.x܀=km�kz�z~��q�מ�3���������`��\��� b����3m�ݙV����lɤ�Q�1̧�MP��cM�9��3n�]=�o�a��-��;*�Z;R��WW{����b��Y���n��kv�D=;���A:|c��ߞ��Lʼ��v���� ��̘��Ai�ʮ��Г��Ԅ��)u���A6f�͂O�x��Q�loJ:�5�f^�K�|���P4�d���m[@_o�O�I��&���hw����od�I=!{�L��k���w�ش����g���)�p�%Y�3�kC|��T�bwTк3Nl� ��+^���ׅ������E���4����g� +����fk����ze�S��ׯt����7n"�pTb�+V|<�_G�u���} +�������];����oo��[7�䜙WPJ*���,#�+U���b���h�u��ņ�K���6���p��n��)���-FYo��U���2c��=�>���"��Tͺr[�N�#= �"������Oa�����#�8쿧���Y!��§l��(A�vU���5w��,�2`?-XIe�>g���ame��2�OG�4i���3�`g�<�K���T�g�,@��7\�������=Z�JZ����F!������K��m��u��m��������2�G/^��C>&'�z�Y3b�O�Yr�s�f�A�R�����'����^?s��(����YT�X�H�o�l/�(:!���j�BǴvY�����Q�h~���@��$�%O3v�ǧ�v�M�]�3�뀗X�1^@����a��ǥ�+ �����K�H�T���)�AvܬH)����F-n��6�KN>nq���qQ*w&�����I�a3�b�q�#���[L�;pf����� Pt�LX;��6�ȭ�yzT8�\�w*�x��� �I� 6e�% ow6�z�w�����"�ބ@�e��q����ʑ�����:+�ݝ�p�Ǹ�9o{ۄ�����H�0���V�`?�`�%d�L�8.\锑P��K�F:m�í�)7=�r�f��$�*ţH)כ+�މ��Du��a��d�?P�{�6������ΐ�;�lQ�p/??hlE��{�s�ͨ�[h��UJ\��ʤ�P�?\A�%X������-�(�ȵ0]�����H�l�A����i�k0P�D)���֖����l ���XE4����PtA�]F�B���t��B�)���{��H� +��lG�I^�O��'_��������a7�~Ȍ�<K��Rs�.il�J(�Fo���cf&X�֝��4�K���V�[�\W�k���)���R6j�ZzzjUܶ�J�蹰���� + O�Vh��vY��p��`Rxu^W�v͆��mU�x�.����I���8usg�We����Ik�Яn��mn��UW�WI�=i�F�ad 3��;�Kf)kR��jiE�rx�T����]Z9��ߍ2v��ڹ�&ywAo��X*�a��O��y$Y�X`�%6)�V��䧣�%5^,�D_�̅>`�oM�Y>��79��[tۂ�T9m�f���p�QA5�����L�g�i�>��or>�G诗����d2�ʡ�x�A\H蝘S��M積����RZ?n��gD�W3#h&�MYie>�R������Y�:S�n)r��,��=�I� J���o|�XByV�����^�Ur� Rq�W���㵂��^�G��X��W]�;�k�:'�ݟ�4�LK-��GߴW*�;��z���*K�8�mg_��W�S��j�(��ےa�a��[Z(��c\���� +c����nW̱��y0���mP]EB��`�]��~J���5'�{&�D���7�?�f��&�sQ�4ý���e��� �J�29j�L�B2��<�p?���HF��1��[��a��m�ZS%�UZ,�*�:�[$�94r�nvHb�G(�~S*�3+�l��oշ��%����cvN��ٳQH���F�լ��_��Ε����t� +{?q�^vH�;쉗�I!7��C~=�<$2���"�xh�m}�,e����y� 6UH)�/���9l�@4��z��/f0����x.�j|�$��c�MX��fA.��{7�~xy+:$-��lq���f��1�F�f���_���[>i��O=f�Xu]r?N*AH:���+$Y���?�&`��y{���(b�T����"%= ���e���(2����*� +��d2�n��({]�>$O6V�����ެ�W�CS�#*k��^�x���Tn��lvi��O^�C._K�z33�M<�ĵG�!�oq'����!�Ϣ�l��"�y�F�k�t�h���z��vl���/*O���RX�:��'���G�O+C"c '���'�=� +����~�o0_�5�����B�D�:�����QR�}r��s�i�-!���{e�+��j��RB<�O���z%:�წ�����o��:u/���Z�Տ)���T�MMk��h�XK�'Z����q��Σ7vX�����[`Kk�t�d:�����цȞW(����g�������s�I5�s�)[�eKv!~��B�tJ���Z�O���gckIc�YU�����)����r�Ea�/^�<� yO } �z/+$����z��hA^M{���9ˮ�#(U"��_N.�!�K� ���r��RR^�?"c`!�H?�f���.�r+�2�w�ZW��<{�y�?�8�cY��bW�9ߩT�g�RΜ].�v�L�6P����,I�ǯB���:����N>����qr�QeHt�ijw��OB�!B���'"��?<yG?�:zU.��N;�[g�L���ŧ��d0t�t�7�4� ����x���,ɯ)�m'>-y^���dƏq���nf��r62������Q��7KOD�ǟ�� =C�3V�s�&k���:M/�#t�2d�`�|����V��Y��UYg�#�@v*&�s*9Sr2�=�ĥ??�< �<x^r�z�ȷ�h��{r +塳��`@��������m$+X��\�U2Hy�It�OO�aNħ ~HJ��u4����x�u�#�XD%��PP�Ӹ��*l�2�ݿ!h��Rk����8,S�NuZ����i�m������|��!Ƌy��g^�����~���jB�Ն�Q�"����ɷY�U0���fQ ���u�븣Z~Ŭ��) J���z�nɠ��`���9e��>��O=�Ct<�ī(Bȃ'�!�WX� �$�����P�?�������%��{��F�P&P��9��y:%h�zTm�����V�p)W<Y�� ��a'�Qc�K �S�$�x� +�<��W1��/ +�폘��?�$`Δ�b��]�Y���UtU�&x[���>QB�&#�a�p�Մ��_�SH�"��~��s��s�B��CVQ�oM��� +��ޭS��Ę��>�&g�5��������(��� G����,� �z������ϳB���?e�*~���zK�9�㏪j�]"^�T��y3�GO�1Ӗ4p��CM��uf;Y!oKoW8 �������_���G�U�� �_����1&�p2!�s2���{~��zB�'k�K�xs]9F���R���4��1έ����v��^,w�2���Z���ǜֳ�Y?={�;�4 +�C���C�cq'��!מՆ\8�E� $���SQ�����6�Z������x��jP�.V��A�`�g�ӵQTC�y^�`��3�K+�|�NAȵ��!_BCn�V�\���y"5Kx2�P|���y���ej�� iQvC����d��%�y0�Ll����J�geC��z��vrY�ՇQ��#��'�ry���.�T�>h i���O=�n̐�:�d�n�rۓ-=CV Q�u +$}*K�/�� o��S +��%��-�� �(k��Zļ�Y̺g��B��$��,T����N}lP/C�9�8SJ��5� i�6A��CY��c*g5QML�c8��]�}3:]t��[�/>�:���T|������? +���J)Ï�њG�Lk^�f�)�zb攦�ͲW�>�oX%4��$��}T�|��,��gν�� �)C\�*W�|�E݉�$��x���懨� V!n��*E�[N<hk�� :�Eo�5z\��X�&u�Ďt��#jñ�'U0��O��b�p���x�+!]�8]�C6@љ�ny�1�� ���{~E}Đ��ܨSaeҞL*�y� Ƽ�N�5R<�u�[��ug��k覾�0���I��jr�RC����SA{����!|���&{ހO]06�{�(��_h4h�Z5�W�,�w芥��"W�#w?�c�P��G8�<�/�ŋ;d1�Ξ�>��ҭ���nʦGH:a��]��Y;6f���u=6s�@��E����qX�1d��j��Qra�Řd�����_#�ѧ�>a�����姄��sYu�? OXg��e���y�M/ �4�+]r�[#lʸ����-H�J�)��q<S,ű|Q��y=���m���;�'���y�8���t!�wS�6S��l�Є��1���Y��J�FżC����}2ZdO��Z����l�^k�X���� �6�&�fB}o��{��[fu�i +�����.h�.�������\d���r�zj���C5��-Fs?M��Y����*;ڒ��:���J�����Ղe2cag���m����]`��z�H/�s�Q�|좃���_/�(�k�<�ʰ�3��=��:]9��[}C&�<��h�h�ƄF��AݚW�hK���-�xB������Y�'Q�Jm���HG���ae��i݃��oQ�MI��.��]��E�(�*�:����(�͗Ez����斋�Lȧ�fWr_����v��I ~5>u��0�Jyw��T��#t<بQ�ҶT�U�r�FZ�T�W�[��"eF��X�%2��;Kg���4�'�,kE�����ooy�5!s^C���p؛^&r�D/����,RZ���o7D��~H��3M#$:�En];̣����ݼEo+e�-$�y����s����ANȋ����&B֔��2m�T,���~zޤ]�4nk���ͥ��{*A�-����ے;��l60�F�M�AKgӥ��yy�C:o{�.z��3�G|��0�|��yO�~�,DiYn5#h)Vwt�[�R�,MdS�*�B�F4��H��t�,��U�!n���+�e�[U��>�m�)�,�He��ZZ�����gl@3���'Ni�}G'"®�Ũ���UQ����gN�tG�Vc�U����-a/��G��4�1}7u^�(�vʷ]D�!&z��t�+N��SV>�9"b�Kre�E��I��t�ۚ�=��4��g�����A��&��WT��t��K�/?�e2>�`K����m�l�Д3哴 ��)G;{gT(�l�y�u���.�J����9��g<-�U?���e��,��ry�S�����Uվ�$��ϊ�[�ߵ{�UsvZE@��4��.:I�����6�[�S��бr\�����p��F�rq��v�f@ �2+���5����Y�L������Y�ow��t2aN%�ة��|8l�b$P���3깽Z+�Oe"�5*�]/(�3V'x½1/��~�f^�K�?�j�^Y7�������d��������k�x��g�MB�P���Z�b�*����0��������b��߰�2f��L-9��Lgm��~�� O��fo`s���k^R圃Y���}���������6�){���=/�b�R4�3VL��(�}��<�!6pE�}ȸ���I5.~��nFO,�3�����M'��8Cz����k���~F��zZ�|7������S������34r���rۉ=�kZ�?HG�0��Ф +�>������G�u�r����)a�,B�5m �JnΔ���6ХXv���.b�����|o��+"�`���u���[@��z�3兦/�W��q21�C͜}?��6��;�J�bR�.cz�|�� 9gdլ�؍k�&�1gǍ�yq��^:���k��:�j^����>\1Ԥ�a*����� +d��&|�������7FC/���G��)���������AB� �l��<F�|��R�\Д���;s�����NT����؝I:q�L��P�f��kfX�lg�� 辇�g���ٞ��y��X0�v^��9�`�E��U��)�Ȼ3#/���@��L&Y��a|�� �ۜ��e��mIW�~�-��X[ޝ`_y���&��<�w{���2E��g���}�-ڰ6ϫ��f�Yw�Ы�<��qb���ζ��Z�%�nj����F2�?-��e3V���I=*a\O(Xn�]�I$s.|a�Y�1j���诣dܗ!"�Ѕ)�:�+��$��){��ǥ؟+F&�6r�Iy�Z��m3.k��8�F�N)�#���?������Z��2�� owL���nlѡ���_��%H�&,{y�E�{��l�w?�tM[�h�7�چ���������{9M�R�����v]M��T֪������� +�G�Zx̂��e�9�*w��� +4y^U�z�����~ˎ/�詍n�^У>M)���5M}Ĥ8��l{��3e���s��+��bM��� :ۃM]ףS�{�^��c���=�SPQ�b��}A�J:�en*�>�eRa�اohǎ��6���\�2��b`f=8���������=t�'�9��L9Q�F��}/���K�;�pi;�fֆ� �I����mWM��(�5�� ��Z�=�bY[�> .�7*ʽ�c��ٵտ?ta��ծ�)6lƶ�R�`Dfj�$���a�'�;��/����Y:X�́f¾_(���a�N,h��[�V-�I;.T���j�~��Լ:����/4gw�&��x��1aǁ��k���6�u o��=7��-|ˀH�1@�v��O���%-,nÊ/�qK������+> �fe��E��:��+�C��@�|�$�W-�`_cƾ��n�h,�: +����ݨ��̕�,Ɩ�9�S�6 /��u!����o�8Ȧ��� 1��~Xs3�_&y����S����=DC��%_Fu�^BՎ�_u�;�͂�)�d�~��]�jA ~���|�v���hL��e�`�X�ah��y!�w�B.|y`aT혈9{6B�Lwݳ���G����jh�R?>mTR�bB��j�̆����X�e���']b'��g��я�ر�����>��eUɓ}[}�g�����ؙ�����2`�j�>{I՟}��e]UD�'��2��͎�����:`�k��7;6*��h �zx\PQ�Ћw[��J +oM�+BǺ��;�����`q[Z��1^�e.�L?"�wv�����9��9]m�K +��&]:�S�v�M��چ�%e�Ӏ(����xi��r~\\tg�L(Z�4f-��y��۱!�W�u��}���5�X-=�Z4�L��&�o?���M�Ou�?���_�숽��G|�!3?�1%{vL�q�Ö��ش���iؿ���!b��2zP)�}��9e����ǫr厙T�� O�6UF��*�m����π~)����M�k3��7_�H���,� ��c�|ܱ�cW5E����́�{Y�)5<n^ �\15&��Hջn\٢���Lw�����]�w�M�����w+P�����g/��[�_��ir�g4�[�n�f}��v�M%z��վ���Zpئ�u�R�n���)s�B�k���W�q� +K��*[믈[�- ��UF}�"ʖ�eQS]%�2(> +�p���KX3���Jp���v0�-���J�U���cj�#�5ɤ�zI ��u����-Ku����e�E�>I��`*���E�����b��d4��/��o���_���q��F��E#�fا}��Ѕ�qE�3��jPܦ�굿=�갸��\/������ڏL��}�c �h1 kZ`]�U�V��o�;�{�K��u��~q2`�Jh�����B�l���a9y�b�z�������g_ݤ��\��SEY����{?��I'�Ù����{ ��ު%1�/<�o?���T����㊶��8��0���n��8�^�hC����l�^��'�hbVԐ�))�<l]Ӕ>%k��~JY�t�Eͻhͻ��(}�k���Y� ^��^X��G�s�5���֜+#-��<��s���k+ +�/��)@G�� � s��6�N�K�1��ͤ�����B����]�bNJ�Y8u���ò��n�7l���zb�oF����o��H3��� ӷ��92cQ^��� :�(@�o�! +F�oU���n�KJo����^x�LG�EE��ǃ��sB��V~�-y�������� �-��>�Ծ�WT=��<Z���kx���Ieu���q~Ռ��<L��z�J����֔�k����g����oc�j�(��HGq��c�"���Oc�*�A�3�ƺ����0��'�a���y����{�N��$�kmL\�8�5㞺���5s}��̰ͅ�?;��^�w�����rMS�%&\2#��zi g�A�5 5#m�ЩЛ�&����s���/nt����m���y������a<lQ�H�v2{�f��:��MQ���5������@K���7w�4�6D��A|ŗQTٞY��A������y�E�'�w>QPǙ��5.wo��6ә{kύ��vb���ȤMcu�j��Aa��ï�JL�xGC�hK��A~�u��j@R�ED-(Q1� +d���wq������o�*�������1�=ܵ�⿹ �fb�|o��-#.u������ԗ<ٳ�cU��������v"h���弢&lY]�z�\�n��l���qP�U�/u5|<=�Y�m&�o�iAe�k+�sz���ޤ�$ݨK|t�J( �b#�nkގ��/����������n�(�߆9�M6}ˌI�5QA����#;�hM]��F�pV�{sj��y ��7�zH�������!���5M��AN�iiγMY�LWɽ����G^�d]/f��o�x��)Y��#7<�p��ò�2 -�}</��������x���潍y����RO��]��yUT2>������/�M�u3$F�O8�I�����!���^0�)�����p_&:�����_c֊&�Ѥ$������ ?���i�\� ++�y�i_\��#�M�3������r�LM�����ݱ7�����2���2����%���4�o��eF�iW���+�t�����D{��UMe؊ +�fY]�3А�d�&��)���?���mo,��)z8� z8��6f�V�7,w�R��]�e���y"������9�c��w|ܬ��I�/���d��-��߿�P ���s���u��վ��%%(b�R�pઍ��ɠ��F{�R�9����l��y���.z�o���g��i���`���gF���/^r�W/�|�~u�����7�O�W��Ĝ�<���!�̔���q�L)����&Ω�QS��.n�m'+�����Ǹ�����=�qs�n[Q�+*��U����!�ͨum�k�w���_�0>ǂ�X��GMHS.7G��P~ee^�^�aTQ�����_�li��, λُ�?˯�<�zq�JN�}B^�R�̻m��ݚSB�F�%���ԋq�M� �F?>�LGu̩A.4����O�p!�]��oH��!R�MMykzXڦ��,�h��Y%2N�˾��tx�`o�����'k��盚ʗ.z�92��q��u�^̴�RA?^V�D��$]�5VG���v�g���C����8#E$m��?n*^��rnDy{���g�5�am��ً蛅^L���fGW��(x0�Uxo���麑X�na��+��t�L\6�K�=?&(��o)z�oͻ=$.x�e�Wl[й�]��%Og;*�f�叧�so����� +^��9�t���t��[t�AM���+��_/����o7o�=�6��������1j\�vދ�*ߞ2c���|���]0����W����8j�:����p%ᚓ�����u�CK�p���SJ_��D'>�p6�����=�KF��I1����:iQ���K��=KD�[I�nb�Lg��i�9iI�rOy��o�Zs�Oud]�K$¾Y:�Yro�R4"����0���aY��Z6�D��#��)��S-}^<h���m���瀤n�!����� +pL<������!��M�u{�ŗ� >�o֡���LW��A~��c<\0��zi%W��5ZŜ��ߞ���sqZV�*��'��aQ2.|�1Q�@m/�4���n;���kɼ�_�hݛ�@c}-%�f{��{��M��L o�t�4�>���6���#�M�B/���������2���1��D;����AEͺ�#f__�G&�ʞ�jޝ��F��F��d�|�i��{%�IIc�&��;�e�W}4Ʀ +x���1q����k˪���VHܰ�� +���!~Y�.�9G��C��ӕk���� +����'{AO$�wgu���k���Q��5E�=(<ؙ}���$\^=�i�@�R���>�:tb�v��=�î�.fCy�UƐ$��K����!���r{����Tԑ[�g��tV�3>��0�2VM ���W|+� + +�rrnL�>��];"gDPpX��&Ъ�qBTxkL�~! L>�a�;=*L���x�%<�[�����?��>����'���?v���N����U�c�֯������{�)׆Z�Q���7K����p��W�BT}V +��~8H�����i4��s3��G몪��}U�W��Q��s&NI�����נ>zم7��ܧ~Iq�lOi������#��O�:x���`�%98����xs�u?7�� �Ζ������9m�G#����f砎g�|������aֺ��4��9v˞��n�T����g�F��Tl�*�lXAQ�G������#?�c�d�{p<�ŊN9��泏�8tK�m���W>�Y:����A&l95�|ʢ�1v���٨toI}� ��U,vBZ|{��*�ۘ@r�z����˞��K���m#&��Mk\4�2����3�Ƥ%CS����� �pƄO<߇�:�ü9�|�}I��c��hY��s�6��ҹd��=�����~8�VqgY��_�nL�|�m�|�օ������k^���?�*I��m��&:!�x�kx���m����i5�=��9y�鮂���A"7̔� <�싼&�9Y������|Гٞ���~DRoS&�ɗv�Ȍa^�����s3Ҭk^���ެ�[��䯃T�O^�R��Q��_c���X�t{���֜Ks���3]OF;+_Z�ew+>==Y�x��_�ؒ#/:o�V=ߝ�Ȅ�:�~pj�����ïO�Z����n�����]c�}s��=S�/+�-��?F�97v]��)y��W�&x���͈�<������']��������j^��i7'{��˚��Ue�g����w7�v���e_ +�!Qs���yy ���x+��DG�����V,��! ��hG��u"sUQ:)ʸ6.��sFZtsUW����}/�& -��@e}=��>DGoY`����'��w'��l�I�v|�����snAM�{���:H�n!�~A⃡�܈@Wųiu�ǃa*)�gBFeU�v����� ����#�9���z`yyƍaI��eCM����k�~�3���ƣ��a�M6����=�����K}�Q�jD���v�#Wo�0�v�� �q��C"��_�i!,h�]�r?*a\\~{���ޜ�`P�pq�iK�=�A&%UO�5a_]��];2eC�^������w���f��U}c⦓ +� +��z��De�z�_�)�q����m="; )z<&*�����n�q9�����چh����R�tJV���ˀ-���� �z����C�*��FZr���?Y�iˌJ��#��h�^���b��\�t'.{BT���ʽfh���AI8���Fn��� %���^xqK�I���C�h�V��^���p���/���kħe]��ؒ�#��o^jC@Z��{�DI�4�~�3���of?��TՆ���>k�A���F�[j_Z�U�Ȭ�.!����emɣu�à�8x��V��/�,��z�ԬKJ�?][�Ńʛ�g�Ἳ6-N��)����ر4$g�*�I筬7��]�k�%�2o��o~3�S�t���z���v^ţ���g�ɉ�Gh�L{��q��j���9��dG��m'�PIϽ���b)���M3���G������te�m8.)�=��{5�i|/A}��Z~v���o%���I���9EQ亾<��Uw�Cd�����+��|u�����*���A�%+J��Ĝs&AD�9GfQ9g�DNA�9�`����;�b��=�Νy5/f���������>g����'��� ��+��$��E��� �c���c�B͝�c��?mO�۶�iE��[����#��o�Yy?mKqe�9&-n�vچQ����/�S蚏����U>�1�R�������s��FD�/����;�{!$���r�+�4}�FlMH�̴���q�u���a�#��� ./�Ƙ��Y^�WŇ����Ӥ�(<="��'з��o{]���E�q�,��1�(_z�>o�'�����Z�S�= ��?i8!���a��掾G�]���1J�����8��7�l��8u�9t����������7�s���{��6+���+L��(�e_��Y��C�b�치ID ��-~%��#���b����Qr�gB3���\���utHI�H�X����p��nm�CN:���{&�[c�����?��uM2KØ+�ؙ�J������j���Jv���j���� +�ޢn�=�_�>����u �2.,��0S�I�����5WM��E��B�G���00 �b�J?�}�_�ߐ��}��c��/R��݅� (E(�6GPiQ������*������ +�<B��;�@���yr��2�ny������\��1v�v,�¤� �й ��_5��i�d�,;%*��5N)�̲�9�!�f��$�kW�f7?-�6f 5Gu�:���o�5�T�Q~���3���Wm��3?� +��sN��p�{���v�~����,Г�a5��5M-��T}��W��W�����7�ߴ7ܭ�v�}�o���?�(� +�6��9%��~{�^�Q +샰������/�\| =��.����10L�Kv���k������qV^ïL0�e���_I*��mQ3���T�u�����31q�ji�j?*���t[����)���,����e_�T�,�;��F>eE�k�L���RK@�+]|�9�>��jyR���<m}�qI�S�gn�o�� +q~��f����ֵ���.��[�-� � +>Sv�Q))� +��0uI����d����]�zO��O0�#j�5E-�<�������s�Q��O.����m�)�_�l�ڮ��i��� +}% e�m ��� ��L|���{y�1��Z3����T�_Ƈ(�@��5_ +�Y �ibnL4�o���ۇׂ��j�9o�s���Oa�Z�]�]���ú�c���Ņ�-�wk�G����`m���Z3�a68F���ї������5����w������>E_�_y�'�����Q��1��� +r�1E�Y� �H����˄H�(��=B��O� +��l��s��ַ��)�G����,�cx�����S��D���d��I����ۮGԝ�m��U3,�G�ɷ7�g�e��=��Ԛ��?yd�ֽ����R�ֆ���_N �~��=�����<����&7l���&!ɫ�6�g�ū�،�א�Ssa��2�LOq6F��I1&0�o*ȥ��5ۛ�� v.D�l�O)����4~�%�NK��!���Ȁ���������WR�m������J�^�uPA�<@��͒*�f6�?' �`��5^^�,����� u}m?I��_���O&�9�+���Eť&o)Hſ8$}�K<��$>�C �����<T0I@C�[x9�:�O�[�}_�~����+c�+���Cг�'E��ߕ�}�]��v�[ڎY��nM�˽3 �G7}�����P�ԑ�Rc�9E��i:�/�'l/�Y~W���Uݏ�a|VDΨ�ѲZRא�d�F�\���r�x��/���� �������u�7�X��{��=��K����50%�8��Y/��?�9��;糭���!��� +~�����P�w��䄑ZR�V�ag_��?!�����6#���+#��<dTÃFU�Z�$��� ����ϵ9����� '�)�N.�"^w��� +ZETÅ��R�A.�8�욦U'��=r�'q7��p�A�嘂ݐ�H�~� +9�4��2<��G�=��Pt�ʈ�T��jà6�g90�;�u���8a��Ɛ鎡ֳ���?-�l:T��6/�D������>�g�0���絅�����u�7���䄲�Q�I�Mo}��p����$�����j����g�?im~�x�`Y��R�Z}M?-�&\��%ܰ�K���x���1�r%0���K)�~}�p���Yomz@�G��tX�j��q;!gk�R`}�NK�����8u��'��{��r��51-���D�T�F�+�y�k�ِ����~�z�S˽���Z�y������tum�X�K�L���Q��)IE�)�Mg��B�J���kc��Qa����k����avA�a�42k�U�9�4:˫!W�l�#�v���4U/�GЮ���� $@��������gVag�z6�oh�����3����� +9�����j�k�^�|3�Au@��@> +ؐ���[����a$�-��S�g�2䵠�TT�Ю V�O�j��� ��#�e:��O������ �BPڅ)�I\Sb��[z����)��lMய�A�]y�zR�S�����3�u1���9F/�<��0�k�� ��ļ���o9�#�;��q*���zfW�!p��%��U?n�#ol!.��Vߓ�`�g;+�T3�91{�m[��I��{_:Fi>)�fXE)�8�)�vc�]�w�*>�1�L_~���������W���r*ii�e�|�%�$�@�]���3�����S[��+/�O������G ����J������-g�=��wU�M�Y����b +\IT�N��"f�z����Bp�R�=�L�L�oo��.m��/{fh�n��~��~��{��Z��Oj=G�C�g�P����껊o��m�V� ����D[ڶ��F�5�y����Y$9X�<v)I����;Fi5x�ͯc4�'��Jej���I�ږ��ü��]���RHZ�dX���}� ����_���[0A]z�X辻1I+N�z;�X��a��]%�߭���i�>]~ݖ��<YWv�}��[_�3B�H>=���Cz>5��c� y����|g��$�r�lr���_�1�;&慼߶�q�F�5�cw��~I���41' ��'��;:�V��7�ND�B��^�1�(����|ʮ� ��v,,lb��j�@�l� �BF$�*���`cJ���?��v?L��%N�$AC?�K���nrN��n7��IQ1-�1fඹ��ـ��#��}3�ۮI�5뫚S��e'6ߠ/�O���y'l���̺Լ��,��'�W6�Q��q�>�o}�I�]څ_a�/�@�6�U|>���W� ��1�2a�lL��-���~^���;�>�ȵ�n�zJ��y�ix_yp7�Jz��(���0�ܫ�A-���[��#��~������7��X�S�:�֏ϰa��d�*P�2��龙���'E_�?P���f��Pn� �26G(��QjIHC�;X��F.�5��e�[��ʛ��@m�z���--�䴤4YXC��l�nyT��ҋڟ� �.�sʆ���dT������W����:K�^�7�Ö�]���o�����m[�Mg��� \��>K���癮����}ӌJ뫦㖧��-�Z/��C3�����CJ.J$n�?W��Y>͝v����h�5a5�j�rޣD��'�\Ә�3m{;�1�ˉ/��!=��/����ٞ��`~\����*j�nϰ��ݵ_8F��A%�!������vz��&ts����>Yc�Ͻ$\[��.�l��"U� n��ݳ8Ƭ���2C 3d�V��WS��m�$�eA�s�ֽ%I{b��wh�m�`%5.hua%��?����Rk/1�����m��W�o鹖�ȳ�7���;��,<�\ �f&:b�B^b��C�}Dڄ����������ު�3���x5�J���4�X���;�K��#�zd�����X����k��$��ZR�2�m�86��,���OJ.I�;�S�������/5ݙ��_����`�����ED����4��$��������èL����噻���n�֤�qk�W��O��j�s���{�-�1A(�뀭��#�O�%oM�����!r�����5Zg�/���"/:Q����&�P�R�qO�r��]xG��r����ͷ�'�sL��!�4�ܯ�} +te��g���c����������q#�55g��=�����#����'36�h�))ek���^�d�����qn������:���R|�k +}�x��K˽�o�C�����<�)��m:�� +]U� �!d�ZR��83����ϴ=%_;Ɖ�^%�m�Q�yUOKZ��Ayg���%_2r��s�/����,>k9�ӊp��ě��?��� �DԘQDK��Ԡ�Z�:���l�P����{}�oqٳ=���gze�ʘ�Cq�ܞ�T�r�(�B�h�����<�>��[��c���g����Ĝ���Hx@{�i�7����8�l�a�1�H� ȝ!%�5�����;Qk��u��yeBY�����ά��oxe�� `��RA��#,w�Kͥұ ~�^5 �9�(�)��>����WF�!�1�(`��,hL�E�xx�W��ȧ�I"ds��l}����;72Z�a�q�13z�*�/��1-hm�5M,3<��`@������C�i��y:ү#7�E;˒��<��2`���!#�������r�e������p\RF�k�f}U��;��߽#���YQ����7���t��U�1J�ޚ��y&�W�cm�G��۞�}��{��9i;���{N��{Z����s�I؍3S�]搗�ڮ*W�0����W�IpL�C�~-q���(��>�<m:��dO�oOI�A��A�5����I�bm_�ZI����ˡZiT���\��gzd��{z��[|���q��JH�l$�D]��Q�5�vޯ ��B�GF+[}W}b�m�O�H�[ά��=����b��ssw�C�/pq�Yj�����$�pi�t}i�r�#�4�|�k�����^)��=����I�������!�4����5}]���O5}�6(�)�!�'7�u�z�M%/�?�Ǚ��YV��)���N�qeo�9;��q%�-�e�,����. A���Bb��'G��R�4�8ip?�u��[��^$�(�����zhŐ��sM�f��wf}Ꚃ�ص�@���1 +�<!.� h��`]���:�ra����+a�t����[���fX���Ξ$sa��1��!��j>l}V��pJ&E ���' L俭 +�a�$a�4�uĚշ gb=����:L(0��?5�Ѐ�x��/��;E t��i�a�����Sq��o����gyR��[J,���5���|jXM��9�6v[A(�h>������"ç��� l�䊤ݡ!�� ӂ��ǻ+�?8:����y�iu~ �z�eQDC�I��Z�wI�5�Iv����ھ������*;j��=�_�'U��I'�vL�ʶ&Y�sOj��Kn�Nӝ��yPW6���&�nOK`�Q�_ +��QW��j��ԃx)�����/��_z�*�Y�i1lk������|�OF-��>!�ָ��'�u{S7u���N��8�� �uO��g#rb�����}y��`s�*>Bv����3�͘�9�43�Q�ʧ���=/�b�q���㖮v�����'[�������������l}�|Z���<j 7���F����%�f)�Q-�5>�'y�"�)�%eׇu}ݛ�ث�g�]����}��~��� S���m�m�{ݧR�*�5�������a��?�2ӿpO`�����g�!��Nl+���~��xg��V~������,�$n�S����)J��>+am��]��X���X�k<����K��\~1��z4��1N�O��s�;�~5p�� +L�[��t˩%~-�-uO�KJ� ��0�� *(e;Jî�Nؒ�!/I@�3�wl=O7fȕ��-�,/�N,��\���1b�J�[�UZ�uvi7}u�֤z�pm�,���k�Q��]�A~�+ڱ��56���qa~ ��>���9���ӛ�����=�7�5���S�)~��Rם��,0P���͗�5t}o{����uw�ސr�� ?�/I������`Y���� E�m����u?�������K�����/�7��}���_�u�袍~ؙ���j�(��ꖱkׇ)��������Z���t��~��0���+؉�!��^��%{���{XÅ%�$P�j������L�4��9A��9K騋���3~%�vX��G^[p��!o��o8�������w���IR��c�3�e�0&���'�͋9^�n�=6�>N�Zh=9���s�$�v`��S�k�1)��?M- ��+�,"�[���zB�� +���~5�61�����ra�Y^K���2uw��b\T�E8�a�2�5�$�6`����Q�+#:f���1!?(��v��\)H��������?x�4��f�dեj�WƩHQ�� �GaWV_5�L�%�����1��噥���P0j�'ѷ�ӈ0�*T}��/Oo��Rr�����ʐ +��<}�(�E�,���,�5�r9����,v���t�L���)����Ή�slR��!Tl�GɅ�M0����;u/?��*V�k +����D��6P��a��;C̏jS��u��ԤR�8��i�߭/[N�4��Rϣ�D0~��+�s�wj )l�0#P�5�F�r��h���S��=���eDѹ�Y��@����Г��G�t#����ScU���Vݽ�2H�a���E�"N����, +9�E>;<�B���*�&m^C������}3�۾�͘]�jg����3�v�L��&��nv�ܵ�8�ðs�����K����_V���x��*�;�J�,/l��_As6���vi+�Y���6e�T"�C�o�W��s�!��;gE�mE;&hh����[%�oN��և1��@�n�����R�L6n�`�:,���e /g:Ʃ�� A�kZ��`�8'(9�1�刑Z��k���7��甒�O�Y�t2b�1�.M�VH�oK����ٴ�'W�嘬�!ą�טs��d��4��JB�C�gɥ ��/E�l�+?���qO����8H�,��3C�iِ��՚��}�7����@kU���[z�'�� ����`s�s���l��"�Pj�R��#�6nbm���E��I��w�\Կ-���8��(n��-W��q[J1nu�t�5���5��IFTN���w��Z��&��hg��L���]\y[��һ�3S����&��W +�+��Z[?-?���N��;�zSP��[h:�����{��Jb�Ѷ���2�����k��[�os+���n��\�n�6);������ ����f1#�f�����P�l��:�x.u���BWOr�]x��#�6l�������xԤ�ϲ����wȴ�i.�g���wC`�������Ξ���c�p��8�7���}�kCク��7�Z�J�h���f&-l����c��pʫ�W�CO� ���<jzCPG���^�:�I2uc���}����rf6j�Ƨ��8��[�+8���A��x���N��X���Of�� ����F�$�O��<���P�~+�T����iC�/[�������hU �`�n�_-���Х�0�Bb�vl^����Y~�{Vв5��Z��'���rv�� ��J?��c~-u,/���§��U�Ԁ�|^b�ې:�5�Q�Ydcw�����Q�O�#���j:�> +�9>/�D�D���a��?�ys�b�7˩��8M1� C��J�������9Zu�/����:����ٵA��q�:T}�1^��[�ꞁ_���rbzug��ij���)za�,�8��k��SA5�.�>���t��lݘ�ԭ�a��<�驵!9<sό��h�#���A<��?��4�h��5I/����E܈�"2gf� 3�RBL�{z�&�����U,�_Ɇ�>�Ύ[z�y4��� 2�N�kF��5��ٲ��T��Q���9+JP���k����&���ZXǨ�hX�!�<��7�����X��U��o��R*�>���9_���∖P�J�V�EĈ���VMݿ��dn� / ��U� +|s\|bQ��a��͇M�]�,��o�`Rk)x�,�_�/]�B\Y�B_������mݨ{ ��Qs�ަ����+B~TK���˩�9!og���_�|�z�1�����)��_zkM(�X���۶4F��(�����}��f���1 {kB��-I�ޚH�ce"�U�܍)|�G��$�w�$,ݝ�3�~�f[F� +hФ�� �x�+��鞺�> ��&�RC�U���� �1qQ =�y��_,]]�֮��Y���S�ҏ��5N��*�����JSL�k8#�����o6��~( E^%�دdT��z�,u���<LH�j�1PTu�ݲn�W)A��F��\P��A>/vK��;:!q�� �R���9-^u;%��{fE�m�l[F�[@_tLn��*��~�9�0�_A)|��'�bҗ�COeԲ���3hlg9e�R�9ߧ���z��8[��[�#/-�2��!����ʣ��A}JN�{�^�VPK�Jz��>�=˨��E������[�h�I�4����RPM.���Z���̿%�����L��`�i��\@�۽�uq=�k�{7� �K@m��̵��Z�`�;��[b&z��2�����6tr^3<RV��R���E�+k�����5 9�1�t�+G��Z�a=�0�h{@+T�,�}s�-��܃��-����H)�~��8��\� ���[z�����U�*B2|vp^hۭq|�� "#2�%8d|��5��M�K.vHb&u�JG�u�"�T��p͉ݥλ*Z��a�1��Aび7�'|\Lm�����W���umW�<r�x�x(�� ����y�����.�L���3�@g��K��L�_K�O��[�mv*�Ժ�Q-������e�O�%/�ħ���)C\wv[�8�$o��"�}�\��pq7���|~��lu�s7'��۳�����K��q��v�"�bz`2�ͨ��������M�E�H*V�R�!7uM�W��sLB.F�������)P���1��i}]���P���z�Ji<��[fB��m��#��ĆT|�_A�vIɅ^��;�i��M���D�i\y�|�=�Y-36�vy��9e݀���S��1V�f?���Q�������K@���m�x��������w�U�*����� b�������1é�ψ��#�ڨ� �UF�}[�Q� >�]��t�9 +c��Z���k��E �"�����T0k@�Ňu�k�Q�9�K��΅�I��=M���nD�|X\�G������ƻ�>�JX��y�p�����煤����퓷�H�����!��3 +��H�s<��(�ⶌP� ����OIk���S�)���֠JDZꇟݚ ���̰� ����쥷�4Uw�7S���W_� +@��Y_���9���q�;F!q��#|X�>��$� +f���%7���1�1��H��2�! �� �v7h�=Fcd��َ��~��A�u����clK�L3㦮��Ş.9��F.~gQ�`[vX�1�bs� +�q�.%Cb���@w݉-rq{�w^� �O�/Y~U{n�u��A��?�o���-/K.��l� +h�A�[��%m�ފ�s���y���u'�6|�-%�-�x�7���&⣍G���@F�6�+Hq?3������qq#�i�Lo�������Ytf��������q���ƨ���U���3��F[r>�<����*�4��'�V|X�`�zL�O�|�#o�x�j��s䒈F��Β +]Rq�A��Kb��A^E�gYՋ/Z�oO`rb&Z��"6r�@����B�O�Nv���qN��{�MUwї���s�YB�{�\�Q�[7b�ʄ��>�o �80�4>������ ��.d� �l��[rN�Wy���q��~w���pN�n���|띡VƌbJ�&8S����>c�(4��O�W���Z�xpƹ���b��ᒲ�Bj �+eVEՌ��,�hkqss}�>��)y-1���#�-���Z�o�V�#\^P�.tˠ��ib�O��{:�R\��۪�2r�_ƪ�L������ �[3���\�88�w?4��0d��d���g�gmo��:>�5-A�?ǟ���+�r �+����j��g{��㌠�Q��ϭ� &i��}U�\�1��M��(�#V��j��Q�vp#�]])��1E�I.I:v%�蜀���-�6����L<������с���`Q$ܷ +Y 3�qЯA5�bm��_G�$L�LKzH�) �0�Τ��]�<[�?^��Cfr��bם��Q�������1t�U���ʻ��e:�ήW���z.r��yx�Or�P�ׇ���_���6 +� ���@�6$��tg��˃-Y{K<���?�m/��Q˕�^��.��1�+a��:ZuXOڅ�ӳ�s�I�-���&��̪���e���0�JjY`�]�0�I��V�,�a6�,��Ҳ#v�OE}ĩ����P~ �eew���G��Z�k��| ''���Iؓ\1brB:Lv� @=���0�� ��YV�%���V[xX��H���C-!��̰��� i!��f&"j{��7`ٸ���_�{1�{����� @����^��d��^Xz]p��ԓ��r�s���N�w�Z�4�90M+�Oc�=R$�$|nT#��u}w\�"�6}�A����j��� ���EA.�jScH���q���qZ�'ϊ�ZxZ�uXM��X��%:ڃ:į��"�Nн̄�V��]�訵>0�Fqw��������NA����s��<0�O�lqM2�7�y��`W���}�k��>���5�(r���24��!����7贰V�1����9��~5�6fa!vW�����㰩S� �$�.��ƽq��D����Q�w�i��K�7IkWO���<��>���/��a@�lh~;�r�����-IkG��r�������4� ��y���K������A�t{��rĉ{�����ܞ�6Eu<�/K�w�}��M�ѕ�iJ���%s�=5+d���k�"�6+��m{���_W��,��= �ww�>�H��)�Ҧ��Aί �o-��k7f٘���s�z�@,�HE�`,��?X%�伀�r�[�x���g��J\�-?X��?,K�V$�+Z70K���CJ\fL˨�1r�q�1�58gwAH�]�bF$�����&�Z� j����zX#Dō\��쀊Uѱ��F.b�,���x7�,�~�{�_����( dz`a-�Ws�9��3%�l�S +lO*�s�}���nFf��1���9m�*b�xx���BZF}�L����gkO9ǛNE�;% ���%����槕���)�v�Lk<��jk�m{eKʨ��T��,/ '�^T��Б*��TTK�:&Q�����FIYe'5��9& y�=�_L ���3A�K��)A��3���5q#PQ����g6�~�Ja�stb��˨��+��## ����A\)�YKnD��ĬٜaTD�;;|`̭n*��~�=i�)�F�HΓ��mBnH/"n˘u;ѧ�e�5=��I|��������0?�����݅Ξ�E��]�w�<q�`]�N.3�� j~@-D��]��T<�$wvjN4��J������+<�kY���礞rQ�Yr/j���NZ��%��:�������;�q� �\Ҳ[?��ű>h�5��ZTQkv�l�%e�Jk��H5���Ӟl����{A �ae�����ꟷF��G +�ώ���G}O��RhQ�߷���JN�w2ʨ��|y!�ꎑ�50ɱ9:jk���0��6�3��e{Y���Q��`���9Bi܈+��z�g�:D{]�������Aɟ�=��������<����êD�c�R�/��,H\M�ȡ���[ð�^917�g�\r?����1jL��rɫ��6ߵH�I���k� ��UJ��wPA.�j�a5�ާbկ�cs�\���%�P�t���������e�V����fU��F� +O��CӤ���«�o��>�c�w�z��;���v�S��ۘh��Ŗ����^)�G��ߚ��{��_����wvmbN����д�L�h爎�(��%���*UI�4�� +L��y��g��{g�7�:Zm@'&�gy��qf����� �{����gmW������@s�����ݸ<=o}Qq"�F������2��RT�!!U;!��{'���R��'����a{r55�P��Fut(�����1"j^}E��I�.���1�<aRb ��.vv�n�̋��Ybc�R���rK���}�cV�^-�xo���[����yV[bA��h����Q*�R|�_�-�Y���Wz^$WL9��Z��V3�1 ���Z��_6<�8�5�+h���*{��7������7{߅�|\j�}��h���Y@N,�=O.t�5�2���n��!o����{6r����Q�3�3�@˳�W{_��IΥ�w�j�jr��{�&��w?���-9��Ƙ�Y�n�5/�����?/��=�� ���i�#����v�=��<��Y�ZSP 4�<-n�@wM��|�$``�X0W̯�-/O������t����۸��� ݟ�swG�N�k��� �ٵ7M'��+!9� �����!1�C���;@���,";nĔ%�i�`LJv�֏���� �s���}�����.M15����t>��l����i����J��)�ꤧ�y�>����(�l�z��Q��� �,u��M�ݫ��:�,�)�3b@��=qN@/nM4�w� 2c�;�����>5 )n��=Ū�i���^�=�v�#C��U��{Q-�1�������1dfLC�O� �anP#ܳ�Z��߰5ɫ���]�>��$�Q���|�eÙ��T�ga�jr�s� ��5�ŕ���Ձ�ӎTzt�Q��7����B��81k���9�v+�$'t����-[��k}��"j�5Ʈ5�m��;��\��[b���,bH�.�+��1��"�{�<�v��;���a���j�D��]d`vmbt�r�} +y#� ��tl��$�{}#� U�,Pa�n��ׄ�#���P*R�>�q��m�Z?�������̨�&�X�>��5�l>�6�-9�x����al�滦Ӿ馳��J��F���ws��K�/ ������*�7�*8`{B�K ��-Ge�/����&N[l���_��Z����P5�Csl������|�OŨ�L�n��i8ayX~r�]K��|@OO]�����T߃�0 +����I���c`6Gf��s,��E!ko��L�9��Z�SK�y'�SWț���ۻ6b�����[����=�%�!��V�T��R� +����o���.}����XXM*K.�I���] n��^Z|[��_�x.�'�Y�=���q[���8 �� �Q��S &����Zа�v6`dv��GU�����s>9�pg��ߙQL�!��0g7���,�W�Վ��s�)H�W!B�d�显�3�H�S�J�8{6�`o���]�Q�.c�,��2�;)�� �U�����d&ROM�ݵpp����(� �m����3��� |t�ս�������Q�@��.��T���t���r}���eC�rl���/��kNmO��B:zS���ߞ$�gX��F@�����7����d��Vɷ�����pJ 9�ǵ?DTĒ��ge�Y��c~T���[lF�,��E���J@�ތ(�y�A�L�w��gٍ�ä,�x����!r|�-�n阄�4�������Ч�U{Մ���V7�Z��B�&P���۞Y����K:X�{�p�OI)ݷ +������X��������c+�˾�+1���w<����4���\S�RЏ��&fk������dC�k +sۯ��$ۻ��zE��q�v�U�6�4i@ +��c�4�,\td���[�Чa�-�!��p�@+JVh��UQ�6�ȷ} +Nk�ȧ�/�<Mڄ���2R�WA�u_��aW�jV�C'wO+D���#$a���L�l�t���O^%��#g��U���+l��oq97�����9�H� .�����B���PJ��<������y�o�n: �s��o#p� +a-�i�L��hZ.�� g +� ��QҊ�n%� +�fk�嬦'��o '�ө��x J{���=���kңB��p��E_:���B3ؐ�Oҋ��TM�Ѫ�j>n���X �D\��r� +^�;�V�$AE�,h���X�����+(�Q�u2rٯ+���g���9����Rq!�9��b�}���_�C���0�F��q���}l���L��į� �O�+WF�J�g�X���%�۪���ƣA>���+"�.N��-Z$f��������天��g�h��)[2B��;hZ4u����$���h�͑��� �ͤ��N��L�s�JjY*�$�������c������� ��:6'���$fz�����Z��V;��v=�v�yk{��3�H�9��v6j���)��u� �%��+"чe1ŝ�it�}���ԏ���Z��q0(u���@����C,���n�*-d���uc}e����f�m�.� l�/��_7���9,5����O��$��6+zO8�φ�[_���_�����[�<�x<n��?8�uv��MZa�U������������{�-e��- +��D�q+wLMY��s~|���'�3��}�o�����]#�yw�P�3�ɉ�ѷ����q�M��!��ױ�(f}\cvV�5>][���/����=Cky��9-��*�K�FUDƩ��j���z�L(�ɰ7�rF5�]1���b��@�g��9L��5�[Sנ���;d��1�J�/l����"�.j}�s�ɢ�@�K��"�Z�t�,�`�]�1�H݉��Qs`����y>�!>'��-�=ڳ�>��h�d����c~.;ijgX���c�f>��Zǝ�&$�g���=��J�d�~�|@�|X`���?h�V� +ؿ���{�vA�v�Hoޞl�0�N�g�üo�Ld@�(s�>��G��t��|��U�K��،�^HH��䄉��R+6FZOm7�8�+?X`����c�~���*^k\�oK�@�6Q*#z:����� ��*&@�w�ɅA-�ۅI�~���yT���u/!p>��3������́�ӻV��z{��JGw�*d�R�[�ݼ�������xo��^h&�s�-C_�ڙ �!�����Qsg��z{o@ݖk����5=�"����T{�L� +��)W]3��=�����U�E�X�w�7y��ܝ���z_- c�'e�mO����c���/�|�w�-�1�r�9����icws=5�8�p�"i�NJ�c0\X�.��,���7�Ө������]rS�C�3� +������x��ƥ�ͱ�@{T,�A��) �@����i���O��y_;G/��&���1���;���9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6C���Xձ�"��' +��� ���������؟T}rq1��- a�$�� t���c�p(�S���1�ѱj6�@��7�1(*���s`�[��Ic�{���7���kP\���������}��NG�p�c��{�}����ӟ\:�A��'<�v��o�AD�E���K�t�����1lj��O�g\��v,��-�������u����?�+�����mO��~<���^�����+"Qq7���ߜ�?�����6ş\,��I\~eK�1H�'�c�k��<I���PƍW22Үk;v�R��Z�Y���Ϥ��|�<_?v�F������߾�'~��T�<v=���O ���8иQB�h$�����e5zՌ���Ѳk�6� �Ґ_��j#s춸E�jY�.!ק���gU1�cQ� =��":.4�dVjjZ���✢W��]����,� � Ƶ�Ұ +u+a���B���n�O!h�J饞i�̀4���6;*��ǕBD���Z��9Ƙ5Q�ͧ��lː���J|����Q��c:Z}����̋�1=�1��V���2�&#�bB>Z;;�s<\T�i�D��Ủ�qQn9��>O�N�s�3���^L���Ь����A`�3�������_���-=�f5�hE��QDޚ@���i:���wî؇�OfP7��I��R1j�jvs� ��;� KWw@���);�n9�� �-����4�����)��Ϊ�̪�J��t��A����̠Y��I�bf��G�䬚�;�{�~��dIqb��}�߳�>�M;��&����Ӂ�Eu9��/�Vv"6qef�_���j��+Y��w�����\{S����=j�nP���� +�d}�}zs�W�� +�kTƭ��;3�si#2�PQ� +�9�����P�w�C��8��MPFE����y��DP��� +6�wf����swq/cN^�^�/�~E'擴 >iK����q +ˉ���zDդO���zܣ�y���~��;Vn��,�<⒵Y�nH#}3����#F36��N oǦh��G�@��>�! ��znR��'�������O�ͅ�,�8k�'n����\X+'�g2s� +̥�⁞�xP'�Et�|�h���N��)�|�ʬ�}95�9�5�)��V�c�.�l��m�=����s�/�Gw��q/�e�h�Br�V"6v�T�G��ɒ6q������lƧb��aONI�q;Ԉ� E݊���\j�u6nU6-+��K�XV迩��ֶ#��yw0�"aY�*�H�-�����[#�+O���z�v05�~�S6uG�!k6��w�����;Q��#1�zx����ޔ�sr.�E���0�N�y�"����ŸG�E�&��"�'m"}��\P�*��F�gP@ I�6yCrZ^�;���_|�qt�E���{e͘�ލ���Y�8>�;������%�?���a�F縗R6����ӿ��}�M+�)�^�l�9����</���N�6�Y����%�W�F�!~=vƤݍ����Z�z5<�q.b�E�=���!���J*�I%�5P^q]�/��<�JdV^G��R�ů@��K9ԂGŤ�� +I�AI-��G/M��m���y� +"���� h�$�9�hP�n�v�u��\�|�\�AF �\�|�>�� +�5�W�Bze��y:d�ʴ��x��v�>� �9(hN�)�����\�_� +k����������� <,���%;��o�1O�ؘ�P������%#J�'����,�w7�S�^I��+N{�m9�h��R�cȢ�f�7�N���\V�ra��y�[\���ǝ+۳>� ��d�aT���훓 �nL�~�9Y�u�νyQ���տ�(J?���v&���#��7|���_��R*�S�y�Wqa�4��A�i%�Oѹ��js\x>�P��%��E﮽䝧\FY�o��ݢ��W��l���,eU4�>r�ٔv�9�<���!��������C+���ޞ�]L����q�Ņ�m�l�O�FU5���ʽ��f�����~��O��X�3vug�&��k>�=\��c\����)� wxA� )����2an�u)�p��2�r�w�5��S�8��۬N�5�� M=fױp��ak���Нӿ�����j�G�7vbRհ9,8���w"�{��^���:t������rު�0r���Ԉ���[c����~L������b��y��pK�� +��oPK����Tt�Q���jP�"�W�Z�M�Gތ���N��O���vC�˹`��x��Ȥ��rw[�V���T��|P-ڋ�u�\2��B �Q�P�A��/ u�(���@�c5o�b�n*�S�a�`}�sa|zd �`� +���R�����Z.�}zOLxDUik�a��vq�������m-���/�0�O��<�*$j$��"���n�im��̬�!��� +vd�*f�.m�8D��Wڊ������H�U"t����4���,����%T�W��H;ɰ���XE�6nюU> Z���cA��粌�zŵ�Kђ���w��K8�gʩf����p�],hЁ�&���#l@�����ec��p�n�'����r����o$�+/:���'s^I}�#���%M�G�@� j��eƽF9�� �6y=nS���֟�um�wq�Z���qY-�β˛SN~ij�q�p +� +>��:�2�5mǬ��ǡn�RdVV�Z�%��>V�_�y�X��\|�:������ŧ��/��2���������8�l�*�@]��苖}/�П����:< iJ�'0������A��r��N�C]`.�rz}/&nC��s)k�ጝ}q�Kp���CZ��U��LJ���B�K���xǑ�W�_LJ;�fe5�����dJ��.���I ˋ���|�v귑{%A椵�K/�|�}l�Uݱ�\��|�̴[~Q���H�g�鎣�Y����>nG�@�O'�m!d2�g+�����+��[ZOx�y�����,�����"�k=�,�����Z[mٟ��8�|�v^���@-g��&ԣ�.-EܢJx�k��E�u"�U���-��x@��z��������b ��;��86��c��V^Q���FU�BT))Ĕ"*$mK���0U�)�����<Qާq-�b��|��<�M�.�Iٺ���˘h%��K�G�����~i3�St�.�o��Z +����� 7/j�8Xga��0�2���.a��α�Q��\��ƯG"�Բ\H��@H/�s6�m�~s�u� +�������#Ökx��s*�s7cz��eb�u�r * +A�,�`LL�Rv`n��$m�Mʹ�܂r��Z�-mܙ�ۜ��&��ƤC�Gm�*��<�j9���yxgJV�vjX���s�e��øjңf��$�;x��s!c��nQ����ҳ�}Ȭ�}/`���Q�N^q��9��.o�r�o��NE_�P�}�?_�.�70�Y=+;%,JO3�o��/�j�|�iç�IQ)������I���z$=[�mf����\ˏ��c�[1'm�e���v��eL�����hj��Hv�y|y�凱���ܬ��teY��rk�e��Ӫ�W�����[ì�Ko�����m�:�ܮ۬%A3r>^)d����}~{�}&a�橸�?�=�6i �-���Y���E�2(g�>�Tk�}�9�t�ر�� +��.�兘�36l�2Oo��Kކ��.jto ���@j�q_r��:C�ĵ�_�ȅ��\Ȩ�������w_%� �P�i��4���AY;U ��FJs2w��� +4����E�ew^�(,hT�(�lr�2���}����h>�5XX�is�* c +�WE�d��O-��jn��3���,�F��JХ#�g.�ae��=�� ��Sޚ� �ɠF������,7�Uv��]�y9� +�E���ר��d�P�\x`����0�2��9rX��z!j�Š0�Z#Z d���F�%��XY�SVι��w�P�"�w��\}��TI� +����K����y�9�����������yu�?��H��͔OP��6Y���ꛪO�@�W& ����c���dfE���P��15��>:{�����ڏ�!�tI�6d�C� ��b_D���i[����V�Z���)�0�F�1�>�����6�߭��CK�Z��ު��u���1����Ҷ%'��S�̣��Σ�i���4�\|��g��-N[��~P�SV~��DǑ�T+��|r�qbkr�t�a�����.��6$�� K;0d�9ޅ�iΙ��\j�}j�M�~���/�߰���s��W��<5�>�1�����ʏ㣬㫯:���_�M���VrQЁ�~�����A��i]� ˂�w���> 79�+J�r��`O���PA�:���~K/���C}AY��^N�,���l{\X���А��HZ +~Q��Vqs/g]�"<���E%m�I*������>Ȅ>�4��c�]L:%I蕄�u�����7c��t�-�M��F����c���_�E����N"����0�KZ�/����%�� +IZ2.�9�� �70h0��F� da�w�q�*q}ܹ�>����9�멨��[� +��#<�M.f0S:�?�� +�=&B]�~��|�ԗ�W���Ǭ��^`A���Σ�[� �z����)�ڦ�U� y̘�t��3g �d\Z�.�^�)m��$�;Sp]V��u_��+�a>i��B��8ڎ������GEښh?�c�ծΨj�n�}�Q�9bS6�焥�Q�֨�<}�V�q˗[��3��fcRpqkRTy��2����d��;�5_������!st ���Y�{-����C܂�����Z�GOOşw���w��[��5�����(�����i�n�e���/�>8E��I�̩����/oπl�i�am��s����>���KXPKA�!��Gߥ���Ԭ�h{�ydg�uu ++H��qA M� �^�:e �#-��o]���Wm�����w��C����!���ɡ�$]Y�c6P>�(���]��!���g�%�[���Z��]����m>�q���e ��v��~�n9��֎���Y�WJ���l@��5+���^�`��/=j� ,,�;ޮ��߂��FC.d�J�����9`�k�Nay�#���\m�:ZR�ʹ��Fy����5�_TG� Ƭ_-�l�ͅ����NF�*<R@���_�ZXT�r�J��jq.�Q�~I+���k�$�b���RE���ҝ���Cp�5٧f@�wf�'I���梨&�鈐����3��-7i�͛�����Z�3i�ٝ�3����$�,�^����b<(mM��t6���;�e��0�w�hߣܒ�6P��NAe|����yWO�&kJ[a������9:Wf<�:Z�QUbNp) |��^��ʚȠZ��*;֭�����O�^��>kg�q";-,�Lj�v�5 �/ԥ�#�V����#�ߣ�K�^�}��e�Ɯ���Del +�<e�]^��ik�w�tX��uKjVR�5�9���_N��.s�2�*�]ռ�{��?׆�B4`s��pL|�u|g�y_j����0L�=�=Mz�|��v��z�f���S�ߠ��9'��f�&�oAȨ�>�AQvN�@xT\ +��V61/='kE�F�΄���23'm��5�M\N�&!vA��d����_��p�%�C�Ɲ&��f������t��jю�_���uqjT���U��3����Q��G-j4DLo������V뵘�[�u���u��z�EhPP��-�_�,��x�=(��>+��������`E���B�Y�k��Z^.�U�@?�s�+�OX�z�����Wڔv�.�!�$<*Ɔ|� ||M�{n�"r6�4SI+I��3���s�F�k���d2l2' ��g��r�%o!�&͎�q*>�q8LH�{o��w�*6�&}4�h����:|f]|����B�rѾ'��������AY_X�i�C�Z�JA +�՝_��תs� +��D�qھ��?�]�c!�}s760BE�od��� ޙ�aU��t��]�g�>�q_J�zS�kϳ.e�� +���HFL]�C���f ��6�#����}vs�}jkBp�pixT@-�O��d'嵘��75m��Lk[6&�e�PKk/��m�2O�.���4����5������h����[�ǧ�)�QM��{ȶȜ�����U�B�+ef'V�J��=��uj�} +���׆�\�|�tkx�K��Z��6^�}����R#m���U�G�C�5�� +2Ef��Dj����T�ٙ�����[*V���H��ۏ�M>`�@�V�H���.�1�H[w �a65���\O�p/m�h�"��� 2+(���j�!m��lO��' �]Z�d���ϠS0g�I5}t8 ���\J�Q�� ��7D��&�@!� �gݪN*�}�Q��u"�eR�!3�j 7!Q}>&i�����f`�z�i���^�ؕ�E�_+.�/�͛�`W/Fsp5�6� ���\���<h$�F= �C��e<z1�1i�@���)u�����w�ƴ�=��_�����J��C�&�=��N�A�4QK�hV��x��I��%��I�V�\}H���]Z��kCC�JVa�r������Ը��4�|B���A�f�`N���{�ZۼN��qJ�͠��1��.c��=,D^�"]}4dl���iqI>h�J9��Ies��w5�=��;���F�:M�!([��۶[�72Ȼ&=��p�T,��ɦl��=� �Y�U7R>������<��#��&�!�3���)IE��eX-+NOA]�ؐ^�:c5� ��_���8�x$��Ϙ��Y�zOEtr�o��>�&iUu���<����Ƙ������� 1daef�}1����%k^��d�Q�ǘ]Ҝ������͗u�f&gs0������\{]�o�q�w�q��Ӗo�Ü�9�F�,�6~�A�T����Oΰ/@�n� �s~��-�8Ԁ:ֈ����-�^5|������Ze�a�w�%��\��.|��ר̹�"�!o��+�0x��{���Tu��d����0���s�*�U�!nq��DӾ�Y�e��w+���M9�l�w�Ag`#`�u);�Y���qq���O� CJVp +J������Ѓ�����Յh����x@�ʃƾ]0R!/��<G�-�4�P���9M*��v{��,}د5�ݟ�k��ߨ۴�������K��乨��yeMI����*8���X��~�)oNy�R�]3��D{O@��z�m��2*���N�4>�� �f�����B�Խ��Qݐ��Y�>K�ͬ��j�m������|���B�X�>½���֫V�;/�`���8D��k$�s�R�2�]�{a��^���o8d��vr�q{r�v��ҴE�aӱ3��z¯��^�8�R��|�ze��O֜�)�P���G+�=��9�tu\\T[�w���E����K��:��9Ie֡�ܴKZ]�u�n ���b���^��f��+�O�>M�p�צ�g�!��a����W�H;�i��a{ZR��qhk��������;[/9%�a#]�R +��*7'�{o��������u�9a����C�U͢�A�.,�B�O�Z|R���ӆ�ï�O�'z���^��3`|Tp0�hi��2im�ur�Q��%���ӼG��vYg$�2�N��d-[S���c��K͋{����6�hX���4�`�7�����;��|��9�A� �����dW��љnЕ[�d��P�!o�}%�U�N�ۙ���9Mgڮ���x����gi��ةYiEzV�H�,ڕ!`I�N��܍v ��l�>��!~M��y�gKʮᬎ����ѫ/���k2����tߠ�ru[��vu�J0���Z�"�u���Na�؇�g}Fl���Y�F�<.*�=�9{{�{.d=�^֣�h�Y��1�'q��m�4����Neg�.*C|*����D��.\�Vs��I�@���S�c�3��TT YB�F��z2�շ1�㬌)��G�!�ܦ�]W�hW_~�h�1�z]|�S9�=�9:k����퀟���k�h�}*���混�R�4�?k�i�9�$�6�f�Ѭ�t��.C>�� �R6I����ץg�E�WҔ�r0��:��r�˷������w�ݹE�>+#i�1�N=>K{d�������?�O���ki�A�v%��r�UՎ95l��Kcꋿ#�M¦j۞���, ��q��26�����sѩ_y�~�^CG�t^U����6�;/<��&5����jŨG�K�Ȯ�݆���ya�����!o%�Ҧ̌��v��3c�7�m����B�|=��d=�ҫ��&h;����>9����˚���*&�ض3O�N���~�\j&xB;�Պ�N^��0�:g�R��;s�KP�5�ݬ�Z�����5;�l�̩�lO��V|��AC_�mz���x +Ƅ +�{���Gzl��d֪�b~�&���.�<�Ұ��/�0p��X��[����Nk���G�$�*F��u߅JL�t�����U���V�y!:� + \�x��K������vc��]�3�+kN[%�]݁��<2$n·�R +2 +uF�������s���IeM��eA=�z¯��Fz�RA�����n9$5�3���Q��CŌ�pO"n����=!c��fK6�e��Ĝ�ta�qh{\�Hk&�\E|=DDo""�^2l0�#�iLU�<*+ͅ Fx� �]d�� 5o�#�=����NM� �������Y�y<���qe�ׇ�MD�S�u *H�� ^������ш������Gd�������DHg~��3R�� �A��}���O�Wf��vī�.�w��ޒ��3}���{Rv=7�Ҳ��²����o8'��ꈅ@v�:MJ�L<sj��Yq����0OIrZ|�XaY}�؟�U�e��䌴<cU4&f5K���R�Ҋ_�Z�/���0 �()�3�!�t� endstream endobj 43 0 obj <</Length 65536>>stream +�-�iejNR�� �E3��ܩ���^�9�y$����Շ5�_��g��}:�7�Q��ZLy_�1;'�����μR��v���mM�}��'��}wu�Q�N����`~v�½ {7*�kU��b��ןb�[#�w�Iơl�m�a�y�w�'�c�;�D�ܓ�h%�Pci�����K�o�A|�Ν��cY�,b�Q~�I2�6wO/����{��iiE�lu�����ʯ��:u����z�=���=�h>��E�&�Τ���0�$h� +��eR��������c2T01��q8��v`>���l��ST�YPzl�}�D��5*�nL�-Dd�ɸ�1\���4��F��T,>�}��%!ϡa�6�U2�߰�.�r��(d�K/!"�U�2��Tr�k;V����nL��ِZ����W��D��N�1�[ԫ�a��;q�I�a�bݷ��k�r#/�w�*�+j΅{�]FŶͬ�����(��Ec.���!� (� '�"�j�}׆�{����`w��$�`�E��4����{���;1���ͅ���JY���MEU"j^g �M=Y���y +�cPB���=h�Wں9�<�� ��'���9.-IϪA��&�ov��ڜ�}ec����g��?�����.���:�2J霂z�lz}c7$e�Ҷ]�H�K��3+*ŝ&�֤�nkF\A�?[��js�� :'i���P���K�6`~��3;U�e|�����p��T@�IxD5�]X�9��l:�%K;��C�&&[�7�������5�%k�8�\������� +�1/�,�f�'<��\@��EL=�,dRc֦nK�ɫ�S��̴����!�5#^���.^zN�D�0/kc�Kϴ!�'���M�E]�֬MTNx�|�����+C��p������th`(����x��d<�' �=�T��Oɤ�Җ�]\C@�!�.�I���_������(?� +��/�F�M{Q�c�$��+�^I�����z}�P-&<�&�%�&�J6�����chPoD#ݷ�� �+��XL��XEd@�D��d�>�s���Q�� �J ��:���lNwݘ��"�~|^%%�{���),t���ت��Yn�c}��P��Z5������`�q�t�-�<��3v���E��V�0�>�R��=�����T�@�7F���kTLg�ͫ�h�U�<W�ma��q~��!���.x��B�+`}�ZZ��r��DM=��4 jH9!O�t����xK�qKj�u�<�]>:��r�7�ۏ�ni}��6q���@fF�ك��č���Xb����W�>���G��Zҧ�,�j�TQ~�^ƄMZ�=˽���<�q +J� h~�`�{�U�í�0[�&F���x���w�^V�;DM��Z�h=��2���=zA�tg����H�~�ʫ���|�-�����{��NYY��s�W���=�vw*�y:�z�Y����'���,��k)��Yڲ�t������ +�^L)$��ƌ�y)���n ;5�n�Lj;�3�2��~&������a^�߲���:&�|�y����bb�w��hą�F��E�����;���)�f�kԠ.-��+X�GX�D�x@Ҳ7�Q��,i�,Y��Z �d6�kڻ�*� �\�!��/k�(̫����D���>[��t�,��o��r^��vbg��˝٦0�q;�$eS�I���|��~�oԧ튦�]ݹ=+�ݞi?���;�j�%x��Qˆ~$�v���_�&�tN �EY�� +�)9���{oIk��%L$$�!cR&>/h��'÷�x������}�ޮ����dT��B*!�������GM}�X����:"(i�E��e��+��GV~1╵�αϢ�������|�K"f�&�j9�v�!Nm& �,,t�##F3���i��3uȝ��zp�a"d4@_�ui����Ǵ�\Ƞ��Ā�$�0/��{���O�a~Oa^g�[2� �:]�ź�3��0�� +uPY�s�٤��Z��w{7h��ܾ���`bFTC�O�|�D]��F5��k�M����I���6��� �E�>x/5gV�g4��1IEvRP�9�� lM�N��G�^����0�IGx,���G����Q� �ƾ�� +�\�bXs�[ʡW�z-�S�Q��� ���Jj �M��E�ل_v(���sI!��+)���=d~9��S>YG�-��9��3ى�!V�toQ��ˢ�~���T��[��`�;U�T�j�&k ]��k�i��}5���nM����21�~���[ӪƝ)e ����ٍʘd�t8 k���6�^� ��2>?a��A�ȇZ�fˠr4�J��."�fve���V��ZA�=��}C�E�.��b9�+���L���J`�����/��ԭI����>b�d�=�i���Y��!W'Z��ZVf�eDx�%l���XXߍ,�x�r�����?H�� �"�S� +�=����� �*3~^i��)B��r<B��6QX���w]�C���喵�\;�?C���|�!+��<M��'jI.(�(���_T�������4j�f3.A��l�ϸW�B�C���$Bz5�E��<����e��F��<"b4A-k����ۤ�ӟ�?�V��5�G���AJA+�z��B�صժsa%��L���ޫ�s��w��G����� +Q��^�F�jx5�龓��?�-W~K/�5��uPz���bnam��+"]]&�}�a�n��\&EbN�@]jNƜ+E)���4�3"����ߥ|*^|�wqgFp����Okb!�������on;Lʭ9]�k��!rAa}��8��<:���o돚�&S.�U&�7�Q���/�&}w)�A��uf]��#b" _���ン�>�E ��\ࣖ�W���y�!�%��[�F|zE©ag}*��KR��U�my�M3�]�]ȣ�_�"i!�����5%��1-�y�4c�U�B�oA��u�����G�[#����X�]ȍz�v%z�2�)Zx�v�6�%ooI)),(Do�{Ӌ}j���F3p�U��ja`����Ăº�CP��yBBF�欴w_���n� ��;t��LZ��� 8�`2l��e� ��!,|s u`��j���5n�)�d��.�_�R�d<�w���0��VX�),Z���n���i�6D���t��_�:��-76Z�[�"C��݈�q7,nߞ�݃L��_�ji!$kG<�����8���$�T.(i-D�J�/ y�vbas&��g� +��8��%f0���,��K�vU+�Vu >�j�͘�W� +��H?�ۍ��M՞�K�mUz�?P�(�:KCO�ɈVQXԛv��}dL�G �^eYc�gP�\���z���}ˇ��Pп�Q�ѥ���7F�~~n"<yʡ�lMI��־��\�u� _���Vƛ�g�⪜Өً���_�؞7��.4� +У{1���2��,d=���1YI|N�L�'=�f�ɇ|�-�\��6Qn�����a�s���LT��ϩ��=T��V>b��S��.�%z�&p��/�o��J/�m���9q��k��Q�I"��Dܬ�}�\��K���ޯ�pJj0`�<�P���0ǭ�fXow�u�k��3�\�d=�Ki���~>����`��pm?A�q��zs0��K��Z�v�O;~���� ٓ�� �HZ�0h��ޒ���U��e�<��s!�xw�4�[6]/,�o��7�F,�K]��V�wr�:�Hw��R��"�s3���>K7�}�J3P��UT�l�A�B]��P�-$xc �Ѯ(dX�ɘB�0V��Ƅ��t<��w]�`��p�u�}��%�\�|T���_�B枔���=��A����,�$�I�l�Ƽ�z$�o�]�\2���`,4<h������V>���6"(n��|ըr1�`�/kO�y������4h6̃�Pa9;5+*IL/��U0/�w ��3ܳ�i�EܩjO��/o�p��Gy�v�:%0�������:��Y��j��7�U��F���vk��D�� ���Qv�ߗ�ߛ�����}�*�X����.�Lq��.~Y�*,K�E�[S�K�i#w�%���p�OIП,hy�&���4�^�����[���֥�YƮ���ͦ,���]PC�Ș��9�ˉi ��w�*��J��=���_� �@��悲v�-������4�"2�h��='�׀)�W}��� +��/�� +��)C=�6"`�S��=Q�!� >��~�a�{g�ȿ):�{�r��e�!/�^�(�k��,����f* �"}��Z>Ҽ�LFȺ�ɢ�����q*�w����{a�5�x@��9@���FO�s<gc\png�w��.�r�� �I�p�#j�|���8���������9�����M.��{Kz��R�C���z�M�-@���q����d5�������X�sd�5}aX;�WQa)�K�SNyS&^�@B��D��n�N�,<$nB}�+�G��zoO��/7�c��B�cj�؝�H[�Z@D�rz_컇y̦B��f.�}q�4xP-��b�>q;�O-D��ݰZ|Կ�tm:������ug7�Q���c>q�Uq�5�f���5<<�}+��!��]a%/7&��'W�:��f����wr�)�PfF\���_L��%&9'�_u��6���ʓ�O(7���Hp�������� vQ)��QE{fF^���X�� ýFbS�ff���I��aIfNT���OLqO�L�O�L�+�F�6FY��6����{!u�qK��8�=�K�=��ds~ޡ�!N�<s��6���L�a�#�JZEe� Iqޥ��,�}Ɲ�'\����\r�u,5�:N�EU{Q%�S���*Q��=9-*F풪]`{�-��k9����줴�t���Ⱦ���/Q�s+���k�w��T�W��C]��~ù����rI!*c�~q=b�]NL�Γ�&K��l���A���5 [�Ѭ��t���Iy���)iY�ɿB�y�ye{!%;畷ni=���FF?�J�K���}ϣ��*)������nH�Ql8�v���|D�-�����ٸSP�f�L�Y�Q�@�/��̅-�@>j��t$@gIS�'N� Aրq�´��:7�A5�գ�^$�?� �UX��x��\L����_Պ�[ڐ�)[V�E�w�����ٞ�֬�f�H�T| +���]i+�d2)����6U�ژ�,�X����Jfj�wsq..~i�%k����b��D�r�^�,��<�Ø�^ sk�i��|s�����˯:&�Xg���H@/'�ͯϡ���z���3� ��Э��V�&&�^2�&8�SS�ʍa�ɥ�͟GnV�y�I�g�)�����C/X|�8���]�]�,�ufNV�=�?C?������I�ʪ6G�gW�0�%�g��$������c�>�����K��,�s�K��:�wL� �2v�%�!(�O�o��΅�5�=>*�D:Tm�CP��1�g�[L���L2���&���Yz��>;�lZ����P���i�Y�!���r�"V�������itVӊ�iZ ����V5dfTM[o��~���_�|�9Һ?5�:�vr/#nz�JRz� ��J���]�Y�^F�B��_/��ʎ|PΠ���(�*(�� ��g*��5`n5���ˬ���*��s*Z�3�qz��&(^fZ��C.I[�e�i�e�.o�%�d���\�5�yp{�}����ƮdHʫ�#VY#2+,AgE;o8G7^��M�.gf$��)uSrRӂ9��Mټ=&8���u$3ǽ�*��UR�9���'����40Aʥf��0a����l����9@`��=�GR�6"g�*\����y%uI;�hu�q,�2Y0 �UB�'��" +�uf�����W�c��9���,?��q�4}�����<�}�L��1OcN^�Δ�8�Ztr��hfZR�����|j�?�u�B���*���(�0�Ŕ���K��S�z�渦yk\r2𥝉Οv�[�'��'f:��_�S7��^�s����W@�N.=`}���x�ؿ���ۭW���C���#����ӡ����5}���wlsXtn�䢽���[üS�M^�3�?}~v�E�����#��ٝa���q������� M�֓Ni�g�C����Xx����ϑ��c���Xb�{i{Rߙ��w�\�%���V�XW�sm��!l���K�����]NM��@?�J�v�������_��l ��[}û�(��է ��JVf�W�F�˺϶�����9���Ϊ�q���P��5r��F�֤�:r��������}}�����O9��-9��LzVTLz孤O��� �[zM)ԫ����i�m%Y���MZ���\Xy������1������?o���e�LАs�q�������k�O/:��6�}�I�7��9?f�$��Cֆߝ�]��sNn��ϑrN�6uG~vy��GG_����-_�_r�.?n�j�q�K�Z��z�<������A��uu��{�`���?�{�"v)��|%��������I��{�L*�S�����8�pX 1�1�y`��pzV=��Em������ ���7k>ܨy?=��Hk<��z�# �4��VU��+���`���k �L�.�&r��4xG������sI�Fz9E)`���!ϝ�D��}�=��)>�=C?�EuҴ[ݙ��W$�>���R��,<�������c��K/��Q�^D��u�)�ɬ�[L�D�(���%���G���x��쓈M��_����C�~�~�8�������Ə=���<��]~��0�w`�>����;�oמ +���c|�9�=��ZxvrEv�e\V��Fzy�5��ʳ��"�j?�4_�ݤ��w�;-߬>�<���?8�2�;��������֟V�-t���>k>���v��(�2sڎĴ�f��8̈́kO��Ɍ1Od�Y���V�u����3�#��Ę���P��;�[H��L�w +?��7e��۵��Gv=:]KK��?_{����(����H�:1.���m��<��ѳ�s=��IC��3�酇�c�{���7�>\z��U|�w63%��|�9F8��W�ʐ�߰�ק��:!�]"} +v�)�O� �ٵ��I��[���h�4z����;�_~�ڿ c�3"8���U$�H�6_p~�|�:�[�7�ۿ��>�;NxҔMݶE?�\��a�Zn�~�q�����Ͻ���U����@͇[C���?_}�����}���?���|��s8|�dR���)]��� ��gⓂ�����)���W��?o�[�W�,و8� �Ü�[��M��/>i���[�������0�[����<��50��W쟣�[>�\�� <X�Aj�w�pʛ��ZO'G�m���gBݴ����;���ќ��c���Q���ZþG���.�ݍpkwF��n�vc�j��G��?�<�����r���. kǦjY}-:�������o4~���N`��/�C���̟���?���Wp���[-��KP���8��������/������V��� q%��I������_.<���}��;/�?��m�W�}Hq��O�����e\}�;l�(t��å����-�Lj/�������jݟ�U$�T�[�ʲ�'�W�w��Z�'gwջ��ۿy.<�YM�G����y��S������`�_��~�t����Gm?l>c]��[b�����6�(���~�/�C�������w�}%�,<l�tB_�w����#��譖OW��|����땧-_n6}d7U�18X���k���'���^�W6�J.����>�q�q�7!`I���w��K6^+���O�Z8�/ ��C�ӱ{M��������/����� �sg\T� ����yx�%�����Ӧ���?�����������S��O'�̩Z6�p���"z����'߭��������'2������!�OkO;��ީ�p���U��y�wf��)Mcܥ���2c�\X��3���i�{��[�g��������sν��}8m�5�����/c���q���)��o^)K�y�;�<$8���qrBx1>�;�����KǾY����-%� ��u\{���JĦ�n���G%����������s����,5��y���*>\|�>��P�m�]Z|����]��.���������_�Qy���Yx�?�:,-��{zևe垫5�������~�?��?��՝���7�;�?÷���Z�g�3��=��ӓ��]PF:��䤴4k�Sv�(rWx(z��M�v���U�/=l�6;%.�]�����?���`��m�Gw��0^��5�n���$z����5� s��;�#�ͩ"�7�G��7�v�]���?Z����� ����Z��_ן�N�4~:����odE��_��9C��G�g��%�ؿ���~�:���k3�}�5����s��/���wl]��R_��c�s�:c���#a���[N���K��qm�{�� ��������Y��?�����}]�~��;���Y�'=���4���������[ ��l���S�gWW��[�'U�z�h}<������K饅���ѻ����[�?���+���&9�9齘�^ը1&�k�DQ��{���{�"����"v�"Ů�9Ϲ����y���I�f���4�fίJ�[��i��v�������"G�Hpa;È女����Oƶ�3U .�)�WZIA�m����.d��Ty��y���{���>oGD]$��1 #,B�B-���0��83�Τ0��lu�ӥ���Vi�w)?�e�鲯d���/��ҋ���f?���#��5�7��_����gjr����{�н�B��\w@k�L�1Ϧ+B�Fˢ�td�SIH���s��@�.7\o����['�z dˀs��U��<��\l.����-4�_��EZ崌s�5%L���_��u[l�<�:l��iV��r�����\3:J����o�UE����9q���N��\=ⓚ��`����j+�� � 9���:��a"�ćRB��)v���g�-7��4�d�6Y����Y_W�#� �v������#��'#��*z�)>��va��p�'�(2�L_!�w�����z�b����F�26�=5֧��6�_;`�q����8P�c�t,�� +���f�zou{�����4l��9��t�o*�>�&d^��fk��������K �_NU<�NHs�3�vF��6d��Ғ�f�*���"��\e��C )g}��y���k��4]s[���Yi,��҂���?���za���{���,w �)��*��*�W夨��z�lj*OW���_��R���;2b�e53��^�t{�yCF +���]�Ã�@�|�<+(��w�O��a�ݐ�59O��[���˓���ؙ.�����f4 �"4��3��g+2��aî�u���Å����������X� 6�<�������rs� 7�� �����E 7ڥ�����R�z��z{�'����v��B#ԭ�W��2�ݍݰ/�Ά�JIi�l�U� 9���/-&��4&q�3��+��:Z����]��������E���f�O!H}�Op�k���9JJ��#n�+b��f��ޙ-�x�ӓ�i�J�n�&���ݜ��'�-��<���}/!&^�F�5�H��)�wN����oIIo�l�Q�����������ޒ��~����7ˍ�7�%��Z��˭%�U�]�-0����s^[s^K(��Ź���9��M��'ͨX�3�@�1T����z6F��S[�-���L}�[=.�-&��_��y����# ���E~˭��gD!7��Ȼ��%����/x?N�bbw��"s?"hw����'��Jk�G)��5ck�ǡ�^�,�_��}���\�)��"~lu�ߚ�~s E��_.�F�N���m���p�|U�g�>���m������&�_^ꁆ��>z�&��j]���T�qj�m�{0������*.�6��l �����i�*��$'�ւ8��F{�+�>U^��d� ��;�����-4����|6��y�,�� ��[oCg�j�ܵr��>��l}��bS�scSч�.\�T䭸(�j;4�*t��*��\e����[-/��8��VGѧ�~�7ai�uz�כ5�� |��Hɷ��b��N��J���ԇ�*��>zڣ��\.H�q����}����E_��a���F\i)��k�p�2R��.����n�c3���|���] uY.� �/�+��O0��Mq���z?*K�o7����%�j�o��rY<����ݴ8�q/��5%5��ZW���-��� &�?��=%1�h�ye�Ǫ�����l��d-"h\��+�����?6:��w���;C�����8��Z`��r�'��v�e���щ�AF�s���Փ�YI�r[ګ �� ����Z7:P��q���[�/x{0�=�B�k��?�Rܯ����ť�2J�M /�e� ��9l��/�'�ɰ����7���v9�t���ً���-���]���`mU��Nj��Nb�K����<�Ӓo+��w��ɏ�I�/%�L��.xhq���A��Za�M3���{��~�ؑ�j�)�e�!��F�1��r���t�WG��@J� ��V��8���b��|�m��9�ظAj�c]E���������b���]�s_+9��Qo/���>�o���Ey���(�(*� +p�S���I�Bfj3_� Cn�c#lJ��"�o��lRځ +�n/ ��+�4ߐ�|�!�s�^�Џ���Y��1F�ٕ����?��=�Ң/6 �.v�Z�\���V�5�͚�Gy��3\zP�W�*�^�ˈ��̖�ΦE�])j��k=��嶼�K��O���G2j��nX�%c#��,!&�ą����Q[]����K|� }e����|������c��a��:F�ٻ��ܕf���"�����h��~_N�|�ք�i�.4��V}��� R�*�Z��_JJ�L3<��\x�a����!�^���(1զa�Q�S���3��'k-�(�ɬ8�e����T�ю��#�C�;��aJᱚ�uj%��@� +�w��~��k2��7��<��F��)95�ЄR �?�sI���wC��+ZA������ +~�����d��A^��uS7*��,�t:MNb�rh�Vgʛ9Q൵����t\"���fj�l����/5��; +��[]�o���gj��/5�^��'��?��Ӽ�&��9%��4�i�O����u��Iy��^��4�ΨE�>TU�9'HiV)"x�!�c�3��<X�ٓ�a�I}6�Q�?D���2v����V [�)E�è0Ue������0OE˳+h9{jv�&p��]���ү�?�[l-�4�~�n+��dJ� o���g����֡��=,�x�=��ӭ��Z�������IF�]��0�}�%ߛ�=��=�F�4 Eh�����׆�� ,t�m��:A��!x�C�������������D�O\��4>k ��"!&�FG�rܑ���F�G01Nn�����.�g�6�Ӟ\�{��:���L����b���Z����w��Ƚ���C|� +8�%�Of�L�{��i�K ����ׅ��w�s1���-4|X���1�5�������Ş�ABԮiBo�C�����~�[��p��-Rn���'��/���/���w{�a2x�>[��+)�h��Ͱ�����N�����U��5�d����S=}�TQ��M2J�r⻱�Վ�56�>9�y�Aj���po�1��u���Ӕ ��HWY�z���T�����k��>ҳ Suu'Ӣ����Q:PC����6���������>L��!��f?���}*�^��QRv��<��8#���(��f��z���j�>� ?���+�@�b���:!'Y]u��QZ�_�͙�&��d���+�������9 �W����ASO�B�zk��ź��^�m#��fo���XY��)}m�%�ݝ�ɏܛ����?R"+��o���/���q�Q?g� ߥ��g� "�W�>��u%;��jW��MI���`�W��#!$���a���~��w�hY˭��k�%>�D�r�m��o�gz�y�QnwzJ~�h�v9>�<��a� �YZ��|<Hyx�d�ڢ�|�#K?:�1.�펋��l��4���@��ϐr�:*ة��z�Q��j3=�T,�c��=R3�O���m ����Vi��?�l�7���$�i��˙���l�R|<U���H�����#�7�͋J}�+1N)�?N�9�R +LCP��A��E��9��UE���+���~]m���=���h +���$gϰQ;���!F��0?o� ����,���V���ϖ;J�g;�q�w� ).�>n�U�ɟk*�4�Kz(c�ܛ�I}���3���+���������*�*EG.4%���n��cvb����X�$���`�ʢ�O +���j��, |�%�9�ѱ��`����W�k�e��Z���qlo���5LK���~6J�yCΌ1Ɗ~ԁ�,e�>�m+�i#E=��㞚��q�b��ГIvف�V�-��ZU��}�����L#�\c6����`�S%&n_����)�3 ��,ø(��3JN��$>�k*��H� )1�@́MXv5�ts�ӡ�nu�4 9U,�VO�gCC�]U泅�B/����d�F��B���T������^������K�y7��1�z�}LDؑв��K��0���ҜJ|��=��.�)qʫ��{;rt���;A�,v�:�|�C�EX��hc'��vo��V��U����ӠV����{rt���W�M-�w�PCo��?��xy�᠏�+v��꘨b� +��I���0/C}��t3��� >f���R�`W�K]o/����d�F�U����3�I�M�q��_^��a���4b�U��jt]� +Z�}wj���ykRRz��P":po��ɬ��]��W:��m�g�YlOyahL���"��dNP���#��v2[Y}�R�T��=�hg����O�Z�!����N1_��$K?o��}�h�"FY��)N5�̦�`����� +v�}� v�1�.�>�ȷ+���a\�e�e��3Z0q7���m���>r�}���#����z1��z'>�2&�.�㦪 +_�+!^+���(�['d�F�Q[�>˭���;�����v*h�6��%��8#㥆��Ԉ2�'�}��D�^j���;_Y{~��6R�=X�1�ܕ�SϦ�%GB�|S���NF���L� +�<��u��h���a� �o���Fޯ.��������\^d�B�V�!^�qD�CK�;�Ԯ� ��q��up0��^��!)��;��Ԙ�2[��)�giĬ�.z4��o�Q2�\@�9e;rB�����'8ge���N����2Q�4�R����A�At�s�Vt��<� +��}��CEj�4Cm��bm�kcc����s�-�;5���d��2�厌�u���<1��V9&~{�m� �9Y��n�-;�p� +����8%O�~w��l��ځ�� +��YzKwGЙ��`���`x/8P2��{�|&�q��Y1wǹ����i���Ҹ�o�uo�d8�5l��W-��V�1J�yMÏ��֓�3B�9�!g�ВL��4��Ǭ BZ�}f�2=7��1�$�J��DW�x�P�f=LjF�4O�����e��x��3J����ZH�ከ���f/��RD�Y^k�f۔Ă�ǩ���v|�N`�-#��}uM��x�$��-�`����\A���87��!##ݺ`��:��o�����bF�����Ԋ��6�Z�}��)�9W�l� +ҖTPl�g$�t������ۙ��fV�t%� 7�b2�ތ��i�*ϴt����(A���sOZMܔ +J���/s-�0���nc�6~�H-�������[m��f�jGyڌ��ZGX�a��Z�Ӝ��0S�0wNX5�%=��b�vZ��An�i��o���)�d�d�S-f9�t�BS���������X�o�;+rV�![���f~�j#3|���8�u��x�/~<�'�� K6z���{�|�����i:�x���h��ǩ�S�M^�-P /$9�\�b3�s����v���_��3�L���l�f�5S����{�b������<�`��<�{�P�k���̼-=Ӫ��O�N���=%�tk��^�io�w��"vd����k݈�����#Ik�Ѹ���[����jŀO�ۏ窛�f+�� f�m��w4#���Y6�:V�5X��v[�zo���j��Za�:>����Ux���%"�z3!��E�ޗV��:��ӕ�n�A\�u���C������x�(쉌z�� <���8��6�[��k�m��ma�6����v��In��Ivч�:B���3��8ې�q�=��x�W�{�~��������[�êq�����U�KL�s�.���-�ͮ{�P.8Y�����J��ȉ���~O7t���4��J��[��,u���jб�,�Z6t���2QE��M)�ߊ˿)�O��GI���t/P��W��o�n_�r��'����� _�*8����ؘ����\�EC͙��~Q4�>�Wc?��/�X���ؒ{"H�54pMJl�n|̅�̴?��1W���ӂ�������b#,�Y="�J���c$��XPc1��I��5�͘��%*Dd�n2�U+��a��*39�*"�b������K���+���|���(�(��S8��B;<��j;+iG*��*���c����c��|kU�TUy���yэ���ǖ<��p����^T�ㆢ�;E�~ݟ>��{���EFJ��!z�+m����:n�@CZTT�l{���:�㖔R|���13d��' +6������4\�wSI�-fj�%tT����Q��WI1W��\�E����X��ԗ37� �[rtĖ����f2�L �US��4�Qv�[7>�0/�>4��墰����]A����}v������V�� 2� s�'0�s���$��oKI��I�H�#�'�9ŞA���*��t%�{E^� �ߗ������˨�� ?�R�"������4�OWP����r�l���|�}JDߒr���P?:�~��O}+�g���o�~��nAd�h��<�Z�#�M�BK���������7��^߿ ���s�_�kA��5��9��\����5�{�,2��Q�E p�9aw����������6H�(�������������1с���o�]F������>L��F^���,�8` n�o�B�yW�9� +�"A���w.wA���}x����]е+��ݺ +u{ � ��K��e??�Q�z:�0� �d'N��U�=�1�7�E�W�9���Q!��_���������{r{p�� ���3Ѝ+�A�Z�xA�u}��Y[W�n�S�d��a��5Q� h���� +���)���%�~��~ zu�&���Ǡ�W�A_\��������e`�7@��. ���3!ϗڱߌ�x�=�Ƌ��y7c�O[p(��6=3�R~���x�ϠL�/�<_P�'���`? ��?@���<�//���Z�����E%,}�m4@M/4����>f∘�^�.�ENO����<4��E���y=}����t��5Н�.��ܿz|�Џ��kaf?��P�k#žf.j��y��}T�x�E)�_ �@��]* e�y�b?�y����w�v�.���;�{��\��<�� +���'����GZ>�dNT�7�'��4 ��*�i���M=�s# +��'62�b��/���C����@A/^�"��.���; �G�A�_]����~ɟ=A�̨{�Z���!!�$k�5բ� fm�������@]+��w����^����x�����+(��+�S�z�._������G����?x���S�.x���{��<��c���U/�F9+oe��m�&�NT��K�e��h�]L��?�x]���s�&B������ +p����N�r�F�^�'�ݜ�(J#����� +��fZ�}>��5r��w ��G��ׅG���{���C���/@??}��OͺS������ڑ_�4�]�CGˡ��buWM�PMy@��̸�Ȅ�e��҃@^/��>�0���o�^���'A1�?]����))�^;&�u�S�q����$���^�5�o� �N�y�� +Kx��˻�� +r����}zu���9���������=��?��\o��|*K������ń{iq�>v��W�+���u1����W+a�7*Qe7q��#��@o]��^u�������CWГ��@ρ�r}�p�觗��{Y)@��L� +,jxe���^�iGII7ʸ�S=�����*,Υ0!�^n�o����=�@O�{|t��?Ao��������w1��� +p£�6\Į���)��\��.�a�ZɁl̫.&�� �����(���� �p} +�y�2�ɵk�~<}y��w���An�/d�|�-�d{:T��C�u�����r -�1J���-}��#|�B?���\J����� ���>���]p���G���o�����9���' 7ח����?����jI��}�t��IhSW���)�s]���NҏVj�DRĥ�OoA����|_���{��u�w@o,z����8C�go@nO�� +�\��$�э���ُ���,�ڟebv�� E�4YS�*����7h�d|���b>y{��|�t�7n�����S�k�,��|�@�J�#Fd���(�5d�NrR$��1�w�Z�M渵a)O;H��b�%:��VQd�ut2�.5v��U���)��n�n�6��D;���3�❩��Չ +����<����yu���bҵ�}ڀ��s �ű�w!1�7陷�I �))�h��d-+�8@�_�.���EX4�m��a�&.H(��Z��|���LZ#�k�Dr������e 9W!ᙗ��=A��j�1���'�D��˔T��V�WW/L_�Go˸�k��x`2�~9$��� �_۸l�*2�5��()8���w�W�w�����'��_�.���^�$�_�_ q�^�m����f�B\ԑVXu<[Y�7-�'�yڡ�⁺�x!��03�Z�����>��/a ����b��\Ff�\h�8�n��(���[��Q��n�� �/�x9|g��l}D���i��*�O�WT� /*�rJp��`o��/�ڽ�s���sOPjh���K;�<ne����b��(i��z�h�~�xY�z�Xٸ�� �����^Vl��@|U)z@�ʾ��ȸ]��z'�k�_~<@?}�@�?.&�����$-�*^�:^G 5�#��j�UQA�(�ś#���f�����:VMV��'V�.�������W�"B�Bf$�J�����%��[�K���og�%\���� +��w]\��d=ꛂ��h��4�dATw����0wwR@��+�TUE+3���|������g��ޠܰ(P~T¥h����o����}/�sS�V�`�x���~Ҥ(G�k9��+�V75mfc���:ZKX�aDM7|%ćN��J[bc���9�H��W�m*1ۢbMr�>%��g[�6CU�e���VrK�!am���*G,�U���vv�L/ay�C�*�4�t�/4 W��`[}�أ ���CW��U1�V9���r(�F,��� ����6�ĕnv��[���[W<��X���zz(Һ��Q]h'��^] +�ӌB���L[j �U U{���=u�`��?���3B��Tgu��:�A��6�-��D, T�۫SU���mM����EmmԘ��?@ÿ�4�f��{�<�^qe�x}��DmG�G�Lp��2F�j'�ˎ����R��`�GY�`"V�D�7���0�X�s��%[�ڜ]Gƺ�q��*�c�8�ϓ��Х��b� Ϫ$�ڴ����Ү�i��Է��4��մ��p�5�SR�2B���쓲�>����d��`�`O�� �-�r��jQ`Ky�GC��{���cE�,ܙ�Q,���ĵK �����=Ce��� �4��f�-K(�:@����?Ս������iW��@u�d5|z��2���|p����lG��V�i��+�X猐���?��GZjsi"FlJxyf�� +�)mQ��6t�)1�2@����P"o�p��r���%��]-y�(v�W\�,md�'*w5�� *ZS{s��x�'8[k6��2�jZ�]'��O���������VQ�xsM�����+S�tpu���)=qq�5?@]�Cw�t���Y�B~3IP?�ު���۔�u�vmu�Y]A��`{���-�RWr�@���M�SM2R�E��6�b�T�V'h�{SԁA\m�p˜�w3�����l]�т��<�E�&���C�� ).zM���B��l�p�J���j� =�&��P�M�d��U�7Uߴ;V#p��$�����c̊*�s��m�Q�w�1�}Ĉ�~j̖��|xG�P[�5� ���GO���e��"֮�|�XE��l��D_��d��ZV��b��%���� +澶�k���Nmu��D�pW]+2)�%kRbԺ�e���FI�;<�\//u��l���_���00@�f��T�]����;T��_�"�}�O�Q �{��-����5m}��TK����{]U�^�F-�Fy5f[Ł�ؓY!�� ��_��-^�yD�$5߮���5���C'��#:�Q��L�s�Yd����j�w4���gTw�+ʖT��EbT�#��}�뇎�ō�Z�p���x�U�Xݱ�a��s4��i�l��pǔ��5J�X���X����>l���~u��C?��2N0ѦIs[[��d�[&��M9�7iPq +X�M�F����I�@ͅ����za[R�՟�Ҟ�L_��n��b�� 8���5���&�x�ܤ>�W��t,�QR$�ߙ��y��Dd�Z����t�7��,J����ɜPt������K����O=^��r�c�v`X�}�G:��z�`�V�7E�tL���K�6�?�^5�����~���ǡm�ڛb�8��T����T�eU3f:��M7���$丝1B�s�V��$�ؕ��-�?I�=��x�Eu<�$=��ɂ�k���MJb�IN��NPr�M����_U퇳 �N���+'%�%ži�����m.rA�(.����f�k������Ɇf���Yj�z�� ��Dn˨�jL�������b����V�3���Ѣ����'�I�H_�d�ҧ;��z_[Q~���=��`���%����m9<�xN(<���k�U�)�U2 +�*fɾ�C=oӐ�?��3�u ��3tԖ�>��r�#8'�q�t�Qp �cR,<]lR/��vfk�m���]]u�IE��LP2ml��t<����Ve�y���&�h������?�%�T��- r�Pζ��e��s�ք���R��w�M��P�W���p�� ?�Wu��W�mO��K��Cc��o�����ſ����YZ٪4�s�@,:2������� +��JuP[�C�<O�Y����9�����p8�@�Kh��.ԏ�Qr�����_)/?^w��T6���E����al��BM��8lGD��PJ��=�Y���ћ�=P|���(�E����uU��W:r��M�R����Y:�x��un�>"�v�Q�Qgƚ����;�Oڐc��1�����E~��z��<#��f'��ǰ�/��� R�����P�ⷥE_�[�ߘ�E���\�!�o�����������n��Oؙ �펕��J�L�B��� Q�]�E.u�s7;�y'���3C9�|�]� 5���W{�=5����b�#�2L����ћe_��}�c��_��m��k,�-���٨�����)�����А����M)&f��$��Eq��lM�}B�q�ѲL�e_�R\��T9��b4���vB��V"��^X���w�"�V!;rB�]M��i��f%"�ISY�ώ�ϱ�X���jS���jL�E^j�B���u9=s����0������[�\��%mG +Z���h��O3�[�>/u �j[�=����lS� +mz�yaW����n���/p��q<��,V��^��ND�Tx:K+5v�x;�l̯���$�=�-�����Iq������l��>��].�|>���n�����#f�h%g���'���'��E_g�-#���Y�|̉�Rp<C+>��g��3N���/ Df<ڢ¦4��R8�h��Q��xIء�\t�D%���Df%�1J�8��h��8�PΟ�8��S<�bS����Ӥ�AF�����e?.@NL�Q"v4�t��b��'��J�*���h�=��q6ǣ���JO�i���W&EQoN�i��)>yk��h�8�uC'�a��2x���Ћ�E�o�� r��������+��f�G�U]G�����炨Ʈ�W�q�N 5�|&�i�{<-���=�|4W���X=�{]P�7M/vj���K-�ι��maU��52h�k�����d��5a��[��Y&X�l�K2��ߓ��߀�+����ޜ�X��t����<��e�d��ݓ��N��ߺr��4�St�MY`�d����?�[����{�����@�(�I%!ѡ%�j���*|��0��iXX���ʱ�P��4�i����ˀ?K�1�~��Zg��lW�s6�I�N��$���I��k����Q^��8�do���Q�sϱw:�8��5��r +R��c��M.�2Nj�R|8����a+g��Ϧi�36�PSd�Ã����m 2�:����?l*�`��v_�F8�v���R��1A��'�>�t����PU眦��5�@��lJd�Ж}��Ve�Qi�}��0�x��o��n�N��*rT�e�f9���9� ݑ��Ogk;π�w4-�O�!m���`Z���R�������Y��w[<�4����eA�E>�s,��yK�.5K)i��*n��(n�ﺨ�6-�z\��u���g{��5�?��͊�����C-����'G��Ԧ=!E�� ��\�-�z�'�uLR�-����+ϖʹ�5�*r�T�/��X�ɹK���V��o�@N��c����Y�!s�I����뽰��9:֩FD�G�?�.Lr�,�VD;�� +����$�x����@�k��ڛelSt�wX���k���{��:�QJ:ɡ�]���+���K���@n�!��d�s�r:G,��jE��� ���|�©��MqZVٱ�Q�+������f���fL��)��h�]| ���I ��Env�2j�Z?2��y�<���[�8�`k��6P�2�v_�x�����sB�����?7�&�c��?]����:�� }����?�k��]w��q�aJ�RC�����熪�g����*����ɨ�������뽨�69�xw��ߛ� &��1D�jO�G��$�p�Mq�hH���{Zԡ�'L�c�u��= <r}�� ��WsI{� =V �-���)R���Z�P2���4��=��i�^�%�ZKV����jF�E� 3��~�~�h��|���O3��5�� ����y��&�a_��7�ɩ���d,�E��m�S�6�����IZᮒ��T�K��,�����u�������ÙJᡡ��p��jGIN��II=?-'���6��LE��IN-fS�JO�,s��a��l�U�M5+p�j:��PY��=s�+�/�s���=-<rG��}����;2����d�b�����Ք|����؟�Q��T0)����n|��:��BeӞ������% �#�ߚ��clˈI[Rr�IF/0k74���r>�;�ך�-C�X�8%g�`S� +~���V9�C��b�vT��e�����U6uw��7�U��|~��|E����Vĭ��*[��(�{ZD�z��\[���.�P/�<��1O�X4���8[as�Љ@.2Ia�P/�89}i���o�eڔ�����G�걆vhEV)�!c��:���~�%��c�p� �a�����=T���A��l��r�L��J��$�A�rN�u��8��ό��$'f+�R߯��R��=t����:��4���MЯ��On��G�N|���3-�:�K���ޛ��4,��]��i��3���<�?�\�|��,'Z���k��/w���k�w����J�&�)o�&E����@�N��A����Ǝ�':qȭ�� +F��8�܋ <�����?� +Yv%5�$��n��Z���+����u'g�\$��|s�s��ՙ��6������֛�~2M*;�d�we��C��T�i{�@,>Y����r�h}G��q4�#��¬��`C���� 2x��$X#Jyg��z�T0�g9�W�Ή�@�lb�W� o�R:���X��`���9�g�**&��Ub*_�.p_���hW�ϕ��>�7���Z��=]`����ZǑ�V9:ܮ@�N�쀎Z�a�l#� �|���e{jB�� "h�>ߍymJ��}Cm�M��o��YaO�F��U֝��vo���6FI�Nme�c��~C���K��K��$�؍n���I����og�r<� ����zL�����y�c��*�9����W�� �a�a���}�]v8[�:[����������ql�CM�=4��aL侖�?[nѝ�V�.�H�l�I���DGl����jx����FMrj;ƜSu���r̾��4��LR2� +L��+�C'�{��U�e�����d������v7����Ĵ��d��_�Wgs5���hSq�N@��$������[C�o�:owZ�8(�x�������`�P�WZK��^���4s�;1�������s:p��eh�{��H$e'�jE�i� �H���>D p�nf)"�9A.r*�P�sW;K|�����j:�|���?�Ô0���k�1��mw���$ b�b�!o����6))�*!'lQ�6z1��h?����V����793�}�����(��=�S#�Nb�:FK��[%Р_3ly�1�����~6���ʡ����G�E��I�Z"]W:s�Z�̭B��X���vNW�{��Y�>�Y]��V���>NɯGE�i'Dz�����d��J/�|��ܕ�Cn�����ׄ?��-e�7{���! +خd���}%:�oq:���X�����u��c=��DO->�$g9�6T�g�K�ݞ��X�M��y��\�ii#���� ۃ���=(����+m%!;l�9�;�y��9>�P�A����I.jo� ?�U�ψ+�|خ���6Y��g�:��.��j{��C��S�#LC_t�(��椗������-.˦��95�D��$e;��hS"b6�Qa�n�Z�yJP~0��ϰрO*u�p�;㨘���o�3<��b������p���p��u��h�����ab�ߐhU���*R�sFȳ�xO//T685|�m�g�`�uy�Ͽ�2̋LNs�s�e&&��\WZ�?�J�+D�ƅ w�j����Y����Z������nɑ��1\�9&~/��+������V%�t���%%�n� ��u{.����~6�B�3�1�<�8P�[���K/f������̈3��2]W� +<��[$D/w�� +�/"�'�YF��+9o�!WƩ?��+���3"�U��>R3KϦ˩���`��*)�[jJz:H����Y�(�5�B��s +�4���16d��u��|���$�������b�#E+����蛫-��� +8{@F��-��Wg{���7��e�\hŦ������$����O"v[Zd. =R���@&���}P���M���^��=���Ё�}�@� 6���M�W��#���^�7Lj�Ԋ���=���(9O���gK ��[]���zN��oO���c}e�F_�Ce��������ϯ�`����I�mD<�ۢ�#=��:��\��x�sCM���ޘ��LEɝkG����CT��+��i&b���kZw���뚒���h���74/3rLrB�?�5�g���e��Ґ�Q������F*ئqN����~�a�wы��Lq��H0������Y�.&iI��-�ܘ�K��!�sl��볹r����,L���ؒ�v�g���y�� &dSFNpL�Gz.�����S�KOaӜ�,��\zj�8X�Yu� 7ì���(p){ӄ��Eٮ� wTLȞ��b}��>ы�����4<�m��g��bWڡnZQ�+��1a�f*���W'?;�G?5�.CF���y&%�6H�=��H�Ŝ��/ӱ�0���������lԁ��[�����s��\�;���v9!�qF��qr��-%U��|��|pH�R�rS����"/�:S��R#L|����K_Qe��η�}X�,�Yl+�Ym.�����)b�IF�7 �3���n�wIܲ�e�̷��.�e�\i�|�%7�5c{�������"D�O�KL���=��B��:h�5A���t�#K?5Y"�|"�~�2)��q:�(64��6�~���$�~��ӗ�퐑r~���D��4����y�_K�*���ZZ��y?g%)k��}�ec�Y�l:1�{ZJ���x�����ӷ�K���`Ϲ��W�t����Y~b�B��0�vF�h�()�)�%lua�&+�����RsC�����Fݝ�����S�{��9��(v �n*�p�?�{.����+�F[0����2�>����PY�>JI|\��}i��˜�}59k���i�g�aS����n��G`�V0��Y�=ѱ)����=���C`����ϧ.۩�-2F�S�C8���x�Ua�߅���+2j����l��I*�����~K3���ϙ9�3���2��ޫ1FMb�aC�H�{�]lt��"V��bO23�����!߇���%���^�zݰ�Zv�䓝�f��F��y�A +p�k���{��-%"��V�-�'�O~���o�?Z�$em[�f����:����ѓwy�;ﲽ+�ƶ�6ww�T�>����W�����W/Y� ~��D���}@���\���ƑU�?���L|Ҷ� �Mc?������!��L�W���@� ��vT��)���/2�a�(ekrz�K���ؠ�X6���M�����R��o��9^d�^�*[�ω*bM]�#�M����M#b��/긙gL��;�!b*��Տ}��;3<�����8�ݏ�䘟M��ge�ğ崄��51������)\�_ͮ���] �hW��)ei��$|�6t|Z�j�ņk����Y�2B^Pp� +��@���N���9���=uO�rV&h�jA�e5+����N�/�?�O=;I�8�2T��{��WrroL��﮶W��0�3}0��YG Q����_l|�����k��k��3 p������YX��T���C�D [r�Ggo�5+��I�qj���c����˸�������uR@M��NU?7�g��~q��w�5= �?RIXçXZ`oW{�/w�ؑ�����/�b�P�zrih�����B:�5�M�V�k�/���A_/w�nv�|���t럢�;_/�g?�k���NcS�RѾ�^}d��Ba�X��̥��-p�_lMa-�>T|?��%�h�*���� + +h}�6 �E���'酗�ci�~��W~'4S�=Kܚ�&�����pbO�(�őυ7F*m���A��:��B�v��oNkh�3����Y���g~��e��u[V�g�#�����Mg~Y$T�uu�Nn��j�����/,�Ȩ8.oGO*>rSHE*77�ui(e�N�3�,|h�p�S�䕮���C�x�*�:�������<�x��-Ǥ�T�ѫ��c����}vma��@��13p;f 7��/G����)�Qx���F���4p� ������dk��F�]��.�������ir�#��$>r�����5F+ݚ�T��Q�"}bV��X7���y#����gK,�&��o���������Px���;!�9Tu��}@��t<̡��?�? +� �<S�D9tY!*��1è�T ��V��QlU�_�V�~�Ⱥ��9^�U�$��3�䇿�2����}5)?4��u��Qp�_��cO�k���&���؝��l��l�B��� %����2��� .`Į��V���a�˵a��-9>/�&lLR���wf�i�lM"�,T��=���9�7KWѝab�!��K@.H<&�2��D}���joE��8�C��/��zf@OC*���HOs��Y h³-9�t� bzf� ���۶Ί�rf�9qq�x��(4�1�f�G�s��������([o�mkO�u{ѕ� +�����g�\2FɎ�Y{�$j��)j�7Q!������@7����-�f��2�Ёk�X���|������Jr�wN�����������h� ���?{F�_�z�,rh�pe�d�g���bg�ekWڹ/���knj_+ye��O���c3��y��?�Ӫ�*x��H�#�Lջ?�¶���٫�a�� �vmWG*���w�6f�pN����-���1K��i5!-3rN'vXK������%77{�o�f�9��pU�6&��[*.�5�Ku��R\��x��a3v,,Ԯ�u`�cv�u���2��&���O�0��%�%��B��Q4�9�S��?ykk�>����6��/8�+^{��4[?��R���h=d}X٘�V�O��7\�}�=�7S*C@\�3@[*VuX+�t�:����æz��5�˽t�g�鵺c��u\t��ķ�����:�Rk�2d������0:ƣ`�7�<�R7=���N����5����S����}�ԓ*^�+����[�|�)��o��]��ښs�3^��Ȋ��3J֥��ӄ�C��}`�����C+���o�e(���&oi��Yl_�#=4�(���^�<[-�ii˸0�xyjm�<�K�F'���U��p�G�3�(;z��T�O�̶�<K��m����<j �F���e|Yl�����x���k#�gUdl�D�yd��]���Y�}%�6<˂���JQƥQrʥ�9nu���]�)���bl\汃�>�o�,�o���B:!�/gW�i�5*}u���k�nc�"R��3R�4�ʺ�>��Y'��م�Ԝ�k�QD��~8��滛uk�թ�}y/=�W�,�E�_�Ƭ��Z+���Qp�-��� ��Ծ���� +_��r|Zn�<���L�OZ���Rt� L��1Z���UA�u�A)�Ƈ��V�g�jz��0�-�S_��b�v dx��ڋ�{7� �i\�G�O��Pr��:Km���;���>�Zj˻�>�x�-"muIjI���QD���쓕�d#C�L���oI����͟��S�>x�mၕ��0Y�b��D.1�`��s.����%K��?�V�쫖��_�) �����f(9�JF'��� 5���2~G�'����]���B����_0��u+8u>u�pi��� �{��T֟��_v��xQR���7/,6�.�7�/pH�:|�O���k>dԒ��ۘ��x����?zkS/��Ot�~����1圵��jh�^(o�|֎M9�:L. *���q|�{ +������*�Σs�&«b����-t���\6a�M����E��1��<�K��pMD�%V-��� +, ����-�gy�P��At�R�%���em��1AHv���fqik���У���7~%& �G�|o�{uK�= ���4G�E��U�Hm�Yd�g�.է��ۆ0��:��k������o�)�C��<�d���S���bGރ���r�����21���k����ą��ݘ�xT��zwu�����H �}#�G�D��I?�!_���]���q-���,�������C������������� +��}�E�w�ߺ�#W�d����V��b��^c��Z��֥��+C�Q+c���x0�V>og�O ��H&�Xϥ��� �w��9���VF�o6FIi���wL͝;&� l�4�[Ē=����F����!%2�+�G{'Q���~jn��no�Ԛ��?/̹��Yz�;\�rs� e_�G�2�����&~�Q��b@��CZbq�a g��\�gk����iQ�>����R�p�WϬ1�?N1*�غ��r^��Ѻ�_4��(�詽`Y)��� +����R1��0%�砊:25Hv�"J@�gY��36&1 ~%)e���o�>r��!�fI�Z�=����"/��̣�E�=��6qIG����E�(ҷ~�0�$%os���1��W�.}w���g�1�ͼ�6��\j�y��YuO�J�]-̿;)�����q}���e�gu�!E�oH����u���d�ߛ��O���{}W�̈|'L=^�?9$����=k}k���Z\ߨ^Ε!BڹC����ݮ%����L�Rg�UkG��ðw^9�z�_r]�PvoG���G�:d ���"��@�}�l�z�k 8D-�ث$�n��j���| �Z6�-'f. ��̳oI����+�u�m�W�a��,�<aS�Ϛ��1Bϼ}�C��V�S�}zն�G�i�H��Q��r殺wN)p Z�|�〚^��&l־Y큾Z�Ks+�0Y#*�Zs�9X����Y{R�[:R./�T�շ��̷��*P�����l�\��O�Bۚ��m4��bm^@]�D�|���Ǎ��_|a"$�u|�g[��?�����0�:U;d�r?�i`�^��jv�ģ���cG��Ѣ��7�O��U�<\����Yt}���V��bgͽ��������.�[#�𒂝v��ꤠ����;_w�^~��约ə%!;l��o�5GBɡ�qho��3<��[yl�����g����l��FySɃxfD��^N��[y�����R\��)!�=��qt�\77���w��XC���k_��kc�lT`���ы��lhP�I (���YX��1��$�{�:곍A���-5*yK�ii�$�m��/Qk�Dz2[ؘ-�,���z!}����I�nd�.�nD�i���V/&�rse�[+.mc�R����_ՇI=7�ʼT��� +vi���G�9�i��R)A=~`!���a3X����� γQ{ֆ��%a�!�ˇ���Ŧ��ņ�M����O��,t�<u��Q�d��?�S�R��ݼ(��'�7kk�]�,f��vZ.,|�x>��k�z`�z��oa����ٳ4�~�hV�X�4��W5��٧eQ˶�� + ����[��y����?0��l�1 ~%>sucj-��<����hՇ6~�K��F�i�f�d�Q����Bf.�7G���s`��l[۷���.5�|[_/80|Z7���:�=gY�-v�3�]3���Z��� o��h�����~p��_-v�p+��k2!�!e��|I=���4Ă- &ۣ�%n�!��ˀ[��(�G9E�A��-����J�r�@�0to��;��Z�,��C�X���a�Z>v`а��a[�E����-�K��1u{��TP +��褅��k�ƒ��jb4��(>������Ӭ��cشӳ��3���ib�� ��ދK�h^5�nw�G?�5�l/�7y��J���Ѻ��i\��!�ڶ�4uF���d���檛=���6���J�-8O+������{kKElHI� ���A.�3�_�+|b��;��G�X�,�1E��4��>__t���|n��y��2�xڜ-�b�t�OG�ؿ�Ѯ��x��F$�Y�}@3= +L�B{�n)�s��V�k 8�l��;'$e��6T���<�L���0q? ?�^�!$����AȋYNΥ���*Z�R�ji�V��o����_�� iٸ3��iI :����&<r�@u��^{��<��$i ���� d��D嫐�~[�͚�F%v�2���1n������p��&����t�=��7ѱ��(^��_�cl辡�q��%�y~GO��@�+,zp�R�aS97���.r6������Z���^�|�D�5�|��0ʆ�'������X�m���\㗑=�ͫeA�ø�M)�4���ij�s��mswLBΎ���]5���fࢷ�\d��5�9˧�I��!#��R1*�`O�Q�����;:��P���oůO��p�y�������%s�F�� �j�d$��r�����>����|�0r0 �Ұ�~�9�M@��X�1*�&�%��ι��Ǵg�2��6�b}�]���⪂U�h��3u�[/l2 Kw4�o���EF� T�sv�]������~��w���w�{��)��w���;���{�CU�\���b:�0�Ry�Å��������q�\K�I�;�J���\�(.�9J�7.?�"��3�ĕn�K%���4��0Ww���?S2ߜ�4BR���i˽�W�����i�1/NL�ޝ�R�8��ߚ`/��I���X�Ai39���L��}]ʦ���w�*jOO��9���Tt��V��JG����!���(����@ѽ���GkS�t ��� F���R���l����^�|v��k��/���_ͱs��x�wy%��;�@O��j�C�'��3� +z�O���)�3�׀�ńu�Ɲ9&6�'W�d%oפQ�YHܶ�F;��m��=jT*��_��=��$��27�A����3Gy����t�k���r�x��#m��b�Ώ�3n(��<�,{�eU�3�l#�����/RЇD葍����GO(�5=�?��l�iT���i���[�%E$xGa9�X�ɿ�OJ��2VW�6Iȳ�b���� l�[F�_�D�e{դRys��)A�뀮�i{��)���� +�� +�kJBf�d����D����<�4�(��R��k{�۟��@����]����z���_O7',��B�[��s:�WD{��>� ,��E(� #�d��3��ȷ�D�g�t�: �'�Գ���i68�'#7���%~ˡ����J}_�w��D���L\0R'l�\`�e=�qG'a�g������a��N�ݥ���-��L�y��;�#g?rOb�4��Kjn�)GO���᪇A�ݡ�]�cQ�����+�9�jrv��Ac�j��:rd��\z�;�fC�g���3K��ٻz��>�=BI�wa^Y��(���;�1j�� ���Xp�%��uU?s����H1i�#Ǻ��>,��<U�A���X:!��k���L�mk�Э��<��¡l��i�YhԞ�X�������$��)��d�]G.[��N�e�O�3[0.I�E�W� �Fq�y#�4�,~�T��e�ru���� )�Z���X鮎�UE<*�=����}�9^��'=wOW>*�C�YJ@7'P��̑��:�R��촺c;ԡ������<��I,>Zl��˞����K|S�w����~څ�!�{��`��}G�X��=����>����Sʮ��<~�s�>�K8��(GV��J�;X$U�Z�5A+����_b�>�p���8�01mG+��i�p\��7 +��s�✛k����jJɮ�V��n.v������k�~��^���H�C���P+��Lb�$d���*'4/��5@�X�x�D���H�#��T�H��&'/uֽ��S~避=� +yyIR��J4��6\a�MJD T�[N(�ͱ�k�B�z�ry@C.� C���o-�?n�%n= ��k��|�Gπ��L��(�����f9Nj�tT�}�����o�{S��2�G�4lH�������d]���*�+��V�o�[�9NN����MSr~�'��S��4&�Ԗ�Q�:F̚ed����o��!.u;rnP�Jߜ&f[�IF(ŷ�Lʞ�S� +�a �,1�a3��iu=EZ��o�J���N��W2k�����#_��a�t̢S6Q��(���89�~� �py[˂G�JԨD� ��3��%�7[_�}�?̯�+��sb��t���f���^�{�@(� T?�6e�[�x��c�v�?�:�X�����������]-1?��g�Ɛ`5Mл�܋cĜ��)n�z?0/��n\�Z9yNX�G38�D}���������«!*yg�\��&�(�H�;`|�ewM-e����g �^>�1~�|�e��Z ��]c2#��Cj�@�9��n�l��}����憜�&I�� �\�Q��|�I���Ll��ko�?\�=���H~�1!!-��¤߽2X�e ���ew�C�kUܽm��N@���o#���F��Y�е��X�$�P��u�W��4��F��n����q���䤌�wm�LA,�!fbp�*�_C��*I�>����`Vn���=#��i�M���}^`���_){hhνbꨍ��D$��Z��������+c[��0�㘂9q�7��g�^������m�)�P���}����e��L�\w�#�x�ǣ�V��r}w��#�M"v�ʉ�<�Z�bݲ��ND��=#����H���♂�\�z�gĕ��-��ъ����5#�{&Y��}�x#���.�{-+����f?"��V�h^\z!�$.W�����Y�.�k�.��1P�*4�}<��e'le�6v�*����֢�ip�,՜�%��@ë;P�H�}�+m�8�0�t� �h��r� ��C/)���\�I�~_�#��DĀ�sɱ��YL�0���C��2B̖�+�ӊޞ6��g�[&}**he�vS�L��Q�L��}�xKF.��Co��ͽ@, ��鰝9J��8�=�����f��vt��i:�jd?�����>����W��A��0I�=X�ߗZ!�=��%Q���{��}5�"H'�9?F���ܙx�ҕzfu�����7�جoGƯ��2?���s����f��FA}^����Ů�G���'�Y/�ߜ�"���C ��6�� rn�}�(�`ɧvf��>9 ��X}�?�M �hEA>3���TԺ �槝Z�|86�������P�m�����w l侅KݘfB��!ov���}3�9�zo�_U2Nw#ޟ�%��>��V>���o�^�v�R��3�.�Ԉ~�O�����e"��ݘ��y���SC}X�%mN�%�̑��S�x�8����φ&��&l�͜7�~��d^ä�4��FKM�I���0����3�5q�������O����O�2 +�9���1 � �)p� +�o�G9�k��@��?7�em�Tq�KM�������� Qߧe��(�D�S���� +��2�N�M�\C�h�pM��`�۵���:v}�ha͓YV�͵~0���Jj�/�ğ���?��\g_t B�,T=��|�^w�;�K���%%�7-�9w���G!u��h��?�G�rȇf;���IH��1�; +ja`�Q�����P�H�?�%��������OC��ߌ���[u�!��5��ڜF�mi�А^��3Q�><nN�uN�M�m�t�?�M�3pI�O�Z6|� ��������_��y�m����"�?�x�}�ꙡ�����]��힢��{�������ze�1�.��W�Pr�/�2��-uU�������r/<���SϴC2o�g�p[O�����B3����4zk����B�G�h�Ȇڔ������V��2wd�-"3-�L�� �����? ��Z��>>s����rk�U%+�WN��� �Ǽ�i[����q@q��}��-���QpC���MJ~r��������U@IG��XHJ٫�����^�G�e2��:b�W +�]l.|��\ �}�]�b��s?��#� +B�O����%h��KI��t�mU�A���"}2F���"h�d�B*d�k�jm��q���>p�WGP�:)��9�I��I��)B�k���%�B��q���;�aR�45�|���s���� ׇ1)���p�(E�������N@�o~Ճ~=�B�K˟y���#���y�EQ�Ѫ�%r��M�9\ �W��ѡ;v���y��e&i�XT־ߙ×��$��04٧ ���y��Q߶�=�����7��\���\�|�^P���qz�YV���G���-B�1�W3�Wg3��{A{�q� +*�=AJ;�9Z�nu��N������k����*��*��Z&�����J}*VehNH +Č-��+�'��������>h�M��_�/�������b��r�XsokqWfQ��ro����,�G�G�c� B����&����=�K�b��،�� �~9?4�I9�+�4�̠��%�e����xZ�5�s \�$=�� }���:CK;�ӥ�Y��1�g٥���O<RN�Rk��q��_$eO���>ak���م{�9"�:FX�!r�[%�;!��b?f0 ~�pXn5�X xK".�g�v-L��" xj��<�|o�\i��y�m���>����R?�WQ�7F�b�1��$����:�YR|/����9��$>>1ׄ(��� �8唒E-J|j��~s`��%b�F(yyn����O_�o�&�Ͻ晭���N�zF'H��1K)��G��g�^��ajiʻ1I��EPx���_9��n��ɕn�u�;~u܃��ת��h��tM��\�k?~��[�v��wK/ο��ʏ��m� ���G�w�U�]�~�&�dP����I{��|g������D[w�kCS��>t����g_�0��f �[*L�k�&���~�y�x�]��ȡ���$�����%<��jø[I�ϵ�,3)�NA��2��g"~^�����[���j���)r��@�[�0�����{p��1BHPN+Y�������a��c��~=C)��h�}Z_��;z捯�`Ͼ����z���w�� C��]����?�7�����# �9��蜤{�⎙��j�p��2N�+��:N�i����]�9����Pz��+<+%��4M��m����}VF�9g�\__uv�<��I�Sݽ�hs}� g����2$�dF�d�T=]nκ|8����dO�N����8:+����ЏJ��bv��}3u�9:aK�Ok�ua#�Q<S������Rzc��*�Y�dz:A���f�5@�ޛ;Po{ I'�k^X+^�!cN���7ֻ�Q����4@�u�λ&���Nİ��^�~�aS���7�rE��%�f��!T�w���M�ЗaK��AnLP3��E�V��k�@��l�u�U��~U�اlb���h�/~ f?���xq�|�ڃH�*��M���6��ܛ牏�D �f�=M*�HJ��5�߳tC�o�x�O�M�|FHG�����F冔��f��˸ճ�K}3�8ll�w�!c'pi?�ռ�f��y��Zv[�H�bu������6d�C���a�U��]��h��;��0-�V0��ʇK����g�����!E�qO�^yơ�=JX��Gc2c��e=�eyV�����r�NhxIg�͠?,�5/m��/w���EkK#")%9�2|��]���J} +h�W�M�%!=���uɀ�$��������M�r�Z?th�Dz~oJ!/����Z /퓼�qz�e�0%cWO��Q��&*��N�P�z�9^�i�䔆_~a�~�1�{��T\����ɾ0M)����e��w��^�gpY��[)+��c�.1���{f�)����u�U �b�_�Ǭ���9E��6HA���e-�־� &��X��~D�2z��~z���{��Nyv�����#�(��bK�S}ΕQ\����� �?�V�J��R~��U}�%W:�A�����_{���~��|�O���멏O�����m�P��Y�?�OF:2,C��A/콥�� ��uARURs�N��O+�y�%�?f)��tr��<�FƋoL ��r^�=V��o0 w~h.sRNO=��Us�3�J�LU����w�F*l�(b�h� @wK�u�l�L���!D�/rfo�y\�{��#�{�Y{CHC��!�����ͩ����`{����2Ʃٗ���x]#&v�~nj���6X��?]�,ݧ�eE�8}�����#?0Ǫ h�E{W�ȡ��9A�"���k�\�!����k#�kc�� ���(�4|�g�S�j�o�5�9�K=�WS��ˣ��S�AT�g�SR��`M <|�T/��1)>5 ��Wa/�Zjն�K�<ؾ���[d�!kK���j����>�W%������nH��:0s)�ql���<jKM-ݜ!�u�<����}���z�/'E�H,�8! �eS��iS2r���R�j7U��-�#��7N�<��P���,�lk���(�.�h�wMJ�rG�ΰ"u���:JnXG����|C�-9;__x��}�:AJZ��F�7��q{۪�{ 룤DkG���悋��u�����Z�6��]G%-���b�μ�2r�>5�p{�G�%����g{^��*�e�Yf��!i���VR|y��{��P~�U��C/*���]t���&���_u#>����Y��%Z�Po"���@��w�D/uV>���d?*�9=��^Xz���"~д ^�~`�=��U�s���ػ�o���}�}��t�ã+_�R�Y�B>7�Wݔ���� +.2�^[���?2n��G���_����f����ワ��<�U�[��kiɹ"�Ğ���f��{�Tm��$.k��~��\�fOOE��X��hGI��(�+g����zꝡ�K^؇k��ล����^T�60��Q�%?�b�տ���VB�� ��C�)8I�e���V�����S�5�Tgo�����:>��K,�)��I�OK4���y�C��b�����>�J�Q3�IL��wJN˸���r� �6���ީ��(��ze ��qn��(-gs��x٤��;�)%4'������fo���-�u|��<⚭�����v-"��0&�0��(�1gc����1��{�&�+ç9g�y���{��1̻�&��X�����AD�g���� �g��4ȗuQ羕E�\Y`�V�g���j|o��;� +x.i��"����]���(|���\�2���m ��;EJ��d��F$U�v�H��N�GC���0=�څ~�:y�1~��<�tU�Yh��s K{���nz�{�]�ٷ�Wy�5\��7����Pɶ��G�ޚg�B^�� ��hy�m�����w��2�la�H�d�$��Q�>N��H IJa��.T��m��o5��+}��V��QB�YcC�K����� ��%%�{d��� �;�b�����]`l���*o��Ĥd�R?�N�}Ԥ�>R����Ҋ��Qsq��>�Nȣ垚���+S̢;�.j�w�����:��^r�8�估��W��w�$&��'!��w���ą�������� '�e�'Fi闸E��"Ɲ���}7���q��|Q'*�뙢�z��1�w���p��U�td�=S�����mY���sk#�B�-��䄱�w0O���io�|l�\�{}���_3���V�(�̊��*�o�2Iɼ��g�G�Q;����t��)F̵��{ߩ�)���"Ɯ%gD��/���nO���� +��+�ĄK�õ��������0Sn(y7�щ;*b�{�����gs�.kK.��;1Y��b���o��*�dl���c��O�.Qo�s���6��^�y�F���Yax0춉����(������؋)�6V�o�B�����!%��r��8�=�C6����*�+�/u#^/�A�l�# +RYX�%[�7D=>&9�&,p�Nj�W�SP�yY :Z��y�O+����D�A-��.��!l:�R+W�a��]��+��k�u�6Fk�-P��af��8�|g����W��ɩ���[���K���˛C�8�#��N|��!��D8���Q�}�Ҕ{^/�:�F'����m���m7,��>�qq���ց�����Pr`f��Zt���*L�BTr�;�*Z�d.u�� ��k�u/6I�ξ�h�$���(�ħl�|V�%���v^[�Ȼ�>R�4�����80������!��r����DG/u������#g��>i�\/ޘe��TBjH+a�d,���[c���v���V�y��1+FޕRjoLQЏ��k{!a����������ǁ�%U7F%9��G���n�aB����%�V�-U1� ����[�4Rs�9^��:Tygy8R��6��U�Nw��5����*��Ʈ��al�=;������(&��R�����6'��˿�������IT�bc� �0���{V��l��?��Co�wr���+yyk[�����p\#�GK�ռ�_+�}eh(y������`e?�泙�?6�::�=U�~�sR�w��������?��=�����4#�u��F�����V�v���_�{���ĝu���� +�Rr��tHz>�H���,ڎS�U�RM�'(i'�R|�����Ǘ���mˠ�\C���#����� ����N#��G�D� �>� ���WCcu�'���yQ\l��F*��n)k����d;�"J�����'�|J*��ޮ<r����m�����>��@�c���Dh:��%���82e}��$�4��==.�O�£ ��T�Z��������º� +���T��Þ/�ߔ��. �S~Zn�y�q�����n��= |`d,,챕��1r������qz��R��д7-I`.u{�����S�e��}�"��dl�9�a���6ؽ9f����w?��}�IEM��֚};�2]J�1����ҫ�:r�'+���"o[u.&}�t�-E�td���̯ *vOG�D��|�ѳ~��:��I!�����Fr��b�ؔ %� 4�@���5��7�N�ӵQA�O��雱9A�t��>��t��6��.��Ro�[��^���7�s�^�<BM]��].�1˯^�q�w���Eqc�D�{Ը�3Ժ|�_˂���c����`�n*٠�9R� ��G���@Ŧ�U�9�(p��� }��)1�\Xy�+%d�[��L�R/�9�̷�^/��2���\S�([�'ʲ��3�,ⱍ�ݐ3W�ؔ�ir�Gή��NL^?���3}s�@E�{*n/��_wվ�Ҳ/��~��A�\��ʙ��X�Y���o�P��]sg��h����� 9e����U1��&tu��ʏ���ș�m-&ke���2�kR���Z�yD�?#A>����� GK���^�:~�Yc#詵������!k��cs~o�~� +��}`ݭ��_���|��T�D����m�#�D����b�]����l��vPI/`ˀ���ږw}��䞱�������U��L�����+�왭�`mM��$���kf���b����ԍ�r+9��6{f����S3̢�*�{�Z�0�,�]T�*�ulT����2�;K�ؘ�l(hmk�[��k�w� C�p��h�s�G�>Iϛ����{�����2�-`��h�K�u��|m����U���[x7<�깄��6����E��y٧���:R� +��<}镡�z\�W��s���g�iRIٓar��]5�%cUn)��!# p1�o�p�&ٕ�ƚ����!j8t�#����j����9M�ِ��6�<�B��s���j@-����Wm]%�VG���%9g�+�miX5�B�]����s �k���@�,֤�И�{�Pw���lܾ����}+sl�!�,��- >'<O����2��vOⒶT�L��u��%����x[��Fjp{#5W��cZݐ�a�r.dm�U�Q��a#q�$�o�E�5��on �ł��I�A�ZQ2�� +R�{ +�T�:��2߀x�S��3�s���.��,OPR��IKc�"���k�2 +tm��k3�̵�N�K&�X�U�%&�N��#s�k0w���S��@�����kh�a��� p� A�s�]�ױ�[:R�/���%�,��+#��� +��R�6Cα��Rה<�W_/ٶ6 D�깔���Hm�I�o��qa��d��C�C�عN�=�(�9����Y��!E]r@�+�)(�α&��`f��~�iF�Yv��2\�H��85I�pb��|>\O@;a�rN����*�Ǻ�\�QS܊�1Z��e�żY��.�rr��Y��I,4<��k��\��r$`j�_S ѫ��M���u@�c�l�H|eR67�c7����گ��͏2�[����)'-]�\�4-��[yw�1��r���ZW�S6�M��A�5�n���<Z>ڥdU�T�,�4,ƥĤ{��Z�%��N�H�|�M`� ���� Xu^���@֔|�_W/ -�7,<�[��:��:&4l`�vM<bH�Em�(�K}ب� N����o��64V�[�x��c�H�K�*mKǬ1��%�{����_M�����-�f�ڟ��>X���Xh�-sKϪ���8ȫ��1K�[�����V=�Geu��!�`�L��iK��G�i|ƾ���A-�t�gb� ��\d�GE�5��m[C��N�q������e�����A51R�$ۥfV���u~cK��p]���"�3G�{�,�_O����r�� �%TMC�sc6!�m�_��V8�Y9���R�4�te��\Q6�W5� ���U3#�6;�g�h^W���*u�RK�jb�,��/5�����`䌓�Y�c��,x�§{�9x���0p�[>ˣ�af8e��p����)�m��Q�*7�ԲM9�4����|��u �4���$�A��Ѫ����!j�=�s�@q6�r�)�M#���]��9�b�[�Ee�1hm�еt�[��Y\��2�ڇ�[�{�2���6J�>M=gg��+d��:��.��SJ�RA����Ўya"}t�y���V�W��4�#2ͧa�G��i:�1*v�O������ϫ�u�F�3m�� a����%ՆVN���]�H(˓��Ɇ���v��Qf麼�`�&D-�?:ǁ�Q�kE�-�����˓�,�1��x��I��5��s ,��rH�%.�k�AM�䤙F�S�e��#�}���iNY���l��9�g�b�������[F.*djj��f�#�M�R���.�D9G�ϖo����C��1F陕!�'�Np�EmHQ����g���ۀ�x�2jB�>�M��c� +�,9{~lg�����M������q�����5��E=~]]Os���=�������[��ag������8�8�cww�����t�X�� %�� )�bw��������gy���\����Z籠��Z�&m�U���� !� �_��4lQ�幤��1:�Z;�^o��Y[c\麥��p�˲�Ť�E%����٭^m����_��㮻��Uێ�������1~z���bjD��l��ڸ��.�J]^>�ma.[pS��KӁ�b�]R{Z'���D-. �Թ[�K_�e�ٙ����-{q��L?��1��6�nO����v�.p4�m�Ӎ-v:j�@��L���F�IIh�J� x��=gK��d�=L+�e`�GY8��V�6�Dn���MJjB��>�v@{��۶��tK�������M�fj@�9{Ms���Y �O��������~4�!ܝ��/Y�b��� +�k$-I����O'��;{ ��>˱�G��7ָ$����$h�aW^�Ʀ��6��pzF��3�����6`r�l�]I� K�S���} w<�w�O��ZZ��jFބ�!���J��K��r�v�'�XQ2��{�f�>���������idB�^d�&غ�߹�P�+z +xE[]i!NK[˦��� eܥ�e��������ck^�T��d��Mo�S��DXKW{ڲ��=�[��`��=����e}I��$��p�Yw���ϼii�u+(�KJz᎙Qy`�Bw���U#�ʥ�e.�X�+�����4�){�3L�n�Y�-[#~�Z_aVN+�铀6ߵ�����?v62�&h�3�`�Z�r:�C�$cwc����6*�-�p;7-���Ípjk/y�����Yd��Tdl)}�������{S����M�5s3f�P]&�.!c6�gM���y���^D肾�iL&dL�Z���k8��������u���VjCq��iU+q{�S� `��|��`�C�5���j�pF�,�keNSQ{Nd���85<�u��uO=����}%�}����3����L���/ز� +�&zd�N�`��gu���v����;��3��w�uw�Iw�)�ZL��h#yJςZ���-�%%$m=�6��,[3C-��ɶ��Y���L�v}�#Zmm���L���]��w�� X� ����8鸃�N���W?�"f,j��{�.���ݳ�d��z:dR�OX�P�{�t��RC��8���he�϶�&��S���n��䡬%~�O�l�H����ĂT�p��m=�q��ފY���.W����s�Zq�62�d�[�����[(�JF�IҔ12(�hxr����E��i�k���}kgǎ���m)w��K��^��e � �����(�U��X�D��t�2��Tv"L"B�'(�+'T�vM��B���4���*�ˆ�:�p��YY,bIRH��d�U��+� �um�kO?�-oE}u5���mj;� +�sqDvqW�H�l��:�t�E�jl���\�emm\�zBى�w0?��Io'x�\73H�^j�.�[��f6��ő|���=V�mF��4���ъ���1X_�iþ��O,|n��pk���Z36T�����^R�� �`к�6�{'���`��e��;�q��JZn�ͪ9H���lV�P�ljA/P���1��J�D��rD9���B���z��+)��<M�P�p}y ����.�C.w�W���%{+u а�F��8�n�k�z� �j�V��Z#0+�Q���(��8�Xv�$�I������W��$_#�J;;���lت��2�P7o���ϴr�g_�t�w\ ��&��Dw���I�j�pZ�xX��A��}�S�|�Eă[��/m5���qe+ƥ%�'d��u3��3֯�v +��z{S��4�{���w�f���h����:�y�-<�il�r61m=]�z^����8�� ���Q9#w���ڟnh\6�@�b����{w�xk��s��R7e�6ڴZ��I�9��6ٲ8tuH'��VH��J�CY�LU$��Y �>��5�q)�T.�?}���>&l�qk:�6��E�@6ih�����B$�j��N�Z�r_]�o�C 9��ٗg�+�ʎ!��ޘ�H���=(NF݃��o A��zW¦u@�;�#��s�6qc�QīV�4H߂���6�PB3Y���I�Mմ���T�̷$�r�C�����ۜ>��~H(�L��6YJ��A����{0VW�;�/vj�!���t^�:�K��5��|e���/�.���u��I���*$M]��$���ںW�q�K�1s"YӚ��c{�G|<�<���,�FfNv��m�i�L�R�rs��is�M���g�m�����=�^^~UD"�Y��Y�p�CMC[ڜ�����6�Hr� +z�$>;�Rm�+Z� +>�,@kx)Ꞧ�!�@��g��˝�2q�7����-�ބN�&�D���椠�&����O��[�{�ƶ���۵▙���@�-[ȥsjl�s� aՈh���j�7�U�tEf+U�'��T!U@ŜK�i�?�g2~z�"���i�ł�UZ-�E?�5�(�VM�{#ƺ�����f��"�N�V�4��iao�4��GW�֨�n �>���-�,��um!�]Q�uV2�(��.��䡐�4��Vp�d�Bַ��J7�]r0���y�-<�mlޟ��v����}�s6n۸i�����b��������*�J���� m�����zA}���5Mu���l�Z�#��zD����%�b�����E������Yɸ_b#a�g�6]�*��2�q�Y���_�S��h�4=Wuw�:�\���Db2�� +Go�ȁbv���mG9���:��kL��1��$!5O�5»�2�cPA�mp>�jV~�^>`���2<bc�?���G\�$ԩՈ֭��iMkͤ�aS�[������:�B�:�]Z;|7=�����P��rv.�O ��C�������@<~���#��ka~�u<l����7q�؊[�6�%�`q����Ւɪ %Q���֕T&k)��:��H�|�'�C(C�X��Qn�7�GA?|x��\���$��|t�ŽF'[6u�� 7`w�\��]�4��J��O ���5��uro�2��u$�� +m���d�OI~�/E��K��wR�{�gFD�g?U��#1�K��{����g�D�Z/G��;��� �1F?B*��ʪ��u�)�� +�M���/��U�v9����7��������<�i�*�� �����d�Nַ8��?;҄����2���{`�HgϥT����P~y�]z1:�[H�Gr6���(څoK=��X�(����{d�����>�$�$��<U7'il��>>HM2 �ѽ�u�]��3�o��-��)�V�+��ߊ�&���Mޅ�wB=^�H����������EOO��� +�ݨ��?^�)���Lx(����uvM�l�6ѧ��J�JӧS� +��@�bqE�͌֙4A����"R��x�;��~h`�))�+ q�)�Y��vVѪ� �hi@ )���})�s6^Avz��I.G�R~�M��Y���;��~/��<��i^~0�������L�佤[��zj,��t�t�(�I�}��䶵dd��o ��U��ފ���1 �G�!)��ǐX��c�R�k���<��x��x폿�:��SQ �&�K�c�zn㢁ϝ���I��<�0�H���F�dU/Gg���6��q� ��٫R���w!d��ok<�� =�Z/�ǵ��&�q1 ���U>�7i���1?�Zo��7�2�>0���F�-N{�Z(��?��stz��]?�|[��ꇨ�Oi�W�z�v9����B��A��@>�`q�(���3�W��{�&��R&�7�Y���kZS��S�q<�D�=.��_�����x1!��g�O����{��x�x_�q�A҅�`�t���O��4���L���-����m��ƲW"�c~L��o� %��&s!:��C\ +�G�кo{f_���|�A����xA�_2|1���'�� +���Afy?re�W�1�7�7��sdZ�z.�q�N�?/�����\�X����O�A=��Tx<��zx�~����98��sZ��&�2�������`F��iR�Z��gB�bb����naH>��'R��K�p���"韑���@���x�c��ś +�ץ���<|��O� ?�����,�o)P��<��e/[��hjb,���ZZ�U�U��L�����:g�0�1�J��3����z�jbz���>"<�~�F�p�v�ǟ��.D�6�����>��y�cQ!��EC�.���3]Hi[H@2'}���1Ϳ�&�/��~��y��+=�y����!=��O�{�ʢ� l�SFM�RR-��L��`M����a��1����b��������~x�>�#=���T��������_�������Hx�[iWc�� #a^MJ^5�!������R+b%��])="cuC�d.�>싥��$�2�M���o+ +�#����sb.�ZNE�|��~5V��N�~�i2gjzU�US�m�M��FXT�����Vu�-�m�� +��QTf�e�؆_��.����Pz����p��X�ǽw���e{DZ~ɯҿ�4�2�ґ�%cOǤ�.�*�}U� +�R ��-j̖bx��P�����Mp��Jr��[Os=�=+�x���ȫ����t�ԅ����s�:�h&���fѲ�V�����0р���QP�5�K��Ȇ��ËК7�e��Kkw�0�' E}w_���@\��j���u3���E Y��d����C�[45TlO61�f�}7I�0��]���q���PEo� ��D�WA��+���YR~�gZA�S�\]oC�낚ۤ�*9�Ĥ��GU��ESW㬚���%f���d���+�b'����}��bV�,�P/y�`�}3���pn���v�uم�����y�עA�AԱW9u�W����~��6,�ΨHi����5�x�����w�U�!Wj���e���HD�bpn�ij�vz����ޕ�������f�A�����N��v~�M�)�5���v�E���TC�R� +7�הtqM-��f�>GR�F`eo���'����n�d�<)��kd*���#� �V�l������3r@��*���X��`{��4��^��6�]K���*{'�T^B�;����ђ�X�2��I�%����~��@��ʏ���Lƒ���!���� ��5O��1� +)Z������}~c�*Gx��t�@c�_���Vvotg_oXw� n�WQj��Hn��u��F>�`�����4�Y�J��V�V��Ȟ���Ɔ����m9��*!��fXB�� 9�D�]������CT^�/1��+镒��D�O�ެ���T�����h�H��N��S�.���;���&vH���\7�`B�-�H�����Wo?M���Y��_(�§��?��-p�W3U2�+�O�(��Xઞ\�V3K��m�quk�`/=@ T�sy&HO�p.W�/��+���6W�DﶥU+-�*ߛ�k���r��"��s������E���B#{RE�2�4�Vծ��� +a��ۓ$��J��'�R�D]�* �����Ai`HO��xew�ߌ���hlE/��bW�MHk�oe�Z�9��\c7Κ9���Rɣ�����1/��lz�&��(~Q��g"�baD^��Ml�G6�h����n�4l�-N��o;�5�#��-+��p�]r8˵�����zQ�L!��K��U9���eO'���`��fwޏ�axe�6}D�ZB{d|�i�K�ⓜ]y�z�g+Ä��AR�K���t�9�eIw�Uƭ4IzJ�m!b�8Uة��q4E�>u��_^a��g��k +|���z4�keT�K�iK2rɡ���c�G�1 +l��|����"G�j�dP^=�۟,�f���eܪ�E�ZVl�UKi��J>�hi<u57X���/\\��!b����8�n,u�:0�rF����05�E���A��O �汢�rX؞5��S3�'�X���q�,>��0N�u�{#���C�as*d伎Y�l�.YTS�6�Cѐk�2���i�@.�}0��A@ H���?�<��H�<c�zÚ;���=�B~o��^ұco�؍+C�SG{�g��<`g�:��1q������#���@�r�5��8�_Q��R�]!a����[|"�A"#;U�%%3o�B,�3� g���A�'sS�[g����ݸ���C*�@)M�9>TOY���n���i�:>)B�%����Z6��jel�h�����3w+��B=�t���W����{v|Ѽ��9k��r��Yck���3�ѶicӶ�u�vz���p�H)�7����|�����1�"nؘ�E%w�L-]��.+�B$�F)�o������m��E��%CE��*�WL�)#pz�`=�b��� �f !̢j�3ug͍�#�r��n;[hܵ�7����z�神����`���m���č&1#{��1�9��i�=�F�$T���!�J&ATl��0)uc������▕�����D.��>ꙹ�;0�� +6fUM+ZD|���t���\Q5����AF� ��{W��y:�%�2�$mi*B�%���2����=�K]Pa���������a�D��6co�u� Um�ȥ����u�<�Qy�'�������A%��m�#��=�O�0�W�db�9i�/�t��.n1-@�Hq�^]ȼ�����e,�0q;&R���!DԲ�6zX�yq�ߜ2+�e-�%�0�����X)e'b� {�kZx4�@o�0+�UL���2-��/��ѓ�J�I>"�%!�Li9�qYW͘�)sVAM���m[fRղ��Ӓ0�s_��:mf|�j�}uqğ��L�`)��}S=����x4�j���, ���N���[oU�B]�EMtk�U��'@V����,�І�0�x�Ϯ&��ieKJt�Xw��u54�Sr�!vF���������d��t�i����U��<��h�X�>[�!�N�4̷yu�Ktte<]<�a���t`B��3G���0HSZJ�SF����*���c�K^Os�ϭM9O��K��9�rYK�Zr.���fj���=#(�r�e?���>���P�߹��f8�c���i&��b��l��kUY�i�+㉳+��{���t�����"ܛ���f���l�~�eq���K���yq�S�����}�T���qo����Q +7,���i��h�{�h�-؝d1�M�:fJE�]�.ۻ�͍�呆��a&��A��<I��9H�3�ف+���Y��U����D�=Q3_�k��[���=-.}y�$E�ϊ�������FĞ���¥�qk���0�l���.k]^hf'�k+���_���o�Ц"�ղ0������p`�W� :r�����Б���.�[��_�hI�[Va��(�'6b遉R���%,I*�f�+߮H�v ��iAE�X�ɲ +?+�J�Ҡ�6eU�3���zr���y-�����&�.�ȡ1{#t�����K\V�m)kÏ ���aT�[T�=ҔqC�����%�}�lj8���t��c�o���i�q�fRѸ�:Q]���|���@y���<��T{h�Dme}�������6j創��onn�6�#�JT܆�0`�M8�d�v�pn5"rM�?4�K���\����,�}4�`��Ӊ���bC�J�Ʀ�٨�e *�x�X��E���9�D̑�6�_.|տ ���4�����m�� ��VGl�q�ڸ}3:mǀH���"�dЏ_�Ժ�Q,���<�&��gA�kc�����SM�_gYl��&xU�L<�4P��E쪑q�jXܾ�,��_U�#����} tdB���$U}s�JNG���/�D��s^.�r���Lo�6C�l������#��h���U��y�2�d�Y�Y�3W��40w��Aa���q`F�q2�_'q�;CeQ�C�),r��D�ʹt��n���6��9h{zݾ���l�Xy`#��[)� # �?��>�m�^5��~\CޯKJ?l���1�&�k����Tm�k#�<�w[U�%%�ñ�Y�?D�<&��T�[��Z���]��V�����J��ޚ�GZ��� � ���ah�hk� +��dk��m92u�@����B��o�$�o���"NM繓�i^�N>�6r���R��,�wR��mkJ� u)G\ށ���� +���^��BD�E�ހ^|:ڞ�t�;��,���Ƀ�_[��#v�HgK�m.���qy�%㾽9�ڢ�"�̅� `q�N��}-!gKQ�*�{��$y�X���Z�Nu�?���Wd����9o UG�#6��[�U~k��p#�t�-�&�=����B����o��;�~����lG��Z0��L���]sr�Ѐ�{����"�:H����;�N<���-�K���J_o�(��Zr� ��7T�.)�que=v���%�h�\5�ʾ7/�<s�+��7���R���Q�:H��,?`K���9�=+ED,I�ևjc����hEZ<?P�9�_�d�z�u��ZӔ������C%��6L�g+���q|��(�S; +</,����ҿ:�Z� ��m<jc��oK���T��V�X�K���32X������C=<i���)/�X�|v��A�mȢUiQ�,����(�zl��NȬ[e̦�C|����c6�Ȏ-K�>~��T��G�>SO?��kV䕡ӽ�^����C��l���m���2�)�2��9��1|����?7���<gM \,����E�<F:��aW4�fh��GfLɉ>����3��RpĎ��o�'��Xg�Ea�ߎ���!G�.�*��)y� +L̦XWiٻu9,x�����tgq�|fb��İ�C:��\���B�~��3����>[k�VT���w�-䲓\�SQ���)����g=������6"�",��ү���DZ����ckUԺ�v�3��L[��<dZ����x�-CE��kBWeU1늚�ui��,�l���gKFH��� �/�tQ\w�L�~���~�&�9�'n�1���Bx�/�9�2D�DG杉��+VF�1Vڽu���"a�*|�,�/���i>�������3�O!,���"�}=:s��uym�������jQY*RП҇k�����ܴ��VTʮ�X0�G���b�;� }qQ{��u ����w�����A�6U�Un!"z�/��(���`�����+:b�5@+�q?��)�W$�AG#�e �� +�%Q�{���Ֆ����1,���3���%5���u:F�X ����ّ�hS~�+/~wd���ė[9�/'� +��vR�gvd*Pky��ڤI�w��-E��/c�\{78�U��������J݁�6vSp`G������MmU�(�F���_���~��������n�Jl��[Zd�e=����8&:�����O��Zd4�2�,uٻ��Nv%�[e?�2�E���+Jdܞ��<�5s>O0�o���{_�%�� +3�\� ����<p<�ܻm$U���K�&�E�vTё��݅Ee/ ���ps��:���駣��u8�N���z|hA��0�zT��C^�~�-������:�W�;�^�d�������.�r�A�bt؊ngeߜ�/{�����jCݢ�����m�ח���zx�W3��@K�]V}����v���mU�ώ��͡�"�iH�fd�>�3���e�DP�5)�oW[�>y��_��-B�K��x5Q,�W�iI9;l�[\�gmH����c�W�9�G����+c_]��Ά)�= 4��I�eaE^�D]�7<�����5Rw��)�ZL�� �'�'~1��7�U�ô�� +\�EGK�-`��T�a���k�ʚP��S6e%oG��q3߭ˊ��y���=E~_l��[�N�$�h���-�bA���TF�)�\�/<�jou����,����a�ᦀ;r�����Ļ���U� ��?�3|���-mu�s���6��YM��kB�)�����0H��ߦ�!������6}]��j�;��������hk�� 6MCϽgk+}���L?3��5�@w�%��7=xcE �7�&��g=?ŕ���O^� +�����-���L��"��9���.�J?M��?ؐ���K�פUA�#5 �C�8>"�*+��'��S��y������K�>�j*�������gm�*ì�ɷ�z3|�o�D�6�+�����BgG�S{S�ïSd��g�^����r������qO�X�f<�, +X��te1����.R�np,��礠2�.뙫�}�P��,�ybfD��]����9�ՙ�g��_��C�l���6R���؊��=�p�$�~<��������K����NL�e-�|E��]� �f��o�MyOL Yw�̬�Sm��V�hK[�K{S��==:e]��ڐ > �D����(�x��d{Νm �st��MeU�47��Xs�Vj�� i7����U +������5r �\�ُ���˭�����S��M�T��O���Nj����BO#馫3㑝��P����Wvq� �f演�#o��}�U5q�Jd��!{SO��B��-� FE(qOܼ���K����Ko6���wd�̌�+JTХ�~[�{���=���n��W&�nhʃ��q�b�<���~�����ȸ]UUԎ�����|��d�X�=�O��ll���X������-quྲ�kM��b���9�z��!Un�U������:�5�]�c�f]u��<���_�wd?qt����K�tuY<����·}�A����s=Y7$���r���2���C|O,��)����t��@���IkBW�U�;��p��o�5�����--&U�K������W|Q���l�a� ^V�[�#�Rr�~�� @��\W_��05枉�p�BO�a�'�86#r� ���u���M��!B���zK�4>9�O{s�e=�-UaĿH�-=2��B*��/~7��{��-�Y�����|>ۗ~��V��#; +4�_蹣���2���2����yf��<��Akh���<�h���6�>xlÃ755�{zh䡱:i�Px�������u��N��xh$��� _�?���_֡�&j�W�v�5��9.kp�Bz�]K3�[G/Y��?�����F�&F��baeޜ��������aQSo����{@m/j�9�OL�Oם�i7\����]`�%,��^�jAX�����dߙm�{�>���Qã�z���q���vB���(y����OU����������=�E2RBK��$e<X��F9E�8А��?IQῨ1��������ɬ��+�А��Z|�)�1vT0�{T8;���d�[�<��WG��B�4���h- +;�<�dW�����x9�G�o�B>��6#�醅\V�coo +Q����MQދ}��ݟ���D=�5���8ϴ��hy��pQ�OL��#:�PWy0T�����U��;뉹-�~gM�ci]�C@W����SA_�ؼC6��<DK���=�N]W���w�-�]`/[c�Ù���g�:0 3'ع���~vl"�7���iN�cg[� W[�UkC��mI7�o��F�6��|}e�*�Ԏ�p>v�#絙��l��)<h���V��Ʀɉ)ׄu��������UI��T�����T�^����������` %��~e���jKR�5X淡�j)�2�X�c�#�d�(+��v�� tA���Q���@�{��XV""�FH�o�!����_����7�=s�ӟ�j +>�Ǎ�YT@��̴����MC#�<��lW|h���Ԕ�l�+�N&��/��������#+��?t�7�d{�$p[Z���Z��<��ʾ�3�� �4�#��ϳX�u���hN�L䉉Th�ĕ� +���b�EQ�� *f�Ȅ.��+��w�������!x�4��ɚ������}���ks�mks��U�wO�I�b�h�i��̻�ڸU5!�\�}msi{utI� ��L���ʯ���S�������ɠE*t�����*y�&EGo�D��Bl����J'���"�)GD.��I�]���?�Y���:D�����Bv�t芠�w����>��|?�:`[K��!�Z�}�C�[�y���m�YԄ-ȑqBB� ����Ա������+���{����k����ϣ4��_���bd���l�9�'��d?��ȼ��~6�+y3�_�A�V��$�����o|�~��e��. d��]�A^\!����k��� +y��HS��xȁ�}���>���5D\W�>�8ٚ���L.��Wz���?n !��Ef��@�D8yEox���T���zKHɏf��5Yeܲ�4�Ԍ��v��n�Vl�����[niuТ�"t�8�kH��"�^���}�~oE�NttC�M�U|��!�6D^3��{Sm�����6�~�v@��HP��Ş���<'���������yof:#��t����"�v�����G2d�e>,��IF��Q +lGS;Ύ}����w�J��I+���hd���z���ݾ���< �7��E2�YL�����>뎾����[���]��G�J���ug���fu_]u�u���'G�������5)2tG�M>�Sʷ�0����m5�q�r�#2�̌��ёs�eب3�&G�Lu?��+�\�_����t��o�J`�'#���7�>��g3����J�V�C�T����2��kCU�c�Al삻VV�}�������q�$�����NNޓC#&kπ�\��?�(jBǹ���������ؘ�5)g��.k*_�ӳ݃����g�=�[P�f�]-:��N,^W���K+� M��~\�4��ҐuOM�f��\=5�P;�&̴o`���Ub�N]zb��oW�Y���0@� �ֆPI�Fd����fl᷉f�W���}�¯Qo�!��G�o�ͬo�3=%>j|���Ȁ��Â,���e^}��?�m@cAk��W���nIA�p�!������Ya����~K�'�kKϬ��%~�ӉƐ{s���݂��%�{_W{>{W����o��?�����uyx�'���.��!J�}sK�3[䃡��UQ��KrJ��+,e�'�����`�9��L_��=S]�����}Ӄ���-���N�ސ���ҞMv�ޜ�.|� ��8/��ԍ���Q�{yG��?�sN�q���EQ~���8��\qlG�9z�C�-���A'�YkO���&�ʿM�j�T�[k�� +�~u[K(]��%.�k��%� +B�# >����&��$�Ě�W�H)�wִ���Ye4���6�e����[])^��O�X�KTT��w8����f>�i��Wg[�3�\�Ɂ���r@G�Y@]~�R�FȠ=��wt��eY������K{27��9�_��`�X�1�M��Uz�Ij?��Wt���`��'�KO���� ��hf��q[��O;*T���z[�N�������3t�����RT���R�(({?�U�t�%��5��*�W3#�����*�&��W��<AG���uٻ��c, �1[JdĮ� q�0�˃��/���c3:���e�T��� [��_m�K�w5��u>��L�v>#tk��!�����=�P+��=�S�\�����L(��d��װ�G$�+�&9efz�|���?���q�g A�L�y��8�"JF���.K�g�F����uW{0�\������e�2J����`��Q3��M�A�����Ư**|�T���F�yV��ZO�������9���/2�_d̔��#����F*��8��m���} +9�TƬ�Y�z}�Ӑ�#�j-=�ɖ��;�/�5b�`/k�l�ަ��Nn��c��("w�/�kYX�pj%��̔��|���K?��".�iY�7����������'# )g{A��=�sb%m��)���Ǧ���tY]�kK�!�ߞ�L��6�}�!�M +�#���'�:L6~M +�X�~!tv�䵩)��� �0�<B�AF·% ���Z_�o �/��kp�����[fD��(���I�ڶ�2wF�Y_���#��� pi�[R1'F���j�W�uE�f)�iq�\��1lš��8�e�w�)�E=�pWw�]���M�d��Rf���/�*�z2�o+�|��?ڛ�99ɷVĥ>�vZ��(�fC�K�7R���U>[��^�y���_77$�if&��"��D#s�<ò�<���ĵ�l֩�\��E'N�B^Mv�?�Ta�%�x{K��yn�[��>�u��O��~X�W����2x䲠��� J��pM���oCQ�qК�T�g|`��M������'F|����h��͵� Y���`�v���e�� ���'b�y���)��dg�� UU���3�+z=֖���N,YU��Ȩ���#.C\����@�N;4R���tЖ� +�Մ��C�M�s[�gG�_���(2sC���_mh�ٳZ*T�,|+�d=<0Р[ʺ�<�`����ZSUm���'�z̬�>�U0�_9�]�(��b�J�gU�ى;z������ZY�m �g����W욪��� ߣ��ԯ��@����Ww ����O'(�c+>I �����ߐ�������\$���e�N:##�&h�=�pm��VW��_���ZRb'�5VT����p�RzdB��)*���o���pj'���Վ��w㜂�G#���!�r⠇��� }EȚ���<ok�-3+���>�������Dƙ��?��"� �O%��y�hABHu�����K��I��MY������^d6�5KFmY�I�&D�7���Ʉ�!X�,��6@�|x8F��x�C&w���=X�����e��k��\TU}ZT�BVd%�z������ +�m(�;���e9)g]CH�j[Q���E�Yj��"2�{jS�5��ye^s������s�\�M9,�Ԉ��f��?C�e���w oK�aoJ��<~���\Vx^'nE�O���=��9��4С�V|���7$�H^uȕ6���aB��u!�ͱ�V5�/{;�]������(ȯ��csm��n��~ 5����w��ysπH�� C�l�36gg�:|EZ��՝y������`R�����4�3�I=4ե��H%;���g`?����tuYߧ��v��v� ]��nH��>��_mL䁉vp�O�5a�cݒ#W~�h�~��`�qjD$��rN�nX!B�E�!s��� �-4pCV�nM\�|�W�udt���:gb��e/F;�Bv���ɬ�� �[a�����2��Ccm��q*�+��gİ����3�_�Ě3,iG[<ٛ��ޙt��[��_��-S]��]�|v�6���$���0����pm�����PWu�G%8i�Ƭg����C3���N�<��A_&��ߦh�u-*~FT�{��|:��}��Ͼ�.mO�I�n�g;��)\űW0�/���;%Ui) ��J|�L��>_,~�k�%�M����W�Zq �"���x� +�7#���@_�]S#�,��=kaIE�W�@wl�� ���*'���9�/|����ܳ!�?�5t�N3��b_K�X��� ��� h��C2oA\��-��=p�c��%%"rs������W����At���<�A��>J;��x��>�w^WV�ˡ�_�9҂ޞ�AGFD�^������'. +l׆N�5�Dl�A���֥e��5Ǧv斖�b���M*y]S�@�- +�_ٚ3�XYI�w]���D��0iS}e^c��RL�u!<������� +ge�?6ӯ�{K���h��a�s�L�u5�ӊ����`m�[���T��2nYqe�'�Ea��\O�͉����r�}}u��zd!o� 9+Bʦ��c��lAD������#M�Oܒ��#���T=u����jigokʹkc�\Y��^�++��y��'vt�'uh!�YU�c4Ģ�蝣9冣1pc�;��gSM�1Ç[Z�n����h�����U��+!��~��uI;FZ���&��"��]=:�����k���֦/��ܢ�����f��C@_�jJ}��Ш-4zYV����3�����2#��Г e]���P��҃Ql��,fo�q>g���m�`��ǦFp䱙�X�VO��<��_�k >����g�8�����ޫ;�+I}����R�V�L�P�= :� H�{�M"�����Ao$���=�{��Gf"���������{w���K��ì5X�Z)��spN�����#a��ݘ��'���ӌv��� +IŇw���� ʍ?8^�\�Y����z�K�]_Z_ sCJ���\jXå�4\rH�E����h�qS_���v�ٔ���[���}&>�����-ˣ���]����yc�Y�0�p`� 1So_fupxo��d���Ԧ�)Z�w�_��I���$�t�F�ښ�l�B:BGjU(��`cZ���?��J�օ"�$A��Pg�kb�����7��"rc*FkL�����o_���廧W�?5�0?�:��yp܁��NX�����M�u-w�f��^�>i���Q��tl�=\_|2�5+���Ҋm?�O�k>�a����/�%|mB/mL`�oՖ����!f��;Z��0ᆼ���^�/�7%���&/,�֯�n���W{��HPK��w�>z�<��g��~��^�}��%{���-6wku�7O�5,wgv�7�u����+o�O���TR��()�&ws�T�5F�)�M��\F\�ƹG7�w+>Yy�y�C� ��Y���e��,'+ɵ�m�̏ʾX����U�[V�������OS�:�8.�m�%���5��� ��7���/�@s_�o���_��zr���Ny& �<�����-�����$ ����u��j�?�}k~����Y����ݹ�ElC��"�l"����4��OyG�Wp%�!� ֭��8�+CnM���gP��F��rrcS��! �˿�)�j?c���q��;Ӵ��V�ߙc�ɤ�9��2ZKP�)>�R��q|�}&ts���<Y�U��.�%Z�w]ܝ&�ŵ"vH'����k����!��ұ�#���i��y\EP��]�e�8a��N�3�)�[���),#��1��l�%Z�_�/�Q<���Zh~? ��﮻Si�P8�Z��F:2bf>'a��Py�3)���+'���?̬ +��66˫���(-A������I/�{1��|%a��ïϼ)z ~�2$��̣�=�[���r�w���+�^��4�czJ~��c�������L<�3��A���'�g�fxm�Mdž�W�I%�����O���c�.u}Z�ܞ�n�r������@ v ���L��:'q�㽐��{������I~��;����M����3Z���C��w #.���_ݞ�w{eB�g�Phz�s�5���C�ܿl���>n�w��r�0��K�o�ս2����x�Y�D�����ݓ���:FWv�D�8�������#ߒ����͘��铑��^@�,�����R�7'�u�{�ow���a�����Wu��>6�+��5�u%���#�*�ݶӎ��eQ����(D�N�o�N-)�����S���+��,>�9+���IhY�4�����aZ��������_m�:����+|���O�]��r9�PF>9('7���nnm�T0۽�{��W�ۋ��ǀ�*��cjcF �!|gZ����ƺ��gjYH����Uwk?w���Ơ�����A@O�E�=���ۏy�� |��a�1�hץ �ΐ��Qs1 ��N�*��>�k_�t�O :�� ���B�{���A��w�%Q=���ˮ�R3` ~�^�{s +V�a�}rJ�_�E��bCjrk��c�T��L�9X0W���S��cs��n} ;�x9�Ѻ��5�.mgcFz��*��gc�c*���{_�}��}q=�gc�f.��4�MT�_Ml���I�H3�IA �>���1z�uL��+w�nj>e?�=K�pO�s�?5}�|��vQp忯�i?� ��YF�����$�hw~�?�sng������O�w�~7�;�>�oXE+o(�ϻ΄� ��n$���`�=�e��2��u�;߇sN���p�!/-I��l~�v*0��zgZ�F_��]�̳;| +1ac�Q�l�Z%��pgy14G�����"�vg�7w�E��-�+l��ˎo]��K!h#)���������%\YH����S�V_�_}U��w�#dz@���=�鞎���؝YT^z���[��"�b}��=E*]"\[&��]`�U\�{�TQr��YR�g~�������=S�gCrreD)�����aN�����6�H��YrKJCl����@7UX~��nk���[d��� Y���V6�|f�⸌�V�;�0W5?@N/�A����u||��%F4���\y��c�����z��a\�l���Oƣ�Wi���֜��Ӆ�[pOC���0.Ԗ״�?M +����'���o ]�:�yn�u���/���W��{��z&0ǀ�����@΅�j�(�{v˥�B��(�bJВ�5w-�������儊���W�V_����y�����D���ۨ�����.�1��{�R��Ԇլ��r��'g#��-O��0?���3�/�+� @��M\rX�o��ai;�����j?������!X�OA��k���ԊH�T���/�9A����ʃ�g�3�.� �ɯ����A]D�Ԇ���*xP�,��9Ŭ1���j��S���sYo��g�����l�t|�s�Q�=Ũ6<i�lAt�Ji�M��l�m=4Y�Ό�4�g�� ĥ��/�s� ^�?3>/�W��ҿ.��� .I�!d{�Z�;�m�.r;|������ 17&x7>x�?�/;㨲�^"����Z��3���|�}:��/�<-�B;X�o�9t�W΅���9ix�)�P����jIu>���C�G�ǥe����%b������Lu]�+�U)=�0�a%���c��Y���Zb�_Cou����Ī�"�<�bv� \�w�X�#�g��a��ts}yc��Ԃ���7���栥��B~B/恱m�����|�_.������^W}��z�Oc�+y&�@������h���>B�Y�#o�O�wj�U�k/*�,b*�z.9ex��&U��co%���r�@T�航�U��ֳ���?�.����������6Ϊ��8��>�_��j�ȝ%T�g yӳ@���=�wjܳ���� �+����*�%���T��,�����8�:i��1G����<c����Eǹ��ڑ�F씋0�qN�u�ߴ5+���S��[��Ar�?�|ȱտ��������h��+f��l�_I�ߚB^��]j�m�P�~�����A�~bk�ۓY���ۖ�ᾅ��t^�|^����K�D�Zڧ~I(� �|��,���[�z���i�����;�p~c�黐�����^��NI+>�۔<{�98����eȲ���SA5T��E^�g�ٸ��t�1D+Xɮ�<,jt��"�^�W��q�C^��9�1B��3�i^!ݶ�����V�! ��jT��,��o�����o�@�<���T�)���d���cwo������L�� +n��k�Y�����������Ϙ�,����x��ٚ �Z������C�&?0�+�ɨ�)��s�!W稵���G]���>!C� +���~�1a`b���ؐ�ENgX�/ �}!�հa��y�<�k +��qM����.Qk#jz۾��W�G��;χ�@{�!1���<x�<���5�h��R�<�90����x��\Z�����F�س <��E��Er9�Ŷ��qg +y�;+9V#�9i����6��nf�3C� �A���}��0�!H�{��bHMjLڤ�Æ~iL/���Y ��l=s`gb:> g�ve쎵Iz�_3xgW1� (�����Fz�PQ�� fXMm��ዣ��{m}␂P��d~Z�W���!%��Y���xw�>Q����BDE��f%���!� +.ң{��:s�9rvVv���.�ݘ�8Ԕ�m����\UH=�wV� ��UQ��5�PI���q�a�Q����x��;~��P��}s�|�</�AV&A����>݀te�Ӽ=Ek�eS�<m�6�Aθ� �O�/l�4��y�F�����U>����@��z���Sw�ƻ6�]z*�RS�O.@8g�m���-�A]pγ�]���%1*�S}*�#�A7���ߡ..�8^���5A+]�V��$踾��0WN��|�9A.tO��3�V�$��5I*p�#/Ft����ڰ3���x=#��aIx��_�}1�`Vfc+���ds&���%5�:�������ԙ�1"�騜�Q����/+JR�^�����]�)�$�j���{���s������3���g���Fb�s +zp�����k�y����:a��JtA܀�~�`��mLdHIj��"�:Rc\O�v)�����B��5l��m��ޛŵ�rջJ>f[&Ĭ����a����σ<ɍ.���>fT%��Z�枣�%MbN0{fr~�U��˯[NM�n�+���2re��hK)�h� ��/���嘢����KE�̴_J�h=�e�8�#z>-m�����"�F` ]�=�y~�]�Ű�OJڥ"z˻����N��������K�R�T�����3��I�"�ܸ;On���Zg�Sv.cKA�ս��Ͱ>�T4��C G�17f��O���z�4ΪQ��]��] h�ŭҁH����ֲ5�u3ef��ޤ��W!�����~mq%��}�����Ԧ��\�S�# OR�{+&����E\a��D��\r���F�ߊX�����3p���>��N��K�43k�/��&��:|rP�M���|�� ��U��-�?o���?vYܠ�R�PI9~�� �3���0`w�L"f�$���y��En�g�=ɮ[��lM��w�M+���+o��8ǡW���j!���|K����PJ������ר���,r:6�1��ϻ�2>����z�9J��6����@;�M"V� f{����2�"�"�Ġo��엳�b`>�wX�U~�5T���]�g�������"��ɧ�v{��A5�q�:R�9���gz�3����4rry�iv���iji��'9g!W�3-'� +8�1̭�Q�?�'zz���ie} �xGLCn-@of�蚈]�1�uv�c����������Ց�{}���E�M�3o� �s���ҀL�O�����@k� �P�����pf�<poW�Gۙ��}��s|�ѥ g��JB]TCE���e���HA5�fc��sS��I�q�VӚ#JFWHN�)��1m/{����������U��,z~�߆i��d�� +���U����}���qq~�1�}K�G��_�W�)��M$9Xxy�)��\�V��,T��®��k��kӰKk�ȫ���'�����5f�mz�&j�����FU�����r���(ib`����v|TQ�~�H����Z�"V.ͩ`�,�S�ve���m��yS�S���E�<\f��;� f����ۑc +7���wT�z�I�,�:��v�u!-�;eg�CzV���L�i����y�I)���ز��ٝԳ �= r�g�D�g�H�F 螒���s����I��5�l_�94�}/>�i�: Õye�r��V�6 h����%q#R2Z@4�R�g^J��D��տ@, ,Q���{f��I5�g�c)b�4�N�BL +(�����<�jg_�:�<�����hu`�굷�3[����K� +��ۜ���a�Ǜ��yrU�,����<��9M,�)8���g듔r���&�4����X�ʀvWr�}2V�g�Z�Y"WxeԚ�Q��"�&n�S���s�X������Q��X������� +�� ����Ý'�F:�~}��)��b���q- ��֦�A��x��ed�N����yo��?��cY~����2�����m�w��k��;�TǙ����dEԚ�F�k谄^@�����n��#�6^A�T���e���YR�_!���� �?xE�8Xb�D儚�<�v����[�ð܈��s�s��/P3v!'e���<��1e���S[������n�)ͳ�y42�V��Ž�Mm�B�^5}+����;Ly��`� �ͧ� �&�f!'nr@M�}�ߗ2�\�Ҁg����Q�ۯ�6g��#g���x�پ�Q ���)����Բ��X撲����暇]s�631@��J���qb�_�Ƽ�N9�܈����nNo�,R���7���&��Y�W�4,�ɐyQ����N�H6V���I\a��>�]��8Qj�z6�'�u��1j�3�<닆�7F�O$����Ժo'v&����+J�����ɹ��%j�{�X�]�{Y-���)��>��ZW^���L#�:Fg��F�u�ݥ��\�R����[����ͷث�G��:^�~Xd4�^j�i{�Ӭ�}N��K�(��EJ��$�� ��G�Gڰ{c�U�5'�:FE�1� �UZ��8�jw���S�Q��Ϲ�jY�]ߚ�Tx~}v�\Q�k�r�=]�%z�ZlX-"��^��o�b�x����5�3C���]�(����������˦o7^w���C/�����7�q3 �Hs��'$�l�P�}]�ZZGp�����gt<����٠�C]��ߙ�U��<\�$���}w|2J�r���Nٗ 7��ra�-���$�4�Gxw�ٚ87�˯9ri�gӌ�������i��h��k�W��I�6sp>�`U �Y�7�� +c�^�a��ؼ@�z���R21{>�A=����F,ϒ���)W�"Jd��pO���5�������Pull�&8�s;���E����_�Y��ؚ%vĬ?��u'fcc2�;/�Z�7��p��xf�E��a��?����7���~q�F�< +��3k�����Ȭ���v.gw �d���{�Ӗ/wf ����0X���DOq�L���sȿXi�����SG�[������[\���uԶ���QcK��[�{�7#Z�%�t����[�ZF�W���뾶o���L���20�e@�ֹg��yŕ���jPE��������A {�£'�D��w�P�E^(X�Pf�1�������zۏ�gw&Q1=�%m�C�:�<Ȏ����D�\�uO��6����Ҳ���-g���r�4�|W���\�V&�][��ΰ���`o�_t�X�^��� +I����V�Wv��� ��4�����y�' �{�ȵ1����y�l�f�O�'z����]S��oZ��q&$�t��c���p�2�B +�;K��*h��E\��0,osyik��q:c*�=N,r��qb�m繰[Qb��rd�g���k_�SI�!]�kS�xU���X�g4�N�n�b�߯�y0��s�ʐA"�L�C�^�{ endstream endobj 44 0 obj <</Length 65536>>stream +_jzV����VT�%�gD�س[c�Z��]���4�z����c��s��?�Q�?�>븺=E)]���ರ�u����sز�_��JZCP�ˎ�$�,��9�/H-�z�6� j���*2�"6��Ԇ���N:�O������}��6��gD�\TL�����ؚ���~5�#a�ѝs�WB*TePC���L��°��T�v$laSCFbc�&�\�58�73���g���/�;��V^��9����$?�f�5l�Kpϑ���A���7|�6�]���mIY��OÝ�2�R�@��6�U�K>~�y韅��>��v`.�<��ԇ5d�]p�1 hylk +s�=���;C,,����g��~��N���*��lHh9�N�˘� -Q��cZ,i`cB*FkD���ɩ`�XMQ5ʯ�t�L`�k��}�_ W���`rB��H��@{k#:TAH�������DuL�W���^V���#�ė[���<l� +蝎�h�P���*11��SBj���tXT���]��z���Y�=����ޓ�%.8?�9��5�E�����s�/J���|�z"�;~��l}Z�a�f(�����Y8�I�¨RD +��')e�Q�Ã��m�?��$��6EDU��w��x�q��S�:w�`��>�<-�4��B���g K�8�ft��\LD������Q���=�"jr��`X�çW�������BƁ��� ,���`�T�N��z��(� D9'���o�>w��}��qa{�V���Y�a�5I)��D�U&� ��$�5���WPcf,���%�w��}��'��b$7�M���w��we�Ҵ�y���샼IY%�q���oxz��/��@�l (��������Δ�W�v��I-s����q��3qp)+�3� 1Pc�z\��b�����k��3Cn��9䟗�w�}��N���R�c�ts� �VHw�G�� ܬ*���dl\�/�<np����w��5 � kh]Y�Re��u�]{���6n,2Qa��/ b=�ŗ�Ԅ�=��1��*�L<�sW�6���ƛ֯w��\�+���66��!���I+\70� �#��d��1�1�c�� �cZVW蜴�OI[����Tb�*f�_!BUR�w��V�q���3�"jF[\dž%�R��y��3��l��kTKπ�U�_���]`5�N�:v&H%�'5_8��z'0y�Ez}�Ԕ�CIZ������Rњ�F\�_�zɿ�x�5�v" +�@��'J��?ߕQ����Yy[rw��2R���l���>���=K�ZMTpz�?v|��c�� 5�6cd!�*J�s +Q�x�l�pkW�G�y=�)\�b�G���ٝ$%���@ݚ�gs;m���:< '�o��?�9T��wr1a`!�{ϣ�~IPŅG�����ۃ�ґ��9h%z���&j�����[��-Iھ�?i�&��_O��M{v>;��w��5�� 0��~�����IݧƇu�}r�5m�돛��������y����:��r��Irq@�GƌQ2�vѝ���] �^|�Y�p�9x��I�w) `��^�(���~E%���c�^qfY(�e���T`iH��:X +c6�����Z���V&�`�E�X)=Q5�a�]���9�����{A%�ee������Ǡ7��$�?{���GM���R�&��m ��J̾w2F���x~.r5��tF�tb�@ElO!����氖 ٝ�߰?��B���C�MKҀ���0%1PO3F.n��+�X$‚�n}����AşT�7���C��6���Ht�*&�,D��市�W�k��c��A�{�� �����~�"��<|T�}?��w�T�<m�Sf+m� �-�UR��wp�XUk� +J�O�h^�@,�鼺3�.J�hݮ��ˎ���9����y]>���aԯ�����C3�ҍW�ge��n��?�4r�I�d j�sϯS\Kآ�ɶ��Et�o�睅_ߝGoO��w"�_�ˊ�zyi���}�q�Mw��(�pp爚r�X���{�hu)=��SZ�K�[�*?�>���;�USj!γ�iݚ���_��O �=c�|듆�T��/�����N�������>k���xT+I�pu�E\��<�>(cv��b\H}�NX�Ezf���'���\���H����CQ=TS��~�pO�����՟��ٞq�vL��N����������IHw-r`#� +���g��ޗ�fU�U��3+\FfYz?n�ӣ&FO�§��<�_�h�͓j=��B�]��� {+�?�VL;e�F����3Q =�D��5_�>�9�=��(������旘���k�7^�t\L����=�p�昑GLXHY$�A%��3�u��\����C*x~�Nl�_c�v�\��2��Ձ��5fR���NBcPA��[f�����̺�����n/pZ�i�)������{E/�o�������\V��8�T{����7��9x��Y�H�)mA� �М��՝hi�D�2:�C�K�����'�|����$�/3Q{v6.�cv���M��Ը�Z��8�����k~)�@(�)��{Fzw���%d��#&����E���U�2Q�AN����G�<��<зð����[�]'@\�����sQQ����C��� �b�k��YZ�g����Q��Y�v|-������<c����_�����)v�{���i1�O��pMv�ߞl?뚃��<�����lTT�'y��iF]L�CE�Ԧ������+~9�8r/����d���d{~3�$7g�� �P#<��F�,�e{�Ӱ�s����,������מ��J� u3P+]s؛`��"*L�oreu��sq%�HkH�����U|�����[D��Pύ�_�P����lOe��E߈(X�8�Q{��+���:lf��ٳ2�!%��/����tH���D����.�I�טk����ܓݗczBs�FC��4|�@����5 ���>5�{{ +q�3��^"�$-d�/���5~_@Ǥ8���캏 �A������7=m>�:�q3��I-䭏����O�M�+�7��Z!}����붓����@3U&�����Y��coN�\p�c+BZ6%af��K��^9h{\�[���������6��������s��i+��P��Z\}��Dz��O�E����i����-�������,��=�P�Ϡ@���y�{�_t<��j�@J��%����"�d��@����2�`^%�Ƨaw�p������%,=�i;�~�N�e,\➱ "��D�䚘�ٞ���yb����o5�X}Ry,� T�,\�O�г�[��l��?�϶�Ihp�{F$c���jvW �~�ȓ 8���g��,���@�(� �� 423��"�rJ�����4i�b�I���K� ���+n}`��*��9�p�3ݑ�] �����Fi�E[ӌZ�X;��Y�2��2�è�]��x�x�k#�vy_�_�ޠn&�OAnL�Y�l}L�y$�$!߿@(N8�����ju��k��,�(EQ�o�."��"��$���W�>�i .2���B��m�k8�3� ��mam/wg�X�ctĔ<\L�E��D\��}1/*�je�xc�����\����Ư"r|E�Hm�Xi�}�;-0>��j�:7fq�63n�C"*\Ӽ�6��#�=��)�t���l]}G�4.(CDհ�b�5ս���S�WJRSPC�܋�SQ� +\qDOi���@�vD��N������ 3���:���^��T�g���;��� +�`{�rr�y���U_�e�ҟ�{�ߐ< ���4��ccZO�k�ݾD�s�%�=���+I )�X����( +x���_��KY�(ँ��KI=�5ff##:n�ђ`N�ZFOPIhȬ���+��W(�};��+'Wm��}K����K�s�?M��,���yB�w�R�:,n�RlÐKQ��@��Ψ����9v$���y�9�u:�W�h�]�U�唚�+L�o�Y�7�Ȕ��]���/Л#K<��TXDY���}����$��]vp�:�\T@Ń�U�����Qv^�ZN�`��K�ڐJ���8@���';O+�����&�^`�����`@�6g�Bf�̧F����w��.�*��9����E����F�gk�<�.��b���~����)�e��п�i?X������A +�Q���N��dV}�V3��%R�{�yb�/+�ޘ�֑���{.�����쎔�j%�bk���� +[�W�Ԉh�c�\�D���{l�c��[�� +���>ͬ]��z�H�����V6��|C <�/Rk" + +�� +և�rI�gS�������q2�^q��'m�� +m��s���$@�mOA/m�u���<횄奌�;q�3Y�$d�e�,��4���B����ϋ?z(�����b�j���Jr}�������_�<��b����8�b��r:j����)����xI��������gu�s��5�/X~xA�N�Y��R��А��A�&��ˆ/�_#rBZ.1��7���{�>�_�����sq-��P��_70 �52V.�`��ڬ� ���h�n|^@����l +z�2t�c��۸��=p=��Ⓘ�hqm*~���¢���Ժ���{�3Kk����8nmR�vk�M��/�_��5���w{Oˁ��X�=#�'���� ���U� �&j��.�9�i ���flB��5&.��o�{��~h��;F(�h{�!��A�' u����"��P�2B}҈��ͣ���z�]�1���J|��P��/ +~�]�1�eve�A�^_w�S���qGI�?[���g��K[p�>Eә���O���_�V>տ�+Y}]�9�t<.�5��DԌE��-q����>����l�k����p�1�<�vJ/f8$��.:n�߯��I[X��������rɕL�K�����@� �PG��_�1�J3V1/�vBGmߙ�:7�����a��=��U��ֻ�ovg�π�z��-B�WN�ܚA�5|\��'&�����\�1�ub�]��}+���J����^[���s��*nOJ�[O��h���3��-"�U�O���^ �UX��������>��`v太�s/�%.��Ԫ�iȅ�7 �ou�L[Y���bif�W������V���������3��{����<�<�ZL+�'�wv\�\�����⁀��P+-��{��LP��b˳�2E)��@��d���%����ϻǫ���,�Ђ7�&�`m��w��S��?�L3[�V�dž�ǟ\�w�'�9�y�5����ac���]�`Q�g���"��� V#K������������J�����!�9B �Nwq�>9��I��G��%�OFk��h�e�7�����/��5�z�?6i�������o���);r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9lv��a�#G�9r��ȑ�fG�6;r�ّ#�͎9l����c�E�wǏ�R�%6��V^���7!Xl����2�%�@�"��cy��.^>v� � ;�-�����3 8|ٌB�1'������.�9v���:�ͽv�ҹ�+9���\�p���c�ׯ\>w����ܫ�r�]�z���(���K���^�ɹr��ވ����]�����F��+�Rnε�9����:���F��p��?�~����c'N�h^b>`�/�r���:~e2&�,����)��| �K@a�k;��u�}Н�;;���߱��U�����^=�s�⅜c9�fG���G����^���c��)�\���/��{���=�l��v����:*�{X���D�RD��m�EF�WA��h�i+�-��T�d���10{�f=�bt��q��%R��VSs�I���%Q�������Һ���ij��0��=�- -�K"K�Ҹ�P�#n$�|BX{�QH����N*�-�z�����t^`6�C�};�@������N�X!W9�� Q-��'C��ï:'�·e�ꤙ��a�cjJs��F'MBzLCk�(�5!��5�ʍ���}})U�zbZ5e��6³@,ٚ��x���9Z]B#�D<xhQ��L�qy?/0�E]t�v|����s�dϕ��њT �)���= ������sr��rik����"�ИR�!9�!�`�ǵ<l���M�%Ҁ����=\�w�I�Rp>Ș�ڑ1q��O�9����V�j�Jf�_N���� =�ec��s��bJOj�3�V!7c��`N\3���YbUL'fǍ���T��KC`�RV9�p�F~GNjp��:��0a-�W����ު�Q��%'�ll��ƥ,,TD���*�e �:�%ֿ���Y��������Ш� jH�a-�1ie�cjk��%f,����慅H�����K�* U9�,�c&���g��"y�wo�W���IZ>ѫb#|�~; �b�^q��Z�r�i�v�m�,HE���K��Y�l/똉֕03���������GHX�<NX��̲����۟�2QQ�>n�7G���_�Y���6^�>ǔU� C��2��5���Β�F0��^q��B'L�� +W�А[�������9��w�J�&.fk{+��hL�A��Ō���)p�A9�ħ�@�&ٵ1C�4n���+A�-®F��I-�4�A�D5����P��Q�DV��)\��[�I��Jp����k�*2�avO����r�"*��"�K����ʿz���k�)���q��7�� pNI���0�l�I5�*mb@R&&4cq�WD� �� b�R��K��������ͣ�F�[~j�Z���o\D��%4��xgrz�E�_]�m��2lQLA��ȵ�w�����"��F�M"�o~}�U�G[#u_%Tآ� +W�X�4��q#������L���!����(1#�b��Y��Y��IA>k�a9�)&�7��̮��֑1�:�jsT��H�D����S�+3&.&m�S&%esR����A��x�ZL�z�I���X��b>%�<�1+�<�}nmz)�<I�I����̊�~�O�&⧌Lh�@n��0E+�&c�7��[~ � ۷-n��c�s"ZjK�Ln��H-+�-���y��ףjf���վ��H���4Ě]�W�)��x��A� +R�bv=����h�z�y��#Fĺ��X2���l_����J��f�8i���L��79̌�ML�yĔ���g{�s��/j2����+�{13���u�=�~jg��LPM�\��D�����x���;�)���^�u<�@��X��C�MXXȤ�K�s�߷��{6=ib�v�I�;s���������U;Ljei]/s����S;�Ǜ�uO�}T�!�� ��/����sD0�S���=#�3���{�[�=gv�!���#W����u�#��p�"2jmLI�-��Sȫꇍ�l�co��<�_Eo���\ޝ�U���V4����A�D��%m�� e����bjLdž$���=��F<�;��� _ղ ��T�Q�y~g\-�&Ԭ.�L�ۏE4>(���~���i1ο��ڙ$�o�� ��2B�g����E��Ý��Ϛ�Z~�Mj���~�,:{��Q��j�:TA�@���*���b �o��۷��/a���@�$�"�~6V�{��VOBdž���_L|�{������XQ�����FgZ?�P���=+���!�}�w0c��c.6f���/D ||L/"��τ `���?��w/��7��� ;���˽���y�Y�>w�7�O��$3��� �hI�%��������Q�Su^�y��!0 70�i�;i�U��x�ѰkΩ���rZמ���u�AD��Ռ����32`1�Y�&�\j�����P�qo$f���M<R�B�K[��{�T����Lت]�ʫd����VX���&��}�I�i�Q�g�v��� ��A- ���>�[�BP�`5�.j�tE�����T랇�Y��}��W��>]ڝ��l�����p#�3c �d�tH���J�ż�Y*I{Y1��Q�:*.4�k��`N9�B��s��=�<K�� jI�A9�$��t웲}�D��� �<�5M���q�g�G�̖��R��f{ +��2ns�DZy���v�n��n +�K��<��;����K"JZSLG�p�Bs�c$����:$�BߎȍI#��5$c�aR .�: �����<�ǔ����WՒ����F{@�n�.�|s���J��g���ou5.g��&�9�1l��Z'Y5�Cm�k�q���Ϣ +F{Z'b�Mb�3۳^�CX�����77G�pN�~�[B���ʰ6�k���jX]��������>P��I�4s01=�3i� ��|��}�~φ�H�`�����A��J�X۞�^ +�#����yU$��J�rD˄�rL'��A ���q�w�v>#�.y�\p��B^r���Ž����@,8�̃5��`M Ȭ��)�?��o2�^I��]HI��7s).c����p�iT�j�S��Ԧl�ɴ�O�3�)I�=�C�M��=PojZ[P%�$��ތE@��]�x�8�3�'jb#6$O3�A������U*,����9n��H�{6��4�O�onΐK2�;O~퇸�cfl"a�@�Hj�k����t_ؙ��J[�����gI��n���0a�?�v�yck�9�_��N��M�V3�&y�_x�Tέ�ԅT�����֓A-o���^9�tg���W�4"RLEo�*1E�E�e�4&ϻ�l +i���|��e�_��' & <\HAo�A ����jr]BOm�]D��F�D�\�{K*�^K� ��eA5�zg�p�3C,tL�/s�~;A-�4:'F��"ld�RZB�r|��:�:�u<�@��F���gN��ia7B��saE繐z5$C�YP��ѵ3�-|x$���;��/C�e�9���$���@ٟ O�N�4�̈��왅�l�|������_z&����<)!�_�K�A +`F�D���)�ĕ�*p�~`�����{�T��,���Y�}p쌃�OYY�� �T0�)�㑄���6id!Vr��k<�� +�Y�ty�"���G�[��u�o��W�uwﶻi�jkc����e��]p DI !�۸�00�����w�����92̬u��u���^�b12>Zk[>���%m�E�d鹝 `X�A��(��بUĊZe �1�dz�k�B�^�S�����Ѳ�6&���"v!ᎀUQ4��T�;+�}����� +��9!?ꀞ�@.�Z��j"憶��e0�n�ωE�Y>3c +��2��a��4HqS]Kz�����a�.݀<����rw��G����p�;JjZ�"�G�u�c35��sUv$��Y%�G���ЬP�3C&��?�ښ�>.*ڀ�xn-����O�y}�� ��]$�LW�ZY�2=����ib�WKN��%~Ђ���U����k��w�|�㚺߭����Jn-9�ԑ��_��ɫ~-�#�)-1Rs�Ө�}9�,�]�^�bL��[��0=��Lȏy~%��5�/>J��.;5�Yx8f�CNgfnBF ��d����$��Э,��ؕ��R��w�W0 k��[�iF�[ ��1�����7C[��'�K����U��R]ø������q�#�8)�9\uͯ$���q��jJV�,���))�#�7�ch�ܣ�)읍a���ק����mN��U�kcU����ȉ[��� R�k�poi�}��������Qx<�UI�vM����\��=���^�J���Ӳ���A+I~��>���s0��(DW#�e��+��^���3ENqO�A�=��!`�������>;d���kbP�!�ү'���kz����l���Q63��&z�y����#�z������u0+⠓K�뀱��o�Lh��<�I[�� 5cze[�O�c���K�W���$�C��D��b3R9�dA����_�%�0pR�Q�&fwA$�}Yڸ� ��X��->yNP�7f� +zfa�%��s�q�S���ܠy�9�ح�eGmBN�!�DRitN"��>@���G���"2'����#���!k5|��16#o�����!�*lE���(����6Ǫnt|l�$���(�k�Pۈ�r� �ɢ��g�v +��VDم� hXe^%�pk�k�Gk��g�a>��B���+n-���}�����Ɩ�]�<�/�j-:lxZţ䕹�h�� z�� ��-���}��v�pm���1JO��DY�/;�9Ztjk���k��s��o +�!1m8����tH-���|:j�\W���������u9�m���в�m��V�Pv 슈�U��\�G�Y��?��!���=��F�� �2j�#&�>�6�>��Wt��"����ۨ��#A���s�\���$5eswckǯ�� �R�jh��2H�~ �d�����-�����s�}�+��3�)f�*�fR��Z);�WH#Fݥ������!��,B�nK�(Z���NZ�#PAx�$�G�O�,2q!Gm[�R��� �6C�a�H��VB�!gFl<��L+����Yb�!U �.=*�@��1*?.Q�?���,2i�Z���>��y�\�5�l��Q� ��0Xz�ZwpH1��y�0� +&zQ�&�yMd#Q�V����a3��[T�i^��F�����,r����~�30��E�0��GMI����̭ �=����C4�(�y@�&pw�FvU�q�k�v�8de�v���lM+�/�YES�/6+���3��HF�W�-2Qx6b�^qHd������v�9H6�9�[jR*dk��GÛ��Y�,`�5�\�%�o�+b��:��]枆�_�[��\�ѳ�=�Q��;�W�R�w�]��n�ru��fn/=��;d��F�w��LϨ�bkXX��A���/CC_P�X��G��C.]�):���h �%�v� �s�49ue���F?91����'�If�� ���%ug����g��م�=��')_�tU\��( L���1�a���A�9�h9x��ns�t?�Q��1P��!������+��?����":��0�m��gg���▄�|R�/n�#Z��T�9�����[#���\��b����h�OE�YE�X�->R�!��P A�P3����J�g��������8���ӈ�{�ˀ��ߙ@|�����ɑy�04#�BmR�v�(hk����FR�W]|ޫ-��5R�j~47>|1S�,f��W�븭�]|�K�͑r��=��)j�5KdmYˋ�E\�s��4� +�@�cv>-``��5�T7d�m=���_Y[z#���Q;��2Q;F��rp+�jC�<�W* +Y��� �mrprx�WC��i9�!�\�5��眪�F�����Ȼ&>xy41dR���'p�b7�LYG�6��::����EgXX�y��9��8�AD ��"�֪���{fE��]��t�Y�����} I_�-���3��G�S��Q�>B~������懭O���YA����=�ri� .���^-�2`�B6�,l�W��bb@�t���^�=>Mx�>I��1BMi��Y@s�xG9�Uc�k\A����r�6��V�Q�6q��Z ��~X Zk� ����V��.��_p�QS#:� ����A��M �!����#�J� 읥��6�KN�F���J��j7�bX'$��B�w���֛uh�u귮� +�լ��^D���k&����ɪ;�тcޱ��މ�����(då~���^�ͨA*��5��!323Q> �(f�1ѳ�[��J.l�{�3AJ^�Pr�9P~�7I���5�4,�9J~� �0�Q� �����~���x�V3�熇�w<�K#�ASS{��t d�m�ث��� \�ѽ:~U�V��Qԉ�A�\��s�!�ҋc3LLtF�ٛ�~ +z��v� ���/�<ޛ�UGmz�$bā��f�aKu}����N� x��b��,d�I��=!x�G/a��r��\ߺ<&@��ГN��u����>:�g���!&��g|6���&YD��]��CX�&��2�KK�p����u"N���1).���ֆ�7����q�ǘ],ꞏ�-!suu�"�{�Y0'���{�Z۬X�q�QqQ���:FQ�0fkh�ۛ�����<J~��8##f�W����(�V74�4����/F]��}~�X���f���6��� ]]����\2��A�Ԁ�W���nO+��IAi�(DL�:9����r�!��G�1f�GS-]�e��Ǡ�al�� c5� !Ϻ��>�����3K��&kx�{��Ỷ�䒠Q&ܙ�W-�T]Y�^[�%-�W]��0 ��r=���Y��b�Z6j�+��������Бh���g�0 +s�� ~8ϕނsKoK��L0r:���#ޏj��=`��v�[��83oe}ag��Y��6DM������P��M��>'���_Z�)9�cf� "������[fZ`��y�!n��: ݯ攚^f�<}�o����+���W=B�W]# "9j5h�V�t�����s�����ͭ��wi�����!���u�!��~-��7��x�����J��Æ�<r��%��x��K��K|^�B�߁xI�&� �nF�8h��c���-+���U% l���~�����Hm��ׁo�4�����m��3���J���~ק��F�bN��#�5-;���s\J�*�̍���e�@wAd%�{�\�Wϫ��dG�|bP#e9��!�B6�4�Lյq��vw^(��Ik!�S�z:�KC�WW����Xaku}t��yt��CX y~{|��&�/W%=%����1d{��3�u-�����[e�=����i�_�\Q=����~6��l}�0^�^S� �`=j�$d� B�K�Ř_���h�����~亴^D�뛝S +��0#%n�iܝ����ܠ�O�i��FP�=����U�*&Z�Rtt��Q�7��RS�]҉i�iZ�lg�ѝ b��6���p_x��q�X]�5�n ��pJ6ǙYK=�+ÔC'�� /i�F71c�&Cj��:�驹�#��w>�{��s@�(ڞ�e���\ M����UѲ����#�+�YGV:K��z1�^1n�s�b�,M���!����V2rw�+��5�4��Yn}]p4�g�\�B66Y' ��cػ�C�;A����S���ܟ�:�x���x�9@�A!�3���<��IS���|��%y�:��D-�J�p����Vs�_��9�#�[[��h����ʭS�Ƨ}As�K���ыx��OpM�rܓb�KY#Z��Ԉ���]Gu��f�J)p��@�,w����Ar�^q���!bo� �;#�ڧ��@���h*n�u䌀ZD�O��!m0[�����!�l�5��!`����5 +�����N����������C����8�6�bI��S˪X/ui���W�Tѳ|F>zT�$G�t���M����L@�X�C�S�c�3h������7ыöꆵI1qi��=���Y�Q�vT7��d5�#ҸC"vNs�E���'k�=���[�~S�㨣�U��؉���y1lb�;+�:���2<�ZQ� �&��Nm�46S�:�K]Jf��)1�g�'))~�,�֊���}:ir��8+<��6:�g��bw��X�FB����l��0��Y���4>S�ح�R����A��c!�,yH��Eh�F���WlN���jVd���S�S�+<J1^����{��O�:0���߀�%z�����>\y}�M�o�Jz� b��B����W�J�c�\W�������iXe� Z����WY�o�3Q�}9nW<��1 +�zvy� ��-ry�\qog����d����_�RFd�Q�����k$��s@+��'`�ݩ!g��ao��d�h��9j���Rp�� +�{������=S� +e�<+��;�Ra����TJ�s]��.��E�#kD�8��cK=Ի�i)`��j ͭ�q�Z!!�\�0�W� U>j�\��?.���j[�z..l���?�]���;��p�=����ǹ�����I����ҥ�A��n؝�����l�{���W *:9le�b6+�u�5����o�� �#�;�Q^A�X]��3�C&i�^�"b��|���լ� 5�`u���8H�����f�Iw}:� do��4��+j�f!�c�TlO�3纰W6���f�l5M>c]s�.�����M*�مl� ��?oq���Ie� w�g:"����G��?j�F��Ɩ�M�:�{47��ϵ^ӓ>�ny�F��j�9a^(����2��V��5� ��,<)d+>e��!���� �����x��\ȩ�:��� �gR�Zk���s�$$�VDؘ�e����l���9�PGxd'�F��A��G4"��$#ks���̓�3�H��w���n,��^pOr�<jv��+�3�-ݞ�,�R�FY9�[D��g�|��#����X�B٥�5�-wN�r]S̜�!���g�]Ԉ{��ׯUݘy]|t�������bpX�(f#{��1C�<f��y�y�)dݙ��WW܊��Y�Eg!3] k����FL�逧`~v�x��9&a���"kU!]�,�{�ж�-5�b}����{�G���9�NȢ�s�E�U�1����>Mkw�TS�3r����nyՄ�>%%b�}Ff�G ܦ���i�d�ڬs���=[*:;�,�ԞI,�� {���^�����g��>�\�5�H_�#� L�@��h�<����gjh�z}��pq#�t8(ngU��$�d��^��4����54�,H���vg����� h��k}��쌓�`n�#���Է��v ��mR�����.���~��.���K�VE,�H���G�A^ۚ��s >�ӑМ��*��L����ڧ!�c0�~��05<w�䒵iFV|��-��fk�F��c�%/d������N����T��ް����1���V�o��5���M$ +�I�״���\������\M[�*B��3WׁǾ�9�Q��Yo�ωa�5��K��Kó�:�V� �\�^ʃz�#{�z}��9E��!��4"��0+�=)�����ٵ� +�&B��P�Ʌwi߯�/:�G�C�.�":������7��Ʈ����Y���P5nd�$=3��s6F�E�d��j_�����K�)fٞM^�WҲ�*Z�W ̯�Wy�rN8�R~�(=�1s�BzzA@E�h8����j�T5ۭ�d�u��ECoP�c1�h��]��HP[��yc�F/ ��:ܣ��Y5K�Q��.5�T�U +*v�8��1Q�g�� +)y�īc�|���.�{J��j��d��������y���_�E{���^DAX,^�7��|�oA5�g���k���.����ch|��? �_B�"Ǎ<\��*��!�7��Z�ԵF��C�?����D�k��#&J^�HH�u����������!�{4^�*-E���k�FH�(hi�a��y�ps���"����mn���m������kƧ�͌���� [A�-uO#Y��ȩ��!#-߫&g��W�\�$> +���Y>+� ۟��/�����V��������w1�Ud-/��6vwNZ ���9�ݛ�{��g�Ή�{�|.�-{��pj%;hV�m�y��y�,�ܯx�ˢ�|�ߎ�_�*8����k�k��ڛk�և�%�F�q9���s�7�K\ȓV1owNyD,�b{t�Bd:|��F�yĴ�q� ��U�릒Q0ۅ�����FF�_���=�r�'��s����Z6�=�Լ�I!��l[��ߜ$%nOV��h�h�C�p(y�}�se�4�L�� I���+��i�W��O����Y@u��/y��b�=���՟}�ٟw!8M.������.G�x�rM�9��Uk=���{�"!��bH�5p��*f1rMҧ��a���`gV������b��%���ha�ԣ�%{�Ԭ�NHp�ОQQ�{��4aĬT`-��{�K6����q1.�k�d�)i{���q������'�FQ"p�!�L�H!�ӊ�fzi��,ߛr�f�5n�,^�BZ ��P kڻ��ۤ������Į���� +�����!G�sd}6n���>�q��8d�����d���ɲ�0�9N1å���1k㫨I&q��e;*A��$�pss�k����r�dK���3|Y�6�� �gM|20=��T����1�F16#��[�"�L��J-ϰp�Yj �`c�֦ +:ڴA���luK|����r�`|A�v�+����AF�;� �^�y4S�BfE�A�,C�_���=MI�ؘ�)�C?��a��}d��;4#� 9���U�=fjU|��e�.SD`|�;��3"��D���N�RuA��U&��@�R����V��� 9 +2s*?¼@������9�Y�|oA�4��]Z|��H�U`~a�,C��xՔ���C��M �v-�Z�͘���K��d:�S�_Y_-��!�)��`S��9BI�Z^��\���3���Rs�)�c�;�q�͘�\���� +�>�\��4�M5 �5d_�z#�$$��ҡ����NG�A�&��<����n��y���!=��UV���غ+/�AO���eF��t�����5dJv@OL�ٕn��Cx�w�;?����yI����9ש�c�:F����S�'��P[JvIX[Sնt�M�M5%scse�����8�z�(fl��K��x`�����6.l6�+�&N�Y�5+�=F>e[�,�,��JE�--�єt�����ٝg�c"�j�g�{�k�ϋ�^�0`�`&-fg3���LY5;TrbqH�ށq�QI�Gjj<��z���[��I�LݎAL_R�˗&YY![s���k��6I��\���4����������m%)�o���uo3��F���șn1�� e�����#����l�����R]WtQ$�±� �{�5Q������j��G��3jaU�m<��s|��]��f��f=Zj��d嵠�]�\C���Y%����-2[�&2����� Y>�����P�B/�`H'ǐs��o�x�^��큧 � ��-��q[uc�!��s�Q����� MϢ��/b�R�G� �?��B���� �;ĸ��y�����4�M5�a�����"���:��z�䔰�Z��=n�Q��.���=%���b�<l��]zv����^�gl|1���qr��5��5��hb|�K�����n�弍)q�k��!�Z�W�����9ۙ��꛲+q�\��x��!�L�տ��&�� /"&)����� �0Bf:��>�����>�J!;���ʗ{0�4��-E��B�ߌ�7��3J��!�k���̢-�b��)[�`d����B��x��YȊ��H�o�Q���i��G2=Jv~� +�f�����5|\�XӀ\[��Ff�^@n����"�7KCĔ����6E}��#�-��9.�#rmz^�G�C,"d���C���l���5��{F�#Z�SM���<��2��$� �kz�7>����#9�k���p\�D��) g�����][��Z��K%��벰��i�q#��?U1�WƸ}�Y{�/6���k������\��9ys��g�iv����sM�>[��5������VNծ�V�kc`6'�� ���w����1>=����>���5���0�q���EC^ X�i6E��,�x����8��eF*G�s#�����U��>��gӃ!�.l`��SK��/�*ӫ�c�*�-�������x���'9a�����wd �����o�U!k��<����Y̅����Ŭ� ~п�A�ͅ���k�����Bz)ǥ�7ƘY��j�T5ׯ�C�dW8!, �.x�yQ�L�g�W�~(��9�(���E&�C������ߋ�W�.[bg8�(��{X�A4����ZI����q��M���%�u���O#�EMu�K][̮hڝ��ZB2�G��ԗϤ���|���� S�ܵ^܍�A�ݐ�������Q����_k[�,���`��f �� s��#�j�Vv���9��s���ʹ����6���#�F� f�m�m!{�f��Q���!�\@u�9%���kȚ� {Ff��[��ah��ނX��e>��E'j��V>cw^�]�?�/*Z�s��P#5��m{K���y�<`������u!k]��,a��5�aGc�c�@1`�IƏX5Q�]~su��Z��<�[[C��~ȰH?�g�̹���k#Ҏ���6�к,���UO���c���e1�D�ܿ�*�\�Wڀ��u�����~3���>t)qI~=��㬬�?���1������ �?j�Y���U�0JH>v��E���Ƹ��<sM=ПЛR)1Ж��CpM�3�Gh��)V��ٿ�Ҳ���;�Ԥ����f�n��n;��vmb0,?=� �U� +�V!�voV�G֍<z!ѭ!�9�#Z)#��Cz^�m�\�����q1[�̜�!f�J?=ik���R�\Ӵ�=wc���=.#�w�,�U^�����]�T�k���&Vݖ��� �ȭ��=* qפ��{N����z��C��A�n�3�}�YA =g�ƣ�?���+��=a��¨�� � 5g�����̏߇-��)�W��������1SrB&b�_ϩ�e�xrMԯ�Z^��hiO�ޣ)��7)��p���W˃��=j���j�Չ������62!ۋ(A��n�,�A�O���uU��T�{Q3�* +��\���\��fDww��d���9k�Ԅ�A���� o���'L� +��D�O"3l��< �^Q%;j��A��s|�ނD��P��^�1����d���D!/y ���85��A{ x��&��k[%���� �X��S求ך_�}ֶ鐣�~�r�A+��oħ�����l�mn�^� AoE���Ffe�^=�<hPCٗ�4����Lmk�V���ʅA��߅ �� <84ng�wm�Q������J�@|����� E>=/df���Ь�-��4�@S��!h��G�Z��c���]�g��p�Vz�w�:�W<��%� ��=J���Sy~����RGᑈ���3K�ZNY�WEM���A-�(��b<�����I�A���S�ўIV�s�ᙢg�&ȏ��H��F w��99+��ĵA�u���ȭ$%z��=jZ����U��ַGև����O�G�G ���{��zPO�ۙ�g9G�i1����h�9��<�e��� ;��[�1�퐎����A>��ϯ�av��i~3o�>�cn�_\|_�w���HY��BȾ����,����+���Q?Bf�u�<�X�� +���b2�c��9̸�� ��>9u{��(l� +��>q�&Q`� �q��'M��m%�WEIk٥H�"��+ˣ���Ld�<Ԭ=+�5p�C:V1�����܋��K��$�8r}O�G�r#p�� �n�zذŭ5s 1;�������j�sw�?�;��8r��3j�i�@�5-���gF2�l�lj졵Bրq���T���Ґ�� +���!����Cx�~�V���It�G��p)���n�dXzC�+_�'�t��>cu���`�w9l�S"��H�rOS2� ��B�[ɯX�dŀ��1�'? +h��!-%3�e�!{L�35�����Ⱥd|��#c6I���Vѳ�+..�V^\쩺�=��\_��%��M*��>�~\=�߃�`{�t�چ�u�-���5q�w�5B�������.t���[s�[�(��5Fz�ܳ���P��c���ȉA-��u�blR �+n��V?�o�&�y냔�K�s��ԇ������ʳ3�ˎξ�<�֍�웤����ա�+�}��\S�����SS3�#�G����˲_���䰚_TS3�S�۞q��ኋ�Q�͐��P2r7��:�g������V� +�z� Cjf�w���7MJ�NR�7(���B�J���X�8��3�/����ᯭ���^�G_pM��5�T�Y�b��c�Z.rO�.r/�Q�F��TlT�$�u�ʘ��E��(�45�;EK�sJ��1t�O%c�� +�s�����*n�{���D��Դ�>��~�M'��4#�5NO �8%��y�=x!�l�W]��'��M���6Yu2d� ���٥�IZ����5@����7FO�L0��c���Qay@-��)y��!ꃍ� �)1j��|��܀�������f� L�� +�~�������S�]JR*�w|0�Ȟ�Y�����M|< �00�vT����-����}Nk�ӂFzq��%m�*����c��C�5��xa�-��b끶���J7�r�>Y���S��4䴭1F���~w��x�3�,�z�n RD��g����S���[-��45r�R!Xx�IrMJH��B��032p��H�խa��U���o J��z��o�F:��݅������;k�;�No�P�v��6��Y+���O�Gl���w�o���z�I����6���|JN��(%���ʇ�Kk݄�~�í>���aj��ꔮ���h}X�*B�l����s�U�ߔ�MT��MW��'%o�J���%U0W�c���.�����+�=�!%�(��W:�{�G詮QF:������%�Wߗ�X��Ü[ 'i�3�^�,9���Ir� +��_7��N�{.�A���TP#ă&�y'e��qqc��oUq��Zzp�M�qG{��kثQ�"9���{��6p�a#�QrK"�o�5��E����ؖ��w)Y�ۓ�ĥ^�����!F�Z/-i�����3�;%�$8�)�CԄ�^�յUf��~���m�-�w���dm��� z�s�xw����xׯTn��.va.�r~�yV~��M����������oпmt�n8���Ͼ&^�>A����mij��ѹ7����h����;���w���V(v&��Uri�"���|��[������#�]UW{��ݓ�An�_)� �8��7{��Z��i���b��>�}��:"�4R��4��C�mk�8ly\�R��������i�On���5ŧ$��g�^6S\��K��+���?8^���^u� �v�-b�['����lC}�23��#2�Qu��sl�-����#�ZBiE;c��^)-l���=���ˋop�{���Ä�>%��?�5�ʆڿ���_���^\~Wy��ZzX__|x���p�-?q�%���+����ċsϱ�W:�7g_bO�w�nl��nA��N�����X���;K�0g�o +��*��g|a}^����;Г�����7�ޓ�ξ*>�ڙ���7��P7��D�+��<ϔ�r{�S���|aN�o�!��0�����pז��6��)�C���.ԩ�^�����K��UWlo+ύ��?_����Ջ�H--�+>��췭A�ͭ!� '���0=ig����Su�;!!x�ꄛ�R��;���v�����3�ֲ�o*N:��=c̜�^⭐F@���?����Z�䰑K�j��n%�6�����u����?-=�x^���9���7��0f[���8;gg�����xu����E��X�K�v�o��R�K)��@�w.sM����ο�\�y�:fx��� ��_��7�(w��Qǖ�W�1�PK2�RKr��>.?��I�n{E�1*.�vL\𥦶�'7��s����G���܃c���E��6@K�~�w�d�O�*Y�#��@<n{�uB[����qя��ӵ%�-�Uw�*!�#�h��p�����I�O��\C�G! �x���3ȩ��Fe�x�f�u[[ɡ)I��C���yZtP��������]�7w����3}��k}�P[GԵ�_.u��W����Z!~K�/_�?�y�9��sz�u����}��V���/pW�$�W�C��������*���㚪������܋��M-���z1�mŧvF�a���3��Z}�:1מ�)y_7��N������NJھ��K���7--凬�Q^�Ϙ[ʏ����K����6��Av���pc����A����꼡)�[Mm���W�����|2)�:���N��d.tR�ϼ&^���Xm/<��,��������p��O����S���n���qscƗ�ڴY�2�Y2�͵��d�74W�\xþ�h+?��Y~j�}������ֲC*y�W����k��ۋ؛� �5�+�d&���nA�]^x��� +,ihJ������͚Ǹ�5XC\�.w1�ϼ,;bj*���T���.��ai��[���u������n�5`ۅβS�W��-��k���y�}pg�(bs<S������Z8ZQG�:*Ϭ"ف;�r|��g������E���Yy����*���:���^��� v}LX�� +�H��������S��/4�������T��/M-%�^�A}�u�m���� +b�|�Ez�I'��'=�̯��7��w�OQ�wFhI�!�}��_*�M�~������\x`X�hhr�O)"m�2S������oƖ��&%��O���P�|����_��9��n�F�E������/@s��?[�r�.=��g�S�:���_Sn.��2<����>v�����!��?��}�s럔�?���7Ew�� +�M�o��֖��w��=Q܃������Ya���3����$4�JL���]q<���xV���%�Džv�i�#S�Tt&��W�cmɻ��%��UwFd�_/w]���њ�o�u��3�9��7�^b^xs��t{�-��q�~}s�WӲ�/Եy?�`o|�Tx���l�K����?`�|2�I���4�_����vn�}H���ޏ���f�ނ��� ��7�����ܧ���rL���#�Ҽ���~|U~�+ݬ�aQ���������)?5)J���t�O�����w����/Y�vF���o�V:�'��Jζ������V��w�/��ч�u�>^Yx�?���J�k'^p��:�x��0*��O�Ӭ�7{DE+��d�3ܩ������n����Ӌ��'/�kR��k3��=g^���]]zO�5��괥�젵�숶��qy�/����H�|�=��J���������}Â�ϧ�3��5f}gy�u`�s�O�h7����QQ�`� >K[���М����!��~���\�{�/âԃ� V�rG���7�{�P�g^�=����u��-�c�U�2�(=m<������+�y듊_g_V��|yZU�w���U����Q疻h��m�'4�%?�������_�� �5]����;�%s+��� 0u/��I�I]}��gǽ�g��\���6��X|�L1ԣξ�\1��ONH���J؟��L+���O������� ?��>���M�R>76�`}Vvls��OMʚjN?�t�O�Ǩ�}�{;��Du��^z귽Դ}㼤��h7���u}����F?!!����YĒ�7yG�7?������-�;GK�~{k�ώWU�'�O���N��e��J�s���ߡ/.��O/�W���(.��cm'��s�[Q��jz>�ș���?.�*��X���u�?.e�T�ܭaA�j��l����;�)۳�C�������ui_�'����g�m���ӯ�k����ٞb~�=#�� /������5�K=�c��G$7�<"���Qѽ� 2��т�u���Py�ɿa/��ߛ���a���{�$|��N�l�s�����ߠ�J��>����O:Eţ�N����2���cS�w#��v��iJ���Q�����ϴ$�ץ.�ɚܟ4��Gu�9?tR�� ��_a~�������$�G;X�߯�P����-�����m?MJ���E����Ч�{R���5��W����Kɳ��g_V�\~���؉�`z�>�I���ΪK�>�xSu|��z3k�=��Z���T�SBjr��u��1a��k�R�J� w��x��Z���y�����K��K#����c�b&q�3�T�{�jk�36�`<�\'����۔SK�ٗ7�)i�w%ǜÌ'd�I���F���S�2�O��ً��#=�M>�L;�ׅNv��)�¸,� Y�+����p��m���OK;Ɯ�<G��>�\v�+蛃�ҥwī�����{؉�����aq�����oۈ���@g��i�����xɟ7�^�7��iZJ��P����N盭>j�k���ܲ1X~��<�KMͭO���_��`.�����>�j�����'._~����Uzr�m�Q���_��>q<�=�d�̼��b{\xh�}�mE�Z��«��K��Oʏ +����1����1�%X8�ؐ���)��N�i�$1ay�{�s�3J��?Yޢ�G�����h}���s���Z�kL����Kpcr���uȨ'5 ��M���i�O�b�e��[Ӵ����oM�����'��q��)��t]�Ò��Ge��Gf_���������mK�w���������,�S�N7��/���;�*�mC�O���lOJ+���0��~�����;����[�]��� ���������+N̿��a�O�2��7���e}������a%�2���J������P�����_�U\�K?��+��+��k_ +~��� %g����-�{����'�?���~�'�kZ����[��:���Zq�Y���C�[�g��/J��볾� \�d�s}�L{�����߭w���ƚ��QF� +xd�k�� �8������q�ѩf��aE�o�}���N�W�W�ᮬ~ \�������<�����J�'~��^us�;{�5��v/�� l̞�Y�5��f}���oR�uB~3��yC�6*.�?��������k�5MJ�l����q���猇���S��LJS�Ͽ(;�|g��|gg���=@IԷ���,=�9(����>�� ^��87����l�?3�{�5'��kFʁ��� E������F���ҿ�ff���2��nW$�������?ϫ�~T�����s�*��֚���$���+���V���g_������� �������>�>z�Ÿ�ڧC싟-u�\��$uq�Q���Ŵ�^@��$���[ +��S�b=<��/1��1>��5QSt�=�#n���@���}�[��ܟ�n}��ro�|)y��� ��F3�5N���ܝ�D�4>����$��s�WnzG�i~���5�+X�a�/�A�\}_rb����d[�̵�> m{�Y��^�gl!�6$����x�o�ڢ�v���P�����)z�-��E�AKK��Ji���俿���������=�tU=��ٗ����o����v�Sm]�w��b������+�!q�oZ�_�:����_����������N�s��e9��=0�Jz��]]ij���5������Rd�K_���Z'���(;Gӆ��o�����I�U�����JG�ڴ<�+���ۙg�����ou�yGW>p�M���s/���>��} �\}O����Fy'��$��\���V�R۲3�,\�̻3BM�&�w�Q<㌌�AN��}�����a S�X|���_����-��>0"���,c��+��I�Ai��/�!�tR�_�)qOQR6�W^g2�\�d�e�ѠJ���/�4�-v3ZJL��?�?�g;��g���_j�����u����7���e���I�Av&hl�� ��һ�S�ǍM_ϾD�Y� �i�'~5�Xz�9��Z���0<):1���宊K�o�N�20��������䤣�t}�=��d��Q~�l7��x]��q�oЇ���ܢ�n����r�r�������OG��Q��/Pg�/J����s�D)��5�?,��_^�Py{{�*�;�@����̕^��Og_U��N�+6����c/Lդ�kZ��oJ����$��RW���Ƣ+������Z���m���:�R�|�w��h�Ե���_��Kr*����Vӊ��[�a�l�P�Q�3!!,vn,��9ǥ��Ԥ����--���Y߁�] �DD�$�h���h~Ÿ�l�ޙ��������{m��κ�Q7����+��>M�`r��%��������ʺ�S���Խ���Җ��.�qw7��%$' �! DH�vf��}���N�������Z�Y��i��v�6���������LS��Ů�7KĘ����~L©��Ҡ�A\��6�:���~k*��3��\]Ƶ�\�M�.x����~{��y��˸����� +�a�����#\������Ӊvț���뛃=*j�W lZ:�)G%i�ù�Z�A�ܔ�R��`�Z`o���o��ʟ��iy�Ar���pa�1���(>��I~�E3�^Txo��T�O�%��f3}F&�;YW�or�!4�t �R/�g֚�-vʸ��>T��!��Z�s�}* ^�m�]f����p����3FG{����gN�3���s��v%!9�]t��������W�����>ۜ�P[��B�J��К�|OM�X��^Y���BX�z�PWZ��%_�p��Ji�ϯ��=�W|��җ0Q���ʚ��-��X��x�qU0Ӝ�h�%��K��4��?H8�7�J<���}؏)��..v�?Y){�6X��!�G�Gp ��<^�!��tb�}��5�Z�r��,x��0J�8�%��y�<�T6�4������H��R�a㬣ȯ���E�K��W��.{o��-�6���b�GƸ&�� !v{� �5�K���r�!ǩ'��lL1ꪥ63ȧb ]Jڧ�����e���_�$E��e2��*�5�������͇&�xo��uH �6���^��7�_�B�x�E(���LPr�u��͡������6)#�������W�5�y�ؚ�dc0�o��� f�M1� Z��-q}��gj��t�;[/��J+�1��7�; M��������k�}�- +��T�|��tYʈ�`�I}��^���_��#'g�b#��E��*V��1Ӕ0L9;Ό�܉��{7*��J'1m����"�/���͞��a"�y� d�bw�Ӆ�Ի���0S![�D��|gR�\��*�o�#O�����W:oNH街Lm��6B�e3��f2n{��uɾ�Y�UQ�7��7[*X�G�'{�B��(=w� ��O�A +T�G��Y�x�9��n�D�ƙ%�1b��&� l�l|�W�*����YCF��խ!��Q��yenȾ��ʼ9�\��%'e<���ޖ��/��Ē�1J�zo�����[s�yOֆ�1#�,�g�d�5C^o��<Ks+���{�]�'�)w'�1�2d�g���VR�����jޥb�lt�Rg��ޢ���/���#�dy�Ax���U���� +ߩ���Fȡgd4@�d��Ӱ�{ߩ�]�*:�P�����Y��\�hh.��8��Y�AG����e�ԕ��Ws������ +��P�S������de���=o����M�}�Ъf��� B��?�u@�L�8�Bz��K�*X��CU�U��,uA^-t�?\�Ϻ?۞r�ܘ���,O�o�W���ȥ���D�^�����T�ș��aJ�F?)j�ڂI�1I��v�l}���f쇕V���.|��01ŭ�T8�,��y}�aW΄8���qz�W�F8��|��jƄچQ�#̌T�i����j��v1�9D˱�����ɱFq�ÕNl�m\�� �MV�U��/��1�1&��^�p�!�ֻ��[3��w��Q�Q}�Km��QR�� Z� ���\#�Lb���q8��\#6��iQ��~�c�8xc����4b[�M=4P�|\�tS���NZ�]^�Y襧������҇��8F��2�H{<�Tnl�|�E\�.=�kJ��Q`�,/ �IJ�/v�_X'`�.�ұ�r&xk�U����]h���������s���L51��Rl�O#f�wQ� �a����U��fU�e�x�gWa�S� +�LM�MW�lSr��1R�J4ds�VR��5����е���}��] �b�-{6[[xo��8x�����R�F�\<Z#J�c�R���"ѾY(ؒ��7���ʹi�SN�eڝ$���~�=A�36<<0�k6�N]쀿� �o�z!��G�� �5p�n%���B��^��S��ŝ�`Ĝ�`������8�7�o��2\��C 䫔���y6���SË9�ܓ��>���?��1K����^j��c�K��[��Mm�A��Ș�1x�Q���lܛ�n���F@�*)^��c�/�8K#�XN鷫�Zp�� +��Z/��X�UVkGg;���˭�T�: +�l)��Ql�G]�ݞ�"o�p�f[P��xKN��Y��z����U���8����꒘a��'ε��-�C���_�d$`��8E%a]�/]�%,t�C曉V��K͌p������h<��d��fں�ɖ:R�������H��k~����҂��R�֭1 +�����XsC�=�0��z[a�{�����M���(��k��6[�i�~Q�f� �"���@n���V~�� ;s���9JN�Q��nm�[-f�Ԃ���gj^���6^�r#f��2g���m���`�����H��`'Nc&���AK�N��!A�j/��Joq�[���5P){3�������G26��n) �B�[�.�m������* �����fze��~����i�Y��3\O�����$�0��S��9l�LM��$��"��˩�[*V�g��۟��w,�� :t�����>n_͆٥����?�a�E��Hk�oB@X[����C�[���,��>S�����:��<����3q�&&fk�,t}���|[���ޒ�����ڒ�K���z����Q���#B�J3��Ta�;��Q�S� &vk�������R��"^%�~]�=�� ����T�sd0H�-��Ą @�m�����Ö� �Zv�-����fnDO�<15d>�m�{�7��\�W�Z��ʰY3�_�tB�g�I�7_ձ7GǭJ��ں��涜�� +d����?#�ߚ�@�����~�k������s�鏶4�ؽn����JQV��u��.�b�O�~GG;V��H��`Ч�wAw.��=yp�7л[����!g�l��c��e�~γi6 9Gہ~-o$���F?���1з��e���?��>I�ߏ��c�Tg���N�9I��r���X��{����6�gݬ�%]W �Ak}�$��Q�ԅ�X��}]`gLwr�BbP7~�]q� +\�=9�8"<�h���GX1��y�a'���g�~u$��CP��k�Ї7@���C3//�3��t[^E_���݄�S@.O�VeOVqCGh���(��~tٕ&��(��P�y�8����W@wΟ�=�}�������� �w���1S�6lj�VU�=Y��J�zoq��!eA�˙�;�|�3=�^Æ�l*�?CO�~r"�٣����b>�ą�m��QSѮI:�m���&p��2d��� �M�V)li&����'��7c̊����[����%��O�|���УK�@��<JI�~���@�� Y��x��r�$��ySBMߐ��Z�g��Zr�LGi��_xs� +�� �~��K:U�����O�b�N ">��%|���q���{7��??�� =S�wr�������I!u]��_�C|��(x�2�4�g{Ha�6�� !�^,�T;���s��䓔��?������v��Iн�gAy��~�}�1�o�g�)pO�3���������gid�YXiSX2JL�Vb�=:j�C͂nH��˃$��&,M��H�:-ʍ���lާ������h�W���K}��_K�����KY��x�J.� �坤�/�����=�vt��Y��+�Aw���y�7��3�A�O�rC��4���� �o��I�.#��<�1 2���ȡJ�zT�)^q�IzN��oG��b�(9(��� (��m��Kg@����<� :u�(�1˟��G�ejD���A����OV"϶1����O�$�-Faɟ��#�_���}�wt��i�۫WA������p�w�1t����O��\�xLFߚkG�[��/����6Nܘ�� �тA\k@���f�����H��W���נ�7�����@Aׯ���q��Y�oǎ��?�'/�7m-��a�!��_�PS�6�<�T=qT��G��!�'�F~= ���}E<� zq����+��'����8���S�����> 8Q[~i���u�<Z��*�D-�C_�u`>� a�H�������q��¾��߿��> +�v���y�Ӌ�A�ϟ]��/���G��s/�yu��J��ѧ���-����3�(���ؖ��q�z�F�22:�7tD����7��˗AO.^��ܾ +�����gρ�^� +���_��G��n�K~�eF]��b߭ ���V�SS-�V�Qˣ�4U=�q?�$@M?�K �$�Hd�Sг��@oo��ܽ���̉���1�\�:u�wP�� h��$��{����+}�}&*��UN�@�$c�-������Pe5������ ���$�<*&�X��G��Ǹ��7��_��: �� �_� �DZ��OOw���!s���J�f +�"^�'9|��w�t�ӳG��=��흋�A�n�E>�p��u����C���o]ZJ�S�A.�qK�GD�ꮚ���*�?p�qG� �G*b����zq���}|z��.�n�sr����Ƞ��I�.��R�X�O��I��N�gu5�����N���d��j���V�q��yy|y +y����#��@���| +`�+�@.�N��(��9��;�@��j,�}l�E�.�R���I�^A��������d�!*/:%BT��df�����u�= �^^��|�!�������@��� +�t ��k���@Ԭ� +>�M�(��i�/��E�� +R����?�È�a��Bc�%����)�ݽ[����g7n�s���o��\ +�]<}��j�(:��ј���W$\�kÄo�)�k#�ȕl�l�����y����E�������I����~��,������� ��U��{OAN���,(��#Y�ޞae�T��]3���<&6Υc���╵��:ܫ*x�e��o��^�%=r��"��? �� `ޯ�.�ut���@�/_= ����69��d-��b'�*m8���nR���n�$|m%�^�%�}�����5Л;�@��^��/ /��x��?���W�ݼzz��0���*p�nX��k������*����6�ɫ�J⦶�zQ&@���%�'����b���y���`PЭ۠�N��q�4p���7o��k����rV�91,��tG�}CV�a��2RM +�ߌVº���mhҍ�F��L��)����\r��[~��Q+�t�����J��|Ωj�}�F���D��9�cm���*ʋ.&�����o4`8O�����������S��̳ؤ������$"X[�H_��/vC^� b�m�J��JL[��ό4���P!<�\ ,捻F�.��`�I�K 9��2O�=�z�嫠[����� ��hE`���鳝�� )��&���B����@O����)堟I��mlf`�v�R����%��ۇ�@w�8�۽ ��o��� 9��z���]^zw� 1�F���TRl�l�K�F�t��=��f� X���PM�@]C����U����7o����_� ���(������k�i7��n�G�2�[C�+�k��8`�f��B�܊�Qa�e��i�ǏT����ۘ�KyQI'R�D���#�㷁ؽ:����[A����c���k�$n��PîbT��l�����Տ�͋[wgE�k\�O�T�2b�X��M8�].��1+�<*#�,$%�����~��(��{P짯G�D���8-��4`���4��mɪ�[�J�M�.]ed�/��Ը��j����X�-��J��#�㛓Y�3Τ���������dz�s/%�%�͌K8A)(=χ#v�qo���wr^֕�Nȗ�a������m-o�W��UU4y+�[5~���{�7G^�r�G���G�t���려/o�"sS����P¦���M9�ѱPN#[��njZ��xuq�7�C�24�ތ�a�; %��Z`���F��D5ա3m +zS�)qN�9NS��a�j�Mr� +6Ī���\آ���������̈�N��X�pq�W�4�ɝh�/�Օ��Qc}J��K_��V� +�d�r�x]�K�5j��ծ*�u���&����K��Rmwc�n�����!I�G�u��4Z`5|���3Q)J[j�;U U;���u5�3��z���3Y�Z��Nw#���c"�܀�H�^���l�W�5eJ�c䵵Q�B�� +����6C�X������E���eeŮ�!�JVɆ���� {m�������x ��*|Q�K� �S��Y��+#�[Z�%���uDt@��S��=����mf���ז. ���T��V�6W��ƚF�T}��Tc��R�~x��)j�u���$�E)�+�+�(a �TV�)fy��.qC|��q�Z����}���ob}]�4�=j�L]�Y\�k�����Eu�{����͏�b���)����F�wKUjj��L�E30Sƛ�!}��⣟�:�㭕q�^��D%�=%`�3#�3��t��(*bi�6�ɳ��d`M)�Rf���ie��"��*���)��(+�ei��j�ڄ��^qѼ��fU6��5|�� "Z#���6~�7��.7�wL4趚�����+J.tFV U�T��� +c'�k�-�諭� +�h[?ֈ��Pg��Q����>��^@��y��.�����_�5R��M�5�u:uՕVu%y�c�8Em���og�rzg�KޔRl2L��:ҡrUI�ޙd!�fq���]���y7�*�Z����vߌ�ƪe#7����!DȪ�,�fZ���T)�LV�w��@�2K|b���tS�K�R3Jw&뛶�k�n��`U�P�<�U^�tO��))�>H�Y�Ç/��c֥M�5`[�B���`WG%�}���W��2���b��������ǭe"�:d[���d�ҍN�g���щ� ��UWە��mu�pS�.[��V$�(�9ms��hWr�-��ԹNQ�C�3ᙯpN�P@�f8�d�S��^,t�PI?f�b�$oW��;�����gYWߺ:�ҽ�i�^Q�2g�Q�Â�%Y5jC����}��}h��[#s�S鯃�В�z6�=#�0�_��G��'��H��^l�1�����'xޒ�s�<QY1�������%9�5��V���ō�:\��te��\��7[�a�Њ����Y��e��v� uM�q�c���n�m�3Uۺ؇�nn)x�8��j�D-)��M-���1{�g����F}q�O�����C��ok��P�����r^5z0�g{�,��H�������7�ui���kK�9��S�Z�0�.�+���b�}�M�=�H��g��F !R~�9ee̍m,�Dz��1]�5�XbS��Z���p�ȣ8S�"��[r����p�p9��ځ `�)�k��F�k��L�3]J\��0���`髟���]}S�[���V���tM];��2���j�bg��^l)�S���Me��#�8�8.�=I)tk�9N6ѫ��{���= ��,-�=S�ğ�3|�m�\���'l�p�[JR��);p����LU����3�e�D�H������v�� ��s��l�3}��v���ӭmhv�9����G��ࠍA�� )9CQ���բ���T ��f���jo +�c+�i������>cu�֤�j��ְ�]%����V2v����ad��g���1[ +d[A+r��e=0�F֡!�z��6L���7tz���uI�ǕAx��)�z|�[ ��a���+�}���b��l�|o�^j7մ;�u�����M�Į$e:4�r���7�D�ﺨ�_�vw���p����=�С�'{u����T�+<�>`˂��]����c�v4��.�;s#4xKƄ��:v���6��B���vw�v�璸����sl��D�X��y��b�Yܰg��+��}@lqv��<00`n51cm� h�?��_���_�Lj�Fڳ����DMv=�Xޘ�t~]ᙩ�Z��8&`�S��C��f3�V V{�?m}��SJ�rz��1���*��BG��-&ũD���ؽ�V�*}T`Wa�K5�N1c[�MZ���f�1�ZR��,��`�Vf�Ww3����_�<�CIH�j�9.&~CR�v�5����8�`����m[˪�Z�Z<�u�[:ή$�m�W|v�C�o��d��V��N>���]����j��\���S� +��G~\�) �3/��K�YGi��a\Ė�6P�vc��{���_fr�K\�ጰz��D����5>�U�L����3I�IP1+}e�f��>SM�S�G��)Y����L��$�TP�f|X;.��z,��Q��h8�m9��U�]��v���������`)כ*��2kK�G;4�T��T�bm��P��yK�O_�Q3gzp��r>}o�n�_�}K��m����h�rwޓ�Ѽ�I|�����\,�7Y��׀���P1�j�u�Ta���iW����O���؛���g+�.p8�f|���Pt`�@���^�Lԏ������g;�b��V̵�� >�-<��G�U��n������g����CSu����:P���Xh���X8/�}#�po�R��g�3�-\�9��*�F�T贽� ���IJ��X�k�D��]3�x�L8X�� +:xu���7]��ԳP�����]�x�]��:t�πN�����k2V�����>ծ�'�5��- 6�1�M��(e{3� @���4|ʎ�O;�p�� +d߀�\�L�5H|yR+���o���L����D���놊�YPiV)��R?��L/&tu�.��o)�y>��ѓ�<���S��7_��[6,��3����_�DŽ�5�|O��1|�A���L��M�YD�?���~���v�R��Z�7�br[��6Tؖ�Z����K��.�i��,h��e^�Mɀՠï��#n�� +���3^�e{0��JsF�lm֍ն��QLԀ0�!?����jށ���S��p��"S��O������iP?�4įEn��L���$�����Rvu�l� +��1����m�2r���D�����Fl�a�:���l�����rg�m��ũ���r�RF馔��<��X��Gl�q +w&�e;Z&®���s���8��5{F.�I��qBҚa���,�xl@sМ:�hw����@)9ԣw5e![2� ���<dKI�۱_*!�;U]��3an�����] +l�l?*�~}�Up`�n�5Wչ �|�����Cw���iQ�*B�.��E�{���;���m@;9�=Ud�0�8<�m`>���6��K�����C���b�G�A�临�~�'��^d���W:*��g�f�� �0��0.@�\��4���,0�;���ub����gQ���?+�Y��1�+#�og{+�7F ��ذ�I6�I\��wu�[���}�6��(!����1��7�F����%�����^��l���^�`���[�fj{�&��s�����6ME�2P*���,�IW匸�+���*ڭ�EXG�_,Lr��NH�N��2�ߟ�?������5��?�(�瘤�Àz�l�.��,���'�uC���`�??���M����]S�D��r`���X������N7���*��$��1*�����hȶ��74���oFE��|Jf�WFJߑ���ڋ�:�XtI�����om��3ܤ�.�o�������������.�������"������[K�Ŀ���fx\ oK�@�,��2���?�oB�|��!�ä����'�5���U�7M���Q��@�[����m����Ջ���K��쎖�j���qX�bO���,dw�Ir�(p���;:J�K�M�N"c��� 4be���rw�{��M�14�li�n�&L�w��b����Ҷ�ؘ�QL�Tc���aL�����U�ѣ��$����W[���M�tԲ=ͯ�9f�'��uO��Q�������1��Ě���)蘍 r�е{٭�m+�Yn5��9A�rHq �_��(��3��S"����mwZTeW�m2B�j콎�3�N�1UY�0ɭ��;�>�e�zO�Dn)ЩV9&c[M�E5�믙;/j�9�e�̔�4�./��1Z��&�~�K_2l�{���=��u*)9^�ܜjR�U���臆{�\@��pf���s�N�?#j����56�&'�x�[� )>i]BLߔR���͍��U9����ͅ/mC�X�)g��ɡ"�X�.���f<حC'�UE_l����3�����m-%o������g���h��q��eQ��B���`1+��/-myO<SlήQ(:�p��ũ����T<���7G`��;J^X'��s��c'ӡhm�hk+}>yOC-pih�[RB�KJ��:@�0��bꞜQ��V���[��^�L%����G��Te�\%�M���^h�oJ(`�����|@��=%�ܔ��U��Vz)����X�V�q�<��(�(=p��䭮�,�������l�!���7&9i�5��&Q6�a�7�RL�u�����{���QNʇ�; +.ަ�A�$�X��e�;%>`{�<ti�]+Ny���� ������d.u�\��Yn�}�ӊ��|/��9�z�@'`8��t�� �3+�k}�W��@bF�_���k��_�F.����w�>w�o��<_�M �7*�Zr[����ޥ$�7���3���*�p�KOG;J��Q�>�����0���F�G�_��ʾh�)͵Y��rz��,^ceͮE(�b�pm�e� |�*�{f(��,�p`�~��ҥ�×�J�ن*��g��8U��R�݇���=]���ڃ&���wk�%C�9��ZL��ѭ��w�QD�s�Q������5.mc� +��F~頦�X��=��v���]ƿx�v`��O�v��a�V��n�H䚪�_�1 +������e#�����[h�'�K����ؔ=��`v��T��_s�_�P�k��tOb3�����~�)E��,�Sˬ�5q����L�[�Jڞ@'����]3��4���������bU�����A'mJ1Qk����~D�SM)��~0���ܺ�q�d]�[�Ey��|����jI�N9*z�+�^wy����Bs�+[,d��v�ȇ��@k�{���S������At��CKM�K��;Tl���D�J?���P��==��m��ܛb`~�����#��ֲ3 yw���X��y� ��������k��jW�sc�Ue� 3�L+��oK�"�D���}���Us+��n�rj�bgY�\]A������4[��y<)�>�aǟYh�}����|���7%�Hc#��F?�CBH�!&l��V{Q�ֺ��m��u����;=?�R]�nc�S�n���1�]c�ۣe�FJB~L���ܔ������ܰC��-+�|`* +���#f���XZ":sl��룸ĥ`�z�m�n�s��Y8J�>]]���N�t�9AʯGD�o�E<����ab�Q�k�g^2�S�˨�N�c3ք���!a��⣷�HN� �zȘ_f*���@������s�_= �g$�ɥ>-1��,�P������w�T���Y���m�#�8���1��\�A|���~��V�ͮd��x�2p�cWǂL �N-�3I�X�U�)�h]�+���58���� z�[NH^��\l� t��a;rd��P�k�8��tsҝ�4��yq�W��rȡ��t�U��> �n�7:���a�w��Rmr���s�SL�� �$�[�I�O b�!�v�8����)ό�vw��qw���c���@��Q1�nH�R ��T�L�������Q(؛5�5<�cgA}7��=��2̉�JL{���e�'���Z��l�}��L�Yj�n��}Ke햜�b��ρ�2x��8&ٟ?gy��AR�T]��-))�`�K_�bW{��;J�fks�u��ZĄr3oҒ��*8��AL�\s�������S��ƪ̀Ŷ�g��-_�E�w!�p-�ߞ ��Ơa9���NN�#oz��Rϔ��%�e��tȡ�K�h � +�F �皒n?���(��xc�-y�=�*�i���L�b;��0.�/f�[�0��o2R�5k!Zф o�G�^l���k�v��l�-2Vg����nʹ?Lɾ3ӊN�7R�3MIז{2��T�� Ii�u�,ԧf�wO���{,�?���_ս�&v}��y���:����c�<*r��|K��y�`�Z'�i�$��s +Z�u?��\Cn�z"iu������QRһ�}T̞QT�ڗ��,�>7]�p�: +�1âz���V�F�����!���e[�%��үNRbN�)�4f�=T�r-����Ow� �Cz��1�a+��/¸ͥ/�Tp�^�MQQs���0-gS���{FT���g�m�V8�!߶�J�{��@�T27'X�v5ݫa��t��6 +��O���>���9>���))K���e��h�3�ہ�I8����������Ws��̶d>�5�;ή��פ��$�3�I����N +�-�7�Ns+QY.=r�T5����m�Ʌ�o.���M�I�1��fYD��������re���7 +y�~x> �c��F��%Ou���[#T�u5U�|}�:�����}c �N)<|���l*���Ar���o���:�Pa���_4��&}���u�ձ0�D����眏r����u�p @.ܞ�Ŝ� ���.%��p2��9�]#̢�B�|Sѓ��� ,t�6�F�xy����ce�M���n�{<�Y<�V��\�n�[{���M)>~s����tu��s���^6�V�`�-��Bs�m@/=u��36� �����]�p��Y�9��������ՕD�����g2�����<�?'��>��=����R!��Q�n������r_�����'�*��S��F�ǜ�ʭ4��R��� d��������EM�fyGG��Lr�r��6}���^d�ɿ�ԁa�|����f���GH�!�=�IX�B%i+��?���~�*���dRu�T��d��,��4�o䐜&T�T�i��د�\R��m@%�*��蘮� ��(p��x�����6���Y�51k�����`�{����C��g���M�f�8�J�g�~l_�$��^��$ߴ��*|u`f3�:>�&�e�U�K�(�F�!H��"���qv�5�Ł��{�/�1�b12U >���=:l�J���)l�kj��-��o@?m���Ɇ���b�{�a̷�<��"��/YkKXjM�kI���AS�S���Q�'��طT3�s���+������KG-�x���`F�����).���#�����S���[��a�ۆ��]�Ϯ1|Ҏ��h�`���ChX59oe���1����q0�IB�LjLr�B�۞ ���S-�)���@���뾡e��Ц���%��SU���K��������uog���n,|6���r� ��,cF��F�Y�* �iW��7F�I[Jܡ�!�*R�WUn+xg�O��9���5]���":���~ܒ`��2|�S�T6�:����:aÄX�;���6%Ĕ�!j��_�d�_T1үhy�=���#���K=�����Za�U9;��1��r#��O@�22Q{S,�t_�]Cڋ_�<��~�����ˍ����@��CB~�q�^#�� f�L� fa��82|���{� J�0�\�t�UU�p���o���@�JJ�m���N�x����^Z� %-����G6Օ^n+y�����l�y�_�l�g���R����|��K��Ļ��C�K�k�:d������[J�N��<>6#N~�����I011�7I+>0p�>ӥ��l���5Qr`�~��ty4��՞�@��<��HG��S� ���>;Ʃ�wj*Fh���=6��^�(x�+�䖖Gn�B�W:ީ�_���+��ׅ�� +��z���1H��C{Sȿ��S�R�� ���L�s�m�;ע�����x��.��Q +��&��˂/�h� �����Z��,w8hQ踴�Ib�>�M.��X��dCEΛl�ۤ�}��c�F/�d����~`��ZhH�mF�y���U��lW|p���y�vii����]3���k�&:�p���1����z�<��'/�W|ڝ�~��t�E�@�x��m &r��y���҆�$fݝ킄�KHIc��3#8�����P�7��ۣd�WM)���YF}���5ŧ;���-iγ����S���ƙ���(�{f�������7}���j��}=.�.)y�>P�C|���#�y���{kc��u��/{ҏ�����ӱ�����IO��� �7�� ���T���j7>�-g���t�Xy�lK�� ��ô�g�zh���T���Wx�������e�w'�9?����y��*l +�Y`^=�[�w��oWza߷�qiN%1cM����?�b��n����L� +]c�mm�ySK��^B�T� �b�I0u!��O�\n/���6o߄o�ʾZ��_������=�� +F1� ����]��aCE,t��6�g�]���t����5[?$z�����ӕM)�xWG����~�m?�n˻;יu˩(y�k���5 +�2zΎ�=����(��(e������+3 ������m��܊|���i��З����AtAޜ��Bױ�Ϲ��q���k�j�e�������_���_6���whB�YGs^[���[����lܙn�҈�65�Ǵ���Ȧ�4�p{��b��"r�/3hk���ߋ��A\k�s�>Ke�����s܀7� AC��WD�/���kRR�k�Z��0���|]bi����zg�����{�1T��������-{[�An�ac7ǰ1T�U�uh1 ;&&�k��>K}��l]��YA�9��������Zr��i�Ћ��J��(��O>�6B��5�>2ӯ-���#�f;+^ʹ������V{EekC��)~Ѓ����A>#�8pu����`{4"�Kˆo���jL<�0��T`S�b�Rl���ꎞ�wk9(��o=���u8M��d��鶢�K����bm��i�E�5���+1/TԼ�Rr��8���!�Y!���~g�fϵ��6פ�|�o�y6]�r�:���`��k�����%��}���gb�g8��i��e��4ە�ġ�Fok()�ܧi�7�M��Z(^�ϹojH��{{a��u~�Պ�8��R�j�K��s�;�L�)��<�S�z�2�ο����U p�_9�_�ڮ�����*�D���;�g�$S3�UF���{w�Yᓳ�)b�%ȅ 7�I17�j6v����]�O`<D��r��!�^c%o}���� +8[�,�OO-v(���=����/k�o����}�()3����2ey�/ae>U�3�X�a����}5�ī`�W��c�;��,���>0�I{&>o��җ�pu ��LSƣ�ᒐP �w-lv?7�M1�ُ�����ʚ=��>�<W�uG'� X�/���2�q�&AB]S��˵R��V�܋���7���8�����p���z�Fj٦m�E��ȩ��:K ��Mi��ܰ3 iwV�`��2b��%__�}�Q�~L�~̒ {s��3 E{�J�Y\�s�~����,_�7MG9 �$���k7�r}��ݤ�[�Ԝ�r���~�� �h]cJr�����1r�����Lμ�M���:��Q��^-��5��L��-5���_7'�p��Z0�G�_"�['�Y;Z /LȤ��ɐ�x�C�H���;%��Yj;�-�j��Mtkq����xi�CF�qɹ�k#���n7&�A;4�zgy�Vh�����g�1W��Y�]Z�x8�sq����W�qћ��n�]~�B�zT�M�@��W��M��#��c@�� �<��I���1^3��!�%l���,m�,���1�6�=�K� �.v�B�����OgWz�QkC�腮�`��ҏ���Z)��%G��H�j�~W��=8��k����_/�@*��kKJV)<֮$���C�8}�5r�{>ϡ§϶e=Pq/�)����X�Ҟ95T�0;�Y*����\?�������p1kc���]�C�,��S���k���,�� "�_�t�u��朹��]=&�η�A�����?G���f��}�=����d&�d2)�ޫij[�w���A�w��"]�4i�J�k���=�y���������p8g������ۃ�k�S}��[fQ�%f��/87� +N�$�o�ճ�����4@�v˦��bq���R����KK�W%I��m��x�Gsg���]fb�L�{��_�?�ޅm_�l}�1��b+m�,�1�ػ~ׁ���1�1�`$UWAsCR�������-]�]�D����˜�kU7Bm�7ň4���8������6�>�!+�X��a*v���]��!o�0?�ٴ��w9��;����f�(��<��s��`Vߞj��AK�L�3��D��J[��Q�6���1٧&�Ͽ���5�f!G��G5�}��)a*wc�QaKVg1y���;�ER˞�/�7���ZS�����ula�,\ھ���53��v�����&����Ɵ�oJ0����*^�ժW�?y�)D������|�=�pCA��]�)�>�)�}�{�>��wг6ݑ�!��nH[�l���}�����du�Ň.�`�BN�&�w�9<��#�hz�!���JDO��7I�,</Ag�z��S��u��} �60 O^����_����UHAn�gU^� +�o���51q1@WǍ��[Y��Z���9��C�;��W�Tآ�%b�{7��wtTG�<�8���2 Ж�ƈU�:ўk�{�:Jݘ�d�M9*�U��$)��1�#:bm@A�kI �&.�c@�JrmDG�X�_y��غ%a�uTC��!�6�m�ֆ[��M�g����N�|y�+nx��lJqg���g�sO6�0�U�\�~S� +����ye�ܥ��;a��)�x�$���m�QM�=)�ޗR��o6����a�|Rt�C�Έ�Y���~���c�[%����v��,�X����T�3�w�8�cw��{O����/ +/�r\� ��l,@�@^x�/��V]I�@�4�p�#�nO�}��&V�oJZ��Aȓ�ٕ7���^�����W�T��U�v���m#�����9;%�+���e꽃I�(0E���N1jb�6U̖��^��(�������"�~۞�㰗��ʋQ�I�@�%�t�K�Xۓ�L[��ʰQ9�b[Gk�i�YQ4=�J�u�����?�mL��$�B�����ĵ���el��Ķ����J�d���[jRu��� Ҟ�S�r��!�K 2��!H�I���<���>�����1�/s����'�����H�;S�#J6be��7�-<��lz����c +�Њk:���v-p�.��13[����������#g�¾�kp�.����%n�gj�el���`�g�̂?c�j��sr��������Wz9��>����=�4_X�,r�6�r�nm&�[IM�Π�[�#6D��^�C"j{�4,���vo�� `����x=��mt �aK�������%rKD��[��4�T]tO���jb㑓��נj�S����#�/3�q^"5��9t�}[�N�_C��6؇A��3���{�I�n)��;C)��p���gĒ��t��8���u���‼�w��}��R@�)��9p����%ὃ'��bJ��������h��L�<�je{v�5E/��1���l�W{T�FR��Z�mT䑓۽o剎,<�����ձ�����m�#�D��R��yiߒa�m/�cJ|id�#��W|��Yy�5LH�m��~ +��Ӓ������iD��E|�)go���&����Afo�Đ�ھ��$:E��6AWHG��1�;՞����� +�.l+�M{֮��9���o5\��BT��S��4�2�k|����u�q�(�F������<(�=Zv�$H�ECz~bu����<�P+,�}YP~�;��й��������m�����{q��o N��������S������i ��*����A%<��W�g@J� )S�)�)���W�N�_��6^�i���e��S���9�:�Ό̳���G���ߖ�5�\�s]w�� �r�����5%�0��!-Lʇ6�ȁ��Q�m#�)�G�� ��#�hvo���p����l�l����z[��_�����.� ��iF��������P���ط�̬�3�ɦ�3 ��JbV>�!4Mk=0vun��C ��p5;�蚣U*)f�7{�w���K��)�>x�f�}�����}����9HrL�)����A��t��$lӸ䚈W!��5�Lݔb�v�w/��S��m#��c��w,4�� +�3��6#�c����̃s��,�OJ���Xd��\�$����@���3P���S��r_M��lG���אRrh##���^�R�$Ү��K�Ql�Cпg��dT�>f�D�������c�.��w���\�#T8�v��}נ��Ն�D;fZ�ЋkJj�R�t�<�|���e�V�h��<&38M�7��T_б2�rJϏ2~O�q�~���C�+{O�5�p�uI��L�͘���W��ƽ9Wc�����nd&��ݹc�2���}��Bfx��@�F�Dո����:y��U_] �]���:�$�;|ﭝ-Y[�l�H�q�ECg�� ����W�����ޱ��q��.p�O�^jYL*��j�5�fX���=kS��($kH�7`[�-tlT�-?4�� u�x����e簎�$�g��ƚ��o�Ç��u�\v�7�M��ػ�������_�����n��O�hE��̪���W�=�5�W�Ӽ@�Q�%�6,��U�� Y�S@��w��Ν% +b׀k��+_���I�Ŗ�m��.~�J�5�w����ta[mТ������%bMp���H�O�_.�����)�K ���iR�%%`ϳ����)j����9 q`��8�aZ��Ďೃt�����=���Pֲ !%ײ�1�vK +IM�r� +D��^ra�}su���7�.v���=bx�o��J�$�D=���[�5?�gW>��]�˂���F N�Et��8�o{.?n��ǐ醁���Qjȵt7��������њ+�Jp枾�r�����g���Y�q��$�8��Y��\PQ�<���f�H�8�r�� h��Zx�>}5���.����-�%8���A��1K��X�5E 8�Rr���>r��^�&zWE̤�]K� [ZFZ�!�~���S"���D������@�����?�����(5���\�lWp'0���~�0��7^[�h����:2��w�\�q��-�������ӄ-fU8z&�]lޡ�AJp�o�\*�5?`V��Z�k+�Ӓ�fQ�I|�k��*j��"7���7_N���,������^I��X���� 0r����{����Wse��Z�� ��'���,Xж�Ժ%#�|X&#>X��-uGvp�5i_���Q#��e��������]��^�hz�o�[_@�u���&��_]C�z�o�x���䬓�Y�ȯ{��4,돕���blᅲ�>YjL�S'4,=0}�i��9S{;��yX�S��ܒ�|7ga�G6<��9�\���.4���DTmo>:��3�wl�N�˾��7`*��W����ZV��5 ��k]:A)���,�X@��n���/�)kOˀ��;O^_@�;��cs���ڱ�{\s�AE���W�ԏ��g +���d��x���t��陒���e^�e��xO����Tܚ��ԋ��TU!�\c�m}u�N6�(�/�ZBݖ����9��Eb}�ȦǗ9��#r��)Ѐ�X��{��U)���̕��'RT���'{Z�Ư���5��^dY�S�� ��<�D�D�Ԟ��M����j�Z\�s�������m����2�0`Q�9fg1�2(���M\�.���ڶ|�L�����!�r������:Ȩc7�� +7�-�1מ��k� )��Z^d�o�ಜ������_��~����yKJ�_���/�s�N��n��9q%��v�ܠ����)��a�L�+�Ff)�}׀.�`�v��~�B�ص��1���R2UԐ}v��x��4{��\�>v��n�)�?;�g�S�3�\F��{�i�uTp��DTK��kn�R���~r����Ka����җ�NȈ���.R��] ~��������_ק����m�o~\����!��h�C�zO�)�+Q�i諕A�mmW��~D��iL�/�yF��0/��]Cȗ�Q\���OQS� AŃO#3Y�]�7-²?�rX���aG�)>2�k����W_7wWߌ)�0�C!%��3��p7q�ˊ,9r���P���&�P?0��ҷ���ľO�E���_p~G����jɼ�9���w�f�3Ov��o����6�0���K�����ᕂ2���Crл�܀�h��g�����6�K�f[NPK�Bsn�%��Y1�>Isr`���V�ixa]�����=}6�ʽ�+����Q|�����p-�L5�!ġ�[Ra��z6vCI��ֳ0�&�� + �//���F���>Y}�(*:o�o{>I,�"���S�����_��'��h|���@�g�K��kjFɯ�ER%��2� +x�Q����q�p��d�� +�0P`KC�w\3mo��z4n�P���F�\Z�AO�<X! ���H�}�#Y��tLӑ�oy�l��oBV�/���qqQ%�%〃sԲ�Qt��U��<2�+5���d���1H�����2��LL�+sO4<sW^s�^w�]�o{_���h��n*}�A�Ĭ4ľ����آ�K|`��bz��p�e�j�صQ���^LJh�Ue��Y@g}o��i�W\ѲJ���տ�G1Y�%.&j��� +Dz`���!� $���Nb +������'-=��G��P�:y�)�����Շfl�Y�%�UZ�Z�nN ˏ,������$���jc��7��7*�q_G�/��?��-��gQ)_ �=�l����� �~_�iybnK�L�����4(�W05z~��i��o,�ZߝZ����D��/w�}�Եid�G�^�����4�}x��dծ�il�C*y�=.��W����e�HK�*0��4�覚�h�̟wdМ���d�l��Fd�����W���jB���Тae��.ny��̢�Z�)���F���m#��S0�g�A����uI��lGGj<��;6�`����?4�ܓC�ק$����'�)��*A�������_L�˟~�rKyQCބ���=�[ +�� *;�"V���]�9۞������CSͼ�s���]57����]�z�wv����5�s!�[�����RO��S�.��n(���S�����͵o7�x�w�fc�����Q%�ip�g�-e���`v��;2bj:�h�k��%�y�ޭ�����&"���m��B^{jn�Nt���~I���Dsꦸ�o��ў��X������"���o ��������lG��Ҏ�_�ѯ��� +���-�l� ���g_����� s"��4�貵��ZDZt'���whC���X�]��tܑ�MK�W?0sH�zrӎ�P]$Wغ[nmw����C���o�U��V{���Svqk�=9��T������--�5n���̈́�������U���ie��jd��od`����t4�G�3��q�]T���/-��xd +�����Y���X�g`�|Z`�T�4�rw��%~� kO��U1����� ���b��[��X�� �k^�]�8�4K�5�;�גw5"#��Í�L���6Q�c�x��ȫ#3z�83�c@�mYߪ�Տ�;���n2�(=�Cs���<�k�=M�I�/�G�ݳ�z�rT��p�5wO�*�饷�Bg^�t���m5,o�[�^��k^��&�[�K/)i�����l�|�w��ITE�/Q���'g���g�-H���`a����Ґ�l���3����>E+}4�)�ג�%�4,���O��t��Rl�zN��ކ�15���$�����{����ɠ���,�l��L���ٓ`��&a�����9O+��yt�S��`��'�ot�M��B��_,��-�n�O����U����#m���W'ZS/:���bT�Q�.�}T�svLdD@�b�����5vw��7�4�D=��GO����7x�f����SS���YBU�u�֕��̰�b��Q|v�)鋞���c�����u�����7_��~:C*��Z��Ih�i+tK����H���+��H��Lʏ캇���f��9��jM�pG�-��$,�闔��[�9��cg�,�#��%bUXM��/q��FyKI�IQ��7�W�[�m�߱J�f�=10[���%�����Zv�y9��rW�市�^���3��D}L�������nx����X�݈����������W_�g�1u�ZH^L-�R ��䶨[�4-����%!�?G*q ��հr~��O�����"� ��9�����ζ{A)�j���������_4==�5��D�ڜd�z&�5\�)� >74�iN!�Fe�[� �D@C���Z�:I�(�=+v`'BM >X���/�����tº��Ȓ����_�1՞���zǑZv��Ɏ�S~ō��PӉ)��9�.HYPA���~V1R�k���]#�M��2�\"�Е��"�<����X���M�so~���C�~wJ�ι���/��<?��O��sD�F|�����:�v��vW����[|y߀�(i-�IW�d5��:40�Zc������֪��BT�������R���+^ɕVb�0h[O� JQ9��k�h�����;>)>�P��[x��/��^ǁx�>JwU?5vU\����Q���2r�鰬%}K ���Z���������M9i O|�|��j�kM8PHK}�ɇn +����|���貏+Dر ���!-�isW�o��]ֲ��[��L��4�ғ*j���̯���)�W\�����>���w韣�_��_}����'S�W?�&Z��ko�B�������������2�[��"�acv,,rH��ơ)Rfم�tq\��ǔ���)���꜉Y�����t�O�~�h�/r\�VN�E;��o�������Tǻ�H�s��꒷����<�>.��%�dO6�w���-���� ]���x�l{���[��a�����Q���ړ����-*{WGk�51�~9�48O�L�,�U�f/�����z���=���MTs�g�-���-'V:�Y;�MC_����.�5%��Z+l�1��?�c�v�\�����o��QP�x睂<�6��v-��T���B����l�$�r�w�t��,!�$*����=3�u�A#8�Ф�� ��{xaUEͮ�B,z�5���������M7Ðw!���bC|sȼ�e&�x�+ܳ�Ɂl��_ycIT{�:��p[��|pwM�X丞�V��2r���\�T��������b��3杆&�"��m~��&�GO��m5$�纵9JI�ۧ_�B3� ȏ.:%��g�Q��6"��J�Gud@IiT��o��A������:�zd��,0z�i}ģ4��9<����?�'AU[D�"=儖��ET�u���s���QqhgR��\��_x6 GվwqEQ�*�lM ��A5�2n�5�����9l1��^�������t�_H���D��Mi�#�D�u�x�c��q��x�;���3��w��/��u���0�����⤚^���U{����#_h�u����n)8����l�n��h��=�Ȑ���Rj���==�"�QY���u9�&���l<nDǂ�����o�옉�-���#m�g1?tV��|����T~r��x*���O:����o} ��;fn�i{w�5����2�+n��/':ޞT1+�#�n��{~���{�jnYy猜�?�����p��d��o9%��=�I�㳟m�a��Y���$� �+���'j�F�.j�u1%�? ���QE(�e�sR�+>m����/�H''�/�&�>��,���`�ޠ���v�kQ����w'݃�7�s���|cv@Z���D�훸����U�zxAP��jUI +'�����l������ �Z\��%y}����|{rl [��Ā�Ƒ�3��c�T}'<y����,���Wޏ,�<� k���:N\ᾅ��͓K�KԶ�U�o%#?z��C;�YBƌ��(�^�"��/�U%�I��4$iGKl>2�yq-\�7��{I��v�8���0��<���:�g����W�UԦ(`�1#7�[z +>��6�ȂU1�qLGh�63��;�a�vf�ʡn陨=-�EǮ�4���QE+=�i�W �-�s�a'miU�2tVL�.���ޙ��x���E�����&=n%B���~��O�rǡ�����m�jz��<�0('V�_�\�Y��=;���%�~t +�>���#��m�2|RR~ ��PFM�I��쯼�d��!����KjF�/˂��ޱֻk���"i���g�W��mt��֧����6Q�����'�FzǶ�����$���2�Wx�og�K����_�����Z��]�hx{�K ))աEJ�O��X�m���W��!�A��L-��zVtQA+�0����I���E��?���Zé�fD�;Fa��y�5�r�7?_�����c����N�M���;�y��<�'}M)|q"��j^����O5�s V\=�|����Ʈ��F�o������ ��I�pY���]�,=K��E��s��^=�I�?>�6�~����>u����[wc}����|BPs��{_E���V��3���VQ��}��'#"2b�� +[�9^}]AI�i���~HF�c*�&ڊ=⦔����m`S-oT����MO>��y�t������(��䤗?��\;\���B�yG��O�ֳ��LYX��|h�6}X!B�m���+tBp�0��3�� ���Hq)?+���|#�$�$$iC�I��S���<�-$��g��)b��:в���W�YlV|�KX�` +��gd��Gvv���MTp��E�^&��ے���=+��:O|� `hXpS�1�x�ܙy!0��<$Ge{e�b�IJB +B��4�վ�����~S�C�����`9*w�Dl�k�;p������.��-Ď����6�����Y�h� +_�ge2�l�G'W�� +�r�Lh���C���0�O�aD���pag [���5v��M� +�O��-w6���z%-�� �l}�7�N�}�W�"��hUk�}ۣ���m������n�ci~�g�0��O��tPTDŽm��}{���J�T�� ��wdD����\~P��Pq*� �ҿ�m��BKo��:J+^�A��B��b�=V�۞� ��R\NPN�^������h{��KM]-7����@�� +����rrU`'�(!�6�M�u��Y{�/w4�9�m��{������yJ�5� !Y�A��(|��X{͟�\���4�����W��d<�:�їش�����CԟC���T'��"���(���<&��|ʗbD�7��̳zn���<��8Ҟ +ϼ��0��տ�c+��O�h{����UC���7�,sNK���0�7.�Z����ꭿk�^kzb���g2tʷ���J����R��0�ϻ�� +�झEHjl���<����_j(Y�G����~ +��td"���i����Ȓ��N�~{~���{���!�������uII.��1֑���Tf�i�@��RK�m���o)���<}�P�_���nKNk�Ȱ��P�,*�7B��L"�n9�A���'1]b���k��� ��6�ha ��]ޔ"��GൺΆ�ͩ��:Vڙ��[q��F\���5�Co6�MO�PH��X�<����ۜ��E���]�����{�;V�3�lš�Nzo���r2�{ق�n6�x�E;r3�V����q�b:\�_.6�?Nס�P�6z�l��:���?٘j{vl#�Z'(3�ڝ%=4�j����9��8��s���۔ R���S�g�*��"]�'&~�)kW�i?�tp�#3���m8�m+Oh�F����)Q����=�H|���-TTDב�0Ǧ^��V^�Q�W��y+Cύ��?|C�6��L�h�s#�����2��f|V��hOv�]X�/>�>�x?�%TG�� �8�i��V��ڀ��w<_�[�F�&�V�Y�=����H� +�9���O˩MrF�y�S�%�j��ݓ�����ȃ^���.��;���Ч�~t����*�P3ڮ� kN�� �&ɕ�O�����)�n� t�OF��+��UE7Y=�I�f��fT�O�\��4?tH꯹'5�A/�Jb��� S7"j�*��؆��5yM\����� 4�ˡ�ԯ��߯�7ݷOS�� +��t�OD���l��2�E����_切_Q��G�� �����=����O����lkP��=t���Ί�贆��CgݍO�����!P +8�� j���?Z(��&�POj +̷�G���]|�A����+��1������9�鮉���> ����}f��3Z���S~��<$���Y�.|���?�a�?��E%��e!읹���,>��W��E��:�{��g �|[���/������>^vu�������_j�o���qu���"���h�lL�`�0?�y��Vk�D���-Us��6(��_��68�ޕ�����S{z�� ���������ҫ[:L�`ǻ�����3Ь�I���<3�Ŕ��[quA%:'�f���&��uD�i����H��=衽�ⲜV���#�[w_�À�6�6�r 5���R�M𱕊x�SvLt��"�re�T���S6�}]+R!ȯ�l���_�-G��u1-<w[�.��r�n��m��K��S�ͯ��j���������ꮞC��h�$2u[Gj��q�T�'�m%����垚�)�(���XGA"*64�f#����D�y�oZv4HШ�DF��f����e���S�d�"kC�-�/���%Z��8�y��o�]Vt%�fl��<��7�&�:Ԗ���sfe���'@\{�[�w�T�$���Ie~-�Yd5���ڝe6�����5�A 2�m~%�%����Z�H�>MI��T�jv-�z?��M�5�Jj#��6�Բ�r�w�iE=��\Vpꯇ��<Kw���3zɟ�ݰ��1b�k�Qd�F���)R�y�d26䘼U)"ksWTКC6:����/��> +N�>{o#@\�uWW�j/z%mO�Ă��?�Y5���zY7�����_�*��.�5_����q��?[�VF��!5�!f���� �Brt�{7��8s����N��r�_�ˈ%�Iv��}8M��V�k<�U�{z��02���g��bꬹ���9�)�ȅ�>D��ݭo��rT�`wk����$�y�:�v���v�8�Ih.������7��4�7ؽ�����!������[|��[y�4�),yz��ۧ�fb�� �ء��.6�q�d�U���ݳ�P�e�=O�6��*zS"6I���?N�)��5��F`�Pa��T����*��ww�4X����<4%����X �n��Ġ��+`q)�xF���1;��]�ϑ��y�@.���m|�u���3j�i5��g�h�=�#^��oyFʮ�.��bzU�lvΒK�.uk���5!=�lS��qO�>�a�dyH�*�Ȑin&[ʯ�7��>���6mɩ�[JJ}�D�\L�����9Z���9i��$y��#Gp�轧#7U���BᆔZ��`�lÈ�^ 9?0/���� ��?���7�&j����C�����9N�u%����]f��Zxψ*���:�7g���/�aC3�kSJ����7�2���ٷb�����eB#���� ���2cK���HZ9$�g~�b���z&"Q�;���j�3=�� 9��`��d���� +�5Q �Wجm��Sp@�eQO��c'�O��<ꪊRPb�i1 �8���]�{�B�㰒�ڐ�k�bB溔T�ſ[�2V�i�!��ᒒK��ȧ>Yŷ8�����Q�<S���9lNbN�,l����j@��m��>-�~�ʢ�l�u�]�]�UE�4�ճ�ϭy)����1�Q�.��d�B�$�O�����k<QWϯ"5'j����˝���>�U*h1HP�KM7<S(���8/��o��ŕ�Q�4��7z���vq?|���J+�����E��:QwG���y���:�tXO v����EjM.@�\Tr ib�c���?[�'�٦�E�c��_���9|QHNorLK��)�9k!�)�#$���i1�:�^��4Y�:�7%������0ڗ�(ݘ�3�Ƭףּ�"���1R}�3�W�Xٵ��T���7u]�Y� ���� +.��A�ï�օ�����_� ��m�Y|�#�,&����EFKL�C�������ғA�z�O�E�~�&�Z�X �Pu<����]# �gfb�lC�/XE$�����e�A�j쬿aﯻ��]�d�c�����4[���,��tLDC�w�6=���]9X�{~ho�ڱ�[���5���$f�;�)�GcO�ā�N�`�1}[z\�,ݳ�b�����{`%�w����_�����`jB +\�s��R۶�¡M=���p�q����.���1 &Q�����4��y�S���D{�n��ep������p�a-�� Za�CS7"-���d�:��p}�V�] W�.���*kM�'t/p��"r�sqb�!�+�``�����ʈ� +ٱp�+�û�0�8��Iw�� +�YY��2����Fj�ʢ�L��^}�&A�|Ҧ�X�pCPM��T�74p�*��z���h]Ko�[E#�+����� ꉍ�q�k����J�\5���v�|����{�&]�'�M�1x� n�s�[�[�������n���6 Mq�BRl�W���&>'��w�����W���� a햲딝��}�GN ��_�l�T��Bꡁ��K����a-�6�/M;�~���]�`�ƞѐa`*��t�z�i�<��v���=�L��,����sԲ9a�uu����j]!@��I�q�[�0?JR���2rHa���f1i~@�G]����XRCK,xTG��0X!��<�ːuB��9�$�T���ҳ7�ջ|��&m.�;�&�/�`b��m�����7n��O�'6��B +pں�%�;��� h�M%k�PJ��U�V%�O���oOڐ�c�������xב��@|��Sk=��:�"�8{��EA�p��:ڧ�~�� +���ځ!�R�Z�� ��o��?�Y�m�.C��������p��ٶ$@���j�_�M]^�k}U h�(�C&+��?�q)! ����)!d�͑ʷ-��}{�|���?D,�"����A[�Nah���/��N�dSˆo6��q{����U�� ����G_S�0+�.�c�� ��)��)��^��"X��s�<&S�)�鈨�ώ9�-3�����������uwM�VE۫��'�2R�k*r�c�X��ɻI�\P�)@����<ޖ�I�))�[&:hba|K����ޱe��&�^�L���V��L쮓��a�K��6P�-�h=�v�,� +#b�qv��ν���kd]��XU�7����2���&��m/����CǠn��7�S����E;�/�*O�z�y�&>3n`bB +ZKb�~��-�$b���M0���ӵ��~�-�`�WF���_�';�ieV ��8�ʲL �8������lJ�K�P��%oy?qMx}����[%�5�!r����O��T��7�A ��7������CJ)�Ttb���Uu�+紙G�o<Ӵ�Յ�}aN��u=�y�}�-��#0?*�)��yd���������5ё�@|�Y���:f�o�T�.�VF�h�;FrsLOl�� �,�pU�o*ET����*j�UR��K,T���F��_Cou��m���tBa�>���M�[)��%\EP�@D��.�����eg.��L3=�uMwX��T����KCg���[3���9B���p�>��p��9_�ڲp(�%.ʯb4����5Y��P�搕߹4K��^�*�8���4��ɛ�uೝrA�W>(X�� *�X����_�s|���{j��;�Ŏ�k:be����t-�k����]'���״���h�oiL4ϻG��#�u�]�Y����K�}�*.���(�"��[������m'��o����l��=��0����1'��w�-�J�&6qE�j֏�2u����)ܻ����c�\2*f��51W�b�"�M|�W�/_�2K�`����c1d�U�̨�;���=u(\s���Erk��3w���,�OA���b3Wu�減J<Xg��,tB��gm�;�;6A�� +�m�A� �ݖ�a�~L�U����)2��}`�:%��G8��N�C?�=>�➞gf����R�T'��<���oۻ�A#�d�Ҋ��ͤ�0<��w`.����\_綾�+j`��yMIo��{4�7�N����W1�����>���[�ᩐnt�&�i�c����Z��H�un�sa`�e�k�P=��2��g���q���9��֊Y9�V�b�z_5��f,C.���� ��f��6�_n�0�+$�����:M��z�o��0�U�*gԸ�� +bMD�g��J�;]� +�u�^*@�]�T�����K֞C4���#|���(;pq�k�i��2O2*��;b��n��ɣ�cE����� ����B��$����Z�c!f;����iBY�(`����5%�u�����f݆���PӚ����+�3=����H\��ԋ�����&�X�P/0e�JFq�uw��ql�cM�K���u#��0솎��Б@K��� �j:>vy~aliV%6�������a�8M��xI'��¶ �Ƃ��j��"�Nuw5z�����41��%rö�ߟ�}��ꞏ:����Cذ��9t��� fQ�_�����AƊrD�C�c��_+��Z�|�c�Xm�Fg�������}ly�ӧ���$�NA��*o��Gc�;����?y�*�q��;��f��q*�;U=�,�bѡ袚fh��%!k��do,a�����Rwo�:��,wu�u<��R?۰�(��,s$�6x?�P$��?�F��'L�M�eEC��T<b�2��|���}�O���� �+{E�����B2l3��Ǧm�Q���H��DKV8�6�:�PL��U�*�L��{�L?2�vɪ��wl��Eu �\m6�,��{������'3���-��{"�A�.V������zl؈�d�\��Q']�_��&d�sɸ�u%���%�__�#��y���ϧ����;*h4i���[Ꞔ�ҝedÊ��/2�g{F��o�)�I�̱g�i��o0�(�z���L�|l�e���BB��#���S��@��z�Ӝ�j�kk�O���JY�6=+; +wm]b�aι4=˚�/�R��Cy� E�M&��B�T_�8�3������@|���/ꅒ_` +�<3�4�b?�5�,��R�m#�d�$����/͎ �fF�]9�}�������>YE������ā�xā�n�B'~VW��X������~�<y��rS��?�� �%<���� pۆ����G��eB�~ALY_���U�\�\�:[�'�_bqڛ���sU���y���i��y%哫_}QQ����N�2D秪%����mU#���t�"�ƭ������mtt�r�g*o�O^#dϽa��/X����F{%�vM�FQ6�\U~����q3i��U=+'�g������%;+���5��������ˣ�AU�28�1�-�����i��_R9��}5;4�<;.ň���SB�[�xg�b���"�$�꽕nɺ�K��_�LX}�5�{�M2>li�8�H�B[�.��|�� +��0�s��R�����O~�T���'�_��"�e�8����ڥ�h�rbbI����5t��pz���*�+!q�2�x� T��x��eB��Et����Ƒ?�*z�.���|૫��?�x������� P��~��پ� ����6�\'�0/�M�,�C�Z$k5 N��mhW��/����b������K�������/|r�9��^?9�����]��q�Y{�^����0Ʊ��TZ@�S����nLL�uf�ޯ���|�O���}_�ps��_~�p��E���[s���}%m�_R��V���qax�u8��V�^Q6��j=�ɂ����ڹ�J��Ks8��3�K����(���E�w�^;%�n�%S��p��X��� �kZj��˩���-�hF5����LZ;g0�]���ufc�Db�`4��� +`�u^E�e?�Q)ʤ?J�!���.����l�.�@J7K�V�?��~Y�#ƫdʾ�� fw��X�1���>C��/`�"g2o���������#���i��>zB�>�sz�"��?�w��{��w �{*E���gf�ĝ����ʼn*�A�S-[{W�����b��Uh�GO���ԟs@�_3{�����u�e���������Ew���R�Q<�3�����ikS�eH�:9�M���:��ȕ-+�������9���QZ��V>��d���cǏ���:}��9�y�����N���7 H����_]>�LHd<h�+ڴ4��7��s�:�^*���{$��ށي�����څ$C�B�H\��g]��t> �/�5)�u+.q/):�y���`SUO_ՕGG٭�J��y1�^��dϸ�7#�9�E'q��^���3���{>N�\3�#yN�>X��ΩN�,���U6��0���T�h�9(T�j;'��[���MowƵ�����/��Sx�����E�^zA����z�6��݇����~���Eu��[Y������rU��>������s9�SI`�ܳ��VR}32��{�P���W`�7�N�Q��Al��n�7^�����1��}*��/��7<Ы=u K�����2�XWymi�'�`į���cX\����|���K|Z���� +�<������;,��ƭ�N?��sz�6��]����� �/�[T�,B�gn[VJ5+�-�ʦ�q?��^� ��z�Lن�b~�"Y^BQʻ�?�DW������ʍOc�>zA�\<��<K�����O�s��r�i���jV�U���.ɮn�ʤ�m���|�1���� ʍ�ĺ�b����L��C���I7"����q�������7b��H��~'�g;ە �pa��!�-v��j�PK��ײ�M�\��1�o�h��LP�o����?}��������������3����Ԟ�S`��8δGu�lV_�������(� 3j��Գ�T���a*�ۼ��l~J/�_��s�GV���tr��tr������[��ڗ��CW��\|h�EeNB�� �u� 3V5U�kc�x�����@���,��� +�Ⅲο��f��'nǧ����g��G���!���:�~7�Fdr��!Q��@��FY7mE]ϔt�zF�-�3����|N�JA0�U��<�J��%8���o���]�o�t��O8Po�ߥ�V���u~h-֍�VUu�17�"�$�����CC���)��QK+~��H��&^&��\T���G�SjV�ɠ�_BS��e�+���a�{�D-���C�q�2V⦚��א�U(�@E�@OKRۀ]�6�M�{S�*OK�> &����������Q)���gW��Bv<�%����7|��K[�6]�!�mj�yVUI⤸$L'm�w���:��=:dY�.I��Ho��]��{ 톛/��gﲜ�Ci7��+���#��]����1�X��)פ)D k���ar�~��$���䔺nSAy�"�ҽ���/{bT��(��Ĝ����vz�&���'���"���S�|��7R���i���-�������jT�B�����*G��Z��Y��L\�rhI�1����{\L���+�|�.���o�FLF�Q�-��]0l���n"��_G1�۰��r��t��p��Ϭle�%��֡Y^y�$�W!�pܸ�C��A�<d�krA㛄�2甼��x�*]�!��TB��=Ei7�$� �jZ*e܌3cv��h���-uq=����}�����F��^��N���Nj������؍��"sZ�D�z��PM/A\��,��}I�2�Kl)5���RVʢ��k�g��|�t��]d����a�zK8�l5F��. N<L-��'�Ưw㜞�@�lF|�}��6�67�D��6�:�@��F�Ǥ��"����#/ji���4��5�`K�O��_�fW�C{��Y� +��v��$�;&�S#��u]O�)�^��� �<9P�k�U�G�Ԏ���� W���~>�����:^&$�~#���Cop$�K*c$��J�1�.�)���V|db���� Jښ���.g$zh����L,��H�=�9=�#y�m���*i����Oiv!Q��Ә=~�u�͝!�]}1C�N(eY�z���z�ɔ���%e��Jq3��N�b�o\1\'�����*�;=(���~��v?$������_�"�?�R��Y�]DNÏQ��[�(�]4S���5E���-�����ۜ��6�L��TwN���Khoo�o���ڭ Z�1���y�4��n?|�r�ٛL'�`/��_s�5���j�4h��</�$����Jv�U&(ZS�S&e��C|��~)��[i��n�W{F� ̓Qu�~�!��G�k�)�ϊ�kH�=<�[��wcgU�ԣ�r��ji�M+�u�R^�Z�Ǔ+� r�0_�ߕ+joK�l����J��C{�2tw���!��ұzG��ai7d��� /�YUג�&j��*�� �1΅�jۖ��EmS�^ֈ��DuW��w�Q��3�����T��Oh��2�Ø �Hf�2��MQ�>�:8�M��Nuv홹�� l쮞�:�k-��6,��Z�@�X�O���tI�����-�Tv�!�jFa�Ө�R�4h�g<�&�M�Cь�3'E_%�˛�qF��+gv�7-o%�% 0���P/nGi�mE���������fynw��@�)C�u # �����v��� g�6�O64�K��"fʚ�]t����7�FK���ܱv~�����ɚ�C��ގ�Dqk]�z�.W7҆�K:���ޚ C#wSW��1Բ��j*�f��zr�|O��l;���(3uQ̊_�UBg�)����U=cn��g�V���1��:�KI3��xCƄ�c� 2�$�h�XK�v`��PSzj$gN��7GKB�����1|�ثX��J��D��<['d��D���= C���b?C��-U�2�C��7�!Ս���������9��q�88�����e��/gZ��3�'�ɓ=�������.��J�O��I�@�6��1�}f<��� �܂���X�����J(f�H{yk#��C��P˂����+}�/ڪ�g���G�A��������ā�ݟ-�M�v͍W�y�c=�0y;+p|@mR�!�����YֱT�|n���\)�MQA�t��,���H/X�1���-fUOݢ���>]ߴoj��1��v���#�>��_Ss�U��%mOϲ��o��`���'{[˅nMP��G��W��O�&��J�����v���͊��Qd膆]4�n��^<���i����t����V�X4-�Em%vE]�ڟ��?_�:02 +w��ԓ�2��Z��t��蘯i�j�p���<�`i�4����n���+�AF�Ҫ~��tH8ʔ��D��dg%��k�f*k�bx�d}ʓ����1�R��|���.��l�x+C�/��\癶�w���h=�<T�7�+�<Pv4�M��_N X�rd��.�x��ȽqZ"�d�]�B&�9�ƞ���� j��5���*�1����2����:�q�h�� �~$|o�db�E�f.�:JO���З����r�O؟��. �����"Z����,ee��hi�RJ̾�Ux=C�6��X)�\�~y��gi��(�e���4������9�S3z��^���JI� j]*�/�I�ܕaR�t�{�4+dD�)�����e�*}Q�Mٙ��R7��jY�벢/k�i�v%!��T]z1��}5�4xq=gʀMZ��5e�csu��dE����f�/��ٳ��2���j!������%;JdCY�n�Q�G��P��7p1[�:�6B���f�ۖ!�/g(EGf~����Cx�t����f��-�7ä����#|��qlbB�DZ![c�����2�{��ƛ[�^�^�0A~qhHY-q���R֜��5#�e]����(p�+]E��o�UY�����Gjj֙����`BT5��We��=-�"Bx.���tf�^��~��,�ߥ���ʛN,��y�j�Uw>Wݲ9��В�j�%�u���l���\��?�������j��.V4�)K��D�˃���b���):���璠�p���:�ɷ�x�������։㥺��� +��� [������mKK����uU[�_�(Go��f�b�C;7��Z +��L+��l�X�+p9����h&Ƽ�1������] 9�PAK]�F������~J~��#E%�PUFږ�R��1��QJڙ��{�'glC��u�O�>}�-����tE��I +hG��~�?�ɞ���PE�s���cC%�6Ɔn�p�;'��2@�zR�MV�&����hM�Y�R��-��� uh8�{Jlܚ�Ѕr������}H?K�պ��8P�+'�숋}����e?]�,p]�.�ƫ�nn#�'�ؕ>j®��֏��) =Q�Ɖ����DUڽAR�o +F����S�;��=10�v5�PA�9Ҳ +&��T��9"+���= <�TS}��D쌦\M�!�z�:�W�����=M�:B�������8�t)��RN����[l쑖^�%A}�m�s�n�p��!B��_N��,�oH���7NM>4p�rb��ecTԬ=9>�X]��,����r`���'��Ǔ��vC)Ρ��m +tخc+��kI)�*|�M� _#>_�p�'&*�ĀMwL O����%Qv5%��\U��bE�u�)%���9@��d��cW`cׅ(�M .lOIϵkX�c 1�V�W3��l���ґ�nk ��jWֻ��,����+�.p8�1|�u�$�X�@��Y��%9�X� +�v�#e\�\��P.8P�R��g{��Z"�rF �����Ga{��6|G' �/Դ�e��-V�Δ��|�]G�?�b�&̮��mjľP]w�Xۺ�������>��B?�\��Q����%�;�#�d%a3������89�N�0�(+�h���܋r_탾_�ܶDX��az�t+�s���XQ�����}��`b���g���9]��to��lW�w���!�ۖ0���xqؙ�:w��W0�]��������9�[#0_k_����7{r��]EN:��rj\���>�4c��ì(O@/�65���n�y��S�:� �Љ ��-ąH��35)�ha� B~�Q�nNդ=5V'�YA�i�!!}ؘ�*̮`d�J0a��9n�M Ά������s��� qI�:�wG�a�qB�M���*���C%�IO���Y� N��\蘐�ά� ��:Ck �Fbʙ�����\�p8Ж�U��?'��o�l̑��ߌ� R�����:�X�~��9P��]x��'�B}��E^�-/��E�@�dO��G+2�,"���l���r��89ٮDG�� �6q�߮�?q}汜�(���~ۣ%QGF6ܡ�l� +�{���^�w��\ͳ�[rxж�3Zxf��\��N�a�]�0ΌD�r���6�j��Ʈb��Iq�!�Ϯ�/G�^��ŧ:t����TKH�,cs�8�H�KX����. +��y�@.��MQA�bw�˹I�=1r��fB�À��Q@���C5!��L�=6�@�"��9 +�=淅2����l���;�]��G�Ҳ��үl��z�X�t<ߦ���,�����\֖�6T�iW� x�u2ͣn��P endstream endobj 45 0 obj <</Length 65536>>stream +�b����S- |���^g�[E�}�g�-㱥9��j?�g_�δ �W��v'g[B�ڑ��*��oc�:��ՠG����s���5� >R������=)>��������cb6��Х^���� ;���l��>(p5VE�&}�^�����|�� ���|Y�w��t�Tз)R���8b[r[hN}�P�~c�4�O��kC���71����m &d[��]l��k-��3�;0~]�/?"c~��2��6f���}t���w�����l�~\����w1>r�1��TC�-}i�-KEʓ���� |�"�#���_��Η��|胈������� ��~l�/��v%)}�����-1!mWF�(�RV��r֧;� +����)O��Ĥ3o�����S���R��,�CGm������f��k�ؑ�[��˝9/7r^�|0U��c����Gk�gc]�� !*�x�]�.�@��Y�yX�����>}�PO�(\���p�o�Ԍ3��3@V!�{�1�Ŏ�q0\�~�F�\������wS�y!�p �FB2Pk9'��� a���+���$��҂�6���+ +�_��(��JK�Y��ʒ�a���E�v�!���R��������"����#��XQ���~�͵^0pM&b�����6�$��ZZu�"���ș��N�$<Y�|{�H�;,t��!�P# ��.�J��o�K��B/��C6��\g��w���d��cO�B���E�Ӥ�##��XO��6K_���k���ٯ��\����3ӵf�eM���2^�H��Jꁒ�/��چ=L����h�l R��:1�� ��L��g�*���V�����>H +� �+2�/u��l\�$�:��2�ww�>��� ��C���� +0+{���Ӂ��p��G�I�^����GJH��1Q�xG]���P�/��>� ��D�Eq���}���:�2�tc"~]�B*XY�rj�u�/O��$����]�Ѓ�d�>GE���d滞�s@�rD�LS�]E��qN�-cuޛ�Q.��R���&((I�Q�p��b��y�7%4��5)�}�ߒ�C5�w�F0��^'툋�L�q����ݷ�������m>����]is�t��\�X�]��)������<�n\��t��?g*�9V�/�U~��I�7��;Ʈ��J�����[]��una@v�z�MJ�����ŘП��!��P2���!���?�wA������$u[��~�5������A��O�ڸ�695E��~b��z\���Zf�]�v�=�y�����V���m��vUI��!����Vtn��0�o��1(�PQ>՜�Xʊ~t�'g���_��R���P�m!�KT`���m�bcz��+�|� �r�$g�/��r/����rd��x1�߸��1T��2��\G�����X_�ip��?]�)�i�ym�J}~5�&�|f������\L�-�V*!aۢ�W����A��cu�EF�w�C״��9`�ߧ�P�����g�U��ua�+mi��E~�U'�?�a� �ߦ�������*<�|>�Sr�~�<��Ǭ d�4Յ�څ~�]?���EaIx3%���z�!�F� +��=p7mU�+My�#� ��\}�M %RW_��X���PIJ��"lB���qLP����������3FK�)�o��g��Uύ�e�<��?��H�>B�ϓ�0_�fA�>��ls�az��Z�߯ `��;�=�OҲ�W +~���At�ts���4��ls�c]��az�o��LUXo� ��0;�����{O��9!��22w���}$t}0�-��BV�a#��W�nT�)७���k�ywD��b�'mi̭b�o�����\n�y)�F<@�ݚ��y���iyg:f�r�����.ib-�b����"����W�M�.�p����f*����ib��z?%rw�o�s��vY��q�k���Y��1A����{�3i�H/7��L]��dC�����W���wJz��9c��ԙ�� Xn/��Ԗ��&�����3Y��t��}�+%j�r_�y ����ϖ�1X�x��n�[;&������$�h��*2=�����F�4��� \��2k��9Y���43 55{���{��DÏ�������h�Y\���.r��= ��6�Hӗ&?�������XuS��yW��� +���$��X��B������|������g��.v�>��M6��H�w�;"/��.'kk�Y��Yp��ؒ#�VG�~�.��b�Љ�ޑcB���#5:�P��< ���n�߯�V��)��Ԍ��=5������e�0��yn�ڴw�x�.�%�����{c��U1��d[��!j�σĐu���:P��"z���{X��{g�2�!P��}%��M��4_��4�ܛm�z8�v^cC� ��W�����p����G��9Ϸ{��2\��-㕌��b3��p��c�ɼ7՜�Z�I{Z �=X�x� �*!�y�OFXi�6��q���&D���H����?�(�?�*2�vq+�ѷjA�t��1��X�{��f�3^.��=��=T��,���Y�ߛkB��n�r]��Ow�KSy���g��Aw��[�A7GH�w����M��;9.v)����5���P��v�i5@���x�.�E�<�P`5)�h�E��I�_��J6�f���g=m�$���_���_�� +��Rs�ƨ��]� 3���()y[��O6A�'k�^�6�] ����rޝzȡ"�O�e���͉�����M9/g������֗�:]�p�6�2|tUᗟ �w7���Ό�l�磧�>h+���w�>��gW�eԔafҝ~r�s#$`���)Dy�uB�55 �&T��v\ȳSn���{b|�����B�����&E��Cn�V�G���51)�P��BW��6ٚ������9E(�g��_��N� �&>�x����8W��l�*��L]��y���X�U "B&Hy�)G'�*Iי,�S��##&rG��S�BN���?W+����(2�XO��� +��u�R�7^俧� �߯�f;�h���R�]EI82��:�EI��~���( �jX�����Bz/v��{��Ĩ���&��oHKB:a��M`�M16����Q\�|{ޫ�>���L]뵷^����ꫣn ���K�dCAJQդ?^(�ٔ1R�e�wFiQ��ңo�~����������ٕܼq~��9E�J6h���x�wN�A�M����"m���������*��L�}��3�_d'�Z���]�/��j��>rG� 9�q!�|�F�{��ԝ�v���Mh�=5?�O������j�y�-����q��2L��g��X���$&[j�n�4D�ZnO}2[v�?�Áwa=�~ ��[jA��_35m� \�R[�����]�7��E������o�bݾGF����DͿ4�3����Ԁ[��&���������Ǡ���OTe�3�!9��X��y4��i(�+�~��tm�s�� ]�Ay.u�?��S�y� ����d�N�f�>v�D��V�h��)d%�X��m�Q1�Bh̙����:�]�E�d�PsS���:�^�A��L�+Oy$eGߙ��~o�~oe�on����D~�#���\�����g>]n�}aA���o`!f�]դԋ�ts)�`�+�����f�%�e_A��Wѳ&ʊ^� ��{�qN��]�8�}9:z�.��ܘ�;�]�$BF�Xxl��=�s���,����r8�Ye3�X��z\�lO�sKk�-"T]�`lI���c�|>�C��� _͒!�R���_��ɛC�["Bxj���F)�9qO`��u�&ĝk��c��u15�T+�n ���_-u9��]L�Q������� >z���ډ���1~o�+ŇM6f�^�y��]mҒ�} b��{���z:�T�a��yg�adJ i���f�r^�)�*Z��0�ˆ<��04�-v ?_� +k��-����3�C� � �k�!㩵���.�O +R̙�Y�-��l�P�G�*�R-m� �+�x"c��Qs�n�i*���*�� 5VU�s�`��p��S#-wo�8D_��l��\[��lk����&�n���n������2�0���O���ۣ������u�����LO!��&�g��k��R�R6@׀�����vS��C�-LmI�߯�2�Y�y~�� � B?�G,�x�y���t-�\O�\�Iy=U�d�9�����o��i�D_�����V�����؈#9ǡ�E[�R������r�jk���!�T5E�"��6̉v��c���2�������MV�=^��w�!��f8�z�wb'������O�l�m��{�;��tc�����W+����/�����p��r|챒�u:��ٓ�BWr�v��'��#!����ɾ��x��ği�i_���s,̖�g�-p��So�)��1r���$d���Sx!�G��Sb�/�i��V��02Jĉ~��@e�g���/+�fS�µ���Z�\wd_�����X�<��/<���o+�=����c�y�G�-d;O�f}Xt�#��O�RZ�c� :�q V!��?�?Sa#�娐�ΔWK��K].� f�m���܍���|���51����ٶ\W%+���H�Ws��@E��)��/%F�4�?��H�� Z�}=Cg��|SD��+9��}0�Ŗ�ד5 '�a�����-M~j��l�� K]h��)>���(phəJtԉ��x˨�B\�����/M\ԉ���m��4��;RLȆ�~g�y '�nK��݄�;�3BwGiI��b_���\�Em��Җ�VB���T�����o������-�#C��`��`�G����뀸;T� 'f�:Or�!�d�M����Z�q���e_Yh%�q\���5Ɔ-�9%�}�hs죔���:�h��v��#��ݔ ���\��t%�:�h��Aɏ�#����3����,!��6e���u�5�u���u���m�9ҡ�6�r?���^y�� &Z�Oy�+#�L�ajJ�eI��1�SS�2�������K�ٮ����3=w�� :.�n���=�Oذ�J^��'om�oi�z5Q��|���ɬS=�`w����N�i��vh8�u!.x����R��B�}8ל���B]-�����0?���%�@S�%������~!x��胦*��T{�?�a��7C�Y������Įb���|��'#��->��Ā�ϰ�����})�r�I<6ӊ/�Xx�K�Bd�� >��Y��$|]��6D��K]�ON,T��Li��bE��$���d��]{tĉ��^�bW�Ǻ�7ז�tO�^�6V�ޙiJ|�1�:3�0c�%�՜µ�b�]�oxZb�j��~� +}������\獩���JF��`I�CN�8ӳ� +R�\��tc��)5uUH�5�d=\n/r���R�w��i��{��go�q��}p��)fo�?��I`��y�#�\�`���Ԃ]&@�O��\�.��h��͵�m�����!z�s/���� ��w�Te=�n�~j��oH^��,�Y.�FfѦ��&!D\�oh�6 p��(�)�H�)ؕ�A� +.x~��Ћ�k�����s�����s!�&�|�������E�'�ws2�;T<��9i_��v��cm#��-iq��.��\FYS�Z�~]���VX���0��P���2��b��6��X���+x{*�POͽ��#4�1[� ��qT���w GI�]���*ZխgS܉���&F��<V���چ�<��\��,ܡ~9�g�Z���)�P����$Xe���^��YXk#���v̧ �3ZZ|4��kI[T�R�#P;�Ό�"���6���'��^O�����(E�=CC�p�6%2hK����ZzK[���P���XS�R�}�v>��9���.F�k!?�gY�)X2�g:K�LuзJV�}U��o�̒V�,���z\¶��_���e6co�������Y��o�'92P����C0�?�5=��U-v��*-��:� ��ϵ���Hy�9���&a$�+ˊׇYY�rF��8Pے�`�6�\W�̈́O��.�n('�w�\��s��d�\��v�Ɔ����_���3$�*N�]] +�K�d}�=cU���!��M��_�Gz^'fCLO�5����YJ�H�+<R��6!!�t��yk�yw�����+^쁹-��8�~�Y�j��u�-�_B�{�s��,uc�����U��3qn`��Y���� Q��lk�}cy�/v5!��lm��|.h��|�!��XE����g`��|v���櫪Ԁv�o�1�6��B�Ƚ2 ln�^aBN,��cs��u�1�L�O8S��Nnؚ`B&PAKC����r���o�o �]��w=���m�G<�P� 0Scq��x�!��f6�D��_�v���%��&��+@�/bw���/�W3L̹���(��HzklNx:ӑ���A���\�����[tn�NM,ʙ��u����$�Gc����0W�d�oT5Y�GZ���E���if��9s[A�]@y_g)�M^�cW�S����f^i��h�-o��9�q?1�����E^���߮z�� ��l��\e�P+����~?��b�Z|���e�ۖ���!�U�5);w�zdh%Xe��aF�%����=��1T����z�T�x6_Zfn/��Հ��u-;�b��-q��>2rVݬ"����@8,eܵ|��8)��L+�X�17G(��C��]%�y���}�r�щ���w�A�o#��(�x������j|ܱ��ڕӓ�Zz��,{` ��0a�a�����g�"اce%�D� �U�"�)1kjꎊ��-�Y��}�� �i�� w�]wa7����N����LD��ۏ�~8�X�q %��+r_�����En�˹�jl�R���eC��5Tb$����OT��;��`ӥ��~��R[�����Ƕ��]�>���u�B����!g$��+q�:N�m�2��*��;Q��*��:�t䷹2� +s����()�P���PukS��=����}85�r.g��#~�+->������{���Ɗ�{K��//4��sC~���ɸ��O�Ĥ= ��`�=��-A����ռ"}&��ˁ����?�y��=D(JRWr\���wdP�?�#@_lʡ�{JD��"r]��}�,��6���.h���3�M�W�rꑞ�*�a��o�b�lji�s��Mq�{je���RS ?���������g�}��r��C��s�Kx��j��~c��p�T�jS�A�����9/��Cn��B�/��ֵ�M]᫅^T���H��̡��9�#�`Ё� +���(����~��<���e6��Y��S�r�%��i=nI(�ِ0����%���/f�+��։�ڨ��/�x�zJ��(5�p��o�V�x�:GG_-� +���� <�d�f-��t���945�\X����� +v�Orl�����51�w0���\W�xa��]XX��1\��S���KBwG�=��Z�]7�P>��/�g����:���빖�g���-��|7�ȸ�5�V�>�V���ĮK�1�]��Su���葿j�1.4����*���;'����C��ajԖ��N|؋����N}r8� >�R2�G�!�aZʡ�pi��>�Q���w?���~5�!���%!6pK\`W���S����>3m��V�9�t���b��0&pSBL�!%�H�/s藓��] 2�R��d���Ї�6,|���>�2�5٩���!��k��ܕ�v��E!3YL��}����h���� �|G`�;T��,������.�f��aƪ�W;#���|�}�Ӿ�.Ɔ�Z +ލWf>���m���Г�2מ�2�Q�&, +<��f~�a�- +��~Z�p���̡g#���S=!�*{h�Q[���ݱ��3L�����y9ϧ��)�5&~k�ԑ�f�5�Ş��~n�����UY�l#��c-5�X���g��^@�a�τn��s�j�V�Ԕ�e!1j����@�O��X'�UՋRZڒvb�N&YH��gS�"�T%��F:�r�^�粠�j��� +h�=&���� g�jIi� L�]u��D�q��+���=�����^�;�7p�o�~�Ҫs���-�34���p5�c_��6��r~��C1��le�ZK+.Y�C6��H�=��ӯ+j�Xn��r)g���+W����;�/�;���-&�H�ݗ��=�+-�+ �W�r��2s�5&>6T����~� +��_sL�1�N�|�]W���曚�_��?+C��#�솦���zʺ� +�=��ۖ�3օ%�k��A=���@��$iCZ�JJ�G� �r^��0)lSL�m]��r��y��#�vD��kB\��(��P[Z���GͶB? P"�l��������z�6FOqh�(��Y�:T�nKZ�i�x.w�����.'��3W��(��AG����x���Yj�]KL^�y,��+�9�2V��岧`d���}%6rW� +�lH~<א�|G\���"V��dc}��J*�\_Z�#Fx� �e���L��w�ՉOm2\̡��h�z���,L��8,p�5�y��8��(=��bG�{������1�ݏu|��$�|5�#�H9V1<l�6=thj����DLT��|Vܡ +�v1�$u�����S�F�>����DZ3���^؆a�;#�p��q5ͧ]� �H64�^��.y�9��������-�����\�U֞/Tկ+��U9�>�/�ꀸ�a_U$�1�����Sl��+� ׳tOLt8P��C=�hsg�bc�:r���A�J�Q'&RE.��H/�0�P_��X`� G������R*h��"�|����[u�,�3����\�_�t҅�hm2|w�li�YB~9�baO�%Gfr��,�0@���+�ʋY��H�����N&�п'����v_���� ��]%5qW��^��~9@��y���� ��/� ���Rʾ���1B�ؖ��?��iO�\�~b���r����dF��#V�=NG!_���+L�mM3�U�u��(��ˊ���hA�j���ε��j�G���=���%B���X`���!�'�@�FA���!���89��t=��|0� ;P ���~��z�eG��=�3o�'�Y*��*jڶ��Дğ�y%*r�u ��ڟ��p콯�e��/&�%vM)vOY��2w9���O��%��ۣĸ�!|в�r�f�9�]1����*���rD��{��\�GA�':Rҙ���0�U��1�u9�6��YGJR�73!��D�|S�|Wѻ--�>Aϝi�*�좭�����Rˀ�i+Ø�s'�}y�[u��$w5�!��qIc% �������\,�Z�Dj�@nv-�r h��;� /�y������}�c��%w�{G^�����#���5�H�P�'�@���}OM��˹�U!6h��q4N��g����s�:L�M �U��w���� a&��s��悾Yh��g��Nu��+1�҄˴��]�q)���-�%���9.�t����Wu��R�rn�����vjb��\^iױP+������sm�����8��� ����g9�S=.ۡ�G��DG�iJ���@�[r�l ��zr��������*(�J����Su��6���Ut8&�������\���3%�j��:�sa�JV�m��:� u1�<�W�^h˳^.u�>ۯϓ�s�q��Qz��(=e�-�Z�*��,�+�<7��� ;~�C ��!}��Y/��s�zIy>�{O��ly�(�XSE�+�l�P����� خ"��/�"���}�uOZ9U�w�*�2v�>��}9.�6P�~���η'���E?���#u���q�|����LF|��!�-�t�5ݙ�h�5�����˹�2�����,��-���c��Mq�gf��@-t�>*9a��-�<�����"D;&�GĄs#��r��?��w��Q�JFΩ��js��1T覮Lr, xz4���R)�j���-hid��H�;�ZH~5L�tg���h_�<^}�� -�҂p�� ]�4<Ԋ�� �xn��i/�z�^M`/�8�os5M; +b�~�PV��ry�>7�w�y�ց�LJjB<�|�����C9uM�L�kk��� +�C�.:��P{���} ����{?7vei�?�t�v���Fե2*�TJ)%�c�d2 ���[�{�AХ7R*�a�[x�z�=�̪���b�>�����n���˘�Q<�@>��s�9����w�z��A ���fg�x#�eÂ*6,�D�M�)�Y3��9��=!>άK;��͑�/{�[j=�~�}2��wC爷��{��`-lݘ�/��:��/�Ê�?��3��S��>������7��ح%Ao�28�raA5�ic +}a}q&��w��b������F�����4�?璏�eCz�`c��3=�ן��F/����usW;8�}F��n�s�%�������[ ݳ2H1E�������o">��zOh���m~]�x}�}��+Еk�`߇�<dX-D�}�yv��;�u�k� to�7���Y*����j~�����g�ѵ��+�s��շ�뎟���G�\X�" ���:k�=�j`�ײ=I,Y�x�)�T��A�$��֑����m�E���l��;�- ������S��;����agv�a�|b�"����V�Kl����u{���p%�BYBAo��Ť$X���:<Go�YEL�<�w� �ZDK��(-)�4FXÅ�y=Q��`�88Q�qq�5;�G\؞B��m\����%zCL��,�x`� 7����S�%��LXB-��uw���/lL�Z�Z�紅fQ%~��ag���6����� ���[�V�\�-1Zv��W�3�r�c������?u|� x�������!7D� V,,t�!��t,��5���Tϙ��Ғvމ��F)/i�84���d��='��0p�!%�Sp�W&��A��O5��D���ձ3�)��an� �~P��Q-��?G��@ H#*R��D�Y룊?؟����k�~�!L���N�#�w* )j�0czP���Z��Q��^ýG����#�3����`}E�܍ �C�X�l�娎��rU5<�U��!]ޘ����"N����BN��gGM,�WAos���� R~HM� +�aJs��]��3j �=����)F����'Y'���v|�5��Q�鍷�W?x�ە=�-�[��[XY��Y~��p��괍��P�P[��N�y�����[�ܶ�EQ���K����U +��S�k��0g\ �W��lL0*V��ksrl�(c�:,�)�����nMPKw&�;3�IV��$���8�L�@m +i�ͻ3���W�� +I�?/�������o� F�&�5PlE4�~(gRfgZGn.`���E�t=�_O:S�1�<����ErMJMi�"o����n�]���Iԅ����/�+|sIJ��ݝ0�z�x�;�̤�ܵ5?�V}�q�E�:|oc�Y�2(A5�F�D��w��QS����ⴁҒ427D��,����KY�W���}����^�\�Χ�6b��[��q���7}�@�\�/P[Һv\#"�Zٹ3G�L[��0��{�)��/\/ڿ��\�O@��*h�����v3�L��zzgX�+���ai��7ޙ��)�?�J#F9f2��_���,b�������{N���?�)i��ݘQ��/�f1#�b�D����bk�������{6�P�&��⛧��������;���'����6^ �Vf���qp0l� # G�&)?�J{Db�Qµ�s�5�gfFB���I��p�e�d�o��^�X٤�[,K;�M�Ub��e߷+oQ�Sn�]�����[�Zj�_Ik��<�@�ax�Nn,�EBi��Fe�|j�����ߊ�D������0��{���b��~��hfNaE(��:G3��JP�-���U�D�V�i:��G�U6~��|~XIkx� iyA�� �'��zp� ;a3|Jlw���]�lNr����7&�U��V��eϫ��[��й��VB +�����?����r�~�Un;��k\�Gyy�k�K�'}_���|i{?�5F��V'�Qmq��� 'f���Q-�2������1X����X�����5��x]�ǭw��~��mp_X`�T�>��%��� ��6ݚh��;?睃����n$t"j�5�����4�"aR�fa�fڏ�UHc�kc�&��K��k3�V�8����Y�_͙��15�|m���*�����=�'d=ܙ��Š���c���@g^]yM��5I�)$Ĕyhxs�|h��a%T�������NZ�o����9 ��3'D�]r�6�&5�ut��e>���P�Z|��x��i\i�!L�����S�z#JR]DE�H�e܂S�9V����K���۳T��}ø���S�Z���[��I�T�Z���[����� W�J\y��ŧ����uɭ�E|]P��@�|2��L#ήL�/��OO�~�u�?n��m��2�z���q �)�:|�Z�[ ��-,|~u���^�Wa ��úh0��֊P��[*n�k�^�SP���9������13 +��`oS2�[ �v&bW�+]��_��X��}�a�:8�t�0�$7�Γ#zZ_���F���g�����j��:�Q�]+�)�/m�R:fW���\����I��tO������I+Y�"��pN����Y��߶~R*� +JUP�h�ZD�=���K>�4�05��@KX9H���� + *���.�+BK�:��U�YzUZ+$��`.%�����WI)!ըط(����kw�e˯ѧ�& Ł%F#x_��+��wȳ�%J5��[���7���}߅穵�| l����i5[���>��lu�Ve�<�~��t�z!4W>��j^_@�i�.�k�K�j��^�ß�.2�f5c�`�O>�z���w~nuq:�"����Z��4[���a�o�M�wo���~���5����ѻI=���֘I�k���+8�= #����Q�~�c��x�7�j-���e<�����D�7;S����v��/��Ӡ�DubnT�D��"Zp��s�7�.^{;a�[���g�'|����JD4�$���}�^}"���+I��y��(�y1�m7'�ז� .�L\��<���s&��2�$aP�v:*��Uz�۾�x�|4��������k<�U1� 89������J��<o�Z9T���w������o=0����yI��j�����к=��}���d0nc�5�6h�Jn������P�g�%�'-θD���O����ڹ=��� �{���M�<c�6��A5��6�&���cf���t}�|}w�V��pw��l�wY��q�&C�5��_6�9�1��1(V�H5ۓ�R�7}~%�lk��TLC�����B��c5l͠��O�?_{�u,e"7�씎��ܓ2��=<Z��#����(�}�%z��,�¿���/r����2�}��tx�v��N�K�VO��EG �r�҃���@η$B쌳��_�/�7}�~��uh��x �u���y^��'�Iݽ�/�g}W������Ib��7^��hþ�9N�Ɯ��`WދP A�2z6Ʊ��%Vw@+��m�N�g�pyc�V���[�ʘ�Z��Q[�� /1���Z ug��%F����.l�t3���vg��� �c*>,�壀���y���ڋ���y�٨s�&2i�bAiKZ������z`��rJ��/�;��%9����zw6l��W�#N��j#Z!e�g�#�]=ZsD5R���ްRDr����9I��������I���z�*R6�q�u��姰r�6���-؞D�$�\d� $f�<[��[Iv��m˯)��_Ώ p[���t�_�苨ٸ�M(5�V��C�Ԍ��m�q�>t'c� �ZRmL�����7��H�Ҵc�����.>���cF\e�D��. �l̒����I8���{�iR/ f���[�/?m:��r�_��|�w�'�'?nK���ب��h�)`�<������-�Z-?�~ky����,�*��Fk�Z�这�2�N�����/���?wW�b^=ʭ��Iꄸ��ޙ6�;cZ|��x�Q�"�jL������8p�G\���+�s}� +VF����V���z�qg�T����98��SX�:�[�9U�5l�#`����"��T�3��Rq���̒�@g\EYM��zN�Nbn$����� �8h��`� +!<����J)~g�S���X���lk��xx�P�&W�����%1�3)�ݘ��D��w�������i�YȐ^L�\��l.pZ��[`ݟM�Uw#zc{Ul~����ڐ0�)�X� �'^`���IƇ�+ޞ�^Y}�q��%��'4��,�1������Ƹ��Z$Tn�A��A���]�(x= ���3N.s��}l�U�ɨ +_S���Jt�w�����,��GC��Y� ���/����<��7I���ʣ�����9zM�$�M�w"��{���3O��<n�����Z\�'��HP��'6��_����2�O=_� ���V��q���)Z��h㧀WF�L���88���h��!�ɯf4�52n�"�o��j���72.�,퐈�&#���crKDMoNyش��D�9t��-8D¼]Ȋ����^�O�u ���+�{����C�ܚ�9�`j�:hgR�,G-��;o�6.=b&�d��������s�����F7R��EӍ��N�˶�������̯���I;s���w��'�_���+ )�M�������@���oz��\<J�D�����H�?��s���-g?���t`! +�<��5EuT�]� hybc +wegw�7C�Z`6fm�7���bcSfzGHA� -��Sz2c� +vGJρ��̮���H������ӳ{J:X#Nk\+�F�� +�y=� �e��ί�Ժ����LN�d��Q�'�!f�܈h1�!M��i}�����l�Y��Q��R��cjb��Q�۽�/�����PI!��3����Z!-����Dč�:���h٤����FČ��.���P�0���1�Wߴ�t=-?� ��`�=��W�GC�h-B`�����g��}�H���q��Վ��L�*�ǰ�Mw�>w�o�����X�@9$�� ��z1-����N!.�W������Q���>N�dҰ��T�q1À��^f�@k ��_�i�-��Q�����z ��N�8 �����:.<�D�-���0{v�u��e�1fk�ݰ������o6ޡNo�1*��y�yN_T�ClL����EQ�� b��V�=N�T�[V"� +R֑Q�p�I��X��@��g�7} +|E�B����ț�]>�4H���=01�dGH��w/%A�PI���e�Y��H��ge]C��6� a�2v.-a��Ɔ������3'�)��� l���3��Q?����m��M�� �3�z�k�U�K굈��O~=�YmH���9���~x����wW�1�(����h��w�'V������-k�lL�,ȂX��U-�2r�`����~�" n�JW��~����+��I��������G"J۹�0ມ9XQx})��]Mh-i���sz�@�dmBZ�&�%��w3�awUlX3��/ѣj!*i�B��CJVkL��L���YD��|7?��b�{��̓7�S\OςE5<\P���-p�|ӂ�� J��a����X����"�)tj�ģ��"V���|�hmq3�>��8\l9�=�y,�@�< I�<�)h������j��7+ɘi�@O���z�9�=�9�hZm0���[����S�W)-�!g��Z����� +��{�5�b�R +���e�CU�����o�Z�: ��ukh�9���Y@HxȐ�ڴ����_�gagR&:e��$n��5|d`Yp �ĕ����)�)�@+1����qˀ,�r��P�$������� �r�Bn�;�܈NDܝgևTRb@1���8�S�k����7�k���~�g �;�����U�ͺ���m�>�ۻ�U;�f"�'�7C*!:a�K�P<;%#!5�'<�}��H��<<�����������H~;e���j�7ȅ �L�s��7dwA`��K#v�X��q�a=�pպ��ڜ���{.%g��ǵ���w}���������jZ��M���M�l��_>R����M��c��Q/���C��o���J��;yϨ���6�d�j�@��䄉�ڜB���mQ=�F^q>i�����O�>�i�&i��'@=͙���M&���Ґ��e���n��]�G��U��s�H��doY"N[9(��夊՝TQ�C}g��w��|;�_ ��t̶}�����V1n���9�_�T�7�Z%܌U��ZA|mp��^"W�������P��V'�7\/{.�c�2F��L�9���o��^��ހb��3�jZ~���!WEfHk�;N(��>]{�t4m���p�:r;��Ҷ��ek��g��غ�,��?���G�ܜ����$��V�IZd��Ś~ø���hsS��9�%�%7���J�K�ƌ� �i�%�5��5���}ៃ_�ki-!���]�ulL0��/�%և��������o4�/��U����Κ������~�w��S�Ѹ +Q�����Z�<�)�`wG�RBD{k$�㣽���ú?����j�m�9��Cq#����~�ޙ�4o����&]���N���Fb]�,�$��d2��b1s{��X{K��z���EB���sV~ �*��r��;I�����S6!#��� +Vg`����ŗ�؊��K�{�~�,ߝ�R0Z�jZK��Ƥ�l�wSj}�vF�����.��=�W��p�7���ׇ_D|�G6o�Ĉjܮ-a�S��36�hXM����/������#K"dI�I�*��>����������3�}'�%�"7�],laE(ʭ>����^�3 �-<��r��E����~�rlw��x.�g}�T�����嗰+�9dC�*fe��ΰp�ixQR���%��E. �Y=�ט���S�'߁�,���&\lL��%$쾼e�VZ+�'��&�d�+�:�n�F��,��j�ͼ�ٗ��)���i���b�q=i��f,�.���4��1����� �����coz���,ڥ3a�c����;�� ��:Њm�3��2�s�Θr�]�f���RV��)��_y��]�Zp�G�����)n��"�3�3���>ҽ=�wjs�����j�:r?n��r1q���]"w�Y� ��S�[wg�O���J��Ƚ���Q�o����ȫ 5� :�Z�]��]�����7�x�k�pg�`����,��ӕ'��g��Ɯ���5�s��`�zc\u`v~�u�w[c���EFs蝤ah(�b�&�ז_�.��T�RZJS��)跾�+1�3�n�����?�-��s�py;�Q�+� +bC�ȄEM\�|��oIJq��]Z}�<�3�w.a$�eL�� �M��M�����I��в�6�P�3���%R}�F�}\���W�!�����C�}y8����Qۉ���W�j���b��{l��Iױ�Ilua�"�3��a�����.0���L5)+���6�8mp�'�O���#z.-eec�K��~%h{B͎~nwu5�K�6G������ϻҬ�KIi �q=�)bb��f&`�JF�owy�Y�Q뽺o/z��@χtt�7(p�|��vߗ!���_� g�BBZ��-��&j�!d�L\d��A�����J��-@=q�,N��K�NbS��@�l|r�<4S0�cJj}B��J)���<�n�y��:��^~Xs$�"�fl|R�1 O9���ӎ�U� �vO�y3�� +Q-�7]��$�^@]�N���%��/P�CjVG�,e��N�谒ְ�~<�@�H����ID1>���0��a�9�)4�|�ܴ5�|�;�}ѿ$B���:9?��lL����BA��gg]<*�e쐁w�E��}+o�]ʁ�?l��\MAOEm�Z98�>f���$�$�@��6�0I= iu������@������PJ�A��[^{x��^���n]����c�S𢈖�����S����;�*>z���$��O��/=o�W6�>-�=K�a}��eLI�Θ�]9;^p�0�Y� ���/=ϱf ?���6&,�!T�9-�-��8��A��X�����w�k@�� +썸q#��sIs�䳭���!5�5�����%hhM~�f�HkKX=@�vǍ�N�%�E�唕K*,��uXPPj�vs��g%4�f����֟4�<��SP����*���&�pa;Ӕ��-Y#�7�g�P�[S�w�1%A5�9����q�{�`ނ*bc����' ���M) +��I���kճ��jRs����()xhȂ���WRk���%�%No�����C�2N!'�0}w�T�_�5���H��4��ٸ�չ���4B���`��)=�f��5��C�'����[`����}�o�\��:��Q����7^#NF�m�%"8G� -b��O��PI�>]���Ͻ{N0n�>&� �Vg�Lk��{NG�߇���K���F��*x@�0�7'{~P��j�Y���t]`�D��1@����bv�*��Մ��wu_��W~��!2'�F��NL�B5u�֘T�qi���Jx���P\�u�yF~.x�w3 �bfV_�ʂ�!-�uV�FF�(�;�'�~�e �;���n!�cvF��� �j5�z�m�7I ���]&N�$���ȋ���Aױ��']�gW2��4��3F�蟣T����v.��B���G< .��c*9'c��!^Tʻ�8ŭ�p�3��/g�I�!es�P�x�W�Γ���9?���������'��|$i�HX�ܠ�Z�HF��,���zW�G����=TtsS�$�t�Q��+(�!5�)i�˲�²�Ahg�Wv�H7)a�a�/a?��<�_�Ń=l�����D{nҝ[3����W�Ժ���ٷQZ���@���2!��Ϛ��z�*����^@]{�>�(��l�y���?��L�٘�b��5�4ib��{ +��|ʞK�ڬ�%���\�]ts�㪀��.��������V>o���������Щ��R\����%�1n� ��^��2�s!c��%�ې6v^[}y㫧د�n{�����z^�C� X�����]Y�:m��H��%)�s}�P�5�k)o�r1k�MH{��m�yˏ͟�ߓ�sz��wuFT����+���<�eԾ��Ԕ6������ `�,xu\M,_~}��Χ7� �c\��~� +�_ߚ�U��.o�QJ?�ب�}�E��-U�����+����Y��\$�/�h:�5�z4�`4z�&�����IL��F�����F.z{������#�y���Q��s��$M|l�����F�6&�������R~�˝� ��gc���?l�6�����]*H��2лv�zON����|���2ꀎ�v�]��}��ˀg��,2�M��+�53؋Q���1�)#�3��֯��[�y�`'6�� W�}й� �kQ%�7���g��������x?��`��v�0����"��!�&��� +3������))���^"K|��鵾i��͟����.k�`�W��9�l0e2����A^�8�I/=�-�o��g�Y�{�їz)3e��q�=�r�< -�J�C��R�����;� .E��*h�=S� +ݏ�s;sâ��λ4н1eש��?9���3ЂW����2�����������U���6��7��뿸5�sb{u6j9X+��{\�*t� TE�*���#�倆�j���'UP _�縞���z��������p�[�e��\J����Q�~�:P0��y���y�S��w�~�=�q������C��=����Б�f��4;t�١#�9hv��A�CG�:r��Б�f��4;t�١#�9hv��A�CG�:r��Б�f��4;t�١#�9hv��A�CG�:r��Б�f��4;t�١#�9hv��A�CG�:r��Б�f��4;t�١#�9hv��A�CG�:r��Б�f��4;t�١#�9hv��A�CG�:r��Б�f��4;t�2�?�5���~u�h[��>���hi�yxފ�pq�O?9�8U�斓0\��b����N�<s�ȩV�z����<v:��&Ht�bE�}w�8�� +�>9}����_��}r�⥋�O��x�̅3EE��]:r����'ϝ=��ų�Ϝ�t������s'Ϝ�|��K/��p� +����.�>}����g�N{W�ًE������;�dL�O��t}B����G�}w��듎��/0o��y+c�8�fL �o/�����7/��Q4��/�/9s��w`�J��-���}��og���Z��$8Rt�HÑ���G������/A#.��̝;s�ⅿ=������������?�e��}x���/�(�F�KxT�������s�W�����T}r��'ap7z�t7~��{◀�����_&����-Eё�#gN�.@����� �?��??^:r���/�=wz��O��e�Px�t�̙��t���Q-�/i�Pcj )��vY~�'f`�d��ΤWQ�b:ZK���OZḚ�ջ3O( ,Qj���Ƅ��ND��^B������5�n�����ٞ�7���W�L��#�����"�!�D��+)���߹1��1d���Yz�o[��$`���uI��1HY+o��[��渞�P`n��#/lM���*�ui+�#���Lhim)3���� �#���GT���q�Ť�ٽoȘx���ӟЋ���7qQ�r����?���c4�tbZL%@F%D��T Bs��1̙���o6_5}��?�R�:�>c�7'�W�u�z ;��vv�m۷�9T1�%�S#JFsT��J���Y�OY�!��+����|��K��x� #�;g��F�y����UQ�jvgP�h�iY)#�}m������3#�%o���b~�*�&��l��vgɵ ���4�x5�ί VD�e�<j�-���⮒��~�{*��z.>��6g]"Q~Y~?��S�v.>e�26&�#V���ʔ�T�ԓ����xv!#m�b�&<na��:JCTOkI�9�ޑ���9�L�2���pP+��2�~5�֫�W� lD��F�9����}pܼK&O;�!����pQ�����E& �XK�Fe�_e���i�����I9'5�NX�)+�s�8iњ4H)�ȃ�]�ι�¼G6���1q�)i!�Ō����X�] 6*�\�?���5ò� j(���~�+��R+Sf0�N�4��`SZ[\C�M�P�#p<vH�hݚŗl͓ʣ>nc-��jIiA��������a%�<���V&� ��`�44T��[D\���W�z\EJ�-��h�A5�5����f�(���S���W�����ETqJI��j蘎�79p�W�ǰ@.b>:��(�|_��t�7I=�&c�"�F19iS�& =Ɣ6I)�����hjɵY����9��_�Hd)��b��pzCK�����H���cK6�Z��~n�J1��Y`\B�+������է��~��}R�/K�H5a �a�VٿhGk��\⢲ ;����y^�ۍ��_�4����P�X��H�I����^��Pg@�������YH��ȹ���\�䳎�U2[ +f[���͚�9+�;k��ŕ��A�J(� 5�&g�`��6!5c�2V)/cM�$��F��j��I�M;%K�H��s(v&�5�wre~6�?̬≯���G~j2�uH�3�1Q�\YΎ��9�m�ZP��5�KZ�����ޞ�R[sJ{�N����y�帖��[�>/8�M�x���\�S��5�҄A����rW�q��P�����X�~�I�" �L�ƨ�\1q�9�鄃Gs����Ci�\����y'��u;���V9cdt'�P#w*f���b6��,��NXY�݅ޓ;�]��.�kI5����Q����6��~T��q�Ps�է�G#���]�ʺ�����N[�$�v]*�;D̴��ٝ�����*C:�od�͏�~���\�5����P�H��o�zg��۰��HL�����3Gs�0���͛=)�ʿ���1�ܷH��%��9j��K䉝w���~gLAoH�IՑ%�͝)�����m��E�LP�������M�����uY;��3ړ w�`�G�ZG�f,�I���0pa)#�-����Lu�֙��z.*e��Z!&0/�Ij�������?����_�w+m���UtZJ.�{w'���q���8�ZRA��Nuw<��|�M���m_���.��Bz`�w[����BpU�5��̍���5b��b SpR�[$H�� �7i��W�b�%��8�)Q0�Y-Bʾ�ھ����옪�\����'k +��u�Edq�.��%�Fs!3a��&)'�B�$$&�j<���=ҡ�����g`8�sSN>u[A��r�nne��n��W��r�� �i�=�F'�Ȓ�u#��9������)��4��Y�/m%�f�D�шK[S��F����}�n��Dž��ި�ޕ0� �sIei'���\X}�s�~�� E-J�Fj���-y�q� �֧!��՜��%���ѿ���]gSfFW������=+�&�3�`�����'I�Tj"�%5�M���6Pv���'�_o�$T�쏖|����1����F���ə��9+�6�z�V� c���2N�(��4������Ė�\����y`�ݕ2���������[��Ӻ�)��5�a���lO���@��YMq%�=��5��P�dJs��A'mR��8���S�W[c�뫯)�w�(��%Fsp�t�?M( Α�cjFk���v���v�S@~�:.N٘��{=i������װ� `�YLK��H�=���2n�U�ը⨖P�SS�ۣ:VWH���/0�s4��Ԛ���w��x`s!�dwnO ����/g�U����IN����ou�J���s��*VW� ag-R���:����C��`=� +�����?mMu|XB�����j$���u�ޜE��ڤ��c`��ln��B��<\���I�x�YHʃ�,X(My�:eA����6 bms~64�.���òD��J�rLφ%L"j� "&A ��mI�w�N!+�*���xi�X�vɆ@^�Nٸؘ Ă[��[���VD��G�̀��[}�s��P���\[��i{n>���1=�`!�J}p���� +5�̚���EHK�]I�f���σz�2:ÚA^�<(��DL��T�$�'A��YY�q��&�[���ֆ��鈨_ָ=i����,|�@k[�&^]����#i���s�8p c��$���wg�N���em|J�3�8���q�K9�ͺG����:���.�g �ւ]�έ������ski� �<�@g��P˻�FV�_I��]�tգ��NBIh��q5�,�?�5�+�/�[#z!~s�X�|���4��)�I��Q1ۢZPtĪ��ژ2�;|��kko�Eq%�o�@M������X�R�vgH3�R����?LЫ~��bJ >�H��,a���|_�=����hh��p�����Μ��#�D�]'�����BD��7r�;*V���t�H��{N6�[wP�- +0WbJܵ�I�����_�u�����1��;/Z{��������^�}�ė�Mc�IE���\�g��2�3rr��!5�ҧ"�jh�����?���hX���\;��3v.e5�u���m�24��6sP);��Ê�S�09�ĕyg���?� +�V��IC߹���(��V����0�2V.6��r�8i������4�1�#�)l��$�lT�ͧe]B�;��p�&bdR�T�aU:��,�V�����"�Y�������L�=x��"���4�S��i���)��T���σ�Z��3��.]z�&a���4�ʤUʏ�9���Z���9��Oy��#�i�ޚd0�̡$ݴ��*��^ +�6���?�w�}X�?��1@<�0����{`4 � ��%M� ��/e`vE�����X3��zo`A�q�i�ug,f��C:>��C#�.K���������=H�&�>B ������Q�_ٜl�fs�����)���pu� �\TIo��=������=�Ux�Î����s��:���%m�������[��ί�k���;ĩ���LZ���)�ը�������C]\{?a~������S�Z��/���yZ]xW�ǔD�H��%RE`s9�!�GԸʘ�Ҝ� (a5��7��XD���U�T���9�×���k�h�[����d����T�*��fXA�/J7�g�/��ߞ&T����B�l5����P�3�����?f��6����.~�|+���0�JR�@x��>�֚2qP���!\�-�<:�C�"$�T�ڈ�X��X�3 8{�Ln��ł������m÷� >�v6:a"Յ�Y����7G��;�:cc�V:�x����T3�jS6J[��D�Nf���%-��� -V�$��\�SC W�:|#vU"O|��`E2Pp��{ r���=���RV)n��&�f�OJ�G_����[�>nJo�I��&<j�W@M�2`}�6�0ibv%G�mk��2n���,P#wVO�@k�9���["ɺ��܊DZ���r��0�ʳ+b�o�����˴cOv;����l��@_ePYFo�� �M�ELI���f���� =�6T[9��d9�����ɣ@�D "��ܤ��i�]�E0.5���߁���zBu#4tT���1������y�QW�vצ�ߥz��g���cq Qњ� +z�w�^ 5s���$��s��;�j���%���o���������(0�[WA1$����r�?�� �R`|q#�u�]����?3�i��i����7t�wh-��M_m��?�gf#�VO�sw��������c�_�:P +��_�V%�<t��#f�Tԁ�ię���c�'u�|�y���ڕz$4<��/��7���Z��=���f̬�����>m�0zv�����q�owǑE�I�E���S ��g��1���7ɥY���Q�#���.�ۅ��eو���^���H�A�Q�_����u&.�~�����Il��JAƀZ�ܔu�1��,�#��n�j����Za����A����?o�Is��;Y�����uWDOk���>�3�f�����R�-��=AHZh�I+�;��bV h#Q�9x;m�366��|�!���%�lDa���-�0r.!7ae"�f��"NpŨ�RjH{pް���WJ#:jC�d���W�nd,lL +�ue\bq���������GP}�-�����/��iՙ�eH# f�2Q�٬�["�����-��FQ�בꀶ�1�$��"�&�1m0"zj[@E�K��y��HLÆE�`�@]ϸ� ]5��!<���A�&�U`�TS�a��1���jZ��y�ѭ1������/`�ǖhM��?'�]4mO� /������?���tm��XD�-K��2z��f� ��jr����w�\�� I" +<�d�xg���yJ]h�\�Vћ�jv��x�Y���z�<�7�"W'� ���g���pP�P�q��|s���ID<�'m� +\ih��DB�>��Ud�ز��;Ш����ژ�ۛ6�IY�}'���Ӻ�������Heb�<��϶���H�X�i �% 0)����. ��O�O�ԴA�Lꄄ�^�K��g��IY�H?xĀ�~�q}_�Y���I3R@u�ޑ0���U�0�HAlR2.�(��Z"JZH�1]ϙ�^3jvjG`na��Џy��n=+8�)x��� +���f~@okH�9�C�9K��$t./�q��?*ZC�B��x�w�iI3ѓ�"@�M|��Q#�W��Y��Ü�CH;��Y��\���x5P�b�(�x0�� ���@:�'���� x�< �����:�a��u��/z��'�� 5�&�mBJ�=���,��:��Σ9n?˹o���������N�HdP�K�E�$�PsU����+`�e� ��S1jny�a�V�o +��G{��SY��Ø�'�ܘ����ǃ��Y)��7>x6<7�����<t�*���2Y�50�I�\�4�S&�O �Մ�]%��;O�J��M@,n�8]I�����_�w8�>K[���|3�ҌA��ܣ,�Xk� �f�IP��g`�7'�g�Ժ�Q&��G�@��UDZ+�%�|8t^)��^�x��G�T���<�4���&Q�������A��� ;�_�>��]x + t5�=k�:Pk�|xh��s=��y,���]L�{6�����pc�����$g� +�6��ւ���Oۘ�q=�;��sbb!�@�%5\�:� � ���~����+��I-�#�c����-�+�@� "�>�����|8֣<�cv@M�3 w�@�fe�w����ӎ�GY����a��cF>&�~�Q�2��)À 4C�-`������ޓ�0Q9����2��p�$ ��_��� �z�*b�_�_����G���:e�q�f�sO���,m�I2�8i�_�$a�Mm��梠{�^�4s�{���u�h��g�m��X�qˏ�0��!���v+�0�!����l2a�@h,�_�E�����U.kY�-��@�%�<|ae���y�X�2���4��� ��$��{[��}�ڻڮbڦm�4i�03'���m�33�)�cff�,�̶�%Cڵ��;�g���+�e��|�}��(������$�Z���k[��`�2f�����{���T�y�\7t�\V q�[�.��Q���2��Cٝa��յNŇ1��uƩi��\����3��:X2�U�ի�t�wł��G�M��A~������ +���n[���"NX'`_�u|�'1Đ�y|�k���V� wF艮YP�`lB���9f�����.�fJ#�jj�F���z���a�XЊ��%6bs�xw�tw�k�D�wOS@�!e��1��h)�E��̋�]���e�"'�1���{C���3��C�̏�l����H����ێyJ�����cq��R?�c����85s{v�1��Y��;IL<�q��5�92q)��1;3�-��W���4���2u�o�vS��5u'��5"֡J@�������w?{�Qq^�ts��=�Ez�����3@�4L�WE�Y�.�{��Mi��]��*��� j뻂P��lX��ߧd!�K�g���+�Z2dd�C&&�x�E�c���s���YЃ~�D�^N�96��AZ��G@c�X�4��L�[����6��}R!�����:Y��U^���&+j�2ʫ����i���+-c��C3���rRZ����1 A�P��״��"��G�+ �@V��G�Dy�,8`KzX��B�m�S�H�!}yMPWVq�,�8Y�r�ׄ �<j2���&���֭�BƲ��Պ�õ��`%�?�?^�l�������<� ��G��ʦ���!��g��}l >��4hNKݞ�X���*�0�#m�̕�w�|�p`=bPǥ�4\�S�,�w_�i�0��^��2�>h]Z�#�Uu�E mk�l*�9YU�s�#�U� �ԾH���9�=�lȽ�?J)�� +pveP�'��HI��������Yd�(3�Th��ޯ-+�hXH�� s)�s���a���)B���p�{j�|bA�L�:���{��5M��\�H��/���I�;�%��KtX�%zd�4�ö���=��{��FJS^�27��|4���g L�d4����X�?�)��>-��ؑ}�HM-�c�/ +��hh�ԯ���"��M"_��MM���2���p�>eۜ_r��Qy�c����O>���>kG�n��f��~��W�]i� +�j\rF1�+n99}k��u���a_�"\2>!�m �kڼ���6ƹ@Kw-�Ni9os����O>Y.k81�5��!�}B �.�5Ȟ�N�5�O��wl�/�L5���F�K@����W>>�/�a}K"rPY����xMT�l�ъ�A�V~�G�%oL�WzɯU�КKd=�?x���?��f�/��|bS��[�K�J>æ`!l2r�W�ƃ�C}z����`u�7�o5�A�S��@� ���%����2�U�.𱛓�,�#5 �|��jC��5Q9��Y��-`3�xW|�UnCu���OWYh�l/��B���: �QW�����������mi%ws��lS� �V�:��|�SJ-ܟ��Ԕ\�!ާ�� �:c��U�pv����h)��ߟ��*��4p�H��Q�>�g.5�hc���C�E�4��x��ޥ] +�/�S�ܳ�.�+����&9�_�ʹv)~�@Nt�i� ��e�<�� wK�hUW��~���7{J�9t��K�,��7U�l�+��s��t��Q|j.�9FO:�Um������{~)�Vr,����I���ˢ���=_���xY�ޡ�d{���F�86��A=��c>�c�do(��c.9�B)=��"| +3�ٯ䠀'��4<�M�O�E��-�xa���E|��l�L��,Ih�6�3�*v/r�Ҟ�{���_;��ܠ�a�&��p��`L��Q 4��=�9L|�Y���:�%�\Jã�b��� `a��k����%����qI'��&��� +�x?��}lJ��g�b"���*�3���}���nMm�S%����dE\u�,�����i>�ԯ��CFJё�C��u4Uw����˰Q[��V����ܧ��u,��rek� yA�ۓ�r����yb��6�!g�V�po�*1'�\�Z��.)��d���/�S����8�fM�^me]pY .K�B&��h�K:A�L�37&�)�&��A��B+�=�UIu�#�����焴 �kdĢ�Tt@_��7�(=����o��&l�GIL�(�����~�H�3��L5]������ׇ��?���0��A��}b����\^�V�J�&�BF顙��h@~&��Z�˒J�L�s)y��%R��h�m�8��w�����ɣ�� �x�G�<�c��z0E�̓옣$��wl���o�!���n9=�1OKs/1���l��s�������s�ˆ8:�(ZX+��R�\d��i�Ej�}�:XԽ@�(�����ߛD<_�Ȼ�ՙ}�6X����ӡ� ��G�r�L�Y�dz�yg|�Oy�æ������IH[�>�,�|�Wx +<��5��sbf�����\P���+�������ߛ(�g��6�_j[Я�I�Kͣ�s-}��*�����J����."^z�H��ֱ�^-5�-ܦ���*�xhm�6GK�=ۚ̽��!��G�s�������xt��~���5�^�Xl��$�b�� L +���V�Y.MU�WW���2���D��Ԃ�A�˴R�k[ȸP�s��u>hlT�5A�kؤ�&�x���+�1��Y�;����ِ�Z6��/�R�����y�g�ju��2���dq�R@ .A��h #�� ,��5��5��7N�$�=Fѫ��_�Ϫh� �<��O#��u�-6�X��DI=^�h>�^�升��k�!3�!��:lJ�@*��u #!3��뢚C3�2r�>=cW�cC&/�&(�U���*;N�jg�k��A#�BxlۑYRq�,��曏�x�����h���K0a3�^�C��J������L�Z��F����54���m����=)x��)Z�k���$�)�P�IڝL�n�K�y�?���=��RD�r�O��@�'F�PO�����P���,�S +1c���?OI�����\���[�~4��|RR�OFJ�H�K��l�5�h�Y�x�����a=T���2R�_�(�-Ԕ���.!mm �}z��ud``� �T��� +�V�ኸ&l"�5�H� +TS���Ჸ2jdR�Gʁ;&Y�Y�=�. +j �a)ߣ�y5b�]`|�E>�++���{��(�<�y�dP��@�>%摒ӂjb� ��������ZrnZ�6� 85��nMM�[�a&��i� +�e��Z�GF��z����ACeSx}p��z�p�*��谎��bN̤����P`�� ++l-�����C%���������y!�`��g�|��.=�h�X��ףGLJ�� �Q2�7T6�͢ +���k�A-)�#�'�͕��]�F���5�U6-~&��~�olUNlU^)o<Z��;� +���B���@�� ��8P�3���^��g������LP���Q�kP+i��Үg|F6` �7�"��%����p���-��6�o�Uu�Wv��;^�q�f�>�Z<fxY�?���,������|��I#�u�&y�/��Ew��9�<��##��Cn 6qo��OE+���@J�^@=p��Aj)>%�}.���p�E�d�+�1'�ec-�p��̰N"/�]J�:X����� +br��4�,��4���Q�]��B�L�SqqS������CY�rrᡞC�M�z��=z�:�v�6�y?���>�r~9�6U���\BG����ab�W��<*�`b����a <2j�&�U���9�;��δ�+��?V(��f&�� +�2� +�*T�[NL ����ᕺ�ɩ]ɻ##� ���=���Rr�}�� +�z��6���O��j.���e�T��<�u��~\sP#���<\P�D�դ���\�S�?�r�W��.�Y<j�h%�'���>�c�Prh���<Vz��aY����h~�x���s���c�I�c���(௭Y�����d�d��� i�:��5�:��%c:d��-�`��G+�Y�b�>Ȗ^C]o��]xCX�5£����x�D��SM�GE��kYأa�GO^���Fbvh�� +��A քLͲ��Y��^-k8ި�c�z��"� ��L��M +����A������l����ܠ� +?4@�!dmN ^ؗ�^ �dk��=�V��Wk��+������h�>#6ǭ'"��*�B�"I����� +�w0�� r'�R���A�H��K荚���(�{B�� +����r|eP�!@ux��x�/�h�4��|�S���N�>�� �E|P�9!�/g`B���c]�����播�҇�yr6�?�S�O ��\��\����E���ȃiB�W���\�0]�\�c���!����@.؟E�v�!_��9A-x�\�W*���u!]yu��/�z#$�����1WG�ѷ�r��$��,�O�D�]s/Qs�j06FQ4gc*}p��-LjX�NrJ���!��jlbXK/u��y=��g���.qh���$�ϙ6%iSQ�W���m +6֩�%�燔��ʆ�c]E�[NHٟ.y�;�w�>W�,��S����YVv0�Ǖ�3������{��2��M�K�� ����0Ė�ф$�5s�N�Yx������Z���:��ѐs�zүc�����ka��S"V'�mLr`0���Hy�[QY咿�������th��M�xs��4� yy��"�IP�ӗ7�嵡�*H�BFb�]���i9����.� +��6�3�:|�K����qi�ehX���f���jY��ۓ�ʁ� ��\�d74' +�W�HG{������C=4�J�M,ҟkl���p�W��f�Jb��B�Ӏ�^����� +���9�Z�^��s����4���.�Ġ����A����y���v�9h�?���S� 9A;6�U��j�͢��f����A��C@������G�B��|�| ����e@s�^� �x���h����P^{�+� +i�lhڿ�P`~)�#�LJ�eb����!ӝJ1Ӿ�C����Ev�iH�(�1r�GmMkX������yb�b���H�W��C���ߛ�b��"��\(��R�G����!^������U��X%y,;荠V�?2U�M<�W��uB�\�GI�y�ԓ�/���?x4 ��f�dg��ᒇ����ܛA ���C���x��]��x�l�UI͵j��} �pw��z���Ѱ��鹴����Yb��)����uh�f����)ب���Z[�j��+�� 7 +����@o6'��k����&IUp���haQ�ט�?���u.Z��x��k�" ��Z��cᵺ�tfx��@ʵɉ��Fo��Pն���c^}u��=Z1��˿,@�$ g��{�u~SӢ�XQ�_ +�f�i��lK�ǵ,\h�����=��v�kZ�ƆQh��x�f�x����R�!�����&�6���\�y`�v�k*oܕ�pV22'ˤ���`�d������̡�%^5%� tgo +��:�~{h��y,�!�W�� +�IR�������8��eE(��sÀe�*�#cü*v�W�'\"�f����Z����DT��]���۲�О������4�IFh��<^�O,��Њ@��اa�@�8� +Y�YU�|&蹬 з#cY�����e�~gw��saP-d8�l��,5յT]�Z,c��l�/�p���SE��K��C���qY\�:���`���SK�������x������Q�7'�ɶEN��R3�� +��4������Qs�G�xt����3����|ҡ��.l�l>Z�Ԟ���.%&ڣ �W'ãy5 oC�)�#��{�7A=.ëB�@됇������گeWP�����8��� �1�����h��`����ғ�=jl�KKʄ�G��"Α��pmM��"�:����_�]rF����)4'�� {�W� �P�C&���>Z���l��n����Ȧ���7��7$M�k�FP#�'��換���u�ؿ̥Y��)��+���&�^@wi�+B����&��D�QR~r�O_V�1V5{ �S>c�D�\����� +��6�wkwZ�s�{t.]��i(�\��_Ցh.�#���_�%�NM��o����T ey��Z�"#�RT�OM-�cUT��I�f>.5`U��������!�h�R����>\�48u��0�Z�0�OЛB!ĆG@[�&ƹ@N�O�b\��L/`^h�~@IJs��"s��]b��$��^�&�oOL|`Xv��mh����Q�r@� ?���м�[�źT<�9�R�*.>�f!�����uI)�^�ĺDMߚ��o��c��������\"�:d��YR�}N�[½�-}����Z�RrNtB�F��Hys�ϻ�\�BHw���D��5I�k�+t�o�P�}� +��L (��M,��z�� +�u&���%��@/ �(�~1�1���.2����!C=` +�Z����t����҃:l�Ò�"Ax�&ꓓr �:�v+�����r�F�����|��$�+���_�3CZ*��<B@G�A��E �O&�T����P�@ς�ה�Lȑu��lr�8����N�����g���'�O����k���:�d�T�x�i�Zr�1������"��X*:u�W����5�k�y���%7�j��m����r9�:��x��Q��hȀ�V�T0 +�F��6��ؼ4W�z�׃F&:`����$�Z��h≯� C{�c����*�ë� +��V0r�A3��� ���j��x����T��U����2����u�S��/��'&�Q͉�~�h�z�x���d���+�k)�^ 93������|�Y�V�W4M� �v�X�C#��>�y�5Pzgw�t{�f���=OIv�b]�{�웝��{��W7{r.�U�����P2 +C ?xd�$���P�r�jf�{���Z⣽*!=�1�R6̽@˰�@�>H��Er�sm�Ž��`^[������ �3���bܠ��rR��,6Bݞ�;���$�}���U���x���#���g51ӱDN�MS��� �}(@�P���(���s�*�"g~4�@>導�<�O�*q̑}2j� `����s0Y�`�?��g��Ri@�� ���O�"����+}�]*z���'��ư�/�!��|w0�����u��LG�t�<��`��G��B��'��!`���〞� �H�vi����R���qjxĽYZ�[AH +�� �S?Y�C �8������ͥCgQ�y�5�Z�S�����0��?@�nBj�a�K |T��-3p����af` +b�m�ƥBG���ch�\硩�.z��\�p���z�Pf�:��A{h� k�q � ���A#�(�'fu�<�[!������7U�/y����0 �s�.-�Xz_�*ޜ"�yUUu^mY��<-{k�(dd����Z"$[A& h��� ߞd�N<ְP�9|�_��* )�Jz!���p��)�R��K�V��1i�8���q��i{��#�6����w���W/`�LB�_�P��jh���}���\ry���>M��B=tNc#�����Q�Koѕ妌��{�/;gq�3�v���ޏ|�����l�k�"=�`��:�h��%��;�{����]�1��u���,���Qxi������w��W�w&Ko��>t.��2\�WNL�M����Qƶ��m���� ȉ)�E�+��c +��=�|���RJ�����y�3�*�*��3�s�3��ʩ9�l�w �Y &�"|\�o�ʹH�;�=�.�'���~�3\|kov߹�~�R��*h�Ґ2�31'�Y���ye��#��P�J�$�אGy����ER��D7������D4�R±-�3� +V�_�,v��cl�܃���5�|�3�}a�ĵDIuΑB2F��z�#x@��C<<�<�.�r�M��c�!���D/�.��}�x�8���0оYr�{����:f��~9��+eL�폣��q1�&ʻD��+X�0�O?�'��Gs&p*9h��O�����IN).��/x�О��2u�c��u���0�����ⷦ�/� +��5qÉ�M +h�y�e&6`�#�*J����0��j;�����|���NYYx~{�����#�e<@?�RT�_�O��R�#�7����9j6��u��.��`�������_b�@l��^E��%�p,��X���7�-ڟ�&�g�F<�N��;������Lr +��U�����H���ҁ�cÿ�D���A��&F��c�ة���c#좩�������(9�2L��Ug��?��2r�3�(��ۃ���C��1r�u�q0E�1��P��s��)h�P�m �B��։���U|�;_�һi�����9<+�}��9�~�Տ}�7�}��s��Rt�~�����$�~~�(}�?�u�������ђ�[��XE]��[��w�U,�{� ��P����[�g��V{8E 4!ӳ �9�D��f�r;������j�������8�ɡ�?9��;�91�a�BZ6�-e�A��攎vP̈́��y�m�P�N)-þ���)�s0<z���;B����<=��zy(�!Q�)B�m��?�z�;����Y��z��V7��g���&���{��� �)웃1�)��O�)����(y$�N�e�C�U���F7�������vs���vu���I��'Kߌ��m�]Z�B�� ��h���/��-u{��α����>���z�:�|f,`��1�x�3�|�Z��d����R?������SMS�Y}c�/�il,��^��> 舐�U)�%v��0������>��T�qz���rc�Y��81�+�'���i��N��c��ꖬ3�܋��'�)�;�lW����T�}��n�ᘡ�@�#�փ���Zre�y�2H���䠒��E���p�!-9���B>��B=���٧0o�Rf!��,�- ��k�(�����V_�-cS�oꪼ�6{����6�K;��F��Z��v/��j�����u�i�³��e��j�%�^o���^�ʹ4#��z��������V��$�������~ܓ���;������+zn��n��2�R�#{k� +b��ޢ��I�k���jkƹ�A�ӭ!⻃1r�}��;Pt�:�g��?�O!��K�Ί����-y~�擡Z���]�,�i�@��N���@_ۧȱ�ib��0�g^��,Vrf�%�>J�Z'��J�����~�6��t�R��F�/� +�����bH�3,��)Pk���BZ&ƣ�湤 ��xX��������sˍ��-ſ�[`�ot���1���<s�t�85~o�do�x�5�W�����_�B�Sʁ�C��9�1owFawֻK]�ԧ�<�|�O}]������+[��ۺ��srA�wrA������6{��L��3��g���**�Ϻ���f�1���1�[p O7pOw�I�K�3_�,Y�����F���!��F�Z�)�����Q_���z��RE�UC�u@������<5�_Y~�w�Ԑs�9��*E�.X�c���jj�Ӝ��^4�f�3Ss��EA�W��ȿ�4�W�����G��(~q��˱N���-��;Zj+���"��͞��>)9��y����J��[#�ȕ֒��%��; +.�˒N��2�� [QOF)Ol�����}V§$�;K���]YkM�Yאpjw�䡦9�c����i�9J�Nѵ�����ڸSC�'������3�^B��V�í>�CC�c}�yK;������/��/V�a���t�$;g��j��=��G���f����<��^r�����n�� =�1�H����t`� +��t��f��y~�~o����>�W���Y��3�V�`W�5���+�1T��2T'�Z�̿4-H>��C��t�#��ŗ�z�o�����-��o*� g|gh��mw�j���7/ ;�X�� j���%�G�F�����Ӡ��wG���}��։r�ΐ0gk���VxQW��6���2��)a���)r����qԳ�!��]��������+������q?����w̢��Z>ý�.�ǽ�>���Ttq�����=�{�W���a^�'��VP�{�'۽�w�-��w���ʒ���GX�ȽYn�M��B��-��l��\�~���VWe�$��kȿЎ�:��p��2��$5��\�����O�Y)�-w��o���~sL�bm���4��/�wD�_�ʓ��圛�E�����p�#�x�5a��䦶!��A�W�������?�!"�1�N?�ލy�f��ֻa��[�斁�l�:k�(� +����pgR��w^l�Ғݲ�ʝQz��6��I��?�P��«��g�+���h�������~�,���{��fP�2bjH��9fh)�����˭����M��_� ��X:�nyf))����Y���ocC��J,X�F���|�5�}iw0뢹)�#��w��т��m���3�{��]tMS�tZ]�ݒ(�kyE���/ks��s����Qpi���8=�� F�g���o&(��a^~6)������I������ ��{�ڌ3���SҲ�og9 _NR��9/�<�EJ������C��)^���9>�פ���*�����v��mY�W�v�ke��z-�1�-���t�v}�9��jS�%ue�Oʲ���f�6�7}%��ǖn���!Z�Z'���q���?#x�1�׃a^�v/=��ucg��3L|�3�~��_rk�����5�7Eu�iyE���3c+��f?��Z□��&��8�6t�?(1_m�c�n�#uu��,�e���$}�X��&�'���s��%�F�ѧ�h�3<��4x/eU�)M]�O@�M�#�d��J�q�S����yZ�VO�.�{}E�V�r�����}F^���1d�]F+�͐���W,�{���˫m�{ _ޒUe��� �Ak�Ew�H���k���3���K��Ĉ� f:�YKe _o�!�`W��S��^k��_WU�[����<����� �7eu�>j�����jᱦ}}^�uJ[[pn�}{I�w�w�M=��A|�;�QrĿ�x�_i���?^9�(}��R�.����/��3ZAY�FΗ��6BN�q��xj���(���7���m�^��D��UG�`�+���ŧ��_��S27��^n�����P�wkF\x�9'"�e\�k��{�� �e�_3��./}m��dL�3�h��n���,�"��[�~�h��][�u���oNH��ʘ�)N�Θ�ps�����a��wAS�uFY�pJS���k�����ml.���'?�W ���aL�%�Mp��y�d?����X ����c;�����ߧO�>�{�� j�g������ű���|�����i�ܔ��)o?��D}�,K�r���8����]Ew�����_���J�>R�Y���k]��kk��f%}уy�ɢ(��A^������ ������By�YEE�%UE��^����������k�3�|� �R-��aB���xK��7���g�_`�O;���Q�?�~h'&]��ڎ~��Vz}��`�u_��ҋ}�^��O�k_5w!��}�7JM��'��ƿ���R||P�O0u�_��&��;"�mq2V;�OuMŗ�[��mv��wbNKRΑ��c�w�6FM���~���>���87Ny��J��������i�����}�WlS�t��'u�a��) ����1�N��6�|l��ENT��FM��OK/=U݈�?'J�n^��vOɣ�>�#cs�cc��Վ�ۆ�=cK�#ל�|0!(���>14g�3�d���|Y�s��� ?7�b~l�Ɯ�:��F]StNU�yf��U]��0�������J1�7|������:JLtNSS� ��O?4�D}�(��T��rWɣ\�Ya�����1;���>������[�9�L-i�G��?5�d\s-��W:J��s.l��"V��Q������6��5�/q��~R_��g�, �%�p��:�GCm���^�-�6jk����ɗ�����a�w�G�k��-�g�b�O9=�x��u����'�y�9jV��➁�z]Q���"?�]U��km�Z�H) ?��{C���=�T]cх�ʌ3S��_gD����䋫��,�B�`���lH�IՐxZߔ���Nⓥ��ߪ���� �� ++_Y�wVS�u��>�7�0������,���-}�e�/?c%�����p�svFJ�v���w���\��|��.<��J������5L��}���K�������^�c�������1Fy���H�c���웟L�-}�{�欟������s��+3�e�}��O�i�����͗M�Hdum��[�Ws�[.ʫR��<�t����Jg�~f�O{��Cmy�}��� � d���i�s����x�]U}���:��)I�ͽQV����b�~k��xg��m��tj����-i���F'��� =m���>�����^�QIͷ��<5����]� m ���Q�V�pOg�٧'��ߘ +~sN�_9�pq i���W���B��W���'�{A�pz���*��ז^�k�)�>N�Q7d^0��;����0��{��z�wJ��#�K��n�t!_w0�~�ğ�&G�K��`&}9�I�j����5��0;ㆶ� +s��g�~�Zo~��H;�� ����ٿ��N�'�[kc��N�z�Y��_�6&�{2P��,�UE4���O?��?�r�7��u�;���AV�u5�擂j�`���N;�o�9?�O������J^��mD��/Ͻ�Zba�cظ]� �qB��(�.������ޞZ��͖�|��?LMu����Jެ�]O�E�>�m�U��ü�w�ܷN�����I]E�w������V�U�twT@���I,��Lm��$/�t76�_��ܳ�qJLX%b�����Q1lkX[�&<7��74��(f}?Έ����̍�{[Ô$YUѯ�m�HK'�]����^����IU��?�����9�Gx����^�=�#ko��cj�]QWd�8�O�~����#��J���PY����BU]|[U�sV&I�F]���n/�u���hF�T7ß����!�Ks�e�����.5`�.�3�SH�\���#+O�QU�yi{���kB�Zk�>�$��Ľ��ǽ��y����DR���U/� �%j�.ȼ�ib�} +�%D��(�� F�� �l�,�}J@���]$=��T��ˍ��s��7����Om�c�,�&_�l��T �>9#ߵH�?��=�t$_Д?�t�-�R@&����U�]��Dj��-f�������N�o�I��rϛzI�U�ߎ�Ro�g�=hl�u�ٗv�ҙsU[���j[���A^z:滹����Yj��(���}�Վ�[���ݹ�Ե)g���ǃ������͝�g���� [�g�ūC��s�yW��7A��瘹��l�<�t<����+;����>]Է�P�ݖ��Y�g���/(���lv?�,}e�F�y)0����;^�x�������W�E6�`�v�y�<�%q�Eq��S��s��ojrK�|�2HA�#^����]�I�D=�� )�[UC�5+�]~����@? .9)�ҟ~e{��?�+rψ��yfc�|km�����{��� Y��U�?�{T��f��5F�Ny�Z�)s̋I{��;t�v���k��m���6�E���� r�������d����.�"4�Ջ|�k*�}�q��O���-��G��\_��;@��&El b�������}�P�~z����=*(>~iQ�vvI�qV.N�a���9��_�ľQ���� ���F��fēO�J��]^�����c����EN��4>��d����:����9NO6���?��Y�0��M��!v���#m����1���%\��%I�s���e��;�oAMe��EԀV�s+yd�R}�W^.2u�>Z(O5��\��zs�Zĝ� ~��F�>��z_�uh� +�˃�Az�u��;#ʾ8�N������@ѵ�������o\��g�i +�]B���\'�S�"-�I97�|�}s����ܛ����yV�����Δ�R|�e�Ֆ������o�g?�z�'��c��1IM[�'F�!�}=[�a_d)�~�G�0-��Mלy��!��u�N�Z�hTw�`�R��a/��g3���.w�]^.y�>Pr�3L�����nZ�[Z%ޙdf[�V:J�L ~�E|�;�~�P�y�nR.<���wn~0A�����ƼXYzZ�����wN��g�_�������E[�ʈ{S夽)^�K{�4�CA�>�1�m2�����.�{���� + �y��?����f�/vG���<��ZU�KN-�)��W�4�U�U�%i��� �x\��$9����{my�=�P%�6�/tL1��Rz�� �e��p{�� �]؝�e��������_nɹ�1�yݽ�K���2= +vg���>�N��sUM�ۀ�l�����z�����������u9��f� ww���i*�>)L�n����6��Z[�í>�s�4#cu��N�\t�9�G��"tM�?Q�}9ɋ����]�g��v�R'k��##?[,˿�gb*j�OJ͵N�b���:S~��5�f��N��SB�}��gb��+�Ό��}>��;;ɍ��{�QΫS���;����&x�?m��b��)�`�a�E�9�,�/��;��qH%�|9ss��c�$D��d�-��o� D�w#n��^o#��<��-^Z��������(-~{���#�r �`�[�>�{gUִ�M��9.��]z[�>묬:㌮��u�� |2g�*�� �m��cfYz�� i��s/�Q�7�Y����af�����f?>�Y�m���1�t�__�J�uJ���.±����2�]ȧ�y1�:'@o����w7z�nZ� +n��`��J&l@����}����DZz�K�N3^}1�|P�~γ��y䕒��r�u��j�?AMX�@�T7�^�7�-��M݄��A$ٛ ���!o�Q�7�s���B��>~_�#v��� s��=Ĥ{�M#����y.lu��ԋxd��^ъ�+�Դ7WN��jt�S���ikFH4w��6��]\�˼�oK>�nL�ҋ+�I��#�)ի��qJ��9!�>�+�b&m��#�ݔW� ?-q�wm� ��^q�r3��j��f'%rw��l�"�e|�d^���\Ӽ҃1N�u�s.��켃J����� 5rs����oiy��k��'{����Av�ΰ���ňQV�.�v���'� �~Z�Ruѯ�7Mm�h���q��p����;Ɩ�_���7�3�F/���.�z�S��s����F�LU�a>���¨/ ���#me�^�?R|gc���� *bo��◳J��4mSڅ�v��t����I�J�~:�}/1��1F��S���uM����¢�ok +^}R���3D���gۣ���]�7���1V)e��{Ӽ��I~>T�Y��C�p»�ƄӪ��m�t�B��Ɋ�h�������#w&�q;3�؝9R�M�FZu��҆��Yfk���ڋz�9����2���@���Z�G<��b#\b���䚾�༹���f)�#�l\���P�vng���QVVz��e����A�]k��Ś��֬'�%,���7E�U6�_�)�j7��.�cJ˲�l��>��e8��\D��r�@�8g8���wű_Nq������jH�z0U}�T��#�t�L-o��83��Zzm����q��+�yWvF���^|����L��a�6�^��P�d�Q�f�X��E��QM�����ѣ�i݅zd���5��w����QR�ш��aR���Ѻ�t����Г����踭 d��$!k�R�� �6�j/��;K��!%8�kE{SՌ�aa���!@�_�騟e|��rm���҉����8��1�s;b���`hA?X�<3�"�nO��s���TP-����o�<36���q"��ܷ�J�mI���b2�QH(7�;E�$M=��,}�$!ݰ��P�G%%� ػ��������An������~�^Y������m����.JU��o,�3�k9/7?�Rm}���ֲMYE��zF� \�i����6�1�Fi�1Ͷ�2h���ZgX����k��ͭ����F���"{�����Q���,N^n��h$h�����zQ��bڻ�����ԣ՞�;�Eb�K�bztu}n]]�M&�+� +nj?��h� �ͨ���_7:a7v��/�ä�'�_����<Yi.K�5��CU��.N��<���)�P����l.I��Ӝ\�4+cw�_�X��Kb�}�_j �Zo+�n��z��q!���i:�km%-�=�R�*�ZzJ�����6���٭�(;����g�n�D���^��;Y��2P��ؚe�vk��[�9ՂH�Y&&]�����k��˱����(�h5q���W]� ��c�s�B��C�͕��q���+s�s��� ��0�V�i���6 ���(o�m�w���ˋ���5��7�F���˪���m��G_��F����n�[���BK݁R�����n$��{ �$�C��`��>�|��y'�sE.�����Hf��{s,�ϕz鯥���1�[���3]3M������y*fm���|dh�z�#�G̲������)V�F>�/}}�OmC�����:Y9��h�;���7Kì�!�{I�*��nB�VT�9^n�����'J�K}������k�@N���� ���cظgČ\��~d�_sL��&Ŭ f);��č�7S�����!�n;��2� �8�OB�c�بc��)�1��N�O`SO��{��}|��<�N=$ᖌ�_�$X&h��]ذ�NL���3m��/�������ȊkUEg��I'a�!�?}8ƈ +=�I9���|2�ݛc�O���?� ���w��~m���`�w�U��I.�Ѝ��<�Z���b�P�������Gp(�~�^/��FCQ�Ţ�O��n_ݿt���qJR�C���:h���Y2�i A�2b�t{�[Yu��1BɮF�Y��M0�n����*.���`B^7�ƞ�&�8 �8���qXȗ3����1�����Ǹ�d�]EE8�l��&vC��|tS�i�Q`l&h��������� +�nt�]^Nؕ��w��~|;����Ջ���'���ڎJx<�� +X�f���r�����yk���9��u(p����)�Y�%� +n�]�V��\��p6�ӻc�_?�EE���}>��:CL; ��d����R< �>_�sz�oWrp6��1��]��v�}Z���[�o�z!�6��)~��H��v4�+�ى�I��D�?=q���A7����Ӡ�W.�r���6�)�~4�m�{��s���}o5ͱ/��(D��_i�X2��ۑ�c]jr�U��o�QsW �jp�$�-%� ;�OD�9__���G���_����-�!�-�j�o�7�0�����Vb�e>$�49?�d~D(����K��/��]�zp��ӿ��? +�}�x{��<墚�ywOCȵ��ņ!d�� =^�� �Ŀ�Gd�����f%�,��~�� V���@ٟރ���^=�|������ӧ@�πX����07���F�u]ٓIF�-U%��\=BZ���N�ߥ��IL:�J|����CЃ��@n���xp���*����A'@ Х�O�>z�s�� ���|;����%vyTW��b����H���f��9=�dn��c��߀�߾��}���&�0�.\��v����s��r"S�B^��aa5,na���t#�rrᖜ���Q�G��zx�y|j�Ipx�1p�W4�(��������7��.��t����GW������Tmy�U]c�s�$,de��i��~3߁�<·<�"�]�.�;��9Y��� +��)�����˗@�W.�]���ǟ��'���^������ /��G͡���N-��sH�����S��1��z��FX�5xd�oȰ���o߃��]=�rp�(��`�/��]��~t��?A'��������DI����E\�lM� +m�j����X��������>p�ELr(0'����|A/n\}�� +|��t���S�@��cܿrt��� ���@�������559�V�ʿy�Ɉ�X�{<ᲈ��8��4tc����#̊�ȋ��K���q�^{�.��v�2�4�������* >�N�qn����E\6?�)�D>n&�]�@�� ��B��,�J8��ūc�/\]����k�����_~>�NθX?�����v%)Ϧf�����3#�yWM�P �k�����и�cё�R��^ݻ zl?���>>y������\E�yy,���.���vD��8#��B?!V߉�&�F�R?*���� �*$�<'�L�kP��Ч�OA�\]�����ׯ�|._������Eз�OA?��l,�~��E/��b��� �^^�X�S�SY�yFP^xV��8�JO;�����[��@���y ���Гk>�[.����s�&�7A�^��ѧ$\�c���o�S���s�/-B��3W�C���}�B�n�E�z����.(�����������7��>�+�.����E��t<�����yq���P�;bR��:|u�<׆�lh��#tQQ����BC�%~��{���5��mй��@������w}A�ϝ��(��鱌�.�02��2J������r�i&Ʈ�����b��e�%u�7UВk?��Ly�����因+@._��4����y����9� `��o�ݻv��s��=�7tb�UU-��R+�4�ijʫ��݄Hc)Tۉj%�܂$��~����M���A>��^9�'�A��\�p���� ���w�|o���*�?� ��c��s�[嚦"v�\⚸����^����#nq�ihl�h�Ǣ^���-���=П�~�>{8�-г;�A��Lx��1#����t��"PӐ�d$�T�G����ռ�n<÷ I�݁c<B(��Ie�²��'_"f�_��E��{*������ڦ�k<�MW-��jK�J����8�F �"��S_!P�j0�v��K����D�\*��>�IM��N��@IJ����*ki���إ��냨P����)R�ǫ��# �@-�M�Xɹ3V#�iք1����첫qYg +B�O}��=�q �����o����"$��n���k�y�s���� f�Y�G�&��V�t�]���b�G��Ƥ�U�)IE�� ��'?<yz�`��E�����^}8�!�xJH�������CL諹6�w���d�dإL�Gͫڛ�8�B�IY�RՔ�5��軅��|��D��[P� ��~�K^E��~ +�Y~�T���fP?�s���5���v}�U���Sl�e�]�:�/7֡��ؑ*��:2����jND©���は��9~��+��g���%Ǟ@$�l'�c��h��"!e��\�g�~|oA��4�+Pu?.\�K��b5a��EW���iiʒ�/�����O�^���E :~*��c))g(���:B����-��n�+qf �d}���m��2t�c�&��6v|5��&"%�L���3B���ŝO 8���}л�~'3c�����_H��;E�+�ąt11����bN���β��Y~��<����%k�TVdUq+�{5z ���{����B�_��D�r#�NF~�z���[�������Ig�P�X���~>tK̆���M��mʛ�6��6YG^����P"�͘�#\ȳN\��Ŷ��@s}���=UM�ʄt������m*!�6�*���*|S�,3)x�)�$cC�'�P���M;=L���[��/�� +�G;�s �ž��>r�Gʂx���k*i;2J�Qn����K�F͊��5 �!����b7=~���5�[W��n,R�qe==�����Q~]p'��W]Vp��?U)HYj��d UNYC�S^�u�X�]=����NU%ci��<Ӂ_b�o� ��By{u���1W�֔>Q�%����䳾��M�i�ƺ��m�P6�__�"�"Yd�E�(ޜ��.uB�Yư���jY��D��b&��3�5V���d��6g��>m���}���.����<�_[�<��ٖ`��jJ��P)��k����]cﮱ����n��4EHZ��DH�+^J�H! �(DF�Yzy��.aCl��e������~����lb-�5�,���l]�� �ݝos/�: �:� ��ٔSrF���$��py#뇱��hv��J7P]��"�h�I�MԀ>@wq����v�dke�z���8U�t�x��gy��g���[E�-aC�GX9&���)in��i��|]$D�N��U�qw�v~�������4Ou������^a��X#�$m�(���AX�B}e}�����{��lpNS�;rR�M�%�J��YQ%X�S�:�ʏ�j���0~���*�L�x#zv�?7�������?�5<�I�A�wA?n���~m�L��m���N����$�$n�`s#�-yWW��®��t��ĭ \�Y���G�[e@�JI�N�kVo+��w�V�g�eb���3+�1)��-)1}i�6��\�@g�Z��p���RUq��z v��->ǭ#�lI1��rZ�SUߴ3Y�u�x8���X�� L�*�C%�['��A|�z6t���1��^���*��x zm�W��G���8n%��#����=�n���{J:ܡ���Hif�ds���RUR]jӪ���j����#��oI��+c؈�1L�i���5���HY��^V�|� �*�r-��t�iV9��&�Gn���e���9�Ц�`-2.�9]�b5�����[�T-ݫ���UY-}v�17��[U#6e����ܟ�1 \��jdn�*�u�Jb�M��8f5��{�����5ĢC�PR�L"z����U�|��Y�w�*+�e�91�`Y̆��u��<3��5&�=Sٺ7ߪ��UwX�B@s1<F@wi��U��v�1NJ[��ߑ��N]m�R�%����$H?��X�R�[J.uS-��rӞ� ca�'�z��&��+.��ʿ�C�mbR�Gɂ�ʙ��.ӥg`6GJ?m��ZlO���Ky"e��\�������9TQ]IЖ���,4����SCC,��Lpc/J+�n�H G+�n�LM�Tc^�Y�{kM�y|��Cp�xu�o�z9ۓ��>�f�j6�q�t,ܮ��q���iR�S�M�K1 ��e��K��\�7�5M}YG�C��cW7u9U�R���l�E�6��ږ`�t�%�M�~[#��$&ơ"�;��,���������= ���-���1o��r�f1oK���ab���,yS��7���lU�{��ס�vD�x�H�{�X��s�V:;B)f��B�{���.uc�C��l����O�7��6'�i�jD����#�$9D�7p�ޞV{:L�e�(`�=�C�)�諛�U<���uG���ԕ�]uu�[YIsʩ�����M8d����j\/�lKe;J�MF-ui�9�3�VЃ�/�aJ�[���ґac�_V�@>&�k��)8��@F��+�}�ەB��\�xo�~�2]�n��h�k�d�b���nU0�]:6no����[�֭��<Ә��9d��4>�*�&�I{�l�MN�py����������3O'8���.�GC#����v�:�3Um�Jr�c�W�^���,��� +[x4�並IKc9�.��c6���nC��`���-�X�- ���և�����������`��3�Ou�iH�"���*��_4Y4�"qc���0��5[ӵ>EγNA�u��C��f3 ����z3�n�5���Z4ݘ}WS�xe�#�S�J�I��d��LU�q�:ʋ���а��Q���#E'��� ��Ш%�bo�Ss�Z+2����D�$����c��Rw�,��9V�a�5�і�(�`��q���dT��Z\3u��j�"ť�LV|�M�}�)|kA"�^��dL�|'={������m>4�)�>�� D�V?��RO����~�P_��4JI6c¶E������%����#�~�E�,�����j��� ��_�\����v>é"��!�V�JC� �=�5�6)a�$el�V�s���Ul�M�C(��!��=�ȟzۥ`�wČ" V,"L�MN;�\*�$�j��{kq�2.Ҫ�&[���mU�� +�mK���"r�l�E̥��� x�oK���IB�e�ҝ�|k4�M�MӶ��xT�-^ �R��V�Ъ �&�6:�۟v �NR���vڞ��ݟ�����b��y�\��4�l����]BG�� X�L��$�Ȧ�v�B�E�D�Yh�н<�#C�y�x{v[����ѐJ���������ĵ��Ӎ�~�QL��4����'���H%��|f>m��&����Mbp�Y�L�[nP�zJlW��7��ޙ�J� ���y"�`��7I�k�Ĵ���F����΅��b_�!��U#�=Zd��=HI�)bd��y�a�-h�E�N�V���*t�g�T�7[���]�Y�%95\ʡ�E>4�������Δ���ק���G�ZR�S��o��mRo�2�cD��&�ߗ�������qx��$t[����8��X��WV;��<U]�%~��"�:˯�iX��~T�CA���D��F�iy�] ���g�=FA��r���Un�SK.q��%{�-�c}ߦ�ٖ���Y����L��w�J��^���p��R�z�v���_��ϮɊ����g��i>s���ڊ^�FQ��'܌O��#�y%駆�=�b�<�'Y%E_�#iO�6P�^��k(�_K�]j���L�]�Ir���.:ks�5�+��e�F��.)�:���C�&��c�(S��Ό{�1p�MB�Z��e;&h%[���d�J?6lg���b�:�t�EB�����t���k��l�+RM���� T�y�IJ@��0�A�������PK*>� �݊Ҁm8ps�}s�-���AV�����ui���o�. :q�P��܇�;0V�� Uu-!צ���a�@C����uZ�`���B�ȅ��{3���骺@;ټ=UD��$4̡�>���>��L�s�k;��� +�.%icR���_Rj�y?�����Q�����6�ÀNC�-p]���$`����HC;��2z�i���%a�?���W�-�Y㶸���Ց�s�o7Gq����� ?�VyT<�[�B:����?t�)�Fqa���Y�֠������v%��h���k�#8�g3�&rc�V��U�����lO���s�,��=v��6CF�Ғ*��ߍ� 7Ĵ�+���F2�!���F�A�&84<�]�'��0yn#��O�/�� ���\��< 朦c�*2�;4𮁉?Zd�~αhn ��|������(�9��n +t]T�Ů��;��#����v��E|cw�Q��T �*&dWM���PJwF�;rV�\�a��S%�y���]!�9��]o/��h� ���C����γ�/���NQ�7��V����f���+|����]c����w����Z��?�封�-v�9�2X�a����~ M�;;�c&��7�>��ɾk�ʼ3-H�a$^��|�Nӕ����P�?{a�Ϭ"jɎ��v*�]%�`g�ԓ��<Q��� v +`ݩ&���]<zO�v*�a��y�V��?��L�S�г����p��e���"���P�R����QT��1���0*^�Z��U��%���?����lz�3�K<P�K����fx���W��=ٞDD<�~��kS�dCk4�YBEmN�3��%�pG��p�ɥ�)R�u�u�SJ-���� xnCm�{FPe���"\�Z䓚{�5�L>�UV���PSʭZ�>�ev,䞚ߖ �MbTڎ�\p`���[3wA��s���H�N58�".��9Z��<�L���"t�c���3���IIY�����\�"f��Ҳ��c�<\�����茟�u���&�� +��щf1!��@�5�Gٜ�&l��S�&��&`�Ƽw���g�������!X�u�����j���yu�K�ۀ-p�� Ya�Y���pS�����$��t�|���p�T����pQ��sE��1ʜjH�j�kc[�s���r���#��o��l�p����H�>�hk�c����i +�:?�Oӷ�ҭ��f���ң���<��R�=���OP����T�m��'����0��]l�{!�G_Qp#��2_���St-��[�o��H&�l{������NX�%�f��������>���#���yF� +A��lS�uc�?3��uS':��C��rso�X)����ӂL��2��&P�rz;�Eț��YI�o9%l�YB��A�Me��)�-�>;����Ce?�¤�N)��/@��j��ɂO��t�厨[���+m��wŔ"��Ћ�潏�H�B�y4����5���b%z��썸*�����A\�M7��ׇ��+�/6:�_Z���n�g�\�M����*v�4��"� Ľ]J,��E�g�%��d��.�� +�w��]D�z�Y�C�_�$���d��8:�2 \�+ T�j3�:��\�Yv��5n#��z�� "p����\U�5�8�<P�9X�����lU�]F�.w�|7U�,u���u�>�ɼ}���g��{Ts���t�����4x[��!?�JT� ������QX�m�������� +���9 X�G��t�;�)��G�X���ݪf�׀�o^���C��������qt��8.١캚�5-OS_�m����u��]�n{�I�r�'�$:i�H�y��<���R{k�yk��-�: �_��m/�&�)v-aS�+��l��be���P"v��qv9>�m�p��a.5 }�Т9X��q��p; +d��*b}����Iy3]�φ6b�C�1�P��:�l�KN��h��]%!�&FD.w���c��t��[l.yc�lu�?lv��Д�g�/�d�cSzj�^@S_�>��{ph�i�+�X�� v���1Y�/��1T�qO�e�h�L����t4��<��-�4BH\l-}5ې�`�.��i����I�R��n���ߏ�2����u��24�ܗU�^�'�o���܁/�� �}�o����� !)��!8CL�^�,};_��''��=͖����x������ϭ㐘}������1d�����f?<�:�����mb�z_����u�����G5��X]�qs���sag�ܨK���;��_�G��td?;���{N��9��pvD���C=�Ea�� ύ-a>��ُ�E��QL�r0~ ���V�x��Z�,��F��.|w\�O�g�"���"�c�^�j�µa|�^X�@�M���&]����G���� ��1ls���ދ��"��$t�} +����~Ȑ�iң���������j(e{zBѾ�X�Q��=�ϲ�~Z�K��ٞ~O����Xe�=���!d�uc�@�mb��{`_tU���J�[�t���Zn�ȡ��聎G�)�0�� +>0�\:�`C�)���5X����)j�C�K\�*x�Ԟ�gAC�bx��P�;�0��Ls��� +�炰mW�ʰ��? +d�i��2�o�J Q�ð�o%��^?�e����=�2�o��E-��}t�X���V�kVX랯lt�U�����iH�$" +� ��xĶ����XV�;�|�ެ���������⇡.��Y�aV� |��o���al��:�g�%���@�g1?��/6�Ρ���7V�n��I�_��!��mO��9�s��Y$���J�mOrf�ԍ1\�Z��JG��\m֓���7˃��Av�J�rc>ߜ}OW�q�P��H'L���J�Yj����AL�B�A�"ܝ)|�y�ؑ�h���1��K�-q���m%�#��j��#@�����=R�i�)�� ������� ��Ow��E}�u�^���0�I�����O��w�ԇ��4�C���Z�B���2��G6����3_[�rg�� �2�϶"���d�lS�͕���v$zs�$�4\�Ӡn�+jr��9�O<Z6��bu��4�1�����fDF����%%�U��>�Gy��Vؗ)r��1t�E %떚�~g�!����6J�J�r�8!���>2jO/�Z��xfD^����b-x{4� ��جF��F��k������������Ro�HQg夰?W����vHL���'�EO��ui����WZ~���WHXA7=:2�eh^�dm�0�� +j~Ns���ɲ�;������@�Tҷ��9uWA+Y�(y��'�R1b.� ����?9E��5V���&�e��t�3�����;�������L����B�ϵ����T�S��X�Ԃ� |�]E�x�L����?3��@K쩐))"î��,W ��s�5�|�7�o��,F%9����9ަa@-2j�S#�\f���|���G��Y��9�\�b{�����`{�\`BF�*o�T'���B�p"o/�6 ݟ氶$L�� 1�{�G�Dɐ_d�E +�`��1Z��4���U3PKc�C���9a�Pma�\�7E�:7��:�1AHa�?�s���G�;#�������E��c�`]m�}/��b[�#}e�y>Ӓ�l����\[�ۥ撏;���Sa3�&��[�䴿f��������ҙ���m�����z��:IL���mtaB]Rz��0<h��Y�+xXW�7��=����~b���%>��i�07�@E)14$�4��9A���@���җ��>��:<�IO�5���Y��y~�Cht5)�[�Y��X�/~�Qӑ-�� ,�SM�v�XX����B�nt�,���kr,w�Fh�o�y���� �-���(���:FPq]�ee�_Cї����.�)��x��kҞ�����!!��,�MA˛�0c�y5�]A��CF�0�:���� (�'��`'�>9�{����%�g����,�d�@&����7�L��iFK�Կ���5t�y0��ZO��Pޫ͡�7&ݡ���t���Kh���3��OǺ*BOO�.��f�:P��� +��Z���2~�ן�T�K��^�/��֡�wĐ��L@�J��Ӷ�KT5T�/��3 㞥f�_K,�k�<`�-�g�5�g�%�C N����F˾�u�"�r������K����3�v5����[�B�R���8:6�@��;Čb�*t�'��힂VnF�nv!��DZ N :�omc��"@�ʉ9�����IZ�S�B�T����Ж{��ip�G M:4�0�^$��������}m���M����A�tU������Z^�3}.�^��x�C�8>Ә�b��!��V{MD?7I;��U�����?m�����U�����P�x������[Ȱ_3UMGF>�*�X/���*�!¦�D�N���MC����6���>���]�fk��<DN�r�}���+2Z�u%'ϯ}m�wc���Q�E�O�!f&?�'>_i,������tĞ����+��nHy�k����ȭ����9P�zs���i��e?���]=�-��9U���jg�Ԟ�LJ�>��]�m��]��FT���*����bgy$�x��Th-z��ߩ+~���wJJ��>�%���ʿ���UP��L̿K��&ɥ"d���]1d6GQ� ����ڮVQ٧���G-%!�qO��&���@E��PQ.>ã�h�X��n�@��D��*80���j�\ +J�ZO��MRy��"�c��Sa�"��B�Y'��gj*F(�>��=��/z�ڑ��>^��1Q�3Z�ڙ�Q�:�Wdz^���_�� x���He�,��oN�]N)�6�=ܖ�Ѷ�6��|��̫C�9�{���K���[�/#6ߥ��.���VjEs4��,�E�T(��R�*|�>�Mv >O_��|SF�Q5��5O����y�ܒvg�'�y���bC�=�02ƥc"����9\��1���)Ӯ�ߣ���]OS�.��z*ک���/V��y�|O\���V�qG�5]��ț]91kg����҅ 2�������B7� �Ԅ�#���i�?6��;�Ă]9���'fe��]ǥڤ��퉬��t��'��θ���=�wl�R�������J6r_�I����(���þ�F�ᓜ\�)~���qjɆ��ԗ>�G���T��D}a� j��19;��&���OW+"_^X���;��"��j/�kI~6��q{�t~WN��je��Ů���S�z����[��:�g��XL�w���I�f��j��\������3�I�I�i�c�(Mmѳ T̅�H��4�Bݘx_Y~i�%�Y/.�n"�6�р��Mw������w��ٟ�l�J�L�o�@�(oOs��V`�IB�[ͧ��a��O��M�R�Wf~=�Vt��_��W��������ȭ�BW�J>ϵ<�i�y0ߙq�&)��k��v���M5˩��g��/��<ZR��>v}�!���&vG�,1��?��\ +�&ԕ�\���3]e�O� �������И���4��RA��s�~L�/cM�/#��Ӏ�9����F���c|fZb��Z�lt�4�o+|���}4#l;�3I? ̞�\�T�o���o����k�j��f1�1VV��3ɻJ|����!p@2� �ՙ ��>AH���%v���N�:K�=%o6:�m��>��#���p�M�Oև(�;|s�5���C�D�`�眦�w��]Cӄ�X�8W�4ǫ�5���<70N�,�%U�t��ZdSW27F�^�m����|C�S-?��Rk�'�0,f����l!p�_X��+(]b��b7�=�2���8�������MRsw$�"�B��+�ЭIl�M������'�e�h�:��kթacJ¥�[�@x{uΐ�f,l����r/"�4ŨX�d�ͶR��3��W2r b�e�0�!�E.���]��2JΜo/yg�I�g(��К�b�>�i0���<ɭ�f� #B6ư1��<��4{8ˢ��0�.�/[�Ȅ����V8rGAʳN0�=���}m�p.���ҷ��Y���n�B>\^�-�#Za�[�����D��Mt�����,X�|O�;Ue���=8Y|��V�>ֳ����]?����i��W��*����#L7#��D��]��U� +�� vM��,��81?�v?!�C�D������[�)T<��Ƚ9�p��8�oW_��'�ؕ<��$���!Y��ؕ��������ފ���]�>p�=����<ie�;�H��2���!��)d쾜Z�+�AW���:R�/�%�;����������վ�'ki�f�Ҟn ������62�����m��Gu#3�5{jZ�e�m�.㾚��ޟ��n�L$D,(��j�Vj'lRJ�J/��S߯��bv�T�k�Mw{��ɥ[c�H�0&�<NL^��YjH�YhJ�'g�\�mH���y��`s]�� ��Z?$�)����K��e{�4�[��x���=c�p� ��9_?���s��ۛ�"lZd�c�m���}�݄����䬭b���z�!���W'�İK[��/-�Ĥ�>b\31�a7)���,�)�`w�����7��ݖ���5ńZ�ռ�>R��>�4��p*����'��@,�{��=4 +��)n���g���7 +�=&ޡĤ[&�̓%!V)�.f�����$��ݨ�����[���g[���ꋃ.�3���(�UoQQWVz �6q%nc�5Z��!+�� +^���.-b���ս�iJ�SO�wi��-:Ǧ��v�TԮ���c�6���Gq��6D�u�]n������$��AK݈�� � ����^x��6r���e������_)��-F�����H�r|���Z��=�� +M�ڒ�0�4�"%��� ��8}��g���\�U�M�k�x,c�_Ӓ.�A��76���)�e���m���v�ki0`����k��B�F����Lf�BX�|����GÀm ��uMUԈs�� �E�Qq��?�2����HDإ��=)/���ٙ�~�e��6 �~���~GI(�����-��k���g�N�{S�6��ܓ�yy���?�a;u�K���iٔC���<��U�p]�+��ޏ������6;��\�^P㙮8U�m�h$Ү�n����_�#�@@g���<���֚+����4g��{�6�Qa����]���/w���sĊ=:��X���|������9S�uh䱏�\ƾ�X3�'���*Z��:J�6� +�d���\�ѳ>+Yo�k-;\��)�$�\j��\�%~=g��s�U��O�J��YB�[&1q�#Ȱm1>uy�j(�ߜ�����n-��!/�n�Y� q�x1z6ѣ�3��|�K����#���[������у�\���W�?�|t<��*��?�P��\�;I��#�>�%�i'�=0���ѳ2�Z���}t(��?��68uG�U�{�����&L:\`�����a���m%)X���줻=ؘ��J���ݮ d��Լ�>d�ls�����;+���Ij�('끬*�ש���M��ڮ�e�U��m9>M�X�A\S�aw�߽�ȯ�*��f1>yGN.�8��c� +F��$.~��ͩc�ޒ\�-�$/�B� ���;˃ׇ*��a"L�'�q%����� +r��$)�"�:�l�E��mNQ�L���4�����|�J)9�T�z7��J[�Ǖh���\T 'e�Z�.��3U�}�-��tS��B_�7Ucv��1�m +��� +�ri'o*�����ù���92f�N�J3^�^�>�����@aȯEN��06n�����~�5�������2���"�Щ�E-t���S��"v�S��,ԏ.֍��1L�|C�}� �o��V:��x{ �K|�P�B�jꛆ�~{�s���<7��3�ى���71ɛc�x�����jRɁ�'؟��q� +�]:�p��؞�%�U,�?�?�Xd��K��KM����vf�$��aU������ێQ^�V<`�)끾6��|s���D�|'��� 8h_À[��V%ӡ`�٤�(�n�(RT�ޓ�n }�9G%[T��)<rGR��.�����e��#��3K���d�f w$��~v�x�]Mu�U��ϴ�z� �Z!�W��'���ڂ�s���!b�B[���N��d�� z�]�!g{������w���Ȫ�w�<�ME�؛&{�|� �%:�����t�{��io�W������1����m�j�����쵱�������b&�tS�N|led�{��:~�93��L}���^B̕I^�+��,S�乎�s݅/6��-Ԕb�g0��U�G�R��l�3!ےZ�K�&:Z��9��r`�e.`���n�5|�x���ksȩ��bL��`y��>��B/<�"!��q�7��ܹ~D�C�x��vm׳09����ތ��1]ݸ��nJiy�����*�� +&ti���0��\�%n�R�m�_ȩ���)�vé �JTʖ��W���pk +��*�!��%��$�TV��pi;2d�IZ�1Y�ؗ��*E��+���̌�n5���r�ح�x5S��@G�����ӕ���J�[�F��Р.��ʡ`!��Ď�T�tg� �ئ�i�c�Cc�}}uփ�6RxCY��~L�%�0��=���*��1��\C�s�.V�P�j��P��f)��cS��j�a�YA)�0~��1���U%�wL�w�k����XD�Cm����|<.f�� g}>C�yz�.?�.�&�$�X��`-^�H�~�&�|=�ܜ�z}��$�J��f<Xj/� +�\o]�� �L��D�k�����-��g��ߝ*�n��+�D���(���)d��1���0%�<�Bi�+> �ï�>;+��qa����z{��<���\,��r6r{�S��]�~��t[^��l��UQ�8�C��QU, +b��:ɮ`���l��,��?C��j10�WlSb��* +x�vhwVPo����C��ա��vi����k��7���j �����F�aT��֒��E�P-'��V_�g�����dfg}�``�y�5� ���SE�u갹��t��H,Y����I��}��j=s�S ����W�ޘF A6.�FHqU��vT����� @���\�-"���ͬ������7���. ��H%K��������N=�;˯���nS�;*̦m٘��V�I�v ��)��˫�_w�o����,6�=���s�׆i=����)Hꞁ�ڛ|�,�晣P\jt�y�ˣ���a��$�b��1�&�$#�n��eۀ�p�5�7�����#�,�\��5ӦuϷh�W�(�uj�E�/�L�}����U�},�)c�-��HS?��jW��Rs�}'v��]x��U� /��y�>4�?[l+�]�)�������b�\��Bn�%�b��uԬh4�몝Z>�`FP�6�X��舥~"���T���kG�/�B>�9O������z�I >G��r~��4jg�О~o�;�:�F/���!|��aR�ݥo���5�����Z�KF�����*h��p�{�x�g� +_z�g�R|ƞ�T���`��"W�����k)�Ůߕ�l��Qt�����5��j>l��⭱.���ym�p����~���rF�];�9;+��bK�ٖ�����0q�S�<��dC��Nj?��R +��rʥ"n�����}ޚ(�����q�AtL�*LRx4�*��~��K��d����)'�F1�K]�ϛ}� ����g����_Ѓ �1@�{8��-��f?�`���2ׇ��1���HD�pesd������L��_ڙ�L;3�N�Sw�--�(��n !�� + F�;1H �&�S����}���?d_��B��\9�%��u�u���Sjj-~�fd<�>+��98�U��`S���� $qU��4#K4��[���'s�ͅZL�T?&fF��]B��LĂy9�[ΪWfn��㔾�t�ZwF��G��@��Zw�+�۟� +�}�h?*�-�Xw�Y�j��RyS\�x���Ùž��;pʾ^ڋI����O�����,������@�[1W�_����yh�C?�3��f�h�ƥ��^��`Jн?�mq���nzs`������m���%3��p�-�2���wN�w4�j}�ܸ7EEm� ����Q����u#��{H���4<�W���S+.��?�y��<�E$;�y�����3��5϶L �x�ͻ����5e�85�Q���U�my�l��v��)�s�I>�#�Pί�*��0�ٔ�� Wm��CJB�T7⭿����R{�ɨ�2H,t4��^j�f嵯f�+߬h��#�u��Ӄ��v~���Z���L*���p��q�@j�>JA~�36x���1���-ݵ���3F��ﬠ���.|���.jUל��Gg���4��s������'^~�e%�/�,� �����ޜׇ�p���^]�멍ٷiXRH���6�/�+���+^��կ����iyS����C��/c����%@h�>Ej�6E�n�`�֦��p���:��{�/#�[��}��.y�`�_��C?M)1� +j�CgKѳ���&�=S���)u����dV��Yԣ�N�_$������8�v?��� +�0kGu�4ڏ9�pF��Q`�w�|���FPUe!&\���]��"���}��ʫ�;.Aش��7�������c�U�攵�Bfp���X��b�G��E#�z��al�r��G<4���7�������vN���2!i~�A�����W{C�5Au���Ƹ�:PE��,|�Cl�1�k�tȦ����6���:�|Ѥ�1��Qyl���1���8tȍ��g3W�P�ImX��{��[s4eϪK�l���)��4[��e�d/@A�&!�]��%@/i�S��5���#]@+^32�������c=!�\8��ަ��zD�� �z~�m�d���h��1a2�-����s�fXƲ�����+ %և���)�s;�a�y����c���\Ҋ]H�Qqm5�W�:1��Vj�����b?4b���E->?�+���B$̩�̺O�;���w�4�Q_�M;,iFV�t��~INH�s���IP�S�kb��5���w��|0"���Ѓ)��}�l��� +�uњ����F[��� �������P���l[�9�A�ljn�3Gk�.d��Al��-�i�X�.x�T*z��2̭��VsVX�����:�Z��'*��m����kv���/B���;��|]�F��O��G�0D=�t��`�뽣�]~T������ԣ���v�K�ر�6J�Q��LW�m�(��� �Ʈ[i��ؐ������o#t�3�~6'=l��Q~��6l;Y�Y (��M�{�J�g��1:zw�A�c��3����" +�_+h��.�ճ��������!���T�|���U�>���F��3��^�nb��:����� �}�r�q�6����U+�h���-Y��;.6���&|����3����¾����,�i˻1���^I*�/�$��^�ᄸ�����?�%��*dQ�(�?�1.�ɥ@K�4#�7l�� ;���/�T��$�;����T�pO��)uS���v�ᴰg���������S�� "2djΑ@�.x ���.4͜�SWt ʚ�^T���x��N~��o��-�h��e�\ӡ�O;i���+��,�C�&;j���ˮlY�Eӊ����҇�=��&{��. 4����*�4ޏic/@�n��ȃ����`����C���eg��Z�5����vn�?ׁ�]U���[A�����=܂{nA�}���KP��t6uk���t�@A32)dD$o�װn&Ր��)�9v�R�|학_���5�bN����&��Gp��TɆ _��lx��@�I_�|%�v� eKj�' ><���[ې��zr�ͣzf_K��!t�鞦�?�Bc~���.�R������ަ����?�>�=}hG���p r/���$]�w�]�WTG�� �-m�Nh�� *�`/�o����!:��,`?&Pe{NX�xw�sr�������uDȷQ&����3c���D33� +h���hƚ�T7�R�p}��m"oY�Y�6t���ؼ� 6����e ��F�T@K�m[a��.L��gRس�C�L⒞�8,l��u�k}�� +�iDPr�����������h�t��?]=�$�����n�įY���.,��T��Kt���T�yD$�s2q�C�ɻø�u4n��}]y�����I+2�nn��_�������3�ƘNb�'����v��.���^�=���������̲����"���{>8hCL �#g�M�{���?!�xa��ec`�L�N���-�m?�x}ߧI��@�Z�j =�O���5-*9(o|R��-˪>,H���X�E���/�����(���o[�Y���h��~1a>�:�Ϲ�5��y�G��l�=��Fe��������܇뚼�������P_'��oSG� �/>��w��.��E�۵�6���1q��1Q�s��E(���>�~��3rXڟ^n�퍡�m�$��f/�a�z㶛O9!֭������Kffʟ�ֵ��� �ɖ�>���^6nیL�4j�LJQA㾏���6q�@*�w�I�n=�#�-��{T\�bXP�����dN�x�������w�̂�Fj����'@z�旾�������~]څΆ��2x����WP�`��1ba������� zxtf�Ʉ��R�X��4�i +�k�Y�u����8���^N.�pf���b��n_3��{kN��ݴ���1 +��Ƥ�:�F�;�c�e�y��צ�U6r��������O �����g���nZ��a�P��������8£y��},ʾ[��nj�=u�Rol�]E/|3��}�� C�-��5 ,>�%:Eů5��K.n�ю��[6�"�8�3�0��9N��I&m�M ս]P8:{r����Iѵe5"i͌�Y�a� +lΆ��8�@�;[��*p�zb�eqŻ�Ì�룢�g� +D*&B�)NX��lc����O�7m��EM�38c�KA�l��8���<G|t�������&��L������4�s0M��c+��M�v�ѥ�N\ㄢ1e͂��b�����.�d{��c&\k&|�SPzc��S������V����q��=5a��y���f���,�x&�ƞ�T��i�~qY��q^V���+��> ʋ���a�_��I��#�kä�5�z{�����)Rɪ�R��� +t4=�hJ��]��g?�魛���F)�������=ppbo(������6��tpP �;ꏹ kx�(+�6T�|�?�ź�&zǍ��sQ�<ʺ _�mD�~ua���-;�`Ì��:Biڴ� +g�M�f�氈Ԓ�z_�������;]�0����0�ˮz[�^�he�5�Ԩ�?��'%u��N��ܛ�F}\Vrg�� +9>��d7!su�[��B&l��\�2`!;��h/$v�M�����q����Q\��(�:�[��)�z�8�*�>'T��%K��"av����T>R�S/�%���Ċl���I/��B�V�� +?���w��K +���D}�2��G��a2SqIE�x���{���ν�դ�䦋�v��ɸ�d$# +���Ύ�����y����;ZL���'?�˞��ȿ{��W�,�����ص�O?{����sھ������s��[�����|�1������G�à�bE���a�f��� �>_�2�Qg��N�J�>m�tQ J��)�i-y�O��Y��'%��!iÆH���@o�ɾMw:�5S~��S�< �98����y�:d%��;c>OS _f9-ߦiăLя �k� ٠٫rݲ��0����ͻ�`���e}�Qb��¿����:|�y!(�42%�'���LgS����)r֝��@�N� ���S�>���h|��|�yf����7���Kj\6�f���;��cSV�L�{��aݚWc�\�^��BƏ�ʮ{YE5ش3zLΟ�]��Rh�E>���[z{�_rs��4|��>iMOI��}²;� ��:F������hN��&|�-��cC��0�6xښ�)zFR�pK�C?,y]� endstream endobj 16 0 obj <</Filter/FlateDecode/Length 865>>stream +H��WKO1��W���x<~�*H�J�h���C��Ї��������w� �PR �P!����͌g�&z|4��p:�j<9�zy�m��o��j�/?�*y��5̬������P�#ak�І�ɉ�ƻ��}�50VKZ�LޫMUi璉1���&����d� �R��c�`cm�u=����)!�KdDob�+1��dg�G���Q|^�?j�Q_+k2;��Y��+��]�����^3�-7� �`g���]�/�ȷTy7NG���U{��m�[�\�h� �ܲ&Y/��5���|#B����m|�����p���X8�P.W6�d��|ٔ�A�R����BB:�����P^��O��dn�+����EE���ÁXP��u!���{�O��P%k��*��f��ڴP�HmV�I��)��6�]�_`�v��� ��Yd� +��>9)������v�����P���8����S�ـ��Jy��(g#M�f��j�T�����zl���5y��ب=�s��R�!x�L�r�g�������a� ������t����CVr<Q���:l��bF.����h��L��ZSP��] ����Q�e^���wKi{;����ٶ\��x0pP�i�P㬓7 L�(NeO4�qn��/`�M0��d�oz��H�jL��\!��! j�H��`L�i��A���gFŇf���@�-P���'����b=_!�mC��0��Igۿ�^7Yd#�h?m� +{ �;fq�Vr��^��\fA����a�(�)U��B�ֵ�d�x��;b� F��g���� ��g����=��]Ds�&ܧ�2n~ ������s�5�p�x��jѥ�R�^?6��/�W[�j endstream endobj 11 0 obj <</Filter/FlateDecode/Length 747>>stream +H��VMO1��W�qƞ�ש��*U��J= U�V Ѩ�����n>=����7�y3��ٗ��]�I_\ε����+M�_��/j��?V�,"-��~P���@zvd`��d�H�T�gH�Z/�ի�ոՎ�a�i�^>WEN���I-ԍ�eCu�w���a�5�]ܲ��f�ƒ/���W�\��ȿ�E&�CP�D)�!]�����d�^�Ҷ�`|�`��L��RM�i�J�=��R�ڰ=��z�^��HR�Qe�i��ѩ�q�(�ȩo�E�f]W��=*����^#�O�{V���,��<��Tu�jrQ���#I�X*Ջ���(��"f��fܶ�I��w�"�,������ދܽT#8���]Hyo\��[t�%1�\4���#�Y8���É����`�:=��Ue�Q�ݑ�O�*9���d�*�� ���z�8}m�B<��CQL�C!��=���X�����@n����o��z;G6�S<�K;���x�F +���+\*�������s� ��lY%�"=:�փa]⌂�`l?�T��,��9xBj)�*,�����| m�� �`��1kF��K�a'Du^�(�Y�]I;�r�X��GC[cB/K�z;97�3�|���g�����t�_[������U��ޭ��e�dʆcvԐ+�aRJ`1�L�c�$J4�~�l����U�7M�X���35�Nn}C����A��T(d���mEY�(� 0���� endstream endobj 7 0 obj [6 0 R 5 0 R] endobj 46 0 obj <</CreationDate(D:20150819165053-04'00')/Creator(Adobe Illustrator CC 2014 \(Macintosh\))/ModDate(D:20150819165053-04'00')/Producer(Adobe PDF library 11.00)/Title(illustrations)>> endobj xref 0 47 0000000000 65535 f +0000000016 00000 n +0000000156 00000 n +0000044356 00000 n +0000000000 00000 f +0000046598 00000 n +0000046668 00000 n +0001625561 00000 n +0000044420 00000 n +0000044806 00000 n +0000045231 00000 n +0001624745 00000 n +0000441348 00000 n +0000051480 00000 n +0000051367 00000 n +0000046970 00000 n +0001623811 00000 n +0000045647 00000 n +0000046854 00000 n +0000046885 00000 n +0000046738 00000 n +0000046769 00000 n +0000047368 00000 n +0000047630 00000 n +0000051515 00000 n +0000441422 00000 n +0000441981 00000 n +0000443107 00000 n +0000446550 00000 n +0000512138 00000 n +0000577726 00000 n +0000643314 00000 n +0000708902 00000 n +0000774490 00000 n +0000840078 00000 n +0000905666 00000 n +0000971254 00000 n +0001036842 00000 n +0001099107 00000 n +0001164695 00000 n +0001230283 00000 n +0001295871 00000 n +0001361459 00000 n +0001427047 00000 n +0001492635 00000 n +0001558223 00000 n +0001625590 00000 n +trailer <</Size 47/Root 1 0 R/Info 46 0 R/ID[<71121996BBB94DC8982865CFF9D75137><4181A581059D42EDA0A963B7B0795539>]>> startxref 1625786 %%EOF \ No newline at end of file diff --git a/docs-gitbook/book.json b/docs/book.json similarity index 57% rename from docs-gitbook/book.json rename to docs/book.json index b8d2d762f..767645717 100644 --- a/docs-gitbook/book.json +++ b/docs/book.json @@ -1,10 +1,9 @@ { - "title": "vue-router", - "gitbook": ">3.0.0", - "plugins": ["edit-link", "theme-vuejs", "-fontsettings", "github"], + "gitbook": "2.x.x", + "plugins": ["edit-link", "github"], "pluginsConfig": { "edit-link": { - "base": "https://github.com/vuejs/vue-router/edit/dev/docs", + "base": "https://github.com/vuejs/vue-router/tree/master/docs", "label": "Edit This Page" }, "github": { diff --git a/docs-gitbook/de/README.md b/docs/en/README.md similarity index 100% rename from docs-gitbook/de/README.md rename to docs/en/README.md diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md new file mode 100644 index 000000000..d8a7e7cec --- /dev/null +++ b/docs/en/SUMMARY.md @@ -0,0 +1,33 @@ +# vue-router documentation [](https://www.npmjs.com/package/vue-router) + +**[Release Notes](https://github.com/vuejs/vue-router/releases)** + +- [Installation](installation.md) +- [Basic Usage](basic.md) +- [Nested Routes](nested.md) +- [Route Object & Route Matching](route.md) +- [Named Routes](named.md) +- [Router Options](options.md) +- [router-view](view.md) +- [v-link](link.md) +- [Lazy loading Routes](lazy.md) +- [Transition Pipeline](pipeline/README.md) + - [Transition Hooks](pipeline/hooks.md) + - [data](pipeline/data.md) + - [activate](pipeline/activate.md) + - [deactivate](pipeline/deactivate.md) + - [canActivate](pipeline/can-activate.md) + - [canDeactivate](pipeline/can-deactivate.md) + - [canReuse](pipeline/can-reuse.md) +- [API Reference](api/README.md) + - [Router instance properties](api/properties.md) + - [router.start](api/start.md) + - [router.stop](api/stop.md) + - [router.map](api/map.md) + - [router.on](api/on.md) + - [router.go](api/go.md) + - [router.replace](api/replace.md) + - [router.redirect](api/redirect.md) + - [router.alias](api/alias.md) + - [router.beforeEach](api/before-each.md) + - [router.afterEach](api/after-each.md) diff --git a/docs/en/api/README.md b/docs/en/api/README.md new file mode 100644 index 000000000..4923cf4bf --- /dev/null +++ b/docs/en/api/README.md @@ -0,0 +1,13 @@ +# API Reference + +- [Router instance properties](properties.md) +- [router.start](start.md) +- [router.stop](stop.md) +- [router.map](map.md) +- [router.on](on.md) +- [router.go](go.md) +- [router.replace](replace.md) +- [router.redirect](redirect.md) +- [router.alias](alias.md) +- [router.beforeEach](before-each.md) +- [router.afterEach](after-each.md) diff --git a/docs/en/api/after-each.md b/docs/en/api/after-each.md new file mode 100644 index 000000000..57a36a7ea --- /dev/null +++ b/docs/en/api/after-each.md @@ -0,0 +1,25 @@ +# `router.afterEach(hook)` + +Add a global after hook, which will be called every time when a route transition successfully **enters the activation phase**. + +Note this hook being called only means the transition has been validated, i.e. all `canDeactivate` and `canActivate` hooks have successfully resolved and the browser URL has been updated. It does not guarantee that all `activate` hooks have been resolved. + +You can add multiple global after hooks to the same router. These hooks will be called synchronously in the order of creation. + +### Arguments + +- `hook {Function}` + + The hook function receives a single argument which is a [Transition Object](../pipeline/hooks.html#transition-object), but you can only access its `to` and `from` properties, which are route objects. You **cannot** call transition methods in the global after hook. + +### Returns + +- The router instance itself. + +### Example + +``` js +router.afterEach(function (transition) { + console.log('Successfully navigated to: ' + transition.to.path) +}) +``` diff --git a/docs/en/api/alias.md b/docs/en/api/alias.md new file mode 100644 index 000000000..861edad9a --- /dev/null +++ b/docs/en/api/alias.md @@ -0,0 +1,29 @@ +# `router.alias(aliasMap)` + +Configures global alias rules for the router. The difference between alias and redirect is that instead of replacing the `fromPath` with `toPath`, an alias will preserve `fromPath` while matching it as `toPath`. + +For example, if we alias `/a` to `/a/b/c`, when we visit `/a`, the browser URL will display `/a`. However, the router will match the path as if we are visiting `/a/b/c` instead. + +### Arguments + +- `aliasMap {Object}` + + The alias map object should be in the form of { fromPath: toPath, ... }. The paths can contain dynamic segments. + +### Returns + +- The router instance itself. + +### Example + +``` js +router.alias({ + + // match /a as if it is /a/b/c + '/a': '/a/b/c', + + // alias can contain dynamic segments + // the dynamic segment names must match + '/user/:userId': '/user/profile/:userId' +}) +``` diff --git a/docs/en/api/before-each.md b/docs/en/api/before-each.md new file mode 100644 index 000000000..0bda32662 --- /dev/null +++ b/docs/en/api/before-each.md @@ -0,0 +1,44 @@ +# `router.beforeEach(hook)` + +Add a global before hook to the router, which will be called before every route transition starts. This is before the entire transition pipeline; if the hook rejects the transition, the pipeline won't even be started. + +You can add multiple global before hooks to the same router. These hooks will be called in the order of creation. Since hooks can be resolved asynchronously, the next hook won't be called until the previous one resolves. + +Global before hooks are resolved following the same [Hook resolution rules](../pipeline/hooks.html#hook-resolution-rules). + +### Arguments + +- `hook {Function}` + + The hook function receives a single argument which is a [Transition Object](../pipeline/hooks.html#transition-object). + +### Returns + +- The router instance itself. + +### Example + +Basic + +``` js +router.beforeEach(function (transition) { + if (transition.to.path === '/forbidden') { + transition.abort() + } else { + transition.next() + } +}) +``` + +Promise + ES6 + +``` js +router.beforeEach(function ({ to, next }) { + if (to.path === '/auth-required') { + // return a Promise that resolves to true or false + return AuthService.isLoggedIn() + } else { + next() + } +}) +``` diff --git a/docs/en/api/go.md b/docs/en/api/go.md new file mode 100644 index 000000000..2eedd21f3 --- /dev/null +++ b/docs/en/api/go.md @@ -0,0 +1,38 @@ +# `router.go(path)` + +Programatically navigate to a new route. + +### Arguments + +- `path: String | Object` + + The path can be either a String or an Object. + + If a String, the path must be a plain path (i.e. no dynamic segments or star segments). If the path doesn't start with `/`, it will be resolved relative to the current active path. + + If an Object, it can either be in the form of: + + ``` js + { path: '...' } + ``` + + Or: + + ``` js + { + name: '...', + // params and query are optional + params: { ... }, + query: { ... } + } + ``` + + For details about the `name` Object format, see [Named Routes](../named.md). + + - When using the `path` format and navigating to a relative path, you can also pass in the `append: true` option, so that the relative path is always **appended** to the current path. For example: + + - Going from `/a` to `b` without `append: true` will arrive at `/b`. + + - Going from `/a` to `b` with `append: true` will arrive at `/a/b`. + + - Both formats also accept the `replace: true` option, which makes the navigation to replace the current history entry instead of creating a new one. diff --git a/docs/en/api/map.md b/docs/en/api/map.md new file mode 100644 index 000000000..844e3cc29 --- /dev/null +++ b/docs/en/api/map.md @@ -0,0 +1,51 @@ +# `router.map(routeMap)` + +The main method to define route mappings for the router. + +### Arguments + +- `routeMap: Object` + + An object whose keys are paths and values are route config objects. For path matching rules, see [Route Matching](../route.html#route-matching). + +### Returns + +- The router instance itself. + +### Route Config Object + +A route config object can contain two fields: + +- `component`: The Vue component to render into the top-level `<router-view>` outlet when this path is matched. The value could either be a constructor returned by calling `Vue.extend`, or a plain component options object. In the latter case the router will implicitly call `Vue.extend` for you. + +- `subRoutes`: You can nest another sub route-map here. For each sub path in the `routeRoutes` map, the router will match it against the full path by appending it to the parent path. The matched component will be rendered into the parent route component's `<router-view>` outlet. + +### Example + +``` js +router.map({ + // component constructor + '/a': { + component: Vue.extend({ /* ... */ }) + }, + // plain component options object + '/b': { + component: { + template: '<p>Hello from /b</p>' + } + }, + // nested routes + '/c': { + component: { + // simply render the child view + template: '<router-view></router-view>' + }, + subRoutes: { + // rendered when the path is /c/d + '/d': { component: { template: 'D' }}, + // rendered when the path is /c/e + '/e': { component: { template: 'E' }} + } + } +}) +``` diff --git a/docs/en/api/on.md b/docs/en/api/on.md new file mode 100644 index 000000000..ddb7494e5 --- /dev/null +++ b/docs/en/api/on.md @@ -0,0 +1,22 @@ +# `router.on(path, config)` + +Add a single root-level route configuration. Internally, `router.map()` simply calls `router.on()` for each key-value pair in the router map object it receives. + +### Arguments + +- `path: String` - see [Route Matching](../route.md#route-matching) +- `config: Object` - see [Route Config Object](map.md#route-config-object). + +### Returns + +- The router instance itself. + +### Example + +``` js +router.on('/user/:userId', { + component: { + template: '<div>{{$route.params.userId}}</div>' + } +}) +``` diff --git a/docs/en/api/properties.md b/docs/en/api/properties.md new file mode 100644 index 000000000..4711dfbe2 --- /dev/null +++ b/docs/en/api/properties.md @@ -0,0 +1,21 @@ +# Router Instance Properties + +> Only public properties are documented here. + +### `router.app` + +- type: `Vue` + + The root Vue instance managed by the router instance. This instance is created from the Vue component contructor you passed into `router.start()`. Note it may not be synchronously available when if router has to perform a redirect on load. If you need access to `router.app` outside of your app components, you may want to do so inside the callback passed to `router.start()`. + +### `router.mode` + +- type: `String` + + One of `html5`, `hash` or `abstract`. + + - **`html5`**: uses HTML5 history API and listens to `popstate` events. Supports [`saveScrollPosition`](../options.html#savescrollposition). + + - **`hash`**: uses `location.hash` and listens to `hashchange` events. When you specify `history: true` when creating the router, it will fallback into hash mode in browsers that do not support the history API. + + - **`abstract`**: does not listen to any events. Will auto-fallback into this mode if `window` is not present. diff --git a/docs/en/api/redirect.md b/docs/en/api/redirect.md new file mode 100644 index 000000000..f2970f4e0 --- /dev/null +++ b/docs/en/api/redirect.md @@ -0,0 +1,30 @@ +# `router.redirect(redirectMap)` + +Configures global redirection rules for the router. Global redirections are performed before matching the current path. If a redirection is found, the originally visited path will simply be skipped and will not leave a record in the browser history. + +### Arguments + +- `redirectMap: Object` + + The redirect map object should be in the form of `{ fromPath: toPath, ... }`. The paths can contain dynamic segments. + +### Returns + +- The router instance itself. + +### Example + +``` js +router.redirect({ + + // redirect any navigation to /a to /b + '/a': '/b', + + // redirect can contain dynamic segments + // the dynamic segment names must match + '/user/:userId': '/profile/:userId', + + // redirect any not-found route to home + '*': '/home' +}) +``` diff --git a/docs/en/api/replace.md b/docs/en/api/replace.md new file mode 100644 index 000000000..449214911 --- /dev/null +++ b/docs/en/api/replace.md @@ -0,0 +1,9 @@ +# `router.replace(path)` + +Similar to `router.go(path)`, but doesn't create a new record in browser history. + +### Arguments + +- `path: String` + + The path must be a plain path (i.e. no dynamic segments or star segments). If the path doesn't start with `/`, it will be resolved relative to the current active path. diff --git a/docs/en/api/start.md b/docs/en/api/start.md new file mode 100644 index 000000000..beb080b00 --- /dev/null +++ b/docs/en/api/start.md @@ -0,0 +1,20 @@ +# `router.start(App, el, [callback])` + +Start the router-enabled app. Creates an instance of `App` and mounts it to `el`. + +### Arguments + +- `App: Function | Object` + + The `App` can be a Vue component constructor or a component options object. If it's an object, the router will implicitly call `Vue.extend` on it. This component will be used to create the root Vue instance for the app. + + **Note:** + vue-router cannot be started with Vue instances. + +- `el: String | Element` + + The element to mount the app on. Can be a CSS selector string or an actual element. + +- `callback: Function` (optional) + + A callback which will be called when the router app's initial render is complete. `router.app` is guaranteed to be available after this callback is called. diff --git a/docs/en/api/stop.md b/docs/en/api/stop.md new file mode 100644 index 000000000..341734f56 --- /dev/null +++ b/docs/en/api/stop.md @@ -0,0 +1,5 @@ +# `router.stop()` + +Stop listening to `popstate` and `hashchange` events. + +Note that when a router is in stopped state, `router.app` is not destroyed and you can still navigate around using `router.go(path)`. You can also restart the router by calling `router.start()` again with no arguments. diff --git a/docs/en/basic.md b/docs/en/basic.md new file mode 100644 index 000000000..fdaf01bd8 --- /dev/null +++ b/docs/en/basic.md @@ -0,0 +1,69 @@ +# Basic Usage + +Creating a Single-page Application with Vue.js + vue-router is dead simple. With Vue.js, we are already dividing our application into components. When adding vue-router to the mix, all we need to do is map our components to the routes and let vue-router know where to render them. Here's a basic example: + +### HTML + +``` html +<div id="app"> + <h1>Hello App!</h1> + <p> + <!-- use v-link directive for navigation. --> + <a v-link="{ path: '/foo' }">Go to Foo</a> + <a v-link="{ path: '/bar' }">Go to Bar</a> + </p> + <!-- route outlet --> + <router-view></router-view> +</div> +``` + +### JavaScript + +``` js +// Define some components +var Foo = Vue.extend({ + template: '<p>This is foo!</p>' +}) + +var Bar = Vue.extend({ + template: '<p>This is bar!</p>' +}) + +// The router needs a root component to render. +// For demo purposes, we will just use an empty one +// because we are using the HTML as the app template. +// !! Note that the App is not a Vue instance. +var App = Vue.extend({}) + +// Create a router instance. +// You can pass in additional options here, but let's +// keep it simple for now. +var router = new VueRouter() + +// Define some routes. +// Each route should map to a component. The "component" can +// either be an actual component constructor created via +// Vue.extend(), or just a component options object. +// We'll talk about nested routes later. +router.map({ + '/foo': { + component: Foo + }, + '/bar': { + component: Bar + } +}) + +// Now we can start the app! +// The router will create an instance of App and mount to +// the element matching the selector #app. +router.start(App, '#app') +``` + +You can also checkout this example [live](http://jsfiddle.net/yyx990803/xyu276sa/). + +In addition: + +- The root Vue instance will be available as `router.app` once the initial render is complete. + +- The router instance will be available in all descendants of the router app as `this.$router`. diff --git a/docs/en/installation.md b/docs/en/installation.md new file mode 100644 index 000000000..2010af245 --- /dev/null +++ b/docs/en/installation.md @@ -0,0 +1,44 @@ +# Installation + +### Direct Download + +See [dist folder](https://github.com/vuejs/vue-router/tree/dev/dist). Note the dist files are always the latest stable - it's not update-to-date with the `dev` branch source. + +### CDN +[jsdelivr](https://cdn.jsdelivr.net/vue.router/0.7.10/vue-router.min.js) + +[cdnjs](https://cdnjs.cloudflare.com/ajax/libs/vue-router/0.7.10/vue-router.min.js) + +### NPM + +``` bash +npm install vue-router +``` + +When used in CommonJS, you must explicitly install the router via `Vue.use()`: + +``` js +var Vue = require('vue') +var VueRouter = require('vue-router') + +Vue.use(VueRouter) +``` + +You don't need to do this when using the standalone build because it installs itself automatically. + +### Dev Build + +You will have to clone directly from GitHub and build `vue-router` yourself if you want to use the latest dev build. + +``` bash +git clone https://github.com/vuejs/vue-router.git node_modules/vue-router +cd node_modules/vue-router +npm install +npm run build +``` + +### Bower + +``` bash +bower install vue-router +``` diff --git a/docs/en/lazy.md b/docs/en/lazy.md new file mode 100644 index 000000000..30894bd77 --- /dev/null +++ b/docs/en/lazy.md @@ -0,0 +1,63 @@ +# Lazy Loading Routes + +When you are using bundlers like Webpack or Browserify, it's trivially easy to lazy-load a route component using Vue.js' built-in [async component functionality](http://vuejs.org/guide/components.html#Async-Components). Instead of directly defining your route component, you define it as a function that will asynchronously resolve the actual component definition: + +``` js +router.map({ + '/async': { + component: function (resolve) { + // somehow retrieve your component definition from server... + resolve(MyComponent) + } + } +}) +``` + +Now, manually handling component retrieval is less than ideal, but bundlers like Webpack & Browserify both provides ways to make it easier. + +### Webpack + +Webpack has built-in support for async code-splitting. You can use the AMD-like `require` syntax in your code to indicate an async code-split point: + +``` js +require(['./MyComponent.vue'], function (MyComponent) { + // code here runs after MyComponent.vue is asynchronously loaded. +}) +``` + +Combined with the router it can simply look like this: + +``` js +router.map({ + '/async': { + component: function (resolve) { + require(['./MyComponent.vue'], resolve) + } + } +}) +``` + +Now, `MyComponent.vue`, along with any dependencies that is only used by itself, will be loaded asynchronously only when the route `/async` needs to be rendered. + +### Browserify + +It's a bit more tricky to achieve the same with Browserify, but it's possible with the [`partition-bundle` plugin](https://github.com/substack/browserify-handbook/blob/master/readme.markdown#partition-bundle). You will have to manually declare your bundle mappings in a `json` file: + +``` json +{ + "main.js": ["./main.js"], + "my-component.js": ["./MyComponent.vue"] +} +``` + +Then in `main.js` you would do something similar, using the `loadjs` function instead of `require`: + +``` js +router.map({ + '/async': { + component: function (resolve) { + loadjs(['./MyComponent.vue'], resolve) + } + } +}) +``` diff --git a/docs/en/link.md b/docs/en/link.md new file mode 100644 index 000000000..05692996a --- /dev/null +++ b/docs/en/link.md @@ -0,0 +1,79 @@ +# v-link + +`v-link` is the directive for enabling user navigation in a router-enabled app. It accepts a JavaScript expression which will be passed to `router.go()` internally. For example: + +``` html +<!-- literal string --> +<a v-link="'home'">Home</a> + +<!-- same as above --> +<a v-link="{ path: 'home' }">Home</a> + +<!-- named route --> +<a v-link="{ name: 'user', params: { userId: 123 }}">User</a> + +<!-- with query, resulting in /register?plan=private --> +<a v-link="{ path: 'register', query: { plan: 'private' }}">Register</a> +``` + +`v-link` is preferred over hard-coded `href` for the following reasons: + +- It works the same way in both HTML5 history mode and hash mode, so if you ever decide to switch mode, or when the router falls back to hash mode in IE9, nothing needs to be changed. + +- In HTML5 history mode, `v-link` will intercept the click event so that the browser doesn't try to reload the page. + +- When you are using the `root` option in HTML5 history mode, you don't need to include it in `v-link` URLs. + +#### Active Link Class + +Elements with `v-link` will automatically get corresponding class names when the current path matches its `v-link` URL. The default class to be applied is `.v-link-active` and the default matching behavior is **inclusive match**. For example, an element with `v-link="/a"` will get this class applied as long as the current path starts with `/a`. + +It is also possible to configure the matching behavior so that the active class is only applied when the paths match exactly, using the `exact` inline option: + +``` html +<a v-link="{ path: '/a', exact: true }"></a> +``` + +The active link class name can be configured with the `linkActiveClass` option when creating the router instance. It can also be overridden with the `activeClass` inline option: + +``` html +<a v-link="{ path: '/a', activeClass: 'custom-active-class' }"></a> +``` + +#### Applying Active Classes to Another Element + +> 0.7.8+ + +Sometimes we may want the active classes to be applied to a wrapping element rather than the `<a>` element itself. You can do so by adding `v-link-active` to a parent element: + +``` html +<ul> + <li v-link-active> + <a v-link="{ path: '/xxx' }">Go</a> + </li> +</ul> +``` + +`v-link` will locate the closest parent element that has `v-link-active` and apply the active classes on that element instead. + +#### Other Configuration Options + +- **replace** + + A link with `replace: true` will call `router.replace()` instead of `router.go()` when clicked, so the navigation will not leave a history record. + + ``` html + <a v-link="{ path: '/abc', replace: true }"></a> + ``` + +- **append** + + A relative link with `append: true` always appends the relative path to the current path. For example, assuming we are navigating from `/a` to a relative link `b`, without `append: true` we will end up at `/b`, but with `append: true` we will end up at `/a/b`. + + ``` html + <a v-link="{ path: 'relative/path', append: true }"></a> + ``` + +#### Additional Notes + +- `v-link` automatically sets the `href` attribute when used on an `<a>` element. diff --git a/docs/en/named.md b/docs/en/named.md new file mode 100644 index 000000000..e70ca20bd --- /dev/null +++ b/docs/en/named.md @@ -0,0 +1,26 @@ +# Named Routes + +Sometimes it is more convenient to identify a route with a name, especially when performing navigations. You can give a route a name in the route config like this: + +``` js +router.map({ + '/user/:userId': { + name: 'user', // give the route a name + component: { ... } + } +}) +``` + +To link to a named route, you can use `v-link` like this: + +``` html +<a v-link="{ name: 'user', params: { userId: 123 }}">User</a> +``` + +You can also navigate to a named route programatically using `router.go()`: + +``` js +router.go({ name: 'user', params: { userId: 123 }}) +``` + +In both cases, the router will navigate to the path `/user/123`. diff --git a/docs/en/nested.md b/docs/en/nested.md new file mode 100644 index 000000000..5f2516cf3 --- /dev/null +++ b/docs/en/nested.md @@ -0,0 +1,79 @@ +# Nested Routes + +Mapping nested routes to nested components is a common need, and it is also very simple with vue-router. + +Suppose we have the following app: + +``` html +<div id="app"> + <router-view></router-view> +</div> +``` + +The `<router-view>` here is a top-level outlet. It renders the component matched by a top level route: + +``` js +router.map({ + '/foo': { + // Foo is rendered when /foo is matched + component: Foo + } +}) +``` + +Similarly, a rendered component can also contain its own, nested `<router-view>`. For example, if we add one inside the `Foo` component's template: + +``` js +var Foo = Vue.extend({ + template: + '<div class="foo">' + + '<h2>This is Foo!</h2>' + + '<router-view></router-view>' + // <- nested outlet + '</div>' +}) +``` + +To render components into this nested outlet, we need to update our route config: + +``` js +router.map({ + '/foo': { + component: Foo, + // add a subRoutes map under /foo + subRoutes: { + '/bar': { + // Bar will be rendered inside Foo's <router-view> + // when /foo/bar is matched + component: Bar + }, + '/baz': { + // Same for Baz, but only when /foo/baz is matched + component: Baz + } + } + } +}) +``` + +Now, with the above configuration, when you visit `/foo`, nothing will be rendered inside `Foo`'s outlet, because no sub route is matched. Maybe you do want to render something there. In such case you can provide a `/` subroute in this case: + +``` js +router.map({ + '/foo': { + component: Foo, + subRoutes: { + '/': { + // This component will be rendered into Foo's <router-view> + // when /foo is matched. Using an inline component definition + // here for convenience. + component: { + template: '<p>Default sub view for Foo</p>' + } + }, + // other sub routes... + } + } +}) +``` + +A working demo of this example can be found [here](http://jsfiddle.net/yyx990803/naeg67da/). diff --git a/docs/en/options.md b/docs/en/options.md new file mode 100644 index 000000000..eb621d9c3 --- /dev/null +++ b/docs/en/options.md @@ -0,0 +1,60 @@ +# Route Options + +There are a number of options you can use to customize the router behavior when creating a router instance. + +#### hashbang + +- default: true +- only used in hash mode + + When the hashbang option is true, all hash paths will be formated to start with `#!`. For example `router.go('/foo/bar')` will set the browser URL to `example.com/#!/foo/bar`. + +#### history + +- default: false + + Enables HTML5 history mode. Leverages `history.pushState()` and `history.replaceState()` for history management. + + **Note**: when using the history mode, the server needs to be [properly configured](http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/) so that a user directly visiting a deep link on your site doesn't get a 404. + +#### abstract + +- default: false + + Use an abstract history backend that doesn't rely on the browser. The abstract mode is useful in testing or in environments where actual URLs doesn't matter, for example in Electron or Cordova apps. The router will also fallback into abstract mode if loaded in a non-browser environment. + +#### root + +- default: null +- only used in HTML5 history mode + + Define a root path for all router navigations. All paths used in route configurations, `router.go()`, `v-link` and exposed on route objects will be resolved relative to this root path, and the root path will always be included in the actual browser URL. + + For example, with `root: '/foo'`, `v-link="/bar"` will set the browser URL to `/foo/bar`. Directly visiting `/foo/bar` will match against `/bar` in your route config. + + In most cases, `root` is set-and-forget: you don't have to worry about it in your application code. + +#### linkActiveClass + +- default: `"v-link-active"` + + Configures the class to be applied to `v-link` elements when the current link is active. The matching behavior and the class can also be individually configured for each `v-link`. + +#### saveScrollPosition + +- default: false +- only used in HTML5 history mode + + This option leverages the state associated with an HTML5 history `popstate` event to restore the scroll position when the user hits the back button. Note this might not work as expected if your `<router-view>` has transition effects. + +#### transitionOnLoad + +- default: false + + Whether to apply transition effect for `<router-view>`s on initial load. By default the components matched on initial load are rendered instantly. + +#### suppressTransitionError + +- default: false + + If set to `true`, uncaught errors inside transition hooks will be suppressed. diff --git a/docs/en/pipeline/01.png b/docs/en/pipeline/01.png new file mode 100644 index 000000000..e910abc16 Binary files /dev/null and b/docs/en/pipeline/01.png differ diff --git a/docs/en/pipeline/02.png b/docs/en/pipeline/02.png new file mode 100644 index 000000000..adcf2a640 Binary files /dev/null and b/docs/en/pipeline/02.png differ diff --git a/docs/en/pipeline/03.png b/docs/en/pipeline/03.png new file mode 100644 index 000000000..ed1e235c4 Binary files /dev/null and b/docs/en/pipeline/03.png differ diff --git a/docs/en/pipeline/04.png b/docs/en/pipeline/04.png new file mode 100644 index 000000000..e1785b631 Binary files /dev/null and b/docs/en/pipeline/04.png differ diff --git a/docs/en/pipeline/05.png b/docs/en/pipeline/05.png new file mode 100644 index 000000000..dd99f3443 Binary files /dev/null and b/docs/en/pipeline/05.png differ diff --git a/docs/en/pipeline/README.md b/docs/en/pipeline/README.md new file mode 100644 index 000000000..267c60114 --- /dev/null +++ b/docs/en/pipeline/README.md @@ -0,0 +1,53 @@ +# Transition Pipeline + +To better understand the pipeline of a route transition, let's imagine we have a router-enabled app, already rendered with three nested `<router-view>` with the path `/a/b/c`: + + + +And then, the user navigates to a new path, `/a/d/e`, which requires us to update our rendered component tree to a new one: + + + +How would we go about that? There are a few things we need to do here: + +1. We can potentially reuse component A, because it remains the same in the post-transition component tree. + +2. We need to deactivate and remove component B and C. + +3. We need to create and activate component D and E. + +4. Before we actually perform step 2 & 3, we also want to make sure this transition is valid - that is, to make sure that all components involved in this transition **can** be deactivated/activated as desired. + +With vue-router, you can control these steps by implementing optional transition hooks. But before we go into details on how to do that, let's take a look at the bigger picture. + +### Transition Phases + +We can divide a route transition pipeline into three phases: + +1. **Reusability phase:** + + Check if any component in the current view hierarchy can be reused in the new one. This is done by comparing the two component trees, find out common components, and then check their reusability (via the `canReuse` option). By default, every component is reusable unless configured otherwise. + +  + +2. **Validation phase:** + + Check if all current components can be deactivated, and if all new components can be activated. This is by checking and calling their `canDeactivate` and `canActivate` route config hooks. + +  + + Note the `canDeactivate` check bubbles bottom-up, while the `canActivate` check is top-down. + + Any of these hooks can potentially abort the transition. If a transition is aborted during the validation phase, the router preserves the current app state and restores the previous path. + +3. **Activation phase:** + + Once all validation hooks have been called and none of them aborts the transition, the transition is now said to be valid. The router will now deactivate current components and activate new components. + +  + + These hooks are called in the same order of the validation hooks, but their purpose is to give you the chance to do cleanup / preparation work before the visible component switching is executed. The interface will not update until all of the affected components' `deactivate` and `activate` hooks have been resolved. + + The `data` hook is called right after `activate` is resolved, and is also called when a component is reused. + +We will talk about transition hooks in detail next. diff --git a/docs/en/pipeline/activate.md b/docs/en/pipeline/activate.md new file mode 100644 index 000000000..91eb06f32 --- /dev/null +++ b/docs/en/pipeline/activate.md @@ -0,0 +1,21 @@ +# `activate(transition) [-> Promise]` + +Called on an incoming component during the activation phase when it is created and about to get transitioned in. + +### Arguments + +- [`transition {Transition}`](hooks.md#transition-object) + + Call `transition.next()` to resolve the hook. Note calling `transition.abort()` here will not take the app back to the previous route because the transition has already been validated. + +### Expected Return Value + +- Optionally return a Promise. + - `resolve` -> `transition.next()` + - `reject(reason)` -> `transition.abort(reason)` + +### Details + +In most cases this hook is used to control the timing of the view switching, because the view switching will not happen until this hook is resolved. + +This hook is called top-down. A child view's `activate` will only get called when its parent view's `activate` has been resolved. diff --git a/docs/en/pipeline/can-activate.md b/docs/en/pipeline/can-activate.md new file mode 100644 index 000000000..1880ee122 --- /dev/null +++ b/docs/en/pipeline/can-activate.md @@ -0,0 +1,27 @@ +# `canActivate(transition) [-> Promise | Boolean]` + +Called on an incoming component during the validation phase. + +### Arguments + +- [`transition {Transition}`](hooks.md#transition-object) + + Call `transition.next()` to resolve the hook. Calling `transition.abort()` will invalidate and cancel the transition. + +### Expected Return Value + +- Optionally return a Promise: + + - `resolve(true)` -> `transition.next()` + - `resolve(false)` -> `transition.abort()` + - `reject(reason)` -> `transition.abort(reason)` + + +- Optionally return a Boolean: + + - `true` -> `transition.next()` + - `false` -> `transition.abort()` + +### Details + +This hook is called top-down. A child view's `canActivate` will only get called when its parent view's `canActivate` has been resolved. diff --git a/docs/en/pipeline/can-deactivate.md b/docs/en/pipeline/can-deactivate.md new file mode 100644 index 000000000..3e314a1d7 --- /dev/null +++ b/docs/en/pipeline/can-deactivate.md @@ -0,0 +1,27 @@ +# `canDeactivate(transition) [-> Promise | Boolean]` + +Called on a leaving component during the validation phase. + +### Arguments + +- [`transition {Transition}`](hooks.md#transition-object) + + Call `transition.next()` to resolve the hook. Calling `transition.abort()` will invalidate and cancel the transition. + +### Expected Return Value + +- Optionally return a Promise: + + - `resolve(true)` -> `transition.next()` + - `resolve(false)` -> `transition.abort()` + - `reject(reason)` -> `transition.abort(reason)` + + +- Optionally return a Boolean: + + - `true` -> `transition.next()` + - `false` -> `transition.abort()` + +### Details + +This hook is called from bottom-up. A parent view component's `canDeactivate` only gets called when its child's `canDeactivate` has resolved. diff --git a/docs/en/pipeline/can-reuse.md b/docs/en/pipeline/can-reuse.md new file mode 100644 index 000000000..601992326 --- /dev/null +++ b/docs/en/pipeline/can-reuse.md @@ -0,0 +1,21 @@ +# `canReuse: Boolean | canReuse(transition) -> Boolean` + +Determines whether a component can be reused. If a component cannot be reused, the current instance will be replaced by a new one and it will go through the normal validation and activation phase. + +This route options can either be a plain Boolean value, or a function that synchronously returns a Boolean. **Defaults to `true`**. + +### Arguments + +- [`transition {Transition}`](hooks.md#transition-object) + + You can only access `transition.to` and `transition.from` in a `canReuse` hook. + +### Expected Return Value + +- Must return a Boolean. Falsy values are treated as `false`. + +### Details + +`canReuse` is called synchronously, top-down for all potentially reusable components. + +If a component is reused, its `data` hook will still get called during the activation phase. diff --git a/docs/en/pipeline/data.md b/docs/en/pipeline/data.md new file mode 100644 index 000000000..4c570e2a4 --- /dev/null +++ b/docs/en/pipeline/data.md @@ -0,0 +1,143 @@ +# `data(transition) [-> Promise]` + +Called on an incoming component during the activation phase, after the `activate` hook has been resolved. **It is also called when the route has changed and the current component is reused**. Use this hook to load and set data on the current component. + +### Arguments + +- [`transition {Transition}`](hooks.md#transition-object) + + Calling `transition.next(data)` will set each property in `data` on the component. For example, with `{ a: 1, b: 2 }`, the router will call `component.$set('a', 1)` and `component.$set('b', 2)`. + +### Expected Return Value + +- optionally return a Promise. + - `resolve(data)` -> `transition.next(data)` + - `reject(reason)` -> `transition.abort(reason)` + + +- **OR:** return an Object containing Promises. See [Promise sugar](#promise-sugar) below. + +### Details + +The `data` transition hook is called immediately after the `activate` hook is resolved, and right before the view switching is executed. The entering component gets a **`$loadingRouteData`** meta property, which starts with value `true` and set to `false` when the `data` hook is resolved. This property can be used to display a loading state for the entering component. + +When resolved, the component will also emit a `'route-data-loaded'` event. + +The `data` hook is different from `activate` in that: + +1. `data` is also called every time the route changes, even if the current component is reused, while `activate` is only called when component is newly created. + + Imagine we have a component for the route `/message/:id`, and we are currently on `/message/1`. When the user navigates to `/message/2`, the current component can be reused, so the `activate` hook will not get called. But we do want to fetch and update the data based on the new `id` param, so in most cases it makes sense to do data fetching in `data` instead of `activate`. + +2. `activate`'s responsibility is controlling the timing of switching to the new component. In comparison, `data` is called right after `activate` is resolved and right before the view switching happens, so the data fetching and the new component's entering animation will go in parallel, and the component will be in a "loading" state before `data` is resolved. + + Let's consider the difference in the User Experience here: + + - If we wait for the data to be fetched before displaying the new component, the user will feel like the interface is "stuck" for a split second before the view switches. + + - Instead, we can react to user input instantly and start switching the view, while displaying the new component with a "loading" state. If we have a CSS transition in between, the animation time can overlap nicely with the data wait time. + +With that said, if you still wish to wait until data is loaded before switching the view, you can add **`waitForData: true`** inside your component's `route` option. + +### Examples + +By calling `transition.next`: + +``` js +route: { + data: function (transition) { + setTimeout(function () { + transition.next({ + message: 'data fetched!' + }) + }, 1000) + } +} +``` + +By returning a Promise: + +``` js +route: { + data: function (transition) { + return messageService + .fetch(transition.to.params.messageId) + .then(function (message) { + return { message: message } + }) + } +} +``` + +Parallel requests, with Promise & ES6: + +``` js +route: { + data ({ to: { params: { userId }}}) { + return Promise.all([ + userService.get(userId), + postsService.getForUser(userId) + ]).then(([user, post]) => ({ user, post })) + } +} +``` + +Equivalent of above in ES5: + +``` js +route: { + data (transition) { + var userId = transition.to.params.userId + return Promise.all([ + userService.get(userId), + postsService.getForUser(userId) + ]).then(function (data) { + return { + user: data[0], + posts: data[1] + } + }) + } +} +``` + +Using `$loadingRouteData` in templates: + +``` html +<div class="view"> + <div v-if="$loadingRouteData">Loading ...</div> + <div v-if="!$loadingRouteData"> + <user-profile user="{{user}}"></user-profile> + <user-post v-for="post in posts" :post="post"></user-post> + </div> +</div> +``` + +### Promise Sugar + +The parallel data fetching example above requires us to leverage `Promise.all` to combine multiple Promises into a single one, and the desturcturing and formatting is still a bit cumbersome. `vue-router` provides a syntax sugar which allows you to return an Object containing Promises (it can contain non-Promise fields too, of course). Here's the same example using the syntax sugar and ES6: + +``` js +route: { + data: ({ to: { params: { userId }}}) => ({ + user: userService.get(userId), + post: postsService.getForUser(userId) + }) +} +``` + +The router will set the component's `user` and `post` fields to the corresponding Promises' resolved values when they are resolved. `$loadingRouteData` will be set to `false` when all Promises have been resolved. + +Equivalent in ES5: + +``` js +route: { + data: function (transition) { + var userId = transition.to.params.userId + return { + user: userService.get(userId), + post: postsService.getForUser(userId) + } + } +} +``` diff --git a/docs/en/pipeline/deactivate.md b/docs/en/pipeline/deactivate.md new file mode 100644 index 000000000..8951f6b29 --- /dev/null +++ b/docs/en/pipeline/deactivate.md @@ -0,0 +1,21 @@ +# `deactivate(transition) [-> Promise]` + +Called on a leaving component the activation phase when it is about to be deactivated and removed. + +### Arguments + +- [`transition {Transition}`](hooks.md#transition-object) + + Call `transition.next()` to resolve the hook. Note calling `transition.abort()` here will not take the app back to the previous route because the transition has already been validated. + +### Expected Return Value + +- Optionally return a Promise. + - `resolve` -> `transition.next()` + - `reject(reason)` -> `transition.abort(reason)` + +### Details + +This hook is called from bottom-up. A parent view component's `deactivate` only gets called when its child's `deactivate` has resolved. + +New components' `activate` hooks will only get called when all current components' `deactivate` hooks have been resolved. diff --git a/docs/en/pipeline/hooks.md b/docs/en/pipeline/hooks.md new file mode 100644 index 000000000..eb8fc9d09 --- /dev/null +++ b/docs/en/pipeline/hooks.md @@ -0,0 +1,142 @@ +# Transition Hooks + +A `<router-view>` component involved in a transition can control / react to the transition by implementing appropriate transition pipeline hooks. These hooks include: + +- `data` +- `activate` +- `deactivate` +- `canActivate` +- `canDeactivate` +- `canReuse` + +You can implement these hooks under your component's `route` option: + +``` js +Vue.component('hook-example', { + // ... other options + route: { + activate: function () { + console.log('hook-example activated!') + }, + canDeactivate: function (transition) { + console.log('You are not allowed to leave.') + transition.abort() + } + } +}) +``` + +### Transition Object + +Each transition hook will receive a `transition` object as the only argument. The transition object exposes the following properties & methods: + +- **transition.from** + + A [route object](../route.md) representing the route we are transitioning from. + +- **transition.to** + + A route object representing the target path. + +- **transition.next()** + + Call this method to progress to the next step of the transition. + +- **transition.abort([reason])** + + Call this method to cancel / reject the transition. + +- **transition.redirect(path)** + + Cancel current transition and redirect to a different target route instead. + +### Hook Resolution Rules + +We often need to perform asynchronous tasks inside transition hooks. The transition will not proceed until an asynchronous hook has been resolved. Here are the rules to determine when a hook should be considered resolved: + +1. If the hook returns a Promise, the hook will be resolved when the Promise is resolved. [See details below](#returning-promise-in-hooks). + +2. If the hook doesn't return a Promise, and doesn't expect any argument, it is resolved synchronously. For example: + + ``` js + route: { + activate: function (/* no argument here */) { + // will resolve synchronously as long as not returning a Promise + } + } + ``` + +3. If the hook doesn't return a Promise, but expects an argument (`transition`), then the hook will only be resolved when one of `transition.next()`, `transition.abort()` or `transition.redirect()` is called. For example: + + ``` js + route: { + activate: function (transition) { + // resolve after 1 second + setTimeout(transition.next, 1000) + } + } + ``` + +4. In validation hooks such as `canActivate`, `canDeactivate` and the [global beforeEach hook](../api/before-each.md), returning a Boolean will synchronously resolve the hook, even if the hooks has the `transition` argument. + +### Returning Promise in Hooks + +- When you return a Promise in a transition hook, `transition.next` will be called for you when the Promise resolves successfully. + +- If the Promise is rejected during validation phase, it will call `transition.abort`. + +- If the Promise is rejected during activation phase, it will call `transition.next`. + +- For validation hooks, if the Promise's resolved value is falsy, it will also abort the transition. + +- If a rejected promise has an uncaught error, it will be thrown unless you suppress it with the `suppressTransitionError` option when creating the router. + +**Example:** + +``` js +// inside component definition +route: { + canActivate: function () { + // assuming the service returns a Promise that + // resolve to either `true` or `false`. + return authenticationService.isLoggedIn() + }, + activate: function (transition) { + return messageService + .fetch(transition.to.params.messageId) + .then((message) => { + // set the data once it arrives. + // the component will not display until this + // is done. + this.message = message + }) + } +} +``` + +We are asynchronously fetching data in the `activate` hook here just for the sake of an example; Note that we also have the [`data` hook](data.md) which is in general more appropriate for this purpose. + +**TIP:** if you are using ES6 you can use argument destructuring to make your hooks cleaner: + +``` js +route: { + activate ({ next }) { + // when done: + next() + } +} +``` + +For a full example of transition hooks in action, check out the [advanced example](https://github.com/vuejs/vue-router/tree/dev/example/advanced) in the vue-router repo. + +### Hook Merging + +Similar to component lifecycle hooks, the following route lifecycle hooks: + +- `data` +- `activate` +- `deactivate` + +...are "merged" during option merges (i.e. class extension or mixins). For example, if your component defines a route `data` hook, and uses a mixin that also provides a route `data` hook, both hooks will get called (mixin hooks called first) and the resolved data from all hooks will be merged together. + +Note that validation hooks like `canActivate`, `canDeactivate` and `canReuse` are always overwritten by the newer value during option merges. diff --git a/docs/en/route.md b/docs/en/route.md new file mode 100644 index 000000000..620dff6fe --- /dev/null +++ b/docs/en/route.md @@ -0,0 +1,107 @@ +# Route Object & Route Matching + +Vue-router supports matching paths that contain dynamic segments, star segments and query strings. All these information of a parsed route will be accessible on the exposed **Route Context Objects** (we will just call them "route" objects from now on). The route object will be injected into every component in a vue-router-enabled app as `this.$route`, and will be updated whenever a route transition is performed. + +A route object exposes the following properties: + +- **$route.path** + + A string that equals the path of the current route, always resolved as an absolute path. e.g. `"/foo/bar"`. + +- **$route.params** + + An object that contains key/value pairs of dynamic segments and star segments. More details below. + +- **$route.query** + + An object that contains key/value pairs of the query string. For example, for a path `/foo?user=1`, we get `$route.query.user == 1`. + +- **$route.router** + + The router instance that is managing this route (and its owner component). + +- **$route.matched** + + An array containing the route configuration objects for all matched segments in the current route. + +- **$route.name** + + The name of the current route, if it has one. (See [named routes](./named.md)) + +### Custom Fields + +In addition to the built-in properties, custom fields defined in the route config will also be merged on to the route object. For example: + +``` js +router.map({ + '/a': { + component: { ... }, + auth: true + } +}) +``` + +When `/a` is matched, `$route.auth` will be `true`. This allows us to perform authentication checks in global hooks: + +``` js +router.beforeEach(function (transition) { + if (transition.to.auth && !authenticated) { + transition.redirect('/login') + } else { + transition.next() + } +}) +``` + +> See [API](api/before-each.md) for how the `beforeEach` hook works. + +When a nested route is matched, all custom fields will be merged on to the same `$route` object. When a sub route and a parent route has the same custom field, the sub route's value will overwrite the parent's. + +### Using in Templates + +You can directly bind to the `$route` object inside your component templates. For example: + +``` html +<div> + <p>Current route path: {{$route.path}}</p> + <p>Current route params: {{$route.params | json}}</p> +</div> +``` + +### Route Matching + +#### Dynamic Segments + +Dynamic segments can be defined in the form of path segments with a leading colon, e.g. in `user/:username`, `:username` is the dynamic segment. It will match paths like `/user/foo` or `/user/bar`. When a path containing a dynamic segment is matched, the dynamic segments will be available inside `$route.params`. + +Example Usage: + +``` js +router.map({ + '/user/:username': { + component: { + template: '<p>username is {{$route.params.username}}</p>' + } + } +}) +``` + +A path can contain multiple dynamic segments, and each of them will be stored as a key/value pair in `$route.params`. + +Examples: + +| pattern | matched path | $route.params | +|---------|------|--------| +| /user/:username | /user/evan | `{ username: 'evan' }` | +| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: 123 }` | + +#### Star Segments + +While dynamic segments can correspond to only a single segment in a path, star segments is basically the "greedy" version of it. For example `/foo/*bar` will match anything that starts with `/foo/`. The part matched by the star segment will also be available in `$route.params`. + +Examples: + +| pattern | matched path | $route.params | +|---------|------|--------| +| /user/*any | /user/a/b/c | `{ any: 'a/b/c' }` | +| /foo/*any/bar | /foo/a/b/bar | `{ any: 'a/b' }` | diff --git a/docs/en/view.md b/docs/en/view.md new file mode 100644 index 000000000..5ae79a4ce --- /dev/null +++ b/docs/en/view.md @@ -0,0 +1,13 @@ +# `<router-view>` + +The `<router-view>` element is used as outlets for rendering matched components. It is based upon Vue's dynamic component system, and therefore inherits many features from a normal dynamic component: + +- You can pass props to it. +- HTML content inside the `<router-view>` will be used for content insertion in the rendered component. +- `v-transition` and `transition-mode` are fully supported. Note: for transition effects to work, your route component must not be a [fragment instance](http://vuejs.org/guide/components.html#Fragment-Instance). +- `v-ref` is also supported; The rendered component will be registered in the parent component's `this.$` object. + +However, there are also a few limitations: + +- ~~`keep-alive` is not supported as of now.~~ `keep-alive` now has experimental support in 0.7.2+. +- `wait-for` is not supported. You should be using the [`activate` transition hook](pipeline/activate.html) to control the timing of the transition. diff --git a/docs/fr/README.md b/docs/fr/README.md deleted file mode 100644 index b46196db2..000000000 --- a/docs/fr/README.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -home: true -heroImage: /logo.png -actionText: Get Started → -actionLink: /fr/installation.html -footer: MIT Licensed | Copyright © 2014-present Evan You, Eduardo San Martin Morote ---- - -Vue Router est le router officiel pour [Vue.js](http://vuejs.org). Il s'intègre aisément avec Vue.js pour faire des applications mono page avec Vue.js. Fonctionnalités incluses: - -- Vues et routes imbriquées -- Modulaire, configuration basée sur les composants -- Paramètres de route, de requête -- Effets de transition de vues basées sur le systeme de transition de Vue.js -- Gestion fine de la navigation -- Classes CSS pour liens actifs -- Mode HTML5 de la gestion de l'historique ou mode par hash, avec solution de repli automatique pour IE9 -- Gestion du scroll - -[Pour commencer](./guide/) ou jouer avec les [exemples](https://github.com/vuejs/vue-router/tree/dev/examples) (voir [`README.md`](https://github.com/vuejs/vue-router/) pour les faire fonctionner). - -<HomeSponsors /> diff --git a/docs/fr/api/README.md b/docs/fr/api/README.md deleted file mode 100644 index 0006b0dbc..000000000 --- a/docs/fr/api/README.md +++ /dev/null @@ -1,478 +0,0 @@ ---- -sidebar: auto ---- - -# API - -## `<router-link>` - -`<router-link>` est le composant pour activer la navigation utilisateur dans une application où le routeur est activé. La localisation cible est spécifiée grâce à la prop `to`. Il est rendu en tant que balise `<a>` avec le `href` correct par défaut, mais peut être configuré grâce à la prop `tag`. De plus, le lien se verra attribuer une classe CSS active lorsque la route cible est active. - -`<router-link>` est préféré par rapport au `<a href="...">` en dur dans le code pour les raisons suivantes : - -- Cela fonctionne de la même manière qu'on soit dans le mode historique HTML5 ou le mode hash, donc si vous avez décidé de changer de mode, ou alors que le routeur se replie sur le mode hash pour IE9, rien n'a besoin d'être changé. - -- Dans le mode historique HTML5, `router-link` interceptera l'évènement du clic, comme ça le navigateur n'essaiera pas de rafraichir la page. - -- En utilisant l'option `base` dans le mode historique HTML5, vous n'avez pas besoin de l'inclure dans la prop `to` - -### `v-slot` API (3.1.0+) - -`router-link` est fortement personnalisable via une [slot avec portée](https://fr.vuejs.org/v2/guide/components-slots.html#Slots-avec-portee). C'est une API qui cible principalement les créateurs de bibliothèque, mais elle peut aussi servir pour les développeurs, le plus souvent dans des composants personnalisés tel qu'un _NavLink_ et autre. - -**Lors de l'utilisation `v-slot` API, il faut obligatoirement passer un composant enfant unique au `router-link`**. Si vous ne le faites pas, `router-link` va entourer ses enfants avec une balise `span`. - -```html -<router-link - to="/about" - custom - v-slot="{ href, route, navigate, isActive, isExactActive }" -> - <NavLink :active="isActive" :href="href" @click="navigate" - >{{ route.fullPath }}</NavLink - > -</router-link> -``` - -- `href`: URL résolue. Ce serait l'attribut `href` d'une balise `a` -- `route`: localisation normalisée et résolue -- `navigate`: fonction pour lancer la navigation. **En cas de nécessité il va automatiquement empêcher les événements**, de la même façon que `router-link` -- `isActive`: `true` si [active class](#active-class) devrait être appliqué. Permet d'appliquer une classe arbitraire -- `isExactActive`: `true` si [exact active class](#exact-active-class) devrait être appliqué. Permet d'appliquer une classe arbitraire - -### Appliquer la classe active à l'élément extérieur - -Parfois, on voudrait que la classe active soit appliquée à un élément extérieur au lieu de l'élément `<a>` lui-même, dans ce cas, vous pouvez faire le rendu de cet élément extérieur en utilisant `<router-link>` et en entourant le tag `<a>` : - -```html -<router-link tag="li" to="/foo"> - <a>/foo</a> -</router-link> -``` - -Dans ce cas, `<a>` sera le lien actuel (et récupèrera le bon `href`), mais la classe active sera appliquée à l'élément extérieur `<li>`. - -## `<router-link>` Props - -### to - -- type : `string | Location` -- requis - - Désigne la route cible du lien. Lorsqu'il est cliqué, la valeur de la prop `to` va être passée de manière interne à `router.push`, donc la valeur peut soit être une chaine de caractères, ou alors un objet décrivant une localisation. - - ```html - <!-- chaine littérale --> - <router-link to="home">Accueil</router-link> - <!-- rend --> - <a href="home">Accueil</a> - - <!-- expression JavaScript en utilisant `v-bind` --> - <router-link v-bind:to="'home'">Accueil</router-link> - - <!-- Omettre `v-bind` est OK, tout comme une autre prop --> - <router-link :to="'home'">Accueil</router-link> - - <!-- pareil qu'au-dessus --> - <router-link :to="{ path: 'home' }">Accueil</router-link> - - <!-- route nommée --> - <router-link :to="{ name: 'user', params: { userId: 123 }}" - >Utilisateur</router-link - > - - <!-- avec une requête, résulte en `/register?plan=private` --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}" - >S'enregistrer</router-link - > - ``` - -### replace - -- type : `boolean` -- défaut : `false` - - Configurer la prop `replace` appellera `router.replace()` au lieu de `router.push()` lors du clic, comme ça, la navigation ne laissera pas un enregistrement dans l'historique. - - ```html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -### append - -- type : `boolean` -- défaut : `false` - - Configurer la propriété `append` suffixe toujours le chemin relatif au chemin courant. Par exemple, assumons que nous naviguons de `/a` à un lien relatif `b`, sans `append` on finira sur `/b`, mais avec `append` on finira sur `/a/b`. - - ```html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -### tag - -- type : `string` -- défaut : `"a"` - - Parfois, on veut que `<router-link>` soit rendu avec une balise différente, ex : `<li>`. On peut alors utiliser la prop `tag` pour modifier la balise qui sera rendue, et elle écoutera toujours les évènements de clic pour la navigation. - - ```html - <router-link to="/foo" tag="li">foo</router-link> - <!-- rend --> - <li>foo</li> - ``` - -### active-class - -- type : `string` -- défaut : `"router-link-active"` - - Configure la classe CSS active qui sera appliquée lorsque le lien sera actif. Notez que la valeur par défaut peut aussi être configurée de manière globale via l'option `linkActiveClass` du constructeur du routeur. - -### exact - -- type : `boolean` -- défaut : `false` - -Le comportement par défaut de la correspondance de classe active est une **correspondance inclusive**. Par exemple, `<router-link to="/a">` verra cette classe appliquée tant que le chemin courant commencera par `/a/` ou `/a`. - -Une conséquence de cela est que `<router-link to="/">` sera actif pour toutes les routes ! Pour forcer le lien dans un « mode correspondance exacte », utilisez la prop `exact`. - -```html -<!-- ce lien sera uniquement actif à `/` --> -<router-link to="/" exact></router-link> -``` - -Allez voir les exemples expliquant la classe active pour les liens [ici](https://jsfiddle.net/8xrk1n9f/). - -### event - -- type : `string | Array<string>` -- défaut : `'click'` - - Spécifie les évènement(s) que peu(ven)t lancer la navigation de lien. - -### exact-active-class - -- type : `string` -- défaut : `"router-link-exact-active"` - - Configure la classe CSS active qui sera appliquée lorsqu'un lien sera actif avec une correspondance exacte. Notez que la valeur par défaut peut aussi être configurée de manière globale via l'option `linkExactActiveClass` du constructeur du routeur. - -## `<router-view>` - -Le composant `<router-view>` est un composant fonctionnel qui fait le rendu du composant correspondant au chemin donné. Les composants rendus dans `<router-view>` peuvent aussi contenir leur propre `<router-view>`, qui fera le rendu des composants pour les chemins imbriqués. - -## `<router-view>` Props - -### name - -- type : `string` -- défaut : `"default"` - - Lorsqu'un `<router-view>` a un nom, il fera le rendu du composant correspondant à ce nom dans les itinéraires de route correspondant à l'option `components`. Voir les [Routes nommées](../guide/essentials/named-views.md) pour un exemple. - -## Options de construction du routeur - -### routes - -- type: `Array<RouteConfig>` - - Déclaration de type pour `RouteConfig` : - - ```js - declare type RouteConfig = { - path: string, - component?: Component, - name?: string, // pour les routes nommées - components?: { [name: string]: Component }, // pour les vues nommées - redirect?: string | Location | Function, - props?: boolean | string | Function, - alias?: string | Array<string>, - children?: Array<RouteConfig>, // pour les routes imbriquées - beforeEnter?: (to: Route, from: Route, next: Function) => void, - meta?: any, - - // 2.6.0+ - caseSensitive?: boolean, // use case sensitive match? (default: false) - pathToRegexpOptions?: Object // path-to-regexp options for compiling regex - } - ``` - -### mode - -- type : `string` - -- défaut : `"hash" (dans le navigateur) | "abstract" (en Node.js)` - -- valeurs disponibles : `"hash" | "history" | "abstract"` - - Configure le mode du routeur. - - - `hash` : utilise le hash de l'URL pour le routage. Fonctionne dans tous les navigateurs supportés par Vue, ainsi que ceux qui ne supportent pas l'API History d'HTML5. - - - `history` : nécessite l'API History d'HTML 5 et la configuration du serveur. Voir [Mode historique de HTML5](../guide/essentials/history-mode.md). - - - `abstract` : fonctionne dans tous les environnements JavaScript, ex. côté serveur avec Node.js. **Le routeur sera automatiquement forcé d'utiliser ce mode si aucune API navigateur n'est présente.** - -### base - -- type : `string` - -- défaut : `"/"` - - L'URL de base de l'application. Par exemple, si l'application monopage entière est distribuée sous `/app/`, alors `base` doit utiliser la valeur `"/app/"`. - -### linkActiveClass - -- type : `string` - -- défaut : `"router-link-active"` - - Configure de manière globale la classe active par défaut de `<router-link>`. Voir aussi [router-link](./#router-link). - -### linkExactActiveClass - -- type : `string` - -- default : `"router-link-exact-active"` - - Configure de manière globale la classe active par défaut de `<router-link>` lors d'une correspondance exacte. Voir aussi [router-link](./#router-link). - -### scrollBehavior - -- type : `Function` - - Signature : - - ```ts - type PositionDescriptor = - { x: number, y: number } | - { selector: string } | - void - - type scrollBehaviorHandler = ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => PositionDescriptor | Promise<PositionDescriptor> - ``` - - Pour plus de détails, voir [Comportement du Scroll](../guide/advanced/scroll-behavior.md). - -### parseQuery / stringifyQuery - -- type : `Function` - - Permettent de spécifier des fonctions personnalisées pour formater en objet ou en chaîne de caractères la requête. Surcharge les fonctions par défaut. - -### fallback - -- type : `boolean` - - Contrôle comment le routeur devrait passer en mode `hash` quand le navigateur ne supporte pas `history.pushState`. Par défaut à `true`. - - Passer cette valeur à `false` va essentiellement faire que la navigation via `router-link` va réclamer un rechargement de page dans IE9. Ceci est utile quand l'application est rendue côté serveur et à besoin de fonctionner dans IE9, car le mode hash ne fonctionne pas avec du SSR. - -## L'instance du routeur - -### router.app - -- type: `instance de Vue` - -L'instance racine de Vue dans laquelle l'instance de `routeur` a été injectée. - -### router.mode - -- type: `string` - - Le [mode](./#mode) que le routeur utilise. - -### router.currentRoute - -- type: `Route` - - La route actuelle représentée en tant qu'un [objet route](./#proprietes-de-l-objet-route). - -## Méthodes - -### router.beforeEach - -### router.beforeResolve - -### router.afterEach - -Ajout des interceptions globales de navigation. Voir les [Intercepteurs de navigation](../guide/advanced/navigation-guards.md). - -Dans la version 2.5.0+, ces trois méthodes retournent une fonction qui enlève les fonctions d'interception et hooks enregistrés. - -### router.push - -### router.replace - -### router.go - -### router.back - -### router.forward - -Navigue à une nouvelle URL de façon programmée. Voir [Navigation de façon programmée](../guide/essentials/navigation.md). - -### router.getMatchedComponents - -Retourne un tableau de composants (définition/constructeur et non les instances) correspondant à la `location` passée en paramètre, ou alors de la route actuelle. Cette fonction est principalement utilisée pendant le rendu côté serveur afin d'effectuer une prérécupération des données. - -### router.resolve - -Inverse la résolution d'URL. La `location` doit avoir la même forme qu'utilisée dans `<router-link>`, retourne un objet avec les propriétés suivantes : - -```js -{ - location: Location - route: Route - href: string -} -``` - -- `current` is the current Route by default (most of the time you don't need to change this) -- `append` allows you to append the path to the `current` route (as with [`router-link`](./#router-link-props)) - -### router.addRoutes - -Permet d'ajouter dynamiquement des routes au routeur. L'argument doit être un tableau utilisant le même format de configuration que l'option `routes` du constructeur. - -### router.onReady - -Cette méthode met en file d'attente une fonction de rappel qui sera appelée lorsque le routeur aura complété la navigation initiale, ce qui signifie qu'il a résolu tous les hooks d'entrées asynchrones et composants asynchrones qui sont associés à la route initiale. - -C'est utile pendant un rendu côté serveur pour assurer une sortie consistance sur le serveur et le client. - -Le deuxième argument `errorCallback` est uniquement supporté à partir de la version 2.4. Il sera appelé lorsque la résolution de la route initiale résultera en une erreur (ex. : la résolution d'un composant asynchrone qui a échoué). - -### router.onError - -Enregistre une fonction de rappel qui sera appelée lorsqu'une erreur sera capturée pendant la navigation vers une route. Notez que pour qu'une erreur soit appelée, cela doit correspondre à l'un des scénarios suivants : - -- L'erreur est lancée de manière synchrone à l'intérieur d'une fonction d'interception de route ; - -- L'erreur est capturée et traitée de manière asynchrone en appelant `next(err)` à l'intérieur d'une fonction d'interception de route ; - -- Une erreur est survenue pendant la résolution d'un composant asynchrone qui est requis pour faire le rendu d'une route. - -# L'objet `Route` - -Un **objet `Route`** représente l'état actuel de la route active. Il contient des informations analysées à propos de l'URL courant et **les itinéraires de route** appariés par l'URL. - -L'objet `Route` est immutable. Chaque navigation qui se déroule avec succès résultera en un nouvel objet `Route`. - -L'objet `Route` peut être trouvé à plusieurs endroits : - -- À l'intérieur des composants en tant que `this.$route` - -- À l'intérieur des fonctions de rappel des observateurs de `$route` - -- Comme valeur de retour après l'appel de `router.match(location)` - -- À l'intérieur des fonctions d'interception de la navigation, dans les deux premiers paramètres de la fonction : - - ```js - router.beforeEach((to, from, next) => { - // `to` et `from` sont tous les deux des objets Route - }) - ``` - -- À l'intérieur de la fonction `scrollBehavior` dans les deux premiers arguments : - - ```js - const router = new VueRouter({ - scrollBehavior(to, from, savedPosition) { - // `to` et `from` sont tous les deux des objets Route - } - }) - ``` - -### Propriétés de l'objet `Route` - -- **\$route.path** - - - type : `string` - - Une chaine de caractères représentant le chemin de la route en cours, toujours résolue en tant que chemin absolu, ex : `"/foo/bar"`. - -- **\$route.params** - - - type : `Object` - - Un objet qui contient des pairs clé/valeur de segments dynamiques et segments _star_. S'il n'y a pas de paramètres, alors la valeur sera un objet vide. - -- **\$route.query** - - - type : `Object` - - Un objet qui contient des pairs clé/valeur de la requête au format d'une chaine de caractères. Par exemple, pour un chemin `/foo?user=1`, on aura `$route.query.user == 1`. S'il n'y a pas de requête, alors la valeur sera un objet vide. - -- **\$route.hash** - - - type : `string` - - Le hash de la route courante (avec le `#`), s'il y en a un. S'il n'y a pas de hash, alors la valeur sera une chaine de caractères vide. - -- **\$route.fullPath** - - - type : `string` - - L'URL entièrement résolu, incluant la requête et le hash. - -- **\$route.matched** - - - type : `Array<RouteRecord>` - - Un `Array` contenant les **les itinéraires de la route** pour chaque segment de chemin imbriqué de la route courante. Les itinéraires de la route sont des copies des objets dans le tableau de configuration `routes` (et dans les tableaux `children`). - - ```js - const router = new VueRouter({ - routes: [ - // l'objet qui suit est un itinéraire de route - { - path: '/foo', - component: Foo, - children: [ - // c'est aussi un itinéraire - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - Lorsque l'URL sera `/foo/bar`, `$route.matched` sera un `Array` contenant les deux objets (clonés), dans l'ordre parent à l'enfant. - -- **\$route.name** - - Le nom de la route courante, si elle en a un. (Voir [Routes nommées](../guide/essentials/named-routes.md)). - -- **\$route.redirectedFrom** - - Le nom de la route d'où la page a été redirigée, si elle en a un. (Voir [Redirection et alias](../guide/essentials/redirect-and-alias.md)). - -## Injections de composant - -### Propriétés injectées - -Ces propriétés sont injectées dans chacun des composants enfants, en passant l'instance du routeur à l'application racine de Vue en tant qu'option `router`. - -- **\$router** - - L'instance du routeur. - -- **\$route** - -La [Route](./#proprietes-de-l-objet-route) actuellement active. C'est une propriété en lecture seule et ses propriétés sont immutables, mais elles restent malgré tout observables. - -### Options activées - -- **beforeRouteEnter** -- **beforeRouteUpdate** (ajouté en 2.2) -- **beforeRouteLeave** - - Voir l'[interception par composant](../guide/advanced/navigation-guards.md#securisation-par-composant). diff --git a/docs/fr/guide/README.md b/docs/fr/guide/README.md deleted file mode 100644 index c58572205..000000000 --- a/docs/fr/guide/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# Pour commencer - -::: tip Note -Nous utiliserons [ES2015](https://github.com/lukehoban/es6features) dans les exemples de code dans ce guide. -Tous les exemples utiliseront la version complète de Vue pour rendre l'analyse de template possible. Plus de détails [ici](https://fr.vuejs.org/guide/installation.html#Runtime-Compiler-vs-Runtime-seul). -::: - -Créer une application monopage avec Vue + Vue Router est vraiment simple. Avec Vue.js, nous concevons déjà notre application avec des composants. En ajoutant vue-router dans notre application, tout ce qu'il nous reste à faire est de relier nos composants aux routes, et de laisser vue-router faire le rendu. Voici un exemple de base : - -## HTML - -```html -<script src="https://unpkg.com/vue@2/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script> - -<div id="app"> - <h1>Bonjour l'application !</h1> - <p> - <!-- utilisez le composant router-link pour la navigation. --> - <!-- spécifiez le lien en le passant à la prop `to` --> - <!-- `<router-link>` sera rendu en tag `<a>` par défaut --> - <router-link to="/foo">Aller à Foo</router-link> - <router-link to="/bar">Aller à Bar</router-link> - </p> - <!-- balise pour le composant router-view --> - <!-- le composant correspondant à la route sera rendu ici --> - <router-view></router-view> -</div> -``` - -## JavaScript - -```js -// 0. Si vous utilisez un système de module (par ex. via vue-cli), il faut importer Vue et Vue Router et ensuite appeler `Vue.use(VueRouter)`. - -// 1. Définissez les composants de route. -// Ces derniers peuvent être importés depuis d'autre fichier -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. Définissez des routes. -// Chaque route doit correspondre à un composant. Le « composant » peut -// soit être un véritable composant créé via `Vue.extend()`, ou juste un -// objet d'options. -// Nous parlerons plus tard des routes imbriquées. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. Créez l'instance du routeur et passez l'option `routes`. -// Vous pouvez également passer des options supplémentaires, -// mais nous allons faire simple pour l'instant. -const router = new VueRouter({ - routes // raccourci pour `routes: routes` -}) - -// 5. Créez et montez l'instance de Vue. -// Soyez sûr d'injecter le routeur avec l'option `router` pour -// permettre à l'application tout entière d'être à l'écoute du routeur. -const app = new Vue({ - router -}).$mount('#app') - -// L'application est maintenant en marche ! -``` - -En injectant le routeur, nous y avons accès à travers `this.$router`. Nous avons également accès à la route courante derrière `this.$route` depuis n'importe quel composant : - -```js -// Home.vue -export default { - computed: { - username() { - // Nous verrons ce que représente `params` dans un instant. - return this.$route.params.username - } - }, - methods: { - goBack() { - window.history.length > 1 ? this.$router.go(-1) : this.$router.push('/') - } - } -} -``` - -Dans les documentations, nous allons souvent utiliser l'instance `router`. Gardez à l'esprit que l'utilisation de `this.$router` est exactement la même chose que celle de `router`. La raison pour laquelle nous utilisons `this.$router` est la possibilité ainsi offerte de ne pas avoir à importer le routeur dans chaque fichier de composant ayant besoin d'accéder au routage. - -Vous pouvez aussi regarder cet [exemple](https://jsfiddle.net/yyx990803/xgrjzsup/). - -Notez qu'un `<router-link>` obtiendra automatiquement la classe `.router-link-active` lorsque sa route cible correspond à la route actuelle. Vous pouvez en apprendre plus à propos de cela dans sa [documentation d'API](../api/#router-link). diff --git a/docs/fr/guide/advanced/data-fetching.md b/docs/fr/guide/advanced/data-fetching.md deleted file mode 100644 index e34f83535..000000000 --- a/docs/fr/guide/advanced/data-fetching.md +++ /dev/null @@ -1,110 +0,0 @@ -# Récupération de données - -Parfois vous avez besoin de récupérer des données depuis le serveur lorsqu'une route est activée. Par exemple, avant de faire le rendu d'un profil utilisateur, vous avez besoin de récupérer les données de l'utilisateur depuis le serveur. Nous pouvons y parvenir de deux façons différentes : - -- **Récupération de données après la navigation** : effectue la navigation en premier, et récupère les données dans le hook entrant du cycle de vie d'un composant. Affiche un état de chargement pendant que les données sont en train d'être récupérées. - -- **Récupération de données avant la navigation** : récupère les données avant la navigation dans la fonction d'interception d'entrée de la route, et effectue la navigation après que les données aient été récupérées. - -Techniquement, les deux choix sont valides. Cela dépend de l'expérience utilisateur que vous souhaitez apporter. - -## Récupération de données après la navigation - -En utilisant cette approche, nous naviguons et faisons immédiatement le rendu du composant et récupérons les données via le hook `created` du composant. Cela nous donne l'opportunité d'afficher un état de chargement pendant que les données sont récupérées à travers le réseau, et nous pouvons aussi gérer le chargement différemment pour chaque vue. - -Assumons que nous ayons un composant `Post` qui a besoin de récupérer des données pour un billet identifié par `$route.params.id` : - -``` html -<template> - <div class="post"> - <div class="loading" v-if="loading"> - Chargement... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // récupérer les données lorsque la vue est créée et - // que les données sont déjà observées - this.fetchData() - }, - watch: { - // appeler encore la méthode si la route change - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // remplacer `getPost` par une fonction de récupération de données - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## Récupération de données avant la navigation - -Avec cette approche, nous récupèrerons les données avant de naviguer vers la nouvelle route. Nous pouvons effectuer la récupération de données dans la fonction d'interception `beforeRouteEnter` du composant à venir, et seulement appeler `next` lorsque la récupération est terminée : - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // quand la route change et que ce composant est déjà rendu, - // la logique est un peu différente - beforeRouteUpdate (to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData (err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -L'utilisateur va rester sur la vue précédente pendant que la ressource est en train d'être récupérée pour la vue à venir. Il est cependant recommandé d'afficher une barre de progression ou un autre type d'indicateur pendant que les données sont en train d'être récupérées. Si la récupération échoue, il est aussi recommandé d'afficher une sorte de message d'erreur global. diff --git a/docs/fr/guide/advanced/lazy-loading.md b/docs/fr/guide/advanced/lazy-loading.md deleted file mode 100644 index ae138cf72..000000000 --- a/docs/fr/guide/advanced/lazy-loading.md +++ /dev/null @@ -1,50 +0,0 @@ -# Chargement à la volée - -Pendant la construction d'applications avec un empaqueteur (« bundler »), le paquetage JavaScript peut devenir un peu lourd, et donc cela peut affecter le temps de chargement de la page. Il serait plus efficace si l'on pouvait séparer chaque composant de route dans des fragments séparés, et de les charger uniquement lorsque la route est visitée. - -En combinant la [fonctionnalité de composant asynchrone](https://fr.vuejs.org/v2/guide/components.html#Composants-asynchrones) de Vue et la [fonctionnalité de scission de code](https://webpack.js.org/guides/code-splitting-async/) de webpack, il est très facile de charger à la volée les composants de route. - -Premièrement, un composant asynchrone peut définir une fonction fabrique qui retourne une Promesse (qui devrait résoudre le composant lui-même) : - -```js -const Foo = () => - Promise.resolve({ - /* définition du composant */ - }) -``` - -Deuxièmement, avec webpack 2, nous pouvons utiliser la syntaxe d'[import dynamique](https://github.com/tc39/proposal-dynamic-import) pour indiquer un point de scission de code : - -```js -import('./Foo.vue') // returns a Promise -``` - -::: tip Note -si vous utilisez Babel, vous aurez besoin d'ajouter le plugin [syntax-dynamic-import](http://babeljs.io/docs/plugins/syntax-dynamic-import/) de façon à ce que Babel puisse analyser correctement la syntaxe. -::: - -En combinant les deux, on définit un composant asynchrone qui sera automatiquement scindé par webpack : - -```js -const Foo = () => import('./Foo.vue') -``` - -Rien n'a besoin d'être modifié dans la configuration de la route, utilisez `Foo` comme d'habitude. - -```js -const router = new VueRouter({ - routes: [{ path: '/foo', component: Foo }] -}) -``` - -## Grouper des composants dans le même fragment - -Parfois on aimerait grouper tous les composants imbriqués sous la même route, dans un seul et même fragment asynchrone. Pour arriver à cela, nous avons besoin d'utiliser les [fragments nommés](https://webpack.js.org/api/module-methods/#magic-comments) en donnant un nom au fragment en utilisant une syntaxe de commentaire spéciale (requires webpack > 2.4) : - -```js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -webpack groupera tous les modules asynchrones avec le même nom de fragment dans le même fragment asynchrone. diff --git a/docs/fr/guide/advanced/meta.md b/docs/fr/guide/advanced/meta.md deleted file mode 100644 index 24dc5ccd0..000000000 --- a/docs/fr/guide/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# Champs meta de route - -Vous pouvez inclure un champ `meta` quand vous définissez une route : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // un champ `meta` - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -Comment maintenant accéder à ce champ `meta` ? - -Tout d'abord, chaque objet route dans la configuration de `routes` est appelé un **registre de route**. Les registres de route peuvent être imbriqués. Par conséquent, quand une route concorde, elle peut potentiellement concorder avec plus d'un registre de route. - -Par exemple, avec la configuration de route ci-dessous, l'URL `/foo/bar` va concorder avec le registre parent et le registre enfant. - -Tous les registres concordants avec une route sont exposés dans l'objet `$route` (ainsi que les objets de route dans les sécurisations de navigation) dans le tableau `$route.matched`. Donc, nous devons itérer à travers `$route.matched` pour vérifier les champs meta dans les registres de route. - -Un exemple concret est la vérification d'un champ meta dans une interception de navigation globale : - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // cette route demande une autorisation, vérifions si l'utilisateur est logué. - // sinon, redirigeons le sur la page de login. - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // assurez vous de toujours appeler `next()` ! - } -}) -``` diff --git a/docs/fr/guide/advanced/navigation-guards.md b/docs/fr/guide/advanced/navigation-guards.md deleted file mode 100644 index 4ee3d4fad..000000000 --- a/docs/fr/guide/advanced/navigation-guards.md +++ /dev/null @@ -1,153 +0,0 @@ -# Intercepteurs de navigation - -Comme le nom le suggère, l'interception de navigation fournie par `vue-router` est principalement utilisée pour intercepter la navigation avec des redirections ou des annulations d'accès. Il y a plusieurs hooks disponibles lors du processus de navigation : globaux, par route ou par composant. - -Souvenez-vous de cela : **le changement de paramètre ou de query ne va pas lancer d'interception d'entrée ou de sortie de navigation**. Vous pouvez toujours [observer l'objet `$route`](../essentials/dynamic-matching.md#reacting-to-params-changes) pour réagir à ces changements, ou utiliser la fonction `beforeRouteUpdate` d'une interception par composant. - -## Interception globale - -Vous pouvez abonner une interception d'entrée en utilisant `router.beforeEach` : - -``` js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -Les interceptions d'entrées globales sont appelées lors de l'ordre de création, chaque fois qu'une navigation est déclenchée. Les interceptions peuvent être résolues de manière asynchrone, et la navigation est considérée comme **en attente** avant que tous les hooks ne soient résolus. - -Chaque fonction d'interception reçoit trois arguments : - -- **`to: Route`**: L'[objet `Route`](../../api/#the-route-object) cible vers lequel on navigue. - -- **`from: Route`**: la route courante depuis laquelle nous venons de naviguer. - -- **`next: Function`**: cette fonction doit être appelée pour **résoudre** le hook. L'action dépend des arguments fournis à `next`: - - - **`next()`**: se déplacer jusqu'au prochain hook du workflow. S'il ne reste aucun hook, la navigation est **confirmée**. - - - **`next(false)`**: annuler la navigation courante. Si l'URL du navigateur avait changé (manuellement par l'utilisateur ou via le bouton retour du navigateur), il sera remis à sa valeur de route de `from`. - - - **`next('/')` ou `next({ path: '/' })`**: redirige vers le nouvel URL. La navigation courante va être arrêtée et une nouvelle va se lancer. Vous pouvez passer n'importe quel objet à `next`, vous permettant ainsi de spécifier des options comme `replace: true`, `name: 'home'` et n'importe quelles options dans [la prop `to` du `router-link`](../../api/#to) ou [`router.push`](../../api/#routeur-push). - - - **`next(error)`**: (2.4.0+) si l'argument passé à `next` est une instance de `Error`, la navigation va s'arrêter et l'erreur sera passée aux fonctions de rappel enregistrées via [`router.onError()`](../../api/#router-onerror). - -**Assurez-vous de toujours appeler la fonction `next`, sinon le hook ne sera jamais résolu.** - -## Résolutions des interceptions globales - -Vous pouvez abonner une interception globale avec `router.beforeResolve`. Ceci est similaire a `router.beforeEach`, mais la différence est qu'elle sera appelée juste après que la navigation soit confirmée, **après que toutes les interceptions par composants et les composants de route asynchrone ait été résolu**. - -## Hooks de sortie globaux - -Vous pouvez également abonner des hooks de sortie, cependant, à la différence des interceptions, ces hooks ne fournissent pas de fonction `next` et n'affecte pas la navigation : - -``` js -router.afterEach((to, from) => { - // ... -}) -``` - -## Interception par route - -Vous pouvez définir l'interception `beforeEnter` directement sur l'objet de configuration d'une route : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -Ces interceptions ont exactement le même effet que les interceptions globales d'entrée. - -## Interception par composant - -Enfin, vous pouvez directement définir une interception de navigation a l'intérieur du composant lui-même (celui passé à la configuration du routeur) avec les options suivantes : - -- `beforeRouteEnter` -- `beforeRouteUpdate` -- `beforeRouteLeave` - -``` js -const Foo = { - template: `...`, - beforeRouteEnter (to, from, next) { - // appelée avant que la route vers le composant soit confirmée. - // cette fonction n'a pas accès à l'instance du composant avec `this`, - // car le composant n'a pas encore été créé quand cette interception est appelée ! - }, - beforeRouteUpdate (to, from, next) { - // appelée quand la route qui fait le rendu de ce composant change, - // mais que ce composant est utilisé de nouveau dans la nouvelle route. - // Par exemple, pour une route avec le paramètre dynamique `/foo/:id`, quand nous - // naviguons entre `/foo/1` et `/foo/2`, la même instance du composant `Foo` - // va être réutilisée, et ce hook va être appelé quand cela arrivera. - // ce hook a accès à l'instance de ce composant via `this`. - }, - beforeRouteLeave (to, from, next) { - // appelée quand la route qui fait le rendu de ce composant est sur le point - // d'être laissée en faveur de la prochaine route. - // elle a accès à l'instance de ce composant via `this`. - } -} -``` - -L'interception `beforeRouteEnter` **n'a PAS** accès à `this`, car l'interception est appelée avant que la navigation soit confirmée, et le nouveau composant entrant n'a même pas encore été créé. - -Cependant, vous pouvez accéder à l'instance en passant dans la fonction de rappel `next`. Cette fonction de rappel va être appelée quand la navigation sera confirmée, et l'instance du composant sera passée à la fonction de rappel en tant qu'argument : - -``` js -beforeRouteEnter (to, from, next) { - next(vm => { - // accès à l'instance du composant via `vm` - }) -} -``` - -Notez que `beforeRouteEnter` est la seule interception qui supporte une fonction de rappelle dans `next`. Pour `beforeRouteUpdate` et `beforeRouteLeave`, `this` est déjà disponible. Le passage d'une fonction de rappel n'étant pas nécessaire, il n'est donc pas *supporté* : - -```js -beforeRouteUpdate (to, from, next) { - // utiliser juste `this` - this.name = to.params.name - next() -} -``` - -L'**interception de sortie** est habituellement utilisée pour empécher l'utilisateur de quitter la route sans avoir sauvegardé ses changements. La navigation peut être annulée en appelant `next(false)`. - -```js -beforeRouteLeave (to, from , next) { - const answer = window.confirm('Voulez-vous vraiment quitter cette page ? Vos changements seront perdus.') - if (answer) { - next() - } else { - next(false) - } -} -``` - -## Le flux de résolution de navigation complet - -1. La navigation est demandée. -2. Appel de l'interception de sortie des composants désactivés. -3. Appel des interceptions globales `beforeEach`. -4. Appel des interceptions `beforeRouteUpdate` pour les composants réutilisés. -5. Appel de `beforeEnter` dans la configuration de route. -6. Résolution des composants de route asynchrones. -7. Appel de `beforeRouteEnter` dans les composants activés. -8. Appel des interceptions `beforeResolve`. -9. Confirmation de la navigation. -10. Appel des hooks globaux `afterEach`. -11. Modification du DOM demandée. -12. Appel des fonctions de rappel passées à `next` dans l'interception `beforeRouteEnter` avec l'instance instanciée. diff --git a/docs/fr/guide/advanced/scroll-behavior.md b/docs/fr/guide/advanced/scroll-behavior.md deleted file mode 100644 index 86156704b..000000000 --- a/docs/fr/guide/advanced/scroll-behavior.md +++ /dev/null @@ -1,80 +0,0 @@ -# Comportement du défilement - -En utilisant le routage côté client, nous pourrions vouloir faire défiler la page jusqu'en haut lorsqu'on navigue vers une nouvelle route, ou alors préserver la position du défilement des entrées de l'historique comme le ferait une page réelle. `vue-router` vous permet de faire cela et, encore mieux, vous permet de changer le comportement du défilement pendant la navigation. - -**Note : cette fonctionnalité ne fonctionne que si le navigateur supporte `history.pushState`.** - -Pendant la création de l'instance du routeur, vous pouvez renseigner la fonction `scrollBehavior` : - -``` js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // retourner la position désirée - } -}) -``` - -La fonction `scrollBehavior` reçoit les objets de route `to` et `from`. Le troisième argument, `savedPosition`, est disponible uniquement si c'est une navigation `popstate` (déclenchée par les boutons précédent/suivant du navigateur). - -La fonction peut retourner un objet décrivant la position du défilement. L'objet peut être de la forme : - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset seulement supporté pour les versions 2.6.0+) - -Si une valeur équivalente à `false` ou un objet vide est retourné, aucun défilement ne sera produit. - -Par exemple : - -``` js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -Cela permettra de défiler au haut de page à chaque navigation à travers les routes. - -Retourner l'objet `savedPosition` résultera en un comportement quasi natif en naviguant avec les boutons précédents/suivants : - -``` js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -Si vous voulez simuler le comportement « aller à l'ancre » : - -``` js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -On peut aussi utiliser les [champs meta de route](meta.md) pour implémenter un contrôle bien précis pour le comportement du défilement. Allez voir un exemple complet [ici](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js). - -## Défilement asynchrone - -> Nouveau dans la 2.8.0+ - -Vous pouvez également retourner une promesse pour résoudre la description de position souhaitée : - -``` js -scrollBehavior (to, from, savedPosition) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ x: 0, y: 0 }) - }, 500) - }) -} -``` - -Il est possible de relier les événements d'un composant de transition au niveau de la page pour que le comportement de défilement soit bien adapté à vos transitions de pages. Cependant, en raison de la variance et de la complexité des cas d'utilisation, nous fournissons simplement ce code primitif pour permettre aux utilisateurs de faire les implémentations spécifiques. diff --git a/docs/fr/guide/advanced/transitions.md b/docs/fr/guide/advanced/transitions.md deleted file mode 100644 index 044841e11..000000000 --- a/docs/fr/guide/advanced/transitions.md +++ /dev/null @@ -1,58 +0,0 @@ -# Transitions - -Vu que `<router-view>` est essentiellement un composant dynamique, on peut lui appliquer certains effets de transitions en utilisant le composant `<transition>` : - -``` html -<transition> - <router-view></router-view> -</transition> -``` - -[Tout à propos de `<transition>`](https://fr.vuejs.org/v2/guide/transitions.html) fonctionne également ici de la même manière. - -## Transition par route - -L'utilisation du dessus applique la même transition pour chaque route. Si vous voulez que les composants de route aient des transitions différentes, vous pouvez utiliser à la place `<transition>` avec des noms différents à l'intérieur de chaque composant de route : - -``` js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -## Transition dynamique basée sur la route - -Il est aussi possible de déterminer la transition à utiliser en se basant sur la relation entre la route cible et la route actuelle : - -``` html -<!-- utiliser un nom de transition dynamique --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -``` js -// et dans le composant parent, -// observer la `$route` pour déterminer la transition à utiliser -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -Voir un exemple complet [ici](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js). diff --git a/docs/fr/guide/essentials/dynamic-matching.md b/docs/fr/guide/essentials/dynamic-matching.md deleted file mode 100644 index 76d1fbf5a..000000000 --- a/docs/fr/guide/essentials/dynamic-matching.md +++ /dev/null @@ -1,74 +0,0 @@ -# Concordance dynamique de route - -Vous allez très souvent associer des routes avec un motif donné à un même composant. Par exemple nous pourrions avoir le composant `User` qui devrait être rendu pour tous les utilisateurs mais avec différents identifiants. Avec `vue-router` nous pouvons utiliser des segments dynamiques dans le chemin de la route pour réaliser cela : - -``` js -const User = { - template: '<div>Utilisateur</div>' -} - -const router = new VueRouter({ - routes: [ - // Les segments dynamiques commencent avec la ponctuation deux-points - { path: '/utilisateur/:id', component: User } - ] -}) -``` - -Maintenant des URL comme `/utilisateur/foo` et `/utilisateur/bar` seront chacun associé à la même route. - -Un segment dynamique se repère avec les deux-points `:`. Quand une route concorde, la valeur du segment dynamique est exposée via `this.$route.params` dans tous les composants. Et donc, nous pouvons faire le rendu de l'identifiant de l'utilisateur courant en mettant à jour le template de `User` ainsi : - -``` js -const User = { - template: '<div>Utilisateur {{ $route.params.id }}</div>' -} -``` - -Vous pouvez regarder un exemple en ligne [ici](https://jsfiddle.net/yyx990803/4xfa2f19/). - -Vous pouvez avoir plusieurs segments dynamiques pour une même route, et ils seront associés aux champs associés dans `$route.params`. Des exemples : - -| motif | chemin concordant | $route.params | -| -------------------------------------- | ---------------------------- | ------------------------------------ | -| /utilisateur/:username | /utilisateur/evan | `{ username: 'evan' }` | -| /utilisateur/:username/billet/:post_id | /utilisateur/evan/billet/123 | `{ username: 'evan', post_id: 123 }` | - -En plus de `$route.params`, l'objet `$route` expose également d'autres informations utiles comme la `$route.query` (s'il y a une requête dans l'URL), `$route.hash`, etc. Vous pouvez accéder à tous les détails de cela dans la [référence de l'API](../../api/#the-route-object). - -## Réactivité aux changements de paramètres - -Une chose à noter quand vous utilisez des routes avec des paramètres (segments), c'est que lors de la navigation de l'utilisateur de `/utilisateur/foo` vers `/utilisateur/bar`, **la même instance de composant va être réutilisée**. Puisque les deux routes font le rendu du même composant, cela est plus performant que de détruire l'ancienne instance et d'en créer une nouvelle. **Cependant, cela signifie également que les hooks de cycle de vie ne seront pas appelés**. - -Pour réagir aux changements de paramètres dans le même composant, vous pouvez simplement observer l'objet `$route` : - -``` js -const User = { - template: '...', - watch: { - '$route' (to, from) { - // réagir au changement de route... - } - } -} -``` - -Ou utiliser la [fonction d'interception](../advanced/navigation-guards.html) `beforeRouteUpdate` introduite avec la 2.2 : - -``` js -const User = { - template: '...', - beforeRouteUpdate (to, from, next) { - // réagir au changement de route... - // n'oubliez pas d'appeler `next()` - } -} -``` - -## Motifs de concordance avancés - -`vue-router` utilise [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0) comme moteur de concordance de chemin, il supporte donc plusieurs motifs de concordance avancés tels que la présence optionnelle de segments dynamiques, aucun ou plusieurs motifs, plus d'options par motifs, et même des motifs d'expressions régulières personnalisés. Consultez cette [documentation](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters) pour utiliser ces motifs avancés et [cet exemple](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) pour les utiliser avec `vue-router`. - -## Priorité de concordance - -Parfois la même URL peut être adressé par de multiples routes. Dans ce cas, la priorité de concordance est déterminée par l'ordre de la définition des routes : plus la route est définie tôt, plus sa priorité est élevée. diff --git a/docs/fr/guide/essentials/history-mode.md b/docs/fr/guide/essentials/history-mode.md deleted file mode 100644 index 8337db43a..000000000 --- a/docs/fr/guide/essentials/history-mode.md +++ /dev/null @@ -1,141 +0,0 @@ -# Mode historique de HTML5 - -Le mode par défaut de `vue-router` est le _mode hash_. Il utilise la partie hash de l'URL pour simuler un URL complet et ainsi ne pas recharger la page quand l'URL change. - -Pour nous passer du hash, nous pouvons utiliser le **mode historique** qui utilisera l'API `history.pushState` afin de permettre une navigation sans rechargement de page : - -```js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -Quand vous utilisez le mode historique, l'URL ressemblera à n'importe quel URL normal. Par ex. `http://oursite.com/user/id`. Magnifique ! - -Cependant, un problème apparait si votre application est une application monopage cliente. Sans une configuration serveur adaptée, les utilisateurs tomberont sur une page d'erreur 404 en tentant d'accéder à `http://oursite.com/user/id` directement dans leur navigateur. Maintenant ça craint. - -Ne vous inquiétez pas. Pour résoudre ce problème, il vous suffit d'ajouter une route à votre serveur prenant en compte toutes les adresses demandées. Si l'URL demandée ne concorde avec aucun fichier statique, alors il doit toujours renvoyer la page `index.html` qui contient le code de votre application. De nouveau magnifique ! - -## Exemple de configurations serveur - -### Apache - -```apache -<IfModule mod_negotiation.c> - Options -MultiViews -</IfModule> -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -Au lieu de `mod_rewrite`, vous pouvez également utiliser [`FallbackResource`](https://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource). - -### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -### Node.js natif - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http - .createServer((req, res) => { - fs.readFile('index.html', 'utf-8', (err, content) => { - if (err) { - console.log(`Impossible d'ouvrir le fichier "index.html"`) - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) - }) - .listen(httpPort, () => { - console.log('Le serveur écoute à : http://localhost:%s', httpPort) - }) -``` - -### Node.js avec Express - -Pour Node.js avec Express, vous pouvez utiliser le [middleware connect-history-api-fallback](https://github.com/bripkens/connect-history-api-fallback). - -### Internet Information Services (IIS) - -1. Instaler [IIS UrlRewrite](https://www.iis.net/downloads/microsoft/url-rewrite) -2. Créer un fichier `web.config` dans le répertoire racine de votre site avec le contenu suivant : - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="/" /> - </rule> - </rules> - </rewrite> - </system.webServer> -</configuration> -``` - -### Caddy - -``` -rewrite { - regexp .* - to {path} / -} -``` - -### Hébergement Firebase - -Ajouter ceci à votre fichier `firebase.json` : - -``` -{ - "hosting": { - "public": "dist", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} -``` - -## Limitation - -Il y a une limitation a tout ceci. Votre serveur ne renverra plus les erreurs 404 des chemins qui ne sont pas trouvés puisqu'il va servir à présent le fichier `index.html`. Pour contourner ce problème, vous pouvez implémenter une route concordant avec toutes les adresses en 404 dans votre application Vue : - -```js -const router = new VueRouter({ - mode: 'history', - routes: [{ path: '*', component: NotFoundComponent }] -}) -``` - -Une alternative possible, si vous utilisez un serveur Node.js, est d'implémenter ce mécanisme de substitution en utilisant le routeur côté serveur pour vérifier la concordance des demandes d'URL entrant. Si la route ne concorde avec rien, la page est inexistante. Consultez l'[utilisation de Vue côté serveur](https://ssr.vuejs.org/fr/) pour plus d'informations. diff --git a/docs/fr/guide/essentials/named-routes.md b/docs/fr/guide/essentials/named-routes.md deleted file mode 100644 index 0dc5e668e..000000000 --- a/docs/fr/guide/essentials/named-routes.md +++ /dev/null @@ -1,31 +0,0 @@ -# Routes nommées - -Parfois il est plus pratique d'identifier une route avec un nom, tout particulièrement quand on souhaite attacher cette route ou exécuter des actions de navigation. Vous pouvez donner un nom à une route dans les options `routes` pendant la création de l'instance du routeur : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/utilisateur/:userId', - name: 'user', - component: User - } - ] -}) -``` - -Pour attacher une route nommée, vous pouvez passer un objet à la prop `to` du composant `router-link` : - -``` html -<router-link :to="{ name: 'user', params: { userId: 123 }}">Utilisateur</router-link> -``` - -C'est exactement le même objet à utiliser programmatiquement avec `router.push()` : - -``` js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -Dans les deux cas, le routeur va naviguer vers le chemin `/utilisateur/123`. - -Un exemple complet se trouve [ici](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js). diff --git a/docs/fr/guide/essentials/named-views.md b/docs/fr/guide/essentials/named-views.md deleted file mode 100644 index 4a3c1578f..000000000 --- a/docs/fr/guide/essentials/named-views.md +++ /dev/null @@ -1,86 +0,0 @@ -# Vues nommées - -Parfois vous avez besoin d'afficher différentes vues en même temps plutôt que de les imbriquer, c.-à-d. créer un affichage avec une vue `sidebar` et une vue `main` par exemple. C'est ici que les routes nommées entrent en jeu. Au lieu d'avoir une seule balise de vue, vous pouvez en avoir une multitude et donner à chacune d'entre elles un nom. Un `router-view` sans nom aura comme nom par défaut : `default`. - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -Une vue est rendue en utilisant un composant, donc de multiples vues nécessitent de multiples composants pour une même route. Assurez-vous d'utiliser l'option `components` (avec un s) : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -Une démo de cet exemple peut-être trouvée [ici](https://jsfiddle.net/posva/6du90epg/). - -## Vues nommées imbriquées - -Il est possible de créer des dispositions complexes en utilisant les vues nommées avec les vues imbriquées. Quand vous le faites, vous devez nommer les composants imbriqués de `router-view` utilisés. Voyons cela avec un panneau de configuration exemple : - -``` -/parametres/emails /parametres/profile -+-----------------------------------+ +------------------------------+ -| UserSettings | | UserSettings | -| +-----+-------------------------+ | | +-----+--------------------+ | -| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | -| | +-------------------------+ | | | +--------------------+ | -| | | | | | | | UserProfilePreview | | -| +-----+-------------------------+ | | +-----+--------------------+ | -+-----------------------------------+ +------------------------------+ -``` - -- `Nav` est juste un composant standard. -- `UserSettings` est un composant de vue. -- `UserEmailsSubscriptions`, `UserProfile`, `UserProfilePreview` sont des composants de vue imbriqués. - -**Note** : _mettons de côté la partie HTML / CSS de cette disposition et concentrons nous sur le composant utilisé en lui-même._ - -La section `<template>` pour le composant `UserSettings` de la disposition ci-dessus devrait ressembler à quelque chose comme cela : - -```html -<!-- UserSettings.vue --> -<div> - <h1>Paramètres utilisateurs</h1> - <NavBar/> - <router-view/> - <router-view name="helper"/> -</div> -``` - -_Le composant de vue imbriqué est omis ici mais vous pouvez le trouver dans le code source complet de l'exemple ci-dessus [ici](https://jsfiddle.net/posva/22wgksa3/)._ - -Puis vous pouvez achever la disposition ci-dessus avec la configuration de route : - -```js -{ - path: '/parametres', - // Vous pouvez également avoir des vues nommées à la racine - component: UserSettings, - children: [{ - path: 'emails', - component: UserEmailsSubscriptions - }, { - path: 'profile', - components: { - default: UserProfile, - helper: UserProfilePreview - } - }] -} -``` - -Une démo de cet exemple peut-être trouvée [ici](https://jsfiddle.net/posva/22wgksa3/). diff --git a/docs/fr/guide/essentials/navigation.md b/docs/fr/guide/essentials/navigation.md deleted file mode 100644 index dbb747621..000000000 --- a/docs/fr/guide/essentials/navigation.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -sidebarDepth: 0 ---- - -# Navigation programmatique - -En complément du l'utilisation de `<router-link>` pour créer des balises ancres pour la navigation déclarative, nous pouvons le faire de manière programmatique en utilisant les méthodes de l'instance du routeur. - -#### `router.push(location, onComplete?, onAbort?)` - -**Note : Dans une instance Vue, vous pouvez accéder à l'instance du routeur via `$router`. Vous pouvez donc appeler `this.$router.push`.** - -Pour naviguer vers un URL différent, utilisez `router.push`. Cette méthode ajoute une nouvelle entrée dans la pile de l'historique. Ainsi quand un utilisateur clique sur le bouton retour de son navigateur, il retournera à l'URL précédent. - -Cette méthode est appelée en interne quand vous cliquez sur `<router-link>`, donc cliquer sur `<router-link :to="...">` est équivalent à appeler `router.push(...)`. - -| Déclarative | Programmatique | -| ------------------------- | ------------------ | -| `<router-link :to="...">` | `router.push(...)` | - -L'argument peut être une chaine de caractère représentant un chemin, ou un objet de description de destination. Des exemples : - -``` js -// chaine de caractère représentant un chemin -router.push('home') - -// objet -router.push({ path: 'home' }) - -// route nommée -router.push({ name: 'user', params: { userId: 123 }}) - -// avec une requête « query » résultant de `/register?plan=private` -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -**Note :** `params` est ignoré si `path` est fourni, ce qui n'est pas le cas pour `query`, comme démontré dans l'exemple ci-dessous. À la place, vous devez fournir le `name` de la route ou manuellement spécifier le `path` complet avec tous les paramètres : - -```js -const userId = 123 -router.push({ name: 'user', params: { userId }}) // -> /user/123 -router.push({ path: `/user/${userId}` }) // -> /user/123 -// Ceci ne va PAS fonctionner -router.push({ path: '/user', params: { userId }}) // -> /user -``` - -Les mêmes règles s'appliquent pour la propriété `to` du composant `router-link`. - -Dans la version 2.2.0+, vous pouvez optionnellement fournir les fonctions de rappel `onComplete` et `onAbort` à `router.push` ou `router.replace` en tant que deuxième et troisième arguments. Ces fonctions de rappel seront appelées quand la navigation sera respectivement ; complétée avec succès (après la résolution de tous les hooks asynchrones), ou arrêtée (navigation vers la même route ou vers une route différente avant que la navigation courante ne soit achevée). - -**Note :** si la destination est la même que la route courante et que seuls les paramètres ont changés (par ex. naviguer d'un profil à l'autre `/utilisateurs/1` -> `/utilisateurs/2`), vous devrez utiliser [`beforeRouteUpdate`](./dynamic-matching.md#réactivité-aux-changements-de-paramètres) pour réagir aux changements (par ex. récupérer les informations de l'utilisateur). - -## `router.replace(location, onComplete?, onAbort?)` - -Il agit comme `router.push`. La seule différence est que la navigation se fait sans ajouter de nouvelle entrée dans la pile de l'historique. Comme son nom l'indique, il remplace l'entrée courante. - -| Déclarative | Programmatique | -| --------------------------------- | --------------------- | -| `<router-link :to="..." replace>` | `router.replace(...)` | - - -## `router.go(n)` - -Cette méthode prend un seul nombre en tant que paramètre. Celui-ci indique de combien d'entrées vers l'avant ou vers l'arrière il faut naviguer dans la pile de l'historique, de la même manière qu'avec `window.history.go(n)`. - -Des exemples - -``` js -// avancer d'une entrée, identique à `history.forward()` -router.go(1) - -// retourner d'une entrée en arrière, identique à `history.back()` -router.go(-1) - -// avancer de trois entrées -router.go(3) - -// échoue silencieusement s'il n'y a pas assez d'entrées. -router.go(-100) -router.go(100) -``` - -## Manipulation de l'historique - -Vous avez peut être remarqué que `router.push`, `router.replace` et `router.go` sont des équivalents de [`window.history.pushState`, `window.history.replaceState` et `window.history.go`](https://developer.mozilla.org/fr-FR/docs/Web/API/History), et qu'ils imitent les APIs de `window.history`. - -Donc, si vous utilisez déjà l'[API History des navigateurs](https://developer.mozilla.org/fr-FR/docs/Web/API/History_API), manipuler l'historique sera très simple avec vue-router. - -Il n'est pas nécessaire de préciser que les méthodes de navigation (`push`, `replace`, `go`) fonctionnent de la même manière dans tous les modes de routage (`history`, `hash` et `abstract`). diff --git a/docs/fr/guide/essentials/nested-routes.md b/docs/fr/guide/essentials/nested-routes.md deleted file mode 100644 index fa513fb64..000000000 --- a/docs/fr/guide/essentials/nested-routes.md +++ /dev/null @@ -1,99 +0,0 @@ -# Routes imbriquées - -Les vraies interfaces utilisateurs d'application sont faites de composants imbriqués à de multiples niveaux de profondeur. Il est aussi très commun que les segments d'URL correspondent à une certaine structure de composants imbriqués, par exemple : - -``` -/utilisateur/foo/profil /utilisateur/foo/billets -+---------------------+ +--------------------+ -| User | | User | -| +-----------------+ | | +----------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +-----------------+ | | +----------------+ | -+---------------------+ +--------------------+ -``` - -Avec `vue-router`, il est vraiment très simple d'exprimer cette relation en utilisant des configurations de route imbriquées. - -Reprenons l'application créée au chapitre précédent : - -``` html -<div id="app"> - <router-view></router-view> -</div> -``` - -``` js -const User = { - template: '<div>Utilisateur {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/utilisateur/:id', component: User } - ] -}) -``` - -Ici le `<router-view>` est une balise de premier niveau. Il fait le rendu des composants qui concordent avec une route de premier niveau. De la même façon, un composant de rendu peut contenir également sa propre balise `<router-view>` imbriquée. Par exemple, ajoutons en une à l'intérieur du template du composant `User` : - -``` js -const User = { - template: ` - <div class="user"> - <h2>Utilisateur {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -Pour faire le rendu de composants à l'intérieur des balises imbriquées, nous avons besoin d'utiliser l'option `children` dans la configuration du constructeur de `VueRouter` : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/utilisateur/:id', component: User, - children: [ - { - // `UserProfile` va être rendu à l'intérieur du `<router-view>` de `User` - // quand `/utilisateur/:id/profil` concorde - path: 'profil', - component: UserProfile - }, - { - // `UserPosts` va être rendu à l'intérieur du `<router-view>` de `User` - // quand `/utilisateur/:id/billets` concorde - path: 'billets', - component: UserPosts - } - ] - } - ] -}) -``` - -**Notez que les chemins imbriqués commençants par `/` vont être traités comme des chemins partant de la racine. Cela vous permet d'adresser des composants imbriqués sans avoir à utiliser un URL imbriqué.** - -Comme vous pouvez le voir, l'option `children` n'est qu'un autre tableau d'objet de configuration de route comme dans `routes`. Et donc, vous pouvez garder les vues imbriquées au plus près de vos besoins. - -À ce niveau, avec la configuration ci-dessus, quand vous visitez `/utilisateur/foo`, rien ne sera rendu dans la partie `User`, car aucune sous route ne concorde. Peut-être voudriez-vous afficher quelque chose ici. Dans ce cas, vous pouvez fournir une sous route vide : - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/utilisateur/:id', component: User, - children: [ - // `UserHome` va être rendu à l'intérieur du `<router-view>` de `User` - // quand `/utilisateur/:id` concorde - { path: '', component: UserHome }, - - // ...autres sous routes - ] - } - ] -}) -``` - -Une démo de fonctionnement de cet exemple peut-être trouvée [ici](https://jsfiddle.net/yyx990803/L7hscd8h/). diff --git a/docs/fr/guide/essentials/passing-props.md b/docs/fr/guide/essentials/passing-props.md deleted file mode 100644 index edb859fa3..000000000 --- a/docs/fr/guide/essentials/passing-props.md +++ /dev/null @@ -1,75 +0,0 @@ -# Passage de props aux composants de route - -Utiliser `$route` dans vos composants crée un couplage fort à la route qui va limiter la flexibilité du composant qui ne pourra être utilisé que par certains URL. - -Pour découpler un composant de son routeur, utilisez les props : - -**Plutôt que de coupler avec `$route`** - -``` js -const User = { - template: '<div>Utilisateur {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/utilisateur/:id', component: User } - ] -}) -``` - -**Découplez avec les `props`** - -``` js -const User = { - props: ['id'], - template: '<div>Utilisateur {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/utilisateur/:id', component: User, props: true }, - - // pour les routes avec vues nommées, vous devez définir l'option `props` pour chaque vue nommée : - { - path: '/utilisateur/:id', - components: { default: User, sidebar: Sidebar }, - props: { default: true, sidebar: false } - } - ] -}) -``` - -Cela vous permet d'utiliser le composant n'importe où, ce qui le rend plus facile à réutiliser et à tester. - -## Mode booléen - -Quand `props` est mis à `true`, le `route.params` est remplis en tant que props du composant. - -## Mode objet - -Quand `props` est un objet, cela alimente les props de celui-ci. Utile quand les props sont statiques. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } - ] -}) -``` - -## Mode fonction - -Vous pouvez créer une fonction qui va retourner les props. Cela vous permet de caster des paramètres dans un autre type, de combiner les valeurs statiques avec les valeurs des routes, etc. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) } - ] -}) -``` - -L'URL `/search?q=vue` passerait `{query: 'vue'}` comme `props` au composant `SearchUser`. - -Essayez de garder la fonction de `props` sans état, car il n'est évalué que sur les changements de route. Utilisez un composant englobant si vous avez besoin d'état pour définir les props, ainsi la vue pourra réagir au changement d'état. - -Pour une utilisation avancée, jetez un œil à cet [exemple](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js). diff --git a/docs/fr/guide/essentials/redirect-and-alias.md b/docs/fr/guide/essentials/redirect-and-alias.md deleted file mode 100644 index 863f2c940..000000000 --- a/docs/fr/guide/essentials/redirect-and-alias.md +++ /dev/null @@ -1,60 +0,0 @@ -# Redirection et alias - -## Redirection - -Les redirections peuvent aussi être faites depuis la configuration de `routes`. Pour rediriger `/a` vers `/b` : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -La redirection peut également être effectuée en ciblant une route nommée : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -Ou on peut même utiliser une fonction pour les redirections dynamiques : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // la fonction reçoit la route cible en tant qu'argument - // retournez le chemin vers la nouvelle route ici. - }} - ] -}) -``` - -Notez que les [intercepteurs de navigation](../advanced/navigation-guards.md) ne sont pas appliqués sur les routes d'où à lieu la redirection mais uniquement sur les routes cibles. Dans l'exemple ci-dessous, ajouter une interception `beforeEnter` à la route `/a` n'aura aucun effet. - -Pour d'autres utilisations avancées, jetez un œil à cet [exemple](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js). - -## Alias - -Une redirection signifie que si l'utilisateur visite `/a`, l'URL va être remplacé par `/b` et concordé avec `/b`. Mais qu'est-ce qu'un alias ? - -**Un alias de `/a` en tant que `/b` signifie que lorsque l'utilisateur va visiter `/b`, l'URL va rester `/b`, mais la concordance va se faire comme si l'utilisateur visitait `/a`.** - -La phase du dessus peut être exprimée dans la configuration de la route de la manière suivante : - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -Un alias vous donne la liberté d'associer une structure d'interface utilisateur à un URL arbitraire, au lieu d'être contraint par une configuration de structure. - -Pour d'autres utilisations avancées, jetez un œil à cet [exemple](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js). diff --git a/docs/fr/installation.md b/docs/fr/installation.md deleted file mode 100644 index 0fc456b1f..000000000 --- a/docs/fr/installation.md +++ /dev/null @@ -1,44 +0,0 @@ -# Installation - -## Téléchargement direct / CDN - -[https://unpkg.com/vue-router@3/dist/vue-router.js](https://unpkg.com/vue-router@3/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com) fournit des liens CDN basés sur npm. Le lien ci-dessus pointera toujours vers la dernière version sur npm. Vous pouvez aussi utiliser un tag ou une version spécifique via un URL comme `https://unpkg.com/vue-router@3.0.0/dist/vue-router.js`. -<!--/email_off--> - -Incluez `vue-router` après Vue et l'installation sera automatique : - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -## npm - -``` bash -npm install vue-router -``` - -Lorsqu'il est utilisé avec un système de module, vous devez explicitement installer le router via `Vue.use()` : - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -Vous n'avez pas besoin de faire cela lors de l'utilisation des balises de script globales (`<script>`). - -## Build de développement - -Vous aurez besoin de cloner directement `vue-router` depuis GitHub et le compiler vous-même si vous souhaitez utiliser le dernier build de développement. - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs/guide/README.md b/docs/guide/README.md deleted file mode 100644 index 017faa45f..000000000 --- a/docs/guide/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# Getting Started - -::: tip Note -You are reading the documentation of Vue Router 3 **for Vue 2**. If you are working with Vue 3, use the [Vue Router 4 documentation](https://next.router.vuejs.org) instead. - -We will be using [ES2015](https://github.com/lukehoban/es6features) in the code samples in the guide. - -Also, all examples will be using the full version of Vue to make on-the-fly template compilation possible. See more details [here](https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only). -::: - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -Creating a Single-page Application with Vue + Vue Router feels natural: with Vue.js, we are already composing our application with components. When adding Vue Router to the mix, all we need to do is map our components to the routes and let Vue Router know where to render them. Here's a basic example: - -## HTML - -```html -<script src="https://unpkg.com/vue@2/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- use router-link component for navigation. --> - <!-- specify the link by passing the `to` prop. --> - <!-- `<router-link>` will be rendered as an `<a>` tag by default --> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- route outlet --> - <!-- component matched by the route will render here --> - <router-view></router-view> -</div> -``` - -## JavaScript - -```js -// 0. If using a module system (e.g. via vue-cli), import Vue and VueRouter -// and then call `Vue.use(VueRouter)`. - -// 1. Define route components. -// These can be imported from other files -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. Define some routes -// Each route should map to a component. The "component" can -// either be an actual component constructor created via -// `Vue.extend()`, or just a component options object. -// We'll talk about nested routes later. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. Create the router instance and pass the `routes` option -// You can pass in additional options here, but let's -// keep it simple for now. -const router = new VueRouter({ - routes // short for `routes: routes` -}) - -// 4. Create and mount the root instance. -// Make sure to inject the router with the router option to make the -// whole app router-aware. -const app = new Vue({ - router -}).$mount('#app') - -// Now the app has started! -``` - -By injecting the router, we get access to it as `this.$router` as well as the current route as `this.$route` inside of any component: - -```js -// Home.vue -export default { - computed: { - username() { - // We will see what `params` is shortly - return this.$route.params.username - } - }, - methods: { - goBack() { - window.history.length > 1 ? this.$router.go(-1) : this.$router.push('/') - } - } -} -``` - -Throughout the docs, we will often use the `router` instance. Keep in mind that `this.$router` is exactly the same as using `router`. The reason we use `this.$router` is because we don't want to import the router in every single component that needs to manipulate routing. - -You can also check out this example [live](https://jsfiddle.net/yyx990803/xgrjzsup/). - -Notice that a `<router-link>` automatically gets the `.router-link-active` class when its target route is matched. You can learn more about it in its [API reference](../api/#router-link). diff --git a/docs/guide/advanced/data-fetching.md b/docs/guide/advanced/data-fetching.md deleted file mode 100644 index bde314f66..000000000 --- a/docs/guide/advanced/data-fetching.md +++ /dev/null @@ -1,114 +0,0 @@ -# Data Fetching - -Sometimes you need to fetch data from the server when a route is activated. For example, before rendering a user profile, you need to fetch the user's data from the server. We can achieve this in two different ways: - -- **Fetching After Navigation**: perform the navigation first, and fetch data in the incoming component's lifecycle hook. Display a loading state while data is being fetched. - -- **Fetching Before Navigation**: Fetch data before navigation in the route enter guard, and perform the navigation after data has been fetched. - -Technically, both are valid choices - it ultimately depends on the user experience you are aiming for. - -## Fetching After Navigation - -When using this approach, we navigate and render the incoming component immediately, and fetch data in the component's `created` hook. It gives us the opportunity to display a loading state while the data is being fetched over the network, and we can also handle loading differently for each view. - -Let's assume we have a `Post` component that needs to fetch the data for a post based on `$route.params.id`: - -``` html -<template> - <div class="post"> - <div v-if="loading" class="loading"> - Loading... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // fetch the data when the view is created and the data is - // already being observed - this.fetchData() - }, - watch: { - // call again the method if the route changes - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - const fetchedId = this.$route.params.id - // replace `getPost` with your data fetching util / API wrapper - getPost(fetchedId, (err, post) => { - // make sure this request is the last one we did, discard otherwise - if (this.$route.params.id !== fetchedId) return - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## Fetching Before Navigation - -With this approach we fetch the data before actually navigating to the new -route. We can perform the data fetching in the `beforeRouteEnter` guard in the incoming component, and only call `next` when the fetch is complete: - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // when route changes and this component is already rendered, - // the logic will be slightly different. - beforeRouteUpdate (to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData (err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -The user will stay on the previous view while the resource is being fetched for the incoming view. It is therefore recommended to display a progress bar or some kind of indicator while the data is being fetched. If the data fetch fails, it's also necessary to display some kind of global warning message. diff --git a/docs/guide/advanced/lazy-loading.md b/docs/guide/advanced/lazy-loading.md deleted file mode 100644 index db059d8a0..000000000 --- a/docs/guide/advanced/lazy-loading.md +++ /dev/null @@ -1,52 +0,0 @@ -# Lazy Loading Routes - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-lazy-load-routes-with-vue-router?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to increase performance by lazy loading routes on Vue School">Learn how to lazy load routes with a free lesson on Vue School</a></div> - -When building apps with a bundler, the JavaScript bundle can become quite large, and thus affect the page load time. It would be more efficient if we can split each route's components into a separate chunk, and only load them when the route is visited. - -Combining Vue's [async component feature](https://vuejs.org/guide/components.html#Async-Components) and webpack's [code splitting feature](https://webpack.js.org/guides/code-splitting-async/), it's trivially easy to lazy-load route components. - -First, an async component can be defined as a factory function that returns a Promise (which should resolve to the component itself): - -```js -const Foo = () => - Promise.resolve({ - /* component definition */ - }) -``` - -Second, in webpack 2, we can use the [dynamic import](https://github.com/tc39/proposal-dynamic-import) syntax to indicate a code-split point: - -```js -import('./Foo.vue') // returns a Promise -``` - -::: tip Note -if you are using Babel, you will need to add the [syntax-dynamic-import](https://babeljs.io/docs/plugins/syntax-dynamic-import/) plugin so that Babel can properly parse the syntax. -::: - -Combining the two, this is how to define an async component that will be automatically code-split by webpack: - -```js -const Foo = () => import('./Foo.vue') -``` - -Nothing needs to change in the route config, just use `Foo` as usual: - -```js -const router = new VueRouter({ - routes: [{ path: '/foo', component: Foo }] -}) -``` - -## Grouping Components in the Same Chunk - -Sometimes we may want to group all the components nested under the same route into the same async chunk. To achieve that we need to use [named chunks](https://webpack.js.org/api/module-methods/#magic-comments) by providing a chunk name using a special comment syntax (requires webpack > 2.4): - -```js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -webpack will group any async module with the same chunk name into the same async chunk. diff --git a/docs/guide/advanced/meta.md b/docs/guide/advanced/meta.md deleted file mode 100644 index 8cbd97449..000000000 --- a/docs/guide/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# Route Meta Fields - -Sometimes, you might want to attach arbitrary information to routes like transition names, who can access the route, etc. This can be achieved through the `meta` property which accepts an object of properties and can be accessed on the route location and navigation guards. You can define `meta` properties like this: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // a meta field - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -So how do we access this `meta` field? - -First, each route object in the `routes` configuration is called a **route record**. Route records may be nested. Therefore when a route is matched, it can potentially match more than one route record. - -For example, with the above route config, the URL `/foo/bar` will match both the parent route record and the child route record. - -All route records matched by a route are exposed on the `$route` object (and also route objects in navigation guards) as the `$route.matched` Array. Therefore, we will need to iterate over `$route.matched` to check for meta fields in route records. - -An example use case is checking for a meta field in the global navigation guard: - -```js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // this route requires auth, check if logged in - // if not, redirect to login page. - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // make sure to always call next()! - } -}) -``` diff --git a/docs/guide/advanced/navigation-failures.md b/docs/guide/advanced/navigation-failures.md deleted file mode 100644 index ff6e2cb36..000000000 --- a/docs/guide/advanced/navigation-failures.md +++ /dev/null @@ -1,61 +0,0 @@ -# Navigation Failures - -> New in 3.4.0 - -When using `router-link`, Vue Router calls `router.push` to trigger a navigation. While the expected behavior for most links is to navigate a user to a new page, there are a few situations where users will remain on the same page: - -- Users are already on the page that they are trying to navigate to -- A [navigation guard](./navigation-guards.md) aborts the navigation by calling `next(false)` -- A [navigation guard](./navigation-guards.md) throws an error or calls `next(new Error())` - -When using a `router-link` component, **none of these failures will log an error**. However, if you are using `router.push` or `router.replace`, you might come across an _"Uncaught (in promise) Error"_ message followed by a more specific message in your console. Let's understand how to differentiate _Navigation Failures_. - -::: tip Background story -In v3.2.0, _Navigation Failures_ were exposed through the two optional callbacks of `router.push`: `onComplete` and `onAbort`. Since version 3.1.0, `router.push` and `router.replace` return a _Promise_ if no `onComplete`/`onAbort` callback is provided. This _Promise_ resolves instead of invoking `onComplete` and rejects instead of invoking `onAbort`. -::: - -## Detecting Navigation Failures - -_Navigation Failures_ are `Error` instances with a few extra properties. To check if an error comes from the Router, use the `isNavigationFailure` function: - -```js -import VueRouter from 'vue-router' -const { isNavigationFailure, NavigationFailureType } = VueRouter - -// trying to access the admin page -router.push('/admin').catch(failure => { - if (isNavigationFailure(failure, NavigationFailureType.redirected)) { - // show a small notification to the user - showToast('Login in order to access the admin panel') - } -}) -``` - -::: tip -If you omit the second parameter: `isNavigationFailure(failure)`, it will only check if the error is a _Navigation Failure_. -::: - -## `NavigationFailureType` - -`NavigationFailureType` help developers to differentiate between the various types of _Navigation Failures_. There are four different types: - -- `redirected`: `next(newLocation)` was called inside of a navigation guard to redirect somewhere else. -- `aborted`: `next(false)` was called inside of a navigation guard to the navigation. -- `cancelled`: A new navigation completely took place before the current navigation could finish. e.g. `router.push` was called while waiting inside of a navigation guard. -- `duplicated`: The navigation was prevented because we are already at the target location. - -## _Navigation Failures_'s properties - -All navigation failures expose `to` and `from` properties to reflect the target and current location respectively for the navigation that failed: - -```js -// trying to access the admin page -router.push('/admin').catch(failure => { - if (isNavigationFailure(failure, NavigationFailureType.redirected)) { - failure.to.path // '/admin' - failure.from.path // '/' - } -}) -``` - -In all cases, `to` and `from` are normalized route locations. diff --git a/docs/guide/advanced/navigation-guards.md b/docs/guide/advanced/navigation-guards.md deleted file mode 100644 index 8c132c267..000000000 --- a/docs/guide/advanced/navigation-guards.md +++ /dev/null @@ -1,184 +0,0 @@ -# Navigation Guards - -As the name suggests, the navigation guards provided by `vue-router` are primarily used to guard navigations either by redirecting it or canceling it. There are a number of ways to hook into the route navigation process: globally, per-route, or in-component. - -Remember that **params or query changes won't trigger enter/leave navigation guards**. You can either [watch the `$route` object](../essentials/dynamic-matching.md#reacting-to-params-changes) to react to those changes, or use the `beforeRouteUpdate` in-component guard. - -## Global Before Guards - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-configure-an-authentication-middleware-route-guard-with-vue-router?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to create an authentication middleware with a global route guard on Vue School">Learn how navigation guards works with a free lesson on Vue School</a></div> - -You can register global before guards using `router.beforeEach`: - -```js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -Global before guards are called in creation order, whenever a navigation is triggered. Guards may be resolved asynchronously, and the navigation is considered **pending** before all hooks have been resolved. - -Every guard function receives three arguments: - -- **`to: Route`**: the target [Route Object](../../api/#the-route-object) being navigated to. - -- **`from: Route`**: the current route being navigated away from. - -- **`next: Function`**: this function must be called to **resolve** the hook. The action depends on the arguments provided to `next`: - - - **`next()`**: move on to the next hook in the pipeline. If no hooks are left, the navigation is **confirmed**. - - - **`next(false)`**: abort the current navigation. If the browser URL was changed (either manually by the user or via back button), it will be reset to that of the `from` route. - - - **`next('/')` or `next({ path: '/' })`**: redirect to a different location. The current navigation will be aborted and a new one will be started. You can pass any location object to `next`, which allows you to specify options like `replace: true`, `name: 'home'` and any option used in [`router-link`'s `to` prop](../../api/#to) or [`router.push`](../../api/#router-push) - - - **`next(error)`**: (2.4.0+) if the argument passed to `next` is an instance of `Error`, the navigation will be aborted and the error will be passed to callbacks registered via [`router.onError()`](../../api/#router-onerror). - -**Make sure that the `next` function is called exactly once in any given pass through the navigation guard. It can appear more than once, but only if the logical paths have no overlap, otherwise the hook will never be resolved or produce errors.** Here is an example of redirecting to user to `/login` if they are not authenticated: - -```js -// BAD -router.beforeEach((to, from, next) => { - if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) - // if the user is not authenticated, `next` is called twice - next() -}) -``` - -```js -// GOOD -router.beforeEach((to, from, next) => { - if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) - else next() -}) -``` - -## Global Resolve Guards - -You can register a global guard with `router.beforeResolve`. This is similar to `router.beforeEach`, with the difference that resolve guards will be called right before the navigation is confirmed, **after all in-component guards and async route components are resolved**. - -## Global After Hooks - -You can also register global after hooks, however unlike guards, these hooks do not get a `next` function and cannot affect the navigation: - -```js -router.afterEach((to, from) => { - // ... -}) -``` - -## Per-Route Guard - -You can define `beforeEnter` guards directly on a route's configuration object: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -These guards have the exact same signature as global before guards. - -## In-Component Guards - -Finally, you can directly define route navigation guards inside route components (the ones passed to the router configuration) with the following options: - -- `beforeRouteEnter` -- `beforeRouteUpdate` -- `beforeRouteLeave` - -```js -const Foo = { - template: `...`, - beforeRouteEnter(to, from, next) { - // called before the route that renders this component is confirmed. - // does NOT have access to `this` component instance, - // because it has not been created yet when this guard is called! - }, - beforeRouteUpdate(to, from, next) { - // called when the route that renders this component has changed. - // This component being reused (by using an explicit `key`) in the new route or not doesn't change anything. - // For example, for a route with dynamic params `/foo/:id`, when we - // navigate between `/foo/1` and `/foo/2`, the same `Foo` component instance - // will be reused (unless you provided a `key` to `<router-view>`), and this hook will be called when that happens. - // has access to `this` component instance. - }, - beforeRouteLeave(to, from, next) { - // called when the route that renders this component is about to - // be navigated away from. - // has access to `this` component instance. - } -} -``` - -The `beforeRouteEnter` guard does **NOT** have access to `this`, because the guard is called before the navigation is confirmed, thus the new entering component has not even been created yet. - -However, you can access the instance by passing a callback to `next`. The callback will be called when the navigation is confirmed, and the component instance will be passed to the callback as the argument: - -```js -beforeRouteEnter (to, from, next) { - next(vm => { - // access to component instance via `vm` - }) -} -``` - -Note that `beforeRouteEnter` is the only guard that supports passing a callback to `next`. For `beforeRouteUpdate` and `beforeRouteLeave`, `this` is already available, so passing a callback is unnecessary and therefore _not supported_: - -```js -beforeRouteUpdate (to, from, next) { - // just use `this` - this.name = to.params.name - next() -} -``` - -The **leave guard** is usually used to prevent the user from accidentally leaving the route with unsaved edits. The navigation can be canceled by calling `next(false)`. - -```js -beforeRouteLeave (to, from, next) { - const answer = window.confirm('Do you really want to leave? you have unsaved changes!') - if (answer) { - next() - } else { - next(false) - } -} -``` - -If you are using mixins that add in-component navigation guards, make sure to add the mixin **after installing the router plugin**: - -```js -Vue.use(Router) - -Vue.mixin({ - beforeRouteUpdate(to, from, next) { - // ... - } -}) -``` - -## The Full Navigation Resolution Flow - -1. Navigation triggered. -2. Call `beforeRouteLeave` guards in deactivated components. -3. Call global `beforeEach` guards. -4. Call `beforeRouteUpdate` guards in reused components. -5. Call `beforeEnter` in route configs. -6. Resolve async route components. -7. Call `beforeRouteEnter` in activated components. -8. Call global `beforeResolve` guards. -9. Navigation confirmed. -10. Call global `afterEach` hooks. -11. DOM updates triggered. -12. Call callbacks passed to `next` in `beforeRouteEnter` guards with instantiated instances. diff --git a/docs/guide/advanced/scroll-behavior.md b/docs/guide/advanced/scroll-behavior.md deleted file mode 100644 index 037329426..000000000 --- a/docs/guide/advanced/scroll-behavior.md +++ /dev/null @@ -1,97 +0,0 @@ -# Scroll Behavior - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-control-the-scroll-behavior-of-vue-router?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to control the scroll behavior on Vue School">Learn to control the scroll behavior with a free lesson on Vue School</a></div> - -When using client-side routing, we may want to scroll to top when navigating to a new route, or preserve the scrolling position of history entries just like real page reload does. `vue-router` allows you to achieve these and even better, allows you to completely customize the scroll behavior on route navigation. - -**Note: this feature only works if the browser supports `history.pushState`.** - -When creating the router instance, you can provide the `scrollBehavior` function: - -```js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // return desired position - } -}) -``` - -The `scrollBehavior` function receives the `to` and `from` route objects. The third argument, `savedPosition`, is only available if this is a `popstate` navigation (triggered by the browser's back/forward buttons). - -The function can return a scroll position object. The object could be in the form of: - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset only supported in 2.6.0+) - -If a falsy value or an empty object is returned, no scrolling will happen. - -For example: - -```js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -This will simply make the page scroll to top for all route navigations. - -Returning the `savedPosition` will result in a native-like behavior when navigating with back/forward buttons: - -```js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -If you want to simulate the "scroll to anchor" behavior: - -```js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -We can also use [route meta fields](meta.md) to implement fine-grained scroll behavior control. Check out a full example [here](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js). - -## Async Scrolling - -> New in 2.8.0 - -You can also return a Promise that resolves to the desired position descriptor: - -```js -scrollBehavior (to, from, savedPosition) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ x: 0, y: 0 }) - }, 500) - }) -} -``` - -It's possible to hook this up with events from a page-level transition component to make the scroll behavior play nicely with your page transitions, but due to the possible variance and complexity in use cases, we simply provide this primitive to enable specific userland implementations. - -## Smooth Scrolling - -You can enable native smooth scrolling for [browsers supporting it](https://developer.mozilla.org/en-US/docs/Web/API/ScrollToOptions/behavior) by simply adding the `behavior` option to the object returned inside `scrollBehavior`: - -```js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash, - behavior: 'smooth', - } - } -} -``` diff --git a/docs/guide/advanced/transitions.md b/docs/guide/advanced/transitions.md deleted file mode 100644 index 0b8a937df..000000000 --- a/docs/guide/advanced/transitions.md +++ /dev/null @@ -1,60 +0,0 @@ -# Transitions - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-create-route-transitions-with-vue-router?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to create route transitions on Vue School">Learn how to create route transitions with a free lesson on Vue School</a></div> - -Since the `<router-view>` is essentially a dynamic component, we can apply transition effects to it the same way using the `<transition>` component: - -```html -<transition> - <router-view></router-view> -</transition> -``` - -[All transition APIs](https://v2.vuejs.org/v2/guide/transitions.html) work the same here. - -## Per-Route Transition - -The above usage will apply the same transition for all routes. If you want each route's component to have different transitions, you can instead use `<transition>` with different names inside each route component: - -```js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -## Route-Based Dynamic Transition - -It is also possible to determine the transition to use dynamically based on the relationship between the target route and current route: - -```html -<!-- use a dynamic transition name --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -```js -// then, in the parent component, -// watch the `$route` to determine the transition to use -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -See full example [here](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js). diff --git a/docs/guide/essentials/dynamic-matching.md b/docs/guide/essentials/dynamic-matching.md deleted file mode 100644 index c8ced5875..000000000 --- a/docs/guide/essentials/dynamic-matching.md +++ /dev/null @@ -1,106 +0,0 @@ -# Dynamic Route Matching - -<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-dynamic-routes?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to match dynamic routes with Vue School">Learn how to match dynamic routes with a free lesson on Vue School</a></div> - -Very often we will need to map routes with the given pattern to the same component. For example we may have a `User` component which should be rendered for all users but with different user IDs. In `vue-router` we can use a dynamic segment in the path to achieve that: - -```js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // dynamic segments start with a colon - { path: '/user/:id', component: User } - ] -}) -``` - -Now URLs like `/user/foo` and `/user/bar` will both map to the same route. - -A dynamic segment is denoted by a colon `:`. When a route is matched, the value of the dynamic segments will be exposed as `this.$route.params` in every component. Therefore, we can render the current user ID by updating `User`'s template to this: - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -``` - -You can check out a live example [here](https://jsfiddle.net/yyx990803/4xfa2f19/). - -You can have multiple dynamic segments in the same route, and they will map to corresponding fields on `$route.params`. Examples: - -| pattern | matched path | \$route.params | -| ----------------------------- | ------------------- | -------------------------------------- | -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -In addition to `$route.params`, the `$route` object also exposes other useful information such as `$route.query` (if there is a query in the URL), `$route.hash`, etc. You can check out the full details in the [API Reference](../../api/#the-route-object). - -## Reacting to Params Changes - -One thing to note when using routes with params is that when the user navigates from `/user/foo` to `/user/bar`, **the same component instance will be reused**. Since both routes render the same component, this is more efficient than destroying the old instance and then creating a new one. **However, this also means that the lifecycle hooks of the component will not be called**. - -To react to params changes in the same component, you can simply watch the `$route` object: - -```js -const User = { - template: '...', - watch: { - $route(to, from) { - // react to route changes... - } - } -} -``` - -Or, use the `beforeRouteUpdate` [navigation guard](../advanced/navigation-guards.html) introduced in 2.2: - -```js -const User = { - template: '...', - beforeRouteUpdate(to, from, next) { - // react to route changes... - // don't forget to call next() - } -} -``` - -## Catch all / 404 Not found Route - -Regular params will only match characters in between url fragments, separated by `/`. If we want to match **anything**, we can use the asterisk (`*`): - -```js -{ - // will match everything - path: '*' -} -{ - // will match anything starting with `/user-` - path: '/user-*' -} -``` - -When using _asterisk_ routes, make sure to correctly order your routes so that _asterisk_ ones are at the end. -The route `{ path: '*' }` is usually used to 404 client side. If you are using _History mode_, make sure to [correctly configure your server](./history-mode.md) as well. - -When using an _asterisk_, a param named `pathMatch` is automatically added to `$route.params`. It contains the rest of the url matched by the _asterisk_: - -```js -// Given a route { path: '/user-*' } -this.$router.push('/user-admin') -this.$route.params.pathMatch // 'admin' - -// Given a route { path: '*' } -this.$router.push('/non-existing') -this.$route.params.pathMatch // '/non-existing' -``` - -## Advanced Matching Patterns - -`vue-router` uses [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0) as its path matching engine, so it supports many advanced matching patterns such as optional dynamic segments, zero or more / one or more requirements, and even custom regex patterns. Check out its [documentation](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters) for these advanced patterns, and [this example](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) of using them in `vue-router`. - -## Matching Priority - -Sometimes the same URL may be matched by multiple routes. In such a case the matching priority is determined by the order of route definition: the earlier a route is defined, the higher priority it gets. diff --git a/docs/guide/essentials/history-mode.md b/docs/guide/essentials/history-mode.md deleted file mode 100644 index ed27c1baa..000000000 --- a/docs/guide/essentials/history-mode.md +++ /dev/null @@ -1,153 +0,0 @@ -# HTML5 History Mode - -The default mode for `vue-router` is _hash mode_ - it uses the URL hash to simulate a full URL so that the page won't be reloaded when the URL changes. - -To get rid of the hash, we can use the router's **history mode**, which leverages the `history.pushState` API to achieve URL navigation without a page reload: - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -When using history mode, the URL will look "normal," e.g. `http://oursite.com/user/id`. Beautiful! - -Here comes a problem, though: Since our app is a single page client side app, without a proper server configuration, the users will get a 404 error if they access `http://oursite.com/user/id` directly in their browser. Now that's ugly. - -Not to worry: To fix the issue, all you need to do is add a simple catch-all fallback route to your server. If the URL doesn't match any static assets, it should serve the same `index.html` page that your app lives in. Beautiful, again! - -## Example Server Configurations - -**Note**: The following examples assume you are serving your app from the root folder. If you deploy to a subfolder, you should use [the `publicPath` option of Vue CLI](https://cli.vuejs.org/config/#publicpath) and the related [`base` property of the router](https://router.vuejs.org/api/#base). You also need to adjust the examples below to use the subfolder instead of the root folder (e.g. replacing `RewriteBase /` with `RewriteBase /name-of-your-subfolder/`). - -#### Apache - -```apache -<IfModule mod_negotiation.c> - Options -MultiViews -</IfModule> -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -Instead of `mod_rewrite`, you could also use [`FallbackResource`](https://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource). - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Native Node.js - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http.createServer((req, res) => { - fs.readFile('index.html', 'utf-8', (err, content) => { - if (err) { - console.log('We cannot open "index.html" file.') - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) -}).listen(httpPort, () => { - console.log('Server listening on: http://localhost:%s', httpPort) -}) -``` - -#### Express with Node.js - -For Node.js/Express, consider using [connect-history-api-fallback middleware](https://github.com/bripkens/connect-history-api-fallback). - -#### Internet Information Services (IIS) - -1. Install [IIS UrlRewrite](https://www.iis.net/downloads/microsoft/url-rewrite) -2. Create a `web.config` file in the root directory of your site with the following: - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="/" /> - </rule> - </rules> - </rewrite> - </system.webServer> -</configuration> -``` - -#### Caddy v2 - -``` -try_files {path} / -``` - -#### Caddy v1 - -``` -rewrite { - regexp .* - to {path} / -} -``` - -#### Firebase hosting - -Add this to your `firebase.json`: - -``` -{ - "hosting": { - "public": "dist", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} -``` - -## Caveat - -There is a caveat to this: Your server will no longer report 404 errors as all not-found paths now serve up your `index.html` file. To get around the issue, you should implement a catch-all route within your Vue app to show a 404 page: - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [ - { - path: '/:catchAll(.*)', - component: NotFoundComponent, - name: 'NotFound' - } - ] -}) -``` - -Alternatively, if you are using a Node.js server, you can implement the fallback by using the router on the server side to match the incoming URL and respond with 404 if no route is matched. Check out the [Vue server side rendering documentation](https://ssr.vuejs.org/en/) for more information. diff --git a/docs/guide/essentials/named-routes.md b/docs/guide/essentials/named-routes.md deleted file mode 100644 index 2e77ed7cf..000000000 --- a/docs/guide/essentials/named-routes.md +++ /dev/null @@ -1,33 +0,0 @@ -# Named Routes - -<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-named-routes-and-params?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to work with named routes and params with Vue School">Learn how to use named routes and params with a free lesson on Vue School</a></div> - -Sometimes it is more convenient to identify a route with a name, especially when linking to a route or performing navigations. You can give a route a name in the `routes` options while creating the Router instance: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -To link to a named route, you can pass an object to the `router-link` component's `to` prop: - -```html -<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> -``` - -This is the exact same object used programmatically with `router.push()`: - -```js -router.push({ name: 'user', params: { userId: 123 } }) -``` - -In both cases, the router will navigate to the path `/user/123`. - -Full example [here](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js). diff --git a/docs/guide/essentials/named-views.md b/docs/guide/essentials/named-views.md deleted file mode 100644 index d426ead04..000000000 --- a/docs/guide/essentials/named-views.md +++ /dev/null @@ -1,87 +0,0 @@ -# Named Views - -Sometimes you need to display multiple views at the same time instead of nesting them, e.g. creating a layout with a `sidebar` view and a `main` view. This is where named views come in handy. Instead of having one single outlet in your view, you can have multiple and give each of them a name. A `router-view` without a name will be given `default` as its name. - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -A view is rendered by using a component, therefore multiple views require multiple components for the same route. Make sure to use the `components` (with -an s) option: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -A working demo of this example can be found [here](https://jsfiddle.net/posva/6du90epg/). - -## Nested Named Views - -It is possible to create complex layouts using named views with nested views. When doing so, you will also need to name nested `router-view` components used. Let's take a Settings panel example: - -``` -/settings/emails /settings/profile -+-----------------------------------+ +------------------------------+ -| UserSettings | | UserSettings | -| +-----+-------------------------+ | | +-----+--------------------+ | -| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | -| | +-------------------------+ | | | +--------------------+ | -| | | | | | | | UserProfilePreview | | -| +-----+-------------------------+ | | +-----+--------------------+ | -+-----------------------------------+ +------------------------------+ -``` - -- `Nav` is just a regular component -- `UserSettings` is the view component -- `UserEmailsSubscriptions`, `UserProfile`, `UserProfilePreview` are nested view components - -**Note**: _Let's forget about how the HTML/CSS should look like to represent such layout and focus on the components used._ - -The `<template>` section for `UserSettings` component in the above layout would look something like this: - -```html -<!-- UserSettings.vue --> -<div> - <h1>User Settings</h1> - <NavBar/> - <router-view/> - <router-view name="helper"/> -</div> -``` - -_The nested view components are omitted here but you can find the complete source code for the example above [here](https://jsfiddle.net/posva/22wgksa3/)._ - -Then you can achieve the layout above with this route configuration: - -```js -{ - path: '/settings', - // You could also have named views at the top - component: UserSettings, - children: [{ - path: 'emails', - component: UserEmailsSubscriptions - }, { - path: 'profile', - components: { - default: UserProfile, - helper: UserProfilePreview - } - }] -} -``` - -A working demo of this example can be found [here](https://jsfiddle.net/posva/22wgksa3/). diff --git a/docs/guide/essentials/navigation.md b/docs/guide/essentials/navigation.md deleted file mode 100644 index 37c0ccfbf..000000000 --- a/docs/guide/essentials/navigation.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -sidebarDepth: 0 ---- - -# Programmatic Navigation - -Aside from using `<router-link>` to create anchor tags for declarative navigation, we can do this programmatically using the router's instance methods. - -## `router.push(location, onComplete?, onAbort?)` - -**Note: Inside of a Vue instance, you have access to the router instance as `$router`. You can therefore call `this.$router.push`.** - -To navigate to a different URL, use `router.push`. This method pushes a new entry into the history stack, so when the user clicks the browser back button they will be taken to the previous URL. - -This is the method called internally when you click a `<router-link>`, so clicking `<router-link :to="...">` is the equivalent of calling `router.push(...)`. - -| Declarative | Programmatic | -| ------------------------- | ------------------ | -| `<router-link :to="...">` | `router.push(...)` | - -The argument can be a string path, or a location descriptor object. Examples: - -```js -// literal string path -router.push('home') - -// object -router.push({ path: 'home' }) - -// named route -router.push({ name: 'user', params: { userId: '123' } }) - -// with query, resulting in /register?plan=private -router.push({ path: 'register', query: { plan: 'private' } }) -``` - -**Note**: `params` are ignored if a `path` is provided, which is not the case for `query`, as shown in the example above. Instead, you need to provide the `name` of the route or manually specify the whole `path` with any parameter: - -```js -const userId = '123' -router.push({ name: 'user', params: { userId } }) // -> /user/123 -router.push({ path: `/user/${userId}` }) // -> /user/123 -// This will NOT work -router.push({ path: '/user', params: { userId } }) // -> /user -``` - -The same rules apply for the `to` property of the `router-link` component. - -In 2.2.0+, optionally provide `onComplete` and `onAbort` callbacks to `router.push` or `router.replace` as the 2nd and 3rd arguments. These callbacks will be called when the navigation either successfully completed (after all async hooks are resolved), or aborted (navigated to the same route, or to a different route before current navigation has finished), respectively. -In 3.1.0+, you can omit the 2nd and 3rd parameter and `router.push`/`router.replace` will return a promise instead if Promises are supported. - -**Note:** If the destination is the same as the current route and only params are changing (e.g. going from one profile to another `/users/1` -> `/users/2`), you will have to use [`beforeRouteUpdate`](./dynamic-matching.md#reacting-to-params-changes) to react to changes (e.g. fetching the user information). - -## `router.replace(location, onComplete?, onAbort?)` - -It acts like `router.push`, the only difference is that it navigates without pushing a new history entry, as its name suggests - it replaces the current entry. - -| Declarative | Programmatic | -| --------------------------------- | --------------------- | -| `<router-link :to="..." replace>` | `router.replace(...)` | - -## `router.go(n)` - -This method takes a single integer as parameter that indicates by how many steps to go forwards or go backwards in the history stack, similar to `window.history.go(n)`. - -Examples - -```js -// go forward by one record, the same as history.forward() -router.go(1) - -// go back by one record, the same as history.back() -router.go(-1) - -// go forward by 3 records -router.go(3) - -// fails silently if there aren't that many records. -router.go(-100) -router.go(100) -``` - -## History Manipulation - -You may have noticed that `router.push`, `router.replace` and `router.go` are counterparts of [`window.history.pushState`, `window.history.replaceState` and `window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History), and they do imitate the `window.history` APIs. - -Therefore, if you are already familiar with [Browser History APIs](https://developer.mozilla.org/en-US/docs/Web/API/History_API), manipulating history will be super easy with Vue Router. - -It is worth mentioning that Vue Router navigation methods (`push`, `replace`, `go`) work consistently in all router modes (`history`, `hash` and `abstract`). diff --git a/docs/guide/essentials/nested-routes.md b/docs/guide/essentials/nested-routes.md deleted file mode 100644 index c4692b5a1..000000000 --- a/docs/guide/essentials/nested-routes.md +++ /dev/null @@ -1,102 +0,0 @@ -# Nested Routes - -<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-nested-routes?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to work with nested routes with Vue School">Learn how to work with nested routes with a free lesson on Vue School</a></div> - -Real app UIs are usually composed of components that are nested multiple levels deep. It is also very common that the segments of a URL corresponds to a certain structure of nested components, for example: - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -With `vue-router`, it is very simple to express this relationship using nested route configurations. - -Given the app we created in the last chapter: - -```html -<div id="app"> - <router-view></router-view> -</div> -``` - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [{ path: '/user/:id', component: User }] -}) -``` - -The `<router-view>` here is a top-level outlet. It renders the component matched by a top level route. Similarly, a rendered component can also contain its own, nested `<router-view>`. For example, if we add one inside the `User` component's template: - -```js -const User = { - template: ` - <div class="user"> - <h2>User {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -To render components into this nested outlet, we need to use the `children` option in `VueRouter` constructor config: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', - component: User, - children: [ - { - // UserProfile will be rendered inside User's <router-view> - // when /user/:id/profile is matched - path: 'profile', - component: UserProfile - }, - { - // UserPosts will be rendered inside User's <router-view> - // when /user/:id/posts is matched - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**Note that nested paths that start with `/` will be treated as a root path. This allows you to leverage the component nesting without having to use a nested URL.** - -As you can see the `children` option is just another Array of route configuration objects like `routes` itself. Therefore, you can keep nesting views as much as you need. - -At this point, with the above configuration, when you visit `/user/foo`, nothing will be rendered inside `User`'s outlet, because no sub route is matched. Maybe you do want to render something there. In such case you can provide an empty subroute path: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', - component: User, - children: [ - // UserHome will be rendered inside User's <router-view> - // when /user/:id is matched - { path: '', component: UserHome } - - // ...other sub routes - ] - } - ] -}) -``` - -A working demo of this example can be found [here](https://jsfiddle.net/yyx990803/L7hscd8h/). diff --git a/docs/guide/essentials/passing-props.md b/docs/guide/essentials/passing-props.md deleted file mode 100644 index b065f0ad1..000000000 --- a/docs/guide/essentials/passing-props.md +++ /dev/null @@ -1,90 +0,0 @@ -# Passing Props to Route Components - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-pass-vue-router-params-as-props-to-components?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to pass props to route components with Vue School">Learn how to pass props to route components with a free lesson on Vue School</a></div> - -Using `$route` in your component creates a tight coupling with the route which limits the flexibility of the component as it can only be used on certain URLs. - -To decouple this component from the router use option `props`: - -**Instead of coupling to `$route`:** - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [{ path: '/user/:id', component: User }] -}) -``` - -**Decouple it by using `props`** - -```js -const User = { - props: ['id'], - template: '<div>User {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - - // for routes with named views, you have to define the `props` option for each named view: - { - path: '/user/:id', - components: { - default: User, - sidebar: Sidebar - }, - props: { - default: true, - // function mode, more about it below - sidebar: route => ({ search: route.query.q }) - } - } - ] -}) -``` - -This allows you to use the component anywhere, which makes the component easier to reuse and test. - -## Boolean mode - -When `props` is set to `true`, the `route.params` will be set as the component props. - -## Object mode - -When `props` is an object, this will be set as the component props as-is. Useful for when the props are static. - -```js -const router = new VueRouter({ - routes: [ - { - path: '/promotion/from-newsletter', - component: Promotion, - props: { newsletterPopup: false } - } - ] -}) -``` - -## Function mode - -You can create a function that returns props. This allows you to cast parameters into other types, combine static values with route-based values, etc. - -```js -const router = new VueRouter({ - routes: [ - { - path: '/search', - component: SearchUser, - props: route => ({ query: route.query.q }) - } - ] -}) -``` - -The URL `/search?q=vue` would pass `{query: 'vue'}` as props to the `SearchUser` component. - -Try to keep the `props` function stateless, as it's only evaluated on route changes. Use a wrapper component if you need state to define the props, that way vue can react to state changes. - -For advanced usage, check out the [example](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js). diff --git a/docs/guide/essentials/redirect-and-alias.md b/docs/guide/essentials/redirect-and-alias.md deleted file mode 100644 index 887bab2d9..000000000 --- a/docs/guide/essentials/redirect-and-alias.md +++ /dev/null @@ -1,60 +0,0 @@ -# Redirect and Alias - -## Redirect - -Redirecting is also done in the `routes` configuration. To redirect from `/a` to `/b`: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -The redirect can also be targeting a named route: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -Or even use a function for dynamic redirecting: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // the function receives the target route as the argument - // return redirect path/location here. - }} - ] -}) -``` - -Note that [Navigation Guards](../advanced/navigation-guards.md) are not applied on the route that redirects, only on its target. In the example below, adding a `beforeEnter` guard to the `/a` route would not have any effect. - -For other advanced usage, checkout the [example](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js). - -## Alias - -A redirect means when the user visits `/a`, the URL will be replaced by `/b`, and then matched as `/b`. But what is an alias? - -**An alias of `/a` as `/b` means when the user visits `/b`, the URL remains `/b`, but it will be matched as if the user is visiting `/a`.** - -The above can be expressed in the route configuration as: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -An alias gives you the freedom to map a UI structure to an arbitrary URL, instead of being constrained by the configuration's nesting structure. - -For advanced usage, check out the [example](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js). diff --git a/docs/installation.md b/docs/installation.md deleted file mode 100644 index d3dd4f4c3..000000000 --- a/docs/installation.md +++ /dev/null @@ -1,54 +0,0 @@ -# Installation - -## Direct Download / CDN - -[https://unpkg.com/vue-router@3/dist/vue-router.js](https://unpkg.com/vue-router@3/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com) provides npm-based CDN links. The above link will always point to the latest release on npm. You can also use a specific version/tag via URLs like `https://unpkg.com/vue-router@3.0.0/dist/vue-router.js`. -<!--/email_off--> - -Include `vue-router` after Vue and it will install itself automatically: - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -## npm - -``` bash -npm install vue-router -``` - -When used with a module system, you must explicitly install the router via `Vue.use()`: - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -You don't need to do this when using global script tags. - -## Vue CLI - -If you have a project using [Vue CLI](https://cli.vuejs.org/) you can add Vue Router as a plugin. You can let the CLI generate the code above for you as well as two sample routes. **It will also overwrite your `App.vue`** so make sure to backup the file before running the following command inside your project: - -```sh -vue add router -``` - -## Dev Build - -You will have to clone directly from GitHub and build `vue-router` yourself if -you want to use the latest dev build. - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` - diff --git a/docs/ja/README.md b/docs/ja/README.md deleted file mode 100644 index fdab568b5..000000000 --- a/docs/ja/README.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -home: true -heroImage: /logo.png -actionText: Get Started → -actionLink: /ja/installation.html -footer: MIT Licensed | Copyright © 2014-present Evan You, Eduardo San Martin Morote ---- - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -Vue Router は [Vue.js](http://vuejs.org) 公式ルータです。これは Vue.js のコアと深く深く統合されており、Vue.js でシングルページアプリケーションを構築します。機能は次の通りです: - -- ネストされたルート/ビューマッピング -- モジュール式、コンポーネントベースのルータ構造 -- ルートパラメータ、クエリ、ワイルドカード -- Vue.js の transition 機能による、transition エフェクトの表示 -- 細かいナビゲーションコントロール -- 自動で付与される active CSS クラス -- HTML5 history モードまたは hash モードと IE9 の互換性 -- カスタマイズ可能なスクロール動作 - -[はじめに](./guide/) または [例](https://github.com/vuejs/vue-router/tree/dev/examples) から試してください。 ([`README.md`](https://github.com/vuejs/vue-router/)を参照してください。). - -<HomeSponsors /> diff --git a/docs/ja/README.md b/docs/ja/README.md new file mode 120000 index 000000000..0fbb5a869 --- /dev/null +++ b/docs/ja/README.md @@ -0,0 +1 @@ +SUMMARY.md \ No newline at end of file diff --git a/docs/ja/SUMMARY.md b/docs/ja/SUMMARY.md new file mode 100644 index 000000000..d012b1d56 --- /dev/null +++ b/docs/ja/SUMMARY.md @@ -0,0 +1,33 @@ +# vue-router ドキュメンテーション [](https://www.npmjs.com/package/vue-router) + +**[リリースノート](https://github.com/vuejs/vue-router/releases)** + +- [インストール](installation.md) +- [基本的な使い方](basic.md) +- [Nested Routes](nested.md) +- [Route オブジェクト & Route マッチング](route.md) +- [Named Routes](named.md) +- [Router オプション](options.md) +- [router-view](view.md) +- [v-link](link.md) +- [Lazy loading Routes](lazy.md) +- [トランジションパイプライン](pipeline/README.md) + - [トランジションフック](pipeline/hooks.md) + - [data](pipeline/data.md) + - [activate](pipeline/activate.md) + - [deactivate](pipeline/deactivate.md) + - [canActivate](pipeline/can-activate.md) + - [canDeactivate](pipeline/can-deactivate.md) + - [canReuse](pipeline/can-reuse.md) +- [API リファレンス](api/README.md) + - [Router インスタンスプロパティ](api/properties.md) + - [router.start](api/start.md) + - [router.stop](api/stop.md) + - [router.map](api/map.md) + - [router.on](api/on.md) + - [router.go](api/go.md) + - [router.replace](api/replace.md) + - [router.redirect](api/redirect.md) + - [router.alias](api/alias.md) + - [router.beforeEach](api/before-each.md) + - [router.afterEach](api/after-each.md) diff --git a/docs/ja/api/README.md b/docs/ja/api/README.md index 996a3ada3..539c4f3ea 100644 --- a/docs/ja/api/README.md +++ b/docs/ja/api/README.md @@ -1,547 +1,13 @@ ---- -sidebar: auto ---- - # API リファレンス -## `<router-link>` - -`<router-link>` はルーターが使用可能になっているアプリケーションでユーザーのナビゲーションを有効にするためのコンポーネントです。対象とする location は `to` プロパティを使って指定します。デフォルトでは正しい `href` と共に `<a>` タグとして描画しますが、 `tag` プロパティを設定することも可能です。さらに、対象のルートがアクティブの時に、そのリンクは自動的にアクティブな CSS クラスが当てられます。 - -下記の理由により `<router-link>` はハードコードする `<a href="...">` よりも好ましいです。 - -- HTML5 history モードでも hash モードでも同じ方法で動作します。もしあなたがモードを切り替えたりする場合や、IE9 で hash モードにフォールバックする場合に、何も変更する必要はありません。 - -- HTML5 history モードにおいて、ブラウザがページのリロードをしないように `router-link` はクリックイベントに割り込みます。 - -- HTML5 history モードで `base` オプションを使っている時に、 `to` プロパティの URL にそれを含める必要がありません。 - -### `v-slot` API (3.1.0 以降) - -`router-link` は[スコープ付きスロット](https://jp.vuejs.org/v2/guide/components-slots.html#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E4%BB%98%E3%81%8D%E3%82%B9%E3%83%AD%E3%83%83%E3%83%88)を通して低レベルなカスタマイズを提供しています。これは、主にライブラリ作者をターゲットにした高度な API ですが、ほとんどの場合 _NavLink_ などのようなカスタムコンポーネントでも同様に開発者にとっても大変便利です。 - -**`v-slot` API を使うとき、それは単一の子を `router-link` に通す必要があります。** そうしない場合は、 `router-link` は `span` 要素で子をラップします。 - -```html -<router-link - to="/about" - v-slot="{ href, route, navigate, isActive, isExactActive }" -> - <NavLink :active="isActive" :href="href" @click="navigate" - >{{ route.fullPath }}</NavLink - > -</router-link> -``` - -- `href`: 解決された url。これは、`a` 要素の `href` 属性になります -- `route`: 解決された正規化済みロケーション -- `navigate`: ナビゲーションをトリガーするための関数。`router-link` と同じように、**必要なときに自動的にイベントが起こらないようにします。** -- `isActive`: [アクティブクラス (active class)](#active-class) が適用されるとき、`true` になります。任意のクラスを適用できます。 -- `isExactActive`: `true` if the [正確なアクティブクラス (exact active class)](#exact-active-class) が適用されるとき、`true` になります。 任意のクラスを適用できます。 - -#### 例: アクティブクラスを外部要素へ適用 - -アクティブクラスを `<a>` タグ自身よりも、外側の要素に対して適用したいことがあるでしょう。その場合、`<router-link>` 内の要素を `v-slot` を使ってリンクを作成することでラップできます。 - -```html -<router-link - to="/foo" - v-slot="{ href, route, navigate, isActive, isExactActive }" -> - <li - :class="[isActive && 'router-link-active', isExactActive && 'router-link-exact-active']" - > - <a :href="href" @click="navigate">{{ route.fullPath }}</a> - </li> -</router-link> -``` - -:::tip -`target="_blank"` を `a` 要素に追加する場合、`@click="navigate"` ハンドラを省略しなければなりません。 -::: - -## `<router-link>` Props - -### to - - - 型: `string | Location` - - 必須 - - リンクする対象のルートを表します。クリックされた時に `to` プロパティの値が内部的に `router.push()` に渡されます。つまり、この値は文字列でも location を記述するオブジェクトでも構いません。 - - ``` html - <!-- 文字列 --> - <router-link to="home">Home</router-link> - <!-- 次のように描画される --> - <a href="home">Home</a> - - <!-- `v-bind` を使った javascript 式--> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- 他のプロパティのバインディングのような `v-bind` の省略表現 --> - <router-link :to="'home'">Home</router-link> - - <!-- 上記と同じ --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- 名前付きルート --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- 結果的に `/register?plan=private` になるクエリ--> - <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link> - ``` - -### replace - - - 型: `boolean` - - デフォルト: `false` - - `replace` プロパティを設定するとクリックされた時に `router.push()` の代わりに `router.replace()` が呼ばれます。したがって、ナビゲーションは history レコードに残りません。 - - ``` html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -### append - - - 型: `boolean` - - デフォルト: `false` - - `append` プロパティを設定すると現在のパスに対して常に相対パスを追加します。例えば、 `/a` から相対リンクの `b` へ遷移するのを想定した時に、 `append` がない場合は `/b` に、`append` がある場合は `/a/b` になります。 - - ``` html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -### tag - - - 型: `string` - - デフォルト: `"a"` - - しばしば `<router-link>` を `<li>` などの他のタグとして描画したい時があるでしょう。そこで、どのタグとして描画するかを指定するために `tag` プロパティを使うことができます。そして、依然ナビゲーションのためのクリックイベントを listen します。 - - ``` html - <router-link to="/foo" tag="li">foo</router-link> - <!-- 以下のように描画されます --> - <li>foo</li> - ``` - -### active-class - - - 型: `string` - - デフォルト: `"router-link-active"` - - リンクがアクティブな時に適用されるアクティブ CSS クラスの設定です。デフォルト値はルーターコンストラクタオプションの `linkActiveClass` でグローバルに設定可能です。 - -### exact - - - 型: `boolean` - - デフォルト: `false` - - デフォルトのアクティブクラスのマッチングの振る舞いは **包含的なマッチ** です。 例えば、現在のパスが `/a/` または `/a` から始まる限りは、`<router-link to="/a">` にアクティブクラスが適用されます。 - - この結果として `<router-link to="/">` は全てのルートに対してアクティブになります! リンクに対して "正確なマッチモード" を強制するために、 `exact` プロパティを使ってください。 - - ``` html - <!-- このリンクは `/` だけにアクティブになります --> - <router-link to="/" exact></router-link> - ``` - - アクティブリンククラスをより説明している例としてこちらの [動作](https://jsfiddle.net/8xrk1n9f/) を確認してください。 - -### event - - - 型: `string | Array<string>` - - デフォルト: `'click'` - - リンクナビゲーションをトリガーできるイベントを指定します。 - -### exact-active-class - - - 型 `string` - - デフォルト: `"router-link-exact-active"` - - 完全一致によってリンクがアクティブになっているときに適用されるアクティブな CSS クラスを設定します。デフォルト値は `linkExactActiveClass` ルーターコンストラクタのオプション経由でグローバルに設定することもできます。 - -### aria-current-value - -- 型: `'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false'` -- デフォルト: `"page"` - - 完全一致によってリンクがアクティブになっているときに `aria-current` の値を設定します。ARIA spec において[aria-current で許可されている値](https://www.w3.org/TR/wai-aria-1.2/#aria-current)の1つでなければなりません。ほとんどの場合、デフォルト`page` が最適です。 - -## `<router-view>` - -`<router-view>` コンポーネントは与えられたパスに対してマッチしたコンポーネントを描画する関数型コンポーネントです。`<router-view>` の中で描画されるコンポーネント自身もまた、ネストされたパスに対してコンポーネントを描画するための `<router-view>` を持つことができます。 - -name ではないプロパティも描画されるコンポーネントに渡されますが、ほとんどの場合ルート単位のデータはルートのパラメーターに含まれています。 - -これは普通のコンポーネントなので、 `<transition>` と `<keep-alive>` と共に動作します。両方を同時に使用する場合は `<keep-alive>` を内側にするようにしてください。 - -``` html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` - -## `<router-view>` Props - -### name - - - 型: `string` - - デフォルト: `"default"` - - `<router-view>` が名前を持つ時、マッチしたルートレコードの `components` オプション内で対応する名前のコンポーネントを描画します。例は [名前付きビュー](../guide/essentials/named-views.md) をご参照ください。 - -## ルーターコンストラクタオプション - -### routes - -- 型: `Array<RouteConfig>` - - `RouteConfig` の型宣言: - - ``` ts - interface RouteConfig = { - path: string; - component?: Component; - name?: string; // 名前付きルート用 - components?: { [name: string]: Component }; // 名前付き view 用 - redirect?: string | Location | Function; - props?: boolean | Object | Function; - alias?: string | Array<string>; - children?: Array<RouteConfig>; // ネストされたルート用 - beforeEnter?: (to: Route, from: Route, next: Function) => void; - meta?: any; - - // 2.6.0+ - caseSensitive?: boolean; // センシティブマッチをケースとして使用するかどうか? (デフォルト: false) - pathToRegexpOptions?: Object; // 正規表現のコンパイルとして path-to-regexp オプション - } - ``` - -### mode - -- 型: `string` - -- デフォルト: `"hash" (in browser) | "abstract" (in Node.js)` - -- 利用可能な値: `"hash" | "history" | "abstract"` - - ルーターモードの設定。 - - - `hash`: ルーティングに URL hash を使います。HTML5 History API をサポートしていないブラウザ含めて、全ての Vue がサポートしているブラウザで動作します。 - - - `history`: HTML5 History API とサーバーの設定が必要です。[HTML5 History モード](../guide/essentials/history-mode.md) を参照してください。 - - - `abstract`: 全ての JavaScript の環境で動作します。 e.g. Node.js を使ったサーバーサイド。 **もしブラウザの API が存在しない場合、ルーターは自動的にこのモードに強制されます。** - -### base - -- 型: `string` - -- デフォルト: `"/"` - - アプリケーションのベース URL です。例えば、 `/app/` 配下で完全なシングルページアプリケーションを提供する場合、 `base` は `"/app/"` の値が使われるべきです。 - -### linkActiveClass - -- 型: `string` - -- デフォルト: `"router-link-active"` - - グローバルに設定される `<router-link>` のデフォルトのアクティブクラスです。こちらの [router-link](#router-link) も参照してください。 - -### linkExactActiveClass - -- 型: `string` - -- デフォルト: `"router-link-exact-active"` - - 完全一致に対してグローバルな `<router-link>` デフォルトアクティブクラスを設定します。[router-link](#router-link) も参照してください。 - -### scrollBehavior - -- 型: `Function` - - シグネチャ: - - ```ts - type PositionDescriptor = - { x: number, y: number } | - { selector: string } | - void - - type scrollBehaviorHandler = ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => PositionDescriptor | Promise<PositionDescriptor> - ``` - - より詳細については [スクロールの振る舞い](../guide/advanced/scroll-behavior.md) を参照してください。 - -### parseQuery / stringifyQuery - -- 型: `Function` - - カスタムクエリ構文解析関数 / 文字列化関数を提供します。デフォルトを上書きします。 - -### fallback - -- 型: `boolean` -- デフォルト: `true` - - `history.pushState` がサポートされていないブラウザにおいて、モードが `history` に設定されているとき、ルーターを `hash` モードにフォールバックかどうか制御します。 - - これを `false` に設定すると、本質的に全ての `router-link` ナビゲーションが IE9 においてフルページリフレッシュになります。これは、サーバサイドレンダリングでハッシュモードの URL が機能しないため、IE9 で動作する必要がある場合に便利です。 - -## ルーターインスタンスプロパティ - -### router.app - -- 型: `Vue インスタンス` - - `router` が注入される root の Vue インスタンス - -### router.mode - -- 型: `string` - - ルーターが使う [モード](#mode) 。 - -### router.currentRoute - -- 型: `Route` - - [ルーターオブジェクト](#ルートオブジェクト) として表される現在のルート。 - -## メソッド - -### router.beforeEach -### router.beforeResolve -### router.afterEach - -シグネチャ: - -``` js -router.beforeEach((to, from, next) => { - /* `next` を呼び出さなければならない */ -}) - -router.beforeResolve((to, from, next) => { - /* `next` を呼び出さなければならない */ -}) - -router.afterEach((to, from) => {}) -``` - - グローバルなナビゲーションガードの追加。[ナビゲーションガード](../guide/advanced/navigation-guards.md) をご参照ください。 - - 2.5.0 以降では、3 つのメソッドすべてが、登録されたガード/フックを削除する関数を返します。 - -### router.push -### router.replace -### router.go -### router.back -### router.forward - -シグネチャ: - -``` js -router.push(location, onComplete?, onAbort?) -router.push(location).then(onComplete).catch(onAbort) -router.replace(location, onComplete?, onAbort?) -router.replace(location).then(onComplete).catch(onAbort) -router.go(n) -router.back() -router.forward() -``` - - プログラムによる新しい URL へのナビゲーション。 [プログラムによるナビゲーション](../guide/essentials/navigation.md) をご参照ください。 - -### router.getMatchedComponents - -シグネチャ: - -``` js -const matchedComponents: Array<Component> = router.getMatchedComponents(location?) -``` - - 現在のルートまたは提供されたロケーションにマッチしているコンポーネント (インスタンスではなく定義 / コンストラクタ) の配列を返します。これは大抵の場合データ取得を行うサーバーサイドレンダリングで使用されます。 - -### router.resolve - -シグネチャ: - -``` js -const resolved: { - location: Location; - route: Route; - href: string; -} = router.resolve(location, current?, append?) -``` - - 逆 URL 解決します。`<router-link/>` で使われているものと同じ形式の location が与えられた場合は、以下の解決されたプロパティを返します。 - - - `current` はデフォルトによる現在のルートです(ほとんどの場合、これを変更する必要はありません) - - `append` は `current` ルートにパスを追加できます([`router-link`](#router-link-props)と同様に) - -### router.addRoutes - -シグネチャ: - -``` js -router.addRoutes(routes: Array<RouteConfig>) -``` - - 動的にルートをルーターに追加します。引数は `routes` コンストラクタオプションで同じルート設定形式を使用する配列でなければなりません。 - -### router.onReady - -シグネチャ: - -``` js -router.onReady(callback, [errorCallback]) -``` - - このメソッドは、ルーターが初期ナビゲーションを完了したときに呼び出されるコールバックをキューに入れます。つまり、初期ルートに関連付けられているすべての非同期 enter フックと非同期コンポーネントを解決したことを意味します。 - - これは、サーバーとクライアントの両方で一貫した出力を保証するために、サーバーサイドレンダリングに役立ちます。 - - 第 2 引数 `errorCallback` は 2.4 以降でのみサポートされます。初期ルート解決がエラーの時に、呼び出されます (例: 非同期コンポーネントの解決が失敗)。 - -### router.onError - -シグネチャ: - -``` js -router.onError(callback) -``` - - ルートナビゲーション中にエラーが検出されたときに呼び出されるコールバックを登録します。エラーを呼び出すには、次のいずれかのシナリオが必要であることに注意してください: - - - エラーがルートガード関数内で同期的に投げられる; - - - エラーが補足され、ルートガード関数内で `next(err)` を呼び出すことによって非同期に処理される; - - - ルートを描画するために必須な非同期コンポーネントを解決しようとする時に発生したエラー; - -## ルートオブジェクト - -**ルートオブジェクト**は現在のアクティブなルートの状態を表現しています。現在の URL をパースした情報と、その URL とマッチした**ルートレコード**を保持しています。 - -ルートオブジェクトは変更不可です。成功した全てのナビゲーションは結果的に新たなルートオブジェクトになります。 - -ルートオブジェクトは複数の場所に存在します。 - -- コンポーネント内での `this.$route` - -- `$route` watcher コールバック内部 - -- `router.match(location)` を呼び出した時の返り値 - -- ナビゲーションガード内での第 1 引数、第 2 引数として: - - ``` js - router.beforeEach((to, from, next) => { - // `to` と `from` は両方ともルートオブジェクト - }) - ``` - -- `scrollBehavior` 関数内の第 1 引数、第 2 引数として: - - ``` js - const router = new VueRouter({ - scrollBehavior (to, from, savedPosition) { - // `to` と `from` は両方ともルートオブジェクト - } - }) - ``` - -### ルートオブジェクトプロパティ - -- **$route.path** - - - 型: `string` - - 現在のルートのパスに等しい文字列。常に絶対パスとして解釈されます。e.g. `"/foo/bar"` - -- **$route.params** - - - 型: `Object` - - 動的セグメントとスターセグメントの key/value ペアを保持するオブジェクト。もしパラメーターがない場合、この値は空オブジェクトになります。 - -- **$route.query** - - - 型: `Object` - - クエリ文字列の key/value ペアを保持するオブジェクト。例えば `/foo?user=1` というパスの場合、`$route.query.user == 1` となります。もしクエリがない場合は、この値は空オブジェクトになります。 - -- **$route.hash** - - - 型: `string` - - hash がある時の現在のルートの hash (# 有り) です。もし hash がない場合、この値は空オブジェクトになります。 - -- **$route.fullPath** - - - 型: `string` - - クエリや hash を含む完全に解決された URL です。 - -- **$route.matched** - - - 型: `Array<RouteRecord>` - - 現在のルートのネストされた全パスセグメントに対しての **ルートレコード** を保持している配列です。ルートレコードは `routes` 設定の配列 (と `children` 配列) 内のオブジェクトのコピーです。 - - ``` js - const router = new VueRouter({ - routes: [ - // 以下のオブジェクトがルートレコード - { path: '/foo', - component: Foo, - children: [ - // こちらもルートレコード - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - URL が `/foo/bar` である時、 `$route.matched` は親から子の順番で両方の (クローンされた) オブジェクトを含む配列になります。 - -- **$route.name** - - 名前がある場合の現在のルートの名前です。(詳しくは [名前付きルート](../guide/essentials/named-routes.md) をご参照ください) - -- **$route.redirectedFrom** - - もしあれば、リダイレクト元の名前。(参照[リダイレクトとエイリアス](../guide/essentials/redirect-and-alias.md)) - -## コンポーネント注入 - -### 注入されるプロパティ - -ルーターインスタンスを root インスタンスに `router` オプションとして渡すことによって、全ての子コンポーネントに以下のプロパティが注入されます。 - -- **this.$router** - - ルーターインスタンス - -- **this.$route** - - 現在のアクティブな [ルート](#ルートオブジェクト) 。このプロパティは読み出しのみ可能かつ変更不可ですが、watch は可能です。 - -### 有効になるオプション - -- **beforeRouteEnter** -- **beforeRouteUpdate** -- **beforeRouteLeave** - - [コンポーネント内ガード](../guide/advanced/navigation-guards.md#コンポーネント内ガード) をご参照ください。 +- [Router インスタンスプロパティ](properties.md) +- [router.start](start.md) +- [router.stop](stop.md) +- [router.map](map.md) +- [router.on](on.md) +- [router.go](go.md) +- [router.replace](replace.md) +- [router.redirect](redirect.md) +- [router.alias](alias.md) +- [router.beforeEach](before-each.md) +- [router.afterEach](after-each.md) diff --git a/docs/ja/api/after-each.md b/docs/ja/api/after-each.md new file mode 100644 index 000000000..e8d852085 --- /dev/null +++ b/docs/ja/api/after-each.md @@ -0,0 +1,25 @@ +# `router.afterEach(hook)` + +route トランジションが正常に**活性化フェーズに入る**とき、毎回呼び出されるグローバル after フック (global after hook) を追加します。 + +このフックが唯一トランジションが検証されたという意味を表すときに、呼ばれるのを注意してください。すなわち、全ての `canDeactivate` と `canActivate` フックが正常に解決し、ブラウザ URL が更新されます。これは、全ての `activate` フックが解決されたことを保証しません。 + +同じルーターに複数のグローバル after フックを追加できます。これらのフックは作成の順序で同期的に呼ばれます。 + +### 引数 + +- `hook {Function}` + + hook 関数は[トランジションオブジェクト](../pipeline/hooks.html#トランジションオブジェクト)な単一の引数を受け取ります。しかし、route オブジェクトは `to` と `from` プロパティ のみだけアクセスすることができます。グローバル after フックではトランジションメソッドを呼び出すことは**できません**。 + +### 戻り値 + +- router インスタンス自身 + +### 例 + +``` js +router.afterEach(function (transition) { + console.log('Successfully navigated to: ' + transition.to.path) +}) +``` diff --git a/docs/ja/api/alias.md b/docs/ja/api/alias.md new file mode 100644 index 000000000..450bacc28 --- /dev/null +++ b/docs/ja/api/alias.md @@ -0,0 +1,29 @@ +# `router.alias(aliasMap)` + +ルーターに対してグローバルエイリアスのルールを設定します。エイリアスとリダイレクトとの違いは、リダイレクトは `toPath` で `fromPath` を置換する代わり、エイリアスは `toPath` としてマッチしている限り、`fromPath` を維持します。 + +例えば、`/a` を `/a/b/c` にエイリアスする場合、`/a` にアクセスするとき、ブラウザ URL は `/a` を表示します。しかしながら、ルーターは代わりに `/a/b/c` にアクセスするかのようなパスをマッチします。 + +### 引数 + +- `aliasMap {Object}` + + エイリアスマップオブジェクトは `{ fromPath: toPath, ... }` の形にする必要があります。パスは動的セグメントを含むことができます。 + +### 戻り値 + +- router インスタンス自身 + +### 例 + +``` js +router.alias({ + + // /a/b/c であるかのように /a にマッチします + '/a': '/a/b/c', + + // エイリアスは動的セグメント名がマッチする必要がある + // 動的セグメントを含むことができます + '/user/:userId': '/user/profile/:userId' +}) +``` diff --git a/docs/ja/api/before-each.md b/docs/ja/api/before-each.md new file mode 100644 index 000000000..f6725c937 --- /dev/null +++ b/docs/ja/api/before-each.md @@ -0,0 +1,44 @@ +# `router.beforeEach(hook)` + +全ての route トランジションが開始する前に呼ばれるグローバル before フック (global before hook) をルーターに追加します。これは、トランジションパイプライン全体の前で、もし、フックがトランジションで拒否する場合、パイプラインは本当に開始されません。 + +同じルーターに複数のグローバル before フックを追加できます。これらのフックは作成の順序で呼ばれます。フックは非同期に解決することができるため、前のものが解決されるまで次のフックは呼び出されません。 + +グローバル before フックは[フックの解決ルール](../pipeline/hooks.html#フックの解決ルール)と同じように解決されます。 + +### 引数 + +- `hook {Function}` + + hook 関数は[トランジションオブジェクト](../pipeline/hooks.html#トランジションオブジェクト)な単一の引数を受信します。 + +### 戻り値 + +- router インスタンス自身 + +### 例 + +基本 + +``` js +router.beforeEach(function (transition) { + if (transition.to.path === '/forbidden') { + transition.abort() + } else { + transition.next() + } +}) +``` + +Promise + ES6 + +``` js +router.beforeEach(function ({ to, next }) { + if (to.path === '/auth-required') { + // true または false で解決する Promise を返します + return AuthService.isLoggedIn() + } else { + next() + } +}) +``` diff --git a/docs/ja/api/go.md b/docs/ja/api/go.md new file mode 100644 index 000000000..f6f109fcb --- /dev/null +++ b/docs/ja/api/go.md @@ -0,0 +1,38 @@ +# `router.go(path)` + +プログラム的に新しい route にナビゲートします。 + +### 引数 + +- `path: String | Object` + + パスは文字列かオブジェクトのどちらか使用できます。 + + 文字列の場合、パスはプレーンなパス (すなわち、動的セグメントまたはスターセグメント) の必要があります。パスは `/` で開始されない場合、現在のアクティブなパスの相対パスで解決されます。 + + オブジェクトの場合、いずれかの形式になります: + + ``` js + { path: '...' } + ``` + + または: + + ``` js + { + name: '...', + // params と query は任意です + params: { ... }, + query: { ... } + } + ``` + + `name` オブジェクトフォーマットについての詳細は、[Named Routes](../named.md) を参照してください。 + + - `path` フォーマットを使用して相対パスにナビゲートしているとき、相対パスがいつも現在のパスに**追加される**ように、`append: true` オプションに渡すことができます。例えば: + + - `append: true` オプションなしで `/a` から `b` への移動は、`/b` に着きます + + - `append: true` オプションありで `/a` から `b` への移動は、`/a/b` に着きます + + - 両方のフォーマットも新しいものを作成するのではなく、現在の履歴エントリを置き換えるためにナビゲーションする `replace: true` オプションを受け入れます。 diff --git a/docs/ja/api/map.md b/docs/ja/api/map.md new file mode 100644 index 000000000..3f1425a39 --- /dev/null +++ b/docs/ja/api/map.md @@ -0,0 +1,51 @@ +# `router.map(routeMap)` + +主に、ルーターに対して route マッピングを定義するメソッドです。 + +### 引数 + +- `routeMap: Object` + + キーはパスで、値は route 設定オブジェクトです。パスのマッチングルールは、[Route マッチング](../route.html#Route マッチング)を参照してください。 + +### Route 設定オブジェクト + +route 設定オブジェクトは2つのフィールドを含むことができます: + +- `component`: パスがマッチされるときにトップレベルの `<router-view>` outlet にレンダリングする Vue コンポーネント。値は `Vue.extend` の呼び出しによって返されたコンストラクタ、または純粋なコンポーネントオプションオブジェクトのいずれか可能です。後者の場合はルーターが暗黙的に `Vue.extend` を呼び出します。 + +- `subRoutes`: ここには他のサブ route マップをネストすることができます。`routeRoutes` マップ内の各サブパスついて、ルーターは親パスを追加することによって完全なパスに対してマッチします。マッチしたコンポーネントは親の route コンポーネントの `<router-view>` outlet にレンダリングされます。 + +### 戻り値 + +- router インスタンス自身 + +### 例 + +``` js +router.map({ + // コンポーネントコンストラクタ + '/a': { + component: Vue.extend({ /* ... */ }) + }, + // 純粋なコンポーネントオプションオブジェクト + '/b': { + component: { + template: '<p>Hello from /b</p>' + } + }, + // nested routes + '/c': { + component: { + // 単純に子の view をレンダリング + template: '<router-view></router-view>' + }, + subRoutes: { + // パスが /c/d であるときにレンダリング + '/d': { component: { template: 'D' }}, + // パスが /c/e であるときにレンダリング + '/e': { component: { template: 'E' }} + } + } +}) +``` diff --git a/docs/ja/api/on.md b/docs/ja/api/on.md new file mode 100644 index 000000000..0c87dbaf1 --- /dev/null +++ b/docs/ja/api/on.md @@ -0,0 +1,22 @@ +# `router.on(path, config)` + +単一の root レベルの route 設定を追加します。内部的に、`router.map()` は単に 受信したルーターマップオブジェクトで各 key-value ペアに対して `router.on()` を呼びます。 + +### 引数 + +- `path: String` - [Route マッチング](../route.md#Route マッチング)を参照してください。 +- `config: Object` - [Route 設定オブジェクト](map.md#Route 設定オブジェクト)を参照してください。 + +### 戻り値 + +- router インスタンス自身 + +### 例 + +``` js +router.on('/user/:userId', { + component: { + template: '<div>{{$route.params.userId}}</div>' + } +}) +``` diff --git a/docs/ja/api/properties.md b/docs/ja/api/properties.md new file mode 100644 index 000000000..02023ef4a --- /dev/null +++ b/docs/ja/api/properties.md @@ -0,0 +1,21 @@ +# Router インスタンスプロパティ + +> パブリックなプロパティのみがここに記載されています。 + +### `router.app` + +- 型: `Vue` + + root Vue インスタンスはルーターインスタンスによって管理されます。このインスタンスは `router.start()` に渡した Vue コンポーネントのコンストラクタから作成されます。ルーターがロード時にリダイレクトを実行しなければならない時、同期的に利用できない場合があります。あなたのアプリケーションのコンポーネントの外部で `router.app` にアクセスする必要がある場合、`router.start()` に渡されたコールバック内部でそうすることができます。 + +### `router.mode` + +- 型: `String` + + `html5` 、`hash` または `abstract` のいずれか。 + + - **`html5`**: HTML5 history API を使用し、`popstate`イベントをリッスンします。[`saveScrollPosition`](../options.html#savescrollposition) をサポートします。 + + - **`hash`**: `location.hash` と `hashchange` イベントをリッスンして使用します。ルーターを作成するときに、`history: true` を指定するとき、history API をサポートしていないブラウザでは hash モードにフォールバックします。 + + - **`abstract`**: 全てのイベントをリッスンしません。`window` が存在しない場合、このモードに自動でフォールバックします。 diff --git a/docs/ja/api/redirect.md b/docs/ja/api/redirect.md new file mode 100644 index 000000000..37a05f860 --- /dev/null +++ b/docs/ja/api/redirect.md @@ -0,0 +1,30 @@ +# `router.redirect(redirectMap)` + +ルーターに対してグローバルリダイレクションのルールを設定します。グローバルリダイレクションは現在のパスにマッチする前に実行されます。リダイレクションが見つかった場合、元々のアクセスパスは単にスキップされ、ブラウザの履歴にレコードを残すことはありません。 + +### 引数 + +- `redirectMap: Object` + + リダイレクトマップオブジェクトは `{ fromPath: toPath, ... }` の形にする必要があります。パスは動的セグメントを含むことができます。 + +### 戻り値 + +- router インスタンス自身 + +### 例 + +``` js +router.redirect({ + + // /a への全てのナビゲーションを /b にリダイレクト + '/a': '/b', + + // リダイレクトは動的セグメント名がマッチする必要がある + // 動的セグメントを含むことができます + '/user/:userId': '/profile/:userId', + + // 見つからなかったルートは /home にリダイレクト + '*': '/home' +}) +``` diff --git a/docs/ja/api/replace.md b/docs/ja/api/replace.md new file mode 100644 index 000000000..0b6dd869b --- /dev/null +++ b/docs/ja/api/replace.md @@ -0,0 +1,9 @@ +# `router.replace(path)` + +`router.go(path)` に似ていますが、ブラウザの履歴に新しいレコードを作成しません。 + +### 引数 + +- `path: String` + + パスは純粋なパスの必要があります(すなわち、動的セグメントではない、またはスターセグメント)。パスは `/` で開始されず、現在のアクティブなパスの相対パスで解決されます。 diff --git a/docs/ja/api/start.md b/docs/ja/api/start.md new file mode 100644 index 000000000..a1419c867 --- /dev/null +++ b/docs/ja/api/start.md @@ -0,0 +1,20 @@ +# `router.start(App, el, [callback])` + +ルーターが使用可能なアプリケーションを開始します。`App` のインスタンスを作成し、それを `el` にマウントします。 + +### 引数 + +- `App: Function | Object` + + `App` は Vue コンポーネントのコンストラクタ または コンポーネントオプションオブジェクトです。 もしオブジェクトの場合は、ルーターは暗黙的に `Vue.extend` を呼び出します。このコンポーネントはアプリケーションの root な Vue インスタンスを作成するために使用されます。 + + **Note:** + vue-router は Vue インスタンスで開始することはできません。 + +- `el: String | Element` + + 要素はアプリケーション上にマウントします。CSS セレクタ文字列または実際の要素を指定することができます。 + +- `callback: Function` (任意) + + コールバックはルーターアプリケーションの初期レンダリングが完了するときに呼ばれます。`router.app` はこのコールバックが呼び出された後に利用可能であることが保証されます。 diff --git a/docs/ja/api/stop.md b/docs/ja/api/stop.md new file mode 100644 index 000000000..f3ad46fe0 --- /dev/null +++ b/docs/ja/api/stop.md @@ -0,0 +1,5 @@ +# `router.stop()` + +`popstate` と `hashchange` イベントのリスニングを停止します。 + +ルーターが停止された状態であるとき、`router.app` は破壊されず、まだ `router.go(path)` を使用してナビゲートできることに注意してください。引数なしでまた `router.start()` を呼び出すことによってルーターの再開始もできます。 diff --git a/docs/ja/basic.md b/docs/ja/basic.md new file mode 100644 index 000000000..db46fd3b2 --- /dev/null +++ b/docs/ja/basic.md @@ -0,0 +1,66 @@ +# 基本的な使い方 + +Vue.js + vue-router でシングルページアプリケーションを作成するのは極めてシンプルです。Vue.js で、既に我々のアプリケーションはコンポーネントに分割されています。ミックスするため vue-router を追加する時、必要なことは我々のコンポーネントを routes にマップし、そして、vue-router にどこをレンダリングするのかを知らせたるだけです。ここでは基本的な例を示します: + +### HTML + +``` html +<div id="app"> + <h1>Hello App!</h1> + <p> + <!-- ナビゲーション向けに v-link ディレクティブを使用 --> + <a v-link="{ path: '/foo' }">Go to Foo</a> + <a v-link="{ path: '/bar' }">Go to Bar</a> + </p> + <!-- route outlet --> + <router-view></router-view> +</div> +``` + +### JavaScript + +``` js +// いくつかのコンポーネントを定義します +var Foo = Vue.extend({ + template: '<p>This is foo!</p>' +}) + +var Bar = Vue.extend({ + template: '<p>This is bar!</p>' +}) + +// router は、レンダリングするために1つの root コンポーネントが必要です +// デモ目的向けで、app テンプレートとして HTML を使用しているため、空を使用します +var App = Vue.extend({}) + +// router インスタンスを作成。 +// ここでは追加的なオプションで渡すことができますが、今はシンプルに保っています +var router = new VueRouter() + +// いくつかの routes を定義します +// route 毎、コンポーネントにマップが必要です +// "component" は 事実上コンポーネントコンストラクタは Vue.extend() 経由で作成されるか、 +// または適切なコンポーネントオプションオブジェクトでできます +// nested routes については後で話します +router.map({ + '/foo': { + component: Foo + }, + '/bar': { + component: Bar + } +}) + +// 今 アプリケーションを開始することが出来ます! +// router は App のインスタンスを作成し、 +// そして #app セレクタでマッチングした要素にマウントします +router.start(App, '#app') +``` + +[live](http://jsfiddle.net/yyx990803/xyu276sa/) の例もチェックできます。 + +加えて: + +- root な Vue インスタンスは一度だけ初期レンダリングが完了する、 `router.app` として利用できます。 + +- router インスタンスは `this.$router` として router アプリケーションの全ての子孫で利用できます。 diff --git a/docs/ja/guide/README.md b/docs/ja/guide/README.md deleted file mode 100644 index a01b4da18..000000000 --- a/docs/ja/guide/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# はじめに - -::: tip Note -ガイド内のコードのサンプルは [ES2015](https://github.com/lukehoban/es6features) を使っています。 - -すべての example では、vue の完全バージョンを使用してテンプレートを解析可能にしています。詳細は[こちら](https://jp.vuejs.org/v2/guide/installation.html#ランタイム-コンパイラとランタイム限定の違い)を参照してください。 -::: - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -Vue.js と vue-router を使ったシングルページアプリケーションの構築は驚くほど簡単です。Vue.js のコンポーネントを使ってアプリケーションを既に構成しています。vue-router を混ぜ込むには、コンポーネントとルートをマッピングさせて vue-router にどこで描画するかを知らせるだけです。以下が基本的な例です。 - -## HTML - -```html -<script src="https://unpkg.com/vue@2/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- ナビゲーションに router-link コンポーネントを使う --> - <!-- リンク先を `to` プロパティに指定します --> - <!-- デフォルトで `<router-link>` は `<a>` タグとして描画されます --> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- ルートアウトレット --> - <!-- ルートとマッチしたコンポーネントがここへ描画されます --> - <router-view></router-view> -</div> -``` - -## JavaScript - -```js -// 0. モジュールシステムを使っている場合 (例: vue-cli 経由で)、Vue と VueRouter をインポートし、`Vue.use(VueRouter)` を呼び出します。 - -// 1. ルートコンポーネントを定義します -// 他のファイルからインポートすることもできます -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. ルートをいくつか定義します -// 各ルートは 1 つのコンポーネントとマッピングされる必要があります。 -// このコンポーネントは実際の `Vue.extend()`、 -// またはコンポーネントオプションのオブジェクトでも構いません。 -// ネストされたルートに関しては後で説明します -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. ルーターインスタンスを作成して、ルートオプションを渡します -// 追加のオプションをここで指定できますが、 -// この例ではシンプルにしましょう -const router = new VueRouter({ - routes // `routes: routes` の短縮表記 -}) - -// 4. root となるインスタンスを作成してマウントします -// アプリケーション全体がルーターを認知できるように、 -// ルーターをインジェクトすることを忘れないでください。 -const app = new Vue({ - router -}).$mount('#app') - -// これで開始です! -``` - -ルーターを注入することによって、`this.$router` と同様、任意のコンポーネント内部で現在のルートを `this.$route` としてアクセスすることができます: - -```js -// Home.vue -export default { - computed: { - username() { - // `params` が表示される - return this.$route.params.username - } - }, - methods: { - goBack () { - window.history.length > 1 - ? this.$router.go(-1) - : this.$router.push('/') - } - } -} -``` - -ドキュメントを通して、しばしば `router` インスタンスを使用することがよくあります。`this.$router` は `router` を使用するのと全く同じです。`this.$router` を使用する理由は、ルーティング操作する必要がある全てのコンポーネントにルーターをインポートしたくないからです。 - -[動作](https://jsfiddle.net/yyx990803/xgrjzsup/) の例も確認してみてください. - -`<router-link>` は対象のルートがマッチした時に自動的に `.router-link-active` が付与されるのにお気づきでしょうか。 -より詳細については [API リファレンス](../api/#router-link) をご参照ください。 diff --git a/docs/ja/guide/advanced/data-fetching.md b/docs/ja/guide/advanced/data-fetching.md deleted file mode 100644 index d767bdab1..000000000 --- a/docs/ja/guide/advanced/data-fetching.md +++ /dev/null @@ -1,112 +0,0 @@ -# データ取得 - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -ルートが有効化された時にサーバーからデータを取得する必要がしばしばあります。例えば、ユーザープロフィールを描画する前に、サーバーからユーザーデータを取得する必要があります。これを実現するためには 2 種類の方法があります。 - -- **ナビゲーション後の取得**: ナビゲーションを先に実行し、その後次に入ってくるコンポーネントのライフサイクルフック内でデータを取得します。データ取得中にローディングを表示します。 - -- **ナビゲーション前の取得**: ルートに入るガード内でナビゲーション前にデータ取得をします。そして、データ取得後にナビゲーションを実行します。 - -技術的にはどちらも正当な選択肢です。究極的にはあなたが目指しているユーザーエクスペリエンスに依存します。 - -## ナビゲーション後の取得 - -このアプローチを取る時は次に来るコンポーネントが即座にナビゲーションされ、描画されます。そして、コンポーネントの `created` フックの中でデータを取得します。この方法ではネットワーク越しにデータを取得している間にローディング状態を表示する機会があります。また、各 view に対して、異なるローディングの対応をすることもできます。 - -`$route.params.id` を元にポストのデータを取得する必要がある `Post` コンポーネントを想定してみましょう。 - -```html -<template> - <div class="post"> - <div v-if="loading" class="loading"> - Loading... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -```js -export default { - data() { - return { - loading: false, - post: null, - error: null - } - }, - created() { - // view が作られた時にデータを取得し、 - // そのデータは既に監視されています - this.fetchData() - }, - watch: { - // ルートが変更されたらこのメソッドを再び呼び出します - $route: 'fetchData' - }, - methods: { - fetchData() { - this.error = this.post = null - this.loading = true - // `getPost` をあなたのデータ取得用 util や API ラッパーに置き換えてください - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## ナビゲーション前の取得 - -こちらのアプローチでは新しいルートへ実際にナビゲーションする前にデータを取得します。次に入ってくるコンポーネント内の `beforeRouteEnter` ガードでデータ取得を実行できます。データ取得が完了したら `next` を呼ぶだけです。 - -```js -export default { - data() { - return { - post: null, - error: null - } - }, - beforeRouteEnter(route, redirect, next) { - getPost(route.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // コンポーネントが既に描画されている際のルート変更時は - // ロジックが少し異なります - beforeRouteUpdate(to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData(err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -次に入ってくる view へのリソースを取得している間、ユーザーは前の view に滞在します。したがって、データ取得中にプログレスバーや何らかの指標を表示することをオススメします。また、もしデータ取得が失敗した場合、何かグローバルな警告メッセージのようなものを表示する必要があります。 diff --git a/docs/ja/guide/advanced/lazy-loading.md b/docs/ja/guide/advanced/lazy-loading.md deleted file mode 100644 index e4d6936ef..000000000 --- a/docs/ja/guide/advanced/lazy-loading.md +++ /dev/null @@ -1,42 +0,0 @@ -# 遅延ローディングルート - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -バンドラーを使ってアプリケーションを構築している時、バンドルされる JavaScript が非常に大きいものになり得ます。結果的にページのロード時間に影響を与えてしまいます。もし各ルートコンポーネントごとに別々のチャンクにして、訪れたルートの時だけロードできればより効率的でしょう。 - -Vue の [非同期コンポーネント機能](http://jp.vuejs.org/guide/components.html#非同期コンポーネント) と webpack の [コード分割機能](https://webpack.js.org/guides/code-splitting-async/) を組み合わせることでとても簡単に遅延ロードするルートコンポーネントができます。 - -最初に、非同期コンポーネントは Promise (コンポーネント自身解決する必要がある) を返すファクトリ関数として定義できます: - -```js -const Foo = () => - Promise.resolve({ - /* component definition */ - }) -``` - -次に、webpack 2 において [動的 import](https://github.com/tc39/proposal-dynamic-import) 構文を使用して、コード分割ポイントを示すことができます: - -```js -import('./Foo.vue') // returns a Promise -``` - -> Note: Babel を使用している場合、Babel が構文を正しく解析するために [syntax-dynamic-import](https://babeljs.io/docs/plugins/syntax-dynamic-import/) プラグインを追加する必要があります。 - -2 つを組み合わせることで、これは、webpack によって自動的にコード分割される非同期コンポーネントを定義する方法です: - -```js -const Foo = () => import('./Foo.vue') -``` - -## 同じチャンク内でのコンポーネントグループ化 - -しばしば同じ非同期のチャンクに、そのルート配下のネストされた全てのコンポーネントをグループ化したいと思うかもしれません。それを実現するためには、 特別なコメント構文 (webpack > 2.4 必須)を使用してチャンクの名前を提供する [名前付きチャンク](https://webpack.js.org/api/module-methods/#magic-comments) を使う必要があります。 - -```js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -webpack は同じチャンク名のどんな非同期のモジュールも同じ非同期のチャンクにグループします。 diff --git a/docs/ja/guide/advanced/meta.md b/docs/ja/guide/advanced/meta.md deleted file mode 100644 index 4ea38484f..000000000 --- a/docs/ja/guide/advanced/meta.md +++ /dev/null @@ -1,53 +0,0 @@ -# ルートメタフィールド - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -ルートの定義をする際に `meta` フィールドを含めることができます。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // メタフィールド - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -ではどのように `meta` フィールドにアクセスしましょう? - -まず、 `routes` 設定の中の各ルートオブジェクトは**ルートレコード**と呼ばれます。ルートレコードはネストされているかもしれません。したがって、ルートがマッチした時に、潜在的には 1 つ以上のルートレコードがマッチされる可能性があります。 - -例えば上記のルート設定で、 `/foo/bar` という URL は親のルートレコードにも子のルートレコードにもマッチします。 - -ルートにマッチした全てのルートレコードは `$route.matched` 配列として `$route` オブジェクト上で (また、ナビゲーションガード上のルートオブジェクトでも) アクセス可能になります。 - -メタフィールドをグローバルナビゲーションガードで確認するユースケースの例: - -```js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // このルートはログインされているかどうか認証が必要です。 - // もしされていないならば、ログインページにリダイレクトします。 - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // next() を常に呼び出すようにしてください! - } -}) -``` diff --git a/docs/ja/guide/advanced/navigation-failures.md b/docs/ja/guide/advanced/navigation-failures.md deleted file mode 100644 index b43f3ee75..000000000 --- a/docs/ja/guide/advanced/navigation-failures.md +++ /dev/null @@ -1,61 +0,0 @@ -# ナビゲーションの失敗 - -> 3.4.0の新機能 - -`router-link` を使用すると、ナビゲーションを開始するためにVue Routerは `router.push` を呼び出します。ほとんどのリンクはユーザーを新しいページに移動させますが、ユーザーが同じページに留まる状況もいくつかあります。 - -- すでにユーザーが移動したいページにいる -- [ナビゲーションガード](./navigation-guards.md)が `next(false)` の呼び出しによって移動を中止した -- [ナビゲーションガード](./navigation-guards.md)がエラーを投げた、または `next(new Error())` を呼び出した - -`router-link` コンポーネントを使用している場合、**これらの失敗はエラーとして記録されません**。しかし、 `router.push` または `router.replace` を使用している場合は、 _"Uncaught (in promise) Error"_ に続いて具体的なメッセージがコンソールに表示されることがあります。_ナビゲーションの失敗_ を区別する方法を理解しましょう。 - -::: tip 背景 -v3.2.0では、router.pushの2つのオプションのコールバック( `onComplete` と `onAbort` )を通して _ナビゲーションの失敗_ が明らかになっていました。バージョン3.1.0以降、 `onComplete` / `onAbort` コールバックが提供されていない場合、 `router.push` と `router.replace` は _Promise_ を返します。この _Promise_ は `onComplete` の代わりにResolvedとなり、 `onAbort` の代わりにRejectedとなります。 -::: - -## ナビゲーションの失敗を検出する - -_Navigation Failures_ はいくつかの追加プロパティをもつ `Error` インスタンスです。ルーターからエラーが発生したかを確認するには、 `isNavigationFailure` 関数を使用します。 - -```js -import VueRouter from 'vue-router' -const { isNavigationFailure, NavigationFailureType } = VueRouter - -// 管理画面にアクセス -router.push('/admin').catch(failure => { - if (isNavigationFailure(failure, NavigationFailureType.redirected)) { - // ユーザーに小さな通知を表示 - showToast('Login in order to access the admin panel') - } -}) -``` - -::: tip -`isNavigationFailure(failure)` のように2番目のパラメータを省略すると、エラーが _Navigation Failure_ かどうかのチェックのみが行われます。 -::: - -## `NavigationFailureType` - -`NavigationFailureType` は開発者がさまざまな種類の _Navigation Failures_ を区別するのに役立ちます。次の4つの種類があります。 - -- `redirected`: 別の場所にリダイレクトするために、ナビゲーションガードの中で `next(newLocation)` が呼び出された -- `aborted`: ナビゲーションガードの中で `next(false)` が呼び出された -- `cancelled`: 現在のナビゲーションが終了する前に、新しいナビゲーションが実行された。例:ナビゲーションガード内で待機中に `router.push` が呼び出された -- `duplicated`: すでに目的の場所にいるため、ナビゲーションが妨げられた - -## _Navigation Failures_ のプロパティ - -全てのナビゲーションの失敗は、そのナビゲーションのターゲットと現在地を反映した `to` と `from` のプロパティを公開します。 - -```js -// 管理画面にアクセス -router.push('/admin').catch(failure => { - if (isNavigationFailure(failure, NavigationFailureType.redirected)) { - failure.to.path // '/admin' - failure.from.path // '/' - } -}) -``` - -全ての場合において、 `to` と `from` は正規化されたルートの場所です。 diff --git a/docs/ja/guide/advanced/navigation-guards.md b/docs/ja/guide/advanced/navigation-guards.md deleted file mode 100644 index b7e588f61..000000000 --- a/docs/ja/guide/advanced/navigation-guards.md +++ /dev/null @@ -1,173 +0,0 @@ -# ナビゲーションガード - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -この名前が示すように、 `vue-router` によって提供されるナビゲーションガードは、リダイレクトもしくはキャンセルによって遷移をガードするために主に使用されます。ルートナビゲーション処理 (グローバル、ルート単位、コンポーネント内) をフックする多くの方法があります。 - -**パラメータまたはクエリの変更は enter/leave ナビゲーションガードをトリガーしない** ということを覚えておいてください。それらの変更に対応するために [`$route` オブジェクトを監視する](../essentials/dynamic-matching.md#reacting-to-params-changes)、またはコンポーネント内ガード `beforeRouteUpdate` を使用するかの、どちらかができます。 - -## グローバルビフォーガード - -`router.beforeEach` を使ってグローバル before ガードを登録できます。 - -```js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -いつナビゲーションがトリガーされようとも、グローバル before ガードは作られた順番で呼び出されます。ガードは非同期に解決されるかもしれません。そしてそのナビゲーションは全てのフックが解決されるまで **未解決状態** として扱われます。 - -全てのガード関数は 3 つの引数を受け取ります。 - -- **`to: Route`**: 次にナビゲーションされる対象の [ルートオブジェクト](../../api/#ルートオブジェクト)。 - -- **`from: Route`**: ナビゲーションされる前の現在のルートです。 - -- **`next: Function`**: フックを **解決** するためにこの関数を呼ぶ必要があります。この振る舞いは `next` に渡される引数に依存します: - -- **`next()`**: パイプラインの次のフックに移動します。もしフックが残っていない場合は、このナビゲーションは **確立** されます。 - -- **`next(false)`**: 現在のナビゲーションを中止します。もしブラウザの URL が変化した場合は(ユーザーが手動で変更した場合でも、戻るボタンの場合でも)、 `from` ルートの URL にリセットされます。 - -- **`next('/')` または `next({ path: '/' })`**: 異なる場所へリダイレクトします。現在のナビゲーションは中止され、あたらしいナビゲーションが始まります。任意のロケーションオブジェクトを `next` に渡すことができます。この `next` には、`replace: true`、 `name: 'home'` のようなオプション、そして [`router-link`、`to` プロパティ](../../api/#router-link)または [`router.push`](../../api/#ルーターインスタンスプロパティ)で使用される任意のオプションを指定することができます。 - -- **`next(error)`**: (2.4.0+) `next` に渡された引数が `Error` インスタンスである場合、ナビゲーションは中止され、エラーは `router.onError()` を介して登録されたコールバックに渡されます。 - -**与えられたナビゲーションガードを通過する任意のパスにおいて、常に 1 回だけ `next` 関数が呼び出されるようにしてください。それは 1 回以上出現することがありますが、論理パスが重ならないときだけで、そうしないないとフックは決して解決されない、またはエラーが発生します。** 以下は、ユーザーが認証されていない場合、`/login` にリダレクトするための例です: - -```js -// BAD -router.beforeEach((to, from, next) => { - if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) - // ユーザーが認証されていない場合、 `next` は2回呼ばれる - next() -}) -``` - -```js -// GOOD -router.beforeEach((to, from, next) => { - if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) - else next() -}) -``` - -## グローバル解決ガード - -> New in 2.5.0 - -2.5.0 以降では、`router.beforeResolve` によってグローバルガードを登録できます。これは `router.beforeEach` に似ていますが、**すべてのコンポーネント内ガードと非同期ルートコンポーネントが解決された後**、ナビゲーションが解決される直前に解決ガードが呼び出されるという違いがあります。 - -## グローバルな After フック - -グローバル after フックを登録することもできます。しかしながら、ガードとは異なり、これらのフックは `next` 関数を受け取らず、ナビゲーションに影響しません。 - -```js -router.afterEach((to, from) => { - // ... -}) -``` - -## ルート単位ガード - -直接ルート設定オブジェクトの `beforeEnter` ガードを定義することができます。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -これらのガードはグローバル before ガードと全く同じシグネチャを持ちます。 - -### コンポーネント内ガード - -最後に、 以下のオプションでルートコンポーネント(ルータ設定に渡されるもの)の内側でルートナビゲーションガードを直接定義することができます。 - -- `beforeRouteEnter` -- `beforeRouteUpdate` (2.2 で追加) -- `beforeRouteLeave` - -```js -const Foo = { - template: `...`, - beforeRouteEnter(to, from, next) { - // このコンポーネントを描画するルートが確立する前に呼ばれます。 - // `this` でのこのコンポーネントへのアクセスはできません。 - // なぜならばこのガードが呼び出される時にまだ作られていないからです! - }, - beforeRouteUpdate(to, from, next) { - // このコンポーネントを描画するルートが変更されたときに呼び出されますが、 - // このコンポーネントは新しいルートで再利用されます。 - // たとえば、動的な引数 `/foo/:id` を持つルートの場合、`/foo/1` と `/foo/2` の間を移動すると、 - // 同じ `Foo` コンポーネントインスタンスが再利用され、そのときにこのフックが呼び出されます。 - // `this` でコンポーネントインスタンスにアクセスできます。 - }, - beforeRouteLeave(to, from, next) { - // このコンポーネントを描画するルートが間もなく - // ナビゲーションから離れていく時に呼ばれます。 - // `this` でのコンポーネントインスタンスへのアクセスができます。 - } -} -``` - -この `beforeRouteEnter` ガードは `this` へのアクセスは**できない**です。なぜならば、ナビゲーションが確立する前にガードが呼び出されるからです。したがって、新しく入ってくるコンポーネントはまだ作られていないです。 - -しかしながら、 `next` にコールバックを渡すことでインスタンスにアクセスすることができます。このコールバックはナビゲーションが確立した時に呼ばれ、コンポーネントインスタンスはそのコールバックの引数として渡されます。 - -```js -beforeRouteEnter (to, from, next) { - next(vm => { - // `vm` を通じてコンポーネントインスタンスにアクセス - }) -} -``` - -コールバックを `next` に渡すことをサポートするのは、`beforeRouteEnter` ガードだけであるということに注意してください。`beforeRouteUpdate` と `beforeRouteLeave` の場合、 `this` は既に利用可能です。したがって、コールバックを渡す必要はないので、_サポートされません_: - -```js -beforeRouteUpdate (to, from, next) { - // `this` を使用 - this.name = to.params.name - next() -} -``` - -**leave ガード**は、通常、ユーザが保存されていない編集内容で誤って経路を離れるのを防ぐために使用されます。ナビゲーションは `next(false)` を呼び出すことで取り消すことができます。 - -```js -beforeRouteLeave (to, from, next) { - const answer = window.confirm('Do you really want to leave? you have unsaved changes!') - if (answer) { - next() - } else { - next(false) - } -} -``` - -## 完全なナビゲーション解決フロー - -1. ナビゲーションがトリガされる -2. 非アクティブ化されたコンポーネントで `beforeRouteLeave` ガードを呼ぶ -3. グローバル `beforeEach` ガードを呼ぶ -4. 再利用されるコンポーネントで `beforeRouteUpdate` ガードを呼ぶ (2.2 以降) -5. ルート設定内の `beforeEnter` を呼ぶ -6. 非同期ルートコンポーネントを解決する -7. アクティブ化されたコンポーネントで `beforeRouteEnter` を呼ぶ -8. グローバル `beforeResolve` ガードを呼ぶ (2.5 以降) -9. ナビゲーションが確定される -10. グローバル `afterEach` フックを呼ぶ -11. DOM 更新がトリガされる -12. インスタンス化されたインスンタンスによって `beforeRouteEnter` ガードで `next` に渡されたコールバックを呼ぶ diff --git a/docs/ja/guide/advanced/scroll-behavior.md b/docs/ja/guide/advanced/scroll-behavior.md deleted file mode 100644 index 2e0d6f1ba..000000000 --- a/docs/ja/guide/advanced/scroll-behavior.md +++ /dev/null @@ -1,83 +0,0 @@ -# スクロールの振る舞い - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -クライアントサイドのルーティングを使っている時に、新しいルートに対してスクロールをトップへ移動させたいかもしれません、もしくは実際のページリロードがしているように history 要素のスクロールポジションを保持したいこともあるかもしれません。 `vue-router` ではこれらをさらによく実現できます。ルートナビゲーションにおけるスクロールの挙動を完全にカスタマイズすることができます。 - -**注意: この機能は ブラウザが `history.pushState` をサポートしている場合のみ動作します。** - -ルーターインスタンスを作る時に、 `scrollBehavior` 関数を提供できます。 - -```js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // 望みのポジションを返す - } -}) -``` - -`scrollBehavior` 関数は `to` と `from` のルートオブジェクトを受け取ります。第 3 引数の `savedPosition` は `popstate` ナビゲーション (ブラウザの戻る/進むボタンがトリガーされた) 時のみ利用可能です。 - -この関数はスクロールポジションオブジェクトを返すことができます。そのオブジェクトは以下のような形式です。 - -- `{ x: number, y: number }` -- `{ selector: string }` -- `{ selector: string, offset? : { x: number, y: number }}` (2.6.0 以降においてだけ offset はサポート) - -もし falsy な値や空のオブジェクトが返った場合、何もスクロールは起きません。 - -例: - -```js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -これは単純に全てのルートナビゲーションに対してページスクロールをトップにします。 - -`savedPosition` を返すことは結果的に戻る/進むボタンを押してナビゲーションした時にネイティブのような挙動になります。 - -```js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -もし"アンカーへスクロール"の振る舞いをシミュレートしたい場合は以下のようにしてください。 - -```js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -きめの細かいスクロールの挙動コントロールを実装するために [ルートメタフィールド](meta.md) も利用可能です。詳細な例は [こちら](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js) をご参照ください。 - -## 非同期なスクローリング - -> 2.8.0 で新規 - -期待する位置記述子 (position descriptor) に解決されるプロミスを返すこともできます: - -```js -scrollBehavior (to, from, savedPosition) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ x: 0, y: 0 }) - }, 500) - }) -} -``` - -スクロールの振る舞いをページの遷移とうまく合わせるために、ページレベルのトランジションコンポーネントからのイベントにフックすることは可能ですが、ユースケースにおいて可能性のある食い違いと複雑さのために、単純に特定のユーザランド実装を可能にするために、このプリミティブな機能を提供します。 diff --git a/docs/ja/guide/advanced/transitions.md b/docs/ja/guide/advanced/transitions.md deleted file mode 100644 index 350429959..000000000 --- a/docs/ja/guide/advanced/transitions.md +++ /dev/null @@ -1,60 +0,0 @@ -# トランジション - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -基本的に `<router-view>` は動的コンポーネントなので、 `<transition>` コンポーネントを使うのと同じ方法でトランジションを適用することができます。 - -```html -<transition> - <router-view></router-view> -</transition> -``` - -[全てのトランジション API は](http://jp.vuejs.org/guide/transitions.html) はここでも動作します。 - -## ルート単位のトランジション - -上記の使い方では全てのトランジションが全てのルートに対して適用されます。もし各ルートコンポーネントにそれぞれ違うトランジションを持たせたい場合は、代わりにルーターコンポーネント内で異なる名前で `<transition>` を使うことができます。 - -```js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -## ルートベースの動的トランジション - -対象のルートと現在のルートの関係を元に動的にトランジションを決定することも可能です。 - -```html -<!-- 動的なトランジション名の使用 --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -```js -// そして親コンポーネントの中で、 -// `$route` を watch して使用するトランジションを決定します -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -完全な例は [こちら](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js) をご参照ください。 diff --git a/docs/ja/guide/essentials/dynamic-matching.md b/docs/ja/guide/essentials/dynamic-matching.md deleted file mode 100644 index 7c72d8ff3..000000000 --- a/docs/ja/guide/essentials/dynamic-matching.md +++ /dev/null @@ -1,105 +0,0 @@ -# 動的ルートマッチング - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -パターンを使って同じコンポーネントにルートをマップする必要がしばしばあるでしょう。例えば、 `User` コンポーネントは全てのユーザーに対して描画されるべきであるが、それぞれ異なるユーザー ID を持つ場合などです。`vue-router` ではパスの中の動的なセグメントを使用して実現できます。 - -```js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // コロンで始まる動的セグメント - { path: '/user/:id', component: User } - ] -}) -``` - -これで `/user/foo` や `/user/bar` などの URL 両方とも同じルートにマッチします。 - -動的セグメントはコロン `:` を使って表されます。ルートがマッチした時、この動的セグメントの値は全てのコンポーネント内で `this.$route.params` として利用可能になります。したがって、現在の `User` のテンプレートを次のように更新することで現在のユーザー ID を表示することができます。 - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -``` - -[こちら](https://jsfiddle.net/yyx990803/4xfa2f19/) のデモの例も確認してみてください。 - -1 つのルートが複数の動的なセグメントを持つこともできます。そして、それらは `$route.params` の一致したフィールドとマップされます。例: - -| パターン | マッチしたパス | \$route.params | -| ----------------------------- | ------------------- | -------------------------------------- | -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -`$route.params` に加えて、`$route` オブジェクトでは `$route.query` (もし URL 上にクエリがあるなら) や `$route.hash` など便利な情報も利用可能です。それらの詳細については [API リファレンス](../../api/#the-route-object) でご確認ください。 - -## パラメーター変更の検知 - -ルートのパラメーターを使う際に特筆すべき点は、ユーザーが `/user/foo` から `/user/bar` へ遷移するときに**同じコンポーネントインスタンスが再利用される**ということです。 両方のルートが同じコンポーネントを描画するため、古いインスタンスを破棄して新しいものを生成するよりも効率的です。**しかしながら、これはコンポーネントのライフサイクルフックが呼ばれないことを意味しています。** - -同じコンポーネントでパラメーター変更を検知するためには、 `$route` オブジェクトを watch するだけです。 - -```js -const User = { - template: '...', - watch: { - $route(to, from) { - // ルートの変更の検知... - } - } -} -``` - -または、2.2 で導入された `beforeRouteUpdate` [ナビゲーションガード](../advanced/navigation-guards.html)を使用します: - -```js -const User = { - template: '...', - beforeRouteUpdate(to, from, next) { - // ルート変更に反応する... - // next() を呼び出すのを忘れないでください - } -} -``` - -## すべてキャッチするルート / 404 Not found ルート - -通常のパラメータは、`/` で区切られた url フラグメントの間にある文字だけにマッチします。**何でも**一致させたい場合は、アスタリスク(`*`)を使うことができます: - -```js -{ - // 全てにマッチします - path: '*' -} -{ - // `/user-`から始まる任意のものにマッチします - path: '/user-*' -} -``` - -_アスタリスク_ ルートを使用するときは、_アスタリスク_ ルートが最後になるようにルートを正しく順序付けてください。 -`{ path: '*' }` ルートは、通常クライアントサイドの 404 ページで使われます。_History モード_ を使用する場合は、[正しいサーバの設定](./history-mode.md)も同様にしっかりしてください。 - -_アスタリスク_ を使用するときは、 `pathMatch` と名付けられたパラメータは、自動的に `$route.params` に追加されます。_アスタリスク_ によってマッチされた url の残りを含みます: - -```js -// { path: '/user-*' } というルートが与えられた -this.$router.push('/user-admin') -this.$route.params.pathMatch // 'admin' -// { path: '*' } というルートが与えられた -this.$router.push('/non-existing') -this.$route.params.pathMatch // '/non-existing' -``` - -## 高度なマッチングパターン - -`vue-router` はパスのマッチングエンジンとして [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0) を使っています。これは Optional による動的なセグメント、Zero or more / One or more に対する要求、また、カスタム正規表現パターンまでもサポートしています。 これらの高度なパターンについてはこちらの [ドキュメンテーション](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters) または、 `vue-router` の中でそれらを使っている [こちらの例](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) をご参照ください。 - -## マッチングの優先度 - -しばしば同じ URL で複数のルートがマッチすることがあります。そのようなケースではマッチングの優先度はルートの定義された順番によって決定されます。先に定義されたルートほど優先度が高くなります。 diff --git a/docs/ja/guide/essentials/history-mode.md b/docs/ja/guide/essentials/history-mode.md deleted file mode 100644 index 5bf831441..000000000 --- a/docs/ja/guide/essentials/history-mode.md +++ /dev/null @@ -1,143 +0,0 @@ -# HTML5 History モード - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -`vue-router` のデフォルトは _hash モード_ です - 完全な URL を hash を使ってシミュレートし、 URL が変更された時にページのリロードが起きません。 - -その hash を取り除くために、ページのリロード無しに URL 遷移を実現する `history.pushState` API を利用したルーターの **history モード** を使うことができます。 - -```js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -history モードを使用する時は、URL は "普通" に見えます e.g. `http://oursite.com/user/id`。美しいですね! - -しかしながら一点問題があります。シングルページのクライアントサイドアプリケーションなので、適切なサーバーの設定をしないと、ユーザーがブラウザで直接 `http://oursite.com/user/id` にアクセスした場合に 404 エラーが発生します。 - -心配する必要はありません。この問題を直すためには、単純な catch-all フォールバックのためのルートをサーバー側で追加するだけです。もし URL がどの静的なアセットにもマッチしなかった時はあなたのアプリケーションが動作しているのと同じ `index.html` ページで受け付けましょう。これも美しいですね! - -## サーバーの設定例 - -#### Apache - -```apache -<IfModule mod_negotiation.c> - Options -MultiViews -</IfModule> -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -`mod_rewrite`の代わりに、[`FallbackResource`](https://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource) も使用することができます。 - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Native Node.js - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http - .createServer((req, res) => { - fs.readFile('index.html', 'utf-8', (err, content) => { - if (err) { - console.log('We cannot open "index.html" file.') - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) - }) - .listen(httpPort, () => { - console.log('Server listening on: http://localhost:%s', httpPort) - }) -``` - -#### Node.js (Express) - -Node.js/Express では [connect-history-api-fallback middleware](https://github.com/bripkens/connect-history-api-fallback) の利用を検討してください。 - -#### Internet Information Services (IIS) - -1. [IIS UrlRewrite](https://www.iis.net/downloads/microsoft/url-rewrite) をインストール -2. 以下によるサイトのルートディレクトリに `web.config` ファイルを作成 - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="/" /> - </rule> - </rules> - </rewrite> - </system.webServer> -</configuration> -``` - -#### Caddy - -``` -rewrite { - regexp .* - to {path} / -} -``` - -#### Firebase のホスティング - -以下を `firebase.json` に追加します: - -``` -{ - "hosting": { - "public": "dist", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} -``` - -## 注意 - -この点に関して注意があります。全ての not-found パスが `index.html` を提供するため、もはや 404 エラーをサーバーがレポートしなくなります。回避策として、Vue アプリケーション内で 404 ページを表示するために catch-all ルートを実装すべきです。 - -```js -const router = new VueRouter({ - mode: 'history', - routes: [{ path: '*', component: NotFoundComponent }] -}) -``` - -他の方法として、もしあなたが Node.js サーバーを使っている場合、入ってきた URL とマッチさせて、マッチしなかった場合に 404 を返答するサーバーサイドのルーターを使って fallback を実装することもできます。詳細については [Vue サーバサイドレンダリングのドキュメント](https://ssr.vuejs.org/ja/) を参照してください。 diff --git a/docs/ja/guide/essentials/named-routes.md b/docs/ja/guide/essentials/named-routes.md deleted file mode 100644 index 4169fd3b6..000000000 --- a/docs/ja/guide/essentials/named-routes.md +++ /dev/null @@ -1,33 +0,0 @@ -# 名前付きルート - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -しばしば、名前を使ってルートを特定できるとより便利です。特にルートにリンクするときやナビゲーションを実行するときなどです。Router インスタンスを作成するときに `routes` オプションの中でルートに名前を付けることができます。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -名前を付けたルートにリンクするには、 `router-link` コンポーネントの `to` プロパティにオブジェクトを渡します。 - -```html -<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> -``` - -これはプログラムで `router.push()` を呼び出すときに使われるオブジェクトと全く同じです。 - -```js -router.push({ name: 'user', params: { userId: 123 } }) -``` - -どちらのケースもルーターは `/user/123` のパスにナビゲーションします。 - -完全な例は [こちら](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js) です。 diff --git a/docs/ja/guide/essentials/named-views.md b/docs/ja/guide/essentials/named-views.md deleted file mode 100644 index 3a1a11c74..000000000 --- a/docs/ja/guide/essentials/named-views.md +++ /dev/null @@ -1,88 +0,0 @@ -# 名前付きビュー - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -しばしば、ネストをさせずに同時に複数の view を表示する必要があるでしょう。例えば、`sidebar` view と `main` view を使ったレイアウトを作成する時です。そんな時に名前付きビューは便利です。あなたの view に 1 つのアウトレットを持つのではなく、複数のそれぞれが名前付きの view を持つことができます。名前を持たない `router-view` はその名前として `default` が付与されます。 - -```html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -1 つの view は 1 つのコンポーネントを使って描画されます。したがって、同じルートに対する複数の view には複数のコンポーネントが必須になります。この `components` (s が付いている) オプションに注意してください。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -この例の動作しているデモは -[こちら](https://jsfiddle.net/posva/6du90epg/) です。 - -## ネストされた名前付きビュー - -ネストされたビューを持つ名前付きビューを使用して複雑なレイアウトを作成することができます。そうする際に、ネストされた `router-view` コンポーネントを使用するために名前をつける必要があります。設定パネルの例を見てみましょう: - -``` -/settings/emails /settings/profile -+-----------------------------------+ +------------------------------+ -| UserSettings | | UserSettings | -| +-----+-------------------------+ | | +-----+--------------------+ | -| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | -| | +-------------------------+ | | | +--------------------+ | -| | | | | | | | UserProfilePreview | | -| +-----+-------------------------+ | | +-----+--------------------+ | -+-----------------------------------+ +------------------------------+ -``` - -- `Nav` は普通のコンポーネントです -- `UserSettings` はビューコンポーネントです -- `UserEmailsSubscriptions` 、`UserProfile` 、`UserProfilePreview` はネストされたビューコンポーネントです - -**Note**: _そのようなレイアウトに HTML/CSS がどのように表示されるのか、そして使用されるコンポーネントに焦点を当てる方法については、ここでは忘れましょう_ - -上記レイアウトでの `UserSettings` コンポーネントの `<template>` セクションは次のようになります: - -```html -<!-- UserSettings.vue --> -<div> - <h1>User Settings</h1> - <NavBar /> - <router-view /> - <router-view name="helper" /> -</div> -``` - -_ここではネストされたビューコンポーネントは省略されていますが、上記例の完全なソースコードを[ここ](https://jsfiddle.net/posva/22wgksa3/)で見ることができます_ - -それから、以下のルート設定で上記のレイアウトを表現することができます: - -```js -{ path: '/settings', - // トップで名前付きビューを持つこともできます - component: UserSettings, - children: [{ - path: 'emails', - component: UserEmailsSubscriptions - }, { - path: 'profile', - components: { - default: UserProfile, - helper: UserProfilePreview - } - }] -} -``` - -この例の動作するデモは、[ここ](https://jsfiddle.net/posva/22wgksa3/)に見ることができます。 diff --git a/docs/ja/guide/essentials/navigation.md b/docs/ja/guide/essentials/navigation.md deleted file mode 100644 index abe202225..000000000 --- a/docs/ja/guide/essentials/navigation.md +++ /dev/null @@ -1,86 +0,0 @@ -# プログラムによるナビゲーション - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -宣言的なナビゲーションとしてアンカータグを作成する `<router-link>` がありますが、ルーターのインスタンスメソッドを使ったプログラムによる方法でもそれは可能です。 - -#### `router.push(location, onComplete?, onAbort?)` - -**注意: Vue インスタンスの内部では、`$router` としてルーターインスタンスにアクセスできます。従って、`this.$router.push` で呼ぶことができます。** - -異なる URL へ遷移するときに `router.push` が使えます。このメソッドは history スタックに新しいエントリを追加します。それによってユーザーがブラウザの戻るボタンをクリックした時に前の URL に戻れるようになります。 - -このメソッドは `<router-link>` をクリックした時に内部的に呼ばれています。つまり `<router-link :to="...">` をクリックすることは `router.push(...)` を呼ぶことと等価です。 - -| 宣言的 | プログラム的 | -| ------------------------- | ------------------ | -| `<router-link :to="...">` | `router.push(...)` | - -引数は文字列のパス、もしくは、location を記述するオブジェクトが使えます。例: - -```js -// 文字列パス -router.push('home') - -// オブジェクト -router.push({ path: 'home' }) - -// 名前付きルート -router.push({ name: 'user', params: { userId: '123' } }) - -// 結果的に /register?plan=private になる query -router.push({ path: 'register', query: { plan: 'private' } }) -``` - -**注意**: `path` が渡された場合は `params` は無視されます(`query` は上の例の通り無視されません)。代わりに `name` でルート名を渡すか、`path` にすべてのパラメータを含める必要があります: - -```js -const userId = '123' -router.push({ name: 'user', params: { userId } }) // -> /user/123 -router.push({ path: `/user/${userId}` }) // -> /user/123 -// これは動作"しません" -router.push({ path: '/user', params: { userId } }) // -> /user -``` - -同じルールが、`router-link` コンポーネントの `to` プロパティに対して適用されます。 - -2.2.0 以降では、必要に応じて、第 2 引数と第 3 引数として `router.push` または `router.replace` に `onComplete` と `onAbort` コールバックを指定します。これらのコールバックは、ナビゲーションが正常に完了したとき(すべての非同期フックが解決された後)に呼び出されるか、またはそれぞれ中止されます(現在のナビゲーションが終了する前に同じルートまたは別のルートにナビゲートされた) - -**注意:** ルートの行き先が現在のルートと同じで、かつパラメータのみが変更されている場合(例: `/users/1` -> `/users/2` のようにあるプロファイルから他へ)、変更(例: ユーザー情報の取得など)に反応するために[beforeRouteUpdate](./dynamic-matching.html#パラメーター変更の検知) を使用しなければなりません。 - -#### `router.replace(location, onComplete?, onAbort?)` - -これは `router.push` のように動作しますが、異なる点は新しい history エントリを追加しないで遷移することです。この名前から推定されるように、現在のエントリを置換します。 - -| 宣言的 | プログラム的 | -| --------------------------------- | --------------------- | -| `<router-link :to="..." replace>` | `router.replace(...)` | - -#### `router.go(n)` - -このメソッドは、history スタックの中でどのくらいステップを進めるか、もしくは戻るのか、を表す 1 つの integer をパラメーターとして受け取ります。`window.history.go(n)` と類似しています。 - -例 - -```js -// 1 つレコードを進める。history.forward() と同じ -router.go(1) - -// 1 つレコードを戻す。history.back() と同じ -router.go(-1) - -// 3 つレコードを進める -router.go(3) - -// もし多くのレコードが存在しない場合、サイレントに失敗します -router.go(-100) -router.go(100) -``` - -#### History 操作 - -もしかすると `router.push`、`router.replace`、`router.go` は [`window.history.pushState`、`window.history.replaceState`、`window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History) と対応することにお気づきかもしれません。これらは `window.history` API を模倣しています。 - -したがって、もしあなたが既に [Browser History APIs](https://developer.mozilla.org/en-US/docs/Web/API/History_API) について詳しい場合は、vue-router による History 操作はとても簡単です。 - -vue-router のナビゲーションメソッド (`push`、`replace`、`go`) は全てのモード (`history`、`hash`、`abstract`) で一貫して動作することは特筆すべき点です。 diff --git a/docs/ja/guide/essentials/nested-routes.md b/docs/ja/guide/essentials/nested-routes.md deleted file mode 100644 index f62afa99b..000000000 --- a/docs/ja/guide/essentials/nested-routes.md +++ /dev/null @@ -1,102 +0,0 @@ -# ネストされたルート - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -実際のアプリケーションの UI では通常複数のレベルの階層的にネストしたコンポーネントで構成されます。ネストされたコンポーネントの特定の構造に対して URL のセグメントを対応させることはよくあります。例: - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -`vue-router` を使えば、これらのネストされたルートの設定を使って関連付けをシンプルに表現することができます。 - -前の章で作ったアプリケーションを考えてみましょう。 - -```html -<div id="app"> - <router-view></router-view> -</div> -``` - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [{ path: '/user/:id', component: User }] -}) -``` - -ここでの `<router-view>` はトップレベルのアウトレットです。トップレベルのルートによってマッチしたコンポーネントが描画されます。同様に描画されたコンポーネントもまた自身のネストされた `<router-view>` を持つことができます。`User` コンポーネントのテンプレート内部に 1 つ追加する例です。 - -```js -const User = { - template: ` - <div class="user"> - <h2>User {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -このネストされたアウトレットに対してコンポーネントを描画するためには、 `VueRouter` のコンストラクタの設定で `children` オプションを使用する必要があります。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', - component: User, - children: [ - { - // /user/:id/profile がマッチした時に - // UserProfile は User の <router-view> 内部で描画されます - path: 'profile', - component: UserProfile - }, - { - // /user/:id/posts がマッチした時に - // UserPosts は User の <router-view> 内部で描画されます - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**`/` から始まるネストされたパスは root パスとして扱われることに注意してください。これによってネストされた URL を指定しなくてもコンポーネントをネストすることができます。** - -`children` オプションを見るとわかる通り、これは `routes` 自身と同じようなルート設定オブジェクトの配列です。したがって、ネストしている view を必要なだけ保持することができます。 - -ここまでの点では、上記の設定で `/user/foo` に訪れた時に `User` アウトレット内部で何も描画されません。なぜならば、サブルートにマッチしていないからです。そこに何か描画したい場合は、空のサブルートパスを設定できます。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', - component: User, - children: [ - // /user/:id がマッチした時に - // UserHome は User の <router-view> 内部で描画されます - { path: '', component: UserHome } - - // 他のサブルートも同様に... - ] - } - ] -}) -``` - -この例の動作デモは [こちら](https://jsfiddle.net/yyx990803/L7hscd8h/) です。 diff --git a/docs/ja/guide/essentials/passing-props.md b/docs/ja/guide/essentials/passing-props.md deleted file mode 100644 index 301bf083d..000000000 --- a/docs/ja/guide/essentials/passing-props.md +++ /dev/null @@ -1,83 +0,0 @@ -# ルートコンポーネントにプロパティを渡す - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -コンポーネントで `$route` を使うとコンポーネントとルートの間に密結合が生まれ、コンポーネントが特定の URL でしか使用できないなど柔軟性が制限されます。 - -コンポーネントをルーターから分離するために `props` オプションを使います: - -**`$route` に結合** - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [{ path: '/user/:id', component: User }] -}) -``` - -**`props` による分離** - -```js -const User = { - props: ['id'], - template: '<div>User {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - - // 名前付きビューによるルートに対しては、名前付きビューごとに `props` オプションを定義しなければなりません: - { - path: '/user/:id', - components: { default: User, sidebar: Sidebar }, - props: { default: true, sidebar: false } - } - ] -}) -``` - -これにより、コンポーネントをどこからでも使用できるようになり、コンポーネントの再利用とテストが容易になります。 - -### Boolean モード - -`props` を `true` に設定すると、`route.params` がコンポーネントのプロパティとして設定されます。 - -### Object モード - -`props` がオブジェクトの場合、これはコンポーネントプロパティとしてそのまま設定されます。プロパティが静的なときに便利です。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/promotion/from-newsletter', - component: Promotion, - props: { newsletterPopup: false } - } - ] -}) -``` - -### Function モード - -プロパティを返す関数を作成することができます。これにより、パラメータを他のタイプにキャストし、静的な値をルートベースの値などと組み合わせることができます。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/search', - component: SearchUser, - props: route => ({ query: route.query.q }) - } - ] -}) -``` - -URL `/search?q=vue` は `{query: 'vue'}` をプロパティとして `SearchUser` コンポーネントに渡します。 - -ルート変更時にのみ評価されるため、`props` 関数はステートレスにしてください。プロパティを定義するために状態を必要とする場合はラッパーコンポーネントを使用してください。その方法で vue は状態変更に対応することができます。 - -高度な使い方については、[example](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js)を参照してください。 diff --git a/docs/ja/guide/essentials/redirect-and-alias.md b/docs/ja/guide/essentials/redirect-and-alias.md deleted file mode 100644 index 3631c2d08..000000000 --- a/docs/ja/guide/essentials/redirect-and-alias.md +++ /dev/null @@ -1,59 +0,0 @@ -# リダイレクトとエイリアス - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">Watch a free video course about Vue Router on Vue School</a></div> - -### リダイレクト - -`routes` 設定でリダイレクトが可能です。`/a` から `/b` へリダイレクトする例: - -```js -const router = new VueRouter({ - routes: [{ path: '/a', redirect: '/b' }] -}) -``` - -名前付きルートに対してリダイレクトすることもできます。 - -```js -const router = new VueRouter({ - routes: [{ path: '/a', redirect: { name: 'foo' } }] -}) -``` - -また、function を使った動的なリダイレクトもできます。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/a', - redirect: to => { - // この function は対象のルートを引数として受け取ります - // ここではリダイレクト先の path もしくは location を返します - } - } - ] -}) -``` - -[ナビゲーションガード](../advanced/navigation-guards.md)はリダイレクトするルートに提供されず、ターゲット上のみに適用されるということに注意してください。例では、`beforeEnter` ガードを `/a` ルートに追加しても効果がありません。 - -その他の高度な使い方として、[例](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js) をご参照ください。 - -### エイリアス - -リダイレクトが意図するところは、ユーザーが `/a` に訪問した時に URL を `/b` に置換し、そして `/b` にマッチさせます。ではエイリアスは何でしょうか? - -**`/b` として扱う `/a` のエイリアスは、ユーザーが `/b` に訪問した時に URL は `/b` のままになります。しかし、それはまるでユーザーが `/a` に訪問したかのようにマッチされます。** - -上記はルートの設定で以下のように表現されます。 - -```js -const router = new VueRouter({ - routes: [{ path: '/a', component: A, alias: '/b' }] -}) -``` - -設定のネスト構造による制約とは異なり、エイリアスは UI 構造に任意の URL をマップするための自由さがあります。 - -高度な使い方に関しては、 [例](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js) をご参照ください。 diff --git a/docs/ja/installation.md b/docs/ja/installation.md index f25bc261c..377c81f61 100644 --- a/docs/ja/installation.md +++ b/docs/ja/installation.md @@ -1,48 +1,34 @@ # インストール -### 直接ダウンロード / CDN +### 直接ダウンロード -[https://unpkg.com/vue-router@3/dist/vue-router.js](https://unpkg.com/vue-router@3/dist/vue-router.js) +[dist フォルダ](https://github.com/vuejs/vue-router/tree/dev/dist)を参照してください。dist フォルダにあるファイルは常に最新の安定版であることに注意してください。`dev` ブランチのソースで更新されません。 -<!--email_off--> -[Unpkg.com](https://unpkg.com) は npm ベースの CDN リンクです。 上記のリンクは常に NPM 上の最新のリリースを指します。 `https://unpkg.com/vue-router@3.0.0/dist/vue-router.js` のような URL を利用することで特定のバージョンやタグを指定することもできます。 -<!--/email_off--> +### CDN +[jsdelivr](https://cdn.jsdelivr.net/vue.router/0.7.10/vue-router.min.js) -Vue の後に `vue-router` を含めると自動的にインストールされます。 +[cdnjs](https://cdnjs.cloudflare.com/ajax/libs/vue-router/0.7.10/vue-router.min.js) -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -### npm +### NPM ``` bash npm install vue-router ``` -モジュールシステムを使う場合、`Vue.use()` を使って明示的にルーターをインストールする必要があります。 +CommonJS で使用されるとき、明示的に `Vue.use()` 経由でルータはインストールされなければなりません: ``` js -import Vue from 'vue' -import VueRouter from 'vue-router' +var Vue = require('vue') +var VueRouter = require('vue-router') Vue.use(VueRouter) ``` -グローバルな script タグを使っている場合は必要ありません。 - -## Vue CLI - -[Vue CLI](https://cli.vuejs.org/) を使用している場合、 Vue Router をプラグインで追加することができます。2つのサンプルルートと同様、上記のコードを CLI に生成させることができます。**`App.vue`もまた上書きされるため、** プロジェクト内で以下のコマンドを実行する前にファイルをバックアップしておいてください: - -```sh -vue add router -``` +スタンドアロンビルドを使用しているときは、それ自身自動的にインストールされるため、これを実行する必要はありません。 -### 開発用ビルド +### Dev ビルド -もし最新の開発用ビルドを使用したい場合は、GitHub から直接クローンして `vue-router` をご自身でビルドしてください。 +最新の開発版を使用したい場合は、GitHub から直接 clone して `vue-router` をあなた自身でビルドしなければなりません。 ``` bash git clone https://github.com/vuejs/vue-router.git node_modules/vue-router @@ -50,3 +36,9 @@ cd node_modules/vue-router npm install npm run build ``` + +### Bower + +``` bash +bower install vue-router +``` diff --git a/docs/ja/lazy.md b/docs/ja/lazy.md new file mode 100644 index 000000000..722bdc7ed --- /dev/null +++ b/docs/ja/lazy.md @@ -0,0 +1,63 @@ +# Lazy Loading Routes + +Webpack または Browserify のようなバンドラを使用しているとき、Vue.js 組み込みの[非同期コンポーネント機能](http://jp.vuejs.org/guide/components.html#c64d5f72fddd9b02b5daff9b8c4b6648)を使用すると route コンポーネントを遅延読み込みすることが、いとも簡単にできます。直接あなたの route コンポーネントを定義する代わりに、非同期に実際のコンポーネント定義を解決する関数として定義します: + +``` js +router.map({ + '/async': { + component: function (resolve) { + // 何らかのコンポーネント定義をサーバから取得 ... + resolve(MyComponent) + } + } +}) +``` + +さて、手動によるコンポーネント検索のハンドリングは理想的ではないですが、Webpack & Browserify のようなバンドラ両方は、それを容易にする方法を提供します。 + +### Webpack + +Webpack は組み込みで非同期なコード分離をサポートします。非同期なコード分離するポイントを示すために、コードにおいて AMD のような `require` シンタックスを使用できます: + +``` js +require(['./MyComponent.vue'], function (MyComponent) { + // ここのコードは、MyComponent.vue が非同期に読み込まれた後に、実行されます +}) +``` + +ルーターと組合せると、次のようになります: + +``` js +router.map({ + '/async': { + component: function (resolve) { + require(['./MyComponent.vue'], resolve) + } + } +}) +``` + +ここでは、`MyComponent.vue` は、それ自身単体でのみ使用される任意の依存関係と一緒に、ルート `/async` がレンダリングする必要があるときだけ、非同期に読み込まれます。 + +### Browserify + +Browserify で同じことを達成するにはちょっとトリッキーですが、[`partition-bundle` プラグイン](https://github.com/substack/browserify-handbook/blob/master/readme.markdown#partition-bundle) で可能です。手動で `json` ファイルにバンドルマッピングを宣言する必要があります: + +``` json +{ + "main.js": ["./main.js"], + "my-component.js": ["./MyComponent.vue"] +} +``` + +そして `main.js` で、`require` の代わりに `loadjs` 関数を使用して、同じような何かをするでしょう: + +``` js +router.map({ + '/async': { + component: function (resolve) { + loadjs(['./MyComponent.vue'], resolve) + } + } +}) +``` diff --git a/docs/ja/link.md b/docs/ja/link.md new file mode 100644 index 000000000..f95ac8f66 --- /dev/null +++ b/docs/ja/link.md @@ -0,0 +1,80 @@ +# v-link + +以下の理由のため、vue-router が使用可能になったアプリケーション内部でナビゲーションをハンドリングするために `v-link` ディレクティブを使用する必要があります: + +`v-link` は ルーターが使用可能なアプリケーションでユーザーナビゲーションを有効にするためのディレクティブです。内部で `router.to()` に渡される JavaScript 式を受け付けます。例えば: + +``` html +<!-- リテラル文字列 --> +<a v-link="'home'">Home</a> + +<!-- 上記と同じ --> +<a v-link="{ path: 'home' }">Home</a> + +<!-- named route --> +<a v-link="{ name: 'user', params: { userId: 123 }}">User</a> +``` + +`v-link` は以下の理由でハードコードされた `href` より良いです: + +- HTML5 history モード と hash モード両方で同じように動作するため、もしいつかモードを切り替えることに決めた場合、また、ルーターが IE9 では hash モードにフォールバックするとき、何も変更する必要はありません。 + +- HTML5 history モードでは、`v-link` はブラウザがページのリロードするのを試行しないようにするために、クリックイベントに割り込みます。 + +- HTML5 history モードで `root` オプションを使用しているとき、`v-link` の URL にそれを含める必要はありません。 + +#### アクティブリンククラス + +`v-link` を利用する要素で、現在のパスが `v-link` の URL にマッチするとき、自動的に対応するクラス名を取得します。適用されるデフォルトクラスは、`.v-link-active` で、デフォルトのマッチングの振舞いは、**包括一致 (inclusive match)** です。例えば、`v-link="/a"` による要素は、`/a` で現在のパスが開始する限り、このクラスに適用されるでしょう。 + +`exact` インラインオプションを使用してパスが正確に一致するとき、アクティブクラスのみ適用されるマッチングの動作を設定することも可能です: + +``` html +<a v-link="{ path: '/a', exact: true }"></a> +``` + +アクティブリンククラス名は、ルーターインスタンスを作成しているとき、`linkActiveClass` オプションで設定することができます。`activeClass` インラインオプションで上書きすることもできます: + +``` html +<a v-link="{ path: '/a', activeClass: 'custom-active-class' }"></a> +``` + +#### 別の要素へアクセスリンククラスの適用 + +> 0.7.8+ + +時どき、`<a>` 要素自身よりむしろ `<a>`要素をラップ (wrap) している要素にアクティブリンククラスを適用したいかもしれません。`v-link-active` を親要素に追加することによってそのようにすることもできます: + +``` html +<ul> + <li v-link-active> + <a v-link="{ path: '/xxx' }">Go</a> + </li> +</ul> +``` + +`v-link` は `v-link-active` を持つ最も近い要素を探し、その要素の代わりにアクティブなクラスを適用します。 + +#### 他の設定オプション + +- **replace** + + `replace: true` によるリンクは、ナビゲーションが履歴レコードから離れないため、クリックしたとき `router.go()` の代わりに `router.replace()` を呼び出します。 + + ``` html + <a v-link="{ path: '/abc', replace: true }"></a> + ``` + +- **append** + + `append: true` による相対リンクは、常に現在のパスに相対パスを追加します。例えば、我々が `/a` から相対リンク `b` に移動していると仮定すると、`append: true` なしで、我々は `b` で終わりますが、`append: true` ありでは、我々は `/a/b` で終わります。 + +アクティブリンククラス名は、ルーターインスタンスを作成しているとき、`linkActiveClass` オプションで設定することができます。完全に一致するクラスは、提供されるクラス名に `-exact` 接尾辞 を単に追加することになります。 + + ``` html + <a v-link="{ path: 'relative/path', append: true }"></a> + ``` + +#### その他の注意事項 + +- `v-link` は `<a>` 要素で使用するとき、自動的に `href` 属性に設定します。 diff --git a/docs/ja/named.md b/docs/ja/named.md new file mode 100644 index 000000000..55ece99c7 --- /dev/null +++ b/docs/ja/named.md @@ -0,0 +1,26 @@ +# Named Routes + +時々、特にナビゲーションを実行する時、名前で route を指定するのがより便利です。このような route の設定で、route に名前を与えることができます: + +``` js +router.map({ + '/user/:userId': { + name: 'user', // route に名前を与える + component: { ... } + } +}) +``` + +named route にリンクするには、このような `v-link` を使用できます: + +``` html +<a v-link="{ name: 'user', params: { userId: 123 }}">User</a> +``` + +また、プログラム的に `router.go()` を使用して named route にナビゲートできます: + +``` js +router.go({ name: 'user', params: { userId: 123 }}) +``` + +どちらの場合も、ルーターは パス `/user/123` にナビゲートします。 diff --git a/docs/ja/nested.md b/docs/ja/nested.md new file mode 100644 index 000000000..3697f3e33 --- /dev/null +++ b/docs/ja/nested.md @@ -0,0 +1,79 @@ +# Nested Routes + +ネストされた routes をネストされたコンポーネントにマッピングすることは共通の要求であり、そしてそれは vue-router では非常に簡単です。 + +以下の アプリケーションがあると仮定します: + +``` html +<div id="app"> + <router-view></router-view> +</div> +``` + +`<router-view>` はここではトップレベルの outlet です。トップレベルの route でマッチしたコンポーネントでレンダリングします: + +``` js +router.map({ + '/foo': { + // Foo は /foo がマッチしたとき、レンダリングされます + component: Foo + } +}) +``` + +同様に、レンダリングされたコンポーネントは、独自のネストされた `<router-view>` を含むことができます。例えば、`Foo` コンポーネントのテンプレート内部に1つ追加する場合: + +``` js +var Foo = Vue.extend({ + template: + '<div class="foo">' + + '<h2>This is Foo!</h2>' + + '<router-view></router-view>' + // <- nested outlet + '</div>' +}) +``` + +このネストされた outlet でコンポーネントをレンダリングするため、我々の route 設定を更新する必要があります: + +``` js +router.map({ + '/foo': { + component: Foo, + // /foo のもとに subRoutes マップを追加 + subRoutes: { + '/bar': { + // /foo/bar がマッチしたとき、 + // Bar は Foo の <router-view> 内部でレンダリングされます + component: Bar + }, + '/baz': { + // Baz に対しても同じですが、/foo/baz がマッチしたときです + component: Baz + } + } + } +}) +``` + +今、上記設定で、`/foo` にアクセスするとき、サブ route がマッチされないため、`Foo` の outlet 内部では何もレンダリングされません。恐らく、そこに何かレンダリングしたいでしょう。このようなケースは、このケースの `/` サブ route 提供することができます。 + +``` js +router.map({ + '/foo': { + component: Foo, + subRoutes: { + '/': { + // このコンポーネントは /foo がマッチされるとき、 + // Foo の <router-view> でレンダリングされます。 + // 便宜上、ここでインラインコンポーネント定義を使用します + component: { + template: '<p>Default sub view for Foo</p>' + } + }, + // 他のサブ routes ... + } + } +}) +``` + +この例の動作デモは[ここ](http://jsfiddle.net/yyx990803/naeg67da/)で見ることができます。 diff --git a/docs/ja/options.md b/docs/ja/options.md new file mode 100644 index 000000000..4e36b7abd --- /dev/null +++ b/docs/ja/options.md @@ -0,0 +1,60 @@ +# Route オプション + +ルーターインスタンスを作成するときにルーターの動作をカスタマイズして使用できるオプションがいくつかあります。 + +#### hashbang + +- デフォルト: true +- hash モードでのみ使用されます + + hashbang オプションが true のとき、全ての hash パスは `#!` で開始するフォーマットになります。例えば、`route.go('/foo/bar')` はブラウザの URL を `example.com/#!/foo/bar` に設定します。 + +#### history + +- デフォルト: false + + HTML5 history モードを有効にします。履歴管理のために `history.pushState()` と `history.replaceState()` を活用します。 + + **Note**: history モードを使用するとき、サーバーは、あなたのサイトの深いリンクに直接訪問しているユーザーが 404 を取得しないよう、[適切に設定](http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/)する必要があります。 + +#### abstract + +- デフォルト: false + + ブラウザに依存しない abstract history backend を使用します。abstract モードでは実際の URL が重要ではないテストなどの環境で役に立ちます。例えば、Electron または Cordova のようなアプリケーションです。ルーターはもし、ブラウザ以外の環境でロードした場合、abstract モードにフォールバックします。 + +#### root + +- デフォルト: null +- HTML5 history モードのみ使用されます + + 全てのルーターナビゲーションに対して root パスを定義します。route 設定で使用される全てのパス、`router.go()`、`v-link`、そしてこの root パスに相対解決された route オブジェクトが公開され、さらに root パスは実際のブラウザ URL に常に含まれています。 + + 例えば、`root: '/foo'` では、`v-link="/bar"` はブラウザ URL に `/foo/bar` に設定します。直接的に `/foo/bar` へのアクセスは、あなたの route 設定で `/bar` に対してマッチします。 + + ほとんどの場合、`root` は設定するだけです: あなたのアプリケーションのコードで心配する必要はありません。 + +#### linkActiveClass + +- デフォルト: `"v-link-active"` + + 現在のリンクがアクティブであるとき、クラスは `v-link` 要素に適用されるように設定します。マッチングの振る舞いとクラスは、個別に各 `v-link` に構成することができます。 + +#### saveScrollPosition + +- デフォルト: false +- HTML5 history モードのみ使用されます + + このオプションは、ユーザーがブラウザの"戻る"ボタンを使ったときスクロール位置を復元するために、HTML5 history `popstate` イベントに関連付けられている状態を利用します。これは、あなたの `<router-view>` がトランジションのエフェクトを持っている場合、期待された動作がしない場合があります。 + +#### transitionOnLoad + +- デフォルト: false + + 初期ロードの `<router-view>` に対してトランジションのエフェクトを適用するかどうか。デフォルトでは、初期ロードでマッチしたコンポーネントが即座にレンダリングされます。 + +#### suppressTransitionError + +- デフォルト: false + + もし `true` に設定する場合、トランジションフック内部でキャッチされていないエラーが抑えられます。 diff --git a/docs/ja/pipeline/01.png b/docs/ja/pipeline/01.png new file mode 100644 index 000000000..e910abc16 Binary files /dev/null and b/docs/ja/pipeline/01.png differ diff --git a/docs/ja/pipeline/02.png b/docs/ja/pipeline/02.png new file mode 100644 index 000000000..adcf2a640 Binary files /dev/null and b/docs/ja/pipeline/02.png differ diff --git a/docs/ja/pipeline/03.png b/docs/ja/pipeline/03.png new file mode 100644 index 000000000..ed1e235c4 Binary files /dev/null and b/docs/ja/pipeline/03.png differ diff --git a/docs/ja/pipeline/04.png b/docs/ja/pipeline/04.png new file mode 100644 index 000000000..e1785b631 Binary files /dev/null and b/docs/ja/pipeline/04.png differ diff --git a/docs/ja/pipeline/05.png b/docs/ja/pipeline/05.png new file mode 100644 index 000000000..dd99f3443 Binary files /dev/null and b/docs/ja/pipeline/05.png differ diff --git a/docs/ja/pipeline/README.md b/docs/ja/pipeline/README.md new file mode 100644 index 000000000..5f0145411 --- /dev/null +++ b/docs/ja/pipeline/README.md @@ -0,0 +1,53 @@ +# トランジションパイプライン + +route トランジションのパイプラインをよく理解するために、パス `/a/b/c` によって3つネストされて `<router-view>` で既にレンダリングされた、ルーターが使用可能なアプリケーションをイメージしてみましょう: + + + +そして、私達のレンダリングされたコンポーネントツリーを新しいものに更新するのを必要とする新しいパス `/a/d/e` にナビゲートします: + + + +どうやって私達はそれについて行けるでしょうか?私達はここでいくつかの事をする必要があります: + +1. 潜在的にコンポーネント A を再利用することができます。なぜなら、トランジション後のコンポーネントツリーは同じであるためです。 + +2. コンポーネント B と C を非活性化し、削除する必要があります。 + +3. コンポーネント D と E を作成し、活性化する必要があります。 + +4. ステップ2 とステップ3 を実際に実行する前に、このトランジションが有効であることを確認したい、つまり、必要に応じてこのトランジションが deactivated/activated **できる** ことを全てのコンポーネントが関与していることを確認したいです。 + +vue-router で、任意のトランジションフックで実装することによってこれらのステップを制御することができます。しかし、どうやってそれをするのか詳細に入る前に、広い視野で見てみましょう。 + +### トランジションフェーズ + +3つのフェーズで route のトランジションパイプラインを分けることができます: + +1. **再利用性フェーズ (Reusability phase):** + + 現状の view 階層内の全てのコンポーネントが、新しいものに再利用できるかどうかチェックします。これは2つのコンポーネントツリーを比較することによって行われます。共通のコンポーネントを見つけて、そしてそれからそれらの再利用性 (`canReuse` オプション経由) をチェックします。デフォルトでは、全てのコンポーネントは他の方法で設定しない限り再利用可能です。 + +  + +2. **検証フェーズ (Validation phase):** + + 全て現状のコンポーネントが非活性化できるかどうかチェックし、同様に全ての新しいコンポーネントが活性化できるかチェックします。これは、`canDeactivate` と `canActivate` の route 設定のフックを呼び出すことでチェック可能です。 + +  + + `canActivate` チェックはトップダウンですが、`canDeactivate` チェックはバブルのようなボトムアップであることに注意してください。 + + これらの全てのフックが潜在的にトランジションを中止することができます。トランジションが検証フェーズの間で中止される場合は、ルーターは現状のアプリケーション状態を保存し、前のパスを復元します。 + +3. **活性化フェーズ (Activation phase):** + + 一度全ての検証フックが呼び出され、それらのトランジションの中止がない場合、トランジションは現在有効であると言われます。ルーターは現状のコンポーネントを非活性化し、新しいコンポーネントを活性化します。 + +  + + これらのフックは検証フックの同じ順序で呼び出されますが、これらの目的は、目に見えるコンポーネントの切り替えが実行される前に、クリーンアップ/準備作業をするための機会を与えるためです。インターフェイスは影響を受けるコンポーネントの `deactivate` フックと `activate` フックの全てが解決されるまで更新されません。 + + `data` フックは `activate` フックが解決された直後に呼び出され、コンポーネントが再利用されるときも呼び出されます。 + +次の詳細では、トランジションフックについて話します。 diff --git a/docs/ja/pipeline/activate.md b/docs/ja/pipeline/activate.md new file mode 100644 index 000000000..bde823226 --- /dev/null +++ b/docs/ja/pipeline/activate.md @@ -0,0 +1,21 @@ +# `activate(transition) [-> Promise]` + +作成されて移行した時、活性化フェーズの間に入ってくるコンポーネントに呼び出されます。 + +### 引数 + +- [`transition {Transition}`](hooks.md#トランジションオブジェクト) + + フックを解決するために `transition.next()` を呼び出します。ここで `transition.abort()` を呼び出すと、トランジションは既に検証されているため、アプリケーションは以前のルートへ戻りません。 + +### 期待される戻り値 + +- 任意で Promise を返します。 + - `resolve` -> `transition.next()` + - `reject(reason)` -> `transition.abort(reason)` + +### 詳細 + +ほとんどの場合、このフックは view の切り替えのタイミングで制御するために使用されます。view の切り替えはこのフックは解決されるまで起こりません。 + +このフックはトップダウンで呼ばれます。子の view の `activate` は親の view の `activate` が解決された時にのみ呼び出されます。 diff --git a/docs/ja/pipeline/can-activate.md b/docs/ja/pipeline/can-activate.md new file mode 100644 index 000000000..62217eb72 --- /dev/null +++ b/docs/ja/pipeline/can-activate.md @@ -0,0 +1,27 @@ +# `canActivate(transition) [-> Promise | Boolean]` + +検証フェーズの間に入ってくるコンポーネントに呼び出されます。 + +### 引数 + +- [`transition {Transition}`](hooks.md#トランジションオブジェクト) + + フックを解決するために、`transition.next()` を呼び出します。`transition.abort()` を呼び出すと無効となり、トランジションをキャンセルします。 + +### 期待される戻り値 + +- 任意で Promise を返します。 + + - `resolve(true)` -> `transition.next()` + - `resolve(false)` -> `transition.abort()` + - `reject(reason)` -> `transition.abort(reason)` + + +- 任意で Boolean を返します。 + + - `true` -> `transition.next()` + - `false` -> `transition.abort()` + +### 詳細 + +このフックはトップダウンで呼ばれます。子の view の `canActivate` は親の view の `canActivate` が解決された時にのみ呼び出されます。 diff --git a/docs/ja/pipeline/can-deactivate.md b/docs/ja/pipeline/can-deactivate.md new file mode 100644 index 000000000..fcd60d946 --- /dev/null +++ b/docs/ja/pipeline/can-deactivate.md @@ -0,0 +1,27 @@ +# `canDeactivate(transition) [-> Promise | Boolean]` + +検証フェーズの間でコンポーネントから離れるときに呼び出されます。 + +### 引数 + +- [`transition {Transition}`](hooks.md#トランジションオブジェクト) + + フックを解決するために、`transition.next()` を呼び出します。`transition.abort()` を呼び出すと無効となり、トランジションをキャンセルします。 + +### 期待される戻り値 + +- 任意で Promise を返します。 + + - `resolve(true)` -> `transition.next()` + - `resolve(false)` -> `transition.abort()` + - `reject(reason)` -> `transition.abort(reason)` + + +- 任意で Boolean を返します。 + + - `true` -> `transition.next()` + - `false` -> `transition.abort()` + +### 詳細 + +このフックはボトムアップから呼ばれます。親の view コンポーネント の `canDeactivate` は、子の `canDeactivate` が解決された時にのみ、呼び出されます。 diff --git a/docs/ja/pipeline/can-reuse.md b/docs/ja/pipeline/can-reuse.md new file mode 100644 index 000000000..762018730 --- /dev/null +++ b/docs/ja/pipeline/can-reuse.md @@ -0,0 +1,21 @@ +# `canReuse: Boolean | canReuse(transition) -> Boolean` + +コンポーネントを再利用できるかどうか決定します。コンポーネントを再利用することが出来ない場合は、現状のインスタンスは新しいものによって置換され、そして、通常の検証フェーズと活性化フェーズを通過します。 + +この route オプションは純粋な Boolean 値、または同期的に Boolean を返す関数のどちらかにすることができます。**デフォルトは `true` ** です。 + +### 引数 + +- [`transition {Transition}`](hooks.md#トランジションオブジェクト) + + `canResue` フックでは `transition.to` と `transition.from` のみアクセスできます。 + +### 期待される戻り値 + +- Boolean を返す必要があります。偽となりうる値は、`false` として扱われます。 + +### 詳細 + +`canReuse` 潜在的に再利用可能なコンポーネント全てに対してトップダウンで、同期的に呼び出されます。 + +コンポーネントが再利用可能な場合、`data` フックはまだ活性化フェーズの間で呼び出されます。 diff --git a/docs/ja/pipeline/data.md b/docs/ja/pipeline/data.md new file mode 100644 index 000000000..3b74d0bde --- /dev/null +++ b/docs/ja/pipeline/data.md @@ -0,0 +1,142 @@ +# `data(transition) [-> Promise]` + +`activate` フックが解決された後、活性化フェーズの間に入ってくるコンポーネントに呼び出されます。**route が変更されたり現在のコンポーネントが再利用されるときもまた呼び出されます。**このフックをロードするために使用して現在のコンポーネントでデータを設定します。 + +### 引数 + +- [`transition {Transition}`](hooks.md#トランジションオブジェクト) + + `transition.next(data)` の呼び出しはコンポーネントの `data` の各プロパティに設定します。例えば `{ a: 1, b: 2 }` が引数に指定される場合、ルーターは `component.$set('a', 1)` と `component.$set('b', 2)` を呼びます。 + +### 期待される戻り値 + +- 任意で Promise を返します。 + - `resolve(data)` -> `transition.next(data)` + - `reject(reason)` -> `transition.abort(reason)` + +**または**、Promise を含んでいるオブジェクトを返します。詳細は以下の [Promise シンタックスシュガー](#Promise シンタックスシュガー) を参照してください。 + +### 詳細 + +`data` トランジションフックは、`activate` フックが解決された直後に呼び出され、直前に view の切り替えが実行されます。entering なコンポーネントは、**`$loadingRouteData`** メタプロパティを取得します。そのプロパティは `true` 値で開始し、`data` フックが解決されるとき、`false` に設定します。このプロパティは entering なコンポーネントに対してローディング状態を表示するために使用することができます。 + +解決したとき、コンポーネントは `'route-data-loaded'` イベントを発行します。 + +`data` フックは `activate` とは以下が異なります: + +1. たとえ現状のコンポーネントが再利用される場合でも、`data` は毎回 route が変更する度に呼ばれるのに対し、`activate` はコンポーネントが新しく作成されるときだけ呼ばれます。 + + route が `/message/:id` に対してコンポーネントがあり、現在 `/message/1` のパスであると想像してください。ユーザーが `/message/2` にナビゲートするとき、現状のコンポーネントは再利用できますが、`activate` フックは呼ばれません。しかし、フェッチしたくて新しい `id` パラメータに基づいたデータを更新したい場合、ほとんどの場合は `activate` の代わりに `data` でデータをフェッチするのは道理にかないます。 + +2. `activate` の債務は新しいコンポーネントへの切り替えのタイミングを制御しています。比較して、`data` は `activate` が解決される直後と view の切り替えが起こる直前に呼びされるため、データのフェッチと新しいコンポーネントが入ってくるアニメーションを並行して行い、`data` が解決される前に "loading" 状態になります。 + + それではここでユーザーエクスペリエンスの違いを考えてみましょう: + + - もし新しいコンポーネントを表示する前にデータがフェッチされるまで待つ場合は、ユーザーはインターフェイスが view の切り替え前に一瞬 "行き詰まらせる" ような感じになります。 + + - 代わりに、"loading" 状態で新しいコンポーネントを表示している間、すぐにユーザー入力に反応し view の切り替えを開始することができます。もし合間で CSS トランジションを使用している場合、アニメーション時間はデータ待ち時間とうまく重なり合うことができます。 + +そうは言っても、view を切り替える前、データがロードされるまでにまだ待つのを希望するならば、あなたのコンポーネントの `route` オプション内部で **`waitfordata: true`** を追加することができます。 + +### 例 + +`transition.next` による呼び出し: + +``` js +route: { + data: function (transition) { + setTimeout(function () { + transition.next({ + message: 'data fetched!' + }) + }, 1000) + } +} +``` + +Promise による呼び出し: + +``` js +route: { + data: function (transition) { + return messageService + .fetch(transition.to.params.messageId) + .then(function (message) { + return { message: message } + }) + } +} +``` + +Promise & ES6 で並行なリクエスト: + +``` js +route: { + data ({ to: { params: { userId }}}) { + return Promise.all([ + userService.get(userId), + postsService.getForUser(userId) + ]).then(([user, post]) => ({ user, post })) + } +} +``` + +ES5 による上記と等価: + +``` js +route: { + data (transition) { + var userId = transition.to.params.userId + return Promise.all([ + userService.get(userId), + postsService.getForUser(userId) + ]).then(function (data) { + return { + user: data[0], + posts: data[1] + } + }) + } +} +``` + +テンプレートで `loadingRouteData` を使用: + +``` html +<div class="view"> + <div v-if="$loadingRouteData">Loading ...</div> + <div v-if="!$loadingRouteData"> + <user-profile user="{{user}}"></user-profile> + <user-post v-for="post in posts"></user-post> + </div> +</div> +``` + +### Promise シンタックスシュガー + +上記のパラレルなデータをフェッチングする例は、複数の Pomise を1つのものに結合するために `Promise.all` を利用するのを要求し、destructuring とフォーマットはまだ面倒です。`vue-router` は Promise (もちろん Promise でないフィールドを含むこともできます) を含んだオブジェクトを返すことができるシンタックスシュガーを提供します。ここでシンタックスシュガーと ES6 を使用する同じ例を示します: + +``` js +route: { + data: ({ to: { params: { userId }}}) => ({ + user: userService.get(userId), + post: postsService.getForUser(userId) + }) +} +``` + +それらが解決されるとき、ルーターは 対応する Promise が解決した値をコンポーネント `user` と `post` に設定します。全ての Promise が解決された時、`$loadingRouteData` は `false` に設定されます。 + +ES5 での等価: + +``` js +route: { + data: function (transition) { + var userId = transition.to.params.userId + return { + user: userService.get(userId), + post: postsService.getForUser(userId) + } + } +} +``` diff --git a/docs/ja/pipeline/deactivate.md b/docs/ja/pipeline/deactivate.md new file mode 100644 index 000000000..24a0ec957 --- /dev/null +++ b/docs/ja/pipeline/deactivate.md @@ -0,0 +1,21 @@ +# `deactivate(transition) [-> Promise]` + +非活性されて削除した時、活性化フェーズのコンポーネントから離れるときに呼び出されます。 + +### 引数 + +- [`transition {Transition}`](hooks.md#トランジションオブジェクト) + + フックを解決するために `transition.next()` を呼び出します。ここで `transition.abort()` を呼び出すと、トランジションは既に検証されているため、アプリケーションは以前のルートへ戻りません。 + +### 期待される戻り値 + +- 任意で Promise を返します。 + - `resolve` -> `transition.next()` + - `reject(reason)` -> `transition.abort(reason)` + +### 詳細 + +このフックはボトムアップから呼ばれます。子の `deactivate` が解決された時にのみ、親 の view コンポーネントの `deactivate` が呼び出されます。 + +新しいコンポーネントの `activate` フックは、現状のコンポーネントの `deactivate` フック全て解決された時にのみ、呼び出されます。 diff --git a/docs/ja/pipeline/hooks.md b/docs/ja/pipeline/hooks.md new file mode 100644 index 000000000..345ea9a6f --- /dev/null +++ b/docs/ja/pipeline/hooks.md @@ -0,0 +1,142 @@ +# トランジションフック + +`<router-view>` コンポーネントは、適切なトランジションパイプラインフックを実装することによってトランジションを制御する(に反応する)ことができます。これらのフックが含まれます: + +- `data` +- `activate` +- `deactivate` +- `canActivate` +- `canDeactivate` +- `canReuse` + +あなたのコンポーネントの下で `route` オプションをこれらのフックで実装することができます: + +``` js +Vue.component('hook-example', { + // ... 他のオプション + route: { + activate: function (transition) { + console.log('hook-example activated!') + }, + canDeactivate: function (transition) { + console.log('You are not allowed to leave.') + transition.abort() + } + } +}) +``` + +### トランジションオブジェクト + +トランジションフックごとに唯一引数として `transition` オブジェクトを受け取ります。トランジションオブジェクトは以下のプロパティとメソッドを公開します: + +- **transition.from** + + from からトランジションしている route を表す [route オブジェクト](../route.md)。 + +- **transition.to** + + ターゲットパスを表す route オブジェクト。 + +- **transition.next()** + + トランジションの次のステップに進むためにこのメソッドを呼び出します。 + +- **transition.abort([reason])** + + トランジションをキャンセル/拒否するにはこのメソッドを呼び出します。 + +- **transition.redirect(path)** + + 現状のトランジションをキャンセルして、代わりに別のターゲット route にリダイレクトします。 + +### フックの解決ルール + +トランジションフック内部で非同期なタスクを実行する必要がしばしばあります。トランジションは非同期フックが解決されるまで移行しません。ここでは、フックが解決済として検討が必要なとき、決定するためのルールがあります: + +1. フックが Promise を返す場合、Promise が解決されるとき、フックは解決済みになります。[詳細は以下を参照(フックで Promise を返す)](#フックで Promise を返す)してください。 + +2. フックが Promise を返さず、任意の引数を予期しない場合、それは同期的に解決されます。例: + + ``` js + route: { + activate: function (/* ここに引数がない */) { + // Promise を返さない限り、同期的に解決します + } + } + ``` + +3. フックが Promise を返さないが、引数 (`transition`) を予期する場合、その後、フックは、`transition.next()` 、`transition.abort()` または `transition.redirect()` の 1 つが呼ばれるときだけ、解決済みになります。例: + + ``` js + route: { + activate: function (transition) { + // 1 秒後解決 + // resolve after 1 second + setTimeout(transition.next, 1000) + } + } + ``` + +4. `canActivate`、`canDeactivate` そして[グローバル beforeEach フック](../api/before-each.md)のような検証フックにおいて、フックが `transition` 引数を持つ場合でも、Boolean を返す値は、フックを同期的に解決します。 + +### フックで Promise を返す + +- トランジションフックで Promise を返すとき、`transition.next` は Promise がうまく解決するときに呼ばれます。 + +- Promise が検証フェーズ中に拒否されている場合は、`transition.abort` を呼びます。 + +- Promise が活性化フェーズ中に拒否されている場合は、`transition.next` を呼びます。 + +- 検証フックに対して、Promise の解決値が偽となり得る値の場合、トランジションを中断します。 + +- 拒否された Promise がキャッチされていないエラーを持つ場合は、ルーターを作成するときに、`suppressTransitionError` オプションでそれを抑制しないかぎり、そのエラーがスローされます。 + +**例:** + +``` js +// コンポーネント定義内部 +route: { + canActivate: function () { + // `true` または `false` のどちらかで解決します + // Promise を返すサービスと仮定します + return authenticationService.isLoggedIn() + }, + activate: function (transition) { + return messageService + .fetch(transition.to.params.messageId) + .then((message) => { + // それが届いたら、一度だけデータを設定します + // コンポーネントはこれが終わるまで表示されません + this.message = message + }) + } +} +``` + +ここではちょうど例のため `activate` フックで非同期的にデータをフェッチしています。一般的にはこの目的のために、より適切な [`data` フック](data.md)があることに注意してください。 + +**TIP:** もし、ES6 を使用している場合、あなたのフックをクリーンなものにするために、argument destructuring を使用することができます: + +``` js +route: { + activate ({ next }) { + // するとき: + next() + } +} +``` + +アクションのトランジションフックの完全な例については、vue-router レポジトリの [advanced example](https://github.com/vuejs/vue-router/tree/dev/example/advanced) をチェックしてください。 + +### フックのマージ + +コンポーネントライフサイクルのフックと同様に、以下の route ライフサイクルフックは: + +- `data` +- `activate` +- `deactivate` + +... クラス拡張またはミックスインがマージされるまでの間、あなたのコンポーネントが route の `data` フックを定義する場合は、route の `data` フックも提供するミックスインを使用し、両方のフックが(ミックスインのフックが最初に呼ばれる)呼ばれて、全てのフックから解決されたデータはいっしょにマージされます。 + +`canActivate`、`canDeactivate`、そして `canReuse` のような検証フックは、常に新しい値によって上書きされることに注意してください。 diff --git a/docs/ja/route.md b/docs/ja/route.md new file mode 100644 index 000000000..94f673406 --- /dev/null +++ b/docs/ja/route.md @@ -0,0 +1,107 @@ +# Route オブジェクト & Route マッチング + +Vue-router は動的セグメントを含んだマッチングしたパス、スターセグメント、そしてクエリ文字列をサポートします。全てのパースされた route のこれらの情報は、公開された **Route コンテキストオブジェクト** (以降でそれらを "route" オブジェクトと呼びます) で利用できます。route オブジェクトは `this.$route` として vue-router が使用可能になったアプリケーションにおいて全てのコンポーネントに導入され、そして route トランジションが実行されるたびに更新されます。 + +route オブジェクトは以下のプロパティを公開します: + +- **$route.path** + + 現在の route のパスと等しい文字列、常に絶対パスで解決されます。例: `"/foo/bar"` + +- **$route.params** + + 動的セグメントの key/value のペアまたはスターセグメントを含んだオブジェクト。より詳細は以下で説明します。 + +- **$route.query** + + query 文字列の key/value のペアを含んだオブジェクト。例えば、`/foo?user=1` のようなパスに対しては、`$route.query.user == 1` を取得します。 + +- **$route.router** + + この route (そしてそのオーナー自身のコンポーネント) を管理しているルーターインスタンス。 + +- **$route.matched** + + 現在の route で全てマッチされたセグメントに対する route 設定オブジェクトを含んでいる配列。 + +- **$route.name** + + route オブジェクトがある場合は、現在の route の名前。([named routes](./named.md) を参照) + +### カスタムフィールド + +上記のビルトインプロパティに加えて、route 設定で定義されたカスタムフィールドも、route オブジェクトにマージされます。例: + +``` js +router.map({ + '/a': { + component: { ... }, + auth: true + } +}) +``` + +`/a` がマッチされるとき、`$route.auth` は `true` になります。これはグローバルフックで認証チェックを実行することができます: + +``` js +router.beforeEach(function (transition) { + if (transition.to.auth && !authenticated) { + transition.redirect('/login') + } else { + transition.next() + } +}) +``` + +> どのように `beforeEach` フックが動作するかは、[API](api/before-each.md) を参照してください。 + +ネストされた route がマッチされるとき、全てのカスタムフィールドは同じ `$route` オブジェクトにマージされます。サブ route と 親 route が同じカスタムフィールドを持っているとき、サブ route の値は親の値で上書きされます。 + +### テンプレートでの使用 + +あなたのコンポーネントのテンプレート内部で、直接 `$route` オブジェクトにバインドできます。例えば: + +``` html +<div> + <p>Current route path: {{$route.path}}</p> + <p>Current route params: {{$route.params | json}}</p> +</div> +``` + +### Route マッチング + +#### 動的セグメント + +動的セグメントは先頭のコロン(:) とパスセグメントの形で定義することができます。`user/:username` での例では、`:username` は動的セグメントです。`/user/foo` または `/user/bar` のようなパスにマッチします。動的セグメントを含んでいるパスとマッチされたとき、動的セグメントは `$route.params` 内部で利用できるようになります。 + +使用例: + +``` js +router.map({ + '/user/:username': { + component: { + template: '<p>username is {{$route.params.username}}</p>' + } + } +}) +``` + +パスは複数の動的セグメントを含むことができ、そしてそれらごとに `$route.params` に key/value のペアとして保存されます。 + +例: + +| パターン | マッチしたパス | $route.params | +| -------- | -------------- | ------------- | +| /user/:username | /user/evan | `{ username: 'evan' }` | +| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: 123 }` | + +#### スターセグメント + +動的セグメントはパスで単一のセグメントのみ対応することができるものの、スターセグメントは基本的にそれの"貪欲(greedy)"バージョンです。例えば、`/foo/*bar` は `/foo` で開始される全てのものマッチします。スターセグメントによって一致した部分は、`$route.params` で利用できるようになります。 + +例: + +| パターン | マッチしたパス | $route.params | +| -------- | -------------- | ------------- | +| /user/*any | /user/a/b/c | `{ any: 'a/b/c' }` | +| /foo/*any/bar | /foo/a/b/bar | `{ any: 'a/b' }` | diff --git a/docs/ja/view.md b/docs/ja/view.md new file mode 100644 index 000000000..32e7a71c9 --- /dev/null +++ b/docs/ja/view.md @@ -0,0 +1,13 @@ +# `<router-view>` + +`<router-view>` 要素は、マッチしたコンポーネントをレンダリングするための outlets として使用されます。これは、Vue の動的コンポーネントシステムに基づいており、そしてそれゆえに通常の動的コンポーネントから多くの機能を継承しています: + +- props をそれに渡すことができます。 +- `<router-view>` 内部の HTML コンテンツはレンダリングされたコンポーネントのコンテンツ挿入のために使用されます。 +- `v-transition` と `transition-mode` が完全にサポートされています。Note: トランジションエフェクトが機能するために、あなたの route コンポーネントは[フラグメントインスタンス](http://jp.vuejs.org/guide/components.html#\32%2076912aa97ff62b93167fc73b08ae36f)であってはいけません。 +- `v-ref` もサポートされています。レンダリングされたコンポーネントは、親コンポーネントの `this.$` オブジェクトに登録されます。 + +しかしながら、いくつか制限があります: + +- ~~`keep-alive` は現在サポートされていません。~~ `keep-alive` は現在 0.7.2+ で実験的にサポートしています。 +- `wait-for` はサポートされていません。トランジションのタイミングを制御するためには [`activate` transition hook](pipeline/activate.html) を使用する必要があります。 diff --git a/docs/kr/README.md b/docs/kr/README.md deleted file mode 100644 index 6b90e1174..000000000 --- a/docs/kr/README.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -home: true -heroImage: /logo.png -actionText: Get Started → -actionLink: /kr/installation.html -footer: MIT Licensed | Copyright © 2014-present Evan You, Eduardo San Martin Morote ---- - -Vue 라우터는 [Vue.js](http://vuejs.org)의 공식 라우터입니다. -Vue.js를 사용한 싱글 페이지 앱을 쉽게 만들 수 있도록 Vue.js의 코어와 긴밀히 통합되어 있습니다. - -아래의 기능을 포함합니다. - -- 중첩된 라우트/뷰 매핑 -- 모듈화된, 컴포넌트 기반의 라우터 설정 -- 라우터 파라미터, 쿼리, 와일드카드 -- Vue.js의 트랜지션 시스템을 이용한 트랜지션 효과 -- 세밀한 네비게이션 컨트롤 -- active CSS 클래스를 자동으로 추가해주는 링크 -- HTML5 히스토리 모드 또는 해시 모드(IE9에서 자동으로 폴백) -- 사용자 정의 가능한 스크롤 동작 - -[시작하기](./guide/) 또는 [예제](https://github.com/vuejs/vue-router/tree/dev/examples)를 참고하세요. ([`README.md`](https://github.com/vuejs/vue-router/)에서 사용법을 확인할 수 있습니다). - -<HomeSponsors /> diff --git a/docs/kr/api/README.md b/docs/kr/api/README.md deleted file mode 100644 index b5b0e637b..000000000 --- a/docs/kr/api/README.md +++ /dev/null @@ -1,277 +0,0 @@ ---- -sidebar: auto ---- - -# API 레퍼런스 - -## `<router-link>` - -`<router-link>`는 라우터 지원 앱에서 사용자 네비게이션을 가능하게하는 컴포넌트입니다. 목표 위치는 `to` prop로 지정됩니다. 기본적으로 올바른 `href`를 갖는 `<a>`태그로 렌더링 되지만 `tag` prop로 구성 될 수 있습니다. 또한 대상 라우트가 활성화되어 있으면 링크가 자동으로 active CSS 클래스를 가져옵니다. - -`<router-link>`는 다음과 같은 이유로 하드 코드 된 `<a href="...">`보다 선호됩니다. - -- HTML5 히스토리 모드와 해시 모드에서 모두 동일한 방식으로 작동하므로 모드를 트랜지션하기로 결정하거나 라우터가 IE9에서 해시 모드로 트랜지션 한 경우 변경할 필요가 없습니다. - -- HTML5 히스토리 모드에서, `router-link`는 클릭 이벤트를 차단하여 브라우저가 페이지를 다시 로드하지 않도록합니다. - -- HTML5 히스토리 모드에서 `base` 옵션을 사용할 때 `to` prop의 URL에 이를 포함 할 필요가 없습니다. - -## Props - -### to - - - 자료형: `string | Location` - - - 필수 - - 링크의 대상 라우트를 나타냅니다. 클릭하면, `to` prop의 값은 내부적으로 `router.push()`에 전달 될 것이므로 값은 문자열이나 위치 디스크립터 객체가 될 수 있습니다. - - ``` html - <!-- 리터럴 string --> - <router-link to="home">Home</router-link> - <!-- 이렇게 렌더링 됩니다. --> - <a href="home">Home</a> - - <!-- `v-bind`를 이용한 표현식 --> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- `v-bind`를 생략하면 다른 prop를 바인딩 하는 것과 같습니다. --> - <router-link :to="'home'">Home</router-link> - - <!-- 위와 같습니다. --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- 이름을 가지는 라우트 --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- 쿼리가 있으면, `/register?plan=private` 이 됩니다. --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link> - ``` - -### replace - - - 자료형: `boolean` - - - 기본값: `false` - - `replace` prop를 설정하면 클릭할 때 `router.push()` 대신 `router.replace()`를 호출할 것이므로 내비게이션은 히스토리 레코드를 남기지 않을 것입니다. - - ``` html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -### append - - - 자료형: `boolean` - - - 기본값: `false` - - `append` prop를 설정하면 항상 상대 경로가 현재 경로에 추가됩니다. 예를 들어`/a`에서 상대 링크 `b`로 이동한다고 가정하면 `append`없이 `/b`에서 끝나지만 `append`로 `/a/b`에서 끝납니다 . - - ``` html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -### tag - - - 자료형: `string` - - - 기본값: `"a"` - - 때때로 우리는 `<router-link>`를 `<li>`과 같은 다른 태그로 렌더링되길 바랍니다. 그런 다음 `tag` prop를 사용하여 렌더링할 태그를 지정할 수 있으며 탐색을 위해 클릭 이벤트를 계속 수신합니다. - - ``` html - <router-link to="/foo" tag="li">foo</router-link> - <!-- 이렇게 렌더링됩니다 --> - <li>foo</li> - ``` - -### active-class - - - 자료형: `string` - - - 기본값: `"router-link-active"` - - 링크가 활성화 되어 있을 때 적용된 active CSS 클래스를 구성합니다. 기본값은 `linkActiveClass` 라우터 생성자 옵션을 통해 전역적으로 설정될 수 있습니다. - -### exact - - - 자료형: `boolean` - - - 기본값: `false` - - 기본 활성 클래스 매치 동작은 **포괄적인 매칭** 입니다. 예를 들어, `<router-link to="/a">`는 현재 경로가 `/a` 또는 `/a/`로 시작하는 한 이 클래스를 적용합니다. - - 이것의 결과는 `<router-link to="/">`가 모든 라우터에 대해 활성화 될 것입니다! 링크를 "완전 일치 모드"로 강제하려면 `exact` prop를 사용하십시오. - - ``` html - <!-- 이 링크는 `/` 에서만 active 됩니다 --> - <router-link to="/" exact> - ``` - - active 링크 클래스를 설명하는 추가 [예제](https://jsfiddle.net/8xrk1n9f/)를 확인 하십시오. - -### event - - > 2.1.0+ - - - 자료형: `string | Array<string>` - - - 기본값: `'click'` - - 링크 네비게이션을 트리거 할 수있는 이벤트를 지정합니다. - -### exact-active-class - - > 2.5.0+ - - 자료형: `string` - - 기본값: `"router-link-exact-active"` - - 정확하게 일치하는 링크가 활성된 상태일 때 적용되는 CSS 클래스를 지정합니다. 기본값은`linkExactActiveClass` 라우터 생성자 옵션을 통해 전역으로 설정 될 수 있습니다. - - -### 외부 엘리먼트에 active 클래스 적용하기 - -때로 우리는 active 클래스가 `<a>` 태그 자체가 아닌 외부 엘리먼트에 적용되는 것을 원할 수 있습니다. 이 경우 `<router-link>` 를 사용하여 외부 엘리먼트를 렌더링하고 원시 `<a>`는 내부에 작성합니다. - -``` html -<router-link tag="li" to="/foo"> - <a>/foo</a> -</router-link> -``` - -이 경우 `<a>`는 실제 링크가 될 것이고(올바른 `href`를 얻습니다.), 활성 클래스는 바깥 쪽 `<li>`에 적용됩니다. - -## `<router-view>` - -`<router-view>` 컴포넌트는 주어진 라우트에 대해 일치하는 컴포넌트를 렌더링하는 함수형 컴포넌트입니다. `<router-view>`에서 렌더링된 컴포넌트는 자체 `<router-view>`를 포함 할 수 있으며, 이는 중첩 된 라우트를 위해 컴포넌트를 렌더링합니다. - -## `<router-view>` props - -### name** - - - 자료형: `string` - - - 기본값: `"default"` - - `<router-view>`가 이름을 가지고있을 때, 그것은 일치된 라우트 레코드의 `components` 옵션에서 해당 이름으로 컴포넌트를 렌더링 할 것입니다. 예제는 [이름을 가지는 뷰](../guide/essentials/named-views.md)를 참조하십시오. - -### 동작 - -이름이없는 모든 props는 렌더링된 컴포넌트로 전달되지만 대부분의 경우 라우트 별 데이터는 라우트 매개 변수에 포함됩니다. - -이것은 단지 컴포넌트이므로 `<transition>` 및 `<keep-alive>`와 함께 작동합니다. 양쪽 모두를 사용할 때는 `<keep-alive>`를 다음과 같이 사용하십시오. - -``` html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` - -## 라우터 인스턴스 - -### router.app - -- 자료형: `Vue instance` - - `router`가 주입 된 루트 Vue 인스턴스. - -### router.mode - -- 자료형: `string` - - 라우터가 사용하는 [mode](./#mode). - -### router.currentRoute - -- 자료형: `Route` - - [라우트 객체](#the-route-object)로 표시된 현재 라우트. - -## Methods - -### router.beforeEach -### router.beforeResolve -### router.afterEach - -전역 네비게이션 가드 추가. [네비게이션 가드](../guide/advanced/navigation-guards.md)를 보십시오. - -2.5.0이상에서 세 가지 메소드 모두 등록된 guard / hook을 제거하는 함수를 반환합니다. - -### router.push -### router.replace -### router.go -### router.back -### router.forward - - 프로그래밍 방식으로 새 URL로 이동합니다. [프로그래밍 방식 네비게이션](../guide/essentials/navigation.md)을 참조하십시오. - -### router.getMatchedComponents - - 지정된 위치 또는 현재의 라우트에 일치하는 컴퍼넌트(인스턴스는 아니고 정의/생성자)의 배열을 반환합니다. 이는 주로 데이터를 프리페치(prefetching)하기 위해 서버 측 렌더링 동안 사용됩니다. - -### router.resolve - - > 2.1.0+ - - 역방향 URL 해석. `<router-link/>`에서 사용된 것과 같은 형식의 위치가 주어지면 다음과 같이 처리된 속성을 가진 객체를 반환합니다. - - ``` js - { - location: Location; - route: Route; - href: string; - } - ``` - -- `current` 현재 라우트를 나타냅니다. (대부분의 경우에 변경할 일이 없습니다.) - -- `append`는 `current` 라우트에 추가할 수 있도록 합니다 ([`router-link`](#router-link-props)처럼) - -### router.addRoutes - - > 2.2.0+ - - 라우터에 동적으로 더 많은 라우트를 추가할 수 있습니다. 전달인자는 `routes` 생성자 옵션과 동일한 경로 설정 포맷을 사용하는 배열이어야 합니다. - -### router.onReady - - > 2.2.0+ - - 이 메소드는 라우터가 초기 탐색을 완료할 때 호출하는 콜백을 대기시킵니다. 즉, 초기 라우트와 연결된 모든 비동기 입력 훅 및 비동기 컴포넌트를 해결합니다. - - 이는 서버와 클라이언트 모두 일관된 출력을 보장하기 위해 서버측 렌더링을 사용할 때 유용합니다. - -### router.onError - - > 2.4.0+ - -라우트 탐색 중에 에러가 발견되면 호출 될 콜백을 등록하십시오. 호출 할 에러에 유의하십시오. 에러는 다음 시나리오 중 하나이어야합니다. - - - 에러는 라우트 가드 기능 내에서 동기적으로 발생한 경우. - - 에러는 라우트 가드 함수 내에서 `next(err)`를 호출하여 캐치한 경우 - - 라우트를 렌더링하는데 필요한 비동기 컴포넌트를 처리하려고 할 때 에러가 발생한 경우. - -## 컴포넌트 주입 - -### 주입된 속성 - -이러한 프로퍼티는 라우터 인스턴스를 루트 인스턴스에 `router` 옵션으로 전달함으로써 모든 자식 컴포넌트에 주입됩니다. - -- #### $router - - 라우터 인스턴스 - -- #### $route - - 현재 활성화 된 [Route](#the-route-object)입니다. 이 속성은 읽기 전용이며 해당 속성은 변경할 수는 없지만 감시 할 수 있습니다. - -### 활성화된 옵션 - - - beforeRouteEnter - - beforeRouteUpdate - - beforeRouteLeave - - [컴포넌트 내부 가드](../guide/advanced/navigation-guards.md#incomponent-guards)를 확인하세요. diff --git a/docs/kr/guide/README.md b/docs/kr/guide/README.md deleted file mode 100644 index 3a9cae8cc..000000000 --- a/docs/kr/guide/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# 시작하기 - -::: tip 참고 -이 가이드는 코드샘플에 [ES2015](https://github.com/lukehoban/es6features)를 사용합니다. - -또한 모든 예제는 Vue 정식 버전을 이용해 바로 컴파일 할 수 있습니다. 더 자세한 내용은 [여기](https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only)를 확인하세요. -::: - -Vue와 Vue 라우터를 이용해 싱글 페이지 앱을 만드는 것은 매우 쉽습니다. Vue.js를 사용한다면 이미 컴포넌트로 앱을 구성하고 있을 것입니다. Vue 라우터를 함께 사용할 때 추가로 해야하는 것은 라우트에 컴포넌트를 매핑한 후, 어떤 주소에서 렌더링할 지 알려주는 것 뿐입니다. - -아래는 기본 예제입니다. - -## HTML - -``` html -<script src="https://unpkg.com/vue@2/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- 네비게이션을 위해 router-link 컴포넌트를 사용합니다. --> - <!-- 구체적인 속성은 `to` prop을 이용합니다. --> - <!-- 기본적으로 `<router-link>`는 `<a>` 태그로 렌더링됩니다.--> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- 라우트 아울렛 --> - <!-- 현재 라우트에 맞는 컴포넌트가 렌더링됩니다. --> - <router-view></router-view> -</div> -``` - -## JavaScript - -``` js -// 0. 모듈 시스템 (예: vue-cli)을 이용하고 있다면, Vue와 Vue 라우터를 import 하세요 -// 그리고 `Vue.use(VueRouter)`를 호출하세요 - - -// 1. 라우트 컴포넌트를 정의하세요. -// 아래 내용들은 다른 파일로부터 가져올 수 있습니다. -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. 라우트를 정의하세요. -// Each route should map to a component. The "component" can -// 각 라우트는 반드시 컴포넌트와 매핑되어야 합니다. -// "component"는 `Vue.extend()`를 통해 만들어진 -// 실제 컴포넌트 생성자이거나 컴포넌트 옵션 객체입니다. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. `routes` 옵션과 함께 router 인스턴스를 만드세요. -// 추가 옵션을 여기서 전달해야합니다. -// 지금은 간단하게 유지하겠습니다. -const router = new VueRouter({ - routes // `routes: routes`의 줄임 -}) - -// 4. 루트 인스턴스를 만들고 mount 하세요. -// router와 router 옵션을 전체 앱에 주입합니다. -const app = new Vue({ - router -}).$mount('#app') - -// 이제 앱이 시작됩니다! -``` - -라우터를 주입하였으므로 `this.$router`와 현재 라우트를 `this.$route`로 접근할 수 있습니다. - -```js -// Home.vue -export default { - computed: { - username () { - // 곧 `params` 확인할 수 있습니다. - return this.$route.params.username - } - }, - methods: { - goBack () { - window.history.length > 1 - ? this.$router.go(-1) - : this.$router.push('/') - } - } -} -``` - -문서 전체에서 `router`를 자주 사용했습니다. `this.$router`는 정확히 `router`와 동일합니다. `this.$router`를 사용하는 이유는 라우터를 조작해야하는 모든 컴포넌트에서 라우트 객체를 가져올 필요가 없기 때문입니다. - - -이 [예제](https://jsfiddle.net/yyx990803/xgrjzsup/)에서 바로 확인해볼 수 있습니다. - -`<router-link>`는 현재 라우트와 일치할 때 자동으로 `.router-link-active` 클래스가 추가됩니다. [API 레퍼런스](../api/#router-link)를 확인하세요. diff --git a/docs/kr/guide/advanced/data-fetching.md b/docs/kr/guide/advanced/data-fetching.md deleted file mode 100644 index e58ab8bd1..000000000 --- a/docs/kr/guide/advanced/data-fetching.md +++ /dev/null @@ -1,112 +0,0 @@ -# 데이터 가져오기 - -때로는 라우트가 활성화될 때 서버에서 데이터를 가져와야 합니다. 예를 들어, 사용자 프로필을 렌더링하기 전에 서버에서 사용자의 데이터를 가져와야 합니다. 우리는 두 가지 방법을 사용할 수 있습니다. - -- **탐색 후 가져오기**: 먼저 탐색하고 들어오는 컴포넌트의 라이프 사이클 훅에서 데이터를 가져옵니다. 데이터를 가져오는 동안 로드 상태를 표시합니다. - -- **탐색하기 전에 가져오기**: 라우트 가드에서 경로를 탐색하기 전에 데이터를 가져오고 그 후에 탐색을 수행합니다. - -엄밀히 말하면 두 가지 모두 유효한 선택입니다. 궁극적인 목표는 사용자 경험에 달려 있습니다. - -## 탐색 후 가져오기 - -이 방법을 사용하면 들어오는 컴포넌트를 즉시 탐색하고 렌더링하며 컴포넌트의 `created` 훅에서 데이터를 가져옵니다. 네트워크를 통해 데이터를 가져 오는 동안 로드 상태를 표시 할 수 있는 기회를 제공하며 각 뷰 마다 로드를 다르게 처리 할 수도 있습니다. - -`$route.params.id`를 기반으로 한 게시물의 데이터를 가져와야하는 `Post` 컴포넌트가 있다고 가정 해 봅시다 : - -``` html -<template> - <div class="post"> - <div class="loading" v-if="loading"> - Loading... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // 뷰가 생성되고 데이터가 이미 감시 되고 있을 때 데이터를 가져온다. - this.fetchData() - }, - watch: { - // 라우트가 변경되면 메소드를 다시 호출됩니다. - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // `getPost`를 데이터 가져오기 위한 유틸리티/API 래퍼로 변경합니다. - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## 탐색하기 전에 가져오기 - -이 접근 방식을 사용하면 실제로 새 경로로 이동하기 전에 데이터를 가져옵니다. -들어오는 컴포넌트에서 `beforeRouteEnter` 가드에서 데이터를 가져올 수 있으며 페치가 완료되면 `next`만 호출 할 수 있습니다. - - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - watch: { - // 라우트가 변경되면 메소드를 다시 호출합니다 - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // `getPost`를 데이터 페치 유틸리티/API 래퍼로 바꿉니다. - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -다음 뷰에 대한 리소스를 가져 오는 동안 사용자는 현재 뷰를 유지합니다. 따라서 데이터를 가져 오는 동안 진행률 표시줄이나 일종의 표시기를 표시하는 것을 추천합니다. 데이터 가져오기가 실패하면 일종의 전역 경고 메시지를 표시해야합니다. diff --git a/docs/kr/guide/advanced/lazy-loading.md b/docs/kr/guide/advanced/lazy-loading.md deleted file mode 100644 index fb82b381c..000000000 --- a/docs/kr/guide/advanced/lazy-loading.md +++ /dev/null @@ -1,48 +0,0 @@ -# 지연된 로딩 - -번들러를 이용하여 앱을 제작할 때 JavaScript 번들이 상당히 커져 페이지로드 시간에 영향을 줄 수 있습니다. 각 라우트의 컴포넌트를 별도의 단위로 분할하고 경로를 방문할 때 로드하는 것이 효율적일 것입니다. - -Vue의 [비동기 컴포넌트](http://vuejs.org/guide/components.html#Async-Components)와 Webpack의 [코드 분할](https://webpack.js.org/guides/code-splitting-async/)을 결합합니다. 라우트 컴포넌트를 쉽게 불러올 수 있습니다. - -첫째, 비동기 컴포넌트는 Promise를 반환하는 팩토리 함수로 정의할 수 있습니다 (컴포넌트가 resolve 되어야함). - -```js -const Foo = () => - Promise.resolve({ - /* 컴포넌트 정의 */ - }) -``` - -둘째, Webpack 2에서 [dynamic import](https://github.com/tc39/proposal-dynamic-import)를 사용하여 코드 분할 포인트를 지정할 수 있습니다. - -```js -import('./Foo.vue') // returns a Promise -``` - -> 참고: Babel을 사용하고 있는 경우 올바른 구문 분석을 위해 [syntax-dynamic-import](http://babeljs.io/docs/plugins/syntax-dynamic-import/) 플러그인을 추가해야합니다. - -이 두 가지를 결합하여 Webpack에 의해 자동으로 코드 분할될 비동기 컴포넌트를 정의하는 방법입니다. - -```js -const Foo = () => import('./Foo.vue') -``` - -라우트 설정에서 아무것도 바꿀 필요가 없습니다. `Foo`만 사용하면 됩니다. - -```js -const router = new VueRouter({ - routes: [{ path: '/foo', component: Foo }] -}) -``` - -### 같은 묶음으로 컴포넌트 그룹화하기 - -때로는 동일한 라우트 아래에 중첩된 모든 컴포넌트를 동일한 비동기 묶음으로 그룹화 할 수 있습니다. 이를 위해 특수 주석 문법을 사용하는 이름(Webpack 2.4 이상 지원)을 제공하여 [이름을 가진 묶음](https://webpack.js.org/api/module-methods/#magic-comments)을 사용해야합니다. - -```js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -Webpack은 동일한 이름의 묶음을 가진 비동기 모듈을 동일한 비동기 묶음으로 그룹화합니다. diff --git a/docs/kr/guide/advanced/meta.md b/docs/kr/guide/advanced/meta.md deleted file mode 100644 index 9135fb25b..000000000 --- a/docs/kr/guide/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# 라우트 메타 필드 - -라우트를 정의 할 때 `meta` 필드를 포함시킬 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // 메타 필드 - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -그렇다면 이 `메타`필드에 어떻게 접근할까요? - -첫째,`routes` 설정의 각 라우트 객체를 **라우트 레코드** 라고합니다. 라우트 레코드는 중첩 될 수 있습니다. 따라서 라우트가 일치하면 둘 이상의 라우트 레코드와 잠재적으로 일치 할 수 있습니다. - -예를 들어, 위의 라우트 구성에서 URL `/foo/bar`는 상위 라우트 레코드와 하위 라우트 레코드 모두와 일치합니다. - -라우트와 일치하는 모든 라우트 레코드는 `$route` 객체(그리고 네비게이션 가드의 라우트 객체)에 `$route.matched` 배열로 노출됩니다. 그러므로 우리는 `$route.matched`를 반복하여 라우트 레코드의 메타 필드를 검사 할 필요가 있습니다. - -예제 사용 사례는 글로벌 네비게이션 가드에서 메타 필드를 확인하는 것입니다. - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // 이 라우트는 인증이 필요하며 로그인 한 경우 확인하십시오. - // 그렇지 않은 경우 로그인 페이지로 리디렉션하십시오. - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // 반드시 next()를 호출하십시오! - } -}) -``` diff --git a/docs/kr/guide/advanced/navigation-guards.md b/docs/kr/guide/advanced/navigation-guards.md deleted file mode 100644 index 059cfbd10..000000000 --- a/docs/kr/guide/advanced/navigation-guards.md +++ /dev/null @@ -1,126 +0,0 @@ -# 네비게이션 가드 - -이름에서 알 수 있듯이 `vue-router`가 제공하는 네비게이션 가드는 주로 리디렉션하거나 취소하여 네비게이션을 보호하는 데 사용됩니다. 라우트 탐색 프로세스에 연결하는 방법에는 전역, 라우트별 또는 컴포넌트가 있습니다. - -**Params 또는 쿼리를 변경하면 네비게이션 가드가 실행되지 않습니다**. 단순히 [`$route` 객체를 감시](../essentials/dynamic-matching.md#reacting-to-params-changes)하고 그 변화에 반응하십시오. 또는 컴포넌트 가드의 `beforeRouteUpdate`를 사용하십시오 - -### 전역 가드 - -`router.beforeEach`를 사용하여 보호하기 이전에 전역 등록을 할 수 있습니다. - -``` js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -네비게이션이 트리거될 때마다 가드가 작성 순서에 따라 호출되기 전의 모든 경우에 발생합니다. 가드는 비동기식으로 실행 될 수 있으며 네비게이션은 모든 훅이 해결되기 전까지 **보류 중** 으로 간주됩니다. - -모든 가드 기능은 세 가지 전달인자를 받습니다. - -- **`to: 라우트`**: 대상 [Route 객체](../../api/#the-route-object) 로 이동합니다. - -- **`from: 라우트`**: 현재 라우트로 오기전 라우트 입니다. - -- **`next: 함수`**: 이 함수는 **훅을 해결하기 위해** 호출 되어야 합니다. 액션은 `next`에 제공된 전달인자에 달려 있습니다. - - - **`next()`**: 파이프라인의 다음 훅으로 이동하십시오. 훅이 없는 경우 네비게이션은 **승인**됩니다. - - - **`next(false)`**: 현재 네비게이션을 중단합니다. 브라우저 URL이 변경되면(사용자 또는 뒤로 버튼을 통해 수동으로 변경됨) `from`경로의 URL로 재설정됩니다. - - - **`next('/')` 또는 `next({ path: '/' })`**: 다른 위치로 리디렉션합니다. 현재 네비게이션이 중단되고 새 네비게이션이 시작됩니다. - - - **`next(error)`**: (2.4.0 이후 추가) `next`에 전달된 인자가 `Error` 의 인스턴스이면 탐색이 중단되고 `router.onError()`를 이용해 등록 된 콜백에 에러가 전달됩니다. - - -**항상 `next` 함수를 호출하십시오. 그렇지 않으면 훅이 절대 불러지지 않습니다.** - -### Global Resolve Guards - -> 2.5.0에서 추가됨 - -2.5.0 이후로 `router.beforeResolve`를 사용하여 글로벌 가드를 등록 할 수 있습니다. 이는 `router.beforeEach`와 유사합니다. 모든 컴포넌트 가드와 비동기 라우트 컴포넌트를 불러온 후 네비게이션 가드를 확인하기 전에 호출된다는 차이가 있습니다 - -### Global After Hooks - -전역 훅을 등록 할 수도 있지만, 가드와 달리 이 훅은 `next` 함수를 얻지 못하며 네비게이션에 영향을 줄 수 없습니다. - -``` js -router.afterEach((to, from) => { - // ... -}) -``` - -### 라우트 별 가드 - -`beforeEnter` 가드를 라우트의 설정 객체에 직접 정의 할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -이러한 가드는 전역 이전 가드와 동일한 서명을 가집니다. - -### 컴포넌트 내부 가드 - -마지막으로 `beforeRouteEnter` 와 `beforeRouteLeave`를 사용하여 라우트 컴포넌트(라우터 설정으로 전달되는 컴포넌트) 안에 라우트 네비게이션 가드를 직접 정의 할 수 있습니다. - -- `beforeRouteEnter` -- `beforeRouteUpdate` (2.2 버전에 추가) -- `beforeRouteLeave` - -``` js -const Foo = { - template: `...`, - beforeRouteEnter (to, from, next) { - // 이 컴포넌트를 렌더링하는 라우트 앞에 호출됩니다. - // 이 가드가 호출 될 때 아직 생성되지 않았기 때문에 - // `this` 컴포넌트 인스턴스에 접근 할 수 없습니다! - }, - beforeRouteLeave (to, from, next) { - // 이 컴포넌트를 렌더링하는 라우트가 이전으로 네비게이션 될 때 호출됩니다. - // `this` 컴포넌트 인스턴스에 접근 할 수 있습니다. - } -} -``` - -`beforeRouteEnter` 가드는 네비게이션이 확인되기 전에 가드가 호출되어서 새로운 엔트리 컴포넌트가 아직 생성되지 않았기 때문에 `this`에 접근하지 **못합니다.** - -그러나 콜백을 `next`에 전달하여 인스턴스에 액세스 할 수 있습니다. 네비게이션이 확인되고 컴포넌트 인스턴스가 콜백에 전달인자로 전달 될 때 콜백이 호출됩니다. - -``` js -beforeRouteEnter (to, from, next) { - next(vm => { - // `vm`을 통한 컴포넌트 인스턴스 접근 - }) -} -``` - -`beforeRouteLeave` 안에서 `this`에 직접 접근 할 수 있습니다. leave 가드는 일반적으로 사용자가 저장하지 않은 편집 내용을 두고 실수로 라우트를 떠나는 것을 방지하는데 사용됩니다. 탐색은 `next(false)`를 호출하여 취소할 수 있습니다. - -### 전체 네비게이션 시나리오 - -1. 네비게이션이 트리거됨. -2. 비활성화될 컴포넌트에서 가드를 호출. -3. 전역 `beforeEach` 가드 호출. -4. 재사용되는 컴포넌트에서 `beforeRouteUpdate` 가드 호출. (2.2 이상) -5. 라우트 설정에서 `beforeEnter` 호출. -6. 비동기 라우트 컴포넌트 해결. -7. 활성화된 컴포넌트에서 `beforeRouteEnter` 호출. -8. 전역 `beforeResolve` 가드 호출. (2.5이상) -9. 네비게이션 완료. -10. 전역 `afterEach` 훅 호출. -11. DOM 갱신 트리거 됨. -12. 인스턴스화 된 인스턴스들의 `beforeRouteEnter`가드에서 `next`에 전달 된 콜백을 호출합니다. diff --git a/docs/kr/guide/advanced/scroll-behavior.md b/docs/kr/guide/advanced/scroll-behavior.md deleted file mode 100644 index d95420673..000000000 --- a/docs/kr/guide/advanced/scroll-behavior.md +++ /dev/null @@ -1,62 +0,0 @@ -# 스크롤 동작 - -클라이언트 측 라우팅을 사용할 때 새로운 경로로 이동할 때 맨 위로 스크롤하거나 실제 페이지를 다시 로드하는 것처럼 컨텐츠 항목의 스크롤 위치를 유지할 수 있습니다. `vue-router`는 이러한 것들을 할 수 있으며, 라우트 탐색에서 스크롤 동작을 완전히 사용자 정의할 수 있게합니다. - -**참고: 이 기능은 HTML5 히스토리 모드에서만 작동합니다.** - -라우터 인스턴스를 생성 할 때 `scrollBehavior` 함수를 제공 할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // 원하는 위치로 돌아가기 - } -}) -``` - -`scrollBehavior` 함수는 `to`와 `from` 라우트 객체를받습니다. 세 번째 전달인자인 `savedPosition`은 브라우저의 뒤로/앞으로 버튼으로 트리거되는 `popstate` 네비게이션인 경우에만 사용할 수 있습니다. - -이 함수는 스크롤 위치 객체를 반환 할 수 있습니다. 객체는 다음과 같은 형태 일 수 있습니다. - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset은 2.6.0 이상만 지원) - -잘못된 값이나 빈 객체가 반환되면 스크롤이 발생하지 않습니다. - -예제: - -``` js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -그러면 모든 라우트 네비게이션에 대해 페이지가 맨 위로 스크롤됩니다. - -`savedPosition`을 반환하면 뒤로/앞으로 버튼으로 탐색할 때 네이티브와 같은 동작이 발생합니다. - -``` js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -"anchor로 스크롤" 동작을 시뮬레이트하려면 다음을 수행하십시오. - -``` js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -또한 [라우트 메타 필드](meta.md)를 사용하여 세밀한 스크롤 동작 제어를 구현할 수 있습니다. 전체 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js)를 확인하십시오. diff --git a/docs/kr/guide/advanced/transitions.md b/docs/kr/guide/advanced/transitions.md deleted file mode 100644 index 8fa191c41..000000000 --- a/docs/kr/guide/advanced/transitions.md +++ /dev/null @@ -1,57 +0,0 @@ -# 트랜지션 - -`<router-view>`는 본질적으로 동적인 컴포넌트이기 때문에 `<transition>` 컴포넌트를 사용하는 것과 같은 방식으로 트랜지션 효과를 적용할 수 있습니다. - -``` html -<transition> - <router-view></router-view> -</transition> -``` - -[`<transition>`에 대한 모든 것](http://vuejs.org/guide/transitions.html) 을 확인하십시오. - -### 라우트 별 트랜지션 - -위의 사용법은 모든 라우트에 대해 동일한 트랜지션을 적용합니다. 각 라우트의 컴포넌트가 서로 다른 트랜지션을 갖도록 하려면 각 라우트 컴포넌트 내에서 다른 이름으로 `<transition>`을 사용할 수 있습니다. - -``` js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -### 라우트 기반 동적 트랜지션 - -또한 대상 라우트와 현재 라우트 간의 관계를 기반으로 동적으로 사용할 트랜지션을 결정할 수도 있습니다. - -``` html -<!-- 동적 트랜지션을 위한 name을 지정합니다. --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -``` js -// 그런 다음 부모 구성 요소에서 `$route`를 보고 사용할 트랜지션을 결정합니다 -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -전체 예제는 [여기](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js)에 있습니다. diff --git a/docs/kr/guide/essentials/dynamic-matching.md b/docs/kr/guide/essentials/dynamic-matching.md deleted file mode 100644 index 85cd66fe8..000000000 --- a/docs/kr/guide/essentials/dynamic-matching.md +++ /dev/null @@ -1,75 +0,0 @@ -# 동적 라우트 매칭 - -주어진 패턴을 가진 라우트를 동일한 컴포넌트에 매핑해야하는 경우가 자주 있습니다. 예를 들어 모든 사용자에 대해 동일한 레이아웃을 가지지만 하지만 다른 사용자 ID로 렌더링되어야하는 `User` 컴포넌트가 있을 수 있습니다. `vue-router`에서 우리는 경로에서 동적 세그먼트를 사용하여 다음을 할 수 있습니다. - -``` js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // 동적 세그먼트는 콜론으로 시작합니다. - { path: '/user/:id', component: User } - ] -}) -``` - -이제 `/user/foo`와 `/user/bar` 같은 URL은 모두 같은 경로에 매핑됩니다. - -동적 세그먼트는 콜론 `:`으로 표시됩니다. 라우트가 일치하면 동적 세그먼트의 값은 모든 컴포넌트에서 `this.$route.params`로 표시됩니다. 그러므로 `User`의 템플릿을 다음과 같이 갱신하여 현재 사용자 ID를 표현할 수 있습니다 : - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -``` - -실제 예제는 [여기](http://jsfiddle.net/yyx990803/4xfa2f19/)에 있습니다. - -동일한 라우트에 여러 동적 세그먼트를 가질 수 있으며, `$route.params`의 해당 필드에 매핑됩니다. - -예: - -| 패턴 | 일치하는 패스 | $route.params | -|---------|------|--------| -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -`$route.params` 외에도 `$route` 객체는 `$route.query` (URL에 쿼리가 있는 경우), `$route.hash` 등의 유용한 정보를 제공합니다. [API 레퍼런스](../../api/#the-route-object)에서 전체 세부 정보를 확인할 수 있습니다. - -### Params 변경 사항에 반응하기 - -매개 변수와 함께 라우트를 사용할 때 주의 해야할 점은 사용자가 `/user/foo`에서 `/user/bar`로 이동할 때 **동일한 컴포넌트 인스턴스가 재사용된다는 것입니다.** 두 라우트 모두 동일한 컴포넌트를 렌더링하므로 이전 인스턴스를 삭제 한 다음 새 인스턴스를 만드는 것보다 효율적입니다. **그러나 이는 또한 컴포넌트의 라이프 사이클 훅이 호출되지 않음을 의미합니다.** - -동일한 컴포넌트의 params 변경 사항에 반응하려면 `$route` 객체를 보면됩니다. - -``` js -const User = { - template: '...', - watch: { - '$route' (to, from) { - // 경로 변경에 반응하여... - } - } -} -``` - -또는 2.2에서 소개된 `beforeRouteUpdate` 가드를 사용하십시오. -```js -const User = { - template: '...', - beforeRouteUpdate (to, from, next) { - // react to route changes... - // don't forget to call next() - } -} -``` - -### 고급 매칭 패턴 - -`vue-router`는 라우트 매칭 엔진으로 [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0)를 사용하기 때문에 선택적 동적 세그먼트, 0개 이상/하나 이상의 요구 사항, 심지어 커스텀 정규식 패턴과 같은 많은 고급 매칭 패턴을 지원합니다. 이 고급 패턴들과 `vue-router`에서 사용하는 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js)에 대한 [문서](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters)를 확인하십시오. - -### 매칭 우선순위 - -동일한 URL이 여러 라우트와 일치하는 경우가 있습니다. 이 경우 일치하는 우선 순위는 라우트 정의의 순서에 따라 결정됩니다. 즉, 경로가 더 먼저 정의 될수록 우선 순위가 높아집니다. diff --git a/docs/kr/guide/essentials/getting-started.md b/docs/kr/guide/essentials/getting-started.md deleted file mode 100644 index 91919aa1b..000000000 --- a/docs/kr/guide/essentials/getting-started.md +++ /dev/null @@ -1,68 +0,0 @@ -# 시작하기 - -> 가이드의 샘플 코드는[ES2015](https://github.com/lukehoban/es6features)를 사용합니다. - -Vue.js와 vue-router로 단일 페이지 애플리케이션을 만드는 것은 간단합니다. Vue.js를 통해 우리는 이미 컴포넌트로 애플리케이션을 구성하고 있습니다. vue-router를 추가 할 때, 우리가해야 할 일은 우리의 컴포넌트를 route에 매핑하고 vue-router가 어디서 렌더링할 지 지정하는 것입니다. 다음은 기본적인 예입니다. - -> 모든 예제는 Vue의 전체 버전을 사용하여 템플릿 구문 분석을 가능하게합니다. 자세한 내용은 [여기](https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only) 있습니다. - -### HTML - -``` html -<script src="https://unpkg.com/vue@2/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- 탐색을 위해 라우터 링크 구성 요소를 사용하십시오. --> - <!-- `to` prop를 전달하여 링크를 지정하십시오. --> - <!-- `<router-link>`는 기본적으로`<a>`태그로 렌더링 될 것입니다 --> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- route outlet --> - <!-- 라우트와 일치하는 컴포넌트가 여기 렌더링됩니다. --> - <router-view></router-view> -</div> -``` - -### JavaScript - -``` js -// 0. 모듈 시스템을 사용하는 경우 (예: vue-cli를 이용해서), Vue 및 VueRouter를 가져온 다음 `Vue.use(VueRouter)`를 호출하십시오. - -// 1. 라우트 컴포넌트를 정의하십시오. -// 다른 파일에서 가져올 수 있습니다. -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. 라우트를 정의합니다. -// 일부 라우트 정의 각 라우트는 컴포넌트에 맵핑되어야합니다. -// "컴포넌트"는 `Vue.extend()`를 통해 생성된 -// 실제 컴포넌트 생성자이거나 컴포넌트 옵션 객체 일 수 있습니다. -// 나중에 중첩 된 라우트에 대해 이야기하겠습니다. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. 라우터 인스턴스를 생성하고 `routes` 옵션을 전달하십시오. -// 여기에 추가 옵션을 전달할 수 있지만, 지금은 간단하게 하겠습니다. -const router = new VueRouter({ - routes // routes: routes 의 약어 -}) - -// 4. 루트 인스턴스를 만들고 마운트하십시오. -// 라우터 옵션을 라우터에 삽입하여 -// 전체 응용 프로그램을 라우터가 인식하도록 하십시오. -const app = new Vue({ - router -}).$mount('#app') - -// 이제 앱을 시작 해보세요! -``` - -이 [예제](http://jsfiddle.net/yyx990803/xgrjzsup/)를 확인하십시오. - -`<router-link>`는 가리키는 라우트가 일치 할 때 자동으로 `.router-link-active` 클래스를 얻습니다. API 레퍼런스에서 더 많은 것을 배울 수 있습니다. diff --git a/docs/kr/guide/essentials/history-mode.md b/docs/kr/guide/essentials/history-mode.md deleted file mode 100644 index 5b71b53d3..000000000 --- a/docs/kr/guide/essentials/history-mode.md +++ /dev/null @@ -1,116 +0,0 @@ -# HTML5 히스토리 모드 - -`vue-router`의 기본 모드는 _hash mode_ 입니다. URL 해시를 사용하여 전체 URL을 시뮬레이트하므로 URL이 변경될 때 페이지가 다시 로드 되지 않습니다. - -해시를 제거하기 위해 라우터의 **history 모드** 를 사용할 수 있습니다. `history.pushState` API를 활용하여 페이지를 다시 로드하지 않고도 URL 탐색을 할 수 있습니다. - -```js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -히스토리 모드를 사용하면 URL이 "정상"으로 보입니다. `http://oursite.com/user/id`. 멋집니다! - -그러나 문제는 다음과 같습니다. 우리의 앱이 적절한 서버 설정이 없는 단일 페이지 클라이언트 앱이기 때문에 사용자가 직접 `http://oursite.com/user/id` 에 접속하면 404 오류가 발생합니다. - -걱정하지 않아도됩니다. 문제를 해결하려면 서버에 간단하게 포괄적인 대체 경로를 추가하기만 하면됩니다. URL이 정적 에셋과 일치하지 않으면 앱이 있는 동일한 `index.html`페이지를 제공해야 합니다. - -## 서버 설정 예제 - -#### Apache - -```apache -<IfModule mod_negotiation.c> - Options -MultiViews -</IfModule> -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Native Node.js - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http - .createServer((req, res) => { - fs.readFile('index.html', 'utf-8', (err, content) => { - if (err) { - console.log('We cannot open "index.html" file.') - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) - }) - .listen(httpPort, () => { - console.log('Server listening on: http://localhost:%s', httpPort) - }) -``` - -#### Express와 Node.js - -Node.js/Express의 경우 [connect-history-api-fallback 미들웨어](https://github.com/bripkens/connect-history-api-fallback)를 고려해보세요. - -#### Internet Information Services (IIS) - -``` -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="index.html" /> - </rule> - </rules> - </rewrite> - <httpErrors> - <remove statusCode="404" subStatusCode="-1" /> - <remove statusCode="500" subStatusCode="-1" /> - <error statusCode="404" path="/survey/notfound" responseMode="ExecuteURL" /> - <error statusCode="500" path="/survey/error" responseMode="ExecuteURL" /> - </httpErrors> - <modules runAllManagedModulesForAllRequests="true"/> - </system.webServer> -</configuration> -``` - -## 주의 사항 - -주의 사항이 있습니다. 여러분의 서버는 404 에러를 보고하지 않을 것입니다. 왜냐하면 모든 발견되지 않은 경로가 이제 `index.html` 파일을 제공하기 때문입니다. 이 문제를 해결하려면 Vue 앱에서 catch-all 라우트를 구현하여 404 페이지를 표시해야합니다. - -```js -const router = new VueRouter({ - mode: 'history', - routes: [{ path: '*', component: NotFoundComponent }] -}) -``` - -또는 Node.js 서버를 사용하는 경우 서버 측의 라우터를 사용하여 들어오는 URL을 일치시키고 라우트가 일치하지 않으면 404로 응답하여 폴백을 구현할 수 있습니다. 더 자세한 설명은 [Vue 서버사이드 렌더링 문서](https://ssr.vuejs.org/en/)을 읽어보세요 diff --git a/docs/kr/guide/essentials/named-routes.md b/docs/kr/guide/essentials/named-routes.md deleted file mode 100644 index bab81564c..000000000 --- a/docs/kr/guide/essentials/named-routes.md +++ /dev/null @@ -1,31 +0,0 @@ -# 이름을 가지는 라우트 - -때로는 라우트에 연결하거나 탐색을 수행 할 때 이름이 있는 라우트를 사용하는 것이 더 편리합니다. Router 인스턴스를 생성하는 동안 `routes` 옵션에 라우트를 지정할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -이름을 가진 라우트에 링크하려면, 객체를 `router-link`, 컴포넌트의 `to` prop로 전달할 수 있습니다. - -``` html -<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> -``` - -이것은 `router.push()`와 프로그램적으로 사용되는 것과 정확히 같은 객체입니다. - -```js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -두 경우 모두 라우터는 `/user/123` 경로로 이동합니다. - -전체 예제는 [여기](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js)에 있습니다. diff --git a/docs/kr/guide/essentials/named-views.md b/docs/kr/guide/essentials/named-views.md deleted file mode 100644 index 0bd6ddfc1..000000000 --- a/docs/kr/guide/essentials/named-views.md +++ /dev/null @@ -1,28 +0,0 @@ -# 이름을 가지는 뷰 - -때로는 여러 개의 뷰를 중첩하지 않고 동시에 표시해야 하는 경우가 있습니다. `sidebar` 뷰와 `main` 뷰로 레이아웃을 생성합니다. 이름이 지정된 뷰가 편리한 경우 입니다. 뷰에 하나의 outlet이 있는 대신 여러 개를 사용하여 각 outlet에 이름을 지정할 수 있습니다. 이름이 없는 `router-view`는 이름으로 `default`가 주어집니다. - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -뷰는 컴포넌트를 사용하여 렌더링 되므로 여러 뷰에는 동일한 라우트에 대해 여러 컴포넌트가 필요합니다. `components`(s를 붙입니다) 옵션을 사용해야합니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -이 예제는 [여기](https://jsfiddle.net/posva/6du90epg/)에서 확인할 수 있습니다. diff --git a/docs/kr/guide/essentials/navigation.md b/docs/kr/guide/essentials/navigation.md deleted file mode 100644 index a1e9d083d..000000000 --- a/docs/kr/guide/essentials/navigation.md +++ /dev/null @@ -1,74 +0,0 @@ -# 프로그래밍 방식 네비게이션 - -`<router-link>`를 사용하여 선언적 네비게이션용 anchor 태그를 만드는 것 외에도 라우터의 인스턴스 메소드를 사용하여 프로그래밍으로 이를 수행 할 수 있습니다. - -#### `router.push(location, onComplete?, onAbort?)` - -**참고: Vue 인스턴스 내부에서 라우터 인스턴스에 `$router`로 액세스 할 수 있습니다. 그러므로`this.$router.push`를 사용 할 수 있습니다.** - -다른 URL로 이동하려면 `router.push`를 사용하십시오. 이 메소드는 새로운 항목을 히스토리 스택에 넣기 때문에 사용자가 브라우저의 뒤로 가기 버튼을 클릭하면 이전 URL로 이동하게된다. - -이것은 `<router-link>`를 클릭 할 때 내부적으로 호출되는 메소드이므로 `<router-link :to="...">`를 클릭하면 `router.push(...)`를 호출하는 것과 같습니다. - -| 선언적 방식 | 프로그래밍 방식 | -|-------------|--------------| -| `<router-link :to="...">` | `router.push(...)` | - -전달인자는 문자열 경로 또는 로케이션 디스크립터 객체가 될 수 있습니다. - -예: - -``` js -// 리터럴 string -router.push('home') - -// object -router.push({ path: 'home' }) - -// 이름을 가지는 라우트 -router.push({ name: 'user', params: { userId: 123 }}) - -// 쿼리와 함께 사용, 결과는 /register?plan=private 입니다. -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -2.2.0 버전이후로 선택적으로 `router.push` 또는 `router.replace`에 두번째와 세번째 전달인자로 `onComplete`와 `onAbort` 콜백을 제공합니다. -이 콜백은 탐색이 성공적으로 완료되거나(모든 비동기 훅이 해결된 후) 또는 중단(현재 탐색이 완료되기 전에 동일한 경로로 이동하거나 다른 경로 이동)될 때 호출 됩니다. - -#### `router.replace(location)` - -`router.push`와 같은 역할을 하지만 유일한 차이는 새로운 히스토리 항목에 추가하지 않고 탐색한다는 것입니다. 이름에서 알 수 있듯이 현재 항목을 대체합니다. - -| 선언적 방식 | 프로그래밍 방식 | -|-------------|--------------| -| `<router-link :to="..." replace>` | `router.replace(...)` | - - -#### `router.go(n)` - -이 메소드는 `window.history.go(n)`와 비슷하게 히스토리 스택에서 앞으로 또는 뒤로 이동하는 단계를 나타내는 하나의 정수를 매개 변수로 사용합니다. - -예제 - -``` js -// 한 단계 앞으로 갑니다. history.forward()와 같습니다. history.forward()와 같습니다. -router.go(1) - -// 한 단계 뒤로 갑니다. history.back()와 같습니다. -router.go(-1) - -// 3 단계 앞으로 갑니다. -router.go(3) - -// 지정한 만큼의 기록이 없으면 자동으로 실패 합니다. -router.go(-100) -router.go(100) -``` - -#### History 조작 - -`router.push`, `router.replace` 및 `router.go`는 [`window.history.pushState`,`window.history.replaceState` 및 `window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History)와 상응합니다. 그들은 `window.history` API를 모방합니다. - -따라서 [브라우저 히스토리 API](https://developer.mozilla.org/en-US/docs/Web/API/History_API)에 이미 익숙하다면 vue-router를 사용하여 히스토리를 손쉽게 조작 할 수 있습니다. - -vue-router 네비게이션 메소드(`push`,`replace`,`go`)는 모든 라우터 모드(`history`,`hash` 및`abstract`)에서 일관되게 작동합니다. diff --git a/docs/kr/guide/essentials/nested-routes.md b/docs/kr/guide/essentials/nested-routes.md deleted file mode 100644 index 186e41924..000000000 --- a/docs/kr/guide/essentials/nested-routes.md +++ /dev/null @@ -1,100 +0,0 @@ -# 중첩된 라우트 - -실제 앱 UI는 일반적으로 여러 단계로 중첩 된 컴포넌트로 이루어져 있습니다. URL의 세그먼트가 중첩 된 컴포넌트의 특정 구조와 일치한다는 것은 매우 일반적입니다. 예를 들면 다음과 같습니다. - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -`vue-router`를 사용하면 중첩 된 라우트 구성을 사용하여이 관계를 표현하는 것이 매우 간단합니다. - -이전 장에서 만든 앱을 생각해보십시오. - -``` html -<div id="app"> - <router-view></router-view> -</div> -``` - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -여기에있는 `<router-view>`는 최상위 outlet입니다. 최상위 경로와 일치하는 컴포넌트를 렌더링합니다. 비슷하게 렌더링 된 컴포넌트는 자신의 중첩 된 `<router-view>`를 포함 할 수도 있습니다. 다음은 `User` 컴포넌트의 템플릿 안에 하나를 추가하는 예 입니다. - -``` js -const User = { - template: ` - <div class="user"> - <h2>User {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -이 중첩 outlet에 컴포넌트를 렌더링하려면 `children`을 사용해야합니다. -`VueRouter` 생성자의 옵션 config: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, - children: [ - { - // /user/:id/profile 과 일치 할 때 - // UserProfile은 User의 <router-view> 내에 렌더링 됩니다. - path: 'profile', - component: UserProfile - }, - { - // /user/:id/posts 과 일치 할 때 - // UserPosts가 User의 <router-view> 내에 렌더링 됩니다. - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**`/`로 시작하는 중첩 된 라우트는 루트 경로로 취급됩니다. 이렇게하면 중첩 된 URL을 사용하지 않고도 컴포넌트 중첩을 활용할 수 있습니다.** - -여러분이 볼 수 있듯이 `children` 옵션은 `routes`와 같은 라우트 설정 객체의 또 다른 배열입니다. 따라서 필요한만큼 중첩 된 뷰를 유지할 수 있습니다. - -이 시점에서, 위의 설정으로, `/user/foo`를 방문했을 때 하위 라우트가 매치되지 않았기 때문에 `User`의 outlet에 아무것도 출력되지 않습니다. 어쩌면 거기에 무언가를 렌더링하고 싶을지도 모릅니다. 이 경우 빈 서브 루트 경로를 제공 할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', component: User, - children: [ - // UserHome은 /user/:id 가 일치 할 때 - // User의 <router-view> 안에 렌더링됩니다. - { path: '', component: UserHome }, - - // ...또 다른 서브 라우트 - ] - } - ] -}) -``` - -이 예제의 작업 데모는 [이 곳](http://jsfiddle.net/yyx990803/L7hscd8h/)에서 찾을 수 있습니다. diff --git a/docs/kr/guide/essentials/passing-props.md b/docs/kr/guide/essentials/passing-props.md deleted file mode 100644 index 0188fd3f2..000000000 --- a/docs/kr/guide/essentials/passing-props.md +++ /dev/null @@ -1,70 +0,0 @@ -# 라우트 컴포넌트에 속성 전달 - -컴포넌트에서 `$route`를 사용하면 특정 URL에서만 사용할 수 있는 컴포넌트의 유연성을 제한하는 라우트와 강한 결합을 만듭니다. - -컴포넌트와 라우터 속성을 분리하려면 다음과 같이 하십시오. - -**$route에 의존성 추가** - -``` js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -**속성에 의존성 해제** - -``` js -const User = { - props: ['id'], - template: '<div>User {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - ] -}) -``` - -이를 통해 어디서나 컴포넌트를 사용할 수 있으므로 컴포넌트 재사용 및 테스트하기가 더 쉽습니다. - -### Boolean 모드 - -`props`를 `true`로 설정하면 `route.params`가 컴포넌트 `props`로 설정됩니다. - -### 객체 모드 - -`props`가 객체일때 컴포넌트 `props`가 있는 그대로 설정됩니다. -`props`가 정적일 때 유용합니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } - ] -}) -``` - -### 함수 모드 - -`props`를 반환하는 함수를 만들 수 있습니다. 이를 통해 전달인자를 다른 타입으로 캐스팅하고 적정인 값을 라우트 기반 값과 결합됩니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) } - ] -}) -``` - -`/search?q=vue`는 `{query: "vue"}`를 `SearchUser` 컴포넌트에 전달합니다. - -라우트 변경시에만 평가되므로 `props` 함수는 상태를 저장하지 않도록 합니다. -`props`를 정의할 상태가 필요한 경우 래퍼 컴포넌트를 사용하면 상태가 변경될 때마다 응답할 수 있습니다. - -고급 사용예를 보려면 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js)를 확인하세요. diff --git a/docs/kr/guide/essentials/redirect-and-alias.md b/docs/kr/guide/essentials/redirect-and-alias.md deleted file mode 100644 index 3da8aeb55..000000000 --- a/docs/kr/guide/essentials/redirect-and-alias.md +++ /dev/null @@ -1,57 +0,0 @@ -# 리다이렉트와 별칭 - -### 리다이렉트 - -리디렉션은 `routes` 설정에서도 할 수 있습니다. `/a`에서 `/b`로 리디렉션하려면 - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -리디렉션은 이름이 지정된 라우트를 지정할 수도 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -또는 동적 리디렉션을 위한 함수를 사용할 수도 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // 함수는 인수로 대상 라우트를 받습니다. - // 여기서 path/location 반환합니다. - }} - ] -}) -``` -기타 고급 사용법은 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js)를 확인 하십시오. - -### 별칭 - -리다이렉트는 사용자가 `/a`를 방문했을 때 URL이 `/b`로 대체 된 다음 `/b`로 매칭된다는 것을 의미합니다. 하지만 별칭이란 무엇입니까? - -**`/a`의 별칭은 `/b`는 사용자가 `/b`를 방문했을 때 URL은 `/b`을 유지하지만 사용자가 `/a`를 방문한 것처럼 매칭합니다.** - -위는 라우트 구성에서 다음과 같이 표현할 수 있습니다. - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -별칭을 사용하면 구성의 중첩 구조에 의해 제약을 받는 대신 UI 구조를 임의의 URL에 매핑 할 수 있습니다. - -기타 고급 사용법은 [예제](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js)를 확인 하십시오. diff --git a/docs/kr/installation.md b/docs/kr/installation.md deleted file mode 100644 index 1def91f0c..000000000 --- a/docs/kr/installation.md +++ /dev/null @@ -1,44 +0,0 @@ -# 설치 - -### 직접 다운로드 / CDN - -[https://unpkg.com/vue-router@3/dist/vue-router.js](https://unpkg.com/vue-router@3/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com)은 NPM 기반 CDN 링크를 제공합니다. 위의 링크는 항상 NPM의 최신 릴리스를 가리킵니다. `https://unpkg.com/vue-router@3.0.0/dist/vue-router.js`와 같이 URL을 통해 특정 버전 / 태그를 사용할 수도 있습니다. -<!--/email_off--> - -Vue 다음에 `vue-router`를 포함하면 자동으로 설치됩니다. - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -### NPM - -``` bash -npm install vue-router -``` - -모듈 시스템에서 사용하면 `Vue.use()`를 통해 명시적으로 라우터를 추가해야합니다. - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -전역 스크립트 태그를 사용할 때는 이 작업을 하지 않아도 됩니다. - -### 개발용 빌드 - -최신 dev 빌드를 사용하고 싶은 경우 GitHub에서 직접 복제하고 `vue-router`를 직접 빌드 해야 합니다. - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs/ru/README.md b/docs/ru/README.md deleted file mode 100644 index c21e5cb0c..000000000 --- a/docs/ru/README.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -home: true -heroImage: /logo.png -actionText: Начать знакомство → -actionLink: /ru/installation.html -footer: MIT Licensed | Copyright © 2014-present Evan You, Eduardo San Martin Morote ---- - -Vue Router — официальная библиотека маршрутизации для [Vue.js](https://ru.vuejs.org/). Она глубоко интегрируется с Vue.js и позволяет легко создавать SPA-приложения. Включает следующие возможности: - -- Вложенные маршруты/представления -- Модульная конфигурация маршрутизатора -- Доступ к параметрам маршрута, query, wildcards -- Анимация переходов представлений на основе Vue.js -- Удобный контроль навигации -- Автоматическое проставление активного CSS класса для ссылок -- Режимы работы HTML5 history или хэш, с авто-переключением в IE9 -- Настраиваемое поведение прокрутки страницы - -[Начать знакомство](./guide/) или поиграться с [примерами](https://github.com/vuejs/vue-router/tree/dev/examples) (см. [`README.md`](https://github.com/vuejs/vue-router/) для их запуска). - -<HomeSponsors /> diff --git a/docs/ru/api/README.md b/docs/ru/api/README.md deleted file mode 100644 index 6a00d2531..000000000 --- a/docs/ru/api/README.md +++ /dev/null @@ -1,642 +0,0 @@ ---- -sidebar: auto ---- - -# Справочник API - -## `<router-link>` - -`<router-link>` — это компонент предназначенный для навигации пользователя в приложении с клиентской маршрутизацией. Путь назначения указывается входным параметром `to`. По умолчанию компонент рендерится в тег `<a>` с корректным значением `href`, но это можно изменить входным параметром `tag`. Кроме того, ссылка автоматически получает активный класс CSS при переходе на путь назначения. - -`<router-link>` предпочтительнее `<a href="...">` по следующим причинам: - -- Он работает одинаково вне зависимости от режима работы (HTML5 history или хэш), поэтому если вы решите переключить режим, или маршрутизатор для совместимости переключится обратно в режим хэша в IE9, ничего не потребуется изменять. -- В режиме HTML5 history, `router-link` будет перехватывать событие click, чтобы браузер не пытался перезагрузить страницу. -- При использовании опции `base` в режиме работы HTML5 history, вам не потребуется добавлять её в URL входного параметра `to`. - -### `v-slot` API (3.1.0+) - -`router-link` предоставляет возможность более низкоуровневой настройки с помощью [слота с ограниченной областью видимости](https://ru.vuejs.org/v2/guide/components-slots.html#%D0%A1%D0%BB%D0%BE%D1%82%D1%8B-%D1%81-%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C%D1%8E-%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8). Это более продвинутое API ориентировано в первую очередь на создателей библиотек, но может пригодиться и разработчикам, к примеру для создании пользовательских компонентов таких как _NavLink_ или подобных. - -**При использовании API `v-slot` необходимо передавать один дочерний элемент в `router-link`**. Если этого не сделать, `router-link` обернёт все дочерние элементы в `span`. - -```html -<router-link - to="/about" - custom - v-slot="{ href, route, navigate, isActive, isExactActive }" -> - <NavLink :active="isActive" :href="href" @click="navigate"> - {{ route.fullPath }} - </NavLink> -</router-link> -``` - -- `href`: разрешённый URL. Это будет атрибутом `href` для элемента `a` -- `route`: разрешённый нормализованный маршрут -- `navigate`: функция для запуска навигации. **Она автоматически предотвращает события, когда это необходимо**, аналогичным способом, как это делает `router-link` -- `isActive`: `true` если [активный класс](#active-class) должен применяться. Позволяет применить произвольный класс -- `isExactActive`: `true` если [активный класс при точном совпадении пути](#exact-active-class) должен применяться. Позволяет применить произвольный класс - -### Пример: Добавление активного класса к внешнему элементу - -Иногда может потребоваться применять активный класс к внешнему элементу, а не к тегу `<a>`, в этом случае можно обернуть этот элемент в `<router-link>` и использовать свойства `v-slot` для создания ссылки: - -```html -<router-link - to="/foo" - custom - v-slot="{ href, route, navigate, isActive, isExactActive }" -> - <li - :class="[isActive && 'router-link-active', isExactActive && 'router-link-exact-active']" - > - <a :href="href" @click="navigate">{{ route.fullPath }}</a> - </li> -</router-link> -``` - -:::tip ПРИМЕЧАНИЕ -При добавлении `target="_blank"` на элемент `a`, необходимо опустить обработчик `@click="navigate"`. -::: - -## Входные параметры `<router-link>` - -### to - -- тип: `string | Location` -- обязательный - - Определяет итоговый маршрут ссылки. При нажатии, значение входного параметра `to` будет передано в `router.push()` — поэтому это значение может быть как строкой, так и объектом описывающим маршрут. - - ```html - <!-- строка --> - <router-link to="home">Home</router-link> - <!-- отобразится в --> - <a href="home">Home</a> - - <!-- javascript-выражение с использованием `v-bind` --> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- можно опустить `v-bind`, аналогично другим входным параметрам --> - <router-link :to="'home'">Home</router-link> - - <!-- даст тот же результат --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- именованный маршрут --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- с использованием query-строки, получим `/register?plan=private` --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}"> - Регистрация - </router-link> - ``` - -### replace - -- тип: `boolean` -- по умолчанию: `false` - - Указание входного параметра `replace` вызовет `router.replace()` вместо `router.push()` при нажатии на ссылку, поэтому навигация не оставит записи в истории переходов. - - ```html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -### append - -- тип: `boolean` -- по умолчанию: `false` - - Указание входного параметра `append` будет добавлять относительный путь к текущему. Например, если мы переходим от `/a` к относительной ссылке `b`, то без `append` будет адрес `/b`, а вместе с `append` получится `/a/b`. - - ```html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -### tag - -- тип: `string` -- по умолчанию: `"a"` - - Иногда необходимо чтобы `<router-link>` отображался другим тегом, например `<li>`. В таком случае мы можем использовать входной параметр `tag`, чтобы указать нужный тег, и он всё равно будет прослушивать события click для навигации. - - ```html - <router-link to="/foo" tag="li">foo</router-link> - <!-- отобразится как --> - <li>foo</li> - ``` - -### active-class - -- тип: `string` -- по умолчанию: `"router-link-active"` - - Указание активного CSS класса, который применяется когда ссылка активна. Обратите внимание, что значение по умолчанию можно задать глобально в опции `linkActiveClass` конструктора маршрутизатора. - -### exact - -- тип: `boolean` -- по умолчанию: `false` - - Стандартное поведение сопоставления, когда выставляется активный класс, основывается на **совпадениях по включению**. Например, `<router-link to="/a">` будет получать класс активности и когда текущий путь начинается с `/a/` и когда с `/a`. - - Обратите внимание, поэтому `<router-link to="/">` будет активным для каждого маршрута! Для «режима точного соответствия» укажите в ссылке входной параметр `exact`: - - ```html - <!-- эта ссылка будет активной только для адреса `/` --> - <router-link to="/" exact></router-link> - ``` - - Ознакомьтесь с другими примерами активных классов ссылок [вживую](https://jsfiddle.net/8xrk1n9f/). - -### exact-path - -> Добавлено в версии 3.5.0 - -- тип: `boolean` -- по умолчанию: `false` - - Позволяет использовать сопоставление только на секции `path` в URL, позволяя эффективно игнорировать секции `query` и `hash`. - - ```html - <!-- ссылка будет активной для `/search?page=2` или `/search#filters` --> - <router-link to="/search" exact-path> </router-link> - ``` - -### exact-path-active-class - -- тип: `string` -- по умолчанию: `"router-link-exact-path-active"` - - Указание активного CSS класса, который применяется когда ссылка активна по сопоставлению `path`. Обратите внимание, что значение по умолчанию можно задать глобально в опции `linkExactPathActiveClass` конструктора маршрутизатора. - -### event - -- тип: `string | Array<string>` -- по умолчанию: `'click'` - - Определение события (событий), которые будут вызывать навигацию по ссылке. - -### exact-active-class - -- тип: `string` -- по умолчанию: `"router-link-exact-active"` - - Указание активного CSS класса, который применяется когда ссылка активна с точным соответствием пути. Обратите внимание, что значение по умолчанию можно задать глобально в опции `linkExactActiveClass` конструктора маршрутизатора. - -### aria-current-value - -- тип: `'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false'` -- по умолчанию: `"page"` - - Настройка значения `aria-current` когда ссылка активна по точному (exact) совпадению. Это должно быть одно из [разрешённых значений для aria-current](https://www.w3.org/TR/wai-aria-1.2/#aria-current) спецификации ARIA. В большинстве случаев наиболее подходящим значением будет `page`. - -## `<router-view>` - -Функциональный компонент `<router-view>` отображает компонент соответствующий данному маршруту. Компоненты внутри `<router-view>` также могут содержать в шаблоне собственный `<router-view>` (он будет использован для отображения компонентов вложенных маршрутов). - -Все остальные входные параметры передаются в отображаемый компонент, однако данные маршрута удобнее получать из `$route.params` текущего маршрута. - -Поскольку это всего лишь компонент, он работает вместе с `<transition>` и `<keep-alive>`. При одновременном использовании обоих обязательно располагайте `<keep-alive>` внутри: - -```html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` - -## Входные параметры `<router-view>` - -### name - -- тип: `string` -- по умолчанию: `"default"` - - Наличие имени у `<router-view>` определяет отображение компонента с соответствующим именем из опции `components` сопоставленного маршрута. Подробности и примеры использования этой возможности в разделе [именованных представлений](../guide/essentials/named-views.md). - -## Опции конструктора Router - -### routes - -- тип: `Array<RouteConfig>` - - Декларация типа для `RouteConfig`: - - ```ts - interface RouteConfig = { - path: string, - component?: Component, - name?: string, // для именованных маршрутов - components?: { [name: string]: Component }, // для именованных представлений - redirect?: string | Location | Function, - props?: boolean | Object | Function, - alias?: string | Array<string>, - children?: Array<RouteConfig>, // для вложенных маршрутов - beforeEnter?: (to: Route, from: Route, next: Function) => void, - meta?: any, - - // Добавлено в версии 2.6.0+ - caseSensitive?: boolean, // учитывать регистр при сравнении? (по умолчанию: false) - pathToRegexpOptions?: Object // настройки path-to-regexp для компиляции regex - } - ``` - -### mode - -- тип: `string` - -- по умолчанию: `"hash" (in browser) | "abstract" (in Node.js)` - -- возможные значения: `"hash" | "history" | "abstract"` - - Определяет режим работы маршрутизатора. - - - `hash`: используется хэш URL для маршрутизации. Работает во всех совместимых с Vue браузерами, даже тех, что не поддерживают HTML5 History API. - - - `history`: требует поддержки HTML5 History API и конфигурации сервера. Подробнее в разделе [Режим HTML5 History](../guide/essentials/history-mode.md). - - - `abstract`: работает во всех JavaScript-окружениях, например при серверном рендеринге с помощью Node.js. **Маршрутизатор автоматически переключается в этот режим, если не обнаружит API браузера.** - -### base - -- тип: `string` - -- по умолчанию: `"/"` - - Базовый URL приложения. Например, если SPA расположено по пути `/app/`, тогда `base` должно иметь значение `"/app/"`. - -### linkActiveClass - -- тип: `string` - -- по умолчанию: `"router-link-active"` - - Глобальная настройка активного класса по умолчанию для `<router-link>`. Подробнее в опции [router-link](#router-link). - -### linkExactActiveClass - -- тип: `string` - -- по умолчанию: `"router-link-exact-active"` - - Глобальная настройка активного класса по умолчанию при точном совпадении маршрута для `<router-link>`. Подробнее в опции [router-link](#router-link). - -### scrollBehavior - -- тип: `Function` - - Сигнатура: - - ```ts - type PositionDescriptor = - { x: number, y: number } | - { selector: string } | - void - - type scrollBehaviorHandler = ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => PositionDescriptor | Promise<PositionDescriptor> - ``` - - Подробнее в разделе настройки [поведения прокрутки страницы](../guide/advanced/scroll-behavior.md). - -### parseQuery / stringifyQuery - -- тип: `Function` - - Указание пользовательских функций для парсинга строки запроса / приведения к строке запроса (stringify). Переопределяют реализации по умолчанию. - -### fallback - -- тип: `boolean` - -- по умолчанию: `true` - - Определяет, должен ли маршрутизатор возвращаться в режим `hash`, когда браузер не поддерживает `history.pushState`. - - Установка этой опции в `false` будет приводить к полному обновлению страницы в IE9 для каждой навигации через `<router-link>`. Это полезно, когда приложение рендерится на стороне сервера (SSR) и должно работать в IE9, потому что режим `hash` не работает с серверным рендерингом. - -## Свойства экземпляра Router - -### router.app - -- тип: `Vue instance` - - Корневой экземпляр Vue, в который внедряется `router`. - -### router.mode - -- тип: `string` - - [Режим работы](./#mode), используемый маршрутизатором. - -### router.currentRoute - -- тип: `Route` - - Текущий маршрут в виде [объекта Route](#объект-route). - -### router.START_LOCATION - -- тип: `Route` - - Первоначальная навигация будет [объектом Route](#объект-route) с которого запускается маршрутизатор. Можно использовать в навигационных хуках для определения стартовой навигации. - - ```js - import VueRouter from 'vue-router' - - const router = new VueRouter({ - // ... - }) - - router.beforeEach((to, from) => { - if (from === VueRouter.START_LOCATION) { - // первоначальная навигация - } - }) - ``` - -## Методы экземпляра Router - -### router.beforeEach - -### router.beforeResolve - -### router.afterEach - -Сигнатуры: - -```js -router.beforeEach((to, from, next) => { - /* необходимо вызывать `next` */ -}) - -router.beforeResolve((to, from, next) => { - /* необходимо вызывать `next` */ -}) - -router.afterEach((to, from) => {}) -``` - -Добавляют глобальные навигационные хуки. Подробнее в разделе [Навигационные хуки](../guide/advanced/navigation-guards.md). - -Все три метода возвращают функцию для удаления зарегистрированного хука. - -### router.push - -### router.replace - -### router.go - -### router.back - -### router.forward - -Сигнатуры: - -```js -router.push(location, onComplete?, onAbort?) -router.push(location).then(onComplete).catch(onAbort) -router.replace(location, onComplete?, onAbort?) -router.replace(location).then(onComplete).catch(onAbort) -router.go(n) -router.back() -router.forward() -``` - -Программная навигация на новый URL. Подробнее в разделе [программная навигация](../guide/essentials/navigation.md). - -### router.getMatchedComponents - -Сигнатура: - -```js -const matchedComponents: Array<Component> = router.getMatchedComponents(location?) -``` - -Возвращает массив компонентов (определение/конструктор, не экземпляры) сопоставленные для указанного адреса или текущего маршрута. В основном это используется для рендеринга на стороне сервера, чтобы выполнить предварительную загрузку данных. - -### router.resolve - -Сигнатура: - -```js -const resolved: { - location: Location; - route: Route; - href: string; -} = router.resolve(location, current?, append?) -``` - -Обратное разрешение URL, чтобы получить местоположение в формате, аналогичном используемому в `<router-link/>`. - -- `current` текущий маршрут по умолчанию (в большинстве случаев не требуется это менять) -- `append` позволяет вам добавить путь к маршруту `current` (как и в [`router-link`](#router-link-props)) - -### router.addRoutes - -_УСТАРЕВШИЙ_: используйте вместо метод [`router.addRoute()`](#router-addroute). - -Сигнатура: - -```ts -router.addRoutes(routes: Array<RouteConfig>) -``` - -Динамически добавляет дополнительные маршруты в маршрутизатор. Аргумент должен быть массивом маршрутов в таком же формате, как и в опции `routes` конструктора. - -### router.addRoute - -> Добавлено в версии 3.5.0 - -Добавляет новый маршрут в маршрутизатор. Если у маршрута указан `name` и уже существует маршрут с таким же именем, то он будет перезаписан. - -Сигнатура: - -```ts -addRoute(route: RouteConfig): () => void -``` - -### router.addRoute - -> Добавлено в версии 3.5.0 - -Добавляет новый маршрут в качестве дочернего для существующего маршрута. Если у маршрута указан `name` и уже существует маршрут с таким же именем, то он будет перезаписан. - -Сигнатура: - -```ts -addRoute(parentName: string, route: RouteConfig): () => void -``` - -### router.getRoutes - -> Добавлено в версии 3.5.0 - -Получение списка записей всех активных маршрутов. **Обратите внимание, что только задокументированные свойства считаются публичным API**, поэтому следует избегать использования любых других свойств, например `regex`, так как их уже не будет в Vue Router 4. - -Сигнатура: - -```ts -getRoutes(): RouteRecord[] -``` - -### router.onReady - -Сигнатура: - -```js -router.onReady(callback, [errorCallback]) -``` - -Регистрирует коллбэк, который будет вызван когда маршрутизатор завершит начальную навигацию, когда будут завершены все асинхронные хуки и готовы асинхронные компоненты, связанные с начальным маршрутом. - -Пригодится при рендеринге на стороне сервера, чтобы обеспечить консистентный результат как на сервере, так и на клиенте. - -Второй аргумент `errorCallback` поддерживается только в версиях 2.4+. Он вызывается когда начальное разрешение маршрута заканчивается ошибкой (например, не удалось разрешить асинхронный компонент). - -### router.onError - -Сигнатура: - -```js -router.onError(callback) -``` - -Регистрирует коллбэк, который будет вызван при обнаружении ошибок во время навигации по маршруту. Обратите внимание, что он вызывается в одном из следующих сценариев: - -- Ошибка произошла синхронно внутри функции маршрута; - -- Ошибка фиксируется и асинхронно обрабатывается с помощью `next(err)` внутри функции навигационного хука; - -- Произошла ошибка при попытке разрешить асинхронный компонент, необходимый для отображения маршрута. - -## Объект Route - -**Объект Route** представляет собой состояние текущего активного маршрута. Он содержит информацию о текущем URL и **записи маршрутов**, сопоставленные с ним. - -Объект маршрута иммутабелен. Каждая успешная навигация создаёт новый объект маршрута. - -Объект маршрута встречается в нескольких местах: - -- Внутри компонентов как `this.$route` - -- Внутри коллбэка при отслеживании изменений `$route` - -- Как возвращаемое значение при вызове `router.match(location)` - -- В качестве двух первых параметров навигационных хуков: - - ```js - router.beforeEach((to, from, next) => { - // как `to` так и `from` являются объектами маршрута - }) - ``` - -- В качестве двух первых параметров функции `scrollBehavior`: - - ```js - const router = new VueRouter({ - scrollBehavior(to, from, savedPosition) { - // как `to` так и `from` являются объектами маршрута - } - }) - ``` - -### Свойства объекта Route - -- **\$route.path** - - - тип: `string` - - Строка пути текущего маршрута, всегда в абсолютном формате, например `"/foo/bar"`. - -- **\$route.params** - - - тип: `Object` - - Объект, который содержит пары ключ/значение динамических сегментов маршрута (включая \*-сегменты). Если параметров нет, то значением будет пустой объект. - -- **\$route.query** - - - тип: `Object` - - Объект, который содержит пары ключ/значение строки запроса (query string). Например, для пути `/foo?user=1` получим `$route.query.user == 1`. Если строки запроса нет, то значением будет пустой объект. - -- **\$route.meta** - - - тип: `Object` - - Объект, который содержит пары ключ/значение объекта meta для маршрута. Если у объекте meta нет свойств, то значением будет пустой объект. - -- **\$route.hash** - - - тип: `string` - - Хэш текущего маршрута (вместе с символом `#`) при его наличии. Если хэша нет, то значением будет пустая строка. - -- **\$route.fullPath** - - - тип: `string` - - Полная запись URL-адреса, включая строку запроса и хэш. - -- **\$route.matched** - - - тип: `Array<RouteRecord>` - - Массив с **записями маршрутов** для всех вложенных сегментов текущего маршрута. Записи маршрутов — это копии объектов из опции `routes` (и вложенных массивов `children`): - - ```js - const router = new VueRouter({ - routes: [ - // объект ниже — это запись маршрута - { - path: '/foo', - component: Foo, - children: [ - // это — тоже запись маршрута - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - -Для URL `/foo/bar`, значение `$route.matched` будет массивом, содержащим копии объектов (клоны), в порядке сортировки от родителя к потомку. - -- **\$route.name** - - Имя текущего маршрута, если было указано. (Подробнее в разделе [именованные маршруты](../guide/essentials/named-routes.md)) - -- **\$route.redirectedFrom** - - Имя маршрута с которого произошло перенаправление, если было указано. (Подробнее в разделе [перенаправления и псевдонимы](../guide/essentials/redirect-and-alias.md)) - -## Интеграция в компоненты - -### Внедряемые в компоненты свойства - -Эти свойства внедряются в каждый дочерний компонент, передавая экземпляр маршрутизатора в корневой экземпляр в качестве опции `router`. - -- **this.\$router** - - Экземпляр маршрутизатора. - -- **this.\$route** - - Текущий активный [маршрут](#объект-route). Это свойство только для чтения и все его свойства иммутабельны, но можно отслеживать их изменения. - -### Добавляемые опции в компонент - -- **beforeRouteEnter** -- **beforeRouteUpdate** -- **beforeRouteLeave** - - Подробнее в разделе [Навигационные хуки компонентов](../guide/advanced/navigation-guards.md#incomponent-guards). diff --git a/docs/ru/guide/README.md b/docs/ru/guide/README.md deleted file mode 100644 index cf31e84d5..000000000 --- a/docs/ru/guide/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# Начало работы - -::: tip Примечание -Мы будем использовать синтаксис [ES2015](https://github.com/lukehoban/es6features) в примерах кода в этом руководстве. - -Кроме того, все примеры будут использовать полную сборку Vue, чтобы позволить компиляцию шаблонов на лету. Подробнее о различиях сборок читайте [здесь](https://ru.vuejs.org/v2/guide/installation.html#Runtime-Компилятор-vs-Runtime-only). -::: - -Создавать одностраничные приложения (SPA) используя Vue + Vue Router очень просто: с помощью Vue.js, мы уже компонуем своё приложение из компонентов. Добавляя Vue Router, мы просто сопоставляем наши компоненты с маршрутами и объясняем Vue Router где их отображать. Вот простой пример: - -## HTML - -```html -<script src="https://unpkg.com/vue@2/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script> - -<div id="app"> - <h1>Первое приложение!</h1> - <p> - <!-- используем компонент router-link для навигации --> - <!-- входной параметр `to` определяет URL для перехода --> - <!-- `<router-link>` по умолчанию отображается тегом `<a>` --> - <router-link to="/foo">Перейти к Foo</router-link> - <router-link to="/bar">Перейти к Bar</router-link> - </p> - <!-- отображаем тут компонент, для которого совпадает маршрут --> - <router-view></router-view> -</div> -``` - -## JavaScript - -```js -// 0. Если используем модульную систему (например через vue-cli), -// импортируем Vue и VueRouter и затем вызываем `Vue.use(VueRouter)`. - -// 1. Определяем компоненты для маршрутов. -// Они могут быть импортированы из других файлов -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. Определяем несколько маршрутов -// Каждый маршрут должен указывать на компонент. -// "Компонентом" может быть как конструктор компонента, созданный -// через `Vue.extend()`, так и просто объект с опциями компонента. -// Мы поговорим о вложенных маршрутах позднее. -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. Создаём экземпляр маршрутизатора и передаём маршруты в опции `routes` -// Вы можете передавать и дополнительные опции, но пока не будем усложнять. -const router = new VueRouter({ - routes // сокращённая запись для `routes: routes` -}) - -// 4. Создаём и монтируем корневой экземпляр приложения. -// Убедитесь, что передали экземпляр маршрутизатора в опции -// `router`, чтобы позволить приложению знать о его наличии. -const app = new Vue({ - router -}).$mount('#app') - -// Всё, приложение работает! ;) -``` - -Внедряя маршрутизатор, мы сможем получить к нему доступ через `this.$router`, а также к текущему маршруту через `this.$route` внутри любого компонента: - -```js -// Home.vue -export default { - computed: { - username() { - // Мы скоро разберём что такое `params` - return this.$route.params.username - } - }, - methods: { - goBack() { - window.history.length > 1 ? this.$router.go(-1) : this.$router.push('/') - } - } -} -``` - -В документации мы будем часто использовать экземпляр `router` (маршрутизатора). Имейте ввиду, что `this.$router` в точности то же самое, что и `router`. Причина, почему используем `this.$router` заключается в том, что мы не хотим импортировать маршрутизатор в каждом компоненте, в котором потребуется управлять маршрутизацией. - -Вы также можете увидеть этот пример вживую [здесь](https://jsfiddle.net/yyx990803/xgrjzsup/). - -Обратите внимание, что `<router-link>` автоматически получает класс `.router-link-active` при совпадении маршрута. Подробнее об этом можно узнать в [справочнике API](../api/#router-link). diff --git a/docs/ru/guide/advanced/data-fetching.md b/docs/ru/guide/advanced/data-fetching.md deleted file mode 100644 index cec068029..000000000 --- a/docs/ru/guide/advanced/data-fetching.md +++ /dev/null @@ -1,110 +0,0 @@ -# Загрузка данных - -Нередко при переходе между маршрутами требуется получить от сервера какие-либо данные. Например, перед отображением профиля пользователя нужно загрузить данные о нём. Этой цели можно достичь двумя различными путями: - -- **Загрузить данные после перехода**: сначала перейти к новому маршруту, затем загрузить данные в хуке жизненного цикла целевого компонента. По мере загрузки данных отобразить индикатор состояния загрузки. - -- **Загрузить данные перед переходом**: загрузить данные в навигационном хуке роутера, и завершить навигацию уже когда они будут получены. - -С технической точки зрения, оба способа годятся — выбор зависит от того, какой UX вы хотите получить. - -## Загрузка данных после перехода - -При использовании этого подхода, мы осуществляем переход и рендеринг целевого компонента сразу же, а данные запрашиваем в хуке `created` компонента. Это позволяет нам отобразить состояние загрузки, пока данные подтягиваются по сети, причём имея возможность сделать это различным образом для разных компонентов. - -Предположим, у нас есть компонент `Post`, которому требуется загрузить с сервера данные, соответствующие id поста из `$route.params.id`: - -```html -<template> - <div class="post"> - <div v-if="loading" class="loading"> - Загрузка... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -```js -export default { - data() { - return { - loading: false, - post: null, - error: null - } - }, - created() { - // загружаем данные, когда представление создано - // и данные реактивно отслеживаются - this.fetchData() - }, - watch: { - // при изменениях маршрута запрашиваем данные снова - $route: 'fetchData' - }, - methods: { - fetchData() { - this.error = this.post = null - this.loading = true - // замените `getPost` используемым методом получения данных / доступа к API - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## Загрузка данных перед переходом - -Используя этот подход, мы запрашиваем данные до завершения перехода к новому маршруту. Запрос данных выполняется в навигационном хуке `beforeRouteEnter` компонента, который вызывает `next`, когда данные получены: - -```js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter(to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // если путь изменяется, а компонент уже отображён, - // то логика будет немного иной - beforeRouteUpdate(to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData (err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -Пользователь останется на предыдущей странице, пока не загрузятся данные новой. По этой причине мы советуем отображать какой-нибудь индикатор загрузки. Кроме того, если загрузка данных не удастся, следует отобразить глобальное сообщение об ошибке. diff --git a/docs/ru/guide/advanced/lazy-loading.md b/docs/ru/guide/advanced/lazy-loading.md deleted file mode 100644 index ebaeffc1b..000000000 --- a/docs/ru/guide/advanced/lazy-loading.md +++ /dev/null @@ -1,50 +0,0 @@ -# Ленивая загрузка маршрутов - -При использовании модульной системы, итоговая JavaScript-сборка может оказаться довольно большой, что негативно отразится на времени загрузки страницы. В некоторых случаях было бы эффективнее разделить компоненты каждого маршрута на отдельные фрагменты, и подгружать их только при переходе к соответствующему маршруту. - -Совместное использование [асинхронной загрузки компонентов](https://ru.vuejs.org/v2/guide/components-dynamic-async.html#Асинхронные-компоненты) Vue и [возможностей по разделению кода](https://webpack.js.org/guides/code-splitting-async/) Webpack делает реализацию ленивой загрузки компонентов в зависимости от маршрутов тривиальной. - -Во-первых, асинхронный компонент можно определить как функцию-фабрику, которая возвращает Promise (который должен разрешиться самим компонентом): - -```js -const Foo = () => - Promise.resolve({ - /* определение компонента */ - }) -``` - -Во-вторых, с Webpack 2 мы можем использовать синтаксис [динамических импортов](https://github.com/tc39/proposal-dynamic-import) для указания точек разделения кода: - -```js -import('./Foo.vue') // возвращает Promise -``` - -::: tip Примечание -Если вы используете Babel, то необходимо добавить плагин [syntax-dynamic-import](https://babeljs.io/docs/plugins/syntax-dynamic-import/), чтобы Babel смог корректно обработать синтаксис. -::: - -Эти два пункта — всё необходимое, чтобы определить асинхронный компонент, который Webpack автоматически выделит в отдельный фрагмент: - -```js -const Foo = () => import('./Foo.vue') -``` - -В конфигурации маршрута ничего менять не нужно, можно использовать `Foo` как обычно: - -```js -const router = new VueRouter({ - routes: [{ path: '/foo', component: Foo }] -}) -``` - -## Группировка компонентов в одном фрагменте - -Иногда может понадобиться объединить в одном фрагменте все компоненты, расположенные по определённому маршруту. Для этого можно указывать [имена фрагментов Webpack](https://webpack.js.org/api/module-methods/#magic-comments), используя специальный синтаксис комментариев (в версиях Webpack > 2.4): - -```js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -Webpack сгруппирует все одноимённые асинхронные модули в одном фрагменте. diff --git a/docs/ru/guide/advanced/meta.md b/docs/ru/guide/advanced/meta.md deleted file mode 100644 index 298789a59..000000000 --- a/docs/ru/guide/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# Метаданные маршрутов - -Иногда может быть удобным добавить дополнительную информацию к маршрутам, например имена анимаций переходов, кто может получить доступ к маршруту и т.д. Этого можно достичь с помощью свойства `meta`, которое принимает объект свойств и к которому можно получить доступ на странице маршрута или в навигационных хуках. Свойства `meta` можно объявить так: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // метаданные - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -Как получить к нему доступ? - -Прежде всего, каждый объект маршрута в конфигурации `routes` называется **записью маршрута**. Записи маршрутов могут быть вложенными. Поэтому, при совпадении маршрута, потенциально могут быть активированы несколько записей маршрутов. - -Например, для конфигурации выше, URL `/foo/bar` совпадёт как с родительской, так и с дочерней записями маршрутов. - -Все совпавшие записи маршрутов оказываются доступны через объект `$route` (а также через объекты маршрутов в сторожевых хуках), в виде массива `$route.matched`. Таким образом, для проверки метаданных в записях маршрутов нам понадобится обойти `$route.matched` в цикле. - -В качестве примера можно привести проверку метаданных в глобальном навигационном хуке: - -```js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // этот путь требует авторизации, проверяем залогинен ли - // пользователь, и если нет, перенаправляем на страницу логина - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // всегда так или иначе нужно вызвать next()! - } -}) -``` diff --git a/docs/ru/guide/advanced/navigation-failures.md b/docs/ru/guide/advanced/navigation-failures.md deleted file mode 100644 index b7bcf9a7f..000000000 --- a/docs/ru/guide/advanced/navigation-failures.md +++ /dev/null @@ -1,65 +0,0 @@ -# Сбои при навигации - -> Добавлено в версии 3.4.0 - -При использовании `router-link` Vue Router вызывает `router.push` для запуска навигации. В большинстве случаев ожидаемое поведение ссылок заключается в переходе на новую страницу, но есть несколько ситуаций при которых пользователь остаётся на той же странице: - -- Пользователь уже находится на странице, на которую пытается перейти -- [Навигационный хук](./navigation-guards.md) прерывает навигацию вызовом `next(false)` -- [Навигационный хук](./navigation-guards.md) выбрасывает ошибку или вызывает `next(new Error())` - -При использовании компонента `router-link` **ни один из этих случаев не будет логироваться как ошибка**. Однако при использовании `router.push` или `router.replace` можно столкнуться с сообщением _"Uncaught (in promise) Error"_ после которого в консоли последует более конкретное сообщение. Давайте разберемся как отличать _сбои навигации_. - -::: tip История вопроса -В версии 3.2.0, _навигационные сбои_ доступны через два необязательных коллбэка `router.push`: `onComplete` и `onAbort`. Начиная с версии 3.1.0, `router.push` и `router.replace` возвращают _Promise_ если не указаны коллбэки `onComplete`/`onAbort`. Этот _Promise_ разрешается вместо вызова `onComplete` и отклоняется вместо вызова `onAbort`. - ::: - -## Обнаружение сбоев навигации - -_Сбой навигации_ будет экземпляром `Error` с парой дополнительных свойств. Проверить произошла ли ошибка в маршрутизаторе можно с помощью функции `isNavigationFailure`: - -```js -import VueRouter from 'vue-router' -const { isNavigationFailure, NavigationFailureType } = VueRouter - -// попытка перехода к странице администрирования -router - .push('/admin') - .catch(failure => { - if (isNavigationFailure(failure, NavigationFailureType.redirected)) { - // отображение уведомления пользователю - showToast('Необходимо авторизоваться для доступа к панели администрирования') - } - }) -``` - -::: tip СОВЕТ -Если опустить второй параметр в `isNavigationFailure(failure)`, то будет проверяться только, является ли ошибка _сбоем навигации_. -::: - -## Тип `NavigationFailureType` - -Тип `NavigationFailureType` поможет разработчикам определять тип _навигационного сбоя_. Существует 4 различных типа: - -- `redirected`: внутри навигационного хука был вызван `next(newLocation)` для перенаправления в другое место. -- `aborted`: внутри навигационного хука был вызван `next(false)` для отмены навигации. -- `cancelled`: произошла полностью новая навигация до того, как текущая могла закончиться. Например, во время ожидания внутри навигационного хука был вызван `router.push`. -- `duplicated`: навигация была предотвращена, потому что уже находимся в месте назначения. - -## Свойства _ошибок навигации_ - -Все сбои навигации предоставляют доступ к свойствам `to` и `from`, отображающие для навигации в которой произошёл сбой местоположение места назначения и текущее местоположение соответственно: - -```js -// попытка получения доступа к странице администрирования -router - .push('/admin') - .catch(failure => { - if (isNavigationFailure(failure, NavigationFailureType.redirected)) { - console.log(failure.to.path) // '/admin' - console.log(failure.from.path) // '/' - } - }) -``` - -Во всех случаях значения `to` и `from` будут объектами нормализованных маршрутов. diff --git a/docs/ru/guide/advanced/navigation-guards.md b/docs/ru/guide/advanced/navigation-guards.md deleted file mode 100644 index a1a380237..000000000 --- a/docs/ru/guide/advanced/navigation-guards.md +++ /dev/null @@ -1,181 +0,0 @@ -# Навигационные хуки - -Как следует из названия, навигационные хуки `vue-router` используются для перенаправлений или отмены навигационных переходов. Есть несколько способов внедрить навигационный хук: глобально, для конкретного маршрута, или для конкретного компонента. - -Следует помнить, что **изменение параметров маршрута не вызывает выполнения навигационных хуков enter/leave**. Вы можете добавить [watch на объект `$route`](../essentials/dynamic-matching.md#отсnеживание-изменений-параметров) для отслеживания этих изменений, или использовать хук `beforeRouteUpdate`. - -## Глобальные хуки (до навигационных хуков) - -Глобальный хук можно зарегистрировать через `router.beforeEach`: - -```js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -Глобальные навигационные хуки вызываются в порядке их создания при каждом навигационном переходе. Допускается асинхронное разрешение хуков — в этом случае переход считается **незавершённым** до тех пор, пока не будут разрешены все хуки. - -В каждый навигационный хук передаётся три параметра: - -- **`to: Route`**: целевой [объект Route](../../api/#объект-route), к которому осуществляется переход. - -- **`from: Route`**: текущий маршрут, с которого осуществляется переход к новому. - -- **`next: Function`**: функция, вызов которой **разрешает** хук. В зависимости от переданных в `next` аргументов, результатом будет: - - - **`next()`**: переход к следующему хуку в цепочке. Если хуков больше нет, переход считается **подтверждённым**. - - - **`next(false)`**: отмена перехода. Если URL был изменён (вручную пользователем, или кнопкой "назад"), он будет сброшен на соответствующий маршрут `from`. - - - **`next('/')` или `next({ path: '/' })`**: перенаправление на другой маршрут. Текущий переход будет отменён, и процесс начнётся заново для нового маршрута. Вы можете передать любой объект местоположения в `next`, который позволяет вам указывать опции такие как `replace: true`, `name: 'home'` и любой другой параметр используемый во [входном параметре `to` компонента `router-link`](../../api/#to) или [`router.push`](../../api/#router-push) - - - **`next(error)`**: (добавлено в версии 2.4.0+) если аргумент, переданный `next` является экземпляром `Error`, навигация будет прервана и ошибка будет передана в коллбэк, зарегистрированный через [`router.onError()`](../../api/#router-onerror). - -**Убедитесь, что функция `next` будет вызываться в навигационном хуке только 1 раз в любом случае. Вызовы могут встречаться несколько раз, но важно чтобы они не пересекались логически, иначе хук никогда не разрешится или выдаст ошибки.** Вот пример перенаправления пользователя на страницу `/login` если он не авторизован: - -```js -// ПЛОХО -router.beforeEach((to, from, next) => { - if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) - // если пользователь не авторизован, то `next` будет вызываться дважды - next() -}) -``` - -```js -// ХОРОШО -router.beforeEach((to, from, next) => { - if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) - else next() -}) -``` - -## Глобальные хуки разрешения перехода - -Вы можете зарегистрировать глобальный хук с помощью `router.beforeResolve`. Это похоже на `router.beforeEach`, с той разницей, что разрешающий хук будет вызван непосредственно перед подтверждением навигации, **после того, как будут разрешены все хуки компонента и асинхронные компоненты для маршрута**. - -## Глобальные хуки завершения перехода - -Можно также зарегистрировать глобальные хуки, вызываемые после завершения перехода. Однако, в отличие от сторожевых хуков, в них не передаётся функция `next`, и на навигацию они повлиять не могут: - -```js -router.afterEach((to, from) => { - // ... -}) -``` - -## Хуки для конкретных маршрутов - -Навигационные хуки `beforeEnter` можно указать напрямую для конкретного маршрута в его конфигурации: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -Эти хуки имеют точно такую же сигнатуру, как и глобальные хуки. - -## Хуки для конкретных компонентов - -Наконец, навигационный хук можно указать и непосредственно в компоненте (том, что указан в конфигурации маршрута), используя следующие опции: - -- `beforeRouteEnter` -- `beforeRouteUpdate` -- `beforeRouteLeave` - -```js -const Foo = { - template: `...`, - beforeRouteEnter(to, from, next) { - // вызывается до подтверждения пути, соответствующего этому компоненту. - // НЕ ИМЕЕТ доступа к контексту экземпляра компонента `this`, - // так как к моменту вызова экземпляр ещё не создан! - }, - beforeRouteUpdate(to, from, next) { - // вызывается когда маршрут, что рендерит этот компонент изменился, - // но этот компонент будет повторно использован в новом маршруте. - // Например, для маршрута с динамическими параметрами `/foo/:id`, когда мы - // перемещаемся между `/foo/1` и `/foo/2`, экземпляр того же компонента `Foo` - // будет использован повторно, и этот хук будет вызван когда это случится. - // Также имеется доступ в `this` к экземпляру компонента. - }, - beforeRouteLeave(to, from, next) { - // вызывается перед переходом от пути, соответствующего текущему компоненту; - // имеет доступ к контексту экземпляра компонента `this`. - } -} -``` - -Хук `beforeRouteEnter` **НЕ ИМЕЕТ** доступа к `this`, так как к моменту его вызова навигация ещё не подтверждена, а значит и экземпляр компонента ещё не создан. - -Тем не менее, доступ к экземпляру можно получить, передав коллбэк в `next`. Эта функция будет вызвана после подтверждения навигации, а экземпляр компонента будет передан в неё в качестве параметра: - -```js -beforeRouteEnter(to, from, next) { - next(vm => { - // экземпляр компонента доступен как `vm` - }) -} -``` - -Обратите внимание, что `beforeRouteEnter` — единственный хук, который поддерживает передачу коллбэка в `next`. Для `beforeRouteUpdate` и `beforeRouteLeave`, `this` уже доступен, поэтому передача коллбэка не требуется и поэтому _не поддерживается_: - -```js -beforeRouteUpdate(to, from, next) { - // просто используйте `this` - this.name = to.params.name - next() -} -``` - -**Навигационный хук ухода со страницы** обычно используется для предотвращения случайного ухода пользователя со страницы с несохранёнными изменениями. Навигацию можно отменить вызовом `next(false)`. - -```js -beforeRouteLeave(to, from, next) { - const answer = window.confirm('Вы хотите уйти? У вас есть несохранённые изменения!') - if (answer) { - next() - } else { - next(false) - } -} -``` - -При использовании примесей, которые будут добавлять навигационные хуки для компонента, убедитесь, что объявляете примесь **после установки плагина vue-router**: - -```js -Vue.use(Router) - -Vue.mixin({ - beforeRouteUpdate(to, from, next) { - // ... - } -}) -``` - -## Полная цепочка обработки навигации - -1. Срабатывание навигации. -2. Вызов `beforeRouteLeave` хуков в деактивируемых компонентах. -3. Вызов глобальных `beforeEach` хуков. -4. Вызов `beforeRouteUpdate` хука в переиспользуемых компонентах. -5. Вызов `beforeEnter` в конфигурации маршрута. -6. Разрешение асинхронных компонентов для маршрута. -7. Вызов `beforeRouteEnter` в активируемых компонентах. -8. Вызов глобальных `beforeResolve` хуков. -9. Навигация подтверждена. -10. Вызов глобальных `afterEach` хуков. -11. Выполняется обновление DOM. -12. Вызов коллбэков, переданных в `next` в `beforeRouteEnter` хуке с созданными экземплярами. diff --git a/docs/ru/guide/advanced/scroll-behavior.md b/docs/ru/guide/advanced/scroll-behavior.md deleted file mode 100644 index 7b1d8957c..000000000 --- a/docs/ru/guide/advanced/scroll-behavior.md +++ /dev/null @@ -1,95 +0,0 @@ -# Поведение прокрутки страницы - -При переходе между страницами в рамках клиентской маршрутизации, можно сохранять позицию прокрутки для каждой записи в истории (что обычно делают браузеры при работе с традиционными приложениями), или же прокручивать страницу наверх. `vue-router` позволяет использовать оба варианта, и даже более того — позволяет полностью настроить поведение прокрутки при навигации. - -**Примечание: эта возможность работает если браузер поддерживает `history.pushState`.** - -При создании экземпляра маршрутизатора, вы можете указать функцию `scrollBehavior`: - -```js -const router = new VueRouter({ - routes: [...], - scrollBehavior(to, from, savedPosition) { - // возвращаем требуемую позицию прокрутки - } -}) -``` - -Функция `scrollBehavior` получает объекты маршрутов `to` и `from`. В третьем параметре, `savedPosition`, передаётся сохранённая в истории браузера позиция прокрутки (только в случае `popstate`-перехода, вызванного нажатием кнопок вперёд/назад в браузере). - -Функция возвращает объект позиции прокрутки. Он может иметь одну из двух форм: - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset поддерживается в 2.6.0+) - -Если возвращается пустой объект или значение, приводимое к ложному, прокрутки не будет. - -Например: - -```js -scrollBehavior(to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -Таким образом мы заставим браузер прокручивать к началу каждой открытой страницы. - -Возврат `savedPosition` позволяет эмулировать нативное поведение браузера при использовании кнопок назад/вперёд: - -```js -scrollBehavior(to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -Эмулировать поведение "прокрутки к якорю" на странице можно так: - -```js -scrollBehavior(to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - // , offset: { x: 0, y: 10 } - } - } -} -``` - -Можно также использовать [метаданные путей](meta.md) для более сложного управления прокруткой. Полную реализацию этого подхода можно посмотреть в [этом примере](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js). - -## Асинхронная прокрутка - -> Добавлено в версии 2.8.0 - -Можно также вернуть Promise, который разрешится объектом с желаемой позицией прокрутки: - -```js -scrollBehavior(to, from, savedPosition) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ x: 0, y: 0 }) - }, 500) - }) -} -``` - -Это можно связать с событиями компонента transition на уровне страницы, чтобы реализовать такое поведение прокрутки, которое сочетается с анимациями перехода между страницами, но из-за множества возможных вариантов и комплексности примеров, мы просто предоставляем этот простой пример, чтобы показать где можно разместить собственную реализацию. - -## Плавная прокрутка - -Можно включить нативную плавную прокрутку для [браузеров, которые поддерживают её](https://developer.mozilla.org/en-US/docs/Web/API/ScrollToOptions/behavior), просто добавив опцию `behavior` к объекту, возвращаемому из `scrollBehavior`: - -```js -scrollBehavior(to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash, - behavior: 'smooth', - } - } -} -``` diff --git a/docs/ru/guide/advanced/transitions.md b/docs/ru/guide/advanced/transitions.md deleted file mode 100644 index 1adf3cf2a..000000000 --- a/docs/ru/guide/advanced/transitions.md +++ /dev/null @@ -1,58 +0,0 @@ -# Анимация переходов - -Поскольку `<router-view>` — это просто динамический компонент, к нему можно применять анимацию перехода с помощью `<transition>`: - -```html -<transition> - <router-view></router-view> -</transition> -``` - -Всё, [что сказано о `<transition>` в документации Vue](https://ru.vuejs.org/v2/guide/transitions.html), применимо и здесь. - -## Анимация переходов для конкретных маршрутов - -Синтаксис выше применяет одну и ту же анимацию перехода для всех маршрутов. Если для различных маршрутов хочется указать разные анимационные эффекты, можно использовать разноимённые `<transition>` непосредственно в шаблонах компонентов: - -```js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -## Динамическая анимация для маршрутов - -Можно также определять анимацию перехода для маршрутов динамически, в зависимости от соотношения между старым и новым маршрутом: - -```html -<!-- используем динамическое имя анимационного перехода --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -```js -// затем, в родительском компоненте, будем следить за переменной `$route`, -// чтобы определить, какой анимационный переход применять -watch: { - $route(to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -Полный пример можно посмотреть [здесь](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js). diff --git a/docs/ru/guide/essentials/dynamic-matching.md b/docs/ru/guide/essentials/dynamic-matching.md deleted file mode 100644 index ad7c5bcba..000000000 --- a/docs/ru/guide/essentials/dynamic-matching.md +++ /dev/null @@ -1,104 +0,0 @@ -# Динамические пути - -Очень часто нам требуется сопоставить маршруты с заданным шаблоном с одним и тем же компонентом. Например, у нас может быть компонент `User`, который должен отображаться для всех пользователей, но с разными ID пользователей. Во `vue-router` мы можем использовать динамический сегмент в маршруте, чтобы достичь этого: - -```js -const User = { - template: '<div>Пользователь</div>' -} - -const router = new VueRouter({ - routes: [ - // динамические сегменты начинаются с двоеточия - { path: '/user/:id', component: User } - ] -}) -``` - -Теперь все URL вида `/user/foo` и `/user/bar` будут соответствовать одному маршруту. - -Динамический сегмент обозначается двоеточием `:`. При сопоставлении маршрута, значение динамического сегмента можно получить через `this.$route.params` в каждом компоненте. Теперь мы можем отобразить ID текущего пользователя, обновив шаблон компонента `User`: - -```js -const User = { - template: '<div>Пользователь {{ $route.params.id }}</div>' -} -``` - -Вы можете посмотреть этот пример вживую [здесь](https://jsfiddle.net/yyx990803/4xfa2f19/). - -Может быть несколько динамических сегментов в одном маршруте. Для каждого сегмента появится соответствующее свойство в `$route.params`. Например: - -| Шаблон | Совпадающий путь | $route.params | -| ----------------------------- | ------------------- | -------------------------------------- | -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -Кроме `$route.params`, объект `$route` предоставляют и другую полезную информацию, например `$route.query` (если URL содержит строку запроса), `$route.hash`, и т.д. Подробнее в [справочнике API](../../api/#объект-route). - -## Отслеживание изменений параметров - -Важно отметить, что при переходе от `/user/foo` к `/user/bar` **будет повторно использован тот же самый экземпляр компонента**. Поскольку оба маршрута указывают на один и тот же компонент, этот подход эффективнее, чем уничтожение и повторное создание экземпляра. **Но это означает, что хуки жизненного цикла компонента при этом вызываться не будут**. - -Чтобы реагировать на изменения параметров маршрута в рамках одного компонента, достаточно просто отслеживать изменения в объекте `$route`: - -```js -const User = { - template: '...', - watch: { - $route(to, from) { - // обрабатываем изменение параметров маршрута... - } - } -} -``` - -Или можно воспользоваться [хуком `beforeRouteUpdate`](../advanced/navigation-guards.md), добавленным в версии 2.2: - -```js -const User = { - template: '...', - beforeRouteUpdate(to, from, next) { - // обрабатываем изменение параметров маршрута... - // не забываем вызвать next() - } -} -``` - -## Страница ошибки 404 / отслеживание ненайденных путей - -Обычные параметры соответствуют символам между фрагментами URL, разделёнными `/`. При необходимости чтобы совпадало **что угодно** можно воспользоваться звёздочкой (`*`): - -```js -{ - // сопоставляется со всем - path: '*' -} -{ - // сопоставляется со всем, начинающимся с `/user-` - path: '/user-*' -} -``` - -Если используете маршруты со _звёздочкой_, убедитесь в их правильном порядке, чтобы они были в конце. -Маршрут `{ path: '*' }` обычно используют для страницы ошибки 404 на стороне клиента. При использовании _Режима HTML5 History_ также проверьте что [правильно сконфигурировали сервер](./history-mode.md). - -При наличии _звёздочки_ в `$route.params` автоматически добавляется свойство `pathMatch`. Оно будет содержать оставшуюся часть URL-адреса, сопоставленную со _звёздочкой_: - -```js -// Существует маршрут { path: '/user-*' } -this.$router.push('/user-admin') -this.$route.params.pathMatch // 'admin' - -// Существует маршрут { path: '*' } -this.$router.push('/non-existing') -this.$route.params.pathMatch // '/non-existing' -``` - -## Продвинутые возможности сопоставления - -`vue-router` использует [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0) в качестве движка для проверки совпадения маршрутов, что позволяет задействовать многие продвинутые возможности, включая опциональные динамические сегменты и регулярные выражения. Подробнее об этих продвинутых возможностях можно изучить в [документации библиотеки](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters), а на [примере](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js) узнать как использовать их совместно с `vue-router`. - -## Приоритеты при сопоставлении маршрутов - -Иногда один и тот же URL может совпасть с несколькими маршрутами. В таких случаях приоритет определяется порядком определения маршрутов: чем раньше определён маршрут, тем выше у него приоритет. diff --git a/docs/ru/guide/essentials/history-mode.md b/docs/ru/guide/essentials/history-mode.md deleted file mode 100644 index 289f08b78..000000000 --- a/docs/ru/guide/essentials/history-mode.md +++ /dev/null @@ -1,143 +0,0 @@ -# Режим HTML5 History - -По умолчанию `vue-router` работает в режиме _хэша_ — он использует хэш URL для симуляции полного URL-адреса, что позволяет избежать перезагрузки страницы при изменении URL. - -Мы можем обойтись без хэша, используя **режим history**, который работает с API `history.pushState` для достижения той же цели: - -```js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -При использовании этого URL выглядит естественно, например: `http://oursite.com/user/id`. Прекрасно! - -Возникает, однако, и проблема: поскольку наше приложение — одностраничное, не сконфигурировав соответствующим образом сервер мы заставим пользователей получать ошибку 404, если они перейдут по `http://oursite.com/user/id` напрямую. Вот это уже прекрасным не назвать. - -Не спешите расстраиваться: всё, что нужно — единственная "резервная" запись в конфигурации сервера. Если URL не совпадает ни с одним статическим файлом, сервер должен просто отдать `index.html`, в котором и живёт наше приложение. И снова, прекрасно! - -## Примеры конфигурирования серверов - -**Примечание**: В примерах ниже предполагается, что приложение публикуется в корневой каталог. При необходимости публикации во вложенный каталог нужно определить [опцию `publicPath` в Vue CLI](https://cli.vuejs.org/ru/config/#publicpath) и соответствующее [свойство маршрутизатора `base`](../../api/#base). Также необходимо внести изменения в примерах ниже чтобы использовать вложенный каталог вместо корневого (например, заменить `RewriteBase /` на `RewriteBase /name-of-your-subfolder/`). - -#### Apache - -```apache -<IfModule mod_negotiation.c> - Options -MultiViews -</IfModule> -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -Вместо `mod_rewrite`, вы также можете использовать [`FallbackResource`](https://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource). - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### Node.js - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http.createServer((req, res) => { - fs.readFile('index.html', 'utf-8', (err, content) => { - if (err) { - console.log('Невозможно открыть файл "index.html".') - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) -}).listen(httpPort, () => { - console.log('Сервер запущен на: http://localhost:%s', httpPort) -}) -``` - -#### Node.js c использованием Express - -При использовании Node.js/Express, мы рекомендуем пользоваться [connect-history-api-fallback middleware](https://github.com/bripkens/connect-history-api-fallback). - -#### Internet Information Services (IIS) - -1. Установить [IIS UrlRewrite](https://www.iis.net/downloads/microsoft/url-rewrite) -2. Создать файл `web.config` в корневом каталоге вашего сайта со следующим содержимым: - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="/" /> - </rule> - </rules> - </rewrite> - </system.webServer> -</configuration> -``` - -#### Caddy - -``` -rewrite { - regexp .* - to {path} / -} -``` - -#### Хостинг Firebase - -Добавьте в файл `firebase.json`: - -``` -{ - "hosting": { - "public": "dist", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} -``` - -## Предостережение - -При таком подходе возникает одно неприятное последствие: ваш сервер больше не будет сообщать об ошибках 404, поскольку все найденные пути теперь возвращают `index.html`. Чтобы обойти эту проблему, вы должны реализовать специальный маршрут в своём приложении Vue, чтобы показывать страницу 404: - -```js -const router = new VueRouter({ - mode: 'history', - routes: [ - { path: '*', component: NotFoundComponent } - ] -}) -``` - -В качестве альтернативы, если вы используете сервер Node.js, вы можете реализовать fallback, используя маршрутизатор на стороне сервера, чтобы сопоставлять поступающие URL и отвечать с помощью 404, если не найдено сопоставлений маршруту. Ознакомьтесь с [руководством по серверному рендерингу Vue.js](https://ssr.vuejs.org/ru/) для получения дополнительной информации. diff --git a/docs/ru/guide/essentials/named-routes.md b/docs/ru/guide/essentials/named-routes.md deleted file mode 100644 index d5bd7da53..000000000 --- a/docs/ru/guide/essentials/named-routes.md +++ /dev/null @@ -1,31 +0,0 @@ -# Именованные маршруты - -Иногда удобнее определять маршрут по имени, особенно при привязке к маршруту или выполнении навигации. Вы можете указать для маршрута имя в опции `routes` при создании экземпляра маршрутизатора: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -Чтобы создать ссылку на именованный маршрут, вы можете передать объект во входной параметр `to` компонента `router-link`: - -```html -<router-link :to="{ name: 'user', params: { userId: 123 }}">Пользователь</router-link> -``` - -Тот же самый объект можно использовать и для программного вызова `router.push()`: - -```js -router.push({ name: 'user', params: { userId: 123 }}) -``` - -В обоих случаях в результате переход будет происходить на путь `/user/123`. - -Полный пример можно посмотреть [здесь](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js). diff --git a/docs/ru/guide/essentials/named-views.md b/docs/ru/guide/essentials/named-views.md deleted file mode 100644 index 606cb952b..000000000 --- a/docs/ru/guide/essentials/named-views.md +++ /dev/null @@ -1,86 +0,0 @@ -# Именованные представления - -Иногда вам необходимо отображать сразу несколько представлений, а не вкладывать одно из них в другое — например, при создании шаблона с представлением `sidebar` для боковой панели и представлением `main` для основного содержимого. В этой ситуации будет удобно использовать именованные представления. Вместо указания единственного `<router-view>`, можно использовать несколько, присвоив каждому собственное имя. Безымянный `router-view` автоматически получает имя `default`. - -```html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -При использовании нескольких представлений, вместо единственного компонента при описании пути необходимо указывать объект. Убедитесь, что в ключе `components` используете окончание множественного числа (`s`): - -```js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -Рабочую демонстрацию этого примера можно найти [здесь](https://jsfiddle.net/posva/6du90epg/). - -## Вложенные именованные представления - -Возможно и создание более сложных шаблонов, используя именованные представления с вложенными представлениями. При этом вам также нужно будет именовать используемые вложенные компоненты `router-view`. Разберём на примере панели настроек: - -``` -/settings/emails /settings/profile -+-----------------------------------+ +------------------------------+ -| UserSettings | | UserSettings | -| +-----+-------------------------+ | | +-----+--------------------+ | -| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | -| | +-------------------------+ | | | +--------------------+ | -| | | | | | | | UserProfilePreview | | -| +-----+-------------------------+ | | +-----+--------------------+ | -+-----------------------------------+ +------------------------------+ -``` - -- `Nav` это просто обычный компонент -- `UserSettings` компонент представления -- `UserEmailsSubscriptions`, `UserProfile`, `UserProfilePreview` вложенные компоненты представлений - -**Примечание**: _Давайте опустим как должен выглядеть HTML/CSS для реализации подобного шаблона и сосредоточимся на используемых компонентах._ - -Секция `<template>` компонента `UserSettings` будет выглядеть примерно так: - -```html -<!-- UserSettings.vue --> -<div> - <h1>Настройки пользователя</h1> - <NavBar/> - <router-view/> - <router-view name="helper"/> -</div> -``` - -_Вложенные компоненты представлений в примере опущены, но вы можете посмотреть их полные исходные коды [здесь](https://jsfiddle.net/posva/22wgksa3/)._ - -Затем вы можете скомпоновать шаблона выше в конфигурации маршрута: - -```js -{ - path: '/settings', - // Вы могли также иметь именованные представления выше - component: UserSettings, - children: [{ - path: 'emails', - component: UserEmailsSubscriptions - }, { - path: 'profile', - components: { - default: UserProfile, - helper: UserProfilePreview - } - }] -} -``` - -Рабочую демонстрацию этого примера можно найти [здесь](https://jsfiddle.net/posva/22wgksa3/). diff --git a/docs/ru/guide/essentials/navigation.md b/docs/ru/guide/essentials/navigation.md deleted file mode 100644 index 1056b9dce..000000000 --- a/docs/ru/guide/essentials/navigation.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -sidebarDepth: 0 ---- - -# Программная навигация - -Помимо декларативного использования `<router-link>` для создания ссылок в шаблоне, можно использовать маршрутизатор и программно вызывать методы его экземпляра. - -## `router.push(location, onComplete?, onAbort?)` - -**Примечание: Внутри экземпляра Vue у вас есть доступ к экземпляру маршрутизатора через `$router`. Поэтому вы можете вызвать `this.$router.push`.** - -Для перехода к новому URL, используйте `router.push`. Этот метод добавляет новую запись в историю навигации, что позволяет клику пользователя по кнопке "назад" в браузере сработать привычным образом. - -При клике на `<router-link>` этот метод вызывается автоматически. Клик по `<router-link :to="...">` эквивалентен программному вызову `router.push(...)`. - -| Декларативная запись | Программная запись | -| ------------------------- | ------------------ | -| `<router-link :to="...">` | `router.push(...)` | - -В качестве аргумента можно передать строку или объект, описывающий маршрут. Например: - -```js -// строка -router.push('home') - -// объект -router.push({ path: 'home' }) - -// именованный маршрут -router.push({ name: 'user', params: { userId: '123' } }) - -// со строкой запроса, получится /register?plan=private -router.push({ path: 'register', query: { plan: 'private' } }) -``` - -**Примечание**: `params` игнорируются, если указан `path`, что не является случаем с `query` приведённым в примере выше. Вместо этого, вам нужно указать `name` маршрута или вручную указать весь `path` с необходимыми параметрами: - -```js -const userId = '123' -router.push({ name: 'user', params: { userId } }) // -> /user/123 -router.push({ path: `/user/${userId}` }) // -> /user/123 -// Это НЕ БУДЕТ работать -router.push({ path: '/user', params: { userId } }) // -> /user -``` - -Такие же правила применяются и к входному параметру `to` компонента `router-link`. - -С версии 2.2.0+ можно опционально указать коллбэки `onComplete` и `onAbort` в `router.push` или `router.replace` в качестве 2-го и 3-го аргументов. Эти коллбэки будут вызываться когда навигация либо успешно завершена (после того как все асинхронные хуки будут завершены), или прервана (переходом на этот же маршрут, или на другой маршрут прежде чем текущая навигация будет завершена), соответственно. - -С версии 3.1.0+ можно опустить 2-й и 3-й аргументы, в таком случае `router.push`/`router.replace` будут возвращать Promise, если они поддерживаются окружением. - -**Примечание:** если путь назначения совпадает с текущим маршрутом и меняются только параметры (например, переход из одного профиля в другой `/users/1` -> `/users/2`), вам потребуется использовать [`beforeRouteUpdate`](./dynamic-matching.md#отсnеживание-изменений-параметров) для отслеживания изменений (например, загрузки информации о пользователе). - -## `router.replace(location, onComplete?, onAbort?)` - -Действует как `router.push`, с той лишь разницей, что переход осуществляется без добавления новой записи в историю навигации, а заменяет текущую запись в нём. - -| Декларативная запись | Программная запись | -| --------------------------------- | --------------------- | -| `<router-link :to="..." replace>` | `router.replace(...)` | - -## `router.go(n)` - -Этот метод принимает параметром целое число, которое указывает на сколько шагов необходимо перейти по истории навигации, аналогично `window.history.go(n)`. - -Примеры: - -```js -// перейти на одну запись вперёд, эквивалентно history.forward() -router.go(1) - -// перейти на одну запись назад, эквивалентно history.back() -router.go(-1) - -// перейти на 3 записи вперёд -router.go(3) - -// если записей в истории недостаточно много, переход просто не произойдёт -router.go(-100) -router.go(100) -``` - -## Манипулирование историей переходов - -Вы могли заметить, что `router.push`, `router.replace` и `router.go` соответствуют [`window.history.pushState`, `window.history.replaceState` и `window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History), имитируя таким образом API `window.history`. - -По этой причине, если вы уже знакомы с [API истории переходов браузера](https://developer.mozilla.org/en-US/docs/Web/API/History_API), то и со Vue router неожиданностей не возникнет. - -Стоит отметить, что методы навигации Vue router'а (`push`, `replace`, `go`) работают одинаково во всех режимах (`history`, `hash` и `abstract`). diff --git a/docs/ru/guide/essentials/nested-routes.md b/docs/ru/guide/essentials/nested-routes.md deleted file mode 100644 index 9423b3074..000000000 --- a/docs/ru/guide/essentials/nested-routes.md +++ /dev/null @@ -1,102 +0,0 @@ -# Вложенные маршруты - -Пользовательский интерфейс реальных приложений обычно представлен многоуровневой иерархией компонентов. Столь же обычно и соответствие сегментов URL некоторой структуре вложенности компонентов, например: - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -Используя `vue-router`, мы можем с лёгкостью выразить эти взаимоотношения при помощи вложенных путей. - -Рассмотрим созданное в предыдущем разделе приложение: - -```html -<div id="app"> - <router-view></router-view> -</div> -``` - -```js -const User = { - template: '<div>Пользователь {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -Здесь `<router-view>` — это точка, в которой будет отображён компонент, соответствующий маршруту верхнего уровня. Аналогичным образом, отображаемый там компонент может и сам содержать вложенный `<router-view>`. Изменим немного шаблон компонента `User`: - -```js -const User = { - template: ` - <div class="user"> - <h2>Пользователь {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -Для отображения компонентов в этой вложенной точке, нам понадобится опция `children` в конфигурации конструктора `VueRouter`: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', - component: User, - children: [ - { - // при совпадении пути с шаблоном /user/:id/profile - // в <router-view> компонента User будет показан UserProfile - path: 'profile', - component: UserProfile - }, - { - // при совпадении пути с шаблоном /user/:id/posts - // в <router-view> компонента User будет показан UserPosts - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**Обратите внимание, что вложенные пути, начинающиеся с `/`, считаются корневыми. Это позволяет задействовать вложенную структуру компонентов независимо от структуры URL.** - -Как вы могли заметить, опция `children` принимает обычный массив объектов конфигурации маршрутов, такой же как и сам `routes`. Таким образом, вложенность путей в теории по глубине ничем не ограничена. - -С текущим кодом, если перейти по пути `/user/foo`, внутри компонента `User` ничего не будет отображаться, так как не произойдёт совпадения по второй части пути. Может быть, что-то в таких случаях отобразить всё же захочется — тогда стоит указать пустой путь: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', - component: User, - children: [ - // при совпадении пути с шаблоном /user/:id - // в <router-view> компонента User будет показан UserHome - { path: '', component: UserHome } - - // ...остальные вложенные маршруты - ] - } - ] -}) -``` - -Рабочую демонстрацию этого примера можно найти [здесь](https://jsfiddle.net/yyx990803/L7hscd8h/). diff --git a/docs/ru/guide/essentials/passing-props.md b/docs/ru/guide/essentials/passing-props.md deleted file mode 100644 index 768eb7543..000000000 --- a/docs/ru/guide/essentials/passing-props.md +++ /dev/null @@ -1,76 +0,0 @@ -# Передача входных параметров в компоненты маршрута - -Использование `$route` в вашем компоненте создаёт жёсткую связь с маршрутом, что ограничивает гибкость компонента, потому что он может быть использован только для определённых URL-адресов. - -Для разделения компонента от маршрутизатора можно использовать входные параметры (`props`): - -**Вместо жёсткой связи с `$route`** - -```js -const User = { - template: '<div>Пользователь {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User } - ] -}) -``` - -**Разделяем с помощью входных параметров** - -```js -const User = { - props: ['id'], - template: '<div>Пользователь {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - - // для маршрутов с именованными представлениями необходимо - // указывать опцию `props` для каждого именованного представления: - { - path: '/user/:id', - components: { default: User, sidebar: Sidebar }, - props: { default: true, sidebar: false } - } - ] -}) -``` - -Это позволяет использовать компонент в любом месте, а также облегчает его повторное использование и тестирование. - -## Булево значение - -Когда `props` установлено в значение `true`, значения `route.params` будут устанавливаться входными параметрами компонента. - -## Объект - -Когда `props` объект, они будут устанавливаться входными параметрами компонента как есть. Полезно, когда входные параметры являются статическими данными. - -```js -const router = new VueRouter({ - routes: [ - { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } - ] -}) -``` - -## Функция - -Вы можете создать функцию, которая вернёт объект с входными параметрами. Это позволяет вам приводить параметры к другим типам, комбинировать статические значения с значениями из маршрута, и т.д. - -```js -const router = new VueRouter({ - routes: [ - { path: '/search', component: SearchUser, props: (route) => ({ query: route.query.q }) } - ] -}) -``` - -URL `/search?q=vue` также передаст `{query: 'vue'}` в качестве входных параметров в компонент `SearchUser`. - -Старайтесь держать функции генерации входных параметров независимыми от состояния, потому что они вызываются только при изменениях маршрута. Используйте компонент обёртку, если вам нужно состояние для определения входных параметров, в таком случае Vue сможет реагировать на изменения состояния. - -Для более продвинутого использования, смотрите [пример](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js). diff --git a/docs/ru/guide/essentials/redirect-and-alias.md b/docs/ru/guide/essentials/redirect-and-alias.md deleted file mode 100644 index 630b82ae0..000000000 --- a/docs/ru/guide/essentials/redirect-and-alias.md +++ /dev/null @@ -1,60 +0,0 @@ -# Перенаправления и псевдонимы - -## Перенаправления - -Перенаправления также определяются в конфигурации маршрутов в опции `routes`. Например, чтобы перенаправить с `/a` на `/b`: - -```js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -Перенаправление может осуществляться и на именованный маршрут: - -```js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -Или даже можно указать функцию для организации динамического перенаправления: - -```js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // в функцию в качестве аргумента передаётся маршрут - // возвращаемым значением должна быть строка или объект пути - }} - ] -}) -``` - -Обратите внимание, что [навигационные хуки](../advanced/navigation-guards.md) не применяются на маршруте, который служит для перенаправления, только на его цель. В приведённом ниже примере добавление хуков `beforeEnter` на маршрут `/a` не будет иметь никакого эффекта. - -Для демонстрации более сложных возможностей, обратите внимание на [этот пример](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js). - -## Псевдонимы - -При перенаправлении, если пользователь переходит по пути `/a`, то URL заменяется на `/b` и затем уже `/b` рассматривается как основной путь. В чём отличие псевдонимов? - -**В случае, когда псевдонимом `/a` является `/b`, при переходе пользователя на `/b`, URL останется равным `/b`, но маршрутизатор выполнит все действия так, как если бы он был равен `/a`.** - -В виде конфигурации маршрутизатора вышесказанное может быть выражено так: - -```js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -Псевдонимы позволяют не ограничиваться вложенными структурами организуя связи URL и UI. - -Этот [пример](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js) демонстрирует более продвинутое использование возможностей. diff --git a/docs/ru/installation.md b/docs/ru/installation.md deleted file mode 100644 index 5ac66914f..000000000 --- a/docs/ru/installation.md +++ /dev/null @@ -1,52 +0,0 @@ -# Установка - -## Скачивание напрямую / CDN - -[https://unpkg.com/vue-router@3/dist/vue-router.js](https://unpkg.com/vue-router@3/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com) предоставляет CDN-ссылки для NPM-пакетов. Ссылка выше всегда указывает на самую последнюю версию Vue-router на NPM. Вы можете также использовать конкретную версию, используя ссылки вида `https://unpkg.com/vue-router@3.0.0/dist/vue-router.js`. -<!--/email_off--> - -Подключите `vue-router` после Vue, и установка произойдёт автоматически: - -```html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -## npm - -```bash -npm install vue-router -``` - -При использовании модульной системы, необходимо явно обозначить использование роутера при помощи `Vue.use()`: - -```js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -Это не требуется при подключении через глобальный тег `script`. - -## Vue CLI - -Если проект развернут с использованием [Vue CLI](https://cli.vuejs.org/ru/), то можно добавить Vue Router в качестве плагина. Это позволит CLI сгенерировать код подключения, приведённый выше, а также добавить два маршрута для примера. **Операция установки перезапишет `App.vue`** в проекте, поэтому убедитесь что сделали резервную копию перед запуском команды: - -```sh -vue add router -``` - -## Версия для разработки - -Если вы хотите использовать самую новую dev-сборку `vue-router`, то придётся вручную склонировать репозиторий с GitHub и запустить сборку: - -```bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/docs/zh-cn/README.md b/docs/zh-cn/README.md new file mode 120000 index 000000000..0fbb5a869 --- /dev/null +++ b/docs/zh-cn/README.md @@ -0,0 +1 @@ +SUMMARY.md \ No newline at end of file diff --git a/docs/zh-cn/SUMMARY.md b/docs/zh-cn/SUMMARY.md new file mode 100644 index 000000000..21b3619ee --- /dev/null +++ b/docs/zh-cn/SUMMARY.md @@ -0,0 +1,33 @@ +# vue-router文档 [](https://www.npmjs.com/package/vue-router) + +**[更新日志](https://github.com/vuejs/vue-router/releases)** + +- [安装](installation.md) +- [基本用法](basic.md) +- [嵌套路由](nested.md) +- [路由对象和路由匹配](route.md) +- [具名路径](named.md) +- [路由配置项](options.md) +- [router-view](view.md) +- [v-link](link.md) +- [动态组件载入](lazy.md) +- [切换控制流水线](pipeline/README.md) + - [切换钩子函数](pipeline/hooks.md) + - [data](pipeline/data.md) + - [activate](pipeline/activate.md) + - [deactivate](pipeline/deactivate.md) + - [canActivate](pipeline/can-activate.md) + - [canDeactivate](pipeline/can-deactivate.md) + - [canReuse](pipeline/can-reuse.md) +- [API](api/README.md) + - [路由实例属性](api/properties.md) + - [router.start](api/start.md) + - [router.stop](api/stop.md) + - [router.map](api/map.md) + - [router.on](api/on.md) + - [router.go](api/go.md) + - [router.replace](api/replace.md) + - [router.redirect](api/redirect.md) + - [router.alias](api/alias.md) + - [router.beforeEach](api/before-each.md) + - [router.afterEach](api/after-each.md) diff --git a/docs/zh-cn/api/README.md b/docs/zh-cn/api/README.md new file mode 100644 index 000000000..17d810daa --- /dev/null +++ b/docs/zh-cn/api/README.md @@ -0,0 +1,13 @@ +# API 索引 + +- [路由器实例属性](properties.md) +- [router.start](start.md) +- [router.stop](stop.md) +- [router.map](map.md) +- [router.on](on.md) +- [router.go](go.md) +- [router.replace](replace.md) +- [router.redirect](redirect.md) +- [router.alias](alias.md) +- [router.beforeEach](before-each.md) +- [router.afterEach](after-each.md) diff --git a/docs/zh-cn/api/after-each.md b/docs/zh-cn/api/after-each.md new file mode 100644 index 000000000..f09e6891d --- /dev/null +++ b/docs/zh-cn/api/after-each.md @@ -0,0 +1,21 @@ +# `router.afterEach(hook)` + +添加一个全局的后置钩子函数,该函数会在每次路由切换**成功进入激活阶段**时被调用。 + +注意,该函数调用时仅仅意味着切换已经被验证过了,也就是所有 `canDeactivate` 和 `canActivate` 钩子函数都成功的被断定( resolved )了,而且浏览器地址栏中的地址也已经更新。并不能保证所有的 `activate` 钩子函数都被断定了。 + +你可以注册多个全局的后置钩子函数,这些函数将会按照注册的顺序被同步调用。 + +### 参数 + +- `hook {Function}` + + 此钩子函数一个类型为[切换对象](../pipeline/hooks.html#transition-object)的参数,但是你只能访问此参数的 `to` 和 `from` 属性, 这两个属性都是路由对象。在这个后置钩子函数里**不能**调用任何切换函数。 + +### Example + +``` js +router.afterEach(function (transition) { + console.log('成功浏览到: ' + transition.to.path) +}) +``` diff --git a/docs/zh-cn/api/alias.md b/docs/zh-cn/api/alias.md new file mode 100644 index 000000000..57c5f44e7 --- /dev/null +++ b/docs/zh-cn/api/alias.md @@ -0,0 +1,25 @@ +# `router.alias(aliasMap)` + +为路由器配置全局的别名规则。别名和重定向的区别在于,相对于重定向把 `fromPath` 替换为 `toPath` ,别名会保留 `fromPath` ,但是匹配时使用的是 `toPath` 。 + +例如,如果我们把 `/a` 取别名为 `/a/b/c` ,那么当我们访问 `/a` 时,浏览器地址栏中的URL会是 `/a` 。但是路由匹配是却像是在访问 `/a/b/c` 。 + +### 参数 + +- `aliasMap {Object}` + + 别名映射对象的格式应该为 `{ fromPath: toPath, ... }` 。路径中可以包含动态片段。 + +### Example + +``` js +router.alias({ + + // 匹配 /a 时就像是匹配 /a/b/c + '/a': '/a/b/c', + + // 别名可以包含动态片段 + // 而且重定向片段必须匹配 + '/user/:userId': '/user/profile/:userId' +}) +``` diff --git a/docs/zh-cn/api/before-each.md b/docs/zh-cn/api/before-each.md new file mode 100644 index 000000000..b1446a1b8 --- /dev/null +++ b/docs/zh-cn/api/before-each.md @@ -0,0 +1,38 @@ +# `router.beforeEach(hook)` + +添加一个全局的前置钩子函数,这个函数会在路由切换开始时调用。调用发生在整个切换流水线之前。如果此钩子函数拒绝了切换,整个切换流水线根本就不会启动。 + +你可以注册多个全局的前置钩子函数。这些函数会按照注册的顺序被调用。调用是异步的,后一个函数会等待前一个函数完成后才会被调用。 + +### 参数 + +- `hook {Function}` + + 此钩子函数一个类型为[切换对象](../pipeline/hooks.html#transition-object)的参数。 + +### Example + +简单示例 + +``` js +router.beforeEach(function (transition) { + if (transition.to.path === '/forbidden') { + transition.abort() + } else { + transition.next() + } +}) +``` + +使用 Promise 和 ES6 + +``` js +router.beforeEach(function ({ to, next }) { + if (to.path === '/auth-required') { + // 返回一个断定会 true 或者 false 的 Promise + return AuthService.isLoggedIn() + } else { + next() + } +}) +``` diff --git a/docs/zh-cn/api/go.md b/docs/zh-cn/api/go.md new file mode 100644 index 000000000..3fff1265f --- /dev/null +++ b/docs/zh-cn/api/go.md @@ -0,0 +1,37 @@ +# `router.go(path)` + +导航到一个新的路由 + +### 参数 + +- `path: String | Object` + + `path` 可以是一个字符串,或是包含跳转信息的对象。 + + 当是字符串时,该路径必须为一个普通路径(也就是说没有动态片段或者全匹配片段)。路径若不是以 `/` 开头的绝对路径,会以相对于当前路径的方式进行解析。 + + 当是对象时,可以是如下的格式: + + ``` js + { path: '...' } + ``` + + 或是: + + ``` js + { + name: '...', + // params 和 query 可选 + params: { ... }, + query: { ... } + } + ``` + + 关于包含 `name` 的路径对象,参见[具名路径](../named.md). + + - 当用 `path` 格式跳转到一个相对路径时,可以用 `append: true` 选项来确保该相对路径始终被添加到当前路径之后。比如: + + - 从 `/a` 跳转到 `b` 时,若没有 `append: true`,则会跳转到 `b`; + - 从 `/a` 跳转到 `b` 时,若有 `append: true`,则会跳转到 `/a/b`。 + + - 两种格式都接受 `replace: true` 选项,使得该跳转不产生一个新的历史记录。 diff --git a/docs/zh-cn/api/map.md b/docs/zh-cn/api/map.md new file mode 100644 index 000000000..b34d95344 --- /dev/null +++ b/docs/zh-cn/api/map.md @@ -0,0 +1,47 @@ +# `router.map(routeMap)` + +定义路由映射的主要方法。 + +### 参数 + +- `routeMap: Object` + + 结构体,键为路径,值为路由配置对象。对于路径匹配规则,查看[路由匹配](../route.html#route-matching). + +### 路由配置对象 + +路由配置对象包含两个字段: + +- `component`: 当路径匹配时,会渲染到顶级 `<router-view>` 的 Vue 组件。此字段的值可以是调用 `Vue.extend` 后返回的构造函数,或者普通的组件选项对象。在后一种情况下,路由会隐式调用 `Vue.extend` 。 + +- `subRoutes`: 嵌套的子路由映射。对于每一个 `subRoutes` 映射中的子路由对象,路由器在做匹配时会使用其路径拼接到父级路径后得到的全路径。成功匹配的组件会渲染到父级组件的 `<router-view>` 中。 + +### 例子 + +``` js +router.map({ + // 组件构造函数 + '/a': { + component: Vue.extend({ /* ... */ }) + }, + // 组件选项对象 + '/b': { + component: { + template: '<p>Hello from /b</p>' + } + }, + // 嵌套的路由 + '/c': { + component: { + // 渲染子视图 + template: '<router-view></router-view>' + }, + subRoutes: { + // 当路径是 /c/d 时进行渲染 + '/d': { component: { template: 'D' }}, + // 当路径是 /c/e 时进行渲染 + '/e': { component: { template: 'E' }} + } + } +}) +``` diff --git a/docs/zh-cn/api/on.md b/docs/zh-cn/api/on.md new file mode 100644 index 000000000..dff89f0d0 --- /dev/null +++ b/docs/zh-cn/api/on.md @@ -0,0 +1,18 @@ +# `router.on(path, config)` + +添加一条顶级的路由配置。在内部实现时,`router.map()` 对于接收到的路由映射对象中每个键值对都调用 `router.on()` 。 + +### 参数 + +- `path: String` - 查看[路由匹配](../route.md#route-matching) +- `config: Object` - 查看[路由配置对象](map.md#route-config-object). + +### 例子 + +``` js +router.on('/user/:userId', { + component: { + template: '<div>{{$route.params.userId}}</div>' + } +}) +``` diff --git a/docs/zh-cn/api/properties.md b/docs/zh-cn/api/properties.md new file mode 100644 index 000000000..c2c1ed5f2 --- /dev/null +++ b/docs/zh-cn/api/properties.md @@ -0,0 +1,21 @@ +# 路由器实例属性 + +> 这里只列出了公开属性 + +### `router.app` + +- 类型: `Vue` + + 此路由器管理的根 Vue 实例。这个实例是由调用 `router.start()` 传入的 Vue 组件构造器函数创建的。 + +### `router.mode` + +- 类型: `String` + + `html5`、`hash` 或者 `abstract`。 + + - **`html5`**: 使用 HTML5 history API ,监听 `popstate` 事件。支持 [`saveScrollPosition`](../options.html#savescrollposition) . + + - **`hash`**: 使用 `location.hash` ,监听 `hashchange` 事件。如果创建路由器时声明 `history: true` ,则在不支持 history 模式的路由器下会退化为 hash 模式。 + + - **`abstract`**: 不监听任何事件。如果没有 `window` 对象(例如非浏览器环境),则会自动退化到此模式。 diff --git a/docs/zh-cn/api/redirect.md b/docs/zh-cn/api/redirect.md new file mode 100644 index 000000000..e7efa32ec --- /dev/null +++ b/docs/zh-cn/api/redirect.md @@ -0,0 +1,26 @@ +# `router.redirect(redirectMap)` + +为路由器定义全局的重定向规则。全局的重定向会在匹配当前路径之前执行。如果发现需要进行重定向,原本访问的路径会被直接忽略而且不会在浏览器历史中留下记录。 + +### 参数 + +- `redirectMap: Object` + + 重定向映射对象的格式应该为 `{ fromPath: toPath, ... }` 。路径中可以包含动态片段。 + +### Example + +``` js +router.redirect({ + + // 重定向 /a 到 /b + '/a': '/b', + + // 重定向可以包含动态片段 + // 而且重定向片段必须匹配 + '/user/:userId': '/profile/:userId', + + // 重定向任意未匹配路径到 /home + '*': '/home' +}) +``` diff --git a/docs/zh-cn/api/replace.md b/docs/zh-cn/api/replace.md new file mode 100644 index 000000000..6c7f5b932 --- /dev/null +++ b/docs/zh-cn/api/replace.md @@ -0,0 +1,9 @@ +# `router.replace(path)` + +和 `router.go(path)` 类似,但是并不会在浏览器历史创建一条新的纪录。 + +### 参数 + +- `path: String` + + 此路径为一个普通路径(也就是说没有动态片段或者全匹配片段)。路径不能以 `/` 开头,会以相对于当前路径的方式进行解析。 diff --git a/docs/zh-cn/api/start.md b/docs/zh-cn/api/start.md new file mode 100644 index 000000000..5e420854e --- /dev/null +++ b/docs/zh-cn/api/start.md @@ -0,0 +1,13 @@ +# `router.start(App, el)` + +启动一个启用了路由的应用。创建一个 `App` 的实例并且挂载到元素 `el` 。 + +### 参数 + +- `App: Function | Object` + + `App` 可以是 Vue 组件构造函数或者一个组件选项对象。如果是一个对象,路由会隐式的对其调用 `Vue.extend` 。这个组件会用来创建这个应用的根组件。 + +- `el: String | Element` + + 挂载应用的元素。可以是 CSS 选择符或者一个实际的元素。 diff --git a/docs/zh-cn/api/stop.md b/docs/zh-cn/api/stop.md new file mode 100644 index 000000000..d19b4b586 --- /dev/null +++ b/docs/zh-cn/api/stop.md @@ -0,0 +1,5 @@ +# `router.stop()` + +停止监听 `popstate` 和 `hashchange` 事件。 + +注意,当路由处于停止状态,`router.app` 并没有销毁,你依然可以使用 `router.go(path)` 进行跳转。你也可以不使用参数调用 `router.start()` 来重新启动路由。 diff --git a/docs/zh-cn/basic.md b/docs/zh-cn/basic.md new file mode 100644 index 000000000..c76d90ffa --- /dev/null +++ b/docs/zh-cn/basic.md @@ -0,0 +1,58 @@ +# 基本用法 + +使用 Vue.js 和 vue-router 创建单页应用非常的简单,使用 Vue.js 开发,整个应用已经被拆分成了独立的组件。在使用 vue-router 时,我们需要做的就是把路由映射到各个组件,vue-router 会把各个组件渲染到正确的地方。下面是个简单的例子: + +### HTML + +``` html +<div id="app"> + <h1>Hello App!</h1> + <p> + <!-- 使用指令 v-link 进行导航。 --> + <a v-link="{ path: '/foo' }">Go to Foo</a> + <a v-link="{ path: '/bar' }">Go to Bar</a> + </p> + <!-- 路由外链 --> + <router-view></router-view> +</div> +``` + +### JavaScript + +``` js +// 定义组件 +var Foo = Vue.extend({ + template: '<p>This is foo!</p>' +}) + +var Bar = Vue.extend({ + template: '<p>This is bar!</p>' +}) + +// 路由器需要一个根组件。 +// 出于演示的目的,这里使用一个空的组件,直接使用 HTML 作为应用的模板 +var App = Vue.extend({}) + +// 创建一个路由器实例 +// 创建实例时可以传入配置参数进行定制,为保持简单,这里使用默认配置 +var router = new VueRouter() + +// 定义路由规则 +// 每条路由规则应该映射到一个组件。这里的“组件”可以是一个使用 Vue.extend +// 创建的组件构造函数,也可以是一个组件选项对象。 +// 稍后我们会讲解嵌套路由 +router.map({ + '/foo': { + component: Foo + }, + '/bar': { + component: Bar + } +}) + +// 现在我们可以启动应用了! +// 路由器会创建一个 App 实例,并且挂载到选择符 #app 匹配的元素上。 +router.start(App, '#app') +``` + +查看示例应用 [在线](http://jsfiddle.net/yyx990803/xyu276sa/). diff --git a/docs/zh-cn/installation.md b/docs/zh-cn/installation.md new file mode 100644 index 000000000..f654e7a19 --- /dev/null +++ b/docs/zh-cn/installation.md @@ -0,0 +1,44 @@ +# 安装 + +### 直接下载 + +查看 [dist 目录](https://github.com/vuejs/vue-router/tree/dev/dist). 注意,dist 目录下的文件是最新稳定版,不会同步更新到 `dev` 分支上的最新代码 + +### CDN +[jsdelivr](https://cdn.jsdelivr.net/vue.router/0.7.10/vue-router.min.js) + +[cdnjs](https://cdnjs.cloudflare.com/ajax/libs/vue-router/0.7.10/vue-router.min.js) + +### NPM + +``` bash +npm install vue-router +``` + +如果使用 CommonJS 模块规范, 需要显式的使用 `Vue.use()` 安装路由模块: + +``` js +var Vue = require('vue') +var VueRouter = require('vue-router') + +Vue.use(VueRouter) +``` + +使用独立编译文件是不需要这样做,因为路由模块会自动安装。 + +### Dev Build + +如果想要使用最新的 dev 版本,需要直接从 GitHub clone 然后自己构建。 + +``` bash +git clone https://github.com/vuejs/vue-router.git node_modules/vue-router +cd node_modules/vue-router +npm install +npm run build +``` + +### Bower + +``` bash +bower install vue-router +``` diff --git a/docs/zh-cn/lazy.md b/docs/zh-cn/lazy.md new file mode 100644 index 000000000..368f1771e --- /dev/null +++ b/docs/zh-cn/lazy.md @@ -0,0 +1,64 @@ +# 动态组件载入 lazy load + +当你在使用 Webpack 或者 Browserify 时,在基于[异步组件](http://vuejs.org/guide/components.html#Async_Components)编写的 Vue 项目时,也可以较为容易的实现惰性加载组件。不再是之前所述的直接引用一个组件,现在需要像下面这样通过定义一个函数返回一个组件: + + +``` js +router.map({ + '/async': { + component: function (resolve) { + // somehow retrieve your component definition from server... + resolve(MyComponent) + } + } +}) +``` + +现在,通过手动实现组件的加载不是个理想的办法,不过像 Webpack 和 Browserify 这类的构建工具都提供了一些更加简单方便的解决方案。 + +### Webpack + +Webpack 已经集成了代码分割功能。你可以使用 AMD 风格的 `require` 来对你的代码标识代码分割点: + +``` js +require(['./MyComponent.vue'], function (MyComponent) { + // code here runs after MyComponent.vue is asynchronously loaded. +}) +``` + +和路由配合使用,如下: + +``` js +router.map({ + '/async': { + component: function (resolve) { + require(['./MyComponent.vue'], resolve) + } + } +}) +``` + +现在,只有当 `/async` 需要被渲染时,`MyComponent.vue`组件,会自动加载它的依赖组件,并且异步的加载进来。 + +### Browserify + +使用 Browserify 还需要一些技巧。你可能需要插件 [`partition-bundle`](https://github.com/substack/browserify-handbook/blob/master/readme.markdown#partition-bundle),并且需要在 `json` 文件中手动声明: + +``` json +{ + "main.js": ["./main.js"], + "my-component.js": ["./MyComponent.vue"] +} +``` + +然后在 `main.js`,你需要做一些类似的操作,用 `loadjs` 替代 `require`: + +``` js +router.map({ + '/async': { + component: function (resolve) { + loadjs(['./MyComponent.vue'], resolve) + } + } +}) +``` diff --git a/docs/zh-cn/link.md b/docs/zh-cn/link.md new file mode 100644 index 000000000..81e584a54 --- /dev/null +++ b/docs/zh-cn/link.md @@ -0,0 +1,62 @@ +# v-link + +`v-link` 是一个用来让用户在 vue-router 应用的不同路径间跳转的指令。该指令接受一个 JavaScript 表达式,并会在用户点击元素时用该表达式的值去调用 `router.go`。 + +``` html +<!-- 字面量路径 --> +<a v-link="'home'">Home</a> + +<!-- 效果同上 --> +<a v-link="{ path: 'home' }">Home</a> + +<!-- 具名路径 --> +<a v-link="{ name: 'user', params: { userId: 123 }}">User</a> +``` + +你应该使用 `v-link` 而不是 `href` 来处理浏览时的跳转。原因如下: + +- 它在 HTML5 history 模式和 hash 模式下的工作方式相同,所以如果你决定改变模式,或者 IE9 浏览器退化为 hash 模式时,都不需要做任何改变。 + +- 在 HTML5 history 模式下,`v-link` 会监听点击事件,防止浏览器尝试重新加载页面。 + +- 在 HTML5 history 模式下使用 `root` 选项时,不需要在 `v-link` 的 URL 中包含 root 路径。 + +#### 链接活跃时的 class + +带有 `v-link` 指令的元素,如果 `v-link` 对应的 URL 匹配当前的路径,该元素会被添加特定的 class。默认添加的 class 是 `.v-link-active`,而判断是否活跃使用的是**包含性匹配**。举例来说,一个带有指令 `v-link="/a"` 的元素,只要当前路径以 `/a` 开头,此元素即会被判断为活跃。 + +连接是否活跃的匹配也可以通过 `exact` 内联选项来设置为只有当路径完全一致时才匹配: + +``` html +<a v-link="{ path: '/a', exact: true }"></a> +``` + +链接活跃时的 class 名称可以通过在创建路由器实例时指定 `linkActiveClass` 全局选项 来自定义,也可以通过 `activeClass` 内联选项来单独指定: + +``` html +<a v-link="{ path: '/a', activeClass: 'custom-active-class' }"></a> +``` + +#### 其他选项 + +- **replace** + + 一个带有 `replace: true` 的链接被点击时将会触发 `router.replace()` 而不是 `router.go()`。由此产生的跳转不会留下历史记录: + + ``` html + <a v-link="{ path: '/abc', replace: true }"></a> + ``` + +- **append** + + 带有 `append: true` 选项的相对路径链接会确保该相对路径始终添加到当前路径之后。举例来说,从 `/a` 跳转到相对路径 `b` 时,如果没有 `append: true` 我们会跳转到 `/b`,但有 `append: true` 则会跳转到 `/a/b`。 + + ``` html + <a v-link="{ path: 'relative/path', append: true }"></a> + ``` + +#### 其他注意点 + +- `v-link` 会自动设置 `<a>` 的 `href` 属性。 + +- 根据[Vue.js 1.0 binding syntax](https://github.com/vuejs/vue/issues/1325), `v-link` 不再支持包含 mustache 标签。可以用常规的JavaScript表达式代替 mustache 标签, 例如 `v-link="'user/' + user.name"` 。 diff --git a/docs/zh-cn/named.md b/docs/zh-cn/named.md new file mode 100644 index 000000000..0b29078ee --- /dev/null +++ b/docs/zh-cn/named.md @@ -0,0 +1,26 @@ +# 具名路径 + +在有些情况下,给一条路径加上一个名字能够让我们更方便地进行路径的跳转。你可以按照下面的示例给一条路径加上名字: + +``` js +router.map({ + '/user/:userId': { + name: 'user', // 给这条路径加上一个名字 + component: { ... } + } +}) +``` + +可以如下用 `v-link` 链接到该路径: + +``` html +<a v-link="{ name: 'user', params: { userId: 123 }}">User</a> +``` + +同样,也可以用 `router.go()` 来切换到该路径: + +``` js +router.go({ name: 'user', params: { userId: 123 }}) +``` + +以上两种情况,路由都会最终切换到 `/user/123`。 diff --git a/docs/zh-cn/nested.md b/docs/zh-cn/nested.md new file mode 100644 index 000000000..5296e919a --- /dev/null +++ b/docs/zh-cn/nested.md @@ -0,0 +1,78 @@ +# 嵌套路由 + +嵌套路由和嵌套组件之间的匹配是个很常见的需求,使用 vue-router 可以很简单的完成这点。 + +假设我们有如下一个应用: + +``` html +<div id="app"> + <router-view></router-view> +</div> +``` + +`<router-view>` 是一个顶级的外链。它会渲染一个和顶级路由匹配的组件: + +``` js +router.map({ + '/foo': { + // 路由匹配到/foo时,会渲染一个Foo组件 + component: Foo + } +}) +``` + +同样的,组件内部也可以包含自己的外链,嵌套的 `<router-view>` 。例如,如果我们在组件 `Foo` 的模板中添加了一个: + +``` js +var Foo = Vue.extend({ + template: + '<div class="foo">' + + '<h2>This is Foo!</h2>' + + '<router-view></router-view>' + // <- 嵌套的外链 + '</div>' +}) +``` + +为了能够在这个嵌套的外链中渲染相应的组件,我们需要更新我们的路由配置: + +``` js +router.map({ + '/foo': { + component: Foo, + // 在/foo下设置一个子路由 + subRoutes: { + '/bar': { + // 当匹配到/foo/bar时,会在Foo's <router-view>内渲染 + // 一个Bar组件 + component: Bar + }, + '/baz': { + // Baz也是一样,不同之处是匹配的路由会是/foo/baz + component: Baz + } + } + } +}) +``` + +使用以上的配置,当访问 `/foo` 时,`Foo` 的外链中不会渲染任何东西,因为配置中没有任何子路由匹配这个地址。或许你会想渲染一些内容,此时你可以设置一个子路由匹配 `/` : + +``` js +router.map({ + '/foo': { + component: Foo, + subRoutes: { + '/': { + // 当匹配到 /foo 时,这个组件会被渲染到 Foo 组件的 <router-view> 中。 + // 为了简便,这里使用了一个组件的定义 + component: { + template: '<p>Default sub view for Foo</p>' + } + }, + // 其他子路由 + } + } +}) +``` + +查看对应的实例 [在线](http://jsfiddle.net/yyx990803/naeg67da/). diff --git a/docs/zh-cn/options.md b/docs/zh-cn/options.md new file mode 100644 index 000000000..b93f62384 --- /dev/null +++ b/docs/zh-cn/options.md @@ -0,0 +1,60 @@ +# 路由选项 + +当创建路由器实例时,可以使用以下参数自定义路由器的行为。 + +#### hashbang + +- 默认值: true +- 只在 hash 模式下可用 + + 当 hashbang 值为 true 时,所有的路径都会被格式化为以 `#!` 开头。例如 `router.go('/foo/bar')` 会把浏览器的 URL 设为 `example.com/#!/foo/bar` 。 + +#### history + +- 默认值: false + + 启用 HTML5 history 模式。利用 `history.pushState()` 和 `history.replaceState()` 来管理浏览历史记录。 + + **注意**: 当使用 HTML5 history 模式时,服务器需要被[正确配置](http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/) 以防用户在直接访问链接时会遇到404页面。 + +#### abstract + +- 默认值: false + + 使用一个不依赖于浏览器的浏览历史虚拟管理后端。虚拟模式在测试或者实际的 URL 并不重要时,非常有用。例如 Electron 或者 Cordova 应用。在非浏览器模式下,路由器同样会退化为抽象模式。 + +#### root + +- 默认值: null +- 只在 HTML5 history 模式下可用 + + 定义路由根路径。在 `router.go()` 、`v-link` 以及在路由对象中配置的所有路径都会解析为此根路径的相对路径,根路径总是会出现在浏览器地址栏的 URL 中。 + + 例如,对于 `root: '/foo'` ,`v-link="/bar"` 会把浏览器 URL 设置为 `/foo/bar` 。直接访问 `/foo/bar` 会匹配路由配置中的 `/bar` 。 + + 多数情况下,在应用中并不需要关心 `root` 。 + +#### linkActiveClass + +- 默认值: `"v-link-active"` + + 配置当 `v-link` 元素匹配的路径时需要添加到元素上的 class 。只要当前路径以 `v-link` 的 URL 开头,这个 class 就会被添加到这个元素上。活跃匹配的规则和添加的 class 也可以通过 `v-link` 的内联选项单独指定。 + +#### saveScrollPosition + +- 默认值: false +- 只在 HTML5 history 模式下可用 + + 当用户点击后退按钮时,借助 HTML5 history 中的 `popstate` 事件对应的 state 来重置页面的滚动位置。注意,当 `<router-view>` 设定了相应的场景切换效果时,这个可能不会得到预想的效果。 + +#### transitionOnLoad + +- 默认值: false + + 在初次加载时是否对 `<router-view>` 处理场景切换效果。默认情况下,组件在初次加载时会直接渲染。 + +#### suppressTransitionError + +- 默认值: false + + 当值为 `true` 时,在场景切换钩子函数中发生的异常会被吞掉。 diff --git a/docs/zh-cn/pipeline/01.png b/docs/zh-cn/pipeline/01.png new file mode 100644 index 000000000..e910abc16 Binary files /dev/null and b/docs/zh-cn/pipeline/01.png differ diff --git a/docs/zh-cn/pipeline/02.png b/docs/zh-cn/pipeline/02.png new file mode 100644 index 000000000..adcf2a640 Binary files /dev/null and b/docs/zh-cn/pipeline/02.png differ diff --git a/docs/zh-cn/pipeline/03.png b/docs/zh-cn/pipeline/03.png new file mode 100644 index 000000000..ed1e235c4 Binary files /dev/null and b/docs/zh-cn/pipeline/03.png differ diff --git a/docs/zh-cn/pipeline/04.png b/docs/zh-cn/pipeline/04.png new file mode 100644 index 000000000..e1785b631 Binary files /dev/null and b/docs/zh-cn/pipeline/04.png differ diff --git a/docs/zh-cn/pipeline/05.png b/docs/zh-cn/pipeline/05.png new file mode 100644 index 000000000..dd99f3443 Binary files /dev/null and b/docs/zh-cn/pipeline/05.png differ diff --git a/docs/zh-cn/pipeline/README.md b/docs/zh-cn/pipeline/README.md new file mode 100644 index 000000000..48d15d6ad --- /dev/null +++ b/docs/zh-cn/pipeline/README.md @@ -0,0 +1,53 @@ +# 切换控制流水线 + +为更好的理解路由切换的管道,假设我们一个启用了路由的应用,此应用在路径 `/a/b/c` 时渲染了三个嵌套的 `<router-view>` : + + + +接着,用户浏览新路径 `/a/d/e` ,导致需要更新,渲染一个新的组件树: + + + +如何做到这些呢?这个过程包含一些我们必须要做的工作: + +1. 可以重用组件 A ,因为重新渲染后,组件 A 依然保持不变。 + +2. 需要停用并移除组件 B 和 C 。 + +3. 启用并激活组件 D 和 E 。 + +4. 在执行步骤2和3之前,需要确保切换效果有效 - 也就是说,为保证切换中涉及的所有组件都**能**按照期望的那样被停用/激活。 + +使用 vue-router ,你可以控制通过实现切换钩子函数来控制这些步骤。但是在了解如何做的细节之前,我们先了解一下大局。 + +### 切换的各个阶段 + +我们可以把路由切换分为三个阶段: + +1. **可重用阶段:** + + 检查当前的视图结构中是否存在可以重用的组件。这是通过对比两个新的组件树,找出共用的组件,然后检查它们的可重用性(通过 `canReuse` 选项)。默认情况下, 所有组件都是可重用的,除非是定制过。 + +  + +2. **验证阶段:** + + 检查当前的组件是否能够停用以及新组件是否可以被激活。这是通过调用路由配置阶段的 `canDeactivate` 和 `canActivate` 钩子函数来判断的。 + +  + + 注意,`canDeactivate` 按照从下至上的冒泡顺序检查,而 `canActivate` 则是从上之下。 + + 任何一个钩子函数都可以终止界面切换。如果在验证阶段终止了界面切换,路由器会保持当前的应用状态,恢复到前一个路径。 + +3. **激活阶段:** + + 一旦所有的验证钩子函数都被调用而且没有终止切换,切换就可以认定是合法的。路由器则开始禁用当前组件并启用新组件。 + +  + + 此阶段对应钩子函数的调用顺序和验证阶段相同,其目的是在组件切换真正执行之前提供一个进行清理和准备的机会。界面的更新会等到所有受影响组件的 `deactivate` 和 `activate` 钩子函数执行之后才进行。 + + `data` 这个钩子函数会在 `activate` 之后被调用,或者当前组件组件可以重用时也会被调用。 + +接下来我们会谈论一下切换过程中各个钩子函数的细节。 diff --git a/docs/zh-cn/pipeline/activate.md b/docs/zh-cn/pipeline/activate.md new file mode 100644 index 000000000..f08c19215 --- /dev/null +++ b/docs/zh-cn/pipeline/activate.md @@ -0,0 +1,21 @@ +# `activate(transition) [-> Promise]` + +在激活阶段,当组件被创建而且将要切换进入的时候被调用。 + +### 参数 + +- [`transition {Transition}`](hooks.md#transition-object) + + 调用 `transition.next()` 可以断定( resolve )这个钩子函数。注意,这里调用 `transition.abort()` 并不会把应用回退到前一个路由状态因为此时切换已经被确认合法了。 + +### 预期返回值 + +- 可选择性返回 Promise。 + - `resolve` -> `transition.next()` + - `reject(reason)` -> `transition.abort(reason)` + +### 详情 + +多数时候,这个函数用于控制视图转换的时机,因为视图切换会在这个函数被断定( resolved )之后开始。 + +这个钩子会从上至下进行调用。子组件视图的 `activate` 只会在父级组件视图 `activate` 被断定( resolved )之后执行。 diff --git a/docs/zh-cn/pipeline/can-activate.md b/docs/zh-cn/pipeline/can-activate.md new file mode 100644 index 000000000..47835d6e7 --- /dev/null +++ b/docs/zh-cn/pipeline/can-activate.md @@ -0,0 +1,27 @@ +# `canActivate(transition) [-> Promise | Boolean]` + +在验证阶段,当一个组件将要被切入的时候被调用。 + +### 参数 + +- [`transition {Transition}`](hooks.md#transition-object) + + 调用 `transition.next()` 可以断定( resolve )此钩子函数。调用 `transition.abort()` 可以无效化并取消此次切换。 + +### 预期返回值 + +- 可选择性返回 Promise : + + - `resolve(true)` -> `transition.next()` + - `resolve(false)` -> `transition.abort()` + - `reject(reason)` -> `transition.abort(reason)` + + +- 可选择性返回 Boolean 值: + + - `true` -> `transition.next()` + - `false` -> `transition.abort()` + +### 详情 + +此钩子函数的调用顺序是从上之下。子级组件视图的 `canActivate` 钩子仅在父级组件的 `canActivate` 被断定( resolved )之后调用。 diff --git a/docs/zh-cn/pipeline/can-deactivate.md b/docs/zh-cn/pipeline/can-deactivate.md new file mode 100644 index 000000000..10c1fb879 --- /dev/null +++ b/docs/zh-cn/pipeline/can-deactivate.md @@ -0,0 +1,27 @@ +# `canDeactivate(transition) [-> Promise | Boolean]` + +在验证阶段,当一个组件将要被切出的时候被调用。 + +### 参数 + +- [`transition {Transition}`](hooks.md#transition-object) + + 调用 `transition.next()` 可以断定( resolve )此钩子函数。调用 `transition.abort()` 可以无效化并取消此次切换。 + +### 预期返回值 + +- 可选择性返回 Promise : + + - `resolve(true)` -> `transition.next()` + - `resolve(false)` -> `transition.abort()` + - `reject(reason)` -> `transition.abort(reason)` + + +- 可选择性返回 Boolean 值: + + - `true` -> `transition.next()` + - `false` -> `transition.abort()` + +### 详情 + +此钩子函数的调用顺序是从下至上。组件的 `canDeactivate` 钩子仅在子级组件的 `canDeactivate` 被断定( resolved )之后调用。 diff --git a/docs/zh-cn/pipeline/can-reuse.md b/docs/zh-cn/pipeline/can-reuse.md new file mode 100644 index 000000000..6492bc2f7 --- /dev/null +++ b/docs/zh-cn/pipeline/can-reuse.md @@ -0,0 +1,21 @@ +# `canReuse: Boolean | canReuse(transition) -> Boolean` + +决定组件是否可以被重用。如果一个组件不可以重用,当前实例会被一个新的实例替换,这个新实例会经历正常的验证和激活阶段。 + +此路由配置参数可以是一个 Boolean 值或者一个返回同步的返回 Boolean 值的函数。**默认值为 `true` **. + +### 参数 + +- [`transition {Transition}`](hooks.md#transition-object) + + 在 `canReuse` 钩子中只能访问 `transition.to` 和 `transition.from` 。 + +### 预期返回值 + +- 必须返回 Boolean 类型,其他等效的假值( Falsy values )会当作 `false` 对待。 + +### 详情 + +`canReuse` 会同步调用,而且从上至下对所有可能重用的组件都会调用。 + +如果组件可以重用,它的 `data` 钩子在激活阶段仍然会被调用。 diff --git a/docs/zh-cn/pipeline/data.md b/docs/zh-cn/pipeline/data.md new file mode 100644 index 000000000..427739357 --- /dev/null +++ b/docs/zh-cn/pipeline/data.md @@ -0,0 +1,141 @@ +# `data(transition) [-> Promise]` + +在激活阶段被调用,在 `activate` 被断定( resolved ,指该函数返回的 promise 被 resolve )。用于加载和设置当前组件的数据。 + +### 参数 + +- [`transition {Transition}`](hooks.md#transition-object) + + 调用 `transition.next(data)` 会为组件的 `data` 相应属性赋值。例如,使用 `{ a: 1, b: 2 }` ,路由会调用 `component.$set('a', 1)` 以及 `component.$set('b', 2)` 。 + +### 预期返回值 + +- 可选择性返回一个Promise + - `resolve(data)` -> `transition.next(data)` + - `reject(reason)` -> `transition.abort(reason)` + + +- 或者,返回一个包含 Promise 的对象。见后文 [Promise 语法糖](#promise-%E8%AF%AD%E6%B3%95%E7%B3%96) + +### 详情 + +`data` 切换钩子会在 `activate` 被断定( resolved )以及界面切换之前被调用。切换进来的组件会得到一个名为 **`$loadingRouteData`** 的元属性,其初始值为 `true` ,在 `data` 钩子函数被断定后会被赋值为 `false` 。这个属性可用来会切换进来的组件展示加载效果。 + +`data` 钩子和 `activate` 钩子的不同之处在于: + +1. `data`在每次路由变动时都会被调用,即使是当前组件可以被重用的时候,但是 `activate` 仅在组件是新创建时才会被调用。 + + 假设我们有一个组件对应于路由 `/message/:id` ,当前用户所处的路径是 `/message/1` 。当用户浏览 `/message/2` 时,当前组件可以被重用,所以 `activate` 不会被调用。但是我们需要根据新的 `id` 参数去获取和更新数据,所以大部分情况下,在 `data` 中获取数据比在 `activate` 中更加合理。 + +2. `activate` 的作用是控制切换到新组件的时机。`data` 切换钩子会在 `activate` 被断定( resolved )以及界面切换之前被调用,所以数据获取和新组件的切入动画是并行进行的,而且在 `data` 被断定( resolved )之前,组件会处在“加载”状态。 + + 从用户体验的角度来看一下两者的区别: + + - 如果我们等到获取到数据之后再显示新组件,用户会感觉在切换前界面被卡住了。 + + - 相反的话(指不用等到获取数据后再显示组件),我们立刻响应用户的操作,切换视图,展示新组件的“加载”状态。如果我们在 CSS 中定义好相应的效果,这正好可以用来掩饰数据加载的时间。 + +这么说的话,如果你想等到数据获取之后再切换视图,可以在组件定义路由选项时,添加 **`waitForData: true`** 参数。 + +### 例子 + +调用 `transition.next` : + +``` js +route: { + data: function (transition) { + setTimeout(function () { + transition.next({ + message: 'data fetched!' + }) + }, 1000) + } +} +``` + +返回 Promise : + +``` js +route: { + data: function (transition) { + return messageService + .fetch(transition.to.params.messageId) + .then(function (message) { + return { message: message } + }) + } +} +``` + +并发请求,利用 Promise & ES6 : + +``` js +route: { + data ({ to: { params: { userId }}}) { + return Promise.all([ + userService.get(userId), + postsService.getForUser(userId) + ]).then(([user, post]) => ({ user, post })) + } +} +``` + +与上面等价的 ES5 版本: + +``` js +route: { + data (transition) { + var userId = transition.to.params.userId + return Promise.all([ + userService.get(userId), + postsService.getForUser(userId) + ]).then(function (data) { + return { + user: data[0], + posts: data[1] + } + }) + } +} +``` + +在模板中使用 `$loadingRouteData` : + +``` html +<div class="view"> + <div v-if="$loadingRouteData">Loading ...</div> + <div v-if="!$loadingRouteData"> + <user-profile user="{{user}}"></user-profile> + <user-post v-for="post in posts"></user-post> + </div> +</div> +``` + +### Promise 语法糖 + +上面的并发请求示例需要我们自己调用 `Promise.all` 来将多个 Promise 合并成一个,并且最终处理返回的数据时也有些繁琐。`vue-router` 在这里提供了一个语法糖,让我们可以在 `data` 函数中直接返回一个包含 Promise 的对象(当然也可以包含非 Promise 的值)。利用这个语法糖和 ES6,我们可以这样实现上面的例子: + +``` js +route: { + data: ({ to: { params: { userId }}}) => ({ + user: userService.get(userId), + post: postsService.getForUser(userId) + }) +} +``` + +路由器将会在这两个 Promise resolve 之后的值分别赋值给组件的 `user` 和 `post` 属性。同时,`$loadingRouteData` 会在所有的 Promise 都 resolve 之后被设置为 `false`。 + +上面的例子在 ES5 下可以这样写: + +``` js +route: { + data: function (transition) { + var userId = transition.to.params.userId + return { + user: userService.get(userId), + post: postsService.getForUser(userId) + } + } +} +``` diff --git a/docs/zh-cn/pipeline/deactivate.md b/docs/zh-cn/pipeline/deactivate.md new file mode 100644 index 000000000..142d77618 --- /dev/null +++ b/docs/zh-cn/pipeline/deactivate.md @@ -0,0 +1,21 @@ +# `deactivate(transition) [-> Promise]` + +在激活阶段,当一个组件将要被禁用和移除之时被调用。 + +### 参数 + +- [`transition {Transition}`](hooks.md#transition-object) + + 调用 `transition.next()` 可以断定( resolve )这个钩子函数。注意,这里调用 `transition.abort()` 并不会把应用回退到前一个路由状态因为此时切换已经被确认合法了。 + +### 预期返回值 + +- 可选择性返回 Promise + - `resolve` -> `transition.next()` + - `reject(reason)` -> `transition.abort(reason)` + +### 详情 + +此钩子函数的调用顺序从下至上。父级组件的 `deactivate` 会在子级组件的 `deactivate` 被断定( resolved )之后被调用。 + +新组件的 `activate` 钩子函数会在所有组件的 `deactivate` 钩子函数被断定( resolved )之后被调用。 diff --git a/docs/zh-cn/pipeline/hooks.md b/docs/zh-cn/pipeline/hooks.md new file mode 100644 index 000000000..b5702ea37 --- /dev/null +++ b/docs/zh-cn/pipeline/hooks.md @@ -0,0 +1,142 @@ +# 切换过程中的钩子 + +在切换过程中,`<router-view>` 组件可以通过实现一些钩子函数来控制切换过程。这些钩子函数包括: + +- `data` +- `activate` +- `deactivate` +- `canActivate` +- `canDeactivate` +- `canReuse` + +你可以在组件的 `route` 选项中实现这些函数。 + +``` js +Vue.component('hook-example', { + // ... other options + route: { + activate: function (transition) { + console.log('hook-example activated!') + transition.next() + }, + deactivate: function (transition) { + console.log('hook-example deactivated!') + transition.next() + } + } +}) +``` + +### 切换对象 + +每个切换钩子函数都会接受一个 `transition` 对象作为参数。这个切换对象包含以下函数和方法: + +- **transition.to** + + 一个代表将要切换到的路径的[路由对象](../route.md)。 + +- **transition.from** + + 一个代表当前路径的路由对象。 + +- **transition.next()** + + 调用此函数处理切换过程的下一步。 + +- **transition.abort([reason])** + + 调用此函数来终止或者拒绝此次切换。 + +- **transition.redirect(path)** + + 取消当前切换并重定向到另一个路由。 + +### 钩子函数异步 resolve 规则 + +我们经常需要在钩子函数中进行异步操作。在一个异步的钩子被 resolve 之前,切换会处于暂停状态。钩子的 resolve 遵循以下规则: + +1. 如果钩子返回一个 Promise,则钩子何时 resolve 取决于该 Promise 何时 resolve。[更多细节](#%E5%9C%A8%E9%92%A9%E5%AD%90%E4%B8%AD%E8%BF%94%E5%9B%9E-promise) + +2. 如果钩子既不返回 Promise,也没有任何参数,则该钩子将被同步 resolve。例如: + + ``` js + route: { + activate: function (/* 没有参数 */) { + // 如果不返回 Promise,则同步 resolve + } + } + ``` + +3. 如果钩子不返回 Promise,但是有一个参数 (`transition`),则钩子会等到 `transition.next()`, `transition.abort()` 或是 `transition.redirect()` 之一被调用才 resolve。例如: + + ``` js + route: { + activate: function (transition) { + // 一秒后 resolve + setTimeout(transition.next, 1000) + } + } + ``` + +4. 在验证类的钩子,比如 `canActivate`, `canDeactivate` 以及[全局 beforeEach 钩子](../api/before-each.md) 中,如果返回值是一个布尔值 (Boolean),也会使得钩子同步 resolve。 + +### 在钩子中返回 Promise + +- 当在钩子函数中返回一个 Promise 时,系统会在该 Promise 被 resolve 之后自动调用`transition.next`。 + +- 如果 Promise 在验证阶段被 reject,系统会调用 `transition.abort`。 + +- 如果 Promise 在激活阶段被 reject,系统会调用 `transition.next` 。 + +- 对于验证类钩子( `canActivate` 和 `canDeactivate` ),如果 Promise resolve 之后的值是假值( falsy value ),系统会中断此次切换。 + +- 如果一个被 reject 的 Promise 抛出了未捕获的异常,这个异常会继续向上抛出,除非在创建路由器的时候启用了参数 `suppressTransitionError` 。 + +**例子:** + +``` js +// 在组件定义内部 +route: { + canActivate: function () { + // 假设此 service 返回一个 Promise ,这个 Promise 被断定后 + // 的值是 `true` 或者 `false` + return authenticationService.isLoggedIn() + }, + activate: function (transition) { + return messageService + .fetch(transition.to.params.messageId) + .then((message) => { + // 获取数据后更新 data + // 组件知道此函数执行过后才会被展示出来 + this.message = message + }) + } +} +``` + +此处,我们在 `activate` 钩子中异步的获取数据,因为这里仅仅是做个示例;注意通常我们可以使用[ `data` 钩子](data.md)来做这些,它会更加适合。 + +**提示:** 如果使用 ES6 ,可以使用参数解构( argument destructuring )使钩子更加简洁: + +``` js +route: { + activate ({ next }) { + // when done: + next() + } +} +``` + +查看 vue-router 中的[高级示例](https://github.com/vuejs/vue-router/tree/dev/example/advanced) + +### 钩子合并 + +和组件本身的生命周期钩子一样,以下路由生命周期钩子: + +- `data` +- `activate` +- `deactivate` + +也会在合并选项时(扩展类或是使用 mixins)被合并。举例来说,如果你的组件本身定义了一个路由 `data` 钩子,而这个组件所调用的一个 mixin 也定义了一个路由 `data` 钩子,则这两个钩子都会被调用,并且各自返回的数据将会被最终合并到一起。 + +需要注意的是,验证类钩子,比如 `canActivate`, `canDeactivate` 和 `canReuse` 在合并选项时会直接被新值覆盖。 diff --git a/docs/zh-cn/route.md b/docs/zh-cn/route.md new file mode 100644 index 000000000..3330a09d1 --- /dev/null +++ b/docs/zh-cn/route.md @@ -0,0 +1,104 @@ +# 路由规则和路由匹配 + +Vue-router 做路径匹配时支持动态片段、全匹配片段以及查询参数(片段指的是 URL 中的一部分)。对于解析过的路由,这些信息都可以通过**路由上下文对象**(从现在起,我们会称其为路由对象)访问。 +在使用了 vue-router 的应用中,路由对象会被注入每个组件中,赋值为 `this.$route` ,并且当路由切换时,路由对象会被更新。 + +路由对象暴露了以下属性: + +- **$route.path** + + 字符串,等于当前路由对象的路径,会被解析为绝对路径,如 `"/foo/bar"` 。 + +- **$route.params** + + 对象,包含路由中的动态片段和全匹配片段的键值对,详情见后文 + +- **$route.query** + + 对象,包含路由中查询参数的键值对。例如,对于 `/foo?user=1` ,会得到 `$route.query.user == 1` 。 + +- **$route.router** + + 路由规则所属的路由器(以及其所属的组件)。 + +- **$route.matched** + + 数组,包含当前匹配的路径中所包含的所有片段所对应的配置参数对象。 + +- **$route.name** + + 当前路径的名字。 (参见[具名路径](./named.md)) + +### 自定义字段 + +除了以上这些内置的属性外,在路由设置对象中的其他自定义字段也会被拷贝到最终的路由对象上。例如: + +``` js +router.map({ + '/a': { + component: { ... }, + auth: true // 这里 auth 是一个自定义字段 + } +}) +``` + +当 `/a` 被匹配时,`$route.auth` 的值将会是 `true`。我们可以利用这个特性在全局的钩子函数中进行身份验证: + +``` js +router.beforeEach(function (transition) { + if (transition.to.auth) { + // 对用户身份进行验证... + } +}) +``` + +当嵌套的路径被匹配时,每一个路径段的自定义字段都会被拷贝到同一个路由对象上。如果一个子路径和一个父路径有相同的字段,则子路径的值会覆盖父路径的值。 + +### 在模板中使用 + +你可以直接在组件模板中使用 `$route` 。例如: + +``` html +<div> + <p>当前路径: {{$route.path}}</p> + <p>当前路由参数: {{$route.params | json}}</p> +</div> +``` + +### 路由匹配 + +#### 动态片段 + +动态片段使用以冒号开头的路径片段定义,例如 `user/:username` 中,`:username` 就是动态片段。它会匹配注入 `/user/foo` 或者 `/user/bar` 之类的路径。当路径匹配一个含有动态片段的路由规则时,动态片段的信息可以从 `$route.params` 中获得。 + +使用示例: + +``` js +router.map({ + '/user/:username': { + component: { + template: '<p>用户名是{{$route.params.username}}</p>' + } + } +}) +``` + +一条路径中可以包含多个动态片段,每个片段都会被解析成 `$route.params` 的一个键值对。 + +例子: + +| 模式 | 匹配的路径 | $route.params | +|---------|------|--------| +| /user/:username | /user/evan | `{ username: 'evan' }` | +| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: 123 }` | + +#### 全匹配片段 + +动态片段只能匹配路径中的一个部分,而全匹配片段则基本类似于它的贪心版。例如 `/foo/*bar` 会匹配任何以 `/foo/` 开头的路径。匹配的部分也会被解析为 `$route.params` 中的一个键值对。 + +例如: + +| 模式 | 匹配的路径 | $route.params | +|---------|------|--------| +| /user/*any | /user/a/b/c | `{ any: 'a/b/c' }` | +| /foo/*any/bar | /foo/a/b/bar | `{ any: 'a/b' }` | diff --git a/docs/zh-cn/view.md b/docs/zh-cn/view.md new file mode 100644 index 000000000..2b8fce671 --- /dev/null +++ b/docs/zh-cn/view.md @@ -0,0 +1,13 @@ +# `<router-view>` + +`<router-view>` 用于渲染匹配的组件,它基于 Vue 的动态组件系统,所以它继承了一个正常动态组件的很多特性。 + +- 你可以传递 props。 +- `<router-view>` 中的 HTML 内容会被插入到相应组件的内容插入点(由 content 指定)。 +- `v-transition` 和 `transition-mode` 的完整支持。注意:为了场景切换效果能正常工作,路由组件必须不是一个[片断实例](http://vuejs.org/guide/components.html#Fragment_Instance)。 +- `v-ref` 也得到支持;被渲染的组件会注册到父级组件的 `this.$` 对象。 + +然而,它也有一些限制 + +- ~~`keep-alive` 不支持。~~ `keep-alive` 目前在 0.7.2+ 已经可用。 +- `wait-for` 也不支持。你应该使用[切换钩子函数 `activate` ](pipeline/activate.html)控制切换的时机。 diff --git a/docs/zh/README.md b/docs/zh/README.md deleted file mode 100644 index 394bb9a88..000000000 --- a/docs/zh/README.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -home: true -heroImage: /logo.png -actionText: Get Started → -actionLink: /zh/installation.html -footer: MIT Licensed | Copyright © 2014-present Evan You, Eduardo San Martin Morote ---- - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">观看 Vue School 的关于 Vue Router 的免费视频课程 (英文)</a></div> - -Vue Router 是 [Vue.js](http://cn.vuejs.org) 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有: - -- 嵌套的路由/视图表 -- 模块化的、基于组件的路由配置 -- 路由参数、查询、通配符 -- 基于 Vue.js 过渡系统的视图过渡效果 -- 细粒度的导航控制 -- 带有自动激活的 CSS class 的链接 -- HTML5 历史模式或 hash 模式,在 IE9 中自动降级 -- 自定义的滚动条行为 - -现在开始[起步](./guide/)或尝试一下我们的[示例](https://github.com/vuejs/vue-router/tree/dev/examples)吧 (查看仓库的 [`README.md`](https://github.com/vuejs/vue-router/) 来运行它们)。 - -<HomeSponsors /> diff --git a/docs/zh/api/README.md b/docs/zh/api/README.md deleted file mode 100644 index 61540b45c..000000000 --- a/docs/zh/api/README.md +++ /dev/null @@ -1,613 +0,0 @@ ---- -sidebar: auto ---- - -# API 参考 - -## `<router-link>` - -`<router-link>` 组件支持用户在具有路由功能的应用中 (点击) 导航。 -通过 `to` 属性指定目标地址,默认渲染成带有正确链接的 `<a>` 标签,可以通过配置 `tag` 属性生成别的标签.。另外,当目标路由成功激活时,链接元素自动设置一个表示激活的 CSS 类名。 - -`<router-link>` 比起写死的 `<a href="...">` 会好一些,理由如下: - -- 无论是 HTML5 history 模式还是 hash 模式,它的表现行为一致,所以,当你要切换路由模式,或者在 IE9 降级使用 hash 模式,无须作任何变动。 -- 在 HTML5 history 模式下,`router-link` 会守卫点击事件,让浏览器不再重新加载页面。 -- 当你在 HTML5 history 模式下使用 `base` 选项之后,所有的 `to` 属性都不需要写 (基路径) 了。 - -### `v-slot` API (3.1.0 新增) - -`router-link` 通过一个[作用域插槽](https://cn.vuejs.org/v2/guide/components-slots.html#作用域插槽)暴露底层的定制能力。这是一个更高阶的 API,主要面向库作者,但也可以为开发者提供便利,多数情况用在一个类似 _NavLink_ 这样的自定义组件里。 - -**在使用 `v-slot` API 时,需要向 `router-link` 传入一个单独的子元素**。否则 `router-link` 将会把子元素包裹在一个 `span` 元素内。 - -```html -<router-link - to="/about" - custom - v-slot="{ href, route, navigate, isActive, isExactActive }" -> - <NavLink :active="isActive" :href="href" @click="navigate" - >{{ route.fullPath }}</NavLink - > -</router-link> -``` - -- `href`:解析后的 URL。将会作为一个 `a` 元素的 `href` attribute。 -- `route`:解析后的规范化的地址。 -- `navigate`:触发导航的函数。**会在必要时自动阻止事件**,和 `router-link` 同理。 -- `isActive`:如果需要应用[激活的 class](#active-class) 则为 `true`。允许应用一个任意的 class。 -- `isExactActive`:如果需要应用[精确激活的 class](#exact-active-class) 则为 `true`。允许应用一个任意的 class。 - -### 示例:将激活的 class 应用在外层元素 - -有的时候我们可能想把激活的 class 应用到一个外部元素而不是 `<a>` 标签本身,这时你可以在一个 `router-link` 中包裹该元素并使用 `v-slot` property 来创建链接: - -```html -<router-link - to="/foo" - v-slot="{ href, route, navigate, isActive, isExactActive }" - custom -> - <li - :class="[isActive && 'router-link-active', isExactActive && 'router-link-exact-active']" - > - <a :href="href" @click="navigate">{{ route.fullPath }}</a> - </li> -</router-link> -``` - -:::tip 提示 -如果你在 `<a>` 元素上添加一个 `target="_blank"`,则 `@click="navigate"` 处理器会被忽略。 -::: - -## `<router-link>` Props - -### to - -- 类型: `string | Location` -- required - - 表示目标路由的链接。当被点击后,内部会立刻把 `to` 的值传到 `router.push()`,所以这个值可以是一个字符串或者是描述目标位置的对象。 - - ```html - <!-- 字符串 --> - <router-link to="home">Home</router-link> - <!-- 渲染结果 --> - <a href="home">Home</a> - - <!-- 使用 v-bind 的 JS 表达式 --> - <router-link v-bind:to="'home'">Home</router-link> - - <!-- 不写 v-bind 也可以,就像绑定别的属性一样 --> - <router-link :to="'home'">Home</router-link> - - <!-- 同上 --> - <router-link :to="{ path: 'home' }">Home</router-link> - - <!-- 命名的路由 --> - <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> - - <!-- 带查询参数,下面的结果为 /register?plan=private --> - <router-link :to="{ path: 'register', query: { plan: 'private' }}" - >Register</router-link - > - ``` - -### replace - -- 类型: `boolean` -- 默认值: `false` - - 设置 `replace` 属性的话,当点击时,会调用 `router.replace()` 而不是 `router.push()`,于是导航后不会留下 history 记录。 - - ```html - <router-link :to="{ path: '/abc'}" replace></router-link> - ``` - -### append - -- 类型: `boolean` -- 默认值: `false` - - 设置 `append` 属性后,则在当前 (相对) 路径前添加基路径。例如,我们从 `/a` 导航到一个相对路径 `b`,如果没有配置 `append`,则路径为 `/b`,如果配了,则为 `/a/b` - - ```html - <router-link :to="{ path: 'relative/path'}" append></router-link> - ``` - -### tag - -- 类型: `string` -- 默认值: `"a"` - - 有时候想要 `<router-link>` 渲染成某种标签,例如 `<li>`。 - 于是我们使用 `tag` prop 类指定何种标签,同样它还是会监听点击,触发导航。 - - ```html - <router-link to="/foo" tag="li">foo</router-link> - <!-- 渲染结果 --> - <li>foo</li> - ``` - -### active-class - -- 类型: `string` -- 默认值: `"router-link-active"` - - 设置链接激活时使用的 CSS 类名。默认值可以通过路由的构造选项 `linkActiveClass` 来全局配置。 - -### exact - -- 类型: `boolean` -- 默认值: `false` - - “是否激活”默认类名的依据是**包含匹配**。 - 举个例子,如果当前的路径是 `/a` 开头的,那么 `<router-link to="/a">` 也会被设置 CSS 类名。 - - 按照这个规则,每个路由都会激活 `<router-link to="/">`!想要链接使用“精确匹配模式”,则使用 `exact` 属性: - - ```html - <!-- 这个链接只会在地址为 / 的时候被激活 --> - <router-link to="/" exact></router-link> - ``` - - 查看更多关于激活链接类名的例子[可运行](https://jsfiddle.net/8xrk1n9f/) - -### event - -- 类型: `string | Array<string>` -- 默认值: `'click'` - - 声明可以用来触发导航的事件。可以是一个字符串或是一个包含字符串的数组。 - -### exact-active-class - -- 类型: `string` -- 默认值: `"router-link-exact-active"` - - 配置当链接被精确匹配的时候应该激活的 class。注意默认值也是可以通过路由构造函数选项 `linkExactActiveClass` 进行全局配置的。 - -### aria-current-value - -- 类型: `'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false'` -- 默认值: `"page"` - - 当链接根据精确匹配规则激活时配置的 `aria-current` 的值。这个值应该是 ARIA 规范中[允许的 aria-current 的值](https://www.w3.org/TR/wai-aria-1.2/#aria-current)。在绝大多数场景下,默认值 `page` 应该是最合适的。 - -## `<router-view>` - -`<router-view>` 组件是一个 functional 组件,渲染路径匹配到的视图组件。`<router-view>` 渲染的组件还可以内嵌自己的 `<router-view>`,根据嵌套路径,渲染嵌套组件。 - -其他属性 (非 router-view 使用的属性) 都直接传给渲染的组件, -很多时候,每个路由的数据都是包含在路由参数中。 - -因为它也是个组件,所以可以配合 `<transition>` 和 `<keep-alive>` 使用。如果两个结合一起用,要确保在内层使用 `<keep-alive>`: - -```html -<transition> - <keep-alive> - <router-view></router-view> - </keep-alive> -</transition> -``` - -## `<router-view>` Props - -### name - -- 类型: `string` -- 默认值: `"default"` - - 如果 `<router-view>`设置了名称,则会渲染对应的路由配置中 `components` 下的相应组件。查看 [命名视图](../guide/essentials/named-views.md) 中的例子。 - -## Router 构建选项 - -### routes - -- 类型: `Array<RouteConfig>` - - `RouteConfig` 的类型定义: - - ```ts - interface RouteConfig = { - path: string, - component?: Component, - name?: string, // 命名路由 - components?: { [name: string]: Component }, // 命名视图组件 - redirect?: string | Location | Function, - props?: boolean | Object | Function, - alias?: string | Array<string>, - children?: Array<RouteConfig>, // 嵌套路由 - beforeEnter?: (to: Route, from: Route, next: Function) => void, - meta?: any, - - // 2.6.0+ - caseSensitive?: boolean, // 匹配规则是否大小写敏感?(默认值:false) - pathToRegexpOptions?: Object // 编译正则的选项 - } - ``` - -### mode - -- 类型: `string` -- 默认值: `"hash" (浏览器环境) | "abstract" (Node.js 环境)` -- 可选值: `"hash" | "history" | "abstract"` - - 配置路由模式: - - - `hash`: 使用 URL hash 值来作路由。支持所有浏览器,包括不支持 HTML5 History Api 的浏览器。 - - - `history`: 依赖 HTML5 History API 和服务器配置。查看 [HTML5 History 模式](../guide/essentials/history-mode.md)。 - - - `abstract`: 支持所有 JavaScript 运行环境,如 Node.js 服务器端。**如果发现没有浏览器的 API,路由会自动强制进入这个模式。** - -### base - -- 类型: `string` - -- 默认值: `"/"` - - 应用的基路径。例如,如果整个单页应用服务在 `/app/` 下,然后 `base` 就应该设为 `"/app/"`。 - -### linkActiveClass - -- 类型: `string` - -- 默认值: `"router-link-active"` - - 全局配置 `<router-link>` 默认的激活的 class。参考 [router-link](#router-link)。 - -### linkExactActiveClass - -- 类型: `string` - -- 默认值: `"router-link-exact-active"` - - 全局配置 `<router-link>` 默认的精确激活的 class。可同时翻阅 [router-link](#router-link)。 - -### scrollBehavior - -- 类型: `Function` - - 签名: - - ```ts - type PositionDescriptor = - { x: number, y: number } | - { selector: string } | - void - - type scrollBehaviorHandler = ( - to: Route, - from: Route, - savedPosition?: { x: number, y: number } - ) => PositionDescriptor | Promise<PositionDescriptor> - ``` - - 更多详情参考[滚动行为](../guide/advanced/scroll-behavior.md)。 - -### parseQuery / stringifyQuery - -- 类型: `Function` - - 提供自定义查询字符串的解析/反解析函数。覆盖默认行为。 - -### fallback - -- 类型: `boolean` - -- 默认值: `true` - - 当浏览器不支持 `history.pushState` 控制路由是否应该回退到 `hash` 模式。默认值为 `true`。 - - 在 IE9 中,设置为 `false` 会使得每个 `router-link` 导航都触发整页刷新。它可用于工作在 IE9 下的服务端渲染应用,因为一个 hash 模式的 URL 并不支持服务端渲染。 - -## Router 实例属性 - -### router.app - -- 类型: `Vue instance` - - 配置了 `router` 的 Vue 根实例。 - -### router.mode - -- 类型: `string` - - 路由使用的[模式](#mode)。 - -### router.currentRoute - -- 类型: `Route` - - 当前路由对应的[路由信息对象](#路由对象)。 - -### router.START_LOCATION - -- 类型:`Route` - - 以[路由对象](#路由对象)的格式展示初始路由地址,即路由开始的地方。可用在导航守卫中以区分初始导航。 - - ```js - import VueRouter from 'vue-router' - - const router = new VueRouter({ - // ... - }) - - router.beforeEach((to, from) => { - if (from === VueRouter.START_LOCATION) { - // 初始导航 - } - }) - ``` - -## Router 实例方法 - -### router.beforeEach - -### router.beforeResolve - -### router.afterEach - -函数签名: - -```js -router.beforeEach((to, from, next) => { - /* 必须调用 `next` */ -}) - -router.beforeResolve((to, from, next) => { - /* 必须调用 `next` */ -}) - -router.afterEach((to, from) => {}) -``` - -增加全局的导航守卫。参考[导航守卫](../guide/advanced/navigation-guards.md)。 - -在 2.5.0+ 这三个方法都返回一个移除已注册的守卫/钩子的函数。 - -### router.push - -### router.replace - -### router.go - -### router.back - -### router.forward - -函数签名: - -```js -router.push(location, onComplete?, onAbort?) -router.push(location).then(onComplete).catch(onAbort) -router.replace(location, onComplete?, onAbort?) -router.replace(location).then(onComplete).catch(onAbort) -router.go(n) -router.back() -router.forward() -``` - -动态的导航到一个新 URL。参考[编程式导航](../guide/essentials/navigation.md)。 - -这些函数仅在安装路由插件并将其传递给 Vue 根实例后调用,如[起步](../guide/README.md)所示。 - -### router.getMatchedComponents - -函数签名: - -```js -const matchedComponents: Array<Component> = router.getMatchedComponents(location?) -``` - -返回目标位置或是当前路由匹配的组件数组 (是数组的定义/构造类,不是实例)。通常在服务端渲染的数据预加载时使用。 - -### router.resolve - -函数签名: - -```js -const resolved: { - location: Location; - route: Route; - href: string; -} = router.resolve(location, current?, append?) -``` - -解析目标位置 (格式和 `<router-link>` 的 `to` prop 一样)。 - -- `current` 是当前默认的路由 (通常你不需要改变它) -- `append` 允许你在 `current` 路由上附加路径 (如同 [`router-link`](#router-link.md-props)) - -### router.addRoutes - -*已废弃*:使用 [`router.addRoute()`](#router-addroute) 代替。 - -函数签名: - -```js -router.addRoutes(routes: Array<RouteConfig>) -``` - -动态添加更多的路由规则。参数必须是一个符合 `routes` 选项要求的数组。 - -### router.addRoute - -添加一条新路由规则。如果该路由规则有 `name`,并且已经存在一个与之相同的名字,则会覆盖它。 - -函数签名: - -```ts -addRoute(route: RouteConfig): () => void -``` - -### router.addRoute - -添加一条新的路由规则记录作为现有路由的子路由。如果该路由规则有 `name`,并且已经存在一个与之相同的名字,则会覆盖它。 - -函数签名: - -```ts -addRoute(parentName: string, route: RouteConfig): () => void -``` - -### router.getRoutes - -获取所有活跃的路由记录列表。**注意只有文档中记录下来的 property 才被视为公共 API**,避免使用任何其它 property,例如 `regex`,因为它在 Vue Router 4 中不存在。 - -函数签名: - -```ts -getRoutes(): RouteRecord[] -``` - -### router.onReady - -函数签名: - -```js -router.onReady(callback, [errorCallback]) -``` - -该方法把一个回调排队,在路由完成初始导航时调用,这意味着它可以解析所有的异步进入钩子和路由初始化相关联的异步组件。 - -这可以有效确保服务端渲染时服务端和客户端输出的一致。 - -第二个参数 `errorCallback` 只在 2.4+ 支持。它会在初始化路由解析运行出错 (比如解析一个异步组件失败) 时被调用。 - -### router.onError - -函数签名: - -```js -router.onError(callback) -``` - -注册一个回调,该回调会在路由导航过程中出错时被调用。注意被调用的错误必须是下列情形中的一种: - -- 错误在一个路由守卫函数中被同步抛出; - -- 错误在一个路由守卫函数中通过调用 `next(err)` 的方式异步捕获并处理; - -- 渲染一个路由的过程中,需要尝试解析一个异步组件时发生错误。 - -## 路由对象 - -一个**路由对象 (route object)** 表示当前激活的路由的状态信息,包含了当前 URL 解析得到的信息,还有 URL 匹配到的**路由记录 (route records)**。 - -路由对象是不可变 (immutable) 的,每次成功的导航后都会产生一个新的对象。 - -路由对象出现在多个地方: - -- 在组件内,即 `this.$route` - -- 在 `$route` 观察者回调内 - -- `router.match(location)` 的返回值 - -- 导航守卫的参数: - - ```js - router.beforeEach((to, from, next) => { - // `to` 和 `from` 都是路由对象 - }) - ``` - -- `scrollBehavior` 方法的参数: - - ```js - const router = new VueRouter({ - scrollBehavior(to, from, savedPosition) { - // `to` 和 `from` 都是路由对象 - } - }) - ``` - -### 路由对象属性 - -- **\$route.path** - - - 类型: `string` - - 字符串,对应当前路由的路径,总是解析为绝对路径,如 `"/foo/bar"`。 - -- **\$route.params** - - - 类型: `Object` - - 一个 key/value 对象,包含了动态片段和全匹配片段,如果没有路由参数,就是一个空对象。 - -- **\$route.query** - - - 类型: `Object` - - 一个 key/value 对象,表示 URL 查询参数。例如,对于路径 `/foo?user=1`,则有 `$route.query.user == 1`,如果没有查询参数,则是个空对象。 - -- **\$route.hash** - - - 类型: `string` - - 当前路由的 hash 值 (带 `#`) ,如果没有 hash 值,则为空字符串。 - -- **\$route.fullPath** - - - 类型: `string` - - 完成解析后的 URL,包含查询参数和 hash 的完整路径。 - -- **\$route.matched** - - - 类型: `Array<RouteRecord>` - - 一个数组,包含当前路由的所有嵌套路径片段的**路由记录** 。路由记录就是 `routes` 配置数组中的对象副本 (还有在 `children` 数组)。 - - ```js - const router = new VueRouter({ - routes: [ - // 下面的对象就是路由记录 - { - path: '/foo', - component: Foo, - children: [ - // 这也是个路由记录 - { path: 'bar', component: Bar } - ] - } - ] - }) - ``` - - 当 URL 为 `/foo/bar`,`$route.matched` 将会是一个包含从上到下的所有对象 (副本)。 - -- **\$route.name** - - 当前路由的名称,如果有的话。(查看[命名路由](../guide/essentials/named-routes.md)) - -- **\$route.redirectedFrom** - - 如果存在重定向,即为重定向来源的路由的名字。(参阅[重定向和别名](../guide/essentials/redirect-and-alias.md)) - -## 组件注入 - -### 注入的属性 - -通过在 Vue 根实例的 `router` 配置传入 router 实例,下面这些属性成员会被注入到每个子组件。 - -- **this.\$router** - - router 实例。 - -- **this.\$route** - - 当前激活的[路由信息对象](#路由对象)。这个属性是只读的,里面的属性是 immutable (不可变) 的,不过你可以 watch (监测变化) 它。 - -### 增加的组件配置选项 - -- **beforeRouteEnter** -- **beforeRouteUpdate** -- **beforeRouteLeave** - - 查看[组件内的守卫](../guide/advanced/navigation-guards.md#组件内的守卫)。 diff --git a/docs/zh/guide/README.md b/docs/zh/guide/README.md deleted file mode 100644 index f03de3092..000000000 --- a/docs/zh/guide/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# 起步 - -::: tip 注意 -教程中的案例代码将使用 [ES2015](https://github.com/lukehoban/es6features) 来编写。 - -同时,所有的例子都将使用完整版的 Vue 以解析模板。更多细节请[移步这里](https://cn.vuejs.org/v2/guide/installation.html#运行时-编译器-vs-只包含运行时)。 -::: - -<div class="vueschool"><a href="https://vueschool.io/courses/vue-router-for-everyone?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to build powerful Single Page Applications with the Vue Router on Vue School">观看 Vue School 的关于 Vue Router 的免费视频课程 (英文)</a></div> - -用 Vue.js + Vue Router 创建单页应用,感觉很自然:使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 Vue Router 添加进来,我们需要做的是,将组件 (components) 映射到路由 (routes),然后告诉 Vue Router 在哪里渲染它们。下面是个基本例子: - -## HTML - -```html -<script src="https://unpkg.com/vue@2/dist/vue.js"></script> -<script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script> - -<div id="app"> - <h1>Hello App!</h1> - <p> - <!-- 使用 router-link 组件来导航. --> - <!-- 通过传入 `to` 属性指定链接. --> - <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 --> - <router-link to="/foo">Go to Foo</router-link> - <router-link to="/bar">Go to Bar</router-link> - </p> - <!-- 路由出口 --> - <!-- 路由匹配到的组件将渲染在这里 --> - <router-view></router-view> -</div> -``` - -## JavaScript - -```js -// 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter) - -// 1. 定义 (路由) 组件。 -// 可以从其他文件 import 进来 -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -// 2. 定义路由 -// 每个路由应该映射一个组件。 其中"component" 可以是 -// 通过 Vue.extend() 创建的组件构造器, -// 或者,只是一个组件配置对象。 -// 我们晚点再讨论嵌套路由。 -const routes = [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } -] - -// 3. 创建 router 实例,然后传 `routes` 配置 -// 你还可以传别的配置参数, 不过先这么简单着吧。 -const router = new VueRouter({ - routes // (缩写) 相当于 routes: routes -}) - -// 4. 创建和挂载根实例。 -// 记得要通过 router 配置参数注入路由, -// 从而让整个应用都有路由功能 -const app = new Vue({ - router -}).$mount('#app') - -// 现在,应用已经启动了! -``` - -通过注入路由器,我们可以在任何组件内通过 `this.$router` 访问路由器,也可以通过 `this.$route` 访问当前路由: - -```js -// Home.vue -export default { - computed: { - username() { - // 我们很快就会看到 `params` 是什么 - return this.$route.params.username - } - }, - methods: { - goBack() { - window.history.length > 1 ? this.$router.go(-1) : this.$router.push('/') - } - } -} -``` - -该文档通篇都常使用 `router` 实例。留意一下 `this.$router` 和 `router` 使用起来完全一样。我们使用 `this.$router` 的原因是我们并不想在每个独立需要封装路由的组件中都导入路由。 - -你可以看看这个[在线的](https://jsfiddle.net/yyx990803/xgrjzsup/)例子。 - -要注意,当 `<router-link>` 对应的路由匹配成功,将自动设置 class 属性值 `.router-link-active`。查看 [API 文档](../api/#router-link) 学习更多相关内容。 diff --git a/docs/zh/guide/advanced/data-fetching.md b/docs/zh/guide/advanced/data-fetching.md deleted file mode 100644 index 378ece882..000000000 --- a/docs/zh/guide/advanced/data-fetching.md +++ /dev/null @@ -1,110 +0,0 @@ -# 数据获取 - -有时候,进入某个路由后,需要从服务器获取数据。例如,在渲染用户信息时,你需要从服务器获取用户的数据。我们可以通过两种方式来实现: - -- **导航完成之后获取**:先完成导航,然后在接下来的组件生命周期钩子中获取数据。在数据获取期间显示“加载中”之类的指示。 - -- **导航完成之前获取**:导航完成前,在路由进入的守卫中获取数据,在数据获取成功后执行导航。 - -从技术角度讲,两种方式都不错 —— 就看你想要的用户体验是哪种。 - -## 导航完成后获取数据 - -当你使用这种方式时,我们会马上导航和渲染组件,然后在组件的 `created` 钩子中获取数据。这让我们有机会在数据获取期间展示一个 loading 状态,还可以在不同视图间展示不同的 loading 状态。 - -假设我们有一个 `Post` 组件,需要基于 `$route.params.id` 获取文章数据: - -``` html -<template> - <div class="post"> - <div v-if="loading" class="loading"> - Loading... - </div> - - <div v-if="error" class="error"> - {{ error }} - </div> - - <div v-if="post" class="content"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </div> -</template> -``` - -``` js -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - // 组件创建完后获取数据, - // 此时 data 已经被 observed 了 - this.fetchData() - }, - watch: { - // 如果路由有变化,会再次执行该方法 - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - // replace getPost with your data fetching util / API wrapper - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -``` - -## 在导航完成前获取数据 - -通过这种方式,我们在导航转入新的路由前获取数据。我们可以在接下来的组件的 `beforeRouteEnter` 守卫中获取数据,当数据获取成功后只调用 `next` 方法。 - -``` js -export default { - data () { - return { - post: null, - error: null - } - }, - beforeRouteEnter (to, from, next) { - getPost(to.params.id, (err, post) => { - next(vm => vm.setData(err, post)) - }) - }, - // 路由改变前,组件就已经渲染完了 - // 逻辑稍稍不同 - beforeRouteUpdate (to, from, next) { - this.post = null - getPost(to.params.id, (err, post) => { - this.setData(err, post) - next() - }) - }, - methods: { - setData (err, post) { - if (err) { - this.error = err.toString() - } else { - this.post = post - } - } - } -} -``` - -在为后面的视图获取数据时,用户会停留在当前的界面,因此建议在数据获取期间,显示一些进度条或者别的指示。如果数据获取失败,同样有必要展示一些全局的错误提醒。 diff --git a/docs/zh/guide/advanced/lazy-loading.md b/docs/zh/guide/advanced/lazy-loading.md deleted file mode 100644 index 8d55a1172..000000000 --- a/docs/zh/guide/advanced/lazy-loading.md +++ /dev/null @@ -1,52 +0,0 @@ -# 路由懒加载 - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-lazy-load-routes-with-vue-router?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to increase performance by lazy loading routes on Vue School">观看 Vue School 的如何路由懒加载的免费视频课程 (英文)</a></div> - -当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。 - -结合 Vue 的[异步组件](https://cn.vuejs.org/v2/guide/components-dynamic-async.html#异步组件)和 Webpack 的[代码分割功能](https://doc.webpack-china.org/guides/code-splitting-async/#require-ensure-/),轻松实现路由组件的懒加载。 - -首先,可以将异步组件定义为返回一个 Promise 的工厂函数 (该函数返回的 Promise 应该 resolve 组件本身): - -```js -const Foo = () => - Promise.resolve({ - /* 组件定义对象 */ - }) -``` - -第二,在 Webpack 2 中,我们可以使用[动态 import](https://github.com/tc39/proposal-dynamic-import)语法来定义代码分块点 (split point): - -```js -import('./Foo.vue') // 返回 Promise -``` - -::: tip 注意 -如果您使用的是 Babel,你将需要添加 [`syntax-dynamic-import`](https://babeljs.io/docs/plugins/syntax-dynamic-import/) 插件,才能使 Babel 可以正确地解析语法。 -::: - -结合这两者,这就是如何定义一个能够被 Webpack 自动代码分割的异步组件。 - -```js -const Foo = () => import('./Foo.vue') -``` - -在路由配置中什么都不需要改变,只需要像往常一样使用 `Foo`: - -```js -const router = new VueRouter({ - routes: [{ path: '/foo', component: Foo }] -}) -``` - -## 把组件按组分块 - -有时候我们想把某个路由下的所有组件都打包在同个异步块 (chunk) 中。只需要使用 [命名 chunk](https://webpack.js.org/guides/code-splitting-require/#chunkname),一个特殊的注释语法来提供 chunk name (需要 Webpack > 2.4)。 - -```js -const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue') -const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue') -``` - -Webpack 会将任何一个异步模块与相同的块名称组合到相同的异步块中。 diff --git a/docs/zh/guide/advanced/meta.md b/docs/zh/guide/advanced/meta.md deleted file mode 100644 index 78ef09977..000000000 --- a/docs/zh/guide/advanced/meta.md +++ /dev/null @@ -1,51 +0,0 @@ -# 路由元信息 - -定义路由的时候可以配置 `meta` 字段: - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - children: [ - { - path: 'bar', - component: Bar, - // a meta field - meta: { requiresAuth: true } - } - ] - } - ] -}) -``` - -那么如何访问这个 `meta` 字段呢? - -首先,我们称呼 `routes` 配置中的每个路由对象为 **路由记录**。路由记录可以是嵌套的,因此,当一个路由匹配成功后,他可能匹配多个路由记录 - -例如,根据上面的路由配置,`/foo/bar` 这个 URL 将会匹配父路由记录以及子路由记录。 - -一个路由匹配到的所有路由记录会暴露为 `$route` 对象 (还有在导航守卫中的路由对象) 的 `$route.matched` 数组。因此,我们需要遍历 `$route.matched` 来检查路由记录中的 `meta` 字段。 - -下面例子展示在全局导航守卫中检查元字段: - -``` js -router.beforeEach((to, from, next) => { - if (to.matched.some(record => record.meta.requiresAuth)) { - // this route requires auth, check if logged in - // if not, redirect to login page. - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } - } else { - next() // 确保一定要调用 next() - } -}) -``` diff --git a/docs/zh/guide/advanced/navigation-failures.md b/docs/zh/guide/advanced/navigation-failures.md deleted file mode 100644 index 9f7288b1a..000000000 --- a/docs/zh/guide/advanced/navigation-failures.md +++ /dev/null @@ -1,66 +0,0 @@ -# 导航故障 - -> 3.4.0中新增 - -::: tip 译者注 -*导航故障*,或者叫*导航失败*,表示一次失败的导航,原文叫 navigation failures,本文统一采用*导航故障*。 -::: - -当使用 `router-link` 组件时,Vue Router 会自动调用 `router.push` 来触发一次导航。 虽然大多数链接的预期行为是将用户导航到一个新页面,但也有少数情况下用户将留在同一页面上: - -- 用户已经位于他们正在尝试导航到的页面 -- 一个[导航守卫](./navigation-guards.md)通过调用 `next(false)` 中断了这次导航 -- 一个[导航守卫](./navigation-guards.md)抛出了一个错误,或者调用了 `next(new Error())` - -当使用 `router-link` 组件时,**这些失败都不会打印出错误**。然而,如果你使用 `router.push` 或者 `router.replace` 的话,可能会在控制台看到一条 _"Uncaught (in promise) Error"_ 这样的错误,后面跟着一条更具体的消息。让我们来了解一下如何区分*导航故障*。 - -::: tip 背景故事 -在 v3.2.0 中,可以通过使用 `router.push` 的两个可选的回调函数:`onComplete` 和 `onAbort` 来暴露*导航故障*。从版本 3.1.0 开始,`router.push` 和 `router.replace` 在没有提供 `onComplete`/`onAbort` 回调的情况下会返回一个 *Promise*。这个 *Promise* 的 resolve 和 reject 将分别用来代替 `onComplete` 和 `onAbort` 的调用。 -::: - - -## 检测导航故障 - -*导航故障*是一个 `Error` 实例,附带了一些额外的属性。要检查一个错误是否来自于路由器,可以使用 `isNavigationFailure` 函数: - -```js -import VueRouter from 'vue-router' -const { isNavigationFailure, NavigationFailureType } = VueRouter - -// 正在尝试访问 admin 页面 -router.push('/admin').catch(failure => { - if (isNavigationFailure(failure, NavigationFailureType.redirected)) { - // 向用户显示一个小通知 - showToast('Login in order to access the admin panel') - } -}) -``` - -::: tip -如果你忽略第二个参数:`isNavigationFailure(failure)`,那么就只会检查这个错误是不是一个*导航故障*。 -::: - -## `NavigationFailureType` - -`NavigationFailureType` 可以帮助开发者来区分不同类型的*导航故障*。有四种不同的类型: - -- `redirected`:在导航守卫中调用了 `next(newLocation)` 重定向到了其他地方。 -- `aborted`:在导航守卫中调用了 `next(false)` 中断了本次导航。 -- `cancelled`:在当前导航还没有完成之前又有了一个新的导航。比如,在等待导航守卫的过程中又调用了 `router.push`。 -- `duplicated`:导航被阻止,因为我们已经在目标位置了。 - -## *导航故障*的属性 - -所有的导航故障都会有 `to` 和 `from` 属性,分别用来表达这次失败的导航的目标位置和当前位置。 - -```js -// 正在尝试访问 admin 页面 -router.push('/admin').catch(failure => { - if (isNavigationFailure(failure, NavigationFailureType.redirected)) { - failure.to.path // '/admin' - failure.from.path // '/' - } -}) -``` - -在所有情况下,`to` 和 `from` 都是规范化的路由位置。 diff --git a/docs/zh/guide/advanced/navigation-guards.md b/docs/zh/guide/advanced/navigation-guards.md deleted file mode 100644 index f87993d86..000000000 --- a/docs/zh/guide/advanced/navigation-guards.md +++ /dev/null @@ -1,175 +0,0 @@ -# 导航守卫 - -::: tip 译者注 -“导航”表示路由正在发生改变。 -::: - -正如其名,`vue-router` 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。 - -记住**参数或查询的改变并不会触发进入/离开的导航守卫**。你可以通过[观察 `$route` 对象](../essentials/dynamic-matching.md#响应路由参数的变化)来应对这些变化,或使用 `beforeRouteUpdate` 的组件内守卫。 - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-configure-an-authentication-middleware-route-guard-with-vue-router?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to create an authentication middleware with a global route guard on Vue School">观看 Vue School 的导航守卫如何工作的免费视频课程 (英文)</a></div> - -## 全局前置守卫 - -你可以使用 `router.beforeEach` 注册一个全局前置守卫: - -```js -const router = new VueRouter({ ... }) - -router.beforeEach((to, from, next) => { - // ... -}) -``` - -当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 **等待中**。 - -每个守卫方法接收三个参数: - -- **`to: Route`**: 即将要进入的目标 [路由对象](../../api/#路由对象) - -- **`from: Route`**: 当前导航正要离开的路由 - -- **`next: Function`**: 一定要调用该方法来 **resolve** 这个钩子。执行效果依赖 `next` 方法的调用参数。 - - - **`next()`**: 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 **confirmed** (确认的)。 - - - **`next(false)`**: 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 `from` 路由对应的地址。 - - - **`next('/')` 或者 `next({ path: '/' })`**: 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 `next` 传递任意位置对象,且允许设置诸如 `replace: true`、`name: 'home'` 之类的选项以及任何用在 [`router-link` 的 `to` prop](../../api/#to) 或 [`router.push`](../../api/#router-push) 中的选项。 - - - **`next(error)`**: (2.4.0+) 如果传入 `next` 的参数是一个 `Error` 实例,则导航会被终止且该错误会被传递给 [`router.onError()`](../../api/#router-onerror) 注册过的回调。 - -**确保 `next` 函数在任何给定的导航守卫中都被严格调用一次。它可以出现多于一次,但是只能在所有的逻辑路径都不重叠的情况下,否则钩子永远都不会被解析或报错**。这里有一个在用户未能验证身份时重定向到 `/login` 的示例: - -```js -// BAD -router.beforeEach((to, from, next) => { - if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) - // 如果用户未能验证身份,则 `next` 会被调用两次 - next() -}) -``` - -```js -// GOOD -router.beforeEach((to, from, next) => { - if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' }) - else next() -}) -``` - -## 全局解析守卫 - -> 2.5.0 新增 - -在 2.5.0+ 你可以用 `router.beforeResolve` 注册一个全局守卫。这和 `router.beforeEach` 类似,区别是在导航被确认之前,**同时在所有组件内守卫和异步路由组件被解析之后**,解析守卫就被调用。 - -## 全局后置钩子 - -你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受 `next` 函数也不会改变导航本身: - -```js -router.afterEach((to, from) => { - // ... -}) -``` - -## 路由独享的守卫 - -你可以在路由配置上直接定义 `beforeEnter` 守卫: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/foo', - component: Foo, - beforeEnter: (to, from, next) => { - // ... - } - } - ] -}) -``` - -这些守卫与全局前置守卫的方法参数是一样的。 - -## 组件内的守卫 - -最后,你可以在路由组件内直接定义以下路由导航守卫: - -- `beforeRouteEnter` -- `beforeRouteUpdate` (2.2 新增) -- `beforeRouteLeave` - -```js -const Foo = { - template: `...`, - beforeRouteEnter(to, from, next) { - // 在渲染该组件的对应路由被 confirm 前调用 - // 不!能!获取组件实例 `this` - // 因为当守卫执行前,组件实例还没被创建 - }, - beforeRouteUpdate(to, from, next) { - // 在当前路由改变,但是该组件被复用时调用 - // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, - // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 - // 可以访问组件实例 `this` - }, - beforeRouteLeave(to, from, next) { - // 导航离开该组件的对应路由时调用 - // 可以访问组件实例 `this` - } -} -``` - -`beforeRouteEnter` 守卫 **不能** 访问 `this`,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。 - -不过,你可以通过传一个回调给 `next`来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。 - -```js -beforeRouteEnter (to, from, next) { - next(vm => { - // 通过 `vm` 访问组件实例 - }) -} -``` - -注意 `beforeRouteEnter` 是支持给 `next` 传递回调的唯一守卫。对于 `beforeRouteUpdate` 和 `beforeRouteLeave` 来说,`this` 已经可用了,所以**不支持**传递回调,因为没有必要了。 - -```js -beforeRouteUpdate (to, from, next) { - // just use `this` - this.name = to.params.name - next() -} -``` - -这个离开守卫通常用来禁止用户在还未保存修改前突然离开。该导航可以通过 `next(false)` 来取消。 - -```js -beforeRouteLeave (to, from, next) { - const answer = window.confirm('Do you really want to leave? you have unsaved changes!') - if (answer) { - next() - } else { - next(false) - } -} -``` - -## 完整的导航解析流程 - -1. 导航被触发。 -2. 在失活的组件里调用 `beforeRouteLeave` 守卫。 -3. 调用全局的 `beforeEach` 守卫。 -4. 在重用的组件里调用 `beforeRouteUpdate` 守卫 (2.2+)。 -5. 在路由配置里调用 `beforeEnter`。 -6. 解析异步路由组件。 -7. 在被激活的组件里调用 `beforeRouteEnter`。 -8. 调用全局的 `beforeResolve` 守卫 (2.5+)。 -9. 导航被确认。 -10. 调用全局的 `afterEach` 钩子。 -11. 触发 DOM 更新。 -12. 调用 `beforeRouteEnter` 守卫中传给 `next` 的回调函数,创建好的组件实例会作为回调函数的参数传入。 diff --git a/docs/zh/guide/advanced/scroll-behavior.md b/docs/zh/guide/advanced/scroll-behavior.md deleted file mode 100644 index a2eac879c..000000000 --- a/docs/zh/guide/advanced/scroll-behavior.md +++ /dev/null @@ -1,96 +0,0 @@ -# 滚动行为 - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-control-the-scroll-behavior-of-vue-router?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to control the scroll behavior on Vue School">观看 Vue School 的如何控制滚动行为的免费视频课程 (英文)</a></div> - -使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 `vue-router` 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。 - -**注意: 这个功能只在支持 `history.pushState` 的浏览器中可用。** - -当创建一个 Router 实例,你可以提供一个 `scrollBehavior` 方法: - -```js -const router = new VueRouter({ - routes: [...], - scrollBehavior (to, from, savedPosition) { - // return 期望滚动到哪个的位置 - } -}) -``` - -`scrollBehavior` 方法接收 `to` 和 `from` 路由对象。第三个参数 `savedPosition` 当且仅当 `popstate` 导航 (通过浏览器的 前进/后退 按钮触发) 时才可用。 - -这个方法返回滚动位置的对象信息,长这样: - -- `{ x: number, y: number }` -- `{ selector: string, offset? : { x: number, y: number }}` (offset 只在 2.6.0+ 支持) - -如果返回一个 falsy (译者注:falsy 不是 `false`,[参考这里](https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy))的值,或者是一个空对象,那么不会发生滚动。 - -举例: - -```js -scrollBehavior (to, from, savedPosition) { - return { x: 0, y: 0 } -} -``` - -对于所有路由导航,简单地让页面滚动到顶部。 - -返回 `savedPosition`,在按下 后退/前进 按钮时,就会像浏览器的原生表现那样: - -```js -scrollBehavior (to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } -} -``` - -如果你要模拟“滚动到锚点”的行为: - -```js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash - } - } -} -``` - -我们还可以利用[路由元信息](meta.md)更细颗粒度地控制滚动。查看完整例子请[移步这里](https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js)。 - -## 异步滚动 - -> 2.8.0 新增 - -你也可以返回一个 Promise 来得出预期的位置描述: - -```js -scrollBehavior (to, from, savedPosition) { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ x: 0, y: 0 }) - }, 500) - }) -} -``` - -将其挂载到从页面级别的过渡组件的事件上,令其滚动行为和页面过渡一起良好运行是可能的。但是考虑到用例的多样性和复杂性,我们仅提供这个原始的接口,以支持不同用户场景的具体实现。 - -## 平滑滚动 - -只需将 `behavior` 选项添加到 `scrollBehavior` 内部返回的对象中,就可以为[支持它的浏览器](https://developer.mozilla.org/en-US/docs/Web/API/ScrollToOptions/behavior)启用原生平滑滚动: - -```js -scrollBehavior (to, from, savedPosition) { - if (to.hash) { - return { - selector: to.hash, - behavior: 'smooth', - } - } -} -``` diff --git a/docs/zh/guide/advanced/transitions.md b/docs/zh/guide/advanced/transitions.md deleted file mode 100644 index 2039bb6a9..000000000 --- a/docs/zh/guide/advanced/transitions.md +++ /dev/null @@ -1,60 +0,0 @@ -# 过渡动效 - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-create-route-transitions-with-vue-router?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to create route transitions on Vue School">观看 Vue School 的如何创建路由过渡动效的免费视频课程 (英文)</a></div> - -`<router-view>` 是基本的动态组件,所以我们可以用 `<transition>` 组件给它添加一些过渡效果: - -```html -<transition> - <router-view></router-view> -</transition> -``` - -[Transition 的所有功能](https://v2.cn.vuejs.org/v2/guide/transitions.html) 在这里同样适用。 - -## 单个路由的过渡 - -上面的用法会给所有路由设置一样的过渡效果,如果你想让每个路由组件有各自的过渡效果,可以在各路由组件内使用 `<transition>` 并设置不同的 name。 - -```js -const Foo = { - template: ` - <transition name="slide"> - <div class="foo">...</div> - </transition> - ` -} - -const Bar = { - template: ` - <transition name="fade"> - <div class="bar">...</div> - </transition> - ` -} -``` - -## 基于路由的动态过渡 - -还可以基于当前路由与目标路由的变化关系,动态设置过渡效果: - -```html -<!-- 使用动态的 transition name --> -<transition :name="transitionName"> - <router-view></router-view> -</transition> -``` - -```js -// 接着在父组件内 -// watch $route 决定使用哪种过渡 -watch: { - '$route' (to, from) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - } -} -``` - -查看完整例子请[移步这里](https://github.com/vuejs/vue-router/blob/dev/examples/transitions/app.js)。 diff --git a/docs/zh/guide/essentials/dynamic-matching.md b/docs/zh/guide/essentials/dynamic-matching.md deleted file mode 100644 index 831f3db0e..000000000 --- a/docs/zh/guide/essentials/dynamic-matching.md +++ /dev/null @@ -1,105 +0,0 @@ -# 动态路由匹配 - -<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-dynamic-routes?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to match dynamic routes with Vue School">观看 Vue School 的如何匹配动态路由的免费视频课程 (英文)</a></div> - -我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 `User` 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 `vue-router` 的路由路径中使用“动态路径参数”(dynamic segment) 来达到这个效果: - -```js -const User = { - template: '<div>User</div>' -} - -const router = new VueRouter({ - routes: [ - // 动态路径参数 以冒号开头 - { path: '/user/:id', component: User } - ] -}) -``` - -现在呢,像 `/user/foo` 和 `/user/bar` 都将映射到相同的路由。 - -一个“路径参数”使用冒号 `:` 标记。当匹配到一个路由时,参数值会被设置到 -`this.$route.params`,可以在每个组件内使用。于是,我们可以更新 `User` 的模板,输出当前用户的 ID: - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -``` - -你可以看看这个[在线例子](https://jsfiddle.net/yyx990803/4xfa2f19/)。 - -你可以在一个路由中设置多段“路径参数”,对应的值都会设置到 `$route.params` 中。例如: - -| 模式 | 匹配路径 | \$route.params | -| ----------------------------- | ------------------- | -------------------------------------- | -| /user/:username | /user/evan | `{ username: 'evan' }` | -| /user/:username/post/:post_id | /user/evan/post/123 | `{ username: 'evan', post_id: '123' }` | - -除了 `$route.params` 外,`$route` 对象还提供了其它有用的信息,例如,`$route.query` (如果 URL 中有查询参数)、`$route.hash` 等等。你可以查看 [API 文档](../../api/#路由对象) 的详细说明。 - -## 响应路由参数的变化 - -提醒一下,当使用路由参数时,例如从 `/user/foo` 导航到 `/user/bar`,**原来的组件实例会被复用**。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。**不过,这也意味着组件的生命周期钩子不会再被调用**。 - -复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch (监测变化) `$route` 对象: - -```js -const User = { - template: '...', - watch: { - $route(to, from) { - // 对路由变化作出响应... - } - } -} -``` - -或者使用 2.2 中引入的 `beforeRouteUpdate` [导航守卫](../advanced/navigation-guards.html): - -```js -const User = { - template: '...', - beforeRouteUpdate(to, from, next) { - // react to route changes... - // don't forget to call next() - } -} -``` - -## 捕获所有路由或 404 Not found 路由 - -常规参数只会匹配被 `/` 分隔的 URL 片段中的字符。如果想匹配**任意路径**,我们可以使用通配符 (`*`): - -```js -{ - // 会匹配所有路径 - path: '*' -} -{ - // 会匹配以 `/user-` 开头的任意路径 - path: '/user-*' -} -``` - -当使用*通配符*路由时,请确保路由的顺序是正确的,也就是说含有*通配符*的路由应该放在最后。路由 `{ path: '*' }` 通常用于客户端 404 错误。如果你使用了*History 模式*,请确保[正确配置你的服务器](./history-mode.md)。 - -当使用一个*通配符*时,`$route.params` 内会自动添加一个名为 `pathMatch` 参数。它包含了 URL 通过*通配符*被匹配的部分: - -```js -// 给出一个路由 { path: '/user-*' } -this.$router.push('/user-admin') -this.$route.params.pathMatch // 'admin' -// 给出一个路由 { path: '*' } -this.$router.push('/non-existing') -this.$route.params.pathMatch // '/non-existing' -``` - -## 高级匹配模式 - -`vue-router` 使用 [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0) 作为路径匹配引擎,所以支持很多高级的匹配模式,例如:可选的动态路径参数、匹配零个或多个、一个或多个,甚至是自定义正则匹配。查看它的[文档](https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters)学习高阶的路径匹配,还有[这个例子 ](https://github.com/vuejs/vue-router/blob/dev/examples/route-matching/app.js)展示 `vue-router` 怎么使用这类匹配。 - -## 匹配优先级 - -有时候,同一个路径可以匹配多个路由,此时,匹配的优先级就按照路由的定义顺序:路由定义得越早,优先级就越高。 diff --git a/docs/zh/guide/essentials/history-mode.md b/docs/zh/guide/essentials/history-mode.md deleted file mode 100644 index 0f6a5e6ec..000000000 --- a/docs/zh/guide/essentials/history-mode.md +++ /dev/null @@ -1,143 +0,0 @@ -# HTML5 History 模式 - -`vue-router` 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。 - -如果不想要很丑的 hash,我们可以用路由的 **history 模式**,这种模式充分利用 `history.pushState` API 来完成 URL 跳转而无须重新加载页面。 - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [...] -}) -``` - -当你使用 history 模式时,URL 就像正常的 url,例如 `http://yoursite.com/user/id`,也好看! - -不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 `http://oursite.com/user/id` 就会返回 404,这就不好看了。 - -所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 `index.html` 页面,这个页面就是你 app 依赖的页面。 - -## 后端配置例子 - -**注意**:下列示例假设你在根目录服务这个应用。如果想部署到一个子目录,你需要使用 [Vue CLI 的 `publicPath` 选项](https://cli.vuejs.org/zh/config/#publicpath) 和相关的 [router `base` property](https://router.vuejs.org/zh/api/#base)。你还需要把下列示例中的根目录调整成为子目录 (例如用 `RewriteBase /name-of-your-subfolder/` 替换掉 `RewriteBase /`)。 - -#### Apache - -```apache -<IfModule mod_negotiation.c> - Options -MultiViews -</IfModule> -<IfModule mod_rewrite.c> - RewriteEngine On - RewriteBase / - RewriteRule ^index\.html$ - [L] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule . /index.html [L] -</IfModule> -``` - -除了 `mod_rewrite`,你也可以使用 [`FallbackResource`](https://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource)。 - -#### nginx - -```nginx -location / { - try_files $uri $uri/ /index.html; -} -``` - -#### 原生 Node.js - -```js -const http = require('http') -const fs = require('fs') -const httpPort = 80 - -http.createServer((req, res) => { - fs.readFile('index.html', 'utf-8', (err, content) => { - if (err) { - console.log('We cannot open "index.html" file.') - } - - res.writeHead(200, { - 'Content-Type': 'text/html; charset=utf-8' - }) - - res.end(content) - }) -}).listen(httpPort, () => { - console.log('Server listening on: http://localhost:%s', httpPort) -}) -``` - -#### 基于 Node.js 的 Express - -对于 Node.js/Express,请考虑使用 [connect-history-api-fallback 中间件](https://github.com/bripkens/connect-history-api-fallback)。 - -#### Internet Information Services (IIS) - -1. 安装 [IIS UrlRewrite](https://www.iis.net/downloads/microsoft/url-rewrite) -2. 在你的网站根目录中创建一个 `web.config` 文件,内容如下: - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <system.webServer> - <rewrite> - <rules> - <rule name="Handle History Mode and custom 404/500" stopProcessing="true"> - <match url="(.*)" /> - <conditions logicalGrouping="MatchAll"> - <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> - <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> - </conditions> - <action type="Rewrite" url="/" /> - </rule> - </rules> - </rewrite> - </system.webServer> -</configuration> -``` - -#### Caddy - -``` -rewrite { - regexp .* - to {path} / -} -``` - -#### Firebase 主机 - -在你的 `firebase.json` 中加入: - -``` -{ - "hosting": { - "public": "dist", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } -} -``` - -## 警告 - -给个警告,因为这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 `index.html` 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后再给出一个 404 页面。 - -``` js -const router = new VueRouter({ - mode: 'history', - routes: [ - { path: '*', component: NotFoundComponent } - ] -}) -``` - -或者,如果你使用 Node.js 服务器,你可以用服务端路由匹配到来的 URL,并在没有匹配到路由的时候返回 404,以实现回退。更多详情请查阅 [Vue 服务端渲染文档](https://ssr.vuejs.org/zh/)。 diff --git a/docs/zh/guide/essentials/named-routes.md b/docs/zh/guide/essentials/named-routes.md deleted file mode 100644 index ca607386b..000000000 --- a/docs/zh/guide/essentials/named-routes.md +++ /dev/null @@ -1,33 +0,0 @@ -# 命名路由 - -<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-named-routes-and-params?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to work with named routes and params with Vue School">观看 Vue School 的如何使用命名路由及其参数的免费视频课程 (英文)</a></div> - -有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。你可以在创建 Router 实例的时候,在 `routes` 配置中给某个路由设置名称。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:userId', - name: 'user', - component: User - } - ] -}) -``` - -要链接到一个命名路由,可以给 `router-link` 的 `to` 属性传一个对象: - -```html -<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link> -``` - -这跟代码调用 `router.push()` 是一回事: - -```js -router.push({ name: 'user', params: { userId: 123 } }) -``` - -这两种方式都会把路由导航到 `/user/123` 路径。 - -完整的例子请[移步这里](https://github.com/vuejs/vue-router/blob/dev/examples/named-routes/app.js)。 diff --git a/docs/zh/guide/essentials/named-views.md b/docs/zh/guide/essentials/named-views.md deleted file mode 100644 index 23bf20278..000000000 --- a/docs/zh/guide/essentials/named-views.md +++ /dev/null @@ -1,86 +0,0 @@ -# 命名视图 - -有时候想同时 (同级) 展示多个视图,而不是嵌套展示,例如创建一个布局,有 `sidebar` (侧导航) 和 `main` (主内容) 两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果 `router-view` 没有设置名字,那么默认为 `default`。 - -``` html -<router-view class="view one"></router-view> -<router-view class="view two" name="a"></router-view> -<router-view class="view three" name="b"></router-view> -``` - -一个视图使用一个组件渲染,因此对于同个路由,多个视图就需要多个组件。确保正确使用 `components` 配置 (带上 s): - -``` js -const router = new VueRouter({ - routes: [ - { - path: '/', - components: { - default: Foo, - a: Bar, - b: Baz - } - } - ] -}) -``` - -以上案例相关的可运行代码请[移步这里](https://jsfiddle.net/posva/6du90epg/)。 - -## 嵌套命名视图 - -我们也有可能使用命名视图创建嵌套视图的复杂布局。这时你也需要命名用到的嵌套 `router-view` 组件。我们以一个设置面板为例: - -``` -/settings/emails /settings/profile -+-----------------------------------+ +------------------------------+ -| UserSettings | | UserSettings | -| +-----+-------------------------+ | | +-----+--------------------+ | -| | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | -| | +-------------------------+ | | | +--------------------+ | -| | | | | | | | UserProfilePreview | | -| +-----+-------------------------+ | | +-----+--------------------+ | -+-----------------------------------+ +------------------------------+ -``` - -- `Nav` 只是一个常规组件。 -- `UserSettings` 是一个视图组件。 -- `UserEmailsSubscriptions`、`UserProfile`、`UserProfilePreview` 是嵌套的视图组件。 - -**注意**:_我们先忘记 HTML/CSS 具体的布局的样子,只专注在用到的组件上。_ - -`UserSettings` 组件的 `<template>` 部分应该是类似下面的这段代码: - -```html -<!-- UserSettings.vue --> -<div> - <h1>User Settings</h1> - <NavBar/> - <router-view/> - <router-view name="helper"/> -</div> -``` - -_嵌套的视图组件在此已经被忽略了,但是你可以在[这里](https://jsfiddle.net/posva/22wgksa3/)找到完整的源代码。_ - -然后你可以用这个路由配置完成该布局: - -```js -{ - path: '/settings', - // 你也可以在顶级路由就配置命名视图 - component: UserSettings, - children: [{ - path: 'emails', - component: UserEmailsSubscriptions - }, { - path: 'profile', - components: { - default: UserProfile, - helper: UserProfilePreview - } - }] -} -``` - -一个可以工作的示例的 demo 在[这里](https://jsfiddle.net/posva/22wgksa3/)。 diff --git a/docs/zh/guide/essentials/navigation.md b/docs/zh/guide/essentials/navigation.md deleted file mode 100644 index 62e7e1e77..000000000 --- a/docs/zh/guide/essentials/navigation.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -sidebarDepth: 0 ---- - -# 编程式的导航 - -除了使用 `<router-link>` 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。 - -## `router.push(location, onComplete?, onAbort?)` - -**注意:在 Vue 实例内部,你可以通过 `$router` 访问路由实例。因此你可以调用 `this.$router.push`。** - -想要导航到不同的 URL,则使用 `router.push` 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。 - -当你点击 `<router-link>` 时,这个方法会在内部调用,所以说,点击 `<router-link :to="...">` 等同于调用 `router.push(...)`。 - -| 声明式 | 编程式 | -| ------------------------- | ------------------ | -| `<router-link :to="...">` | `router.push(...)` | - -该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如: - -``` js -// 字符串 -router.push('home') - -// 对象 -router.push({ path: 'home' }) - -// 命名的路由 -router.push({ name: 'user', params: { userId: '123' }}) - -// 带查询参数,变成 /register?plan=private -router.push({ path: 'register', query: { plan: 'private' }}) -``` - -**注意:如果提供了 `path`,`params` 会被忽略,上述例子中的 `query` 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 `name` 或手写完整的带有参数的 `path`:** - -```js -const userId = '123' -router.push({ name: 'user', params: { userId }}) // -> /user/123 -router.push({ path: `/user/${userId}` }) // -> /user/123 -// 这里的 params 不生效 -router.push({ path: '/user', params: { userId }}) // -> /user -``` - -同样的规则也适用于 `router-link` 组件的 `to` 属性。 - -在 2.2.0+,可选的在 `router.push` 或 `router.replace` 中提供 `onComplete` 和 `onAbort` 回调作为第二个和第三个参数。这些回调将会在导航成功完成 (在所有的异步钩子被解析之后) 或终止 (导航到相同的路由、或在当前导航完成之前导航到另一个不同的路由) 的时候进行相应的调用。在 3.1.0+,可以省略第二个和第三个参数,此时如果支持 Promise,`router.push` 或 `router.replace` 将返回一个 Promise。 - -**注意**: 如果目的地和当前路由相同,只有参数发生了改变 (比如从一个用户资料到另一个 `/users/1` -> `/users/2`),你需要使用 [`beforeRouteUpdate`](./dynamic-matching.md#响应路由参数的变化) 来响应这个变化 (比如抓取用户信息)。 - -## `router.replace(location, onComplete?, onAbort?)` - -跟 `router.push` 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。 - -| 声明式 | 编程式 | -| --------------------------------- | --------------------- | -| `<router-link :to="..." replace>` | `router.replace(...)` | - -## `router.go(n)` - -这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 `window.history.go(n)`。 - -例子 - -``` js -// 在浏览器记录中前进一步,等同于 history.forward() -router.go(1) - -// 后退一步记录,等同于 history.back() -router.go(-1) - -// 前进 3 步记录 -router.go(3) - -// 如果 history 记录不够用,那就默默地失败呗 -router.go(-100) -router.go(100) -``` - -## 操作 History - -你也许注意到 `router.push`、 `router.replace` 和 `router.go` 跟 [`window.history.pushState`、 `window.history.replaceState` 和 `window.history.go`](https://developer.mozilla.org/en-US/docs/Web/API/History)好像, 实际上它们确实是效仿 `window.history` API 的。 - -因此,如果你已经熟悉 [Browser History APIs](https://developer.mozilla.org/en-US/docs/Web/API/History_API),那么在 Vue Router 中操作 history 就是超级简单的。 - -还有值得提及的,Vue Router 的导航方法 (`push`、 `replace`、 `go`) 在各类路由模式 (`history`、 `hash` 和 `abstract`) 下表现一致。 diff --git a/docs/zh/guide/essentials/nested-routes.md b/docs/zh/guide/essentials/nested-routes.md deleted file mode 100644 index 257abf267..000000000 --- a/docs/zh/guide/essentials/nested-routes.md +++ /dev/null @@ -1,102 +0,0 @@ -# 嵌套路由 - -<div class="vueschool"><a href="https://vueschool.io/lessons/vue-router-nested-routes?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to work with nested routes with Vue School">观看 Vue School 的如何使用嵌套路由的免费视频课程 (英文)</a></div> - -实际生活中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件,例如: - -``` -/user/foo/profile /user/foo/posts -+------------------+ +-----------------+ -| User | | User | -| +--------------+ | | +-------------+ | -| | Profile | | +------------> | | Posts | | -| | | | | | | | -| +--------------+ | | +-------------+ | -+------------------+ +-----------------+ -``` - -借助 `vue-router`,使用嵌套路由配置,就可以很简单地表达这种关系。 - -接着上节创建的 app: - -```html -<div id="app"> - <router-view></router-view> -</div> -``` - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} - -const router = new VueRouter({ - routes: [{ path: '/user/:id', component: User }] -}) -``` - -这里的 `<router-view>` 是最顶层的出口,渲染最高级路由匹配到的组件。同样地,一个被渲染组件同样可以包含自己的嵌套 `<router-view>`。例如,在 `User` 组件的模板添加一个 `<router-view>`: - -```js -const User = { - template: ` - <div class="user"> - <h2>User {{ $route.params.id }}</h2> - <router-view></router-view> - </div> - ` -} -``` - -要在嵌套的出口中渲染组件,需要在 `VueRouter` 的参数中使用 `children` 配置: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', - component: User, - children: [ - { - // 当 /user/:id/profile 匹配成功, - // UserProfile 会被渲染在 User 的 <router-view> 中 - path: 'profile', - component: UserProfile - }, - { - // 当 /user/:id/posts 匹配成功 - // UserPosts 会被渲染在 User 的 <router-view> 中 - path: 'posts', - component: UserPosts - } - ] - } - ] -}) -``` - -**要注意,以 `/` 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径。** - -你会发现,`children` 配置就是像 `routes` 配置一样的路由配置数组,所以呢,你可以嵌套多层路由。 - -此时,基于上面的配置,当你访问 `/user/foo` 时,`User` 的出口是不会渲染任何东西,这是因为没有匹配到合适的子路由。如果你想要渲染点什么,可以提供一个 空的 子路由: - -```js -const router = new VueRouter({ - routes: [ - { - path: '/user/:id', - component: User, - children: [ - // 当 /user/:id 匹配成功, - // UserHome 会被渲染在 User 的 <router-view> 中 - { path: '', component: UserHome } - - // ...其他子路由 - ] - } - ] -}) -``` - -提供以上案例的可运行代码请[移步这里](https://jsfiddle.net/yyx990803/L7hscd8h/)。 diff --git a/docs/zh/guide/essentials/passing-props.md b/docs/zh/guide/essentials/passing-props.md deleted file mode 100644 index 6ab202ca8..000000000 --- a/docs/zh/guide/essentials/passing-props.md +++ /dev/null @@ -1,83 +0,0 @@ -# 路由组件传参 - -<div class="vueschool"><a href="https://vueschool.io/lessons/how-to-pass-vue-router-params-as-props-to-components?friend=vuerouter" target="_blank" rel="sponsored noopener" title="Learn how to pass props to route components with Vue School">观看 Vue School 的如何向路由组件传递 prop 的免费视频课程 (英文)</a></div> - -在组件中使用 `$route` 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。 - -使用 `props` 将组件和路由解耦: - -**取代与 `$route` 的耦合** - -```js -const User = { - template: '<div>User {{ $route.params.id }}</div>' -} -const router = new VueRouter({ - routes: [{ path: '/user/:id', component: User }] -}) -``` - -**通过 `props` 解耦** - -```js -const User = { - props: ['id'], - template: '<div>User {{ id }}</div>' -} -const router = new VueRouter({ - routes: [ - { path: '/user/:id', component: User, props: true }, - - // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项: - { - path: '/user/:id', - components: { default: User, sidebar: Sidebar }, - props: { default: true, sidebar: false } - } - ] -}) -``` - -这样你便可以在任何地方使用该组件,使得该组件更易于重用和测试。 - -## 布尔模式 - -如果 `props` 被设置为 `true`,`route.params` 将会被设置为组件属性。 - -## 对象模式 - -如果 `props` 是一个对象,它会被按原样设置为组件属性。当 `props` 是静态的时候有用。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/promotion/from-newsletter', - component: Promotion, - props: { newsletterPopup: false } - } - ] -}) -``` - -## 函数模式 - -你可以创建一个函数返回 `props`。这样你便可以将参数转换成另一种类型,将静态值与基于路由的值结合等等。 - -```js -const router = new VueRouter({ - routes: [ - { - path: '/search', - component: SearchUser, - props: route => ({ query: route.query.q }) - } - ] -}) -``` - -URL `/search?q=vue` 会将 `{query: 'vue'}` 作为属性传递给 `SearchUser` 组件。 - -请尽可能保持 `props` 函数为无状态的,因为它只会在路由发生变化时起作用。如果你需要状态来定义 `props`,请使用包装组件,这样 Vue 才可以对状态变化做出反应。 - -更多高级用法,请查看[例子](https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js)。 diff --git a/docs/zh/guide/essentials/redirect-and-alias.md b/docs/zh/guide/essentials/redirect-and-alias.md deleted file mode 100644 index 811dae65c..000000000 --- a/docs/zh/guide/essentials/redirect-and-alias.md +++ /dev/null @@ -1,60 +0,0 @@ -# 重定向和别名 - -## 重定向 - -重定向也是通过 `routes` 配置来完成,下面例子是从 `/a` 重定向到 `/b`: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: '/b' } - ] -}) -``` - -重定向的目标也可以是一个命名的路由: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: { name: 'foo' }} - ] -}) -``` - -甚至是一个方法,动态返回重定向目标: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', redirect: to => { - // 方法接收 目标路由 作为参数 - // return 重定向的 字符串路径/路径对象 - }} - ] -}) -``` - -注意[导航守卫](../advanced/navigation-guards.md)并没有应用在跳转路由上,而仅仅应用在其目标上。在下面这个例子中,为 `/a` 路由添加一个 `beforeEnter` 守卫并不会有任何效果。 - -其它高级用法,请参考[例子](https://github.com/vuejs/vue-router/blob/dev/examples/redirect/app.js)。 - -## 别名 - -“重定向”的意思是,当用户访问 `/a`时,URL 将会被替换成 `/b`,然后匹配路由为 `/b`,那么“别名”又是什么呢? - -**`/a` 的别名是 `/b`,意味着,当用户访问 `/b` 时,URL 会保持为 `/b`,但是路由匹配则为 `/a`,就像用户访问 `/a` 一样。** - -上面对应的路由配置为: - -``` js -const router = new VueRouter({ - routes: [ - { path: '/a', component: A, alias: '/b' } - ] -}) -``` - -“别名”的功能让你可以自由地将 UI 结构映射到任意的 URL,而不是受限于配置的嵌套路由结构。 - -更多高级用法,请查看[例子](https://github.com/vuejs/vue-router/blob/dev/examples/route-alias/app.js)。 diff --git a/docs/zh/installation.md b/docs/zh/installation.md deleted file mode 100644 index 0ae1c03f3..000000000 --- a/docs/zh/installation.md +++ /dev/null @@ -1,52 +0,0 @@ -# 安装 - -### 直接下载 / CDN - -[https://unpkg.com/vue-router@3/dist/vue-router.js](https://unpkg.com/vue-router@3/dist/vue-router.js) - -<!--email_off--> -[Unpkg.com](https://unpkg.com) 提供了基于 NPM 的 CDN 链接。上面的链接会一直指向在 NPM 发布的最新版本。你也可以像 `https://unpkg.com/vue-router@3.0.0/dist/vue-router.js` 这样指定 版本号 或者 Tag。 -<!--/email_off--> - -在 Vue 后面加载 `vue-router`,它会自动安装的: - -``` html -<script src="/path/to/vue.js"></script> -<script src="/path/to/vue-router.js"></script> -``` - -### NPM - -``` bash -npm install vue-router -``` - -如果在一个模块化工程中使用它,必须要通过 `Vue.use()` 明确地安装路由功能: - -``` js -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) -``` - -如果使用全局的 script 标签,则无须如此 (手动安装)。 - -### Vue CLI - -如果你有一个正在使用 [Vue CLI](https://cli.vuejs.org/zh/) 的项目,你可以以项目插件的形式添加 Vue Router。CLI 可以生成上述代码及两个示例路由。**它也会覆盖你的 `App.vue`**,因此请确保在项目中运行以下命令之前备份这个文件: - -```sh -vue add router -``` - -### 构建开发版 - -如果你想使用最新的开发版,就得从 GitHub 上直接 clone,然后自己 build 一个 `vue-router`。 - -``` bash -git clone https://github.com/vuejs/vue-router.git node_modules/vue-router -cd node_modules/vue-router -npm install -npm run build -``` diff --git a/example/advanced/README.md b/example/advanced/README.md new file mode 100644 index 000000000..e8d9299cb --- /dev/null +++ b/example/advanced/README.md @@ -0,0 +1,16 @@ +# Advanced Example + +This example uses Webpack to bundle the app, and uses vue-loader to enable single file Vue components. Note this app is also used for end-to-end testing, so some of the fake timeouts are made particularly long to ensure the tests pass consistently. + +- `route-config.js` is the main route file. It demonstrates nested routing, redirection and global before hook. +- `components/inbox/index.vue` demonstrates the use of common transition lifecycle hooks. +- `components/inbox/message.vue` demonstrates using the `data` transition hook for loading asynchronous data. + +### Running the Example + +``` bash +# at repo root +npm install +# serve at localhost:8080 +npm run serve-example +``` diff --git a/example/advanced/app.vue b/example/advanced/app.vue new file mode 100644 index 000000000..8c8e44e5c --- /dev/null +++ b/example/advanced/app.vue @@ -0,0 +1,37 @@ +<style> +.view { + transition: all .5s ease; +} +.test-enter, .test-leave { + opacity: 0; + transform: translate3d(10px, 0, 0); +} +.v-link-active { + color: red; +} +[v-cloak] { + display: none; +} +</style> + +<template> + <div> + <p v-show="authenticating" style="color:red">Authenticating...</p> + <h1>App Header</h1> + <a v-link="{ path: '/inbox/message/123' }">inbox</a> + <a v-link="{ path: '/about' }">about</a> + <a v-link="{ path: '/user/1234/profile/what' }">user</a> + <a v-link="{ path: '/forbidden' }">forbidden</a> + <router-view class="view" transition="test" transition-mode="out-in" keep-alive></router-view> + </div> +</template> + +<script> +export default { + data () { + return { + authenticating: false + } + } +} +</script> diff --git a/example/advanced/components/about.vue b/example/advanced/components/about.vue new file mode 100644 index 000000000..ffc64d085 --- /dev/null +++ b/example/advanced/components/about.vue @@ -0,0 +1,9 @@ +<template> + <div> + <h2>ABOUT US...</h2> + <div style="height:1000px; border: 1px solid #f00"> + This long div is for testing { saveScrollPosition: true } in html5 mode + </div> + <p id="anchor">This anchor is for testing anchor scrolling in html5 mode</p> + </div> +</template> diff --git a/example/advanced/components/inbox/archive.vue b/example/advanced/components/inbox/archive.vue new file mode 100644 index 000000000..eb2aeca38 --- /dev/null +++ b/example/advanced/components/inbox/archive.vue @@ -0,0 +1,3 @@ +<template> + <div>archive with id: {{$route.params.messageId}}</div> +</template> diff --git a/example/advanced/components/inbox/index.vue b/example/advanced/components/inbox/index.vue new file mode 100644 index 000000000..6164d8723 --- /dev/null +++ b/example/advanced/components/inbox/index.vue @@ -0,0 +1,59 @@ +<template> + <div> + <h2>inbox! {{message.text}}</h2> + <router-view></router-view> + </div> +</template> + +<script> +module.exports = { + route: { + + // three options: + // 1. return a boolean + // 2. return a promise that resolves to a boolean + // 3. explicitly call transition.next() or abort() + canActivate (transition) { + console.log('inbox canActivate?') + if (transition.from.path === '/about') { + alert('cannot navigate from /about to /inbox') + transition.abort() + } else { + console.log('yes') + transition.next() + } + }, + + // same deal with beforeActicate + canDeactivate (transition) { + return confirm('Are you sure you want to leave inbox?') + }, + + // activate hook is called when the route is matched + // and the component has been created. + // this hook controls the timing of the component + // switching - the switching won't start until this + // hook is resolved. + activate () { + console.log('activating inbox...') + return new Promise((resolve) => { + console.log('inbox activated.') + resolve() + }) + }, + + // for doing cleanups + // destructuring can make hooks cleaner + deactivate ({ next }) { + console.log('inbox deactivated.') + next() + } + }, + + data () { + return { + message: {} + } + } +} +</script> diff --git a/example/advanced/components/inbox/message.vue b/example/advanced/components/inbox/message.vue new file mode 100644 index 000000000..44fac5a6f --- /dev/null +++ b/example/advanced/components/inbox/message.vue @@ -0,0 +1,52 @@ +<template> + <div> + <div v-if="$loadingRouteData">Loading data...</div> + <div v-if="!$loadingRouteData">message #{{message.id}}: {{message.text}}</div> + </div> +</template> + +<script> +var messagesService = require('../../services/messages') + +module.exports = { + route: { + // data hook + // Useful for doing async data loading. + // sets the component's "$loading" property to + // true when called, and sets it to false when resolved. + // two options: + // 1. return a promise + // 2. explicitly call transition.next() or + // transition.abort(reason) + data ({ to, next }) { + // "this" is available + var params = { + id: to.params.messageId + } + + // callback based + messagesService.get(params, (err, message) => { + if (err) { + // handle error, e.g. display a warning + } else { + next({ + message: message + }) + } + }) + + // or promise based (with ES6 sugar) + // return messagesService + // .get(params) + // .then(message => ({ message })) + } + }, + + // default state + data () { + return { + message: {} + } + } +} +</script> diff --git a/example/advanced/components/not-found.vue b/example/advanced/components/not-found.vue new file mode 100644 index 000000000..2d2eb09fc --- /dev/null +++ b/example/advanced/components/not-found.vue @@ -0,0 +1,3 @@ +<template> + <p>FOUR OH FOUR</p> +</template> diff --git a/example/advanced/components/user/index.vue b/example/advanced/components/user/index.vue new file mode 100644 index 000000000..7049f4072 --- /dev/null +++ b/example/advanced/components/user/index.vue @@ -0,0 +1,6 @@ +<template> + <div> + <h2>User yo</h2> + <router-view></router-view> + </div> +</template> diff --git a/example/advanced/components/user/posts.vue b/example/advanced/components/user/posts.vue new file mode 100644 index 000000000..dd914ebd7 --- /dev/null +++ b/example/advanced/components/user/posts.vue @@ -0,0 +1,3 @@ +<template> + <h3>user posts</h3> +</template> diff --git a/example/advanced/components/user/profile.vue b/example/advanced/components/user/profile.vue new file mode 100644 index 000000000..61fb50469 --- /dev/null +++ b/example/advanced/components/user/profile.vue @@ -0,0 +1,6 @@ +<template> + <div> + <h3>user profile</h3> + <p>{{$route.params.userId}} {{$route.params.something}}</p> + </div> +</template> diff --git a/example/advanced/components/user/settings.vue b/example/advanced/components/user/settings.vue new file mode 100644 index 000000000..cab16966b --- /dev/null +++ b/example/advanced/components/user/settings.vue @@ -0,0 +1,3 @@ +<template> + <div>user settings</div> +</template> diff --git a/example/advanced/index.html b/example/advanced/index.html new file mode 100644 index 000000000..936d32052 --- /dev/null +++ b/example/advanced/index.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title></title> + <style> + + </style> + </head> + <body> + + <div id="app"></div> + + <script src="http://localhost:8080/webpack-dev-server.js"></script> + <script src="/example.build.js"></script> + + </body> +</html> diff --git a/example/advanced/index.js b/example/advanced/index.js new file mode 100644 index 000000000..e15a2335d --- /dev/null +++ b/example/advanced/index.js @@ -0,0 +1,24 @@ +// warning: vue-router requires Vue 0.12.10+ +import Vue from 'vue' +import VueRouter from '../../src' +import { configRouter } from './route-config' +require('es6-promise').polyfill() + +// install router +Vue.use(VueRouter) + +// create router +const router = new VueRouter({ + history: true, + saveScrollPosition: true +}) + +// configure router +configRouter(router) + +// boostrap the app +const App = Vue.extend(require('./app.vue')) +router.start(App, '#app') + +// just for debugging +window.router = router diff --git a/example/advanced/route-config.js b/example/advanced/route-config.js new file mode 100644 index 000000000..c14b825f7 --- /dev/null +++ b/example/advanced/route-config.js @@ -0,0 +1,83 @@ +export function configRouter (router) { + + // normal routes + router.map({ + // basic example + '/about': { + // the component can also be a plain string component id, + // but a component with that id must be available in the + // App component's scope. + component: require('./components/about.vue') + }, + + // nested example + '/user/:userId': { + component: require('./components/user/index.vue'), + subRoutes: { + // matches "/user/:userId/profile/:something" + 'profile/:something': { + component: require('./components/user/profile.vue') + }, + // matches "/user/:userId/posts" + 'posts': { + component: require('./components/user/posts.vue') + }, + // matches "/user/:userId/settings" + 'settings': { + component: require('./components/user/settings.vue') + } + } + }, + + // not found handler + '*': { + component: require('./components/not-found.vue') + }, + + // advanced example + '/inbox': { + component: require('./components/inbox/index.vue'), + subRoutes: { + '/message/:messageId': { + component: require('./components/inbox/message.vue') + }, + '/archived': { + component: require('./components/inbox/archive.vue') + }, + // default component to render into the nested outlet + // when the parent route is matched but there's no + // nested segment. In this case, "/inbox". + '/': { + // inline component + component: { + template: 'default yo' + } + } + } + } + }) + + // redirect + router.redirect({ + '/info': '/about', + '/hello/:userId': '/user/:userId' + }) + + // global before + // 3 options: + // 1. return a boolean + // 2. return a Promise that resolves to a boolean + // 3. call transition.next() or transition.abort() + router.beforeEach((transition) => { + if (transition.to.path === '/forbidden') { + router.app.authenticating = true + setTimeout(() => { + router.app.authenticating = false + alert('this route is forbidden by a global before hook') + transition.abort() + }, 3000) + } else { + transition.next() + } + }) +} diff --git a/example/advanced/services/messages.js b/example/advanced/services/messages.js new file mode 100644 index 000000000..5400bd3d3 --- /dev/null +++ b/example/advanced/services/messages.js @@ -0,0 +1,11 @@ +// just a mock +export default { + get (params, cb) { + setTimeout(() => { + cb(null, { + id: params.id, + text: 'Hello this is a message' + }) + }, 3000) + } +} diff --git a/example/advanced/webpack.config.js b/example/advanced/webpack.config.js new file mode 100644 index 000000000..3f7fec7f1 --- /dev/null +++ b/example/advanced/webpack.config.js @@ -0,0 +1,23 @@ +module.exports = { + entry: { + app: ['webpack/hot/dev-server', './example/advanced/index.js'] + }, + output: { + path: './example/advanced', + filename: 'example.build.js' + }, + module: { + loaders: [ + { + test: /\.vue$/, + loader: 'vue' + }, + { + test: /\.js$/, + exclude: /node_modules|vue\/dist/, + loader: 'babel?optional[]=runtime&loose=true' + } + ] + }, + devtool: 'source-map' +} diff --git a/example/basic/example.js b/example/basic/example.js new file mode 100644 index 000000000..803a8ac8f --- /dev/null +++ b/example/basic/example.js @@ -0,0 +1,35 @@ +// define some components +var Foo = Vue.extend({ + template: '<p>This is foo!</p>' +}) + +var Bar = Vue.extend({ + template: '<p>This is bar!</p>' +}) + +// the router needs a root component to render. +// for demo purposes, we will just use an empty one +// because we are using the HTML as the app template. +var App = Vue.extend({}) + +// create a router instance +// you can pass in additional options here, but +// let's keep it simple for now. +var router = new VueRouter() + +// define some routes. +// each route should map to a component. +// we'll talk about nested routes later. +router.map({ + '/foo': { + component: Foo + }, + '/bar': { + component: Bar + } +}) + +// now we can start the app! +// router will create an instance of App and mount to +// the element matching the selector #app. +router.start(App, '#app') diff --git a/example/basic/index.html b/example/basic/index.html new file mode 100644 index 000000000..4b2b9da47 --- /dev/null +++ b/example/basic/index.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Vue Router Example</title> + <script src="https://cdn.jsdelivr.net/vue/1.0.24/vue.js"></script> + <script src="../../dist/vue-router.js"></script> + <style> + .v-link-active { + color: red; + } + </style> + </head> + <body> + + <div id="app"> + <h1>Hello App!</h1> + <p> + <!-- use v-link directive for navigation. --> + <a v-link="{ path: '/foo' }">Go to Foo</a> + <a v-link="{ path: '/bar' }">Go to Bar</a> + </p> + <!-- use router-view element as route outlet --> + <router-view></router-view> + </div> + + <script src="example.js"></script> + </body> +</html> diff --git a/examples/active-links/app.js b/examples/active-links/app.js deleted file mode 100644 index 021374b2c..000000000 --- a/examples/active-links/app.js +++ /dev/null @@ -1,119 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { template: '<div><h2>Home</h2></div>' } -const About = { template: '<div><h2>About</h2></div>' } - -const Users = { - template: ` - <div> - <h2>Users</h2> - <router-view></router-view> - </div> - ` -} - -const User = { template: '<div>{{ $route.params.username }}</div>' } - -const Gallery = { - template: ` - <div> - <h2>Gallery</h2> - <router-view></router-view> - </div> - ` -} - -const Image = { template: '<div>{{ $route.params.imageId }}</div>' } - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - { path: '/about', component: About }, - { - path: '/redirect-gallery', - name: 'redirect-gallery', - redirect: { name: 'gallery' } - }, - { - path: '/redirect-image', - name: 'redirect-image', - redirect: { name: 'image', params: { imageId: 'image1' }} - }, - { - path: '/users', - component: Users, - children: [{ path: ':username', name: 'user', component: User }] - }, - { - path: '/gallery', - component: Gallery, - children: [ - { - path: '', - name: 'gallery', - redirect: { name: 'image', params: { imageId: 'image1' }} - }, - { path: ':imageId', component: Image, name: 'image' } - ] - } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Active Links</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/" exact>/ (exact match)</router-link></li> - - <li><router-link to="/users">/users</router-link></li> - <li><router-link to="/users" exact>/users (exact match)</router-link></li> - - <li><router-link to="/users/evan">/users/evan</router-link></li> - <li><router-link to="/users/evan#foo">/users/evan#foo</router-link></li> - <li> - <router-link :to="{ path: '/users/evan', query: { foo: 'bar' }}"> - /users/evan?foo=bar - </router-link> - </li> - <li><!-- #635 --> - <router-link :to="{ name: 'user', params: { username: 'evan' }, query: { foo: 'bar' }}" exact> - /users/evan?foo=bar (named view + exact match) - </router-link> - </li> - <li> - <router-link :to="{ path: '/users/evan', query: { foo: 'bar', baz: 'qux' }}"> - /users/evan?foo=bar&baz=qux - </router-link> - </li> - - <li><router-link to="/about">/about</router-link></li> - - <router-link tag="li" to="/about"> - <a>/about (active class on outer element)</a> - </router-link> - - <li><router-link to="/gallery">/gallery (redirect to /gallery/image1)</router-link></li> - <li><router-link :to="{ name: 'gallery' }">/gallery named link (redirect to /gallery/image1)</router-link></li> - <li><router-link :to="{ name: 'image', params: {imageId: 'image2'} }">/gallery/image2</router-link></li> - <li><router-link :to="{ name: 'image', params: {imageId: 'image1'} }">/gallery/image1</router-link></li> - <li><router-link to="/redirect-gallery">/redirect-gallery (redirect to /gallery)</router-link></li> - <li><router-link :to="{ name: 'redirect-gallery' }">/redirect-gallery named (redirect to /gallery)</router-link></li> - <li><router-link to="/redirect-image">/redirect-image (redirect to /gallery/image1)</router-link></li> - <li><router-link :to="{ name: 'redirect-image' }" >/redirect-image named (redirect to /gallery/image1)</router-link></li> - - <li><router-link to="/users?one" exact-path>/users?one</router-link></li> - <li><router-link to="/users?two" exact-path>/users?two</router-link></li> - <li><router-link to="/users/nested?two" exact-path>/users/nested?two</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/active-links/index.html b/examples/active-links/index.html deleted file mode 100644 index 3f7e03489..000000000 --- a/examples/active-links/index.html +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<style> -a.router-link-active, li.router-link-active a { - color: #f66; -} -a.router-link-exact-active, li.router-link-exact-active a { - border-bottom: 1px solid #f66; -} -</style> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/active-links.js"></script> diff --git a/examples/auth-flow/app.js b/examples/auth-flow/app.js deleted file mode 100644 index b606485a1..000000000 --- a/examples/auth-flow/app.js +++ /dev/null @@ -1,45 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -import auth from './auth' -import App from './components/App.vue' -import About from './components/About.vue' -import Dashboard from './components/Dashboard.vue' -import Login from './components/Login.vue' - -function requireAuth (to, from, next) { - if (!auth.loggedIn()) { - next({ - path: '/login', - query: { redirect: to.fullPath } - }) - } else { - next() - } -} - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/about', component: About }, - { path: '/dashboard', component: Dashboard, beforeEnter: requireAuth }, - { path: '/login', component: Login }, - { path: '/logout', - beforeEnter (to, from, next) { - auth.logout() - next('/') - } - } - ] -}) - -/* eslint-disable no-new */ -new Vue({ - el: '#app', - router, - // replace the content of <div id="app"></div> with App - render: h => h(App) -}) diff --git a/examples/auth-flow/auth.js b/examples/auth-flow/auth.js deleted file mode 100644 index 28d03f6de..000000000 --- a/examples/auth-flow/auth.js +++ /dev/null @@ -1,51 +0,0 @@ -/* globals localStorage */ - -export default { - login (email, pass, cb) { - cb = arguments[arguments.length - 1] - if (localStorage.token) { - if (cb) cb(true) - this.onChange(true) - return - } - pretendRequest(email, pass, (res) => { - if (res.authenticated) { - localStorage.token = res.token - if (cb) cb(true) - this.onChange(true) - } else { - if (cb) cb(false) - this.onChange(false) - } - }) - }, - - getToken () { - return localStorage.token - }, - - logout (cb) { - delete localStorage.token - if (cb) cb() - this.onChange(false) - }, - - loggedIn () { - return !!localStorage.token - }, - - onChange () {} -} - -function pretendRequest (email, pass, cb) { - setTimeout(() => { - if (email === 'joe@example.com' && pass === 'password1') { - cb({ - authenticated: true, - token: Math.random().toString(36).substring(7) - }) - } else { - cb({ authenticated: false }) - } - }, 0) -} diff --git a/examples/auth-flow/components/About.vue b/examples/auth-flow/components/About.vue deleted file mode 100644 index a69d1d5cf..000000000 --- a/examples/auth-flow/components/About.vue +++ /dev/null @@ -1,5 +0,0 @@ -<template> - <div> - <h2>About</h2> - </div> -</template> diff --git a/examples/auth-flow/components/App.vue b/examples/auth-flow/components/App.vue deleted file mode 100644 index 7cf75f5be..000000000 --- a/examples/auth-flow/components/App.vue +++ /dev/null @@ -1,41 +0,0 @@ -<template> - <div id="app"> - <h1>Auth Flow</h1> - <ul> - <li> - <router-link v-if="loggedIn" to="/logout">Log out</router-link> - <router-link v-if="!loggedIn" to="/login">Log in</router-link> - </li> - <li> - <router-link to="/about">About</router-link> - </li> - <li> - <router-link to="/dashboard">Dashboard</router-link> - (authenticated) - </li> - </ul> - <template v-if="$route.matched.length"> - <router-view></router-view> - </template> - <template v-else> - <p>You are logged {{ loggedIn ? 'in' : 'out' }}</p> - </template> - </div> -</template> - -<script> -import auth from '../auth' - -export default { - data () { - return { - loggedIn: auth.loggedIn() - } - }, - created () { - auth.onChange = loggedIn => { - this.loggedIn = loggedIn - } - } -} -</script> diff --git a/examples/auth-flow/components/Dashboard.vue b/examples/auth-flow/components/Dashboard.vue deleted file mode 100644 index af5665b64..000000000 --- a/examples/auth-flow/components/Dashboard.vue +++ /dev/null @@ -1,6 +0,0 @@ -<template> - <div> - <h2>Dashboard</h2> - <p>Yay you made it!</p> - </div> -</template> diff --git a/examples/auth-flow/components/Login.vue b/examples/auth-flow/components/Login.vue deleted file mode 100644 index ae3cbd513..000000000 --- a/examples/auth-flow/components/Login.vue +++ /dev/null @@ -1,45 +0,0 @@ -<template> - <div> - <h2>Login</h2> - <p v-if="$route.query.redirect"> - You need to login first. - </p> - <form @submit.prevent="login"> - <label><input v-model="email" placeholder="email"></label> - <label><input v-model="pass" placeholder="password" type="password"></label> (hint: password1)<br> - <button type="submit">login</button> - <p v-if="error" class="error">Bad login information</p> - </form> - </div> -</template> - -<script> -import auth from '../auth' - -export default { - data () { - return { - email: 'joe@example.com', - pass: '', - error: false - } - }, - methods: { - login () { - auth.login(this.email, this.pass, loggedIn => { - if (!loggedIn) { - this.error = true - } else { - this.$router.replace(this.$route.query.redirect || '/') - } - }) - } - } -} -</script> - -<style> -.error { - color: red; -} -</style> diff --git a/examples/auth-flow/index.html b/examples/auth-flow/index.html deleted file mode 100644 index d515174f7..000000000 --- a/examples/auth-flow/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/auth-flow.js"></script> diff --git a/examples/basic/app.js b/examples/basic/app.js deleted file mode 100644 index 148949806..000000000 --- a/examples/basic/app.js +++ /dev/null @@ -1,115 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -// track number of popstate listeners -let numPopstateListeners = 0 -const listenerCountDiv = document.createElement('div') -listenerCountDiv.id = 'popstate-count' -listenerCountDiv.textContent = numPopstateListeners + ' popstate listeners' -document.body.appendChild(listenerCountDiv) - -const originalAddEventListener = window.addEventListener -const originalRemoveEventListener = window.removeEventListener -window.addEventListener = function (name, handler) { - if (name === 'popstate') { - listenerCountDiv.textContent = - ++numPopstateListeners + ' popstate listeners' - } - return originalAddEventListener.apply(this, arguments) -} -window.removeEventListener = function (name, handler) { - if (name === 'popstate') { - listenerCountDiv.textContent = - --numPopstateListeners + ' popstate listeners' - } - return originalRemoveEventListener.apply(this, arguments) -} - -// 1. Use plugin. -// This installs <router-view> and <router-link>, -// and injects $router and $route to all router-enabled child components -Vue.use(VueRouter) - -// 2. Define route components -const Home = { template: '<div>home</div>' } -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } -const Unicode = { template: '<div>unicode</div>' } -const Query = { template: '<div>query: "{{ $route.params.q }}"</div>' } - -// 3. Create the router -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar }, - { path: encodeURI('/é'), component: Unicode }, - { path: '/query/:q', component: Query } - ] -}) - -router.beforeEach((to, from, next) => { - if (to.query.delay) { - setTimeout(() => { - next() - }, Number(to.query.delay)) - } else { - next() - } -}) - -// 4. Create and mount root instance. -// Make sure to inject the router. -// Route components will be rendered inside <router-view>. -const vueInstance = new Vue({ - router, - data: () => ({ n: 0 }), - template: ` - <div id="app"> - <h1>Basic</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - <router-link tag="li" to="/bar" :event="['mousedown', 'touchstart']"> - <a>/bar</a> - </router-link> - <li><router-link :to="encodeURI('/é')">/é</router-link></li> - <li><router-link :to="encodeURI('/é?t=%ñ')">/é?t=%ñ</router-link></li> - <li><router-link :to="encodeURI('/é#%ñ')">/é#%25ñ</router-link></li> - <router-link to="/foo" v-slot="props" custom> - <li :class="[props.isActive && 'active', props.isExactActive && 'exact-active']"> - <a :href="props.href" @click="props.navigate">{{ props.route.path }} (with v-slot).</a> - </li> - </router-link> - <li><router-link to="/foo" replace>/foo (replace)</router-link></li> - <li><router-link to="/query/A%25">/query/A%</router-link></li> - <li><router-link to="/?delay=200">/ (delay of 500ms)</router-link></li> - <li><router-link to="/foo?delay=200">/foo (delay of 500ms)</router-link></li> - </ul> - <button id="navigate-btn" @click="navigateAndIncrement">On Success</button> - <pre id="counter">{{ n }}</pre> - <pre id="query-t">{{ $route.query.t }}</pre> - <pre id="hash">{{ $route.hash }}</pre> - <router-view class="view"></router-view> - </div> - `, - - methods: { - navigateAndIncrement () { - const increment = () => this.n++ - if (this.$route.path === '/') { - this.$router.push('/foo', increment) - } else { - this.$router.push('/', increment) - } - } - } -}).$mount('#app') - -document.getElementById('unmount').addEventListener('click', () => { - vueInstance.$destroy() - vueInstance.$el.innerHTML = '' -}) diff --git a/examples/basic/index.html b/examples/basic/index.html deleted file mode 100644 index 695d668f5..000000000 --- a/examples/basic/index.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<button id="unmount">Unmount</button> -<hr /> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/basic.js"></script> diff --git a/examples/composables/app.js b/examples/composables/app.js deleted file mode 100644 index 1762aeea0..000000000 --- a/examples/composables/app.js +++ /dev/null @@ -1,146 +0,0 @@ -import Vue, { defineComponent, watch, ref } from 'vue' -import VueRouter from 'vue-router' -import { - useRoute, - useRouter, - onBeforeRouteLeave, - onBeforeRouteUpdate, - useLink -} from 'vue-router/composables' - -Vue.use(VueRouter) - -const Foo = defineComponent({ - setup () { - const route = useRoute() - onBeforeRouteUpdate((to, from, next) => { - console.log('Foo updating') - next() - }) - onBeforeRouteLeave((to, from, next) => { - console.log('Foo leaving') - next() - }) - - return { route } - }, - template: ` -<div> - <h3>Foo</h3> - {{ route.fullPath }} -</div> - ` -}) - -const Home = defineComponent({ - setup () { - const route = useRoute() - const router = useRouter() - - // should be / - const startRoute = route.fullPath - - onBeforeRouteUpdate((to, from, next) => { - console.log('Home updating') - next() - }) - - onBeforeRouteLeave((to, from, next) => { - console.log('Home leaving') - next() - }) - - const watchCount = ref(0) - - watch( - () => route.query.n, - () => { - watchCount.value++ - } - ) - - function navigate () { - router.push({ query: { n: 1 + (Number(route.query.n) || 0) }}) - } - return { route, navigate, watchCount, startRoute } - }, - template: ` -<div> - <h2>Home</h2> - <p id="start-route">{{ startRoute }}</p> - <p id='watch-count'>{{ watchCount }}</p> - <p id="fullpath">{{ route.fullPath }}</p> - <button id="nav" @click="navigate">Navigate</button> - <hr> - <Foo /> -</div> - `, - components: { Foo } -}) - -const About = defineComponent({ - setup () { - const route = useRoute() - return { route } - }, - template: ` -<div> - <h2>About</h2> - <p id="fullpath">{{ route.fullPath }}</p> -</div> - ` -}) - -const Nested = defineComponent({ - template: `<RouterView />` -}) - -const NestedEmpty = defineComponent({ - template: `<div>NestedEmpty</div>` -}) - -const NestedA = defineComponent({ - template: `<div>NestedA</div>` -}) - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - { - path: '/nested', - component: Nested, - children: [ - { path: '', component: NestedEmpty }, - { path: 'a', component: NestedA } - ] - }, - { path: '/about', component: About } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Basic</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/about">/about</router-link></li> - <li><router-link to="/nested">/nested</router-link></li> - <li><router-link to="/nested/a">/nested/a</router-link></li> - </ul> - <router-view class="view"></router-view> - - <pre id="nested-active" @click="navigate">{{ href }}: {{ isActive }}, {{ isExactActive }}</pre> - </div> - `, - setup () { - const { href, isActive, isExactActive, navigate, route } = useLink({ - to: '/nested' - }) - - return { href, isActive, navigate, route, isExactActive } - } -}).$mount('#app') diff --git a/examples/composables/index.html b/examples/composables/index.html deleted file mode 100644 index b6f6342a7..000000000 --- a/examples/composables/index.html +++ /dev/null @@ -1,7 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<hr /> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/composables.js"></script> diff --git a/examples/data-fetching/Post.vue b/examples/data-fetching/Post.vue deleted file mode 100644 index 781622066..000000000 --- a/examples/data-fetching/Post.vue +++ /dev/null @@ -1,75 +0,0 @@ -<template> - <div class="post"> - <div class="loading" v-if="loading">Loading...</div> - <div v-if="error" class="error"> - {{ error }} - </div> - <transition name="slide"> - <!-- - giving the post container a unique key triggers transitions - when the post id changes. - --> - <div v-if="post" class="content" :key="post.id"> - <h2>{{ post.title }}</h2> - <p>{{ post.body }}</p> - </div> - </transition> - </div> -</template> - -<script> -import { getPost } from './api' - -export default { - data () { - return { - loading: false, - post: null, - error: null - } - }, - created () { - this.fetchData() - }, - watch: { - '$route': 'fetchData' - }, - methods: { - fetchData () { - this.error = this.post = null - this.loading = true - getPost(this.$route.params.id, (err, post) => { - this.loading = false - if (err) { - this.error = err.toString() - } else { - this.post = post - } - }) - } - } -} -</script> - -<style> -.loading { - position: absolute; - top: 10px; - right: 10px; -} -.error { - color: red; -} -.content { - transition: all .35s ease; - position: absolute; -} -.slide-enter { - opacity: 0; - transform: translate(30px, 0); -} -.slide-leave-active { - opacity: 0; - transform: translate(-30px, 0); -} -</style> diff --git a/examples/data-fetching/api.js b/examples/data-fetching/api.js deleted file mode 100644 index ca80e2418..000000000 --- a/examples/data-fetching/api.js +++ /dev/null @@ -1,23 +0,0 @@ -const posts = { - '1': { - id: 1, - title: 'sunt aut facere', - body: 'quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto' - }, - '2': { - id: 2, - title: 'qui est esse', - body: 'est rerum tempore vitae sequi sint nihil reprehenderit dolor beatae ea dolores neque fugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis qui aperiam non debitis possimus qui neque nisi nulla' - } -} - -export function getPost (id, cb) { - // fake an API request - setTimeout(() => { - if (posts[id]) { - cb(null, posts[id]) - } else { - cb(new Error('Post not found.')) - } - }, 100) -} diff --git a/examples/data-fetching/app.js b/examples/data-fetching/app.js deleted file mode 100644 index 995e690e6..000000000 --- a/examples/data-fetching/app.js +++ /dev/null @@ -1,32 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' -import Post from './Post.vue' - -Vue.use(VueRouter) - -const Home = { template: '<div>home</div>' } - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - { path: '/post/:id', component: Post } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Data Fetching</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/post/1">/post/1</router-link></li> - <li><router-link to="/post/2">/post/2</router-link></li> - <li><router-link to="/post/3">/post/3</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/data-fetching/index.html b/examples/data-fetching/index.html deleted file mode 100644 index a69c0375d..000000000 --- a/examples/data-fetching/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/data-fetching.js"></script> diff --git a/examples/discrete-components/app.js b/examples/discrete-components/app.js deleted file mode 100644 index fc1c424b8..000000000 --- a/examples/discrete-components/app.js +++ /dev/null @@ -1,37 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -// 1. Use plugin. -// This installs <router-view> and <router-link>, -// and injects $router and $route to all router-enabled child components -Vue.use(VueRouter) - -// 2. Define route components -const Home = { template: '<div>Component: home</div>' } -const Foo = { template: '<div>Component: foo</div>' } -const Bar = { template: '<div>Component: bar</div>' } - -// 3. Create the router -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } - ] -}) - -// 4. Create extended base Vue with router injected here (all -// children should inherit the same router). -const BaseVue = Vue.extend({ router }) - -// Discrete components means that a new Vue instance will be created -// and bound on multiple *independent* nodes (eg. one Vue instance -// per node); but the router should act as a singleton and keep all -// instances in sync. -Array.prototype.forEach.call(document.querySelectorAll('.app'), (node) => { - new BaseVue({ - el: node - }) -}) diff --git a/examples/discrete-components/index.html b/examples/discrete-components/index.html deleted file mode 100644 index 3da5eab51..000000000 --- a/examples/discrete-components/index.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<style> - .inliner {font-size:0;line-height:0;} - .app {font-size:1rem;line-height:1;display:inline-block;padding:1rem;width:33%;border-left:1px solid #f1f1f1;box-sizing:border-box;vertical-align:top;} - .snippet {display:inline-block;padding:5px;background:#f1f1f1;font-size:90%;} - .app.component-view {display:block;width:100%;text-align:center;} -</style> -<a href="/">← Examples index</a> -<div class="inliner"> - <div class="app"> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - </ul> - $route.path value: <span class="snippet">{{ $route.path }}</span> - </div> - <div class="app"> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - </ul> - $route.path value: <span class="snippet">{{ $route.path }}</span> - </div> - <div class="app"> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - </ul> - $route.path value: <span class="snippet">{{ $route.path }}</span> - </div> -</div> -<div class="app component-view"> - <router-view class="view"></router-view> - $route.path value: <span class="snippet">{{ $route.path }}</span> -</div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/discrete-components.js"></script> diff --git a/examples/global.css b/examples/global.css deleted file mode 100644 index 5de5fb68a..000000000 --- a/examples/global.css +++ /dev/null @@ -1,22 +0,0 @@ -html, body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - color: #2c3e50; -} - -#app { - padding: 0 20px; -} - -ul { - line-height: 1.5em; - padding-left: 1.5em; -} - -a { - color: #7f8c8d; - text-decoration: none; -} - -a:hover { - color: #4fc08d; -} diff --git a/examples/hash-mode/app.js b/examples/hash-mode/app.js deleted file mode 100644 index 16475ffc8..000000000 --- a/examples/hash-mode/app.js +++ /dev/null @@ -1,87 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -// track number of popstate listeners -let numPopstateListeners = 0 -const listenerCountDiv = document.createElement('div') -listenerCountDiv.id = 'popstate-count' -listenerCountDiv.textContent = numPopstateListeners + ' popstate listeners' -document.body.appendChild(listenerCountDiv) - -const originalAddEventListener = window.addEventListener -const originalRemoveEventListener = window.removeEventListener -window.addEventListener = function (name, handler) { - if (name === 'popstate') { - listenerCountDiv.textContent = - ++numPopstateListeners + ' popstate listeners' - } - return originalAddEventListener.apply(this, arguments) -} -window.removeEventListener = function (name, handler) { - if (name === 'popstate') { - listenerCountDiv.textContent = - --numPopstateListeners + ' popstate listeners' - } - return originalRemoveEventListener.apply(this, arguments) -} - -// 1. Use plugin. -// This installs <router-view> and <router-link>, -// and injects $router and $route to all router-enabled child components -Vue.use(VueRouter) - -// 2. Define route components -const Home = { template: '<div>home</div>' } -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } -const Unicode = { template: '<div>unicode: {{ $route.params.unicode }}</div>' } -const Query = { template: '<div>query: "{{ $route.params.q }}"</div>' } - -// 3. Create the router -const router = new VueRouter({ - mode: 'hash', - base: __dirname, - routes: [ - { path: '/', component: Home }, // all paths are defined without the hash. - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar }, - { path: encodeURI('/é'), component: Unicode }, - { path: encodeURI('/é/:unicode'), component: Unicode }, - { path: '/query/:q', component: Query, name: 'param' } - ] -}) - -// 4. Create and mount root instance. -// Make sure to inject the router. -// Route components will be rendered inside <router-view>. -const vueInstance = new Vue({ - router, - template: ` - <div id="app"> - <h1>Mode: 'hash'</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - <router-link tag="li" to="/bar">/bar</router-link> - <li><router-link :to="encodeURI('/é')">/é</router-link></li> - <li><router-link :to="encodeURI('/é/ñ')">/é/ñ</router-link></li> - <li><router-link :to="encodeURI('/é/ñ?t=%ñ')">/é/ñ?t=%ñ</router-link></li> - <li><router-link :to="encodeURI('/é/ñ#é')">/é/ñ#é</router-link></li> - <li><router-link to="/query/A%25">/query/A%</router-link></li> - <li><router-link :to="{ name: 'param', params: { q: 'A%' }}">/query/A% (object)</router-link></li> - <li><router-link to="/query/A%2FE">/query/A%2FE</router-link></li> - <li><router-link :to="{ name: 'param', params: { q: 'A/E' }}">/query/A%2FE (object)</router-link></li> - </ul> - <pre id="query-t">{{ $route.query.t }}</pre> - <pre id="hash">{{ $route.hash }}</pre> - <router-view class="view"></router-view> - </div> - `, - methods: {} -}).$mount('#app') - -document.getElementById('unmount').addEventListener('click', () => { - vueInstance.$destroy() - vueInstance.$el.innerHTML = '' -}) diff --git a/examples/hash-mode/index.html b/examples/hash-mode/index.html deleted file mode 100644 index 5789d784f..000000000 --- a/examples/hash-mode/index.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<button id="unmount">Unmount</button> -<hr /> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/hash-mode.js"></script> diff --git a/examples/hash-scroll-behavior/app.js b/examples/hash-scroll-behavior/app.js deleted file mode 100644 index 0f1667e79..000000000 --- a/examples/hash-scroll-behavior/app.js +++ /dev/null @@ -1,78 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { template: '<div>home</div>' } -const Foo = { template: '<div>foo</div>' } -const Bar = { - template: ` - <div> - bar - <div style="height:500px"></div> - <p id="anchor" style="height:500px">Anchor</p> - <p id="anchor2">Anchor2</p> - </div> - ` -} - -// scrollBehavior: -// - only available in html5 history mode -// - defaults to no scroll behavior -// - return false to prevent scroll -const scrollBehavior = (to, from, savedPosition) => { - if (savedPosition) { - // savedPosition is only available for popstate navigations. - return savedPosition - } else { - const position = {} - // new navigation. - // scroll to anchor by returning the selector - if (to.hash) { - position.selector = to.hash - console.log(to) - - // specify offset of the element - if (to.hash === '#anchor2') { - position.offset = { y: 100 } - } - } - // check if any matched route config has meta that requires scrolling to top - if (to.matched.some(m => m.meta.scrollToTop)) { - // cords will be used if no selector is provided, - // or if the selector didn't match any element. - position.x = 0 - position.y = 0 - } - // if the returned position is falsy or an empty object, - // will retain current scroll position. - return position - } -} - -const router = new VueRouter({ - mode: 'hash', - scrollBehavior, - routes: [ - { path: '/', component: Home, meta: { scrollToTop: true }}, - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar, meta: { scrollToTop: true }} - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Scroll Behavior</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - <li><router-link to="/bar#anchor">/bar#anchor</router-link></li> - <li><router-link to="/bar#anchor2">/bar#anchor2</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/hash-scroll-behavior/index.html b/examples/hash-scroll-behavior/index.html deleted file mode 100644 index 6edad481c..000000000 --- a/examples/hash-scroll-behavior/index.html +++ /dev/null @@ -1,13 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css" /> -<style> - .view { - border: 1px solid red; - height: 3000px; - position: relative; - } -</style> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/hash-scroll-behavior.js"></script> diff --git a/examples/index.html b/examples/index.html deleted file mode 100644 index 2b41a845a..000000000 --- a/examples/index.html +++ /dev/null @@ -1,36 +0,0 @@ -<!doctype html> -<html> -<head> - <title>Vue Router Examples</title> - <link rel="stylesheet" href="/global.css"> -</head> -<body style="padding: 0 20px"> - <h1>Vue Router Examples</h1> - <ul> - <li><a href="basic">Basic</a></li> - <li><a href="hash-mode">Mode: 'hash'</a></li> - <li><a href="nested-routes">Nested Routes</a></li> - <li><a href="named-routes">Named Routes</a></li> - <li><a href="named-views">Named Views</a></li> - <li><a href="route-matching">Route Matching</a></li> - <li><a href="active-links">Active Links</a></li> - <li><a href="redirect">Redirect</a></li> - <li><a href="route-props">Route Props</a></li> - <li><a href="route-alias">Route Alias</a></li> - <li><a href="route-params">Route Params</a></li> - <li><a href="router-errors">Router errors</a></li> - <li><a href="transitions">Transitions</a></li> - <li><a href="data-fetching">Data Fetching</a></li> - <li><a href="navigation-guards">Navigation Guards</a></li> - <li><a href="scroll-behavior">Scroll Behavior</a></li> - <li><a href="lazy-loading">Lazy Loading</a></li> - <li><a href="auth-flow">Auth Flow</a></li> - <li><a href="discrete-components">Discrete Components</a></li> - <li><a href="nested-router">Nested Routers</a></li> - <li><a href="keepalive-view">Keepalive View</a></li> - <li><a href="multi-app">Multiple Apps</a></li> - <li><a href="restart-app">Restart App</a></li> - <li><a href="composables">Composables</a></li> - </ul> -</body> -</html> diff --git a/examples/keepalive-view/app.js b/examples/keepalive-view/app.js deleted file mode 100644 index 341fed97e..000000000 --- a/examples/keepalive-view/app.js +++ /dev/null @@ -1,171 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Wrap = { template: '<div>child: <router-view></router-view></div>' } - -const Index = { - template: '<wrap />', - components: { - Wrap - } -} - -const WithGuard = { - template: '<div>{{ $route.name }}: {{ n }}</div>', - data: () => ({ n: 0 }), - beforeRouteEnter (to, from, next) { - next(vm => { - vm.n++ - }) - } -} - -const IndexChild1 = { template: '<div>index child1</div>' } -const IndexChild2 = { template: '<div>index child2</div>' } - -const Home = { template: '<div>home</div>' } - -const ViewWithKeepalive = { - template: '<keep-alive><router-view></router-view></keep-alive>' -} - -const Parent = { template: '<div>msg: {{ msg }}<router-view /></div>', props: ['msg'] } - -const RequiredProps = { - template: '<div>props from route config is: {{ msg }}</div>', - props: { - msg: { - type: String, - required: true - } - } -} - -// keep original values to restore them later -const originalSilent = Vue.config.silent -const originalWarnHandler = Vue.config.warnHandler - -const CatchWarn = { - template: `<div>{{ didWarn ? 'caught missing prop warn' : 'no missing prop warn' }}</div>`, - data () { - return { - didWarn: false - } - }, - beforeRouteEnter (to, from, next) { - let missPropWarn = false - Vue.config.silent = false - Vue.config.warnHandler = function (msg, vm, trace) { - if (/Missing required prop/i.test(msg)) { - missPropWarn = true - } - } - next(vm => { - vm.didWarn = missPropWarn - }) - }, - beforeRouteLeave (to, from, next) { - // restore vue config - Vue.config.silent = originalSilent - Vue.config.warnHandler = originalWarnHandler - next() - } -} - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { - path: '/index', - component: Index, - children: [ - { - path: 'child1', - component: IndexChild1 - }, - { - path: 'child2', - component: IndexChild2 - } - ] - }, - { - path: '/home', - component: Home - }, - { - path: '/with-guard1', - name: 'with-guard1', - component: WithGuard - }, - { - path: '/with-guard2', - name: 'with-guard2', - component: WithGuard - }, - { - path: '/one', - component: ViewWithKeepalive, - children: [ - { - path: 'two', - component: ViewWithKeepalive, - children: [ - { - path: 'child1', - component: IndexChild1 - }, - { - path: 'child2', - component: IndexChild2 - } - ] - } - ] - }, - { - path: '/config-required-props', - component: Parent, - props: { msg: 'from parent' }, - children: [ - { - path: 'child', - component: RequiredProps, - props: { - msg: 'from child' - } - } - ] - }, - { - path: '/catch-warn', - component: CatchWarn - } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <ul> - <li><router-link to="/index/child1">/index/child1</router-link></li> - <li><router-link to="/index/child2">/index/child2</router-link></li> - <li><router-link to="/home">/home</router-link></li> - <li><router-link to="/with-guard1">/with-guard1</router-link></li> - <li><router-link to="/with-guard2">/with-guard2</router-link></li> - <li><router-link to="/one/two/child1">/one/two/child1</router-link></li> - <li><router-link to="/one/two/child2">/one/two/child2</router-link></li> - <li><router-link to="/config-required-props">/config-required-props</router-link></li> - <li><router-link to="/config-required-props/child">/config-required-props/child</router-link></li> - <li><router-link to="/catch-warn">/catch-warn</router-link></li> - </ul> - <keep-alive> - <router-view class="view"></router-view> - </keep-alive> - </div> - ` -}).$mount('#app') diff --git a/examples/keepalive-view/index.html b/examples/keepalive-view/index.html deleted file mode 100644 index 136f6c96a..000000000 --- a/examples/keepalive-view/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/keepalive-view.js"></script> diff --git a/examples/lazy-loading-before-mount/app.js b/examples/lazy-loading-before-mount/app.js deleted file mode 100644 index 92be02792..000000000 --- a/examples/lazy-loading-before-mount/app.js +++ /dev/null @@ -1,41 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { template: '<div>Home</div>' } -const Foo = () => - new Promise(resolve => { - setTimeout(() => - resolve({ - template: `<div class="foo">This is Foo</div>` - }) - , 10) - }) - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - // Just use them normally in the route config - { path: '/async', component: Foo } - ] -}) - -router.onReady(() => { - router.push('/async') -}) - -document.getElementById('load-button').addEventListener('click', (event) => { - new Vue({ - router, - template: ` - <div id="app"> - <h1>Async</h1> - <router-view class="view"></router-view> - </div> - ` - }).$mount('#app') - event.target.remove() -}) diff --git a/examples/lazy-loading-before-mount/index.html b/examples/lazy-loading-before-mount/index.html deleted file mode 100644 index 23a13d577..000000000 --- a/examples/lazy-loading-before-mount/index.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> - -<button id="load-button">Load</button> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/lazy-loading-before-mount.js"></script> diff --git a/examples/lazy-loading/Bar.vue b/examples/lazy-loading/Bar.vue deleted file mode 100644 index 8e0818b23..000000000 --- a/examples/lazy-loading/Bar.vue +++ /dev/null @@ -1,15 +0,0 @@ -<template> - <div> - <h2>{{ msg }}</h2> - <p>I am lazy-loaded. (check out the Networks tab in Chrome devtools)</p> - <router-view></router-view> - </div> -</template> - -<script> -export default { - data () { - return { msg: 'This is Bar!' } - } -} -</script> diff --git a/examples/lazy-loading/Baz.vue b/examples/lazy-loading/Baz.vue deleted file mode 100644 index 4450b7213..000000000 --- a/examples/lazy-loading/Baz.vue +++ /dev/null @@ -1,6 +0,0 @@ -<template> - <div> - <h3>Baz</h3> - <p>I'm loaded in the same chunk with Bar.</p> - </div> -</template> diff --git a/examples/lazy-loading/Foo.vue b/examples/lazy-loading/Foo.vue deleted file mode 100644 index 73c793aef..000000000 --- a/examples/lazy-loading/Foo.vue +++ /dev/null @@ -1,6 +0,0 @@ -<template> - <div> - <h2>This is Foo!</h2> - <p>I am lazy-loaded. (check out the Networks tab in Chrome devtools)</p> - </div> -</template> diff --git a/examples/lazy-loading/app.js b/examples/lazy-loading/app.js deleted file mode 100644 index 8cf31a973..000000000 --- a/examples/lazy-loading/app.js +++ /dev/null @@ -1,83 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { template: '<div>home</div>' } - -// In Webpack we can use special require syntax to signify a "split point" -// Webpack will automatically split and lazy-load the split modules. -// - https://webpack.js.org/guides/code-splitting-require/ - -// Combine that with Vue's async components, we can easily make our route -// components lazy-loaded only when the given route is matched. - -// async components are defined as: -// - resolve => resolve(Component) -// or -// - () => Promise<Component> - -// For single component, we can simply use dynamic import which returns -// a Promise. -const Foo = () => import('./Foo.vue') - -// The import() syntax is a replacement for the deprecated System.import() and -// is specified at https://github.com/tc39/proposal-dynamic-import. Webpack 2 -// supports using it to indicate a code-splitting point. -// Note: if using Babel you will need `babel-plugin-syntax-dynamic-import`. - -// If using Webpack 1, you will have to use AMD syntax or require.ensure: -// const Foo = resolve => require(['./Foo.vue'], resolve) - -// If you want to group a number of components that belong to the same -// nested route in the same async chunk, you can use a special comment -// to indicate a chunk name for the imported module. (note this requires -// webpack 2.4.0+) -const Bar = () => import(/* webpackChunkName: "bar" */ './Bar.vue') -const Baz = () => import(/* webpackChunkName: "bar" */ './Baz.vue') - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - // Just use them normally in the route config - { path: '/foo', component: Foo }, - // multiple parameters, `/` should not be encoded. The name is also important - // https://github.com/vuejs/vue-router/issues/2719 - { path: '/a/:tags*', name: 'tagged', component: () => new Promise(resolve => { - setTimeout(() => { - resolve({ - template: `<div> - <h2>Lazy with params</h2> - <pre id="tagged-path">{{ $route.path }}</pre> - </div>` - }) - }, 200) - }) }, - // Bar and Baz belong to the same root route - // and grouped in the same async chunk. - { path: '/bar', component: Bar, - children: [ - { path: 'baz', component: Baz } - ] - } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Lazy Loading</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - <li><router-link to="/bar/baz">/bar/baz</router-link></li> - <li><router-link to="/a/b/c">/a/b/c</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/lazy-loading/index.html b/examples/lazy-loading/index.html deleted file mode 100644 index 870eebf43..000000000 --- a/examples/lazy-loading/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/lazy-loading.js"></script> diff --git a/examples/multi-app/app.js b/examples/multi-app/app.js deleted file mode 100644 index c9d28a0c7..000000000 --- a/examples/multi-app/app.js +++ /dev/null @@ -1,75 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -// track number of popstate listeners -let numPopstateListeners = 0 -const listenerCountDiv = document.getElementById('popcount') -listenerCountDiv.textContent = 0 - -const originalAddEventListener = window.addEventListener -const originalRemoveEventListener = window.removeEventListener -window.addEventListener = function (name, handler) { - if (name === 'popstate') { - listenerCountDiv.textContent = - ++numPopstateListeners - } - return originalAddEventListener.apply(this, arguments) -} -window.removeEventListener = function (name, handler) { - if (name === 'popstate') { - listenerCountDiv.textContent = - --numPopstateListeners - } - return originalRemoveEventListener.apply(this, arguments) -} - -// 1. Use plugin. -// This installs <router-view> and <router-link>, -// and injects $router and $route to all router-enabled child components -Vue.use(VueRouter) - -const looper = [1, 2, 3] - -looper.forEach((n) => { - let vueInstance - const mountEl = document.getElementById('mount' + n) - const unmountEl = document.getElementById('unmount' + n) - - mountEl.addEventListener('click', () => { - // 2. Define route components - const Home = { template: '<div>home</div>' } - const Foo = { template: '<div>foo</div>' } - - // 3. Create the router - const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - { path: '/foo', component: Foo } - ] - }) - - // 4. Create and mount root instance. - // Make sure to inject the router. - // Route components will be rendered inside <router-view>. - vueInstance = new Vue({ - router, - template: ` - <div id="app-${n}"> - <h1>Basic</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` - }).$mount('#app-' + n) - }) - - unmountEl.addEventListener('click', () => { - vueInstance.$destroy() - vueInstance.$el.innerHTML = '' - }) -}) diff --git a/examples/multi-app/index.html b/examples/multi-app/index.html deleted file mode 100644 index 96f094114..000000000 --- a/examples/multi-app/index.html +++ /dev/null @@ -1,24 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> - -<button id="mount1">Mount App 1</button> -<button id="mount2">Mount App 2</button> -<button id="mount3">Mount App 3</button> - -<hr /> - -<button id="unmount1">Unmount App 1</button> -<button id="unmount2">Unmount App 2</button> -<button id="unmount3">Unmount App 3</button> - -<hr /> - -popstate count: <span id="popcount"></span> - -<div id="app-1"></div> -<div id="app-2"></div> -<div id="app-3"></div> - -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/multi-app.js"></script> \ No newline at end of file diff --git a/examples/named-routes/app.js b/examples/named-routes/app.js deleted file mode 100644 index 81c305d43..000000000 --- a/examples/named-routes/app.js +++ /dev/null @@ -1,34 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { template: '<div>This is Home</div>' } -const Foo = { template: '<div>This is Foo</div>' } -const Bar = { template: '<div>This is Bar {{ $route.params.id }}</div>' } - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', name: 'home', component: Home }, - { path: '/foo', name: 'foo', component: Foo }, - { path: '/bar/:id', name: 'bar', component: Bar } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Named Routes</h1> - <p>Current route name: {{ $route.name }}</p> - <ul> - <li><router-link :to="{ name: 'home' }">home</router-link></li> - <li><router-link :to="{ name: 'foo' }">foo</router-link></li> - <li><router-link :to="{ name: 'bar', params: { id: 123 }}">bar</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/named-routes/index.html b/examples/named-routes/index.html deleted file mode 100644 index 24be94195..000000000 --- a/examples/named-routes/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/named-routes.js"></script> diff --git a/examples/named-views/app.js b/examples/named-views/app.js deleted file mode 100644 index c883b94e7..000000000 --- a/examples/named-views/app.js +++ /dev/null @@ -1,48 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } -const Baz = { template: '<div>baz</div>' } - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', - // a single route can define multiple named components - // which will be rendered into <router-view>s with corresponding names. - components: { - default: Foo, - a: Bar, - b: Baz - } - }, - { - path: '/other', - components: { - default: Baz, - a: Bar, - b: Foo - } - } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Named Views</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/other">/other</router-link></li> - </ul> - <router-view class="view one"></router-view> - <router-view class="view two" name="a"></router-view> - <router-view class="view three" name="b"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/named-views/index.html b/examples/named-views/index.html deleted file mode 100644 index 7e9394dff..000000000 --- a/examples/named-views/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/named-views.js"></script> diff --git a/examples/navigation-guards/app.js b/examples/navigation-guards/app.js deleted file mode 100644 index 48de8aa0d..000000000 --- a/examples/navigation-guards/app.js +++ /dev/null @@ -1,209 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { template: '<div>home</div>' } -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } - -/** - * Signature of all route guards: - * @param {Route} to - * @param {Route} from - * @param {Function} next - * - * See http://router.vuejs.org/en/advanced/navigation-guards.html - * for more details. - */ -function guardRoute (to, from, next) { - if (window.confirm(`Navigate to ${to.path}?`)) { - next() - } else if (window.confirm(`Redirect to /baz?`)) { - next('/baz') - } else { - next(false) - } -} - -// Baz implements an in-component beforeRouteLeave hook -const Baz = { - data () { - return { saved: false } - }, - template: ` - <div> - <p>baz ({{ saved ? 'saved' : 'not saved' }})</p> - <button @click="saved = true">save</button> - </div> - `, - beforeRouteLeave (to, from, next) { - if ( - this.saved || - window.confirm('Not saved, are you sure you want to navigate away?') - ) { - next() - } else { - next(false) - } - } -} - -// Qux implements an in-component beforeRouteEnter hook -const Qux = { - data () { - return { - msg: null - } - }, - template: `<div>{{ msg }}</div>`, - beforeRouteEnter (to, from, next) { - // Note that enter hooks do not have access to `this` - // because it is called before the component is even created. - // However, we can provide a callback to `next` which will - // receive the vm instance when the route has been confirmed. - // - // simulate an async data fetch. - // this pattern is useful when you want to stay at current route - // and only switch after the data has been fetched. - setTimeout(() => { - next(vm => { - vm.msg = 'Qux' - }) - }, 300) - } -} - -// Quux implements an in-component beforeRouteUpdate hook. -// this hook is called when the component is reused, but the route is updated. -// For example, when navigating from /quux/1 to /quux/2. -const Quux = { - data () { - return { - prevId: 0 - } - }, - template: `<div>id:{{ $route.params.id }} prevId:{{ prevId }}</div>`, - beforeRouteUpdate (to, from, next) { - this.prevId = from.params.id - next() - } -} - -const NestedParent = { - template: ` - <div id="nested-parent"> - Nested Parent - <hr> - <router-link to="/parent/child/1">/parent/child/1</router-link> - <router-link to="/parent/child/2">/parent/child/2</router-link> - <hr> - <p id="bre-order"> - <span v-for="log in logs">{{ log }} </span> - </p> - <!-- #705 --> - <!-- Some transitions, specifically out-in transitions, cause the view --> - <!-- that is transitioning in to appear significantly later than normal, --> - <!-- which can cause bugs as "vm" below in "next(vm => ...)" may not be --> - <!-- available at the time the callback is called --> - <transition name="fade" mode="out-in"> - <router-view :key="$route.path"/> - </transition> - </div>`, - data: () => ({ logs: [] }), - beforeRouteEnter (to, from, next) { - next(vm => { - vm.logs.push('parent') - }) - } -} - -const GuardMixin = { - beforeRouteEnter (to, from, next) { - next(vm => { - vm.$parent.logs.push('mixin') - }) - } -} - -const NestedChild = { - props: ['n'], - template: `<div>Child {{ n }}</div>`, - mixins: [GuardMixin], - beforeRouteEnter (to, from, next) { - next(vm => { - vm.$parent.logs.push('child ' + vm.n) - }) - } -} - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - - // inline guard - { path: '/foo', component: Foo, beforeEnter: guardRoute }, - - // using meta properties on the route config - // and check them in a global before hook - { path: '/bar', component: Bar, meta: { needGuard: true }}, - - // Baz implements an in-component beforeRouteLeave hook - { path: '/baz', component: Baz }, - - // Qux implements an in-component beforeRouteEnter hook - { path: '/qux', component: Qux }, - - // in-component beforeRouteEnter hook for async components - { - path: '/qux-async', - component: resolve => { - setTimeout(() => { - resolve(Qux) - }, 0) - } - }, - - // in-component beforeRouteUpdate hook - { path: '/quux/:id', component: Quux }, - { - path: '/parent', - component: NestedParent, - children: [ - { path: 'child/1', component: NestedChild, props: { n: 1 }}, - { path: 'child/2', component: NestedChild, props: { n: 2 }} - ] - } - ] -}) - -router.beforeEach((to, from, next) => { - if (to.matched.some(m => m.meta.needGuard)) { - guardRoute(to, from, next) - } else { - next() - } -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Navigation Guards</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - <li><router-link to="/baz">/baz</router-link></li> - <li><router-link to="/qux">/qux</router-link></li> - <li><router-link to="/qux-async">/qux-async</router-link></li> - <li><router-link to="/quux/1">/quux/1</router-link></li> - <li><router-link to="/quux/2">/quux/2</router-link></li> - <li><router-link to="/parent/child/2">/parent/child/2</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/navigation-guards/index.html b/examples/navigation-guards/index.html deleted file mode 100644 index 580cb9768..000000000 --- a/examples/navigation-guards/index.html +++ /dev/null @@ -1,14 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<style> -.fade-enter-active, .fade-leave-active { - transition: opacity .5s ease; -} -.fade-enter, .fade-leave-active { - opacity: 0; -} -</style> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/navigation-guards.js"></script> diff --git a/examples/nested-router/app.js b/examples/nested-router/app.js deleted file mode 100644 index cd7c2ae12..000000000 --- a/examples/nested-router/app.js +++ /dev/null @@ -1,52 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Foo = { template: `<div class="foo"><h1>foo</h1></div>` } -const Bar = { template: `<div class="bar"><h1>bar</h1></div>` } - -const childRouter = new VueRouter({ - mode: 'abstract', - routes: [ - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } - ] -}) - -const Nested = { - router: childRouter, - template: `<div class="child"> - <p>Child router path: {{ $route.fullPath }}</p> - <ul> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - </ul> - <router-view/> - </div>` -} - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/nested-router', component: Nested }, - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <p>Root router path: {{ $route.fullPath }}</p> - <ul> - <li><router-link to="/nested-router">/nested-router</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - </ul> - <router-view></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/nested-router/index.html b/examples/nested-router/index.html deleted file mode 100644 index 6a307bd90..000000000 --- a/examples/nested-router/index.html +++ /dev/null @@ -1,10 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<style> -#app { border: 1px solid red; } -.child { border: 1px solid blue; padding: 0 15px; margin: 15px; } -</style> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/nested-router.js"></script> diff --git a/examples/nested-routes/app.js b/examples/nested-routes/app.js deleted file mode 100644 index 1d3b011ac..000000000 --- a/examples/nested-routes/app.js +++ /dev/null @@ -1,110 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -// A route component can also contain <router-view> to render -// nested children route components -const Parent = { - template: ` - <div class="parent"> - <h2>Parent</h2> - <router-view class="child"></router-view> - </div> - ` -} - -const Default = { template: '<div>default</div>' } -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } -const Baz = { template: '<div>baz</div>' } - -const Qux = { - template: ` - <div class="nested-parent"> - <h3>qux</h3> - <router-link :to="{ name: 'quux' }">/quux</router-link> - <router-view class="nested-child"></router-view> - </div> - ` -} -const Quy = { - template: ` - <div class="nested-parent-other"> - <h3>quy</h3> - <pre>{{ JSON.stringify(Object.keys($route.params)) }}</pre> - </div> - ` -} -const Quux = { - template: `<div>quux<router-link :to="{ name: 'quuy' }">go to quuy</router-link></div>` -} -const Quuy = { template: '<div>quuy</div>' } -const Zap = { - template: '<div><h3>zap</h3><pre>{{ $route.params.zapId }}</pre></div>' -} - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', redirect: '/parent' }, - { - path: '/parent', - component: Parent, - children: [ - // an empty path will be treated as the default, e.g. - // components rendered at /parent: Root -> Parent -> Default - { path: '', component: Default }, - - // components rendered at /parent/foo: Root -> Parent -> Foo - { path: 'foo', component: Foo }, - - // components rendered at /parent/bar: Root -> Parent -> Bar - { path: 'bar', component: Bar }, - - // NOTE absolute path here! - // this allows you to leverage the component nesting without being - // limited to the nested URL. - // components rendered at /baz: Root -> Parent -> Baz - { path: '/baz', component: Baz }, - - { - path: 'qux/:quxId', - component: Qux, - children: [ - { path: 'quux', name: 'quux', component: Quux }, - { path: 'quuy', name: 'quuy', component: Quuy } - ] - }, - - { path: 'quy/:quyId', component: Quy }, - - { name: 'zap', path: 'zap/:zapId?', component: Zap } - ] - } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Nested Routes</h1> - <ul> - <li><router-link to="/parent">/parent</router-link></li> - <li><router-link to="/parent/foo">/parent/foo</router-link></li> - <li><router-link to="/parent/bar">/parent/bar</router-link></li> - <li><router-link to="/baz">/baz</router-link></li> - <li><router-link to="/parent/qux/123">/parent/qux</router-link></li> - <li><router-link to="/parent/quy/123">/parent/quy</router-link></li> - <li><router-link :to="{name: 'zap'}">/parent/zap</router-link></li> - <li><router-link :to="{name: 'zap', params: {zapId: 1}}">/parent/zap/1</router-link></li> - <li><router-link :to="{ params: { zapId: 2 }}">{ params: { zapId: 2 }} (relative params)</router-link></li> - <li><router-link to="/parent/qux/1/quux">/parent/qux/1/quux</router-link></li> - <li><router-link to="/parent/qux/2/quux">/parent/qux/2/quux</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/nested-routes/index.html b/examples/nested-routes/index.html deleted file mode 100644 index a94ffa249..000000000 --- a/examples/nested-routes/index.html +++ /dev/null @@ -1,16 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<style> -.parent { - border: 1px solid #f66; - padding: 10px; -} -.child { - border: 1px solid #f66; - padding: 10px 20px; -} -</style> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/nested-routes.js"></script> diff --git a/examples/redirect/app.js b/examples/redirect/app.js deleted file mode 100644 index 32beeb885..000000000 --- a/examples/redirect/app.js +++ /dev/null @@ -1,123 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { template: '<router-view></router-view>' } -const Default = { template: '<div>default</div>' } -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } -const Baz = { template: '<div>baz</div>' } -const WithParams = { template: '<div>{{ $route.params.id }}</div>' } -const Foobar = { template: '<div>foobar</div>' } -const FooBar = { template: '<div>FooBar</div>' } - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home, - children: [ - { path: '', component: Default }, - { path: 'foo', component: Foo }, - { path: 'bar', component: Bar }, - { path: 'baz', name: 'baz', component: Baz }, - { path: 'with-params/:id', component: WithParams }, - // relative redirect to a sibling route - { path: 'relative-redirect', redirect: 'foo' } - ] - }, - // absolute redirect - { path: '/absolute-redirect', redirect: '/bar' }, - // dynamic redirect, note that the target route `to` is available for the redirect function - { path: '/dynamic-redirect/:id?', - redirect: to => { - const { hash, params, query } = to - if (query.to === 'foo') { - return { path: '/foo', query: null } - } - if (hash === '#baz') { - return { name: 'baz', hash: '' } - } - if (params.id) { - return '/with-params/:id' - } else { - return '/bar' - } - } - }, - // named redirect - { path: '/named-redirect', redirect: { name: 'baz' }}, - - // redirect with params - { path: '/redirect-with-params/:id', redirect: '/with-params/:id' }, - - // redirect with caseSensitive - { path: '/foobar', component: Foobar, caseSensitive: true }, - - // redirect with pathToRegexpOptions - { path: '/FooBar', component: FooBar, pathToRegexpOptions: { sensitive: true }}, - - // catch all redirect - { path: '*', redirect: '/' } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Redirect</h1> - <ul> - <li><router-link to="/relative-redirect"> - /relative-redirect (redirects to /foo) - </router-link></li> - - <li><router-link to="/relative-redirect?foo=bar"> - /relative-redirect?foo=bar (redirects to /foo?foo=bar) - </router-link></li> - - <li><router-link to="/absolute-redirect"> - /absolute-redirect (redirects to /bar) - </router-link></li> - - <li><router-link to="/dynamic-redirect"> - /dynamic-redirect (redirects to /bar) - </router-link></li> - - <li><router-link to="/dynamic-redirect/123"> - /dynamic-redirect/123 (redirects to /with-params/123) - </router-link></li> - - <li><router-link to="/dynamic-redirect?to=foo"> - /dynamic-redirect?to=foo (redirects to /foo) - </router-link></li> - - <li><router-link to="/dynamic-redirect#baz"> - /dynamic-redirect#baz (redirects to /baz) - </router-link></li> - - <li><router-link to="/named-redirect"> - /named-redirect (redirects to /baz) - </router-link></li> - - <li><router-link to="/redirect-with-params/123"> - /redirect-with-params/123 (redirects to /with-params/123) - </router-link></li> - - <li><router-link to="/foobar"> - /foobar - </router-link></li> - - <li><router-link to="/FooBar"> - /FooBar - </router-link></li> - - <li><router-link to="/not-found"> - /not-found (redirects to /) - </router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/redirect/index.html b/examples/redirect/index.html deleted file mode 100644 index bf4cd29c5..000000000 --- a/examples/redirect/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/redirect.js"></script> diff --git a/examples/restart-app/app.js b/examples/restart-app/app.js deleted file mode 100644 index 424affe10..000000000 --- a/examples/restart-app/app.js +++ /dev/null @@ -1,66 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -const Home = { template: '<div>home</div>' } -const Foo = { template: '<div>foo</div>' } - -const routes = [ - { path: '/', component: Home }, - { path: '/foo', component: Foo } -] - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes -}) - -// track number of beforeResolve -const increment = name => { - const counter = document.getElementById(name) - counter.innerHTML++ -} - -document.getElementById('beforeEach').innerHTML = 0 -router.beforeEach((to, from, next) => { - increment('beforeEach') - next() -}) - -document.getElementById('beforeResolve').innerHTML = 0 -router.beforeResolve((to, from, next) => { - increment('beforeResolve') - next() -}) - -document.getElementById('afterEach').innerHTML = 0 -router.afterEach((to, from) => { - increment('afterEach') -}) - -Vue.use(VueRouter) - -let vueInstance -const mountEl = document.getElementById('mount') -const unmountEl = document.getElementById('unmount') - -mountEl.addEventListener('click', () => { - vueInstance = new Vue({ - router, - template: ` - <div id="app"> - <h1>Hello "Restart-app"</h1> - <ul> - <li><router-link to="/">Go to Home</router-link></li> - <li><router-link to="/foo">Go to Foo</router-link></li> - </ul> - <router-view id="view"></router-view> - </div> - ` - }).$mount('#app') -}) - -unmountEl.addEventListener('click', () => { - vueInstance.$destroy() - vueInstance.$el.innerHTML = '' -}) diff --git a/examples/restart-app/index.html b/examples/restart-app/index.html deleted file mode 100644 index c8885ad66..000000000 --- a/examples/restart-app/index.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> - -<hr /> - -<button id="mount">mount</button> -<button id="unmount">unmount</button> - -<hr /> - -Count beforeEach: <span id="beforeEach"></span><br /> -Count beforeResolve: <span id="beforeResolve"></span><br /> -Count afterEach: <span id="afterEach"></span><br /> - -<hr /> - -<div id="app"></div> - -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/restart-app.js"></script> \ No newline at end of file diff --git a/examples/route-alias/app.js b/examples/route-alias/app.js deleted file mode 100644 index d491fe9b5..000000000 --- a/examples/route-alias/app.js +++ /dev/null @@ -1,78 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Root = { template: '<div>root</div>' } -const Home = { template: '<div><h1>Home</h1><router-view></router-view></div>' } -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } -const Baz = { template: '<div>baz</div>' } -const Default = { template: '<div>default</div>' } -const Nested = { template: '<router-view/>' } -const NestedFoo = { template: '<div>nested foo</div>' } - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/root', component: Root, alias: '/root-alias' }, - { path: '/home', component: Home, - children: [ - // absolute alias - { path: 'foo', component: Foo, alias: '/foo' }, - // relative alias (alias to /home/bar-alias) - { path: 'bar', component: Bar, alias: 'bar-alias' }, - // multiple aliases - { path: 'baz', component: Baz, alias: ['/baz', 'baz-alias'] }, - // default child route with empty string as alias. - { path: 'default', component: Default, alias: '' }, - // nested alias - { path: 'nested', component: Nested, alias: 'nested-alias', - children: [ - { path: 'foo', component: NestedFoo } - ] - } - ] - } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Route Alias</h1> - <ul> - <li><router-link to="/root-alias"> - /root-alias (renders /root) - </router-link></li> - - <li><router-link to="/foo"> - /foo (renders /home/foo) - </router-link></li> - - <li><router-link to="/home/bar-alias"> - /home/bar-alias (renders /home/bar) - </router-link></li> - - <li><router-link to="/baz"> - /baz (renders /home/baz) - </router-link></li> - - <li><router-link to="/home/baz-alias"> - /home/baz-alias (renders /home/baz) - </router-link></li> - - <li><router-link to="/home"> - /home (renders /home/default) - </router-link></li> - - <li><router-link to="/home/nested-alias/foo"> - /home/nested-alias/foo (renders /home/nested/foo) - </router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/route-alias/index.html b/examples/route-alias/index.html deleted file mode 100644 index 1c796caa5..000000000 --- a/examples/route-alias/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/route-alias.js"></script> diff --git a/examples/route-matching/app.js b/examples/route-matching/app.js deleted file mode 100644 index 2d0b6b6f1..000000000 --- a/examples/route-matching/app.js +++ /dev/null @@ -1,49 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -// The matching uses path-to-regexp, which is the matching engine used -// by express as well, so the same matching rules apply. -// For detailed rules, see https://github.com/pillarjs/path-to-regexp -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/' }, - // params are denoted with a colon ":" - { path: '/params/:foo/:bar' }, - // a param can be made optional by adding "?" - { path: '/optional-params/:foo?' }, - // a param can be followed by a regex pattern in parens - // this route will only be matched if :id is all numbers - { path: '/params-with-regex/:id(\\d+)' }, - // asterisk can match anything - { path: '/asterisk/*' }, - // make part of the path optional by wrapping with parens and add "?" - { path: '/optional-group/(foo/)?bar' } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Route Matching</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/params/foo/bar">/params/foo/bar</router-link></li> - <li><router-link to="/optional-params">/optional-params</router-link></li> - <li><router-link to="/optional-params/foo">/optional-params/foo</router-link></li> - <li><router-link to="/params-with-regex/123">/params-with-regex/123</router-link></li> - <li><router-link to="/params-with-regex/abc">/params-with-regex/abc</router-link></li> - <li><router-link to="/asterisk/foo">/asterisk/foo</router-link></li> - <li><router-link to="/asterisk/foo/bar">/asterisk/foo/bar</router-link></li> - <li><router-link to="/optional-group/bar">/optional-group/bar</router-link></li> - <li><router-link to="/optional-group/foo/bar">/optional-group/foo/bar</router-link></li> - </ul> - <p>Route context</p> - <pre>{{ JSON.stringify($route, null, 2) }}</pre> - </div> - ` -}).$mount('#app') diff --git a/examples/route-matching/index.html b/examples/route-matching/index.html deleted file mode 100644 index 7fb9fe156..000000000 --- a/examples/route-matching/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/route-matching.js"></script> diff --git a/examples/route-params/app.js b/examples/route-params/app.js deleted file mode 100644 index c9f4699e7..000000000 --- a/examples/route-params/app.js +++ /dev/null @@ -1,58 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Log = { - template: `<div class="log">id: {{ $route.params.id }}, type: {{ $route.params.type }}</div>` -} - -const Logs = { - template: ` - <div> - <pre id="params">{{ to.params }}</pre> - <router-link :to="to" class="child-link">{{ to.params.type }}</router-link> - <router-view></router-view> - </div> - `, - data () { - return { - to: { - name: 'items.logs.type', - params: { type: 'info' } - } - } - } -} - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { - path: '/items/:id/logs', - component: Logs, - children: [ - { - path: ':type', - name: 'items.logs.type', - component: Log - } - ] - } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Route params</h1> - <ul> - <li><router-link to="/items/1/logs">item #1</router-link></li> - <li><router-link to="/items/2/logs">item #2</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/route-params/index.html b/examples/route-params/index.html deleted file mode 100644 index 939b0e9ff..000000000 --- a/examples/route-params/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/route-params.js"></script> diff --git a/examples/route-props/Hello.vue b/examples/route-props/Hello.vue deleted file mode 100644 index 10207d4b7..000000000 --- a/examples/route-props/Hello.vue +++ /dev/null @@ -1,17 +0,0 @@ -<template> - <div> - <h2 class="hello">Hello {{name}} {{ $attrs }}</h2> - </div> -</template> - -<script> - -export default { - props: { - name: { - type: String, - default: 'Vue!' - } - } -} -</script> diff --git a/examples/route-props/app.js b/examples/route-props/app.js deleted file mode 100644 index 8739b6526..000000000 --- a/examples/route-props/app.js +++ /dev/null @@ -1,41 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' -import Hello from './Hello.vue' - -Vue.use(VueRouter) - -function dynamicPropsFn (route) { - const now = new Date() - return { - name: (now.getFullYear() + parseInt(route.params.years)) + '!' - } -} - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Hello }, // No props, no nothing - { path: '/hello/:name', component: Hello, props: true }, // Pass route.params to props - { path: '/static', component: Hello, props: { name: 'world' }}, // static values - { path: '/dynamic/:years', component: Hello, props: dynamicPropsFn }, // custom logic for mapping between route and props - { path: '/attrs', component: Hello, props: { name: 'attrs' }} - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Route props</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/hello/you">/hello/you</router-link></li> - <li><router-link to="/static">/static</router-link></li> - <li><router-link to="/dynamic/1">/dynamic/1</router-link></li> - <li><router-link to="/attrs">/attrs</router-link></li> - </ul> - <router-view class="view" foo="123"></router-view> - </div> - ` -}).$mount('#app') diff --git a/examples/route-props/index.html b/examples/route-props/index.html deleted file mode 100644 index 46df68b65..000000000 --- a/examples/route-props/index.html +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/route-props.js"></script> diff --git a/examples/router-errors/app.js b/examples/router-errors/app.js deleted file mode 100644 index b6979380d..000000000 --- a/examples/router-errors/app.js +++ /dev/null @@ -1,55 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -const component = { - template: ` - <div> - {{ $route.fullPath }} - </div> - ` -} - -Vue.use(VueRouter) - -const router = new VueRouter({ - routes: [ - { path: '/', component }, { path: '/foo', component } - ] -}) - -window.router = router - -router.beforeEach((to, from, next) => { - console.log('from', from.fullPath) - console.log('going to', to.fullPath) - if (to.query.wait) { - setTimeout(() => next(), 100) - } else if (to.query.redirect) { - next(to.query.redirect) - } else if (to.query.abort) { - next(false) - } else { - next() - } -}) - -new Vue({ - el: '#app', - router -}) - -// 4 NAVIGATION ERROR CASES : - -// navigation duplicated -// router.push('/foo') -// router.push('/foo') - -// navigation cancelled -// router.push('/foo?wait=y') -// router.push('/') - -// navigation redirected -// router.push('/foo?redirect=/') - -// navigation aborted -// router.push('/foo?abort=y') diff --git a/examples/router-errors/index.html b/examples/router-errors/index.html deleted file mode 100644 index 12011560b..000000000 --- a/examples/router-errors/index.html +++ /dev/null @@ -1,8 +0,0 @@ -<!DOCTYPE html> -<div id="app"> - <router-link to="/">/</router-link> - <router-link to="/foo">/foo</router-link> - <router-view></router-view> -</div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/router-errors.js"></script> diff --git a/examples/scroll-behavior/app.js b/examples/scroll-behavior/app.js deleted file mode 100644 index afdccb049..000000000 --- a/examples/scroll-behavior/app.js +++ /dev/null @@ -1,103 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { template: '<div class="home">home</div>' } -const Foo = { template: '<div class="foo">foo</div>' } -const Bar = { - template: ` - <div class="bar"> - bar - <div style="height:1500px"></div> - <p id="anchor" style="height:500px">Anchor</p> - <p id="anchor2" style="height:500px">Anchor2</p> - <p id="1number">with number</p> - </div> - ` -} - -// scrollBehavior: -// - only available in html5 history mode -// - defaults to no scroll behavior -// - return false to prevent scroll -const scrollBehavior = function (to, from, savedPosition) { - if (savedPosition) { - // savedPosition is only available for popstate navigations. - return savedPosition - } else { - const position = {} - - // scroll to anchor by returning the selector - if (to.hash) { - position.selector = to.hash - - // specify offset of the element - if (to.hash === '#anchor2') { - position.offset = { y: 100 } - } - - // bypass #1number check - if (/^#\d/.test(to.hash) || document.querySelector(to.hash)) { - return position - } - - // if the returned position is falsy or an empty object, - // will retain current scroll position. - return false - } - - return new Promise(resolve => { - // check if any matched route config has meta that requires scrolling to top - if (to.matched.some(m => m.meta.scrollToTop)) { - // coords will be used if no selector is provided, - // or if the selector didn't match any element. - position.x = 0 - position.y = 0 - } - - // wait for the out transition to complete (if necessary) - this.app.$root.$once('triggerScroll', () => { - // if the resolved position is falsy or an empty object, - // will retain current scroll position. - resolve(position) - }) - }) - } -} - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - scrollBehavior, - routes: [ - { path: '/', component: Home, meta: { scrollToTop: true }}, - { path: '/foo', component: Foo }, - { path: '/bar', component: Bar, meta: { scrollToTop: true }} - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Scroll Behavior</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - <li><router-link to="/bar#anchor">/bar#anchor</router-link></li> - <li><router-link to="/bar#anchor2">/bar#anchor2</router-link></li> - <li><router-link to="/bar#1number">/bar#1number</router-link></li> - </ul> - <transition name="fade" mode="out-in" @after-leave="afterLeave"> - <router-view class="view"></router-view> - </transition> - </div> - `, - methods: { - afterLeave () { - this.$root.$emit('triggerScroll') - } - } -}).$mount('#app') diff --git a/examples/scroll-behavior/index.html b/examples/scroll-behavior/index.html deleted file mode 100644 index 2a8647a42..000000000 --- a/examples/scroll-behavior/index.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css" /> -<style> - .fade-enter-active, - .fade-leave-active { - transition: opacity 0.5s ease; - } - .fade-enter, - .fade-leave-active { - opacity: 0; - } - .view { - border: 1px solid red; - height: 4500px; - position: relative; - } -</style> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/scroll-behavior.js"></script> diff --git a/examples/server.js b/examples/server.js deleted file mode 100644 index be636798e..000000000 --- a/examples/server.js +++ /dev/null @@ -1,34 +0,0 @@ -const express = require('express') -const rewrite = require('express-urlrewrite') -const webpack = require('webpack') -const webpackDevMiddleware = require('webpack-dev-middleware') -const WebpackConfig = require('./webpack.config') - -const app = express() - -app.use( - webpackDevMiddleware(webpack(WebpackConfig), { - publicPath: '/__build__/', - stats: { - colors: true, - chunks: false - } - }) -) - -const fs = require('fs') -const path = require('path') - -fs.readdirSync(__dirname).forEach(file => { - if (fs.statSync(path.join(__dirname, file)).isDirectory()) { - app.use(rewrite('/' + file + '/*', '/' + file + '/index.html')) - } -}) - -app.use(express.static(__dirname)) - -const host = process.env.HOST || 'localhost' -const port = process.env.PORT || 8080 -module.exports = app.listen(port, host, () => { - console.log(`Server listening on http://${host}:${port}, Ctrl+C to stop`) -}) diff --git a/examples/transitions/app.js b/examples/transitions/app.js deleted file mode 100644 index 5d1183a5c..000000000 --- a/examples/transitions/app.js +++ /dev/null @@ -1,72 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' - -Vue.use(VueRouter) - -const Home = { - template: ` - <div class="home"> - <h2>Home</h2> - <p>hello</p> - </div> - ` -} - -const Parent = { - data () { - return { - transitionName: 'slide-left' - } - }, - beforeRouteUpdate (to, from, next) { - const toDepth = to.path.split('/').length - const fromDepth = from.path.split('/').length - this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' - next() - }, - template: ` - <div class="parent"> - <h2>Parent</h2> - <transition :name="transitionName"> - <router-view class="child-view"></router-view> - </transition> - </div> - ` -} - -const Default = { template: '<div class="default">default</div>' } -const Foo = { template: '<div class="foo">foo</div>' } -const Bar = { template: '<div class="bar">bar</div>' } - -const router = new VueRouter({ - mode: 'history', - base: __dirname, - routes: [ - { path: '/', component: Home }, - { path: '/parent', component: Parent, - children: [ - { path: '', component: Default }, - { path: 'foo', component: Foo }, - { path: 'bar', component: Bar } - ] - } - ] -}) - -new Vue({ - router, - template: ` - <div id="app"> - <h1>Transitions</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/parent">/parent</router-link></li> - <li><router-link to="/parent/foo">/parent/foo</router-link></li> - <li><router-link to="/parent/bar">/parent/bar</router-link></li> - </ul> - <transition name="fade" mode="out-in"> - <router-view class="view"></router-view> - </transition> - </div> - ` -}).$mount('#app') diff --git a/examples/transitions/index.html b/examples/transitions/index.html deleted file mode 100644 index 1abaa4f81..000000000 --- a/examples/transitions/index.html +++ /dev/null @@ -1,28 +0,0 @@ -<!DOCTYPE html> -<link rel="stylesheet" href="/global.css"> -<style> -.fade-enter-active, .fade-leave-active { - transition: opacity .75s ease; -} -.fade-enter, .fade-leave-active { - opacity: 0; -} -.child-view { - position: absolute; - transition: all .75s cubic-bezier(.55,0,.1,1); -} -.slide-left-enter, .slide-right-leave-active { - opacity: 0; - -webkit-transform: translate(30px, 0); - transform: translate(30px, 0); -} -.slide-left-leave-active, .slide-right-enter { - opacity: 0; - -webkit-transform: translate(-30px, 0); - transform: translate(-30px, 0); -} -</style> -<a href="/">← Examples index</a> -<div id="app"></div> -<script src="/__build__/shared.chunk.js"></script> -<script src="/__build__/transitions.js"></script> diff --git a/examples/webpack.config.js b/examples/webpack.config.js deleted file mode 100644 index a74f22fb4..000000000 --- a/examples/webpack.config.js +++ /dev/null @@ -1,70 +0,0 @@ -const fs = require('fs') -const path = require('path') -const VuePlugin = require('vue-loader/lib/plugin') - -module.exports = { - // Expose __dirname to allow automatically setting basename. - context: __dirname, - node: { - __dirname: true - }, - - mode: process.env.NODE_ENV || 'development', - - entry: fs.readdirSync(__dirname).reduce((entries, dir) => { - const fullDir = path.join(__dirname, dir) - const entry = path.join(fullDir, 'app.js') - if (fs.statSync(fullDir).isDirectory() && fs.existsSync(entry)) { - entries[dir] = ['es6-promise/auto', entry] - } - - return entries - }, {}), - - output: { - path: path.join(__dirname, '__build__'), - filename: '[name].js', - chunkFilename: '[id].chunk.js', - publicPath: '/__build__/' - }, - - module: { - rules: [ - { - test: /\.js$/, - exclude: /node_modules/, - use: 'babel-loader' - }, - { - test: /\.vue$/, - use: 'vue-loader' - }, - { - test: /\.css$/, - use: ['vue-style-loader', 'css-loader'] - } - ] - }, - - resolve: { - alias: { - vue: 'vue/dist/vue.esm.js', - 'vue-router': path.join(__dirname, '..', 'src'), - 'vue-router/composables': path.join(__dirname, '..', 'src/composables') - } - }, - - optimization: { - splitChunks: { - cacheGroups: { - shared: { - name: 'shared', - chunks: 'initial', - minChunks: 2 - } - } - } - }, - - plugins: [new VuePlugin()] -} diff --git a/flow/declarations.js b/flow/declarations.js deleted file mode 100644 index 824c3eca0..000000000 --- a/flow/declarations.js +++ /dev/null @@ -1,105 +0,0 @@ -declare var document: Document; - -declare class RouteRegExp extends RegExp { - keys: Array<{ name: string, optional: boolean }>; -} - -declare type PathToRegexpOptions = { - sensitive?: boolean, - strict?: boolean, - end?: boolean -} - -declare module 'path-to-regexp' { - declare module.exports: { - (path: string, keys?: Array<?{ name: string }>, options?: PathToRegexpOptions): RouteRegExp; - compile: (path: string) => (params: Object) => string; - } -} - -declare type Dictionary<T> = { [key: string]: T } - -declare type NavigationGuard = ( - to: Route, - from: Route, - next: (to?: RawLocation | false | Function | void) => void -) => any - -declare type AfterNavigationHook = (to: Route, from: Route) => any - -type Position = { x: number, y: number }; -type PositionResult = Position | { selector: string, offset?: Position } | void; - -declare type RouterOptions = { - routes?: Array<RouteConfig>; - mode?: string; - fallback?: boolean; - base?: string; - linkActiveClass?: string; - linkExactActiveClass?: string; - parseQuery?: (query: string) => Object; - stringifyQuery?: (query: Object) => string; - scrollBehavior?: ( - to: Route, - from: Route, - savedPosition: ?Position - ) => PositionResult | Promise<PositionResult>; -} - -declare type RedirectOption = RawLocation | ((to: Route) => RawLocation) - -declare type RouteConfig = { - path: string; - name?: string; - component?: any; - components?: Dictionary<any>; - redirect?: RedirectOption; - alias?: string | Array<string>; - children?: Array<RouteConfig>; - beforeEnter?: NavigationGuard; - meta?: any; - props?: boolean | Object | Function; - caseSensitive?: boolean; - pathToRegexpOptions?: PathToRegexpOptions; -} - -declare type RouteRecord = { - path: string; - alias: Array<string>; - regex: RouteRegExp; - components: Dictionary<any>; - instances: Dictionary<any>; - enteredCbs: Dictionary<Array<Function>>; - name: ?string; - parent: ?RouteRecord; - redirect: ?RedirectOption; - matchAs: ?string; - beforeEnter: ?NavigationGuard; - meta: any; - props: boolean | Object | Function | Dictionary<boolean | Object | Function>; -} - -declare type Location = { - _normalized?: boolean; - name?: string; - path?: string; - hash?: string; - query?: Dictionary<string>; - params?: Dictionary<string>; - append?: boolean; - replace?: boolean; -} - -declare type RawLocation = string | Location - -declare type Route = { - path: string; - name: ?string; - hash: string; - query: Dictionary<string>; - params: Dictionary<string>; - fullPath: string; - matched: Array<RouteRecord>; - redirectedFrom?: string; - meta?: any; -} diff --git a/issue_template.md b/issue_template.md new file mode 100644 index 000000000..41532413c --- /dev/null +++ b/issue_template.md @@ -0,0 +1,43 @@ +<!-- +Thank you for contributing! Please carefully read the following before opening your issue. + +Got a question? +=============== +The issue list of this repo is **exclusively** for bug reports and feature requests. For simple questions, please use the following resources: + +- Read the docs: http://vuejs.github.io/vue-router/ +- Ask in the Gitter chat room: https://gitter.im/vuejs/vue +- Ask on the forums: http://forum.vuejs.org/ +- Look for/ask questions on stack overflow: https://stackoverflow.com/questions/ask?tags=vue-router.js + +Reporting a bug? +================ +- Try to search for your issue, it may have already been answered or even fixed in the development branch. + +- Check if the issue is reproducible with the latest stable version of Vue. If you are using a pre-release, please indicate the specific version you are using. + +- It is **required** that you clearly describe the steps necessary to reproduce the issue you are running into. Issues with no clear repro steps will not be triaged. If an issue labeled "need repro" receives no further input from the issue author for more than 5 days, it will be closed. + +- It is recommended that you make a JSFiddle/JSBin/Codepen to demonstrate your issue. You could start with [this template](http://jsfiddle.net/5sH6A/) that already includes the latest version of Vue. + +- For bugs that involves build setups, you can create a reproduction repository with steps in the README. + +- If your issue is resolved but still open, don’t hesitate to close it. In case you found a solution by yourself, it could be helpful to explain how you fixed it. + +Have a feature request? +======================= +Remove the template from below and provide thoughtful commentary *and code samples* on what this feature means for your product. What will it allow you to do that you can't do today? How will it make current work-arounds straightforward? What potential bugs and edge cases does it help to avoid? etc. Please keep it product-centric. +--> + +<!-- BUG REPORT TEMPLATE --> +### Vue.js & vue-router.js version +1.0.16, 0.7.11 + +### Reproduction Link +<!-- A minimal JSBin, JSFiddle, Codepen, or a GitHub reprository that can reproduce the bug. --> + +### Steps to reproduce + +### What is Expected? + +### What is actually happening? diff --git a/lib/dsl.js b/lib/dsl.js new file mode 100644 index 000000000..22531ff13 --- /dev/null +++ b/lib/dsl.js @@ -0,0 +1,99 @@ +function Target(path, matcher, delegate) { + this.path = path + this.matcher = matcher + this.delegate = delegate +} + +Target.prototype = { + to: function(target, callback) { + var delegate = this.delegate + + if (delegate && delegate.willAddRoute) { + target = delegate.willAddRoute(this.matcher.target, target) + } + + this.matcher.add(this.path, target) + + if (callback) { + if (callback.length === 0) { throw new Error("You must have an argument in the function passed to `to`") } + this.matcher.addChild(this.path, target, callback, this.delegate) + } + return this + } +} + +function Matcher(target) { + this.routes = {} + this.children = {} + this.target = target +} + +Matcher.prototype = { + add: function(path, handler) { + this.routes[path] = handler + }, + + addChild: function(path, target, callback, delegate) { + var matcher = new Matcher(target) + this.children[path] = matcher + + var match = generateMatch(path, matcher, delegate) + + if (delegate && delegate.contextEntered) { + delegate.contextEntered(target, match) + } + + callback(match) + } +} + +function generateMatch(startingPath, matcher, delegate) { + return function(path, nestedCallback) { + var fullPath = startingPath + path + + if (nestedCallback) { + nestedCallback(generateMatch(fullPath, matcher, delegate)) + } else { + return new Target(startingPath + path, matcher, delegate) + } + } +} + +function addRoute(routeArray, path, handler) { + var len = 0 + for (var i=0, l=routeArray.length; i<l; i++) { + len += routeArray[i].path.length + } + + path = path.substr(len) + var route = { path: path, handler: handler } + routeArray.push(route) +} + +function eachRoute(baseRoute, matcher, callback, binding) { + var routes = matcher.routes + + for (var path in routes) { + if (routes.hasOwnProperty(path)) { + var routeArray = baseRoute.slice() + addRoute(routeArray, path, routes[path]) + + if (matcher.children[path]) { + eachRoute(routeArray, matcher.children[path], callback, binding) + } else { + callback.call(binding, routeArray) + } + } + } +} + +export default function(callback, addRouteCallback) { + var matcher = new Matcher() + + callback(generateMatch("", matcher, this.delegate)) + + eachRoute([], matcher, function(route) { + if (addRouteCallback) { addRouteCallback(this, route) } + else { this.add(route) } + }, this) +} diff --git a/lib/route-recognizer.js b/lib/route-recognizer.js new file mode 100644 index 000000000..3886f7210 --- /dev/null +++ b/lib/route-recognizer.js @@ -0,0 +1,562 @@ +import map from './dsl' + +var specials = [ + '/', '.', '*', '+', '?', '|', + '(', ')', '[', ']', '{', '}', '\\' +] + +var escapeRegex = new RegExp('(\\' + specials.join('|\\') + ')', 'g') + +var noWarning = false +function warn (msg) { + if (!noWarning && typeof console !== 'undefined') { + console.error('[vue-router] ' + msg) + } +} + +function tryDecode (uri, asComponent) { + try { + return asComponent + ? decodeURIComponent(uri) + : decodeURI(uri) + } catch (e) { + warn('malformed URI' + (asComponent ? ' component: ' : ': ') + uri) + } +} + +function isArray(test) { + return Object.prototype.toString.call(test) === "[object Array]" +} + +// A Segment represents a segment in the original route description. +// Each Segment type provides an `eachChar` and `regex` method. +// +// The `eachChar` method invokes the callback with one or more character +// specifications. A character specification consumes one or more input +// characters. +// +// The `regex` method returns a regex fragment for the segment. If the +// segment is a dynamic of star segment, the regex fragment also includes +// a capture. +// +// A character specification contains: +// +// * `validChars`: a String with a list of all valid characters, or +// * `invalidChars`: a String with a list of all invalid characters +// * `repeat`: true if the character specification can repeat + +function StaticSegment(string) { this.string = string } +StaticSegment.prototype = { + eachChar: function(callback) { + var string = this.string, ch + + for (var i=0, l=string.length; i<l; i++) { + ch = string.charAt(i) + callback({ validChars: ch }) + } + }, + + regex: function() { + return this.string.replace(escapeRegex, '\\$1') + }, + + generate: function() { + return this.string + } +} + +function DynamicSegment(name) { this.name = name } +DynamicSegment.prototype = { + eachChar: function(callback) { + callback({ invalidChars: "/", repeat: true }) + }, + + regex: function() { + return "([^/]+)" + }, + + generate: function(params) { + var val = params[this.name] + return val == null ? ":" + this.name : val + } +} + +function StarSegment(name) { this.name = name } +StarSegment.prototype = { + eachChar: function(callback) { + callback({ invalidChars: "", repeat: true }) + }, + + regex: function() { + return "(.+)" + }, + + generate: function(params) { + var val = params[this.name] + return val == null ? ":" + this.name : val + } +} + +function EpsilonSegment() {} +EpsilonSegment.prototype = { + eachChar: function() {}, + regex: function() { return "" }, + generate: function() { return "" } +} + +function parse(route, names, specificity) { + // normalize route as not starting with a "/". Recognition will + // also normalize. + if (route.charAt(0) === "/") { route = route.substr(1) } + + var segments = route.split("/"), results = [] + + // A routes has specificity determined by the order that its different segments + // appear in. This system mirrors how the magnitude of numbers written as strings + // works. + // Consider a number written as: "abc". An example would be "200". Any other number written + // "xyz" will be smaller than "abc" so long as `a > z`. For instance, "199" is smaller + // then "200", even though "y" and "z" (which are both 9) are larger than "0" (the value + // of (`b` and `c`). This is because the leading symbol, "2", is larger than the other + // leading symbol, "1". + // The rule is that symbols to the left carry more weight than symbols to the right + // when a number is written out as a string. In the above strings, the leading digit + // represents how many 100's are in the number, and it carries more weight than the middle + // number which represents how many 10's are in the number. + // This system of number magnitude works well for route specificity, too. A route written as + // `a/b/c` will be more specific than `x/y/z` as long as `a` is more specific than + // `x`, irrespective of the other parts. + // Because of this similarity, we assign each type of segment a number value written as a + // string. We can find the specificity of compound routes by concatenating these strings + // together, from left to right. After we have looped through all of the segments, + // we convert the string to a number. + specificity.val = '' + + for (var i=0, l=segments.length; i<l; i++) { + var segment = segments[i], match + + if (match = segment.match(/^:([^\/]+)$/)) { + results.push(new DynamicSegment(match[1])) + names.push(match[1]) + specificity.val += '3' + } else if (match = segment.match(/^\*([^\/]+)$/)) { + results.push(new StarSegment(match[1])) + specificity.val += '2' + names.push(match[1]) + } else if(segment === "") { + results.push(new EpsilonSegment()) + specificity.val += '1' + } else { + results.push(new StaticSegment(segment)) + specificity.val += '4' + } + } + + specificity.val = +specificity.val + + return results +} + +// A State has a character specification and (`charSpec`) and a list of possible +// subsequent states (`nextStates`). +// +// If a State is an accepting state, it will also have several additional +// properties: +// +// * `regex`: A regular expression that is used to extract parameters from paths +// that reached this accepting state. +// * `handlers`: Information on how to convert the list of captures into calls +// to registered handlers with the specified parameters +// * `types`: How many static, dynamic or star segments in this route. Used to +// decide which route to use if multiple registered routes match a path. +// +// Currently, State is implemented naively by looping over `nextStates` and +// comparing a character specification against a character. A more efficient +// implementation would use a hash of keys pointing at one or more next states. + +function State(charSpec) { + this.charSpec = charSpec + this.nextStates = [] +} + +State.prototype = { + get: function(charSpec) { + var nextStates = this.nextStates + + for (var i=0, l=nextStates.length; i<l; i++) { + var child = nextStates[i] + + var isEqual = child.charSpec.validChars === charSpec.validChars + isEqual = isEqual && child.charSpec.invalidChars === charSpec.invalidChars + + if (isEqual) { return child } + } + }, + + put: function(charSpec) { + var state + + // If the character specification already exists in a child of the current + // state, just return that state. + if (state = this.get(charSpec)) { return state } + + // Make a new state for the character spec + state = new State(charSpec) + + // Insert the new state as a child of the current state + this.nextStates.push(state) + + // If this character specification repeats, insert the new state as a child + // of itself. Note that this will not trigger an infinite loop because each + // transition during recognition consumes a character. + if (charSpec.repeat) { + state.nextStates.push(state) + } + + // Return the new state + return state + }, + + // Find a list of child states matching the next character + match: function(ch) { + // DEBUG "Processing `" + ch + "`:" + var nextStates = this.nextStates, + child, charSpec, chars + + // DEBUG " " + debugState(this) + var returned = [] + + for (var i=0, l=nextStates.length; i<l; i++) { + child = nextStates[i] + + charSpec = child.charSpec + + if (typeof (chars = charSpec.validChars) !== 'undefined') { + if (chars.indexOf(ch) !== -1) { returned.push(child) } + } else if (typeof (chars = charSpec.invalidChars) !== 'undefined') { + if (chars.indexOf(ch) === -1) { returned.push(child) } + } + } + + return returned + } + + /** IF DEBUG + , debug: function() { + var charSpec = this.charSpec, + debug = "[", + chars = charSpec.validChars || charSpec.invalidChars; + + if (charSpec.invalidChars) { debug += "^"; } + debug += chars; + debug += "]"; + + if (charSpec.repeat) { debug += "+"; } + + return debug; + } + END IF **/ +} + +/** IF DEBUG +function debug(log) { + console.log(log); +} + +function debugState(state) { + return state.nextStates.map(function(n) { + if (n.nextStates.length === 0) { return "( " + n.debug() + " [accepting] )"; } + return "( " + n.debug() + " <then> " + n.nextStates.map(function(s) { return s.debug() }).join(" or ") + " )"; + }).join(", ") +} +END IF **/ + +// Sort the routes by specificity +function sortSolutions(states) { + return states.sort(function(a, b) { + return b.specificity.val - a.specificity.val + }) +} + +function recognizeChar(states, ch) { + var nextStates = [] + + for (var i=0, l=states.length; i<l; i++) { + var state = states[i] + + nextStates = nextStates.concat(state.match(ch)) + } + + return nextStates +} + +var oCreate = Object.create || function(proto) { + function F() {} + F.prototype = proto + return new F() +} + +function RecognizeResults(queryParams) { + this.queryParams = queryParams || {} +} +RecognizeResults.prototype = oCreate({ + splice: Array.prototype.splice, + slice: Array.prototype.slice, + push: Array.prototype.push, + length: 0, + queryParams: null +}) + +function findHandler(state, path, queryParams) { + var handlers = state.handlers, regex = state.regex + var captures = path.match(regex), currentCapture = 1 + var result = new RecognizeResults(queryParams) + + for (var i=0, l=handlers.length; i<l; i++) { + var handler = handlers[i], names = handler.names, params = {} + + for (var j=0, m=names.length; j<m; j++) { + params[names[j]] = captures[currentCapture++] + } + + result.push({ handler: handler.handler, params: params, isDynamic: !!names.length }) + } + + return result +} + +function addSegment(currentState, segment) { + segment.eachChar(function(ch) { + var state + + currentState = currentState.put(ch) + }) + + return currentState +} + +function decodeQueryParamPart(part) { + // http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1 + part = part.replace(/\+/gm, '%20') + return tryDecode(part, true) +} + +// The main interface + +var RouteRecognizer = function() { + this.rootState = new State() + this.names = {} +} + + +RouteRecognizer.prototype = { + add: function(routes, options) { + var currentState = this.rootState, regex = "^", + specificity = {}, + handlers = [], allSegments = [], name + + var isEmpty = true + + for (var i=0, l=routes.length; i<l; i++) { + var route = routes[i], names = [] + + var segments = parse(route.path, names, specificity) + + allSegments = allSegments.concat(segments) + + for (var j=0, m=segments.length; j<m; j++) { + var segment = segments[j] + + if (segment instanceof EpsilonSegment) { continue } + + isEmpty = false + + // Add a "/" for the new segment + currentState = currentState.put({ validChars: "/" }) + regex += "/" + + // Add a representation of the segment to the NFA and regex + currentState = addSegment(currentState, segment) + regex += segment.regex() + } + + var handler = { handler: route.handler, names: names } + handlers.push(handler) + } + + if (isEmpty) { + currentState = currentState.put({ validChars: "/" }) + regex += "/" + } + + currentState.handlers = handlers + currentState.regex = new RegExp(regex + "$") + currentState.specificity = specificity + + if (name = options && options.as) { + this.names[name] = { + segments: allSegments, + handlers: handlers + } + } + }, + + handlersFor: function(name) { + var route = this.names[name], result = [] + if (!route) { throw new Error("There is no route named " + name) } + + for (var i=0, l=route.handlers.length; i<l; i++) { + result.push(route.handlers[i]) + } + + return result + }, + + hasRoute: function(name) { + return !!this.names[name] + }, + + generate: function(name, params) { + var route = this.names[name], output = "" + if (!route) { throw new Error("There is no route named " + name) } + + var segments = route.segments + + for (var i=0, l=segments.length; i<l; i++) { + var segment = segments[i] + + if (segment instanceof EpsilonSegment) { continue } + + output += "/" + output += segment.generate(params) + } + + if (output.charAt(0) !== '/') { output = '/' + output } + + if (params && params.queryParams) { + output += this.generateQueryString(params.queryParams) + } + + return output + }, + + generateQueryString: function(params) { + var pairs = [] + var keys = [] + for(var key in params) { + if (params.hasOwnProperty(key)) { + keys.push(key) + } + } + keys.sort() + for (var i = 0, len = keys.length; i < len; i++) { + key = keys[i] + var value = params[key] + if (value == null) { + continue + } + var pair = encodeURIComponent(key) + if (isArray(value)) { + for (var j = 0, l = value.length; j < l; j++) { + var arrayPair = key + '[]' + '=' + encodeURIComponent(value[j]) + pairs.push(arrayPair) + } + } else { + pair += "=" + encodeURIComponent(value) + pairs.push(pair) + } + } + + if (pairs.length === 0) { return '' } + + return "?" + pairs.join("&") + }, + + parseQueryString: function(queryString) { + var pairs = queryString.split("&"), queryParams = {} + for(var i=0; i < pairs.length; i++) { + var pair = pairs[i].split('='), + key = decodeQueryParamPart(pair[0]), + keyLength = key.length, + isArray = false, + value + if (pair.length === 1) { + value = 'true' + } else { + //Handle arrays + if (keyLength > 2 && key.slice(keyLength -2) === '[]') { + isArray = true + key = key.slice(0, keyLength - 2) + if(!queryParams[key]) { + queryParams[key] = [] + } + } + value = pair[1] ? decodeQueryParamPart(pair[1]) : '' + } + if (isArray) { + queryParams[key].push(value) + } else { + queryParams[key] = value + } + } + return queryParams + }, + + recognize: function(path, silent) { + noWarning = silent + var states = [ this.rootState ], + pathLen, i, l, queryStart, queryParams = {}, + isSlashDropped = false + + queryStart = path.indexOf('?') + if (queryStart !== -1) { + var queryString = path.substr(queryStart + 1, path.length) + path = path.substr(0, queryStart) + if (queryString) { + queryParams = this.parseQueryString(queryString) + } + } + + path = tryDecode(path) + if (!path) return + + // DEBUG GROUP path + + if (path.charAt(0) !== "/") { path = "/" + path } + + pathLen = path.length + if (pathLen > 1 && path.charAt(pathLen - 1) === "/") { + path = path.substr(0, pathLen - 1) + isSlashDropped = true + } + + for (i=0, l=path.length; i<l; i++) { + states = recognizeChar(states, path.charAt(i)) + if (!states.length) { break } + } + + // END DEBUG GROUP + + var solutions = [] + for (i=0, l=states.length; i<l; i++) { + if (states[i].handlers) { solutions.push(states[i]) } + } + + states = sortSolutions(solutions) + + var state = solutions[0] + + if (state && state.handlers) { + // if a trailing slash was dropped and a star segment is the last segment + // specified, put the trailing slash back + if (isSlashDropped && state.regex.source.slice(-5) === "(.+)$") { + path = path + "/" + } + return findHandler(state, path, queryParams) + } + } +} + +RouteRecognizer.prototype.map = map + +export default RouteRecognizer diff --git a/netlify.toml b/netlify.toml deleted file mode 100644 index 7d078bba2..000000000 --- a/netlify.toml +++ /dev/null @@ -1,4 +0,0 @@ -[build] - ignore = "git diff --quiet HEAD^ HEAD ./docs/" - publish = "docs/.vuepress/dist" - command = "yarn run docs:build" diff --git a/package.json b/package.json index 816a32865..5632cf966 100644 --- a/package.json +++ b/package.json @@ -1,139 +1,79 @@ { "name": "vue-router", - "version": "3.6.5", - "description": "Official router for Vue.js 2", - "author": "Evan You", - "license": "MIT", - "main": "dist/vue-router.common.js", - "module": "dist/vue-router.esm.js", - "unpkg": "dist/vue-router.js", - "jsdelivr": "dist/vue-router.js", - "sideEffects": false, - "repository": { - "type": "git", - "url": "https://github.com/vuejs/vue-router.git" - }, - "typings": "types/index.d.ts", + "version": "0.7.13", + "description": "A router for Vue.js", + "main": "dist/vue-router.js", + "jsnext:main": "src/index.js", "files": [ + "dist", "src", - "dist/*.js", - "dist/*.mjs", - "types/*.d.ts", - "composables.mjs", - "composables.js", - "composables.d.ts", - "vetur/tags.json", - "vetur/attributes.json" + "lib" ], - "exports": { - ".": { - "import": { - "node": "./dist/vue-router.mjs", - "default": "./dist/vue-router.esm.js" - }, - "require": "./dist/vue-router.common.js", - "types": "./types/index.d.ts" - }, - "./composables": { - "import": "./composables.mjs", - "require": "./composables.js", - "types": "./composables.d.ts" - }, - "./dist/*": "./dist/*", - "./types/*": "./types/*", - "./package.json": "./package.json" + "scripts": { + "dev": "npm run serve-test & webpack --watch --config build/webpack.dev.config.js", + "lint": "eslint src build test/e2e test/unit/specs", + "unit": "./node_modules/karma/bin/karma start build/karma.config.js", + "build": "node build/build.js", + "serve-example": "webpack-dev-server --inline --hot --config example/advanced/webpack.config.js --content-base example/advanced --history-api-fallback --host 0.0.0.0", + "serve-test": "webpack-dev-server --quiet --config test/unit/webpack.config.js --content-base test/unit --history-api-fallback --host 0.0.0.0 --port 8081", + "e2e-sauce": "nightwatch -c build/nightwatch.sauce.json -e chrome,firefox,ie10,ie11", + "e2e-local": "bash ./build/e2e.sh", + "release": "bash ./build/release.sh", + "docs": "cd docs && gitbook serve", + "deploy-docs": "bash ./build/update-docs.sh", + "test": "npm run lint && npm run unit && npm run e2e-local" }, - "vetur": { - "tags": "vetur/tags.json", - "attributes": "vetur/attributes.json" + "repository": { + "type": "git", + "url": "git+https://github.com/vuejs/vue-router.git" }, "keywords": [ "vue", + "vuejs", "router", - "routing" + "mvvm" ], - "scripts": { - "dev": "node examples/server.js", - "dev:dist": "rollup -wm -c build/rollup.dev.config.js", - "build": "node build/build.js", - "lint": "eslint src examples test", - "test": "npm run lint && npm run flow && npm run test:unit && npm run test:e2e && npm run test:types", - "flow": "flow check", - "test:unit": "jasmine JASMINE_CONFIG_PATH=test/unit/jasmine.json", - "test:e2e": "node test/e2e/runner.js", - "test:e2e:ci": "node test/e2e/runner.js --local -e ie,android44 -c test/e2e/nightwatch.browserstack.js test/e2e/specs/active-links.js", - "test:e2e:ff": "node test/e2e/runner.js -e firefox -c test/e2e/nightwatch.config.js", - "test:e2e:ie9": "node test/e2e/runner.js --local -e ie9 -c test/e2e/nightwatch.browserstack.js --skiptags history,ie9-fail", - "test:types": "tsc -p types/test", - "docs": "vuepress dev docs", - "docs:build": "vuepress build docs", - "changelog": "conventional-changelog -p angular -r 2 -i CHANGELOG.md -s", - "release": "bash scripts/release.sh", - "commit": "git-cz" - }, - "gitHooks": { - "pre-commit": "lint-staged", - "commit-msg": "node scripts/verifyCommitMsg.js" - }, - "lint-staged": { - "*.{js,vue}": [ - "eslint --fix", - "git add" - ] - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.0.0", - "@vuepress/plugin-pwa": "^1.5.3", - "@vuepress/theme-vue": "^1.5.3", - "axios": "^0.28.0", - "babel-core": "^6.24.1", - "babel-eslint": "^10.0.2", - "babel-loader": "^7.1.3", - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-preset-env": "^1.6.1", - "babel-preset-flow-vue": "^1.0.0", - "browserstack-local": "^1.4.8", - "buble": "^0.19.8", - "chromedriver": "^96.0.0", - "conventional-changelog-cli": "^2.0.11", - "cross-spawn": "^7.0.3", - "css-loader": "^2.1.1", - "dotenv": "^8.2.0", - "es6-promise": "^4.2.8", - "eslint": "^4.19.1", - "eslint-plugin-flowtype": "^2.46.1", - "eslint-plugin-jasmine": "^2.10.1", - "eslint-plugin-vue-libs": "^2.1.0", - "express": "^4.17.1", - "express-urlrewrite": "^1.2.0", - "flow-bin": "^0.66.0", - "geckodriver": "^1.20.0", - "jasmine": "2.8.0", - "lint-staged": "^8.2.0", - "nightwatch": "^1.3.6", - "nightwatch-helpers": "^1.0.0", - "path-to-regexp": "^1.8.0", - "rollup": "^2.34.1", - "rollup-plugin-buble": "^0.19.8", - "rollup-plugin-flow-no-whitespace": "^1.0.0", - "rollup-plugin-replace": "^2.0.0", - "rollup-watch": "^4.0.0", - "selenium-server": "^3.141.59", - "terser": "^4.2.0", - "typescript": "^4.7.0", - "vue": "^2.7.0", - "vue-loader": "^15.9.3", - "vue-server-renderer": "^2.7.0", - "vue-template-compiler": "^2.7.0", - "vuepress": "^1.5.3", - "vuepress-theme-vue": "^1.1.1", - "webpack": "^4.35.2", - "webpack-dev-middleware": "^3.7.0", - "yorkie": "^2.0.0" - }, + "author": "Evan You", + "license": "MIT", "bugs": { "url": "https://github.com/vuejs/vue-router/issues" }, - "homepage": "https://github.com/vuejs/vue-router#readme" + "homepage": "https://github.com/vuejs/vue-router#readme", + "devDependencies": { + "babel-core": "^5.8.33", + "babel-loader": "^5.3.3", + "babel-runtime": "^5.8.29", + "chromedriver": "2.20.0", + "css-loader": "^0.23.1", + "es6-promise": "^3.0.2", + "eslint": "^1.3.1", + "express": "^4.12.3", + "istanbul-instrumenter-loader": "^0.1.3", + "jasmine-core": "^2.3.2", + "karma": "^0.13.8", + "karma-coverage": "^0.5.0", + "karma-jasmine": "^0.3.5", + "karma-phantomjs-launcher": "^0.2.1", + "karma-sourcemap-loader": "^0.3.7", + "karma-spec-reporter": "0.0.23", + "karma-webpack": "^1.7.0", + "nightwatch": "^0.8.15", + "phantomjs": "^1.9.19", + "rollup": "^0.21.0", + "rollup-plugin-babel": "^1.0.0", + "selenium-server": "2.49.1", + "style-loader": "^0.13.0", + "uglify-js": "^2.5.0", + "vue": "^1.0.14", + "vue-hot-reload-api": "^1.2.1", + "vue-html-loader": "^1.0.0", + "vue-loader": "^6.0.3", + "webpack": "^1.11.0", + "webpack-dev-server": "^1.10.1" + }, + "jspm": { + "main": "src/index.js", + "registry": "npm", + "format": "esm" + } } diff --git a/scripts/release.sh b/scripts/release.sh deleted file mode 100644 index 6b22ad516..000000000 --- a/scripts/release.sh +++ /dev/null @@ -1,29 +0,0 @@ -set -e -echo "Current version:" $(grep version package.json | sed -E 's/^.*"(4[^"]+)".*$/\1/') -echo "Enter release version e.g. 3.3.0: " -read VERSION - -read -p "Releasing v$VERSION - are you sure? (y/n)" -n 1 -r -echo # (optional) move to a new line -if [[ $REPLY =~ ^[Yy]$ ]] -then - echo "Releasing v$VERSION ..." - - # commit - VERSION=$VERSION npm run build - git add dist composables.* - git commit -m "build: bundle $VERSION" - npm version $VERSION --message "chore(release): %s" - - # changelog - npm run changelog - echo "Please check the git history and the changelog and press enter" - read OKAY - git add CHANGELOG.md - git commit -m "chore(changelog): $VERSION" - - # publish - git push origin refs/tags/v$VERSION - git push - npm publish --tag legacy -fi diff --git a/scripts/verifyCommitMsg.js b/scripts/verifyCommitMsg.js deleted file mode 100644 index c6be475a4..000000000 --- a/scripts/verifyCommitMsg.js +++ /dev/null @@ -1,18 +0,0 @@ -const chalk = require('chalk') // eslint-disable-line -const msgPath = process.env.GIT_PARAMS -const msg = require('fs').readFileSync(msgPath, 'utf-8').trim() - -const commitRE = /^(v\d+\.\d+\.\d+(-(alpha|beta|rc.\d+))?$)|((revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50})/ - -if (!commitRE.test(msg)) { - console.log() - console.error( - ` ${chalk.bgRed.white(' ERROR ')} ${chalk.red(`invalid commit message format.`)}\n\n` + - chalk.red(` Proper commit message format is required for automated changelog generation. Examples:\n\n`) + - ` ${chalk.green(`feat(compiler): add 'comments' option`)}\n` + - ` ${chalk.green(`fix(v-model): handle events on blur (close #28)`)}\n\n` + - chalk.red(` See .github/COMMIT_CONVENTION.md for more details.\n`) + - chalk.red(` You can also use ${chalk.cyan(`npm run commit`)} to interactively generate a commit message.\n`) - ) - process.exit(1) -} diff --git a/src/components/link.js b/src/components/link.js deleted file mode 100644 index 821b69f02..000000000 --- a/src/components/link.js +++ /dev/null @@ -1,224 +0,0 @@ -/* @flow */ - -import { createRoute, isSameRoute, isIncludedRoute } from '../util/route' -import { extend } from '../util/misc' -import { normalizeLocation } from '../util/location' -import { warn } from '../util/warn' - -// work around weird flow bug -const toTypes: Array<Function> = [String, Object] -const eventTypes: Array<Function> = [String, Array] - -const noop = () => {} - -let warnedCustomSlot -let warnedTagProp -let warnedEventProp - -export default { - name: 'RouterLink', - props: { - to: { - type: toTypes, - required: true - }, - tag: { - type: String, - default: 'a' - }, - custom: Boolean, - exact: Boolean, - exactPath: Boolean, - append: Boolean, - replace: Boolean, - activeClass: String, - exactActiveClass: String, - ariaCurrentValue: { - type: String, - default: 'page' - }, - event: { - type: eventTypes, - default: 'click' - } - }, - render (h: Function) { - const router = this.$router - const current = this.$route - const { location, route, href } = router.resolve( - this.to, - current, - this.append - ) - - const classes = {} - const globalActiveClass = router.options.linkActiveClass - const globalExactActiveClass = router.options.linkExactActiveClass - // Support global empty active class - const activeClassFallback = - globalActiveClass == null ? 'router-link-active' : globalActiveClass - const exactActiveClassFallback = - globalExactActiveClass == null - ? 'router-link-exact-active' - : globalExactActiveClass - const activeClass = - this.activeClass == null ? activeClassFallback : this.activeClass - const exactActiveClass = - this.exactActiveClass == null - ? exactActiveClassFallback - : this.exactActiveClass - - const compareTarget = route.redirectedFrom - ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router) - : route - - classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath) - classes[activeClass] = this.exact || this.exactPath - ? classes[exactActiveClass] - : isIncludedRoute(current, compareTarget) - - const ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null - - const handler = e => { - if (guardEvent(e)) { - if (this.replace) { - router.replace(location, noop) - } else { - router.push(location, noop) - } - } - } - - const on = { click: guardEvent } - if (Array.isArray(this.event)) { - this.event.forEach(e => { - on[e] = handler - }) - } else { - on[this.event] = handler - } - - const data: any = { class: classes } - - const scopedSlot = - !this.$scopedSlots.$hasNormal && - this.$scopedSlots.default && - this.$scopedSlots.default({ - href, - route, - navigate: handler, - isActive: classes[activeClass], - isExactActive: classes[exactActiveClass] - }) - - if (scopedSlot) { - if (process.env.NODE_ENV !== 'production' && !this.custom) { - !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n') - warnedCustomSlot = true - } - if (scopedSlot.length === 1) { - return scopedSlot[0] - } else if (scopedSlot.length > 1 || !scopedSlot.length) { - if (process.env.NODE_ENV !== 'production') { - warn( - false, - `<router-link> with to="${ - this.to - }" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.` - ) - } - return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot) - } - } - - if (process.env.NODE_ENV !== 'production') { - if ('tag' in this.$options.propsData && !warnedTagProp) { - warn( - false, - `<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.` - ) - warnedTagProp = true - } - if ('event' in this.$options.propsData && !warnedEventProp) { - warn( - false, - `<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.` - ) - warnedEventProp = true - } - } - - if (this.tag === 'a') { - data.on = on - data.attrs = { href, 'aria-current': ariaCurrentValue } - } else { - // find the first <a> child and apply listener and href - const a = findAnchor(this.$slots.default) - if (a) { - // in case the <a> is a static node - a.isStatic = false - const aData = (a.data = extend({}, a.data)) - aData.on = aData.on || {} - // transform existing events in both objects into arrays so we can push later - for (const event in aData.on) { - const handler = aData.on[event] - if (event in on) { - aData.on[event] = Array.isArray(handler) ? handler : [handler] - } - } - // append new listeners for router-link - for (const event in on) { - if (event in aData.on) { - // on[event] is always a function - aData.on[event].push(on[event]) - } else { - aData.on[event] = handler - } - } - - const aAttrs = (a.data.attrs = extend({}, a.data.attrs)) - aAttrs.href = href - aAttrs['aria-current'] = ariaCurrentValue - } else { - // doesn't have <a> child, apply listener to self - data.on = on - } - } - - return h(this.tag, data, this.$slots.default) - } -} - -export function guardEvent (e: any) { - // don't redirect with control keys - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return - // don't redirect when preventDefault called - if (e.defaultPrevented) return - // don't redirect on right click - if (e.button !== undefined && e.button !== 0) return - // don't redirect if `target="_blank"` - if (e.currentTarget && e.currentTarget.getAttribute) { - const target = e.currentTarget.getAttribute('target') - if (/\b_blank\b/i.test(target)) return - } - // this may be a Weex event which doesn't have this method - if (e.preventDefault) { - e.preventDefault() - } - return true -} - -function findAnchor (children) { - if (children) { - let child - for (let i = 0; i < children.length; i++) { - child = children[i] - if (child.tag === 'a') { - return child - } - if (child.children && (child = findAnchor(child.children))) { - return child - } - } - } -} diff --git a/src/components/view.js b/src/components/view.js deleted file mode 100644 index 442e9a69e..000000000 --- a/src/components/view.js +++ /dev/null @@ -1,155 +0,0 @@ -import { warn } from '../util/warn' -import { extend } from '../util/misc' -import { handleRouteEntered } from '../util/route' - -export default { - name: 'RouterView', - functional: true, - props: { - name: { - type: String, - default: 'default' - } - }, - render (_, { props, children, parent, data }) { - // used by devtools to display a router-view badge - data.routerView = true - - // directly use parent context's createElement() function - // so that components rendered by router-view can resolve named slots - const h = parent.$createElement - const name = props.name - const route = parent.$route - const cache = parent._routerViewCache || (parent._routerViewCache = {}) - - // determine current view depth, also check to see if the tree - // has been toggled inactive but kept-alive. - let depth = 0 - let inactive = false - while (parent && parent._routerRoot !== parent) { - const vnodeData = parent.$vnode ? parent.$vnode.data : {} - if (vnodeData.routerView) { - depth++ - } - if (vnodeData.keepAlive && parent._directInactive && parent._inactive) { - inactive = true - } - parent = parent.$parent - } - data.routerViewDepth = depth - - // render previous view if the tree is inactive and kept-alive - if (inactive) { - const cachedData = cache[name] - const cachedComponent = cachedData && cachedData.component - if (cachedComponent) { - // #2301 - // pass props - if (cachedData.configProps) { - fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps) - } - return h(cachedComponent, data, children) - } else { - // render previous empty view - return h() - } - } - - const matched = route.matched[depth] - const component = matched && matched.components[name] - - // render empty node if no matched route or no config component - if (!matched || !component) { - cache[name] = null - return h() - } - - // cache component - cache[name] = { component } - - // attach instance registration hook - // this will be called in the instance's injected lifecycle hooks - data.registerRouteInstance = (vm, val) => { - // val could be undefined for unregistration - const current = matched.instances[name] - if ( - (val && current !== vm) || - (!val && current === vm) - ) { - matched.instances[name] = val - } - } - - // also register instance in prepatch hook - // in case the same component instance is reused across different routes - ;(data.hook || (data.hook = {})).prepatch = (_, vnode) => { - matched.instances[name] = vnode.componentInstance - } - - // register instance in init hook - // in case kept-alive component be actived when routes changed - data.hook.init = (vnode) => { - if (vnode.data.keepAlive && - vnode.componentInstance && - vnode.componentInstance !== matched.instances[name] - ) { - matched.instances[name] = vnode.componentInstance - } - - // if the route transition has already been confirmed then we weren't - // able to call the cbs during confirmation as the component was not - // registered yet, so we call it here. - handleRouteEntered(route) - } - - const configProps = matched.props && matched.props[name] - // save route and configProps in cache - if (configProps) { - extend(cache[name], { - route, - configProps - }) - fillPropsinData(component, data, route, configProps) - } - - return h(component, data, children) - } -} - -function fillPropsinData (component, data, route, configProps) { - // resolve props - let propsToPass = data.props = resolveProps(route, configProps) - if (propsToPass) { - // clone to prevent mutation - propsToPass = data.props = extend({}, propsToPass) - // pass non-declared props as attrs - const attrs = data.attrs = data.attrs || {} - for (const key in propsToPass) { - if (!component.props || !(key in component.props)) { - attrs[key] = propsToPass[key] - delete propsToPass[key] - } - } - } -} - -function resolveProps (route, config) { - switch (typeof config) { - case 'undefined': - return - case 'object': - return config - case 'function': - return config(route) - case 'boolean': - return config ? route.params : undefined - default: - if (process.env.NODE_ENV !== 'production') { - warn( - false, - `props in "${route.path}" is a ${typeof config}, ` + - `expecting an object, function or boolean.` - ) - } - } -} diff --git a/src/composables/globals.js b/src/composables/globals.js deleted file mode 100644 index 8331f28ec..000000000 --- a/src/composables/globals.js +++ /dev/null @@ -1,34 +0,0 @@ -import { - getCurrentInstance, - shallowReactive, - effectScope -} from 'vue' -import { throwNoCurrentInstance } from './utils' - -export function useRouter () { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useRouter') - } - - return getCurrentInstance().proxy.$root.$router -} - -export function useRoute () { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useRoute') - } - - const root = getCurrentInstance().proxy.$root - if (!root._$route) { - const route = effectScope(true).run(() => - shallowReactive(Object.assign({}, root.$router.currentRoute)) - ) - root._$route = route - - root.$router.afterEach(to => { - Object.assign(route, to) - }) - } - - return root._$route -} diff --git a/src/composables/guards.js b/src/composables/guards.js deleted file mode 100644 index 6312e9401..000000000 --- a/src/composables/guards.js +++ /dev/null @@ -1,68 +0,0 @@ -import { getCurrentInstance, onUnmounted } from 'vue' -import { throwNoCurrentInstance } from './utils' -import { useRouter } from './globals' - -export function onBeforeRouteUpdate (guard) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('onBeforeRouteUpdate') - } - - return useFilteredGuard(guard, isUpdateNavigation) -} -function isUpdateNavigation (to, from, depth) { - const toMatched = to.matched - const fromMatched = from.matched - return ( - toMatched.length >= depth && - toMatched - .slice(0, depth + 1) - .every((record, i) => record === fromMatched[i]) - ) -} - -function isLeaveNavigation (to, from, depth) { - const toMatched = to.matched - const fromMatched = from.matched - return toMatched.length < depth || toMatched[depth] !== fromMatched[depth] -} - -export function onBeforeRouteLeave (guard) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('onBeforeRouteLeave') - } - - return useFilteredGuard(guard, isLeaveNavigation) -} - -const noop = () => {} -function useFilteredGuard (guard, fn) { - const instance = getCurrentInstance() - const router = useRouter() - - let target = instance.proxy - // find the nearest RouterView to know the depth - while ( - target && - target.$vnode && - target.$vnode.data && - target.$vnode.data.routerViewDepth == null - ) { - target = target.$parent - } - - const depth = - target && target.$vnode && target.$vnode.data - ? target.$vnode.data.routerViewDepth - : null - - if (depth != null) { - const removeGuard = router.beforeEach((to, from, next) => { - return fn(to, from, depth) ? guard(to, from, next) : next() - }) - - onUnmounted(removeGuard) - return removeGuard - } - - return noop -} diff --git a/src/composables/index.js b/src/composables/index.js deleted file mode 100644 index d1cefa8cf..000000000 --- a/src/composables/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export * from './guards' -export * from './globals' -export * from './useLink' diff --git a/src/composables/useLink.js b/src/composables/useLink.js deleted file mode 100644 index 237fd3355..000000000 --- a/src/composables/useLink.js +++ /dev/null @@ -1,113 +0,0 @@ -import { computed, unref } from 'vue' -import { guardEvent } from '../components/link' -import { throwNoCurrentInstance } from './utils' -import { useRouter, useRoute } from './globals' - -function includesParams (outer, inner) { - for (const key in inner) { - const innerValue = inner[key] - const outerValue = outer[key] - if (typeof innerValue === 'string') { - if (innerValue !== outerValue) return false - } else { - if ( - !Array.isArray(outerValue) || - outerValue.length !== innerValue.length || - innerValue.some((value, i) => value !== outerValue[i]) - ) { - return false - } - } - } - - return true -} - -// helpers from vue router 4 - -function isSameRouteLocationParamsValue (a, b) { - return Array.isArray(a) - ? isEquivalentArray(a, b) - : Array.isArray(b) - ? isEquivalentArray(b, a) - : a === b -} - -function isEquivalentArray (a, b) { - return Array.isArray(b) - ? a.length === b.length && a.every((value, i) => value === b[i]) - : a.length === 1 && a[0] === b -} - -export function isSameRouteLocationParams (a, b) { - if (Object.keys(a).length !== Object.keys(b).length) return false - - for (const key in a) { - if (!isSameRouteLocationParamsValue(a[key], b[key])) return false - } - - return true -} - -export function useLink (props) { - if (process.env.NODE_ENV !== 'production') { - throwNoCurrentInstance('useLink') - } - - const router = useRouter() - const currentRoute = useRoute() - - const resolvedRoute = computed(() => router.resolve(unref(props.to), currentRoute)) - - const activeRecordIndex = computed(() => { - const route = resolvedRoute.value.route - const { matched } = route - const { length } = matched - const routeMatched = matched[length - 1] - const currentMatched = currentRoute.matched - if (!routeMatched || !currentMatched.length) return -1 - const index = currentMatched.indexOf(routeMatched) - if (index > -1) return index - // possible parent record - const parentRecord = currentMatched[currentMatched.length - 2] - - return ( - // we are dealing with nested routes - length > 1 && - // if the parent and matched route have the same path, this link is - // referring to the empty child. Or we currently are on a different - // child of the same parent - parentRecord && parentRecord === routeMatched.parent - ) - }) - - const isActive = computed( - () => - activeRecordIndex.value > -1 && - includesParams(currentRoute.params, resolvedRoute.value.route.params) - ) - const isExactActive = computed( - () => - activeRecordIndex.value > -1 && - activeRecordIndex.value === currentRoute.matched.length - 1 && - isSameRouteLocationParams(currentRoute.params, resolvedRoute.value.route.params) - ) - - const navigate = e => { - const href = resolvedRoute.value.route - if (guardEvent(e)) { - return props.replace - ? router.replace(href) - : router.push(href) - } - return Promise.resolve() - } - - return { - href: computed(() => resolvedRoute.value.href), - route: computed(() => resolvedRoute.value.route), - isExactActive, - isActive, - navigate - } -} diff --git a/src/composables/utils.js b/src/composables/utils.js deleted file mode 100644 index 969d0f7c0..000000000 --- a/src/composables/utils.js +++ /dev/null @@ -1,11 +0,0 @@ -import { getCurrentInstance } from 'vue' - -// dev only warn if no current instance - -export function throwNoCurrentInstance (method) { - if (!getCurrentInstance()) { - throw new Error( - `[vue-router]: Missing current instance. ${method}() must be called inside <script setup> or setup().` - ) - } -} diff --git a/src/create-matcher.js b/src/create-matcher.js deleted file mode 100644 index f7d72b93e..000000000 --- a/src/create-matcher.js +++ /dev/null @@ -1,226 +0,0 @@ -/* @flow */ - -import type VueRouter from './index' -import { resolvePath } from './util/path' -import { assert, warn } from './util/warn' -import { createRoute } from './util/route' -import { fillParams } from './util/params' -import { createRouteMap } from './create-route-map' -import { normalizeLocation } from './util/location' -import { decode } from './util/query' - -export type Matcher = { - match: (raw: RawLocation, current?: Route, redirectedFrom?: Location) => Route; - addRoutes: (routes: Array<RouteConfig>) => void; - addRoute: (parentNameOrRoute: string | RouteConfig, route?: RouteConfig) => void; - getRoutes: () => Array<RouteRecord>; -}; - -export function createMatcher ( - routes: Array<RouteConfig>, - router: VueRouter -): Matcher { - const { pathList, pathMap, nameMap } = createRouteMap(routes) - - function addRoutes (routes) { - createRouteMap(routes, pathList, pathMap, nameMap) - } - - function addRoute (parentOrRoute, route) { - const parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined - // $flow-disable-line - createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent) - - // add aliases of parent - if (parent && parent.alias.length) { - createRouteMap( - // $flow-disable-line route is defined if parent is - parent.alias.map(alias => ({ path: alias, children: [route] })), - pathList, - pathMap, - nameMap, - parent - ) - } - } - - function getRoutes () { - return pathList.map(path => pathMap[path]) - } - - function match ( - raw: RawLocation, - currentRoute?: Route, - redirectedFrom?: Location - ): Route { - const location = normalizeLocation(raw, currentRoute, false, router) - const { name } = location - - if (name) { - const record = nameMap[name] - if (process.env.NODE_ENV !== 'production') { - warn(record, `Route with name '${name}' does not exist`) - } - if (!record) return _createRoute(null, location) - const paramNames = record.regex.keys - .filter(key => !key.optional) - .map(key => key.name) - - if (typeof location.params !== 'object') { - location.params = {} - } - - if (currentRoute && typeof currentRoute.params === 'object') { - for (const key in currentRoute.params) { - if (!(key in location.params) && paramNames.indexOf(key) > -1) { - location.params[key] = currentRoute.params[key] - } - } - } - - location.path = fillParams(record.path, location.params, `named route "${name}"`) - return _createRoute(record, location, redirectedFrom) - } else if (location.path) { - location.params = {} - for (let i = 0; i < pathList.length; i++) { - const path = pathList[i] - const record = pathMap[path] - if (matchRoute(record.regex, location.path, location.params)) { - return _createRoute(record, location, redirectedFrom) - } - } - } - // no match - return _createRoute(null, location) - } - - function redirect ( - record: RouteRecord, - location: Location - ): Route { - const originalRedirect = record.redirect - let redirect = typeof originalRedirect === 'function' - ? originalRedirect(createRoute(record, location, null, router)) - : originalRedirect - - if (typeof redirect === 'string') { - redirect = { path: redirect } - } - - if (!redirect || typeof redirect !== 'object') { - if (process.env.NODE_ENV !== 'production') { - warn( - false, `invalid redirect option: ${JSON.stringify(redirect)}` - ) - } - return _createRoute(null, location) - } - - const re: Object = redirect - const { name, path } = re - let { query, hash, params } = location - query = re.hasOwnProperty('query') ? re.query : query - hash = re.hasOwnProperty('hash') ? re.hash : hash - params = re.hasOwnProperty('params') ? re.params : params - - if (name) { - // resolved named direct - const targetRecord = nameMap[name] - if (process.env.NODE_ENV !== 'production') { - assert(targetRecord, `redirect failed: named route "${name}" not found.`) - } - return match({ - _normalized: true, - name, - query, - hash, - params - }, undefined, location) - } else if (path) { - // 1. resolve relative redirect - const rawPath = resolveRecordPath(path, record) - // 2. resolve params - const resolvedPath = fillParams(rawPath, params, `redirect route with path "${rawPath}"`) - // 3. rematch with existing query and hash - return match({ - _normalized: true, - path: resolvedPath, - query, - hash - }, undefined, location) - } else { - if (process.env.NODE_ENV !== 'production') { - warn(false, `invalid redirect option: ${JSON.stringify(redirect)}`) - } - return _createRoute(null, location) - } - } - - function alias ( - record: RouteRecord, - location: Location, - matchAs: string - ): Route { - const aliasedPath = fillParams(matchAs, location.params, `aliased route with path "${matchAs}"`) - const aliasedMatch = match({ - _normalized: true, - path: aliasedPath - }) - if (aliasedMatch) { - const matched = aliasedMatch.matched - const aliasedRecord = matched[matched.length - 1] - location.params = aliasedMatch.params - return _createRoute(aliasedRecord, location) - } - return _createRoute(null, location) - } - - function _createRoute ( - record: ?RouteRecord, - location: Location, - redirectedFrom?: Location - ): Route { - if (record && record.redirect) { - return redirect(record, redirectedFrom || location) - } - if (record && record.matchAs) { - return alias(record, location, record.matchAs) - } - return createRoute(record, location, redirectedFrom, router) - } - - return { - match, - addRoute, - getRoutes, - addRoutes - } -} - -function matchRoute ( - regex: RouteRegExp, - path: string, - params: Object -): boolean { - const m = path.match(regex) - - if (!m) { - return false - } else if (!params) { - return true - } - - for (let i = 1, len = m.length; i < len; ++i) { - const key = regex.keys[i - 1] - if (key) { - // Fix #1994: using * with props: true generates a param named 0 - params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i] - } - } - - return true -} - -function resolveRecordPath (path: string, record: RouteRecord): string { - return resolvePath(path, record.parent ? record.parent.path : '/', true) -} diff --git a/src/create-route-map.js b/src/create-route-map.js deleted file mode 100644 index 411013d19..000000000 --- a/src/create-route-map.js +++ /dev/null @@ -1,220 +0,0 @@ -/* @flow */ - -import Regexp from 'path-to-regexp' -import { cleanPath } from './util/path' -import { assert, warn } from './util/warn' - -export function createRouteMap ( - routes: Array<RouteConfig>, - oldPathList?: Array<string>, - oldPathMap?: Dictionary<RouteRecord>, - oldNameMap?: Dictionary<RouteRecord>, - parentRoute?: RouteRecord -): { - pathList: Array<string>, - pathMap: Dictionary<RouteRecord>, - nameMap: Dictionary<RouteRecord> -} { - // the path list is used to control path matching priority - const pathList: Array<string> = oldPathList || [] - // $flow-disable-line - const pathMap: Dictionary<RouteRecord> = oldPathMap || Object.create(null) - // $flow-disable-line - const nameMap: Dictionary<RouteRecord> = oldNameMap || Object.create(null) - - routes.forEach(route => { - addRouteRecord(pathList, pathMap, nameMap, route, parentRoute) - }) - - // ensure wildcard routes are always at the end - for (let i = 0, l = pathList.length; i < l; i++) { - if (pathList[i] === '*') { - pathList.push(pathList.splice(i, 1)[0]) - l-- - i-- - } - } - - if (process.env.NODE_ENV === 'development') { - // warn if routes do not include leading slashes - const found = pathList - // check for missing leading slash - .filter(path => path && path.charAt(0) !== '*' && path.charAt(0) !== '/') - - if (found.length > 0) { - const pathNames = found.map(path => `- ${path}`).join('\n') - warn(false, `Non-nested routes must include a leading slash character. Fix the following routes: \n${pathNames}`) - } - } - - return { - pathList, - pathMap, - nameMap - } -} - -function addRouteRecord ( - pathList: Array<string>, - pathMap: Dictionary<RouteRecord>, - nameMap: Dictionary<RouteRecord>, - route: RouteConfig, - parent?: RouteRecord, - matchAs?: string -) { - const { path, name } = route - if (process.env.NODE_ENV !== 'production') { - assert(path != null, `"path" is required in a route configuration.`) - assert( - typeof route.component !== 'string', - `route config "component" for path: ${String( - path || name - )} cannot be a ` + `string id. Use an actual component instead.` - ) - - warn( - // eslint-disable-next-line no-control-regex - !/[^\u0000-\u007F]+/.test(path), - `Route with path "${path}" contains unencoded characters, make sure ` + - `your path is correctly encoded before passing it to the router. Use ` + - `encodeURI to encode static segments of your path.` - ) - } - - const pathToRegexpOptions: PathToRegexpOptions = - route.pathToRegexpOptions || {} - const normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict) - - if (typeof route.caseSensitive === 'boolean') { - pathToRegexpOptions.sensitive = route.caseSensitive - } - - const record: RouteRecord = { - path: normalizedPath, - regex: compileRouteRegex(normalizedPath, pathToRegexpOptions), - components: route.components || { default: route.component }, - alias: route.alias - ? typeof route.alias === 'string' - ? [route.alias] - : route.alias - : [], - instances: {}, - enteredCbs: {}, - name, - parent, - matchAs, - redirect: route.redirect, - beforeEnter: route.beforeEnter, - meta: route.meta || {}, - props: - route.props == null - ? {} - : route.components - ? route.props - : { default: route.props } - } - - if (route.children) { - // Warn if route is named, does not redirect and has a default child route. - // If users navigate to this route by name, the default child will - // not be rendered (GH Issue #629) - if (process.env.NODE_ENV !== 'production') { - if ( - route.name && - !route.redirect && - route.children.some(child => /^\/?$/.test(child.path)) - ) { - warn( - false, - `Named Route '${route.name}' has a default child route. ` + - `When navigating to this named route (:to="{name: '${ - route.name - }'}"), ` + - `the default child route will not be rendered. Remove the name from ` + - `this route and use the name of the default child route for named ` + - `links instead.` - ) - } - } - route.children.forEach(child => { - const childMatchAs = matchAs - ? cleanPath(`${matchAs}/${child.path}`) - : undefined - addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs) - }) - } - - if (!pathMap[record.path]) { - pathList.push(record.path) - pathMap[record.path] = record - } - - if (route.alias !== undefined) { - const aliases = Array.isArray(route.alias) ? route.alias : [route.alias] - for (let i = 0; i < aliases.length; ++i) { - const alias = aliases[i] - if (process.env.NODE_ENV !== 'production' && alias === path) { - warn( - false, - `Found an alias with the same value as the path: "${path}". You have to remove that alias. It will be ignored in development.` - ) - // skip in dev to make it work - continue - } - - const aliasRoute = { - path: alias, - children: route.children - } - addRouteRecord( - pathList, - pathMap, - nameMap, - aliasRoute, - parent, - record.path || '/' // matchAs - ) - } - } - - if (name) { - if (!nameMap[name]) { - nameMap[name] = record - } else if (process.env.NODE_ENV !== 'production' && !matchAs) { - warn( - false, - `Duplicate named routes definition: ` + - `{ name: "${name}", path: "${record.path}" }` - ) - } - } -} - -function compileRouteRegex ( - path: string, - pathToRegexpOptions: PathToRegexpOptions -): RouteRegExp { - const regex = Regexp(path, [], pathToRegexpOptions) - if (process.env.NODE_ENV !== 'production') { - const keys: any = Object.create(null) - regex.keys.forEach(key => { - warn( - !keys[key.name], - `Duplicate param keys in route with path: "${path}"` - ) - keys[key.name] = true - }) - } - return regex -} - -function normalizePath ( - path: string, - parent?: RouteRecord, - strict?: boolean -): string { - if (!strict) path = path.replace(/\/$/, '') - if (path[0] === '/') return path - if (parent == null) return path - return cleanPath(`${parent.path}/${path}`) -} diff --git a/src/directives/link.js b/src/directives/link.js new file mode 100644 index 000000000..5559484b5 --- /dev/null +++ b/src/directives/link.js @@ -0,0 +1,229 @@ +import { warn } from '../util' +const trailingSlashRE = /\/$/ +const regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g +const queryStringRE = /\?.*$/ + +// install v-link, which provides navigation support for +// HTML5 history mode +export default function (Vue) { + + const { + bind, + isObject, + addClass, + removeClass + } = Vue.util + + const onPriority = Vue.directive('on').priority + const LINK_UPDATE = '__vue-router-link-update__' + + let activeId = 0 + + Vue.directive('link-active', { + priority: 9999, + bind () { + const id = String(activeId++) + // collect v-links contained within this element. + // we need do this here before the parent-child relationship + // gets messed up by terminal directives (if, for, components) + const childLinks = this.el.querySelectorAll('[v-link]') + for (var i = 0, l = childLinks.length; i < l; i++) { + let link = childLinks[i] + let existingId = link.getAttribute(LINK_UPDATE) + let value = existingId ? (existingId + ',' + id) : id + // leave a mark on the link element which can be persisted + // through fragment clones. + link.setAttribute(LINK_UPDATE, value) + } + this.vm.$on(LINK_UPDATE, this.cb = (link, path) => { + if (link.activeIds.indexOf(id) > -1) { + link.updateClasses(path, this.el) + } + }) + }, + unbind () { + this.vm.$off(LINK_UPDATE, this.cb) + } + }) + + Vue.directive('link', { + priority: onPriority - 2, + + bind () { + const vm = this.vm + /* istanbul ignore if */ + if (!vm.$route) { + warn('v-link can only be used inside a router-enabled app.') + return + } + this.router = vm.$route.router + // update things when the route changes + this.unwatch = vm.$watch('$route', bind(this.onRouteUpdate, this)) + // check v-link-active ids + const activeIds = this.el.getAttribute(LINK_UPDATE) + if (activeIds) { + this.el.removeAttribute(LINK_UPDATE) + this.activeIds = activeIds.split(',') + } + // no need to handle click if link expects to be opened + // in a new window/tab. + /* istanbul ignore if */ + if (this.el.tagName === 'A' && + this.el.getAttribute('target') === '_blank') { + return + } + // handle click + this.handler = bind(this.onClick, this) + this.el.addEventListener('click', this.handler) + }, + + update (target) { + this.target = target + if (isObject(target)) { + this.append = target.append + this.exact = target.exact + this.prevActiveClass = this.activeClass + this.activeClass = target.activeClass + } + this.onRouteUpdate(this.vm.$route) + }, + + onClick (e) { + // don't redirect with control keys + /* istanbul ignore if */ + if (e.metaKey || e.ctrlKey || e.shiftKey) return + // don't redirect when preventDefault called + /* istanbul ignore if */ + if (e.defaultPrevented) return + // don't redirect on right click + /* istanbul ignore if */ + if (e.button !== 0) return + + const target = this.target + if (target) { + // v-link with expression, just go + e.preventDefault() + this.router.go(target) + } else { + // no expression, delegate for an <a> inside + var el = e.target + while (el.tagName !== 'A' && el !== this.el) { + el = el.parentNode + } + if (el.tagName === 'A' && sameOrigin(el)) { + e.preventDefault() + var path = el.pathname + if (this.router.history.root) { + path = path.replace(this.router.history.rootRE, '') + } + this.router.go({ + path: path, + replace: target && target.replace, + append: target && target.append + }) + } + } + }, + + onRouteUpdate (route) { + // router.stringifyPath is dependent on current route + // and needs to be called again whenver route changes. + var newPath = this.router.stringifyPath(this.target) + if (this.path !== newPath) { + this.path = newPath + this.updateActiveMatch() + this.updateHref() + } + if (this.activeIds) { + this.vm.$emit(LINK_UPDATE, this, route.path) + } else { + this.updateClasses(route.path, this.el) + } + }, + + updateActiveMatch () { + this.activeRE = this.path && !this.exact + ? new RegExp( + '^' + + this.path + .replace(/\/$/, '') + .replace(queryStringRE, '') + .replace(regexEscapeRE, '\\$&') + + '(\\/|$)' + ) + : null + }, + + updateHref () { + if (this.el.tagName !== 'A') { + return + } + const path = this.path + const router = this.router + const isAbsolute = path.charAt(0) === '/' + // do not format non-hash relative paths + const href = path && (router.mode === 'hash' || isAbsolute) + ? router.history.formatPath(path, this.append) + : path + if (href) { + this.el.href = href + } else { + this.el.removeAttribute('href') + } + }, + + updateClasses (path, el) { + const activeClass = this.activeClass || this.router._linkActiveClass + // clear old class + if (this.prevActiveClass && this.prevActiveClass !== activeClass) { + toggleClasses(el, this.prevActiveClass, removeClass) + } + // remove query string before matching + const dest = this.path.replace(queryStringRE, '') + path = path.replace(queryStringRE, '') + // add new class + if (this.exact) { + if (dest === path || ( + // also allow additional trailing slash + dest.charAt(dest.length - 1) !== '/' && + dest === path.replace(trailingSlashRE, '') + )) { + toggleClasses(el, activeClass, addClass) + } else { + toggleClasses(el, activeClass, removeClass) + } + } else { + if (this.activeRE && this.activeRE.test(path)) { + toggleClasses(el, activeClass, addClass) + } else { + toggleClasses(el, activeClass, removeClass) + } + } + }, + + unbind () { + this.el.removeEventListener('click', this.handler) + this.unwatch && this.unwatch() + } + }) + + function sameOrigin (link) { + return link.protocol === location.protocol && + link.hostname === location.hostname && + link.port === location.port + } + + // this function is copied from v-bind:class implementation until + // we properly expose it... + function toggleClasses (el, key, fn) { + key = key.trim() + if (key.indexOf(' ') === -1) { + fn(el, key) + return + } + var keys = key.split(/\s+/) + for (var i = 0, l = keys.length; i < l; i++) { + fn(el, keys[i]) + } + } +} diff --git a/src/directives/view.js b/src/directives/view.js new file mode 100644 index 000000000..b1958a7d3 --- /dev/null +++ b/src/directives/view.js @@ -0,0 +1,82 @@ +import { warn } from '../util' +import { activate } from '../pipeline' + +export default function (Vue) { + + const _ = Vue.util + const componentDef = + // 0.12 + Vue.directive('_component') || + // 1.0 + Vue.internalDirectives.component + // <router-view> extends the internal component directive + const viewDef = _.extend({}, componentDef) + + // with some overrides + _.extend(viewDef, { + + _isRouterView: true, + + bind () { + const route = this.vm.$route + /* istanbul ignore if */ + if (!route) { + warn( + '<router-view> can only be used inside a ' + + 'router-enabled app.' + ) + return + } + // force dynamic directive so v-component doesn't + // attempt to build right now + this._isDynamicLiteral = true + // finally, init by delegating to v-component + componentDef.bind.call(this) + + // locate the parent view + let parentView + let parent = this.vm + while (parent) { + if (parent._routerView) { + parentView = parent._routerView + break + } + parent = parent.$parent + } + if (parentView) { + // register self as a child of the parent view, + // instead of activating now. This is so that the + // child's activate hook is called after the + // parent's has resolved. + this.parentView = parentView + parentView.childView = this + } else { + // this is the root view! + const router = route.router + router._rootView = this + } + + // handle late-rendered view + // two possibilities: + // 1. root view rendered after transition has been + // validated; + // 2. child view rendered after parent view has been + // activated. + var transition = route.router._currentTransition + if ((!parentView && transition.done) || + (parentView && parentView.activated)) { + var depth = parentView ? parentView.depth + 1 : 0 + activate(this, transition, depth) + } + }, + + unbind () { + if (this.parentView) { + this.parentView.childView = null + } + componentDef.unbind.call(this) + } + }) + + Vue.elementDirective('router-view', viewDef) +} diff --git a/src/entries/cjs.js b/src/entries/cjs.js deleted file mode 100644 index 4e815ba54..000000000 --- a/src/entries/cjs.js +++ /dev/null @@ -1,3 +0,0 @@ -import VueRouter from '../router' - -export default VueRouter diff --git a/src/entries/esm.js b/src/entries/esm.js deleted file mode 100644 index 4bdac48a6..000000000 --- a/src/entries/esm.js +++ /dev/null @@ -1,12 +0,0 @@ -import VueRouter from '../router' - -export const version = '__VERSION__' -export { isNavigationFailure, NavigationFailureType } from '../util/errors' -export { START as START_LOCATION } from '../util/route' -export { default as RouterLink } from '../components/link' -export { default as RouterView } from '../components/view' - -// we can't add the other composables here because people could still be using an older version of vue and that would -// create a compilation error trying to import from vue - -export default VueRouter diff --git a/src/history/abstract.js b/src/history/abstract.js index c7d80708f..b8ed0a9cd 100644 --- a/src/history/abstract.js +++ b/src/history/abstract.js @@ -1,72 +1,28 @@ -/* @flow */ +import { resolvePath } from '../util' -import type Router from '../index' -import { History } from './base' -import { NavigationFailureType, isNavigationFailure } from '../util/errors' +export default class AbstractHistory { -export class AbstractHistory extends History { - index: number - stack: Array<Route> - - constructor (router: Router, base: ?string) { - super(router, base) - this.stack = [] - this.index = -1 - } - - push (location: RawLocation, onComplete?: Function, onAbort?: Function) { - this.transitionTo( - location, - route => { - this.stack = this.stack.slice(0, this.index + 1).concat(route) - this.index++ - onComplete && onComplete(route) - }, - onAbort - ) + constructor ({ onChange }) { + this.onChange = onChange + this.currentPath = '/' } - replace (location: RawLocation, onComplete?: Function, onAbort?: Function) { - this.transitionTo( - location, - route => { - this.stack = this.stack.slice(0, this.index).concat(route) - onComplete && onComplete(route) - }, - onAbort - ) + start () { + this.onChange('/') } - go (n: number) { - const targetIndex = this.index + n - if (targetIndex < 0 || targetIndex >= this.stack.length) { - return - } - const route = this.stack[targetIndex] - this.confirmTransition( - route, - () => { - const prev = this.current - this.index = targetIndex - this.updateRoute(route) - this.router.afterHooks.forEach(hook => { - hook && hook(route, prev) - }) - }, - err => { - if (isNavigationFailure(err, NavigationFailureType.duplicated)) { - this.index = targetIndex - } - } - ) + stop () { + // noop } - getCurrentLocation () { - const current = this.stack[this.stack.length - 1] - return current ? current.fullPath : '/' + go (path, replace, append) { + path = this.currentPath = this.formatPath(path, append) + this.onChange(path) } - ensureURL () { - // noop + formatPath (path, append) { + return path.charAt(0) === '/' + ? path + : resolvePath(this.currentPath, path, append) } } diff --git a/src/history/base.js b/src/history/base.js deleted file mode 100644 index 4751cd97a..000000000 --- a/src/history/base.js +++ /dev/null @@ -1,384 +0,0 @@ -/* @flow */ - -import { _Vue } from '../install' -import type Router from '../index' -import { inBrowser } from '../util/dom' -import { runQueue } from '../util/async' -import { warn } from '../util/warn' -import { START, isSameRoute, handleRouteEntered } from '../util/route' -import { - flatten, - flatMapComponents, - resolveAsyncComponents -} from '../util/resolve-components' -import { - createNavigationDuplicatedError, - createNavigationCancelledError, - createNavigationRedirectedError, - createNavigationAbortedError, - isError, - isNavigationFailure, - NavigationFailureType -} from '../util/errors' -import { handleScroll } from '../util/scroll' - -export class History { - router: Router - base: string - current: Route - pending: ?Route - cb: (r: Route) => void - ready: boolean - readyCbs: Array<Function> - readyErrorCbs: Array<Function> - errorCbs: Array<Function> - listeners: Array<Function> - cleanupListeners: Function - - // implemented by sub-classes - +go: (n: number) => void - +push: (loc: RawLocation, onComplete?: Function, onAbort?: Function) => void - +replace: ( - loc: RawLocation, - onComplete?: Function, - onAbort?: Function - ) => void - +ensureURL: (push?: boolean) => void - +getCurrentLocation: () => string - +setupListeners: Function - - constructor (router: Router, base: ?string) { - this.router = router - this.base = normalizeBase(base) - // start with a route object that stands for "nowhere" - this.current = START - this.pending = null - this.ready = false - this.readyCbs = [] - this.readyErrorCbs = [] - this.errorCbs = [] - this.listeners = [] - } - - listen (cb: Function) { - this.cb = cb - } - - onReady (cb: Function, errorCb: ?Function) { - if (this.ready) { - cb() - } else { - this.readyCbs.push(cb) - if (errorCb) { - this.readyErrorCbs.push(errorCb) - } - } - } - - onError (errorCb: Function) { - this.errorCbs.push(errorCb) - } - - transitionTo ( - location: RawLocation, - onComplete?: Function, - onAbort?: Function - ) { - let route - // catch redirect option https://github.com/vuejs/vue-router/issues/3201 - try { - route = this.router.match(location, this.current) - } catch (e) { - this.errorCbs.forEach(cb => { - cb(e) - }) - // Exception should still be thrown - throw e - } - const prev = this.current - this.confirmTransition( - route, - () => { - this.updateRoute(route) - onComplete && onComplete(route) - this.ensureURL() - this.router.afterHooks.forEach(hook => { - hook && hook(route, prev) - }) - - // fire ready cbs once - if (!this.ready) { - this.ready = true - this.readyCbs.forEach(cb => { - cb(route) - }) - } - }, - err => { - if (onAbort) { - onAbort(err) - } - if (err && !this.ready) { - // Initial redirection should not mark the history as ready yet - // because it's triggered by the redirection instead - // https://github.com/vuejs/vue-router/issues/3225 - // https://github.com/vuejs/vue-router/issues/3331 - if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) { - this.ready = true - this.readyErrorCbs.forEach(cb => { - cb(err) - }) - } - } - } - ) - } - - confirmTransition (route: Route, onComplete: Function, onAbort?: Function) { - const current = this.current - this.pending = route - const abort = err => { - // changed after adding errors with - // https://github.com/vuejs/vue-router/pull/3047 before that change, - // redirect and aborted navigation would produce an err == null - if (!isNavigationFailure(err) && isError(err)) { - if (this.errorCbs.length) { - this.errorCbs.forEach(cb => { - cb(err) - }) - } else { - if (process.env.NODE_ENV !== 'production') { - warn(false, 'uncaught error during route navigation:') - } - console.error(err) - } - } - onAbort && onAbort(err) - } - const lastRouteIndex = route.matched.length - 1 - const lastCurrentIndex = current.matched.length - 1 - if ( - isSameRoute(route, current) && - // in the case the route map has been dynamically appended to - lastRouteIndex === lastCurrentIndex && - route.matched[lastRouteIndex] === current.matched[lastCurrentIndex] - ) { - this.ensureURL() - if (route.hash) { - handleScroll(this.router, current, route, false) - } - return abort(createNavigationDuplicatedError(current, route)) - } - - const { updated, deactivated, activated } = resolveQueue( - this.current.matched, - route.matched - ) - - const queue: Array<?NavigationGuard> = [].concat( - // in-component leave guards - extractLeaveGuards(deactivated), - // global before hooks - this.router.beforeHooks, - // in-component update hooks - extractUpdateHooks(updated), - // in-config enter guards - activated.map(m => m.beforeEnter), - // async components - resolveAsyncComponents(activated) - ) - - const iterator = (hook: NavigationGuard, next) => { - if (this.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - try { - hook(route, current, (to: any) => { - if (to === false) { - // next(false) -> abort navigation, ensure current URL - this.ensureURL(true) - abort(createNavigationAbortedError(current, route)) - } else if (isError(to)) { - this.ensureURL(true) - abort(to) - } else if ( - typeof to === 'string' || - (typeof to === 'object' && - (typeof to.path === 'string' || typeof to.name === 'string')) - ) { - // next('/') or next({ path: '/' }) -> redirect - abort(createNavigationRedirectedError(current, route)) - if (typeof to === 'object' && to.replace) { - this.replace(to) - } else { - this.push(to) - } - } else { - // confirm transition and pass on the value - next(to) - } - }) - } catch (e) { - abort(e) - } - } - - runQueue(queue, iterator, () => { - // wait until async components are resolved before - // extracting in-component enter guards - const enterGuards = extractEnterGuards(activated) - const queue = enterGuards.concat(this.router.resolveHooks) - runQueue(queue, iterator, () => { - if (this.pending !== route) { - return abort(createNavigationCancelledError(current, route)) - } - this.pending = null - onComplete(route) - if (this.router.app) { - this.router.app.$nextTick(() => { - handleRouteEntered(route) - }) - } - }) - }) - } - - updateRoute (route: Route) { - this.current = route - this.cb && this.cb(route) - } - - setupListeners () { - // Default implementation is empty - } - - teardown () { - // clean up event listeners - // https://github.com/vuejs/vue-router/issues/2341 - this.listeners.forEach(cleanupListener => { - cleanupListener() - }) - this.listeners = [] - - // reset current history route - // https://github.com/vuejs/vue-router/issues/3294 - this.current = START - this.pending = null - } -} - -function normalizeBase (base: ?string): string { - if (!base) { - if (inBrowser) { - // respect <base> tag - const baseEl = document.querySelector('base') - base = (baseEl && baseEl.getAttribute('href')) || '/' - // strip full URL origin - base = base.replace(/^https?:\/\/[^\/]+/, '') - } else { - base = '/' - } - } - // make sure there's the starting slash - if (base.charAt(0) !== '/') { - base = '/' + base - } - // remove trailing slash - return base.replace(/\/$/, '') -} - -function resolveQueue ( - current: Array<RouteRecord>, - next: Array<RouteRecord> -): { - updated: Array<RouteRecord>, - activated: Array<RouteRecord>, - deactivated: Array<RouteRecord> -} { - let i - const max = Math.max(current.length, next.length) - for (i = 0; i < max; i++) { - if (current[i] !== next[i]) { - break - } - } - return { - updated: next.slice(0, i), - activated: next.slice(i), - deactivated: current.slice(i) - } -} - -function extractGuards ( - records: Array<RouteRecord>, - name: string, - bind: Function, - reverse?: boolean -): Array<?Function> { - const guards = flatMapComponents(records, (def, instance, match, key) => { - const guard = extractGuard(def, name) - if (guard) { - return Array.isArray(guard) - ? guard.map(guard => bind(guard, instance, match, key)) - : bind(guard, instance, match, key) - } - }) - return flatten(reverse ? guards.reverse() : guards) -} - -function extractGuard ( - def: Object | Function, - key: string -): NavigationGuard | Array<NavigationGuard> { - if (typeof def !== 'function') { - // extend now so that global mixins are applied. - def = _Vue.extend(def) - } - return def.options[key] -} - -function extractLeaveGuards (deactivated: Array<RouteRecord>): Array<?Function> { - return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true) -} - -function extractUpdateHooks (updated: Array<RouteRecord>): Array<?Function> { - return extractGuards(updated, 'beforeRouteUpdate', bindGuard) -} - -function bindGuard (guard: NavigationGuard, instance: ?_Vue): ?NavigationGuard { - if (instance) { - return function boundRouteGuard () { - return guard.apply(instance, arguments) - } - } -} - -function extractEnterGuards ( - activated: Array<RouteRecord> -): Array<?Function> { - return extractGuards( - activated, - 'beforeRouteEnter', - (guard, _, match, key) => { - return bindEnterGuard(guard, match, key) - } - ) -} - -function bindEnterGuard ( - guard: NavigationGuard, - match: RouteRecord, - key: string -): NavigationGuard { - return function routeEnterGuard (to, from, next) { - return guard(to, from, cb => { - if (typeof cb === 'function') { - if (!match.enteredCbs[key]) { - match.enteredCbs[key] = [] - } - match.enteredCbs[key].push(cb) - } - next(cb) - }) - } -} diff --git a/src/history/hash.js b/src/history/hash.js index e0ddf2d7c..1debcdd1b 100644 --- a/src/history/hash.js +++ b/src/history/hash.js @@ -1,152 +1,60 @@ -/* @flow */ +import { resolvePath } from '../util' -import type Router from '../index' -import { History } from './base' -import { cleanPath } from '../util/path' -import { getLocation } from './html5' -import { setupScroll, handleScroll } from '../util/scroll' -import { pushState, replaceState, supportsPushState } from '../util/push-state' +export default class HashHistory { -export class HashHistory extends History { - constructor (router: Router, base: ?string, fallback: boolean) { - super(router, base) - // check history fallback deeplinking - if (fallback && checkFallback(this.base)) { - return - } - ensureSlash() + constructor ({ hashbang, onChange }) { + this.hashbang = hashbang + this.onChange = onChange } - // this is delayed until the app mounts - // to avoid the hashchange listener being fired too early - setupListeners () { - if (this.listeners.length > 0) { - return - } - - const router = this.router - const expectScroll = router.options.scrollBehavior - const supportsScroll = supportsPushState && expectScroll - - if (supportsScroll) { - this.listeners.push(setupScroll()) - } - - const handleRoutingEvent = () => { - const current = this.current - if (!ensureSlash()) { + start () { + const self = this + this.listener = function () { + const path = location.hash + let raw = path.replace(/^#!?/, '') + // always + if (raw.charAt(0) !== '/') { + raw = '/' + raw + } + const formattedPath = self.formatPath(raw) + if (formattedPath !== path) { + location.replace(formattedPath) return } - this.transitionTo(getHash(), route => { - if (supportsScroll) { - handleScroll(this.router, route, current, true) - } - if (!supportsPushState) { - replaceHash(route.fullPath) - } - }) + // determine query + // note it's possible to have queries in both the actual URL + // and the hash fragment itself. + const query = location.search && path.indexOf('?') > -1 + ? '&' + location.search.slice(1) + : location.search + self.onChange(path.replace(/^#!?/, '') + query) } - const eventType = supportsPushState ? 'popstate' : 'hashchange' - window.addEventListener( - eventType, - handleRoutingEvent - ) - this.listeners.push(() => { - window.removeEventListener(eventType, handleRoutingEvent) - }) + window.addEventListener('hashchange', this.listener) + this.listener() } - push (location: RawLocation, onComplete?: Function, onAbort?: Function) { - const { current: fromRoute } = this - this.transitionTo( - location, - route => { - pushHash(route.fullPath) - handleScroll(this.router, route, fromRoute, false) - onComplete && onComplete(route) - }, - onAbort - ) + stop () { + window.removeEventListener('hashchange', this.listener) } - replace (location: RawLocation, onComplete?: Function, onAbort?: Function) { - const { current: fromRoute } = this - this.transitionTo( - location, - route => { - replaceHash(route.fullPath) - handleScroll(this.router, route, fromRoute, false) - onComplete && onComplete(route) - }, - onAbort - ) - } - - go (n: number) { - window.history.go(n) - } - - ensureURL (push?: boolean) { - const current = this.current.fullPath - if (getHash() !== current) { - push ? pushHash(current) : replaceHash(current) + go (path, replace, append) { + path = this.formatPath(path, append) + if (replace) { + location.replace(path) + } else { + location.hash = path } } - getCurrentLocation () { - return getHash() - } -} - -function checkFallback (base) { - const location = getLocation(base) - if (!/^\/#/.test(location)) { - window.location.replace(cleanPath(base + '/#' + location)) - return true - } -} - -function ensureSlash (): boolean { - const path = getHash() - if (path.charAt(0) === '/') { - return true - } - replaceHash('/' + path) - return false -} - -export function getHash (): string { - // We can't use window.location.hash here because it's not - // consistent across browsers - Firefox will pre-decode it! - let href = window.location.href - const index = href.indexOf('#') - // empty path - if (index < 0) return '' - - href = href.slice(index + 1) - - return href -} - -function getUrl (path) { - const href = window.location.href - const i = href.indexOf('#') - const base = i >= 0 ? href.slice(0, i) : href - return `${base}#${path}` -} - -function pushHash (path) { - if (supportsPushState) { - pushState(getUrl(path)) - } else { - window.location.hash = path - } -} - -function replaceHash (path) { - if (supportsPushState) { - replaceState(getUrl(path)) - } else { - window.location.replace(getUrl(path)) + formatPath (path, append) { + const isAbsoloute = path.charAt(0) === '/' + const prefix = '#' + (this.hashbang ? '!' : '') + return isAbsoloute + ? prefix + path + : prefix + resolvePath( + location.hash.replace(/^#!?/, ''), + path, + append + ) } } diff --git a/src/history/html5.js b/src/history/html5.js index faaa02fcd..40fede9e8 100644 --- a/src/history/html5.js +++ b/src/history/html5.js @@ -1,100 +1,73 @@ -/* @flow */ +import { resolvePath } from '../util' +const hashRE = /#.*$/ -import type Router from '../index' -import { History } from './base' -import { cleanPath } from '../util/path' -import { START } from '../util/route' -import { setupScroll, handleScroll } from '../util/scroll' -import { pushState, replaceState, supportsPushState } from '../util/push-state' +export default class HTML5History { -export class HTML5History extends History { - _startLocation: string - - constructor (router: Router, base: ?string) { - super(router, base) - - this._startLocation = getLocation(this.base) - } - - setupListeners () { - if (this.listeners.length > 0) { - return - } - - const router = this.router - const expectScroll = router.options.scrollBehavior - const supportsScroll = supportsPushState && expectScroll - - if (supportsScroll) { - this.listeners.push(setupScroll()) - } - - const handleRoutingEvent = () => { - const current = this.current - - // Avoiding first `popstate` event dispatched in some browsers but first - // history route not updated since async guard at the same time. - const location = getLocation(this.base) - if (this.current === START && location === this._startLocation) { - return + constructor ({ root, onChange }) { + if (root && root !== '/') { + // make sure there's the starting slash + if (root.charAt(0) !== '/') { + root = '/' + root } - - this.transitionTo(location, route => { - if (supportsScroll) { - handleScroll(router, route, current, true) - } - }) + // remove trailing slash + this.root = root.replace(/\/$/, '') + this.rootRE = new RegExp('^\\' + this.root) + } else { + this.root = null } - window.addEventListener('popstate', handleRoutingEvent) - this.listeners.push(() => { - window.removeEventListener('popstate', handleRoutingEvent) - }) + this.onChange = onChange + // check base tag + const baseEl = document.querySelector('base') + this.base = baseEl && baseEl.getAttribute('href') } - go (n: number) { - window.history.go(n) - } - - push (location: RawLocation, onComplete?: Function, onAbort?: Function) { - const { current: fromRoute } = this - this.transitionTo(location, route => { - pushState(cleanPath(this.base + route.fullPath)) - handleScroll(this.router, route, fromRoute, false) - onComplete && onComplete(route) - }, onAbort) + start () { + this.listener = (e) => { + let url = location.pathname + location.search + if (this.root) { + url = url.replace(this.rootRE, '') || '/' + } + this.onChange(url, e && e.state, location.hash) + } + window.addEventListener('popstate', this.listener) + this.listener() } - replace (location: RawLocation, onComplete?: Function, onAbort?: Function) { - const { current: fromRoute } = this - this.transitionTo(location, route => { - replaceState(cleanPath(this.base + route.fullPath)) - handleScroll(this.router, route, fromRoute, false) - onComplete && onComplete(route) - }, onAbort) + stop () { + window.removeEventListener('popstate', this.listener) } - ensureURL (push?: boolean) { - if (getLocation(this.base) !== this.current.fullPath) { - const current = cleanPath(this.base + this.current.fullPath) - push ? pushState(current) : replaceState(current) + go (path, replace, append) { + const url = this.formatPath(path, append) + if (replace) { + history.replaceState({}, '', url) + } else { + // record scroll position by replacing current state + history.replaceState({ + pos: { + x: window.pageXOffset, + y: window.pageYOffset + } + }, '', location.href) + // then push new state + history.pushState({}, '', url) } + const hashMatch = path.match(hashRE) + const hash = hashMatch && hashMatch[0] + path = url + // strip hash so it doesn't mess up params + .replace(hashRE, '') + // remove root before matching + .replace(this.rootRE, '') + this.onChange(path, null, hash) } - getCurrentLocation (): string { - return getLocation(this.base) - } -} - -export function getLocation (base: string): string { - let path = window.location.pathname - const pathLowerCase = path.toLowerCase() - const baseLowerCase = base.toLowerCase() - // base="/a" shouldn't turn path="/app" into "/a/pp" - // https://github.com/vuejs/vue-router/issues/3555 - // so we ensure the trailing slash in the base - if (base && ((pathLowerCase === baseLowerCase) || - (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) { - path = path.slice(base.length) + formatPath (path, append) { + return path.charAt(0) === '/' + // absolute path + ? this.root + ? this.root + '/' + path.replace(/^\//, '') + : path + : resolvePath(this.base || location.pathname, path, append) } - return (path || '/') + window.location.search + window.location.hash } diff --git a/src/index.js b/src/index.js index deacaced6..47d113dea 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,653 @@ -import VueRouter from './entries/cjs' +import RouteRecognizer from '../lib/route-recognizer' +import util, { warn, mapParams } from './util' +import applyOverride from './override' +import Route from './route' +import Transition from './transition' +import View from './directives/view' +import Link from './directives/link' +import AbstractHistory from './history/abstract' +import HashHistory from './history/hash' +import HTML5History from './history/html5' -export default VueRouter +const historyBackends = { + abstract: AbstractHistory, + hash: HashHistory, + html5: HTML5History +} + +// late bind during install +let Vue + +/** + * Router constructor + * + * @param {Object} [options] + */ + +class Router { + + constructor ({ + hashbang = true, + abstract = false, + history = false, + saveScrollPosition = false, + transitionOnLoad = false, + suppressTransitionError = false, + root = null, + linkActiveClass = 'v-link-active' + } = {}) { + + /* istanbul ignore if */ + if (!Router.installed) { + throw new Error( + 'Please install the Router with Vue.use() before ' + + 'creating an instance.' + ) + } + + // Vue instances + this.app = null + this._children = [] + + // route recognizer + this._recognizer = new RouteRecognizer() + this._guardRecognizer = new RouteRecognizer() + + // state + this._started = false + this._startCb = null + this._currentRoute = {} + this._currentTransition = null + this._previousTransition = null + this._notFoundHandler = null + this._notFoundRedirect = null + this._beforeEachHooks = [] + this._afterEachHooks = [] + + // trigger transition on initial render? + this._rendered = false + this._transitionOnLoad = transitionOnLoad + + // history mode + this._root = root + this._abstract = abstract + this._hashbang = hashbang + + // check if HTML5 history is available + const hasPushState = + typeof window !== 'undefined' && + window.history && + window.history.pushState + this._history = history && hasPushState + this._historyFallback = history && !hasPushState + + // create history object + const inBrowser = Vue.util.inBrowser + this.mode = (!inBrowser || this._abstract) + ? 'abstract' + : this._history + ? 'html5' + : 'hash' + + const History = historyBackends[this.mode] + this.history = new History({ + root: root, + hashbang: this._hashbang, + onChange: (path, state, anchor) => { + this._match(path, state, anchor) + } + }) + + // other options + this._saveScrollPosition = saveScrollPosition + this._linkActiveClass = linkActiveClass + this._suppress = suppressTransitionError + } + + // API =================================================== + + /** + * Register a map of top-level paths. + * + * @param {Object} map + */ + + map (map) { + for (let route in map) { + this.on(route, map[route]) + } + return this + } + + /** + * Register a single root-level path + * + * @param {String} rootPath + * @param {Object} handler + * - {String} component + * - {Object} [subRoutes] + * - {Boolean} [forceRefresh] + * - {Function} [before] + * - {Function} [after] + */ + + on (rootPath, handler) { + if (rootPath === '*') { + this._notFound(handler) + } else { + this._addRoute(rootPath, handler, []) + } + return this + } + + /** + * Set redirects. + * + * @param {Object} map + */ + + redirect (map) { + for (let path in map) { + this._addRedirect(path, map[path]) + } + return this + } + + /** + * Set aliases. + * + * @param {Object} map + */ + + alias (map) { + for (let path in map) { + this._addAlias(path, map[path]) + } + return this + } + + /** + * Set global before hook. + * + * @param {Function} fn + */ + + beforeEach (fn) { + this._beforeEachHooks.push(fn) + return this + } + + /** + * Set global after hook. + * + * @param {Function} fn + */ + + afterEach (fn) { + this._afterEachHooks.push(fn) + return this + } + + /** + * Navigate to a given path. + * The path can be an object describing a named path in + * the format of { name: '...', params: {}, query: {}} + * The path is assumed to be already decoded, and will + * be resolved against root (if provided) + * + * @param {String|Object} path + * @param {Boolean} [replace] + */ + + go (path) { + let replace = false + let append = false + if (Vue.util.isObject(path)) { + replace = path.replace + append = path.append + } + path = this.stringifyPath(path) + if (path) { + this.history.go(path, replace, append) + } + } + + /** + * Short hand for replacing current path + * + * @param {String} path + */ + + replace (path) { + if (typeof path === 'string') { + path = { path } + } + path.replace = true + this.go(path) + } + + /** + * Start the router. + * + * @param {VueConstructor} App + * @param {String|Element} container + * @param {Function} [cb] + */ + + start (App, container, cb) { + /* istanbul ignore if */ + if (this._started) { + warn('already started.') + return + } + this._started = true + this._startCb = cb + if (!this.app) { + /* istanbul ignore if */ + if (!App || !container) { + throw new Error( + 'Must start vue-router with a component and a ' + + 'root container.' + ) + } + /* istanbul ignore if */ + if (App instanceof Vue) { + throw new Error( + 'Must start vue-router with a component, not a ' + + 'Vue instance.' + ) + } + this._appContainer = container + const Ctor = this._appConstructor = typeof App === 'function' + ? App + : Vue.extend(App) + // give it a name for better debugging + Ctor.options.name = Ctor.options.name || 'RouterApp' + } + + // handle history fallback in browsers that do not + // support HTML5 history API + if (this._historyFallback) { + const location = window.location + const history = new HTML5History({ root: this._root }) + const path = history.root + ? location.pathname.replace(history.rootRE, '') + : location.pathname + if (path && path !== '/') { + location.assign( + (history.root || '') + '/' + + this.history.formatPath(path) + + location.search + ) + return + } + } + + this.history.start() + } + + /** + * Stop listening to route changes. + */ + + stop () { + this.history.stop() + this._started = false + } + + /** + * Normalize named route object / string paths into + * a string. + * + * @param {Object|String|Number} path + * @return {String} + */ + + stringifyPath (path) { + let generatedPath = '' + if (path && typeof path === 'object') { + if (path.name) { + const extend = Vue.util.extend + const currentParams = + this._currentTransition && + this._currentTransition.to.params + const targetParams = path.params || {} + const params = currentParams + ? extend(extend({}, currentParams), targetParams) + : targetParams + generatedPath = encodeURI(this._recognizer.generate(path.name, params)) + } else if (path.path) { + generatedPath = encodeURI(path.path) + } + if (path.query) { + // note: the generated query string is pre-URL-encoded by the recognizer + const query = this._recognizer.generateQueryString(path.query) + if (generatedPath.indexOf('?') > -1) { + generatedPath += '&' + query.slice(1) + } else { + generatedPath += query + } + } + } else { + generatedPath = encodeURI(path ? path + '' : '') + } + return generatedPath + } + + // Internal methods ====================================== + + /** + * Add a route containing a list of segments to the internal + * route recognizer. Will be called recursively to add all + * possible sub-routes. + * + * @param {String} path + * @param {Object} handler + * @param {Array} segments + */ + + _addRoute (path, handler, segments) { + guardComponent(path, handler) + handler.path = path + handler.fullPath = (segments.reduce((path, segment) => { + return path + segment.path + }, '') + path).replace('//', '/') + segments.push({ + path: path, + handler: handler + }) + this._recognizer.add(segments, { + as: handler.name + }) + // add sub routes + if (handler.subRoutes) { + for (let subPath in handler.subRoutes) { + // recursively walk all sub routes + this._addRoute( + subPath, + handler.subRoutes[subPath], + // pass a copy in recursion to avoid mutating + // across branches + segments.slice() + ) + } + } + } + + /** + * Set the notFound route handler. + * + * @param {Object} handler + */ + + _notFound (handler) { + guardComponent('*', handler) + this._notFoundHandler = [{ handler: handler }] + } + + /** + * Add a redirect record. + * + * @param {String} path + * @param {String} redirectPath + */ + + _addRedirect (path, redirectPath) { + if (path === '*') { + this._notFoundRedirect = redirectPath + } else { + this._addGuard(path, redirectPath, this.replace) + } + } + + /** + * Add an alias record. + * + * @param {String} path + * @param {String} aliasPath + */ + + _addAlias (path, aliasPath) { + this._addGuard(path, aliasPath, this._match) + } + + /** + * Add a path guard. + * + * @param {String} path + * @param {String} mappedPath + * @param {Function} handler + */ + + _addGuard (path, mappedPath, handler) { + this._guardRecognizer.add([{ + path: path, + handler: (match, query) => { + const realPath = mapParams( + mappedPath, + match.params, + query + ) + handler.call(this, realPath) + } + }]) + } + + /** + * Check if a path matches any redirect records. + * + * @param {String} path + * @return {Boolean} - if true, will skip normal match. + */ + + _checkGuard (path) { + let matched = this._guardRecognizer.recognize(path, true) + if (matched) { + matched[0].handler(matched[0], matched.queryParams) + return true + } else if (this._notFoundRedirect) { + matched = this._recognizer.recognize(path) + if (!matched) { + this.replace(this._notFoundRedirect) + return true + } + } + } + + /** + * Match a URL path and set the route context on vm, + * triggering view updates. + * + * @param {String} path + * @param {Object} [state] + * @param {String} [anchor] + */ + + _match (path, state, anchor) { + if (this._checkGuard(path)) { + return + } + + const currentRoute = this._currentRoute + const currentTransition = this._currentTransition + + if (currentTransition) { + if (currentTransition.to.path === path) { + // do nothing if we have an active transition going to the same path + return + } else if (currentRoute.path === path) { + // We are going to the same path, but we also have an ongoing but + // not-yet-validated transition. Abort that transition and reset to + // prev transition. + currentTransition.aborted = true + this._currentTransition = this._prevTransition + return + } else { + // going to a totally different path. abort ongoing transition. + currentTransition.aborted = true + } + } + + // construct new route and transition context + const route = new Route(path, this) + const transition = new Transition(this, route, currentRoute) + + // current transition is updated right now. + // however, current route will only be updated after the transition has + // been validated. + this._prevTransition = currentTransition + this._currentTransition = transition + + if (!this.app) { + // initial render + const router = this + this.app = new this._appConstructor({ + el: this._appContainer, + created () { + this.$router = router + }, + _meta: { + $route: route + } + }) + } + + // check global before hook + const beforeHooks = this._beforeEachHooks + const startTransition = () => { + transition.start(() => { + this._postTransition(route, state, anchor) + }) + } + + if (beforeHooks.length) { + transition.runQueue(beforeHooks, (hook, _, next) => { + if (transition === this._currentTransition) { + transition.callHook(hook, null, next, { + expectBoolean: true + }) + } + }, startTransition) + } else { + startTransition() + } + + if (!this._rendered && this._startCb) { + this._startCb.call(null) + } + + // HACK: + // set rendered to true after the transition start, so + // that components that are acitvated synchronously know + // whether it is the initial render. + this._rendered = true + } + + /** + * Set current to the new transition. + * This is called by the transition object when the + * validation of a route has succeeded. + * + * @param {Transition} transition + */ + + _onTransitionValidated (transition) { + // set current route + const route = this._currentRoute = transition.to + // update route context for all children + if (this.app.$route !== route) { + this.app.$route = route + this._children.forEach((child) => { + child.$route = route + }) + } + // call global after hook + if (this._afterEachHooks.length) { + this._afterEachHooks.forEach(hook => hook.call(null, { + to: transition.to, + from: transition.from + })) + } + this._currentTransition.done = true + } + + /** + * Handle stuff after the transition. + * + * @param {Route} route + * @param {Object} [state] + * @param {String} [anchor] + */ + + _postTransition (route, state, anchor) { + // handle scroll positions + // saved scroll positions take priority + // then we check if the path has an anchor + const pos = state && state.pos + if (pos && this._saveScrollPosition) { + Vue.nextTick(() => { + window.scrollTo(pos.x, pos.y) + }) + } else if (anchor) { + Vue.nextTick(() => { + const el = document.getElementById(anchor.slice(1)) + if (el) { + window.scrollTo(window.scrollX, el.offsetTop) + } + }) + } + } +} + +/** + * Allow directly passing components to a route + * definition. + * + * @param {String} path + * @param {Object} handler + */ + +function guardComponent (path, handler) { + let comp = handler.component + if (Vue.util.isPlainObject(comp)) { + comp = handler.component = Vue.extend(comp) + } + /* istanbul ignore if */ + if (typeof comp !== 'function') { + handler.component = null + warn( + 'invalid component for route "' + path + '".' + ) + } +} + +/* Installation */ + +Router.installed = false + +/** + * Installation interface. + * Install the necessary directives. + */ + +Router.install = function (externalVue) { + /* istanbul ignore if */ + if (Router.installed) { + warn('already installed.') + return + } + Vue = externalVue + applyOverride(Vue) + View(Vue) + Link(Vue) + util.Vue = Vue + Router.installed = true +} + +// auto install +/* istanbul ignore if */ +if (typeof window !== 'undefined' && window.Vue) { + window.Vue.use(Router) +} + +export default Router diff --git a/src/install.js b/src/install.js deleted file mode 100644 index ee8506aa8..000000000 --- a/src/install.js +++ /dev/null @@ -1,52 +0,0 @@ -import View from './components/view' -import Link from './components/link' - -export let _Vue - -export function install (Vue) { - if (install.installed && _Vue === Vue) return - install.installed = true - - _Vue = Vue - - const isDef = v => v !== undefined - - const registerInstance = (vm, callVal) => { - let i = vm.$options._parentVnode - if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) { - i(vm, callVal) - } - } - - Vue.mixin({ - beforeCreate () { - if (isDef(this.$options.router)) { - this._routerRoot = this - this._router = this.$options.router - this._router.init(this) - Vue.util.defineReactive(this, '_route', this._router.history.current) - } else { - this._routerRoot = (this.$parent && this.$parent._routerRoot) || this - } - registerInstance(this, this) - }, - destroyed () { - registerInstance(this) - } - }) - - Object.defineProperty(Vue.prototype, '$router', { - get () { return this._routerRoot._router } - }) - - Object.defineProperty(Vue.prototype, '$route', { - get () { return this._routerRoot._route } - }) - - Vue.component('RouterView', View) - Vue.component('RouterLink', Link) - - const strats = Vue.config.optionMergeStrategies - // use the same hook merging strategy for route hooks - strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created -} diff --git a/src/override.js b/src/override.js new file mode 100644 index 000000000..42148552d --- /dev/null +++ b/src/override.js @@ -0,0 +1,64 @@ +export default function (Vue) { + + const { + extend, + isArray, + defineReactive + } = Vue.util + + // override Vue's init and destroy process to keep track of router instances + const init = Vue.prototype._init + Vue.prototype._init = function (options) { + options = options || {} + const root = options._parent || options.parent || this + const router = root.$router + const route = root.$route + if (router) { + // expose router + this.$router = router + router._children.push(this) + /* istanbul ignore if */ + if (this._defineMeta) { + // 0.12 + this._defineMeta('$route', route) + } else { + // 1.0 + defineReactive(this, '$route', route) + } + } + init.call(this, options) + } + + const destroy = Vue.prototype._destroy + Vue.prototype._destroy = function () { + if (!this._isBeingDestroyed && this.$router) { + this.$router._children.$remove(this) + } + destroy.apply(this, arguments) + } + + // 1.0 only: enable route mixins + const strats = Vue.config.optionMergeStrategies + const hooksToMergeRE = /^(data|activate|deactivate)$/ + + if (strats) { + strats.route = (parentVal, childVal) => { + if (!childVal) return parentVal + if (!parentVal) return childVal + const ret = {} + extend(ret, parentVal) + for (let key in childVal) { + let a = ret[key] + let b = childVal[key] + // for data, activate and deactivate, we need to merge them into + // arrays similar to lifecycle hooks. + if (a && hooksToMergeRE.test(key)) { + ret[key] = (isArray(a) ? a : [a]).concat(b) + } else { + ret[key] = b + } + } + return ret + } + } +} diff --git a/src/pipeline.js b/src/pipeline.js new file mode 100644 index 000000000..00a514c6f --- /dev/null +++ b/src/pipeline.js @@ -0,0 +1,314 @@ +import { + isPromise, + getRouteConfig, + resolveAsyncComponent +} from './util' + +/** + * Determine the reusability of an existing router view. + * + * @param {Directive} view + * @param {Object} handler + * @param {Transition} transition + */ + +export function canReuse (view, handler, transition) { + const component = view.childVM + if (!component || !handler) { + return false + } + // important: check view.Component here because it may + // have been changed in activate hook + if (view.Component !== handler.component) { + return false + } + const canReuseFn = getRouteConfig(component, 'canReuse') + return typeof canReuseFn === 'boolean' + ? canReuseFn + : canReuseFn + ? canReuseFn.call(component, { + to: transition.to, + from: transition.from + }) : true // defaults to true +} + +/** + * Check if a component can deactivate. + * + * @param {Directive} view + * @param {Transition} transition + * @param {Function} next + */ + +export function canDeactivate (view, transition, next) { + const fromComponent = view.childVM + const hook = getRouteConfig(fromComponent, 'canDeactivate') + if (!hook) { + next() + } else { + transition.callHook(hook, fromComponent, next, { + expectBoolean: true + }) + } +} + +/** + * Check if a component can activate. + * + * @param {Object} handler + * @param {Transition} transition + * @param {Function} next + */ + +export function canActivate (handler, transition, next) { + resolveAsyncComponent(handler, (Component) => { + // have to check due to async-ness + if (transition.aborted) { + return + } + // determine if this component can be activated + const hook = getRouteConfig(Component, 'canActivate') + if (!hook) { + next() + } else { + transition.callHook(hook, null, next, { + expectBoolean: true + }) + } + }) +} + +/** + * Call deactivate hooks for existing router-views. + * + * @param {Directive} view + * @param {Transition} transition + * @param {Function} next + */ + +export function deactivate (view, transition, next) { + const component = view.childVM + const hook = getRouteConfig(component, 'deactivate') + if (!hook) { + next() + } else { + transition.callHooks(hook, component, next) + } +} + +/** + * Activate / switch component for a router-view. + * + * @param {Directive} view + * @param {Transition} transition + * @param {Number} depth + * @param {Function} [cb] + */ + +export function activate (view, transition, depth, cb, reuse) { + const handler = transition.activateQueue[depth] + if (!handler) { + saveChildView(view) + if (view._bound) { + view.setComponent(null) + } + cb && cb() + return + } + + const Component = view.Component = handler.component + const activateHook = getRouteConfig(Component, 'activate') + const dataHook = getRouteConfig(Component, 'data') + const waitForData = getRouteConfig(Component, 'waitForData') + + view.depth = depth + view.activated = false + + let component + const loading = !!(dataHook && !waitForData) + + // "reuse" is a flag passed down when the parent view is + // either reused via keep-alive or as a child of a kept-alive view. + // of course we can only reuse if the current kept-alive instance + // is of the correct type. + reuse = reuse && view.childVM && view.childVM.constructor === Component + + if (reuse) { + // just reuse + component = view.childVM + component.$loadingRouteData = loading + } else { + saveChildView(view) + + // unbuild current component. this step also destroys + // and removes all nested child views. + view.unbuild(true) + + // build the new component. this will also create the + // direct child view of the current one. it will register + // itself as view.childView. + component = view.build({ + _meta: { + $loadingRouteData: loading + }, + created () { + this._routerView = view + } + }) + + // handle keep-alive. + // when a kept-alive child vm is restored, we need to + // add its cached child views into the router's view list, + // and also properly update current view's child view. + if (view.keepAlive) { + component.$loadingRouteData = loading + const cachedChildView = component._keepAliveRouterView + if (cachedChildView) { + view.childView = cachedChildView + component._keepAliveRouterView = null + } + } + } + + // cleanup the component in case the transition is aborted + // before the component is ever inserted. + const cleanup = () => { + component.$destroy() + } + + // actually insert the component and trigger transition + const insert = () => { + if (reuse) { + cb && cb() + return + } + const router = transition.router + if (router._rendered || router._transitionOnLoad) { + view.transition(component) + } else { + // no transition on first render, manual transition + /* istanbul ignore if */ + if (view.setCurrent) { + // 0.12 compat + view.setCurrent(component) + } else { + // 1.0 + view.childVM = component + } + component.$before(view.anchor, null, false) + } + cb && cb() + } + + const afterData = () => { + // activate the child view + if (view.childView) { + activate(view.childView, transition, depth + 1, null, reuse || view.keepAlive) + } + insert() + } + + // called after activation hook is resolved + const afterActivate = () => { + view.activated = true + if (dataHook && waitForData) { + // wait until data loaded to insert + loadData(component, transition, dataHook, afterData, cleanup) + } else { + // load data and insert at the same time + if (dataHook) { + loadData(component, transition, dataHook) + } + afterData() + } + } + + if (activateHook) { + transition.callHooks(activateHook, component, afterActivate, { + cleanup, + postActivate: true + }) + } else { + afterActivate() + } +} + +/** + * Reuse a view, just reload data if necessary. + * + * @param {Directive} view + * @param {Transition} transition + */ + +export function reuse (view, transition) { + const component = view.childVM + const dataHook = getRouteConfig(component, 'data') + if (dataHook) { + loadData(component, transition, dataHook) + } +} + +/** + * Asynchronously load and apply data to component. + * + * @param {Vue} component + * @param {Transition} transition + * @param {Function} hook + * @param {Function} cb + * @param {Function} cleanup + */ + +function loadData (component, transition, hook, cb, cleanup) { + component.$loadingRouteData = true + transition.callHooks(hook, component, () => { + component.$loadingRouteData = false + component.$emit('route-data-loaded', component) + cb && cb() + }, { + cleanup, + postActivate: true, + processData: (data) => { + // handle promise sugar syntax + const promises = [] + if (isPlainObject(data)) { + Object.keys(data).forEach(key => { + const val = data[key] + if (isPromise(val)) { + promises.push(val.then(resolvedVal => { + component.$set(key, resolvedVal) + })) + } else { + component.$set(key, val) + } + }) + } + if (promises.length) { + return promises[0].constructor.all(promises) + } + } + }) +} + +/** + * Save the child view for a kept-alive view so that + * we can restore it when it is switched back to. + * + * @param {Directive} view + */ + +function saveChildView (view) { + if (view.keepAlive && view.childVM && view.childView) { + view.childVM._keepAliveRouterView = view.childView + } + view.childView = null +} + +/** + * Check plain object. + * + * @param {*} val + */ + +function isPlainObject (val) { + return Object.prototype.toString.call(val) === '[object Object]' +} diff --git a/src/route.js b/src/route.js new file mode 100644 index 000000000..3ef836ec9 --- /dev/null +++ b/src/route.js @@ -0,0 +1,46 @@ +const internalKeysRE = /^(component|subRoutes|fullPath)$/ + +/** + * Route Context Object + * + * @param {String} path + * @param {Router} router + */ + +export default class Route { + + constructor (path, router) { + const matched = router._recognizer.recognize(path) + if (matched) { + // copy all custom fields from route configs + [].forEach.call(matched, match => { + for (let key in match.handler) { + if (!internalKeysRE.test(key)) { + this[key] = match.handler[key] + } + } + }) + // set query and params + this.query = matched.queryParams + this.params = [].reduce.call(matched, (prev, cur) => { + if (cur.params) { + for (let key in cur.params) { + prev[key] = cur.params[key] + } + } + return prev + }, {}) + } + // expose path and router + this.path = path + // for internal use + this.matched = matched || router._notFoundHandler + // internal reference to router + Object.defineProperty(this, 'router', { + enumerable: false, + value: router + }) + // Important: freeze self to prevent observation + Object.freeze(this) + } +} diff --git a/src/router.js b/src/router.js deleted file mode 100644 index 5f677dc82..000000000 --- a/src/router.js +++ /dev/null @@ -1,294 +0,0 @@ -/* @flow */ - -import { install } from './install' -import { START } from './util/route' -import { assert, warn } from './util/warn' -import { inBrowser } from './util/dom' -import { cleanPath } from './util/path' -import { createMatcher } from './create-matcher' -import { normalizeLocation } from './util/location' -import { supportsPushState } from './util/push-state' -import { handleScroll } from './util/scroll' -import { isNavigationFailure, NavigationFailureType } from './util/errors' - -import { HashHistory } from './history/hash' -import { HTML5History } from './history/html5' -import { AbstractHistory } from './history/abstract' - -import type { Matcher } from './create-matcher' - -export default class VueRouter { - static install: () => void - static version: string - static isNavigationFailure: Function - static NavigationFailureType: any - static START_LOCATION: Route - - app: any - apps: Array<any> - ready: boolean - readyCbs: Array<Function> - options: RouterOptions - mode: string - history: HashHistory | HTML5History | AbstractHistory - matcher: Matcher - fallback: boolean - beforeHooks: Array<?NavigationGuard> - resolveHooks: Array<?NavigationGuard> - afterHooks: Array<?AfterNavigationHook> - - constructor (options: RouterOptions = {}) { - if (process.env.NODE_ENV !== 'production') { - warn(this instanceof VueRouter, `Router must be called with the new operator.`) - } - this.app = null - this.apps = [] - this.options = options - this.beforeHooks = [] - this.resolveHooks = [] - this.afterHooks = [] - this.matcher = createMatcher(options.routes || [], this) - - let mode = options.mode || 'hash' - this.fallback = - mode === 'history' && !supportsPushState && options.fallback !== false - if (this.fallback) { - mode = 'hash' - } - if (!inBrowser) { - mode = 'abstract' - } - this.mode = mode - - switch (mode) { - case 'history': - this.history = new HTML5History(this, options.base) - break - case 'hash': - this.history = new HashHistory(this, options.base, this.fallback) - break - case 'abstract': - this.history = new AbstractHistory(this, options.base) - break - default: - if (process.env.NODE_ENV !== 'production') { - assert(false, `invalid mode: ${mode}`) - } - } - } - - match (raw: RawLocation, current?: Route, redirectedFrom?: Location): Route { - return this.matcher.match(raw, current, redirectedFrom) - } - - get currentRoute (): ?Route { - return this.history && this.history.current - } - - init (app: any /* Vue component instance */) { - process.env.NODE_ENV !== 'production' && - assert( - install.installed, - `not installed. Make sure to call \`Vue.use(VueRouter)\` ` + - `before creating root instance.` - ) - - this.apps.push(app) - - // set up app destroyed handler - // https://github.com/vuejs/vue-router/issues/2639 - app.$once('hook:destroyed', () => { - // clean out app from this.apps array once destroyed - const index = this.apps.indexOf(app) - if (index > -1) this.apps.splice(index, 1) - // ensure we still have a main app or null if no apps - // we do not release the router so it can be reused - if (this.app === app) this.app = this.apps[0] || null - - if (!this.app) this.history.teardown() - }) - - // main app previously initialized - // return as we don't need to set up new history listener - if (this.app) { - return - } - - this.app = app - - const history = this.history - - if (history instanceof HTML5History || history instanceof HashHistory) { - const handleInitialScroll = routeOrError => { - const from = history.current - const expectScroll = this.options.scrollBehavior - const supportsScroll = supportsPushState && expectScroll - - if (supportsScroll && 'fullPath' in routeOrError) { - handleScroll(this, routeOrError, from, false) - } - } - const setupListeners = routeOrError => { - history.setupListeners() - handleInitialScroll(routeOrError) - } - history.transitionTo( - history.getCurrentLocation(), - setupListeners, - setupListeners - ) - } - - history.listen(route => { - this.apps.forEach(app => { - app._route = route - }) - }) - } - - beforeEach (fn: Function): Function { - return registerHook(this.beforeHooks, fn) - } - - beforeResolve (fn: Function): Function { - return registerHook(this.resolveHooks, fn) - } - - afterEach (fn: Function): Function { - return registerHook(this.afterHooks, fn) - } - - onReady (cb: Function, errorCb?: Function) { - this.history.onReady(cb, errorCb) - } - - onError (errorCb: Function) { - this.history.onError(errorCb) - } - - push (location: RawLocation, onComplete?: Function, onAbort?: Function) { - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise((resolve, reject) => { - this.history.push(location, resolve, reject) - }) - } else { - this.history.push(location, onComplete, onAbort) - } - } - - replace (location: RawLocation, onComplete?: Function, onAbort?: Function) { - // $flow-disable-line - if (!onComplete && !onAbort && typeof Promise !== 'undefined') { - return new Promise((resolve, reject) => { - this.history.replace(location, resolve, reject) - }) - } else { - this.history.replace(location, onComplete, onAbort) - } - } - - go (n: number) { - this.history.go(n) - } - - back () { - this.go(-1) - } - - forward () { - this.go(1) - } - - getMatchedComponents (to?: RawLocation | Route): Array<any> { - const route: any = to - ? to.matched - ? to - : this.resolve(to).route - : this.currentRoute - if (!route) { - return [] - } - return [].concat.apply( - [], - route.matched.map(m => { - return Object.keys(m.components).map(key => { - return m.components[key] - }) - }) - ) - } - - resolve ( - to: RawLocation, - current?: Route, - append?: boolean - ): { - location: Location, - route: Route, - href: string, - // for backwards compat - normalizedTo: Location, - resolved: Route - } { - current = current || this.history.current - const location = normalizeLocation(to, current, append, this) - const route = this.match(location, current) - const fullPath = route.redirectedFrom || route.fullPath - const base = this.history.base - const href = createHref(base, fullPath, this.mode) - return { - location, - route, - href, - // for backwards compat - normalizedTo: location, - resolved: route - } - } - - getRoutes () { - return this.matcher.getRoutes() - } - - addRoute (parentOrRoute: string | RouteConfig, route?: RouteConfig) { - this.matcher.addRoute(parentOrRoute, route) - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()) - } - } - - addRoutes (routes: Array<RouteConfig>) { - if (process.env.NODE_ENV !== 'production') { - warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.') - } - this.matcher.addRoutes(routes) - if (this.history.current !== START) { - this.history.transitionTo(this.history.getCurrentLocation()) - } - } -} - -function registerHook (list: Array<any>, fn: Function): Function { - list.push(fn) - return () => { - const i = list.indexOf(fn) - if (i > -1) list.splice(i, 1) - } -} - -function createHref (base: string, fullPath: string, mode) { - var path = mode === 'hash' ? '#' + fullPath : fullPath - return base ? cleanPath(base + '/' + path) : path -} - -// We cannot remove this as it would be a breaking change -VueRouter.install = install -VueRouter.version = '__VERSION__' -VueRouter.isNavigationFailure = isNavigationFailure -VueRouter.NavigationFailureType = NavigationFailureType -VueRouter.START_LOCATION = START - -if (inBrowser && window.Vue) { - window.Vue.use(VueRouter) -} diff --git a/src/transition.js b/src/transition.js new file mode 100644 index 000000000..359fb7c83 --- /dev/null +++ b/src/transition.js @@ -0,0 +1,342 @@ +import { + warn, + mapParams, + isPromise +} from './util' + +import { + activate, + deactivate, + canActivate, + canDeactivate, + reuse, + canReuse +} from './pipeline' + +/** + * A RouteTransition object manages the pipeline of a + * router-view switching process. This is also the object + * passed into user route hooks. + * + * @param {Router} router + * @param {Route} to + * @param {Route} from + */ + +export default class RouteTransition { + + constructor (router, to, from) { + this.router = router + this.to = to + this.from = from + this.next = null + this.aborted = false + this.done = false + } + + /** + * Abort current transition and return to previous location. + */ + + abort () { + if (!this.aborted) { + this.aborted = true + // if the root path throws an error during validation + // on initial load, it gets caught in an infinite loop. + const abortingOnLoad = !this.from.path && this.to.path === '/' + if (!abortingOnLoad) { + this.router.replace(this.from.path || '/') + } + } + } + + /** + * Abort current transition and redirect to a new location. + * + * @param {String} path + */ + + redirect (path) { + if (!this.aborted) { + this.aborted = true + if (typeof path === 'string') { + path = mapParams(path, this.to.params, this.to.query) + } else { + path.params = path.params || this.to.params + path.query = path.query || this.to.query + } + this.router.replace(path) + } + } + + /** + * A router view transition's pipeline can be described as + * follows, assuming we are transitioning from an existing + * <router-view> chain [Component A, Component B] to a new + * chain [Component A, Component C]: + * + * A A + * | => | + * B C + * + * 1. Reusablity phase: + * -> canReuse(A, A) + * -> canReuse(B, C) + * -> determine new queues: + * - deactivation: [B] + * - activation: [C] + * + * 2. Validation phase: + * -> canDeactivate(B) + * -> canActivate(C) + * + * 3. Activation phase: + * -> deactivate(B) + * -> activate(C) + * + * Each of these steps can be asynchronous, and any + * step can potentially abort the transition. + * + * @param {Function} cb + */ + + start (cb) { + const transition = this + + // determine the queue of views to deactivate + let deactivateQueue = [] + let view = this.router._rootView + while (view) { + deactivateQueue.unshift(view) + view = view.childView + } + let reverseDeactivateQueue = deactivateQueue.slice().reverse() + + // determine the queue of route handlers to activate + let activateQueue = this.activateQueue = + toArray(this.to.matched).map(match => match.handler) + + // 1. Reusability phase + let i, reuseQueue + for (i = 0; i < reverseDeactivateQueue.length; i++) { + if (!canReuse(reverseDeactivateQueue[i], activateQueue[i], transition)) { + break + } + } + if (i > 0) { + reuseQueue = reverseDeactivateQueue.slice(0, i) + deactivateQueue = reverseDeactivateQueue.slice(i).reverse() + activateQueue = activateQueue.slice(i) + } + + // 2. Validation phase + transition.runQueue(deactivateQueue, canDeactivate, () => { + transition.runQueue(activateQueue, canActivate, () => { + transition.runQueue(deactivateQueue, deactivate, () => { + // 3. Activation phase + + // Update router current route + transition.router._onTransitionValidated(transition) + + // trigger reuse for all reused views + reuseQueue && reuseQueue.forEach(view => reuse(view, transition)) + + // the root of the chain that needs to be replaced + // is the top-most non-reusable view. + if (deactivateQueue.length) { + const view = deactivateQueue[deactivateQueue.length - 1] + const depth = reuseQueue ? reuseQueue.length : 0 + activate(view, transition, depth, cb) + } else { + cb() + } + }) + }) + }) + } + + /** + * Asynchronously and sequentially apply a function to a + * queue. + * + * @param {Array} queue + * @param {Function} fn + * @param {Function} cb + */ + + runQueue (queue, fn, cb) { + const transition = this + step(0) + function step (index) { + if (index >= queue.length) { + cb() + } else { + fn(queue[index], transition, () => { + step(index + 1) + }) + } + } + } + + /** + * Call a user provided route transition hook and handle + * the response (e.g. if the user returns a promise). + * + * If the user neither expects an argument nor returns a + * promise, the hook is assumed to be synchronous. + * + * @param {Function} hook + * @param {*} [context] + * @param {Function} [cb] + * @param {Object} [options] + * - {Boolean} expectBoolean + * - {Boolean} postActive + * - {Function} processData + * - {Function} cleanup + */ + + callHook (hook, context, cb, { + expectBoolean = false, + postActivate = false, + processData, + cleanup + } = {}) { + + const transition = this + let nextCalled = false + + // abort the transition + const abort = () => { + cleanup && cleanup() + transition.abort() + } + + // handle errors + const onError = err => { + postActivate ? next() : abort() + if (err && !transition.router._suppress) { + warn('Uncaught error during transition: ') + throw err instanceof Error ? err : new Error(err) + } + } + + // since promise swallows errors, we have to + // throw it in the next tick... + const onPromiseError = err => { + try { + onError(err) + } catch (e) { + setTimeout(() => { throw e }, 0) + } + } + + // advance the transition to the next step + const next = () => { + if (nextCalled) { + warn('transition.next() should be called only once.') + return + } + nextCalled = true + if (transition.aborted) { + cleanup && cleanup() + return + } + cb && cb() + } + + const nextWithBoolean = res => { + if (typeof res === 'boolean') { + res ? next() : abort() + } else if (isPromise(res)) { + res.then((ok) => { + ok ? next() : abort() + }, onPromiseError) + } else if (!hook.length) { + next() + } + } + + const nextWithData = data => { + let res + try { + res = processData(data) + } catch (err) { + return onError(err) + } + if (isPromise(res)) { + res.then(next, onPromiseError) + } else { + next() + } + } + + // expose a clone of the transition object, so that each + // hook gets a clean copy and prevent the user from + // messing with the internals. + const exposed = { + to: transition.to, + from: transition.from, + abort: abort, + next: processData ? nextWithData : next, + redirect: function () { + transition.redirect.apply(transition, arguments) + } + } + + // actually call the hook + let res + try { + res = hook.call(context, exposed) + } catch (err) { + return onError(err) + } + + if (expectBoolean) { + // boolean hooks + nextWithBoolean(res) + } else if (isPromise(res)) { + // promise + if (processData) { + res.then(nextWithData, onPromiseError) + } else { + res.then(next, onPromiseError) + } + } else if (processData && isPlainOjbect(res)) { + // data promise sugar + nextWithData(res) + } else if (!hook.length) { + next() + } + } + + /** + * Call a single hook or an array of async hooks in series. + * + * @param {Array} hooks + * @param {*} context + * @param {Function} cb + * @param {Object} [options] + */ + + callHooks (hooks, context, cb, options) { + if (Array.isArray(hooks)) { + this.runQueue(hooks, (hook, _, next) => { + if (!this.aborted) { + this.callHook(hook, context, next, options) + } + }, cb) + } else { + this.callHook(hooks, context, cb, options) + } + } +} + +function isPlainOjbect (val) { + return Object.prototype.toString.call(val) === '[object Object]' +} + +function toArray (val) { + return val + ? Array.prototype.slice.call(val) + : [] +} diff --git a/src/util.js b/src/util.js new file mode 100644 index 000000000..facb769bb --- /dev/null +++ b/src/util.js @@ -0,0 +1,149 @@ +import RouteRecognizer from '../lib/route-recognizer' +const genQuery = RouteRecognizer.prototype.generateQueryString + +// export default for holding the Vue reference +const exports = {} +export default exports + +/** + * Warn stuff. + * + * @param {String} msg + */ + +export function warn (msg) { + /* istanbul ignore next */ + if (typeof console !== 'undefined') { + console.error('[vue-router] ' + msg) + } +} + +/** + * Resolve a relative path. + * + * @param {String} base + * @param {String} relative + * @param {Boolean} append + * @return {String} + */ + +export function resolvePath (base, relative, append) { + let query = base.match(/(\?.*)$/) + if (query) { + query = query[1] + base = base.slice(0, -query.length) + } + // a query! + if (relative.charAt(0) === '?') { + return base + relative + } + const stack = base.split('/') + // remove trailing segment if: + // - not appending + // - appending to trailing slash (last segment is empty) + if (!append || !stack[stack.length - 1]) { + stack.pop() + } + // resolve relative path + const segments = relative.replace(/^\//, '').split('/') + for (let i = 0; i < segments.length; i++) { + let segment = segments[i] + if (segment === '.') { + continue + } else if (segment === '..') { + stack.pop() + } else { + stack.push(segment) + } + } + // ensure leading slash + if (stack[0] !== '') { + stack.unshift('') + } + return stack.join('/') +} + +/** + * Forgiving check for a promise + * + * @param {Object} p + * @return {Boolean} + */ + +export function isPromise (p) { + return p && + typeof p.then === 'function' +} + +/** + * Retrive a route config field from a component instance + * OR a component contructor. + * + * @param {Function|Vue} component + * @param {String} name + * @return {*} + */ + +export function getRouteConfig (component, name) { + const options = + component && + (component.$options || component.options) + return options && + options.route && + options.route[name] +} + +/** + * Resolve an async component factory. Have to do a dirty + * mock here because of Vue core's internal API depends on + * an ID check. + * + * @param {Object} handler + * @param {Function} cb + */ + +let resolver +export function resolveAsyncComponent (handler, cb) { + if (!resolver) { + resolver = { + resolve: exports.Vue.prototype._resolveComponent, + $options: { + components: { + _: handler.component + } + } + } + } else { + resolver.$options.components._ = handler.component + } + resolver.resolve('_', function (Component) { + handler.component = Component + cb(Component) + }) +} + +/** + * Map the dynamic segments in a path to params. + * + * @param {String} path + * @param {Object} params + * @param {Object} query + */ + +export function mapParams (path, params = {}, query) { + path = path.replace(/:([^\/]+)/g, (_, key) => { + const val = params[key] + /* istanbul ignore if */ + if (!val) { + warn( + 'param "' + key + '" not found when generating ' + + 'path for "' + path + '" with params ' + JSON.stringify(params) + ) + } + return val || '' + }) + if (query) { + path += genQuery(query) + } + return path +} diff --git a/src/util/async.js b/src/util/async.js deleted file mode 100644 index 03bbf603e..000000000 --- a/src/util/async.js +++ /dev/null @@ -1,18 +0,0 @@ -/* @flow */ - -export function runQueue (queue: Array<?NavigationGuard>, fn: Function, cb: Function) { - const step = index => { - if (index >= queue.length) { - cb() - } else { - if (queue[index]) { - fn(queue[index], () => { - step(index + 1) - }) - } else { - step(index + 1) - } - } - } - step(0) -} diff --git a/src/util/dom.js b/src/util/dom.js deleted file mode 100644 index d497b15c7..000000000 --- a/src/util/dom.js +++ /dev/null @@ -1,3 +0,0 @@ -/* @flow */ - -export const inBrowser = typeof window !== 'undefined' diff --git a/src/util/errors.js b/src/util/errors.js deleted file mode 100644 index a61f6eea3..000000000 --- a/src/util/errors.js +++ /dev/null @@ -1,86 +0,0 @@ -// When changing thing, also edit router.d.ts -export const NavigationFailureType = { - redirected: 2, - aborted: 4, - cancelled: 8, - duplicated: 16 -} - -export function createNavigationRedirectedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.redirected, - `Redirected when going from "${from.fullPath}" to "${stringifyRoute( - to - )}" via a navigation guard.` - ) -} - -export function createNavigationDuplicatedError (from, to) { - const error = createRouterError( - from, - to, - NavigationFailureType.duplicated, - `Avoided redundant navigation to current location: "${from.fullPath}".` - ) - // backwards compatible with the first introduction of Errors - error.name = 'NavigationDuplicated' - return error -} - -export function createNavigationCancelledError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.cancelled, - `Navigation cancelled from "${from.fullPath}" to "${ - to.fullPath - }" with a new navigation.` - ) -} - -export function createNavigationAbortedError (from, to) { - return createRouterError( - from, - to, - NavigationFailureType.aborted, - `Navigation aborted from "${from.fullPath}" to "${ - to.fullPath - }" via a navigation guard.` - ) -} - -function createRouterError (from, to, type, message) { - const error = new Error(message) - error._isRouter = true - error.from = from - error.to = to - error.type = type - - return error -} - -const propertiesToLog = ['params', 'query', 'hash'] - -function stringifyRoute (to) { - if (typeof to === 'string') return to - if ('path' in to) return to.path - const location = {} - propertiesToLog.forEach(key => { - if (key in to) location[key] = to[key] - }) - return JSON.stringify(location, null, 2) -} - -export function isError (err) { - return Object.prototype.toString.call(err).indexOf('Error') > -1 -} - -export function isNavigationFailure (err, errorType) { - return ( - isError(err) && - err._isRouter && - (errorType == null || err.type === errorType) - ) -} diff --git a/src/util/location.js b/src/util/location.js deleted file mode 100644 index fb98d4537..000000000 --- a/src/util/location.js +++ /dev/null @@ -1,69 +0,0 @@ -/* @flow */ - -import type VueRouter from '../index' -import { parsePath, resolvePath } from './path' -import { resolveQuery } from './query' -import { fillParams } from './params' -import { warn } from './warn' -import { extend } from './misc' - -export function normalizeLocation ( - raw: RawLocation, - current: ?Route, - append: ?boolean, - router: ?VueRouter -): Location { - let next: Location = typeof raw === 'string' ? { path: raw } : raw - // named target - if (next._normalized) { - return next - } else if (next.name) { - next = extend({}, raw) - const params = next.params - if (params && typeof params === 'object') { - next.params = extend({}, params) - } - return next - } - - // relative params - if (!next.path && next.params && current) { - next = extend({}, next) - next._normalized = true - const params: any = extend(extend({}, current.params), next.params) - if (current.name) { - next.name = current.name - next.params = params - } else if (current.matched.length) { - const rawPath = current.matched[current.matched.length - 1].path - next.path = fillParams(rawPath, params, `path ${current.path}`) - } else if (process.env.NODE_ENV !== 'production') { - warn(false, `relative params navigation requires a current route.`) - } - return next - } - - const parsedPath = parsePath(next.path || '') - const basePath = (current && current.path) || '/' - const path = parsedPath.path - ? resolvePath(parsedPath.path, basePath, append || next.append) - : basePath - - const query = resolveQuery( - parsedPath.query, - next.query, - router && router.options.parseQuery - ) - - let hash = next.hash || parsedPath.hash - if (hash && hash.charAt(0) !== '#') { - hash = `#${hash}` - } - - return { - _normalized: true, - path, - query, - hash - } -} diff --git a/src/util/misc.js b/src/util/misc.js deleted file mode 100644 index fb226507d..000000000 --- a/src/util/misc.js +++ /dev/null @@ -1,6 +0,0 @@ -export function extend (a, b) { - for (const key in b) { - a[key] = b[key] - } - return a -} diff --git a/src/util/params.js b/src/util/params.js deleted file mode 100644 index 83d4aa11a..000000000 --- a/src/util/params.js +++ /dev/null @@ -1,37 +0,0 @@ -/* @flow */ - -import { warn } from './warn' -import Regexp from 'path-to-regexp' - -// $flow-disable-line -const regexpCompileCache: { - [key: string]: Function -} = Object.create(null) - -export function fillParams ( - path: string, - params: ?Object, - routeMsg: string -): string { - params = params || {} - try { - const filler = - regexpCompileCache[path] || - (regexpCompileCache[path] = Regexp.compile(path)) - - // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }} - // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string - if (typeof params.pathMatch === 'string') params[0] = params.pathMatch - - return filler(params, { pretty: true }) - } catch (e) { - if (process.env.NODE_ENV !== 'production') { - // Fix #3072 no warn if `pathMatch` is string - warn(typeof params.pathMatch === 'string', `missing param for ${routeMsg}: ${e.message}`) - } - return '' - } finally { - // delete the 0 if it was added - delete params[0] - } -} diff --git a/src/util/path.js b/src/util/path.js deleted file mode 100644 index 9d048437f..000000000 --- a/src/util/path.js +++ /dev/null @@ -1,74 +0,0 @@ -/* @flow */ - -export function resolvePath ( - relative: string, - base: string, - append?: boolean -): string { - const firstChar = relative.charAt(0) - if (firstChar === '/') { - return relative - } - - if (firstChar === '?' || firstChar === '#') { - return base + relative - } - - const stack = base.split('/') - - // remove trailing segment if: - // - not appending - // - appending to trailing slash (last segment is empty) - if (!append || !stack[stack.length - 1]) { - stack.pop() - } - - // resolve relative path - const segments = relative.replace(/^\//, '').split('/') - for (let i = 0; i < segments.length; i++) { - const segment = segments[i] - if (segment === '..') { - stack.pop() - } else if (segment !== '.') { - stack.push(segment) - } - } - - // ensure leading slash - if (stack[0] !== '') { - stack.unshift('') - } - - return stack.join('/') -} - -export function parsePath (path: string): { - path: string; - query: string; - hash: string; -} { - let hash = '' - let query = '' - - const hashIndex = path.indexOf('#') - if (hashIndex >= 0) { - hash = path.slice(hashIndex) - path = path.slice(0, hashIndex) - } - - const queryIndex = path.indexOf('?') - if (queryIndex >= 0) { - query = path.slice(queryIndex + 1) - path = path.slice(0, queryIndex) - } - - return { - path, - query, - hash - } -} - -export function cleanPath (path: string): string { - return path.replace(/\/(?:\s*\/)+/g, '/') -} diff --git a/src/util/push-state.js b/src/util/push-state.js deleted file mode 100644 index dcbab672b..000000000 --- a/src/util/push-state.js +++ /dev/null @@ -1,46 +0,0 @@ -/* @flow */ - -import { inBrowser } from './dom' -import { saveScrollPosition } from './scroll' -import { genStateKey, setStateKey, getStateKey } from './state-key' -import { extend } from './misc' - -export const supportsPushState = - inBrowser && - (function () { - const ua = window.navigator.userAgent - - if ( - (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && - ua.indexOf('Mobile Safari') !== -1 && - ua.indexOf('Chrome') === -1 && - ua.indexOf('Windows Phone') === -1 - ) { - return false - } - - return window.history && typeof window.history.pushState === 'function' - })() - -export function pushState (url?: string, replace?: boolean) { - saveScrollPosition() - // try...catch the pushState call to get around Safari - // DOM Exception 18 where it limits to 100 pushState calls - const history = window.history - try { - if (replace) { - // preserve existing history state as it could be overriden by the user - const stateCopy = extend({}, history.state) - stateCopy.key = getStateKey() - history.replaceState(stateCopy, '', url) - } else { - history.pushState({ key: setStateKey(genStateKey()) }, '', url) - } - } catch (e) { - window.location[replace ? 'replace' : 'assign'](url) - } -} - -export function replaceState (url?: string) { - pushState(url, true) -} diff --git a/src/util/query.js b/src/util/query.js deleted file mode 100644 index a2f2a56cc..000000000 --- a/src/util/query.js +++ /dev/null @@ -1,113 +0,0 @@ -/* @flow */ - -import { warn } from './warn' - -const encodeReserveRE = /[!'()*]/g -const encodeReserveReplacer = c => '%' + c.charCodeAt(0).toString(16) -const commaRE = /%2C/g - -// fixed encodeURIComponent which is more conformant to RFC3986: -// - escapes [!'()*] -// - preserve commas -const encode = str => - encodeURIComponent(str) - .replace(encodeReserveRE, encodeReserveReplacer) - .replace(commaRE, ',') - -export function decode (str: string) { - try { - return decodeURIComponent(str) - } catch (err) { - if (process.env.NODE_ENV !== 'production') { - warn(false, `Error decoding "${str}". Leaving it intact.`) - } - } - return str -} - -export function resolveQuery ( - query: ?string, - extraQuery: Dictionary<string> = {}, - _parseQuery: ?Function -): Dictionary<string> { - const parse = _parseQuery || parseQuery - let parsedQuery - try { - parsedQuery = parse(query || '') - } catch (e) { - process.env.NODE_ENV !== 'production' && warn(false, e.message) - parsedQuery = {} - } - for (const key in extraQuery) { - const value = extraQuery[key] - parsedQuery[key] = Array.isArray(value) - ? value.map(castQueryParamValue) - : castQueryParamValue(value) - } - return parsedQuery -} - -const castQueryParamValue = value => (value == null || typeof value === 'object' ? value : String(value)) - -function parseQuery (query: string): Dictionary<string> { - const res = {} - - query = query.trim().replace(/^(\?|#|&)/, '') - - if (!query) { - return res - } - - query.split('&').forEach(param => { - const parts = param.replace(/\+/g, ' ').split('=') - const key = decode(parts.shift()) - const val = parts.length > 0 ? decode(parts.join('=')) : null - - if (res[key] === undefined) { - res[key] = val - } else if (Array.isArray(res[key])) { - res[key].push(val) - } else { - res[key] = [res[key], val] - } - }) - - return res -} - -export function stringifyQuery (obj: Dictionary<string>): string { - const res = obj - ? Object.keys(obj) - .map(key => { - const val = obj[key] - - if (val === undefined) { - return '' - } - - if (val === null) { - return encode(key) - } - - if (Array.isArray(val)) { - const result = [] - val.forEach(val2 => { - if (val2 === undefined) { - return - } - if (val2 === null) { - result.push(encode(key)) - } else { - result.push(encode(key) + '=' + encode(val2)) - } - }) - return result.join('&') - } - - return encode(key) + '=' + encode(val) - }) - .filter(x => x.length > 0) - .join('&') - : null - return res ? `?${res}` : '' -} diff --git a/src/util/resolve-components.js b/src/util/resolve-components.js deleted file mode 100644 index 204e3ca8f..000000000 --- a/src/util/resolve-components.js +++ /dev/null @@ -1,109 +0,0 @@ -/* @flow */ - -import { _Vue } from '../install' -import { warn } from './warn' -import { isError } from '../util/errors' - -export function resolveAsyncComponents (matched: Array<RouteRecord>): Function { - return (to, from, next) => { - let hasAsync = false - let pending = 0 - let error = null - - flatMapComponents(matched, (def, _, match, key) => { - // if it's a function and doesn't have cid attached, - // assume it's an async component resolve function. - // we are not using Vue's default async resolving mechanism because - // we want to halt the navigation until the incoming component has been - // resolved. - if (typeof def === 'function' && def.cid === undefined) { - hasAsync = true - pending++ - - const resolve = once(resolvedDef => { - if (isESModule(resolvedDef)) { - resolvedDef = resolvedDef.default - } - // save resolved on async factory in case it's used elsewhere - def.resolved = typeof resolvedDef === 'function' - ? resolvedDef - : _Vue.extend(resolvedDef) - match.components[key] = resolvedDef - pending-- - if (pending <= 0) { - next() - } - }) - - const reject = once(reason => { - const msg = `Failed to resolve async component ${key}: ${reason}` - process.env.NODE_ENV !== 'production' && warn(false, msg) - if (!error) { - error = isError(reason) - ? reason - : new Error(msg) - next(error) - } - }) - - let res - try { - res = def(resolve, reject) - } catch (e) { - reject(e) - } - if (res) { - if (typeof res.then === 'function') { - res.then(resolve, reject) - } else { - // new syntax in Vue 2.3 - const comp = res.component - if (comp && typeof comp.then === 'function') { - comp.then(resolve, reject) - } - } - } - } - }) - - if (!hasAsync) next() - } -} - -export function flatMapComponents ( - matched: Array<RouteRecord>, - fn: Function -): Array<?Function> { - return flatten(matched.map(m => { - return Object.keys(m.components).map(key => fn( - m.components[key], - m.instances[key], - m, key - )) - })) -} - -export function flatten (arr: Array<any>): Array<any> { - return Array.prototype.concat.apply([], arr) -} - -const hasSymbol = - typeof Symbol === 'function' && - typeof Symbol.toStringTag === 'symbol' - -function isESModule (obj) { - return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module') -} - -// in Webpack 2, require.ensure now also returns a Promise -// so the resolve/reject functions may get called an extra time -// if the user uses an arrow function shorthand that happens to -// return that Promise. -function once (fn) { - let called = false - return function (...args) { - if (called) return - called = true - return fn.apply(this, args) - } -} diff --git a/src/util/route.js b/src/util/route.js deleted file mode 100644 index 9d8e31cd1..000000000 --- a/src/util/route.js +++ /dev/null @@ -1,151 +0,0 @@ -/* @flow */ - -import type VueRouter from '../index' -import { stringifyQuery } from './query' - -const trailingSlashRE = /\/?$/ - -export function createRoute ( - record: ?RouteRecord, - location: Location, - redirectedFrom?: ?Location, - router?: VueRouter -): Route { - const stringifyQuery = router && router.options.stringifyQuery - - let query: any = location.query || {} - try { - query = clone(query) - } catch (e) {} - - const route: Route = { - name: location.name || (record && record.name), - meta: (record && record.meta) || {}, - path: location.path || '/', - hash: location.hash || '', - query, - params: location.params || {}, - fullPath: getFullPath(location, stringifyQuery), - matched: record ? formatMatch(record) : [] - } - if (redirectedFrom) { - route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery) - } - return Object.freeze(route) -} - -function clone (value) { - if (Array.isArray(value)) { - return value.map(clone) - } else if (value && typeof value === 'object') { - const res = {} - for (const key in value) { - res[key] = clone(value[key]) - } - return res - } else { - return value - } -} - -// the starting route that represents the initial state -export const START = createRoute(null, { - path: '/' -}) - -function formatMatch (record: ?RouteRecord): Array<RouteRecord> { - const res = [] - while (record) { - res.unshift(record) - record = record.parent - } - return res -} - -function getFullPath ( - { path, query = {}, hash = '' }, - _stringifyQuery -): string { - const stringify = _stringifyQuery || stringifyQuery - return (path || '/') + stringify(query) + hash -} - -export function isSameRoute (a: Route, b: ?Route, onlyPath: ?boolean): boolean { - if (b === START) { - return a === b - } else if (!b) { - return false - } else if (a.path && b.path) { - return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath || - a.hash === b.hash && - isObjectEqual(a.query, b.query)) - } else if (a.name && b.name) { - return ( - a.name === b.name && - (onlyPath || ( - a.hash === b.hash && - isObjectEqual(a.query, b.query) && - isObjectEqual(a.params, b.params)) - ) - ) - } else { - return false - } -} - -function isObjectEqual (a = {}, b = {}): boolean { - // handle null value #1566 - if (!a || !b) return a === b - const aKeys = Object.keys(a).sort() - const bKeys = Object.keys(b).sort() - if (aKeys.length !== bKeys.length) { - return false - } - return aKeys.every((key, i) => { - const aVal = a[key] - const bKey = bKeys[i] - if (bKey !== key) return false - const bVal = b[key] - // query values can be null and undefined - if (aVal == null || bVal == null) return aVal === bVal - // check nested equality - if (typeof aVal === 'object' && typeof bVal === 'object') { - return isObjectEqual(aVal, bVal) - } - return String(aVal) === String(bVal) - }) -} - -export function isIncludedRoute (current: Route, target: Route): boolean { - return ( - current.path.replace(trailingSlashRE, '/').indexOf( - target.path.replace(trailingSlashRE, '/') - ) === 0 && - (!target.hash || current.hash === target.hash) && - queryIncludes(current.query, target.query) - ) -} - -function queryIncludes (current: Dictionary<string>, target: Dictionary<string>): boolean { - for (const key in target) { - if (!(key in current)) { - return false - } - } - return true -} - -export function handleRouteEntered (route: Route) { - for (let i = 0; i < route.matched.length; i++) { - const record = route.matched[i] - for (const name in record.instances) { - const instance = record.instances[name] - const cbs = record.enteredCbs[name] - if (!instance || !cbs) continue - delete record.enteredCbs[name] - for (let i = 0; i < cbs.length; i++) { - if (!instance._isBeingDestroyed) cbs[i](instance) - } - } - } -} diff --git a/src/util/scroll.js b/src/util/scroll.js deleted file mode 100644 index d1adeb310..000000000 --- a/src/util/scroll.js +++ /dev/null @@ -1,175 +0,0 @@ -/* @flow */ - -import type Router from '../index' -import { assert } from './warn' -import { getStateKey, setStateKey } from './state-key' -import { extend } from './misc' - -const positionStore = Object.create(null) - -export function setupScroll () { - // Prevent browser scroll behavior on History popstate - if ('scrollRestoration' in window.history) { - window.history.scrollRestoration = 'manual' - } - // Fix for #1585 for Firefox - // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678 - // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with - // window.location.protocol + '//' + window.location.host - // location.host contains the port and location.hostname doesn't - const protocolAndPath = window.location.protocol + '//' + window.location.host - const absolutePath = window.location.href.replace(protocolAndPath, '') - // preserve existing history state as it could be overriden by the user - const stateCopy = extend({}, window.history.state) - stateCopy.key = getStateKey() - window.history.replaceState(stateCopy, '', absolutePath) - window.addEventListener('popstate', handlePopState) - return () => { - window.removeEventListener('popstate', handlePopState) - } -} - -export function handleScroll ( - router: Router, - to: Route, - from: Route, - isPop: boolean -) { - if (!router.app) { - return - } - - const behavior = router.options.scrollBehavior - if (!behavior) { - return - } - - if (process.env.NODE_ENV !== 'production') { - assert(typeof behavior === 'function', `scrollBehavior must be a function`) - } - - // wait until re-render finishes before scrolling - router.app.$nextTick(() => { - const position = getScrollPosition() - const shouldScroll = behavior.call( - router, - to, - from, - isPop ? position : null - ) - - if (!shouldScroll) { - return - } - - if (typeof shouldScroll.then === 'function') { - shouldScroll - .then(shouldScroll => { - scrollToPosition((shouldScroll: any), position) - }) - .catch(err => { - if (process.env.NODE_ENV !== 'production') { - assert(false, err.toString()) - } - }) - } else { - scrollToPosition(shouldScroll, position) - } - }) -} - -export function saveScrollPosition () { - const key = getStateKey() - if (key) { - positionStore[key] = { - x: window.pageXOffset, - y: window.pageYOffset - } - } -} - -function handlePopState (e) { - saveScrollPosition() - if (e.state && e.state.key) { - setStateKey(e.state.key) - } -} - -function getScrollPosition (): ?Object { - const key = getStateKey() - if (key) { - return positionStore[key] - } -} - -function getElementPosition (el: Element, offset: Object): Object { - const docEl: any = document.documentElement - const docRect = docEl.getBoundingClientRect() - const elRect = el.getBoundingClientRect() - return { - x: elRect.left - docRect.left - offset.x, - y: elRect.top - docRect.top - offset.y - } -} - -function isValidPosition (obj: Object): boolean { - return isNumber(obj.x) || isNumber(obj.y) -} - -function normalizePosition (obj: Object): Object { - return { - x: isNumber(obj.x) ? obj.x : window.pageXOffset, - y: isNumber(obj.y) ? obj.y : window.pageYOffset - } -} - -function normalizeOffset (obj: Object): Object { - return { - x: isNumber(obj.x) ? obj.x : 0, - y: isNumber(obj.y) ? obj.y : 0 - } -} - -function isNumber (v: any): boolean { - return typeof v === 'number' -} - -const hashStartsWithNumberRE = /^#\d/ - -function scrollToPosition (shouldScroll, position) { - const isObject = typeof shouldScroll === 'object' - if (isObject && typeof shouldScroll.selector === 'string') { - // getElementById would still fail if the selector contains a more complicated query like #main[data-attr] - // but at the same time, it doesn't make much sense to select an element with an id and an extra selector - const el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line - ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line - : document.querySelector(shouldScroll.selector) - - if (el) { - let offset = - shouldScroll.offset && typeof shouldScroll.offset === 'object' - ? shouldScroll.offset - : {} - offset = normalizeOffset(offset) - position = getElementPosition(el, offset) - } else if (isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll) - } - } else if (isObject && isValidPosition(shouldScroll)) { - position = normalizePosition(shouldScroll) - } - - if (position) { - // $flow-disable-line - if ('scrollBehavior' in document.documentElement.style) { - window.scrollTo({ - left: position.x, - top: position.y, - // $flow-disable-line - behavior: shouldScroll.behavior - }) - } else { - window.scrollTo(position.x, position.y) - } - } -} diff --git a/src/util/state-key.js b/src/util/state-key.js deleted file mode 100644 index be9144d74..000000000 --- a/src/util/state-key.js +++ /dev/null @@ -1,22 +0,0 @@ -/* @flow */ -import { inBrowser } from './dom' - -// use User Timing api (if present) for more accurate key precision -const Time = - inBrowser && window.performance && window.performance.now - ? window.performance - : Date - -export function genStateKey (): string { - return Time.now().toFixed(3) -} - -let _key: string = genStateKey() - -export function getStateKey () { - return _key -} - -export function setStateKey (key: string) { - return (_key = key) -} diff --git a/src/util/warn.js b/src/util/warn.js deleted file mode 100644 index 95564c1a9..000000000 --- a/src/util/warn.js +++ /dev/null @@ -1,14 +0,0 @@ -/* @flow */ - -export function assert (condition: any, message: string) { - if (!condition) { - throw new Error(`[vue-router] ${message}`) - } -} - -export function warn (condition: any, message: string) { - if (!condition) { - typeof console !== 'undefined' && console.warn(`[vue-router] ${message}`) - } -} - diff --git a/test/.eslintrc b/test/.eslintrc deleted file mode 100644 index 52939e2ad..000000000 --- a/test/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "env": { - "jasmine": true - } -} diff --git a/test/e2e/.eslintrc b/test/e2e/.eslintrc deleted file mode 100644 index e5a34aec6..000000000 --- a/test/e2e/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "env": { - "browser": true - } -} diff --git a/test/e2e/browserstack-send-status.js b/test/e2e/browserstack-send-status.js deleted file mode 100644 index bc45fd871..000000000 --- a/test/e2e/browserstack-send-status.js +++ /dev/null @@ -1,87 +0,0 @@ -const axios = require('axios') - -const BS_USER = process.env.BS_USER -const BS_KEY = process.env.BS_KEY - -function getKey (client) { - // const { capabilities, currentTest } = client - // originally i wanted to use this but it turns out the information changes - // on the afterEach, making the key non valid. But because every environment - // runs on a different thread, the sessionMap object is only shared for a given - // environment, so only using the name of the test (currentTest.module) seems to be - // enough - // return `${capabilities.platform}::${capabilities.browserName}@${ - // capabilities.version - // } ${currentTest.module}: ${currentTest.name}` - - return `${client.currentTest.module}: ${client.currentTest.name}` -} - -function shouldSkipBrowserstackReporting (client) { - return !BS_USER || !BS_KEY || client.options.selenium_port !== 80 -} - -/** - * Generates an object with beforeEach and afterEach functions to be added - * to every test suite. It cannot be added globably because these must be - * executed before each test (instead of each test suite as it does in globalModules) - */ -module.exports = function sendStatus () { - const sessionMap = Object.create(null) - - return { - beforeEach (browser, cb) { - // avoid running if missing credentials - if (shouldSkipBrowserstackReporting(this.client)) return cb() - // retrieve the session and save it to the map - const key = getKey(this.client) - browser.session(({ sessionId }) => { - sessionMap[key] = sessionId - cb() - }) - }, - - afterEach (browser, cb) { - // avoid running if missing credentials - if (shouldSkipBrowserstackReporting(this.client)) return cb() - const key = getKey(this.client) - const { results } = this.client.currentTest - const sessionId = sessionMap[key] - - if (!sessionId) { - console.warn('❌ Cannot find sessionId for ' + key) - return cb() - } - - if (results.errors > 0 || results.failed > 0) { - const reason = results.lastError.message - console.log('Found failed test', reason) - axios - .put( - `https://api.browserstack.com/automate/sessions/${sessionId}.json`, - { - // change the name so it's easier to find - name: key, - status: 'failed', - reason - }, - { - auth: { - username: BS_USER, - password: BS_KEY - } - } - ) - .catch(err => { - console.log('❌ Failed changing status for sessions', err) - }) - .then(() => { - console.log('✅ Sent for', sessionId) - cb() - }) - } else { - cb() - } - } - } -} diff --git a/test/e2e/nightwatch.browserstack.js b/test/e2e/nightwatch.browserstack.js deleted file mode 100644 index 7289146e3..000000000 --- a/test/e2e/nightwatch.browserstack.js +++ /dev/null @@ -1,125 +0,0 @@ -/** - * Running tests on remote browsers - */ - -const BS_USER = process.env.BS_USER -const BS_KEY = process.env.BS_KEY - -const nwConf = { - src_folders: ['test/e2e/specs'], - output_folder: 'test/e2e/reports', - custom_commands_path: ['node_modules/nightwatch-helpers/commands'], - custom_assertions_path: ['node_modules/nightwatch-helpers/assertions'], - // set to true when testing on multiple browsers (-e chrome,firefox) to display tests as they pass instead of waiting for everything to be finished - live_output: true, - - // this couldn't work at the end, so we used ./browserstack-send-status.js - // globals_path: resolve(__dirname, './globalModules.js'), - - selenium: { - start_process: false, - host: 'hub-cloud.browserstack.com', - port: 80 - }, - - common_capabilities: { - 'browserstack.user': BS_USER, - 'browserstack.key': BS_KEY, - name: 'Bstack-[Nightwatch] Vue Router Parallel Test', - 'browserstack.local': true, - 'browserstack.video': false, - acceptSslCerts: true, - resolution: '1024x768' - }, - - test_settings: { - // default: {}, - - chrome: { - desiredCapabilities: { - browser: 'chrome' - } - }, - - chromeQt: { - desiredCapabilities: { - browser: 'chrome', - browser_version: '49.0' - } - }, - - firefox: { - desiredCapabilities: { - browser: 'firefox' - } - }, - - safari: { - desiredCapabilities: { - os: 'OS X', - os_version: 'Mojave', - browser: 'Safari', - browser_version: '12.0' - } - }, - - safari6: { - desiredCapabilities: { - os: 'OS X', - os_version: 'Lion', - browser: 'Safari', - browser_version: '6.0' - } - }, - - ie9: { - desiredCapabilities: { - browser: 'internet explorer', - browser_version: '9' - // name: 'Bstack-[Nightwatch] Vue Router', - // 'browserstack.video': true - } - }, - - ie: { - desiredCapabilities: { - browser: 'internet explorer', - browser_version: '11' - // name: 'Bstack-[Nightwatch] Vue Router', - // 'browserstack.video': true - } - }, - - android44: { - desiredCapabilities: { - device: 'Google Nexus 5', - realMobile: 'true', - os_version: '4.4' - } - }, - - ios7: { - desiredCapabilities: { - device: 'iPhone 7', - realMobile: 'true', - os_version: '10' - } - } - } -} - -// Code to copy seleniumhost/port into test settings -for (const setting in nwConf.test_settings) { - const config = nwConf.test_settings[setting] - config['selenium_host'] = nwConf.selenium.host - config['selenium_port'] = nwConf.selenium.port - - // merge common_capabilities - for (const key in nwConf.common_capabilities) { - // fallback to common_capabilities - config['desiredCapabilities'][key] = - config['desiredCapabilities'][key] || nwConf.common_capabilities[key] - } -} - -module.exports = nwConf diff --git a/test/e2e/nightwatch.config.js b/test/e2e/nightwatch.config.js deleted file mode 100644 index 58f2ca73b..000000000 --- a/test/e2e/nightwatch.config.js +++ /dev/null @@ -1,76 +0,0 @@ -// yarn nightwatch -e chrome,safari,firefox - -module.exports = { - src_folders: ['test/e2e/specs'], - output_folder: 'test/e2e/reports', - custom_commands_path: ['node_modules/nightwatch-helpers/commands'], - custom_assertions_path: ['node_modules/nightwatch-helpers/assertions'], - // set to true when testing on multiple browsers (-e chrome,firefox) to display tests as they pass instead of waiting for everything to be finished - live_output: false, - - selenium: { - start_process: true, - server_path: require('selenium-server').path, - host: '127.0.0.1', - port: 4444, - cli_args: { - 'webdriver.chrome.driver': require('chromedriver').path, - 'webdriver.gecko.driver': require('geckodriver').path - } - }, - - test_settings: { - default: { - selenium_port: 4444, - selenium_host: 'localhost', - silent: true, - screenshots: { - enabled: true, - on_failure: true, - on_error: false, - path: 'test/e2e/screenshots' - }, - desiredCapabilities: { - browserName: 'chrome', - acceptSslCerts: true, - chromeOptions: { - // https://github.com/nightwatchjs/nightwatch/releases/tag/v1.1.12 - w3c: false, - args: ['window-size=1280,800', 'headless'] - } - } - }, - - chrome: { - desiredCapabilities: { - browserName: 'chrome', - acceptSslCerts: true, - chromeOptions: { - // https://github.com/nightwatchjs/nightwatch/releases/tag/v1.1.12 - w3c: false, - args: ['window-size=1280,800'] - } - } - }, - - safari: { - desiredCapabilities: { - browserName: 'safari', - acceptSslCerts: true - } - }, - - firefox: { - desiredCapabilities: { - browserName: 'firefox', - acceptSslCerts: true - } - }, - - ie: { - desiredCapabilities: { - browser: 'internet explorer' - } - } - } -} diff --git a/test/e2e/runner.js b/test/e2e/runner.js deleted file mode 100644 index 8f552be51..000000000 --- a/test/e2e/runner.js +++ /dev/null @@ -1,157 +0,0 @@ -/** - * Running tests - * - * By default tests are run locally on chrome headless - * $ node test/e2e/runner.js - * - * You can run a specific test by passing it, or pass various tests - * $ node test/e2e/runner.js test/e2e/specs/basic.js test/e2e/specs/redirect.js - * - * You can specify a list of browsers to run from nightwatch.config.js with -e separated by a comma - * $ node test/e2e/runner.js -e safari,firefox - * - * If you are already running the dev server with `yarn run serve`, you can pass the --dev option to avoid launching the server - * $ node test/e2e/runner.js --dev - * **Make sure to pass the option at the end** - * - * __For maintainers only__ - * You can trigger tests on Browserstack on other browsers by passing the --local option - * It's also required to pass the list of browsers to test on to avoid launching too many tests. Available options are located inside nightwatch.browserstack.js - * $ node test/e2e/runner.js --local -e ie,chrome50 - */ - -require('dotenv').config() -const { resolve } = require('path') -const Nightwatch = require('nightwatch') -const args = process.argv.slice(2) - -// if we are running yarn dev locally, we can pass --dev to avoid launching another server instance -const server = - args.indexOf('--dev') > -1 ? null : require('../../examples/server') - -// allow running browserstack local -const isLocal = args.indexOf('--local') > -1 - -const DEFAULT_CONFIG = './nightwatch.json' -const NW_CONFIG = isLocal - ? resolve(__dirname, './nightwatch.browserstack.js') - : resolve(__dirname, './nightwatch.config.js') - -// check -c option is passed when usig multiple environments -if (args.indexOf('-c') < 0) { - // check if multiple envs are provided. The way Nightwatch works - // requires to explicitely provide the conf - const envs = args[args.indexOf('-e') + 1] - if (envs && envs.indexOf(',') > -1) { - console.warn( - `Specify the conf when providing multiple browsers:\n$ yarn run test:e2e ${args.join( - ' ' - )} -c ${NW_CONFIG}` - ) - process.exit(1) - } -} else if (isLocal) { - const conf = args[args.indexOf('-c') + 1] - if (resolve('.', conf) !== NW_CONFIG) { - console.warn('The passed config should be', NW_CONFIG) - process.exit(1) - } -} - -function adaptArgv (argv) { - // take every remaining argument and treat it as a test file - // this allows to run `node test/e2e/runner.js test/e2e/basic.js` - argv.retries = process.env.CI ? 1 : 0 - argv.test = argv['_'].slice(0) - - if (argv.c === DEFAULT_CONFIG && argv.config === DEFAULT_CONFIG) { - argv.config = argv.c = NW_CONFIG - } - // Nightwatch does not accept an array with one element - if (argv.test.length === 1) argv.test = argv.test[0] - - // debugging easily - // console.log(argv) - // process.exit(0) -} - -process.mainModule.filename = resolve( - __dirname, - '../../node_modules/.bin/nightwatch' -) - -if (isLocal) { - if (isLocal && (!process.env.BS_USER || !process.env.BS_KEY)) { - console.log( - 'Hey!\n', - 'You are missing credentials for Browserstack.\n', - 'If you are a contributor, this is normal, credentials are private. These tests must be run by a maintainer of vue-router', - 'If you are a maintainer, make sure to create your `.env` file with both `BS_USER` and `BS_KEY` variables!' - ) - // fail if testing locally - process.exit(process.env.CI ? 0 : 1) - } - - let bsLocal - const browserstack = require('browserstack-local') - Nightwatch.bs_local = bsLocal = new browserstack.Local() - bsLocal.start({ key: process.env.BS_KEY }, error => { - if (error) throw error - - console.log('Connected. Now testing...') - try { - Nightwatch.cli(argv => { - adaptArgv(argv) - Nightwatch.CliRunner(argv) - .setup(null, () => { - // NOTE: I don't know when this is running or if it does - // Code to stop browserstack local after end of parallel test - bsLocal.stop(() => { - server && server.close() - process.exit(0) - }) - }) - .runTests() - .then(() => { - // Code to stop browserstack local after end of single test - bsLocal.stop(() => { - server && server.close() - process.exit(0) - }) - }) - .catch(() => { - server && server.close() - // fail execution - process.exit(1) - }) - }) - } catch (err) { - console.error(err) - bsLocal.stop(() => { - process.exit(1) - }) - } - }) -} else { - // create the Nightwatch CLI runner - Nightwatch.cli(argv => { - adaptArgv(argv) - const runner = Nightwatch.CliRunner(argv) - - // setup and run tests - runner - .setup() - .startWebDriver() - .then(() => runner.runTests()) - .then(() => { - runner.stopWebDriver() - server && server.close() - process.exit(0) - }) - .catch(err => { - server && server.close() - console.error(err) - process.exit(1) - }) - }) -} diff --git a/test/e2e/specs/.prettierrc b/test/e2e/specs/.prettierrc deleted file mode 100644 index 963354f23..000000000 --- a/test/e2e/specs/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "printWidth": 120 -} diff --git a/test/e2e/specs/active-links.js b/test/e2e/specs/active-links.js deleted file mode 100644 index 829289f1c..000000000 --- a/test/e2e/specs/active-links.js +++ /dev/null @@ -1,91 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history', 'active', 'router-link'], - - /** @type {import('nightwatch').NightwatchTest} */ - 'active links': function (browser) { - browser - .url('http://localhost:8080/active-links/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 22) - // assert correct href with base - .assert.attributeContains('li:nth-child(1) a', 'href', '/active-links/') - .assert.attributeContains('li:nth-child(2) a', 'href', '/active-links/') - .assert.attributeContains('li:nth-child(3) a', 'href', '/active-links/users') - .assert.attributeContains('li:nth-child(4) a', 'href', '/active-links/users') - .assert.attributeContains('li:nth-child(5) a', 'href', '/active-links/users/evan') - .assert.attributeContains('li:nth-child(6) a', 'href', '/active-links/users/evan#foo') - .assert.attributeContains('li:nth-child(7) a', 'href', '/active-links/users/evan?foo=bar') - .assert.attributeContains('li:nth-child(8) a', 'href', '/active-links/users/evan?foo=bar') - .assert.attributeContains('li:nth-child(9) a', 'href', '/active-links/users/evan?foo=bar&baz=qux') - .assert.attributeContains('li:nth-child(10) a', 'href', '/active-links/about') - .assert.attributeContains('li:nth-child(11) a', 'href', '/active-links/about') - .assert.attributeContains('li:nth-child(12) a', 'href', '/active-links/gallery') - .assert.attributeContains('li:nth-child(13) a', 'href', '/active-links/gallery/') - .assert.attributeContains('li:nth-child(14) a', 'href', '/active-links/gallery/image2') - .assert.attributeContains('li:nth-child(15) a', 'href', '/active-links/gallery/image1') - .assert.attributeContains('li:nth-child(16) a', 'href', '/active-links/redirect-gallery') - .assert.attributeContains('li:nth-child(17) a', 'href', '/active-links/redirect-gallery') - .assert.attributeContains('li:nth-child(18) a', 'href', '/active-links/redirect-image') - .assert.attributeContains('li:nth-child(19) a', 'href', '/active-links/redirect-image') - .assert.containsText('.view', 'Home') - .assert.not.attributeEquals(`li:nth-child(3) a`, 'aria-current', 'page') - - assertActiveLinks(1, [1, 2], null, [1, 2]) - assertActiveLinks(2, [1, 2], null, [1, 2]) - assertActiveLinks(3, [1, 3, 4], null, [3, 4]) - assertActiveLinks(4, [1, 3, 4], null, [3, 4]) - assertActiveLinks(5, [1, 3, 5], null, [5]) - assertActiveLinks(6, [1, 3, 5, 6], null, [6]) - assertActiveLinks(7, [1, 3, 5, 7, 8], null, [7, 8]) - assertActiveLinks(8, [1, 3, 5, 7, 8], null, [7, 8]) - assertActiveLinks(9, [1, 3, 5, 7, 9], null, [9]) - assertActiveLinks(10, [1, 10], [11], [10], [11]) - assertActiveLinks(11, [1, 10], [11], [10], [11]) - - // redirects - assertActiveLinks(12, [1, 12, 13, 15], null, [15]) - assertActiveLinks(13, [1, 12, 13, 15], null, [15]) - assertActiveLinks(14, [1, 12, 13, 14], null, [14]) - assertActiveLinks(15, [1, 12, 13, 15], null, [15]) - // different level redirect - assertActiveLinks(16, [1, 12, 13, 15], null, [15]) - assertActiveLinks(17, [1, 12, 13, 15], null, [15]) - assertActiveLinks(18, [1, 12, 13, 15], null, [15]) - assertActiveLinks(19, [1, 12, 13, 15], null, [15]) - - // exact-path - assertActiveLinks(20, [20, 21], null, [20, 21]) - assertActiveLinks(21, [20, 21], null, [20, 21]) - assertActiveLinks(22, [22], null, [22]) - - browser.end() - - function assertActiveLinks (n, activeA, activeLI, exactActiveA, exactActiveLI) { - browser.click(`li:nth-child(${n}) a`) - activeA.forEach(i => { - browser.assert.cssClassPresent(`li:nth-child(${i}) a`, 'router-link-active') - }) - activeLI && - activeLI.forEach(i => { - browser.assert.cssClassPresent(`li:nth-child(${i})`, 'router-link-active') - }) - exactActiveA.forEach(i => { - browser.assert - .cssClassPresent(`li:nth-child(${i}) a`, 'router-link-exact-active') - .assert.cssClassPresent(`li:nth-child(${i}) a`, 'router-link-active') - .assert.attributeEquals(`li:nth-child(${i}) a`, 'aria-current', 'page') - }) - exactActiveLI && - exactActiveLI.forEach(i => { - browser.assert - .cssClassPresent(`li:nth-child(${i})`, 'router-link-exact-active') - .assert.cssClassPresent(`li:nth-child(${i})`, 'router-link-active') - .assert.attributeEquals(`li:nth-child(${i}) a`, 'aria-current', 'page') - }) - } - } -} diff --git a/test/e2e/specs/auth-flow.js b/test/e2e/specs/auth-flow.js deleted file mode 100644 index ad9b74f0e..000000000 --- a/test/e2e/specs/auth-flow.js +++ /dev/null @@ -1,60 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'auth flow': function (browser) { - browser - .url('http://localhost:8080/auth-flow/') - .waitForElementVisible('#app', 1000) - .assert.containsText('#app p', 'You are logged out') - - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/auth-flow/login?redirect=%2Fdashboard') - .assert.containsText('#app h2', 'Login') - .assert.containsText('#app p', 'You need to login first.') - - .click('button') - .assert.urlEquals('http://localhost:8080/auth-flow/login?redirect=%2Fdashboard') - .assert.elementPresent('.error') - - .setValue('input[type=password]', 'password1') - .click('button') - .assert.urlEquals('http://localhost:8080/auth-flow/dashboard') - .assert.containsText('#app h2', 'Dashboard') - .assert.containsText('#app p', 'Yay you made it!') - - // reload - .url('http://localhost:8080/auth-flow/') - .waitForElementVisible('#app', 1000) - .assert.containsText('#app p', 'You are logged in') - - // navigate when logged in - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/auth-flow/dashboard') - .assert.containsText('#app h2', 'Dashboard') - .assert.containsText('#app p', 'Yay you made it!') - - // directly visit dashboard when logged in - .url('http://localhost:8080/auth-flow/dashboard') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/auth-flow/dashboard') - .assert.containsText('#app h2', 'Dashboard') - .assert.containsText('#app p', 'Yay you made it!') - - // log out - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/auth-flow/') - .assert.containsText('#app p', 'You are logged out') - - // directly visit dashboard when logged out - .url('http://localhost:8080/auth-flow/dashboard') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/auth-flow/login?redirect=%2Fdashboard') - .assert.containsText('#app h2', 'Login') - .assert.containsText('#app p', 'You need to login first.') - .end() - } -} diff --git a/test/e2e/specs/basic.js b/test/e2e/specs/basic.js deleted file mode 100644 index 1a623c0c6..000000000 --- a/test/e2e/specs/basic.js +++ /dev/null @@ -1,104 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - basic: function (browser) { - browser - .url('http://localhost:8080/basic/') - .waitForElementVisible('#app', 1000) - .assert.count('li', 12) - .assert.count('li a', 12) - // assert correct href with base - .assert.attributeContains('li:nth-child(1) a', 'href', '/basic/') - .assert.attributeContains('li:nth-child(2) a', 'href', '/basic/foo') - .assert.attributeContains('li:nth-child(3) a', 'href', '/basic/bar') - .assert.attributeContains('li:nth-child(4) a', 'href', '/basic/bar') - .assert.attributeContains('li:nth-child(5) a', 'href', '/basic/%C3%A9') - .assert.attributeContains('li:nth-child(6) a', 'href', '/basic/%C3%A9?t=%25%C3%B1') - .assert.attributeContains('li:nth-child(7) a', 'href', '/basic/%C3%A9#%25%C3%B1') - .assert.attributeContains('li:nth-child(8) a', 'href', '/basic/foo') - .assert.attributeContains('li:nth-child(10) a', 'href', '/basic/query/A%') - .assert.containsText('.view', 'home') - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/basic/foo') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/basic/bar') - .assert.containsText('.view', 'bar') - - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/basic/') - .assert.containsText('.view', 'home') - - .click('li:nth-child(4) a') - .assert.urlEquals('http://localhost:8080/basic/bar') - .assert.containsText('.view', 'bar') - - .click('li:nth-child(5) a') - .assert.urlEquals('http://localhost:8080/basic/%C3%A9') - .assert.containsText('.view', 'unicode') - - // check initial visit - .url('http://localhost:8080/basic/foo') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'foo') - .url('http://localhost:8080/basic/%C3%A9') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'unicode') - - // regression onComplete - // https://github.com/vuejs/vue-router/issues/2721 - .assert.containsText('#counter', '0') - .click('#navigate-btn') - .assert.containsText('#counter', '1') - .click('#navigate-btn') - .assert.containsText('#counter', '2') - - // scoped slot - .assert.containsText('li:nth-child(8) a', '/foo (with v-slot)') - .click('li:nth-child(8) a') - .assert.urlEquals('http://localhost:8080/basic/foo') - .assert.containsText('.view', 'foo') - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/basic/foo') - .assert.containsText('.view', 'foo') - .assert.cssClassPresent('li:nth-child(8)', 'active') - .assert.cssClassPresent('li:nth-child(8)', 'exact-active') - .assert.attributeEquals('li:nth-child(8) a', 'class', '') - - // encoded percentage as path param - // https://github.com/vuejs/vue-router/issues/2725 - .url('http://localhost:8080/basic/query/A%25') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'query: "A%"') - .click('li:nth-child(10) a') - .assert.urlEquals('http://localhost:8080/basic/query/A%25') - .assert.containsText('.view', 'query: "A%"') - - // Listener cleanup - .assert.containsText('#popstate-count', '1 popstate listeners') - .click('#unmount') - .assert.containsText('#popstate-count', '0 popstate listeners') - - .end() - }, - - 'cancelling ongoing navigations': function (browser) { - browser - .url('http://localhost:8080/basic/?delay=200') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'home') - // go to foo with a delay - .click('li:nth-child(12) a') - .click('li:nth-child(11) a') - .waitFor(300) - // we should stay at /basic after the delay - .assert.urlEquals('http://localhost:8080/basic/?delay=200') - .assert.containsText('.view', 'home') - } -} diff --git a/test/e2e/specs/composables.js b/test/e2e/specs/composables.js deleted file mode 100644 index cca4b151d..000000000 --- a/test/e2e/specs/composables.js +++ /dev/null @@ -1,49 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'useRoute() + useRouter()': function (browser) { - browser - .url('http://localhost:8080/composables/') - .waitForElementVisible('#app', 1000) - .assert.count('li', 4) - .assert.count('li a', 4) - .assert.containsText('.view', 'Home') - - .click('li:nth-child(2) a') - .assert.containsText('.view', 'About') - .click('li:nth-child(1) a') - .assert.containsText('.view', 'Home') - .assert.containsText('#start-route', '/') - .assert.containsText('#fullpath', '/') - - .click('button#nav') - .assert.containsText('#fullpath', '/?n=1') - - .end() - }, - - 'useLink()': function (browser) { - browser - .url('http://localhost:8080/composables/') - .waitForElementVisible('#app', 1000) - - .assert.containsText('.view', 'Home') - .assert.containsText('#nested-active', '/composables/nested: false, false') - .click('li:nth-child(3) a') - .assert.containsText('.view', 'NestedEmpty') - .assert.containsText('#nested-active', '/composables/nested: true, true') - .click('li:nth-child(4) a') - .assert.containsText('.view', 'NestedA') - .assert.containsText('#nested-active', '/composables/nested: true, false') - .click('#nested-active') - .assert.containsText('.view', 'NestedEmpty') - .assert.containsText('#nested-active', '/composables/nested: true, true') - - .end() - } - -} diff --git a/test/e2e/specs/data-fetching.js b/test/e2e/specs/data-fetching.js deleted file mode 100644 index c2e678da3..000000000 --- a/test/e2e/specs/data-fetching.js +++ /dev/null @@ -1,35 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': [], - - 'data fetching': function (browser) { - browser - .url('http://localhost:8080/data-fetching/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 4) - .assert.containsText('.view', 'home') - - .click('li:nth-child(2) a') - .waitForElementNotPresent('.loading', 500) - .assert.containsText('.post h2', 'sunt aut facere') - .assert.containsText('.post p', 'quia et suscipit') - - .click('li:nth-child(3) a') - .waitForElementNotPresent('.loading', 500) - .assert.containsText('.post h2', 'qui est esse') - .assert.containsText('.post p', 'est rerum tempore') - - .click('li:nth-child(4) a') - .waitForElementNotPresent('.loading', 500) - .assert.elementNotPresent('.content') - .assert.containsText('.error', 'Post not found') - - .click('li:nth-child(1) a') - .assert.elementNotPresent('.post') - .assert.containsText('.view', 'home') - .end() - } -} diff --git a/test/e2e/specs/hash-mode.js b/test/e2e/specs/hash-mode.js deleted file mode 100644 index e8e3f6184..000000000 --- a/test/e2e/specs/hash-mode.js +++ /dev/null @@ -1,78 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['hash', 'ie9-fail'], - - 'Hash mode': function (browser) { - browser - .url('http://localhost:8080/hash-mode/') - .waitForElementVisible('#app', 1000) - .assert.count('li', 12) - .assert.count('li a', 11) - .assert.attributeContains('li:nth-child(1) a', 'href', '/hash-mode/#/') - .assert.attributeContains('li:nth-child(2) a', 'href', '/hash-mode/#/foo') - .assert.attributeContains('li:nth-child(3) a', 'href', '/hash-mode/#/bar') - .assert.attributeContains('li:nth-child(5) a', 'href', '/hash-mode/#/%C3%A9') - .assert.attributeContains('li:nth-child(6) a', 'href', '/hash-mode/#/%C3%A9/%C3%B1') - .assert.attributeContains('li:nth-child(7) a', 'href', '/hash-mode/#/%C3%A9/%C3%B1?t=%25%C3%B1') - .assert.attributeContains('li:nth-child(9) a', 'href', '/hash-mode/#/query/A%') - .assert.containsText('.view', 'home') - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/hash-mode/#/foo') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/hash-mode/#/bar') - .assert.containsText('.view', 'bar') - - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/hash-mode/#/') - .assert.containsText('.view', 'home') - - .click('li:nth-child(4)') - .assert.urlEquals('http://localhost:8080/hash-mode/#/bar') - .assert.containsText('.view', 'bar') - - // check initial visit - .url('http://localhost:8080/hash-mode/#/foo') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'foo') - // direct visit encoded unicode - .url('http://localhost:8080/hash-mode/#/%C3%A9') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'unicode') - // direct visit raw unicode - .url('http://localhost:8080/hash-mode/#/%C3%A9/%C3%B1') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'unicode: ñ') - // TODO: Doesn't seem to work on PhantomJS - // .click('li:nth-child(7)') - // .assert.urlEquals('http://localhost:8080/hash-mode/#/%C3%A9/%C3%B1?t=%25') - // .assert.containsText('.view', 'unicode: ñ') - // .assert.containsText('#query-t', '%') - // direct visit - .url('http://localhost:8080/hash-mode/#/%C3%A9/%C3%B1?t=%25') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'unicode: ñ') - .assert.containsText('#query-t', '%') - - // percentage as path param - // https://github.com/vuejs/vue-router/issues/2725 - .url('http://localhost:8080/hash-mode/#/query/A%25') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'query: "A%"') - .click('li:nth-child(9) a') - .assert.urlEquals('http://localhost:8080/hash-mode/#/query/A%25') - .assert.containsText('.view', 'query: "A%"') - - // Listener cleanup - .assert.containsText('#popstate-count', '1 popstate listeners') - .click('#unmount') - .assert.containsText('#popstate-count', '0 popstate listeners') - - .end() - } -} diff --git a/test/e2e/specs/hash-scroll-behavior.js b/test/e2e/specs/hash-scroll-behavior.js deleted file mode 100644 index 98cf338b1..000000000 --- a/test/e2e/specs/hash-scroll-behavior.js +++ /dev/null @@ -1,91 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['hash', 'ie9-fail'], - - 'scroll behavior': function (browser) { - browser - .url('http://localhost:8080/hash-scroll-behavior/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 5) - .assert.containsText('.view', 'home') - - .execute(function () { - window.scrollTo(0, 100) - }) - .click('li:nth-child(2) a') - .assert.containsText('.view', 'foo') - .execute(function () { - window.scrollTo(0, 200) - window.history.back() - }) - .assert.containsText('.view', 'home') - .assert.evaluate( - function () { - return window.pageYOffset === 100 - }, - null, - 'restore scroll position on back' - ) - - // scroll on a popped entry - .execute(function () { - window.scrollTo(0, 50) - window.history.forward() - }) - .assert.containsText('.view', 'foo') - .assert.evaluate( - function () { - return window.pageYOffset === 200 - }, - null, - 'restore scroll position on forward' - ) - - .execute(function () { - window.history.back() - }) - .assert.containsText('.view', 'home') - .assert.evaluate( - function () { - return window.pageYOffset === 50 - }, - null, - 'restore scroll position on back again' - ) - - .click('li:nth-child(3) a') - .assert.evaluate( - function () { - return window.pageYOffset === 0 - }, - null, - 'scroll to top on new entry' - ) - - .click('li:nth-child(4) a') - .assert.evaluate( - function () { - return document.getElementById('anchor').getBoundingClientRect().top < 1 - }, - null, - 'scroll to anchor' - ) - - // scroll back to top so we can click the butotn - .execute(function () { - window.scrollTo(0, 0) - }) - .click('li:nth-child(5) a') - .assert.evaluate( - function () { - return document.getElementById('anchor2').getBoundingClientRect().top < 101 - }, - null, - 'scroll to anchor with offset' - ) - .end() - } -} diff --git a/test/e2e/specs/history-state.js b/test/e2e/specs/history-state.js deleted file mode 100644 index d5cd60e32..000000000 --- a/test/e2e/specs/history-state.js +++ /dev/null @@ -1,56 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'history state': function (browser) { - browser - .url('http://localhost:8080/scroll-behavior/') - .waitForElementVisible('#app', 1000) - - .execute(function () { - window.scrollTo(0, 100) - const key = window.history.state.key - window.history.replaceState({ key, foo: 'foo' }, '', window.location.pathname) - }) - .url('http://localhost:8080/scroll-behavior/') - .waitForElementVisible('#app', 1000) - .assert.evaluate(function () { - return window.history.state.foo === 'foo' - }, null, 'keeps existing state when reloading') - - // check on navigation - .url('http://localhost:8080/basic/') - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/basic/foo') - .execute(function () { - window.scrollTo(0, 100) - const key = window.history.state.key - window.history.replaceState({ key, foo: 'foo' }, '', window.location.pathname) - }) - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/basic/bar') - .execute(function () { - window.history.back() - }) - .assert.evaluate(function () { - return window.history.state.foo === 'foo' - }, null, 'keeps existing state when navigating back') - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/basic/bar') - .execute(function () { - window.scrollTo(0, 100) - const key = window.history.state.key - window.history.replaceState({ key, bar: 'bar' }, '', window.location.pathname) - }) - .click('li:nth-child(9) a') - .assert.urlEquals('http://localhost:8080/basic/foo') - .assert.evaluate(function () { - return window.history.state.bar === 'bar' - }, null, 'keeps existing state when replacing') - - .end() - } -} diff --git a/test/e2e/specs/keepalive-view.js b/test/e2e/specs/keepalive-view.js deleted file mode 100644 index 59602848e..000000000 --- a/test/e2e/specs/keepalive-view.js +++ /dev/null @@ -1,60 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': [], - - 'keepalive view': function (browser) { - browser - .url('http://localhost:8080/keepalive-view/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 10) - - .click('li:nth-child(1) a') - .assert.containsText('.view', 'index child1') - - .click('li:nth-child(2) a') - .assert.containsText('.view', 'index child2') - - .click('li:nth-child(3) a') - .assert.containsText('.view', 'home') - - // back to index child1 and check it - .click('li:nth-child(1) a') - .assert.containsText('.view', 'index child1') - - // beforeRouteEnter guard with keep alive - // https://github.com/vuejs/vue-router/issues/2561 - .click('li:nth-child(4) a') - .assert.containsText('.view', 'with-guard1: 1') - .click('li:nth-child(3) a') - .assert.containsText('.view', 'home') - .click('li:nth-child(5) a') - .assert.containsText('.view', 'with-guard2: 2') - .click('li:nth-child(4) a') - .assert.containsText('.view', 'with-guard1: 3') - - // keep-alive deeply nested router-views - // https://github.com/vuejs/vue-router/issues/2923 - .click('li:nth-child(6) a') - .assert.containsText('.view', 'index child1') - .click('li:nth-child(3) a') - .assert.containsText('.view', 'home') - .click('li:nth-child(7) a') - .assert.containsText('.view', 'index child2') - - // missing props in nested routes with keep alive - // https://github.com/vuejs/vue-router/issues/2301 - .click('li:nth-child(8) a') - .assert.containsText('.view', 'msg: from parent') - .click('li:nth-child(9) a') - .assert.containsText('.view', 'msg: from parent\nprops from route config is: from child') - .click('li:nth-child(10) a') - .assert.containsText('.view', 'no missing prop warn') - .click('li:nth-child(9) a') - .assert.containsText('.view', 'msg: from parent\nprops from route config is: from child') - - .end() - } -} diff --git a/test/e2e/specs/lazy-loading-before-mount.js b/test/e2e/specs/lazy-loading-before-mount.js deleted file mode 100644 index cb98dd7cd..000000000 --- a/test/e2e/specs/lazy-loading-before-mount.js +++ /dev/null @@ -1,17 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': [], - - 'lazy loading before mount': function (browser) { - browser - .url('http://localhost:8080/lazy-loading-before-mount/') - // wait for the Foo component to be resolved - .click('#load-button') - .waitForElementVisible('.foo', 1000) - .assert.containsText('.view', 'This is Foo') - .end() - } -} diff --git a/test/e2e/specs/lazy-loading.js b/test/e2e/specs/lazy-loading.js deleted file mode 100644 index 245d34233..000000000 --- a/test/e2e/specs/lazy-loading.js +++ /dev/null @@ -1,51 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'lazy loading': function (browser) { - browser - .url('http://localhost:8080/lazy-loading/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 5) - .assert.containsText('.view', 'home') - - .click('li:nth-child(2) a') - .assert.containsText('.view', 'This is Foo!') - - .click('li:nth-child(3) a') - .assert.containsText('.view', 'This is Bar!') - - .click('li:nth-child(1) a') - .assert.containsText('.view', 'home') - - .click('li:nth-child(4) a') - .assert.containsText('.view', 'This is Bar!') - .assert.containsText('.view h3', 'Baz') - - // test initial visit - .url('http://localhost:8080/lazy-loading/foo') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'This is Foo!') - - .url('http://localhost:8080/lazy-loading/bar/baz') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'This is Bar!') - .assert.containsText('.view h3', 'Baz') - - // lazy loading with dynamic params: https://github.com/vuejs/vue-router/issues/2719 - // direct visit - .url('http://localhost:8080/lazy-loading/a/b/c') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', '/a/b/c') - // coming from another url - .url('http://localhost:8080/lazy-loading/') - .waitForElementVisible('#app', 1000) - .click('li:nth-child(5) a') - .waitForElementVisible('#tagged-path', 1000) - .assert.containsText('.view', '/a/b/c') - .end() - } -} diff --git a/test/e2e/specs/multi-app.js b/test/e2e/specs/multi-app.js deleted file mode 100644 index a6b0a2af1..000000000 --- a/test/e2e/specs/multi-app.js +++ /dev/null @@ -1,49 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - basic: function (browser) { - browser - .url('http://localhost:8080/multi-app/') - .waitForElementVisible('#mount1', 1000) - .assert.containsText('#popcount', '0') - .click('#mount1') - .waitForElementVisible('#app-1 > *', 1000) - .assert.containsText('#popcount', '1') - .click('#mount2') - .waitForElementVisible('#app-2 > *', 1000) - .assert.containsText('#popcount', '2') - .click('#mount3') - .waitForElementVisible('#app-3 > *', 1000) - .assert.containsText('#popcount', '3') - - // They should all be displaying the home page - .assert.containsText('#app-1', 'home') - .assert.containsText('#app-2', 'home') - .assert.containsText('#app-3', 'home') - - // Navigate to foo route - .click('#app-1 li:nth-child(2) a') - .assert.containsText('#app-1', 'foo') - - .click('#app-2 li:nth-child(2) a') - .assert.containsText('#app-2', 'foo') - - .click('#app-3 li:nth-child(2) a') - .assert.containsText('#app-3', 'foo') - - // Unmount all apps - .assert.containsText('#popcount', '3') - .click('#unmount1') - .assert.containsText('#popcount', '2') - .click('#unmount2') - .assert.containsText('#popcount', '1') - .click('#unmount3') - .assert.containsText('#popcount', '0') - - .end() - } -} diff --git a/test/e2e/specs/named-routes.js b/test/e2e/specs/named-routes.js deleted file mode 100644 index e3bc9aae6..000000000 --- a/test/e2e/specs/named-routes.js +++ /dev/null @@ -1,42 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'named routes': function (browser) { - browser - .url('http://localhost:8080/named-routes/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 3) - // assert correct href with base - .assert.attributeContains('li:nth-child(1) a', 'href', '/named-routes/') - .assert.attributeContains('li:nth-child(2) a', 'href', '/named-routes/foo') - .assert.attributeContains('li:nth-child(3) a', 'href', '/named-routes/bar') - .assert.containsText('p', 'Current route name: home') - .assert.containsText('.view', 'Home') - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/named-routes/foo') - .assert.containsText('p', 'Current route name: foo') - .assert.containsText('.view', 'Foo') - - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/named-routes/bar/123') - .assert.containsText('p', 'Current route name: bar') - .assert.containsText('.view', 'Bar 123') - - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/named-routes/') - .assert.containsText('p', 'Current route name: home') - .assert.containsText('.view', 'Home') - - // check initial visit - .url('http://localhost:8080/named-routes/foo') - .waitForElementVisible('#app', 1000) - .assert.containsText('p', 'Current route name: foo') - .assert.containsText('.view', 'Foo') - .end() - } -} diff --git a/test/e2e/specs/named-views.js b/test/e2e/specs/named-views.js deleted file mode 100644 index 29a15d90c..000000000 --- a/test/e2e/specs/named-views.js +++ /dev/null @@ -1,41 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'named views': function (browser) { - browser - .url('http://localhost:8080/named-views/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 2) - // assert correct href with base - .assert.attributeContains('li:nth-child(1) a', 'href', '/named-views/') - .assert.attributeContains('li:nth-child(2) a', 'href', '/named-views/other') - - .assert.containsText('.view.one', 'foo') - .assert.containsText('.view.two', 'bar') - .assert.containsText('.view.three', 'baz') - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/named-views/other') - .assert.containsText('.view.one', 'baz') - .assert.containsText('.view.two', 'bar') - .assert.containsText('.view.three', 'foo') - - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/named-views/') - .assert.containsText('.view.one', 'foo') - .assert.containsText('.view.two', 'bar') - .assert.containsText('.view.three', 'baz') - - // check initial visit - .url('http://localhost:8080/named-views/other') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view.one', 'baz') - .assert.containsText('.view.two', 'bar') - .assert.containsText('.view.three', 'foo') - .end() - } -} diff --git a/test/e2e/specs/navigation-guards.js b/test/e2e/specs/navigation-guards.js deleted file mode 100644 index 857035dee..000000000 --- a/test/e2e/specs/navigation-guards.js +++ /dev/null @@ -1,156 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'navigation guards with alerts': function (browser) { - browser - .url('http://localhost:8080/navigation-guards/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 9) - .assert.containsText('.view', 'home') - - // alert commands not available in phantom - if (process.env.PHANTOMJS) return - - browser - .click('li:nth-child(2) a') - .dismissAlert() - .waitFor(100) - .dismissAlert() - .assert.urlEquals('http://localhost:8080/navigation-guards/') - .assert.containsText('.view', 'home') - - .click('li:nth-child(2) a') - .acceptAlert() - .assert.urlEquals('http://localhost:8080/navigation-guards/foo') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(3) a') - .dismissAlert() - .waitFor(100) - .dismissAlert() - .assert.urlEquals('http://localhost:8080/navigation-guards/foo') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(3) a') - .acceptAlert() - .assert.urlEquals('http://localhost:8080/navigation-guards/bar') - .assert.containsText('.view', 'bar') - - .click('li:nth-child(2) a') - .dismissAlert() - .waitFor(100) - .acceptAlert() // redirect to baz - .assert.urlEquals('http://localhost:8080/navigation-guards/baz') - .assert.containsText('.view', 'baz (not saved)') - - .click('li:nth-child(2) a') - .dismissAlert() // not saved - .assert.urlEquals('http://localhost:8080/navigation-guards/baz') - .assert.containsText('.view', 'baz (not saved)') - - .click('li:nth-child(2) a') - .acceptAlert() // not saved, force leave - .waitFor(100) - .dismissAlert() // should trigger foo's guard - .waitFor(100) - .dismissAlert() - .assert.urlEquals('http://localhost:8080/navigation-guards/baz') - .assert.containsText('.view', 'baz') - - .click('li:nth-child(2) a') - .acceptAlert() - .waitFor(100) - .acceptAlert() - .assert.urlEquals('http://localhost:8080/navigation-guards/foo') - .assert.containsText('.view', 'foo') - - // test initial visit - browser - .url('http://localhost:8080/navigation-guards/foo') - .dismissAlert() - .waitFor(100) - .dismissAlert() - // should redirect to root - .assert.urlEquals('http://localhost:8080/navigation-guards/') - // and should not render anything - .assert.elementNotPresent('.view') - - .url('http://localhost:8080/navigation-guards/foo') - .acceptAlert() - .assert.urlEquals('http://localhost:8080/navigation-guards/foo') - .assert.containsText('.view', 'foo') - - .url('http://localhost:8080/navigation-guards/bar') - .dismissAlert() - .waitFor(100) - .dismissAlert() - // should redirect to root - .assert.urlEquals('http://localhost:8080/navigation-guards/') - // and should not render anything - .assert.elementNotPresent('.view') - - .url('http://localhost:8080/navigation-guards/bar') - .acceptAlert() - .assert.urlEquals('http://localhost:8080/navigation-guards/bar') - .assert.containsText('.view', 'bar') - }, - 'navigation guards': function (browser) { - browser - // back to home - .url('http://localhost:8080/navigation-guards/') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'home') - - .click('li:nth-child(4) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/baz') - .assert.containsText('.view', 'baz (not saved)') - .click('button') - .assert.containsText('.view', 'baz (saved)') - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/') - .assert.containsText('.view', 'home') - - // in-component guard - .click('li:nth-child(5) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/') - .assert.containsText('.view', 'home') - .waitFor(300) - .assert.urlEquals('http://localhost:8080/navigation-guards/qux') - .assert.containsText('.view', 'Qux') - - // async component + in-component guard - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/') - .assert.containsText('.view', 'home') - .click('li:nth-child(6) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/') - .assert.containsText('.view', 'home') - .waitFor(300) - .assert.urlEquals('http://localhost:8080/navigation-guards/qux-async') - .assert.containsText('.view', 'Qux') - - // beforeRouteUpdate - .click('li:nth-child(7) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/quux/1') - .assert.containsText('.view', 'id:1 prevId:0') - .click('li:nth-child(8) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/quux/2') - .assert.containsText('.view', 'id:2 prevId:1') - .click('li:nth-child(7) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/quux/1') - .assert.containsText('.view', 'id:1 prevId:2') - - // beforeRouteEnter order in children - .click('li:nth-child(9) a') - .assert.urlEquals('http://localhost:8080/navigation-guards/parent/child/2') - .assert.containsText('#bre-order', 'parent mixin child 2') - .click('#nested-parent a') - .assert.urlEquals('http://localhost:8080/navigation-guards/parent/child/1') - .assert.containsText('#bre-order', 'parent mixin child 2 mixin child 1') - .end() - } -} diff --git a/test/e2e/specs/nested-router.js b/test/e2e/specs/nested-router.js deleted file mode 100644 index 3ae15cb0b..000000000 --- a/test/e2e/specs/nested-router.js +++ /dev/null @@ -1,34 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - basic: function (browser) { - browser - .url('http://localhost:8080/nested-router/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 3) - - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/nested-router/nested-router') - .assert.containsText('.child', 'Child router path: /') - .assert.count('li a', 5) - - .click('.child li:nth-child(1) a') - .assert.containsText('.child', 'Child router path: /foo') - .assert.containsText('.child .foo', 'foo') - - .click('.child li:nth-child(2) a') - .assert.containsText('.child', 'Child router path: /bar') - .assert.containsText('.child .bar', 'bar') - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/nested-router/foo') - .assert.elementNotPresent('.child') - .assert.containsText('#app', 'foo') - .assert.count('li a', 3) - .end() - } -} diff --git a/test/e2e/specs/nested-routes.js b/test/e2e/specs/nested-routes.js deleted file mode 100644 index 7738c4932..000000000 --- a/test/e2e/specs/nested-routes.js +++ /dev/null @@ -1,113 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'nested routes': function (browser) { - browser - .url('http://localhost:8080/nested-routes/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 11) - .assert.urlEquals('http://localhost:8080/nested-routes/parent') - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'default') - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/foo') - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/bar') - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'bar') - - .click('li:nth-child(4) a') - .assert.urlEquals('http://localhost:8080/nested-routes/baz') - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'baz') - - .click('li:nth-child(5) a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/qux/123') - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'qux') - - .click('.nested-parent a') - .assert.urlEquals( - 'http://localhost:8080/nested-routes/parent/qux/123/quux' - ) - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'qux') - .assert.containsText('.view', 'quux') - - .click('li:nth-child(6) a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/quy/123') - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'quy') - .assert.evaluate( - function () { - var params = JSON.parse(document.querySelector('pre').textContent) - return JSON.stringify(params) === JSON.stringify(['quyId']) - }, - null, - 'quyId' - ) - - .click('li:nth-child(8) a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/zap/1') - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'zap') - .assert.evaluate( - function () { - var zapId = document.querySelector('pre').textContent - return zapId === '1' - }, - null, - 'zapId' - ) - - .click('li:nth-child(7) a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/zap') - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'zap') - .assert.evaluate( - function () { - var zapId = document.querySelector('pre').textContent - return zapId === '' - }, - null, - 'optional zapId' - ) - - // test relative params - .click('li:nth-child(9) a') - .assert.evaluate( - function () { - var zapId = document.querySelector('pre').textContent - return zapId === '2' - }, - null, - 'relative params' - ) - - .click('li:nth-child(10) a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/qux/1/quux') - .click('li:nth-child(11) a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/qux/2/quux') - .click('.nested-child a') - .assert.urlEquals('http://localhost:8080/nested-routes/parent/qux/2/quuy') - - // check initial visit - .url('http://localhost:8080/nested-routes/parent/foo') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'foo') - .url('http://localhost:8080/nested-routes/baz') - .waitForElementVisible('#app', 1000) - .assert.containsText('.view', 'Parent') - .assert.containsText('.view', 'baz') - .end() - } -} diff --git a/test/e2e/specs/redirect.js b/test/e2e/specs/redirect.js deleted file mode 100644 index dc9327dad..000000000 --- a/test/e2e/specs/redirect.js +++ /dev/null @@ -1,139 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - redirect: function (browser) { - browser - .url('http://localhost:8080/redirect/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 12) - // assert correct href with base - .assert.attributeContains('li:nth-child(1) a', 'href', '/redirect/relative-redirect') - .assert.attributeContains('li:nth-child(2) a', 'href', '/redirect/relative-redirect?foo=bar') - .assert.attributeContains('li:nth-child(3) a', 'href', '/redirect/absolute-redirect') - .assert.attributeContains('li:nth-child(4) a', 'href', '/redirect/dynamic-redirect') - .assert.attributeContains('li:nth-child(5) a', 'href', '/redirect/dynamic-redirect/123') - .assert.attributeContains('li:nth-child(6) a', 'href', '/redirect/dynamic-redirect?to=foo') - .assert.attributeContains('li:nth-child(7) a', 'href', '/redirect/dynamic-redirect#baz') - .assert.attributeContains('li:nth-child(8) a', 'href', '/redirect/named-redirect') - .assert.attributeContains('li:nth-child(9) a', 'href', '/redirect/redirect-with-params/123') - .assert.attributeContains('li:nth-child(10) a', 'href', '/redirect/foobar') - .assert.attributeContains('li:nth-child(11) a', 'href', '/redirect/FooBar') - .assert.attributeContains('li:nth-child(12) a', 'href', '/not-found') - - .assert.containsText('.view', 'default') - - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/redirect/foo') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/redirect/foo?foo=bar') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/redirect/bar') - .assert.containsText('.view', 'bar') - - .click('li:nth-child(4) a') - .assert.urlEquals('http://localhost:8080/redirect/bar') - .assert.containsText('.view', 'bar') - - .click('li:nth-child(5) a') - .assert.urlEquals('http://localhost:8080/redirect/with-params/123') - .assert.containsText('.view', '123') - - .click('li:nth-child(6) a') - .assert.urlEquals('http://localhost:8080/redirect/foo') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(7) a') - .assert.urlEquals('http://localhost:8080/redirect/baz') - .assert.containsText('.view', 'baz') - - .click('li:nth-child(8) a') - .assert.urlEquals('http://localhost:8080/redirect/baz') - .assert.containsText('.view', 'baz') - - .click('li:nth-child(9) a') - .assert.urlEquals('http://localhost:8080/redirect/with-params/123') - .assert.containsText('.view', '123') - - .click('li:nth-child(10) a') - .assert.urlEquals('http://localhost:8080/redirect/foobar') - .assert.containsText('.view', 'foobar') - - .click('li:nth-child(11) a') - .assert.urlEquals('http://localhost:8080/redirect/FooBar') - .assert.containsText('.view', 'FooBar') - - .click('li:nth-child(12) a') - .assert.urlEquals('http://localhost:8080/redirect/') - .assert.containsText('.view', 'default') - - // check initial visit - .url('http://localhost:8080/redirect/relative-redirect') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/foo') - .assert.containsText('.view', 'foo') - - .url('http://localhost:8080/redirect/relative-redirect?foo=bar') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/foo?foo=bar') - .assert.containsText('.view', 'foo') - - .url('http://localhost:8080/redirect/absolute-redirect') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/bar') - .assert.containsText('.view', 'bar') - - .url('http://localhost:8080/redirect/dynamic-redirect') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/bar') - .assert.containsText('.view', 'bar') - - .url('http://localhost:8080/redirect/dynamic-redirect/123') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/with-params/123') - .assert.containsText('.view', '123') - - .url('http://localhost:8080/redirect/dynamic-redirect?to=foo') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/foo') - .assert.containsText('.view', 'foo') - - .url('http://localhost:8080/redirect/dynamic-redirect#baz') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/baz') - .assert.containsText('.view', 'baz') - - .url('http://localhost:8080/redirect/named-redirect') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/baz') - .assert.containsText('.view', 'baz') - - .url('http://localhost:8080/redirect/redirect-with-params/123') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/with-params/123') - .assert.containsText('.view', '123') - - .url('http://localhost:8080/redirect/foobar') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/foobar') - .assert.containsText('.view', 'foobar') - - .url('http://localhost:8080/redirect/FooBar') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/FooBar') - .assert.containsText('.view', 'FooBar') - - .url('http://localhost:8080/redirect/not-found') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/redirect/') - .assert.containsText('.view', 'default') - .end() - } -} diff --git a/test/e2e/specs/restart-app.js b/test/e2e/specs/restart-app.js deleted file mode 100644 index 0dca5c3b8..000000000 --- a/test/e2e/specs/restart-app.js +++ /dev/null @@ -1,45 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - basic: function (browser) { - browser - .url('http://localhost:8080/restart-app/') - .waitForElementVisible('#mount', 1000) - .assert.containsText('#beforeEach', '0') - .assert.containsText('#beforeResolve', '0') - .assert.containsText('#afterEach', '0') - - // Mounting will trigger hooks - .click('#mount') - .waitForElementVisible('#app > *', 1000) - .assert.containsText('#beforeEach', '1') - .assert.containsText('#beforeResolve', '1') - .assert.containsText('#afterEach', '1') - .assert.containsText('#view', 'home') - - // Navigate to foo route will trigger hooks - .click('#app li:nth-child(2) a') - .assert.containsText('#beforeEach', '2') - .assert.containsText('#beforeResolve', '2') - .assert.containsText('#afterEach', '2') - .assert.containsText('#view', 'foo') - - // Unmount - .click('#unmount') - .assert.containsText('#app', '') - - // Second mounting will trigger hooks - .click('#mount') - .waitForElementVisible('#app > *', 1000) - .assert.containsText('#beforeEach', '3') - .assert.containsText('#beforeResolve', '3') - .assert.containsText('#afterEach', '3') - .assert.containsText('#view', 'foo') - - .end() - } -} diff --git a/test/e2e/specs/route-alias.js b/test/e2e/specs/route-alias.js deleted file mode 100644 index 91fce0011..000000000 --- a/test/e2e/specs/route-alias.js +++ /dev/null @@ -1,94 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'route alias': function (browser) { - browser - .url('http://localhost:8080/route-alias/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 7) - // assert correct href with base - .assert.attributeContains('li:nth-child(1) a', 'href', '/root-alias') - .assert.attributeContains('li:nth-child(2) a', 'href', '/route-alias/foo') - .assert.attributeContains('li:nth-child(3) a', 'href', '/route-alias/home/bar-alias') - .assert.attributeContains('li:nth-child(4) a', 'href', '/route-alias/baz') - .assert.attributeContains('li:nth-child(5) a', 'href', '/route-alias/home/baz-alias') - .assert.attributeEquals('li:nth-child(6) a', 'href', 'http://localhost:8080/route-alias/home') - .assert.attributeContains('li:nth-child(7) a', 'href', '/route-alias/home/nested-alias/foo') - - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/route-alias/root-alias') - .assert.containsText('.view', 'root') - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/route-alias/foo') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'foo') - - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/route-alias/home/bar-alias') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'bar') - - .click('li:nth-child(4) a') - .assert.urlEquals('http://localhost:8080/route-alias/baz') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'baz') - - .click('li:nth-child(5) a') - .assert.urlEquals('http://localhost:8080/route-alias/home/baz-alias') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'baz') - - .click('li:nth-child(6) a') - .assert.urlEquals('http://localhost:8080/route-alias/home') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'default') - - .click('li:nth-child(7) a') - .assert.urlEquals('http://localhost:8080/route-alias/home/nested-alias/foo') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'nested foo') - - // check initial visit - .url('http://localhost:8080/route-alias/foo') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/route-alias/foo') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'foo') - - .url('http://localhost:8080/route-alias/home/bar-alias') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/route-alias/home/bar-alias') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'bar') - - .url('http://localhost:8080/route-alias/baz') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/route-alias/baz') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'baz') - - .url('http://localhost:8080/route-alias/home/baz-alias') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/route-alias/home/baz-alias') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'baz') - - .url('http://localhost:8080/route-alias/home') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/route-alias/home') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'default') - - .url('http://localhost:8080/route-alias/home/nested-alias/foo') - .waitForElementVisible('#app', 1000) - .assert.urlEquals('http://localhost:8080/route-alias/home/nested-alias/foo') - .assert.containsText('.view', 'Home') - .assert.containsText('.view', 'nested foo') - .end() - } -} diff --git a/test/e2e/specs/route-matching.js b/test/e2e/specs/route-matching.js deleted file mode 100644 index bd3646092..000000000 --- a/test/e2e/specs/route-matching.js +++ /dev/null @@ -1,181 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': [], - - 'route-matching': function (browser) { - browser - .url('http://localhost:8080/route-matching/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 10) - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '' && - route.fullPath === '/' && - JSON.stringify(route.params) === JSON.stringify({}) - ) - }, - null, - '/' - ) - - .click('li:nth-child(2) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '/params/:foo/:bar' && - route.fullPath === '/params/foo/bar' && - JSON.stringify(route.params) === - JSON.stringify({ - foo: 'foo', - bar: 'bar' - }) - ) - }, - null, - '/params/foo/bar' - ) - - .click('li:nth-child(3) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '/optional-params/:foo?' && - route.fullPath === '/optional-params' && - JSON.stringify(route.params) === JSON.stringify({}) - ) - }, - null, - '/optional-params' - ) - - .click('li:nth-child(4) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '/optional-params/:foo?' && - route.fullPath === '/optional-params/foo' && - JSON.stringify(route.params) === - JSON.stringify({ - foo: 'foo' - }) - ) - }, - null, - '/optional-params/foo' - ) - - .click('li:nth-child(5) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '/params-with-regex/:id(\\d+)' && - route.fullPath === '/params-with-regex/123' && - JSON.stringify(route.params) === - JSON.stringify({ - id: '123' - }) - ) - }, - null, - '/params-with-regex/123' - ) - - .click('li:nth-child(6) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 0 && - route.fullPath === '/params-with-regex/abc' && - JSON.stringify(route.params) === JSON.stringify({}) - ) - }, - null, - '/params-with-regex/abc' - ) - - .click('li:nth-child(7) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '/asterisk/*' && - route.fullPath === '/asterisk/foo' && - JSON.stringify(route.params) === - JSON.stringify({ - pathMatch: 'foo' - }) - ) - }, - null, - '/asterisk/foo' - ) - - .click('li:nth-child(8) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '/asterisk/*' && - route.fullPath === '/asterisk/foo/bar' && - JSON.stringify(route.params) === - JSON.stringify({ - pathMatch: 'foo/bar' - }) - ) - }, - null, - '/asterisk/foo/bar' - ) - - .click('li:nth-child(9) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '/optional-group/(foo/)?bar' && - route.fullPath === '/optional-group/bar' && - JSON.stringify(route.params) === JSON.stringify({}) - ) - }, - null, - '/optional-group/bar' - ) - - .click('li:nth-child(10) a') - .assert.evaluate( - function () { - var route = JSON.parse(document.querySelector('pre').textContent) - return ( - route.matched.length === 1 && - route.matched[0].path === '/optional-group/(foo/)?bar' && - route.fullPath === '/optional-group/foo/bar' && - JSON.stringify(route.params) === - JSON.stringify({ - pathMatch: 'foo/' - }) - ) - }, - null, - '/optional-group/foo/bar' - ) - .end() - } -} diff --git a/test/e2e/specs/route-params.js b/test/e2e/specs/route-params.js deleted file mode 100644 index ddc64b9d9..000000000 --- a/test/e2e/specs/route-params.js +++ /dev/null @@ -1,32 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'route-params': function (browser) { - browser - .url('http://localhost:8080/route-params/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 2) - - // https://github.com/vuejs/vue-router/issues/2800 - .click('li:nth-child(1) a') - .assert.urlEquals('http://localhost:8080/route-params/items/1/logs') - .assert.containsText('#params', JSON.stringify({ type: 'info' }, null, 2)) - .click('.child-link') - .assert.urlEquals('http://localhost:8080/route-params/items/1/logs/info') - .assert.containsText('.log', 'id: 1, type: info') - // https://github.com/vuejs/vue-router/issues/2938 - .assert.containsText('#params', JSON.stringify({ type: 'info' }, null, 2)) - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/route-params/items/2/logs') - .click('.child-link') - .assert.urlEquals('http://localhost:8080/route-params/items/2/logs/info') - .assert.containsText('.log', 'id: 2, type: info') - - .end() - } -} diff --git a/test/e2e/specs/route-props.js b/test/e2e/specs/route-props.js deleted file mode 100644 index 3952a95dd..000000000 --- a/test/e2e/specs/route-props.js +++ /dev/null @@ -1,43 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'route-props': function (browser) { - const $attrs = ' { "foo": "123" }' - - browser - .url('http://localhost:8080/route-props/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 5) - - .assert.urlEquals('http://localhost:8080/route-props/') - .assert.containsText('.hello', 'Hello Vue!' + $attrs) - - .click('li:nth-child(2) a') - .assert.urlEquals('http://localhost:8080/route-props/hello/you') - .assert.containsText('.hello', 'Hello you' + $attrs) - - .click('li:nth-child(3) a') - .assert.urlEquals('http://localhost:8080/route-props/static') - .assert.containsText('.hello', 'Hello world' + $attrs) - - .click('li:nth-child(4) a') - .assert.urlEquals('http://localhost:8080/route-props/dynamic/1') - .assert.containsText('.hello', 'Hello ' + (new Date().getFullYear() + 1) + '!' + $attrs) - - .click('li:nth-child(5) a') - .assert.urlEquals('http://localhost:8080/route-props/attrs') - .assert.containsText('.hello', 'Hello attrs' + $attrs) - - // should be consistent - .click('li:nth-child(4) a') - .click('li:nth-child(5) a') - .assert.urlEquals('http://localhost:8080/route-props/attrs') - .assert.containsText('.hello', 'Hello attrs' + $attrs) - - .end() - } -} diff --git a/test/e2e/specs/scroll-behavior.js b/test/e2e/specs/scroll-behavior.js deleted file mode 100644 index d7469e9e0..000000000 --- a/test/e2e/specs/scroll-behavior.js +++ /dev/null @@ -1,143 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - 'scroll behavior': function (browser) { - const TIMEOUT = 2000 - - browser - .url('http://localhost:8080/scroll-behavior/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 6) - .assert.containsText('.view', 'home') - - .execute(function () { - window.scrollTo(0, 100) - }) - .click('li:nth-child(2) a') - .waitForElementPresent('.view.foo', TIMEOUT) - .assert.containsText('.view', 'foo') - .execute(function () { - window.scrollTo(0, 200) - window.history.back() - }) - .waitForElementPresent('.view.home', TIMEOUT) - .assert.containsText('.view', 'home') - .assert.evaluate( - function () { - return window.pageYOffset === 100 - }, - null, - 'restore scroll position on back' - ) - .execute(function () { - window.scrollTo(0, 100) - }) - .click('li:nth-child(2) a') - .waitForElementPresent('.view.foo', TIMEOUT) - .assert.containsText('.view', 'foo') - .execute(function () { - window.scrollTo(0, 200) - window.history.back() - }) - .waitForElementPresent('.view.home', TIMEOUT) - .assert.containsText('.view', 'home') - .assert.evaluate( - function () { - return window.pageYOffset === 100 - }, - null, - 'restore scroll position on back with manual restoration' - ) - .execute(function () { - history.scrollRestoration = 'auto' - }) - - // scroll on a popped entry - .execute(function () { - window.scrollTo(0, 50) - window.history.forward() - }) - .waitForElementPresent('.view.foo', TIMEOUT) - .assert.containsText('.view', 'foo') - .assert.evaluate( - function () { - return window.pageYOffset === 200 - }, - null, - 'restore scroll position on forward' - ) - - .execute(function () { - window.history.back() - }) - .waitForElementPresent('.view.home', TIMEOUT) - .assert.containsText('.view', 'home') - .assert.evaluate( - function () { - return window.pageYOffset === 50 - }, - null, - 'restore scroll position on back again' - ) - - .click('li:nth-child(3) a') - .waitForElementPresent('.view.bar', TIMEOUT) - .assert.evaluate( - function () { - return window.pageYOffset === 0 - }, - null, - 'scroll to top on new entry' - ) - - .perform(() => { - for (let i = 0; i < 2; i++) { - browser - .click('li:nth-child(4) a') - .assert.evaluate( - function () { - return document.getElementById('anchor').getBoundingClientRect().top < 1 - }, - null, - (i === 0) ? 'scroll to anchor' : 'scroll to same anchor again' - ) - } - }) - - .click('li:nth-child(5) a') - .assert.evaluate( - function () { - return document.getElementById('anchor2').getBoundingClientRect().top < 101 - }, - null, - 'scroll to anchor with offset' - ) - .click('li:nth-child(6) a') - .assert.evaluate( - function () { - return document.getElementById('1number').getBoundingClientRect().top < 1 - }, - null, - 'scroll to anchor that starts with number' - ) - - .url('http://localhost:8080/scroll-behavior/bar#anchor') - .execute(function () { - location.reload(true) - }) - .waitForElementVisible('#app', 1000) - .assert.evaluate( - function () { - return document.getElementById('anchor').getBoundingClientRect().top < 1 - }, - null, - 'scroll to anchor on load' - ) - - .end() - } -} diff --git a/test/e2e/specs/transitions.js b/test/e2e/specs/transitions.js deleted file mode 100644 index 0303bdf40..000000000 --- a/test/e2e/specs/transitions.js +++ /dev/null @@ -1,46 +0,0 @@ -const bsStatus = require('../browserstack-send-status') - -module.exports = { - ...bsStatus(), - - '@tags': ['history'], - - transitions: function (browser) { - const TIMEOUT = 2000 - - browser - .url('http://localhost:8080/transitions/') - .waitForElementVisible('#app', 1000) - .assert.count('li a', 4) - - .click('li:nth-child(2) a') - .assert.cssClassPresent('.view.home', 'fade-leave-active') - .waitForElementPresent('.view.parent', TIMEOUT) - .assert.cssClassPresent('.view.parent', 'fade-enter-active') - .assert.cssClassNotPresent('.child-view.default', 'slide-left-enter-active') - .waitForElementNotPresent('.view.parent.fade-enter-active', TIMEOUT) - - .click('li:nth-child(3) a') - .assert.cssClassPresent('.child-view.default', 'slide-left-leave-active') - .assert.cssClassPresent('.child-view.foo', 'slide-left-enter-active') - .waitForElementNotPresent('.child-view.default', TIMEOUT) - - .click('li:nth-child(4) a') - .assert.cssClassPresent('.child-view.foo', 'slide-left-leave-active') - .assert.cssClassPresent('.child-view.bar', 'slide-left-enter-active') - .waitForElementNotPresent('.child-view.foo', TIMEOUT) - - .click('li:nth-child(2) a') - .assert.cssClassPresent('.child-view.bar', 'slide-right-leave-active') - .assert.cssClassPresent('.child-view.default', 'slide-right-enter-active') - .waitForElementNotPresent('.child-view.bar', TIMEOUT) - - .click('li:nth-child(1) a') - .assert.cssClassPresent('.view.parent', 'fade-leave-active') - .waitForElementPresent('.view.home', TIMEOUT) - .assert.cssClassPresent('.view.home', 'fade-enter-active') - .waitForElementNotPresent('.view.home.fade-enter-active', TIMEOUT) - - .end() - } -} diff --git a/test/e2e/test.js b/test/e2e/test.js new file mode 100644 index 000000000..a97676cc3 --- /dev/null +++ b/test/e2e/test.js @@ -0,0 +1,99 @@ +/* global router */ + +var base = 'http://localhost:' + (process.env.PORT || 8080) + +module.exports = { + 'vue-router e2e tests': function (browser) { + browser + // default 404 + .url(base) + .waitForElementVisible('h1', 1000) + .assert.containsText('.view', 'FOUR OH FOUR') + + // /about + .url(base + '/about') + .waitForElementVisible('h1', 1000) + .assert.containsText('.view h2', 'ABOUT US') + .assert.cssClassPresent('a[href="/about"]', 'v-link-active') + // should not be able to navigate to inbox + .click('a[href^="/inbox"]') + .pause(100) + .getAlertText(function (text) { + this.assert.ok(/navigate/.test(text.value)) + }) + .acceptAlert() + // should not have changed + .assert.containsText('.view h2', 'ABOUT US') + .assert.cssClassPresent('a[href="/about"]', 'v-link-active') + + // /user + .url(base + '/user/1234/profile/what') + .waitForElementVisible('h1', 1000) + .assert.containsText('.view h2', 'User yo') + .assert.containsText('.view h3', 'user profile') + .assert.containsText('.view p', '1234 what') + .assert.cssClassPresent('a[href^="/user"]', 'v-link-active') + // change params + .execute(function () { + router.go('/user/2345/profile/hey') + }) + .assert.containsText('.view p', '2345 hey') + // other routes + .execute(function () { + router.go('/user/2345/posts') + }) + .assert.containsText('.view h3', 'user posts') + .execute(function () { + router.go('settings') + }) + .assert.containsText('.view div', 'user settings') + + // inbox + .url(base + '/inbox') + .waitForElementVisible('h1', 1000) + .assert.containsText('.view h2', 'inbox!') + .assert.containsText('.view', 'default yo') + + .url(base + '/inbox/message/123') + .waitForElementVisible('h1', 1000) + .assert.containsText('.view div', 'Loading data') + .assert.containsText('.view h2', 'inbox!') + .pause(3000) + .assert.containsText('.view div', 'message #123: Hello this is a message') + // confirm navigation + .click('a[href^="/user"]') + .pause(100) + .getAlertText(function (text) { + this.assert.ok(/Are you sure/.test(text.value)) + }) + // cancel navigation + .dismissAlert() + // wait for possible transition + .pause(1000) + .assert.containsText('.view div', 'message #123: Hello this is a message') + // then do it again + .click('a[href^="/about"]') + .pause(100) + .acceptAlert() + .pause(1000) + .assert.containsText('.view h2', 'ABOUT US') + + // forbidden + .url(base + '/forbidden') + .waitForElementVisible('#app > p', 1000) + .assert.containsText('#app > p', 'Authenticating') + .pause(3000) + .getAlertText(function (text) { + this.assert.ok(/forbidden by a global before hook/.test(text.value)) + }) + .acceptAlert() + .assert.hidden('#app > p') + + // redirect + .url(base + '/info') + .waitForElementVisible('h1', 1000) + .assert.containsText('.view h2', 'ABOUT US') + .assert.cssClassPresent('a[href="/about"]', 'v-link-active') + .end() + } +} diff --git a/test/unit/.eslintrc b/test/unit/.eslintrc index 3feebfd41..79753dbb1 100644 --- a/test/unit/.eslintrc +++ b/test/unit/.eslintrc @@ -1,8 +1,175 @@ { "env": { - "jasmine": true + "browser": true, + "node": true, }, - "plugins": [ - "jasmine" - ] + + "globals": { + "isIE": true, + "isIE9": true, + "jasmine": true, + "describe": true, + "it": true, + "beforeEach": true, + "afterEach": true, + "expect": true, + "spyOn": true, + "wait": true + }, + + "rules": { + "accessor-pairs": 2, + "array-bracket-spacing": 0, + "block-scoped-var": 0, + "brace-style": [2, "1tbs", { "allowSingleLine": true }], + "camelcase": 0, + "comma-dangle": [2, "never"], + "comma-spacing": [2, { "before": false, "after": true }], + "comma-style": [2, "last"], + "complexity": 0, + "computed-property-spacing": 0, + "consistent-return": 0, + "consistent-this": 0, + "constructor-super": 2, + "curly": [2, "multi-line"], + "default-case": 0, + "dot-location": [2, "property"], + "dot-notation": 0, + "eol-last": 2, + "eqeqeq": [2, "allow-null"], + "func-names": 0, + "func-style": 0, + "generator-star-spacing": [2, { "before": true, "after": true }], + "guard-for-in": 0, + "handle-callback-err": [2, "^(err|error)$" ], + "indent": [2, 2, { "SwitchCase": 1 }], + "key-spacing": [2, { "beforeColon": false, "afterColon": true }], + "linebreak-style": 0, + "lines-around-comment": 0, + "max-nested-callbacks": 0, + "new-cap": [2, { "newIsCap": true, "capIsNew": false }], + "new-parens": 2, + "newline-after-var": 0, + "no-alert": 0, + "no-array-constructor": 2, + "no-caller": 2, + "no-catch-shadow": 0, + "no-cond-assign": 2, + "no-console": 0, + "no-constant-condition": 0, + "no-continue": 0, + "no-control-regex": 2, + "no-debugger": 2, + "no-delete-var": 2, + "no-div-regex": 0, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-else-return": 0, + "no-empty": 0, + "no-empty-character-class": 2, + "no-empty-label": 2, + "no-eq-null": 0, + "no-eval": 2, + "no-ex-assign": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": 0, + "no-extra-semi": 0, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-implied-eval": 2, + "no-inline-comments": 0, + "no-inner-declarations": [2, "functions"], + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-iterator": 2, + "no-label-var": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-lonely-if": 0, + "no-loop-func": 0, + "no-mixed-requires": 0, + "no-mixed-spaces-and-tabs": 2, + "no-multi-spaces": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [2, { "max": 1 }], + "no-native-reassign": 2, + "no-negated-in-lhs": 2, + "no-nested-ternary": 0, + "no-new": 2, + "no-new-func": 0, + "no-new-object": 2, + "no-new-require": 2, + "no-new-wrappers": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-octal-escape": 2, + "no-param-reassign": 0, + "no-path-concat": 0, + "no-process-env": 0, + "no-process-exit": 0, + "no-proto": 0, + "no-redeclare": 2, + "no-regex-spaces": 2, + "no-restricted-modules": 0, + "no-return-assign": 2, + "no-script-url": 0, + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow": 0, + "no-shadow-restricted-names": 2, + "no-spaced-func": 2, + "no-sparse-arrays": 2, + "no-sync": 0, + "no-ternary": 0, + "no-this-before-super": 2, + "no-throw-literal": 2, + "no-trailing-spaces": 2, + "no-undef": 2, + "no-undef-init": 2, + "no-undefined": 0, + "no-underscore-dangle": 0, + "no-unexpected-multiline": 2, + "no-unneeded-ternary": 2, + "no-unreachable": 2, + "no-unused-expressions": 0, + "no-unused-vars": [2, { "vars": "all", "args": "none" }], + "no-use-before-define": 0, + "no-var": 0, + "no-void": 0, + "no-warning-comments": 0, + "no-with": 2, + "object-curly-spacing": 0, + "object-shorthand": 0, + "one-var": [2, { "initialized": "never" }], + "operator-assignment": 0, + "operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }], + "padded-blocks": 0, + "prefer-const": 0, + "quote-props": 0, + "quotes": [2, "single", "avoid-escape"], + "radix": 2, + "semi": [2, "never"], + "semi-spacing": 0, + "sort-vars": 0, + "space-after-keywords": [2, "always"], + "space-before-blocks": [2, "always"], + "space-before-function-paren": [2, "always"], + "space-in-parens": [2, "never"], + "space-infix-ops": 2, + "space-return-throw-case": 2, + "space-unary-ops": [2, { "words": true, "nonwords": false }], + "spaced-comment": [2, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!"] }], + "strict": 0, + "use-isnan": 2, + "valid-jsdoc": 0, + "valid-typeof": 2, + "vars-on-top": 0, + "wrap-iife": [2, "any"], + "wrap-regex": 0, + "yoda": [2, "never"] + } } diff --git a/test/unit/index.html b/test/unit/index.html new file mode 100644 index 000000000..369a24a77 --- /dev/null +++ b/test/unit/index.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>vue-router tests</title> + <link rel="stylesheet" type="text/css" href="lib/jasmine.css"> + <script src="lib/jasmine.js"></script> + <script src="lib/jasmine-html.js"></script> + <script src="lib/boot.js"></script> + <script src="specs.js"></script> + </head> + <body> + </body> +</html> diff --git a/test/unit/jasmine.json b/test/unit/jasmine.json deleted file mode 100644 index d437c4e05..000000000 --- a/test/unit/jasmine.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "spec_dir": "test/unit/specs", - "spec_files": [ - "*.spec.js" - ], - "helpers": [ - "../../../node_modules/babel-register/lib/node.js" - ] -} diff --git a/test/unit/lib/MIT.LICENSE b/test/unit/lib/MIT.LICENSE new file mode 100755 index 000000000..aff8ed47a --- /dev/null +++ b/test/unit/lib/MIT.LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2008-2014 Pivotal Labs + +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. diff --git a/test/unit/lib/boot.js b/test/unit/lib/boot.js new file mode 100755 index 000000000..ec8baa0aa --- /dev/null +++ b/test/unit/lib/boot.js @@ -0,0 +1,181 @@ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +(function() { + + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + window.jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. + */ + jasmineRequire.html(jasmine); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + it: function(desc, func) { + return env.it(desc, func); + }, + + xit: function(desc, func) { + return env.xit(desc, func); + }, + + beforeEach: function(beforeEachFunction) { + return env.beforeEach(beforeEachFunction); + }, + + afterEach: function(afterEachFunction) { + return env.afterEach(afterEachFunction); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending(); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }) + }; + + /** + * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + if (typeof window == "undefined" && typeof exports == "object") { + extend(exports, jasmineInterface); + } else { + extend(window, jasmineInterface); + } + + /** + * Expose the interface for adding custom equality testers. + */ + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + /** + * Expose the interface for adding custom expectation matchers + */ + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + /** + * Expose the mock interface for the JavaScript timeout functions + */ + jasmine.clock = function() { + return env.clock; + }; + + /** + * ## Runner Parameters + * + * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. + */ + + var queryString = new jasmine.QueryString({ + getWindowLocation: function() { return window.location; } + }); + + var catchingExceptions = queryString.getParam("catch"); + env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions); + + /** + * ## Reporters + * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). + */ + var htmlReporter = new jasmine.HtmlReporter({ + env: env, + onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); }, + getContainer: function() { return document.body; }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmine.Timer() + }); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); + env.addReporter(htmlReporter); + + /** + * Filter which specs will be run by matching the start of the full name against the `spec` query param. + */ + var specFilter = new jasmine.HtmlSpecFilter({ + filterString: function() { return queryString.getParam("spec"); } + }); + + env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + + /** + * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. + */ + window.setTimeout = window.setTimeout; + window.setInterval = window.setInterval; + window.clearTimeout = window.clearTimeout; + window.clearInterval = window.clearInterval; + + /** + * ## Execution + * + * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. + */ + var currentWindowOnload = window.onload; + + window.onload = function() { + if (currentWindowOnload) { + currentWindowOnload(); + } + htmlReporter.initialize(); + env.execute(); + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + +}()); diff --git a/test/unit/lib/jasmine-html.js b/test/unit/lib/jasmine-html.js new file mode 100755 index 000000000..9d959032e --- /dev/null +++ b/test/unit/lib/jasmine-html.js @@ -0,0 +1,390 @@ +/* +Copyright (c) 2008-2014 Pivotal Labs + +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. +*/ +jasmineRequire.html = function(j$) { + j$.ResultsNode = jasmineRequire.ResultsNode(); + j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); + j$.QueryString = jasmineRequire.QueryString(); + j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); +}; + +jasmineRequire.HtmlReporter = function(j$) { + + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + function HtmlReporter(options) { + var env = options.env || {}, + getContainer = options.getContainer, + createElement = options.createElement, + createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0, + htmlReporterMain, + symbols; + + this.initialize = function() { + clearPrior(); + htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'}, + createDom('div', {className: 'banner'}, + createDom('a', {className: 'title', href: 'http://jasmine.github.io/', target: '_blank'}), + createDom('span', {className: 'version'}, j$.version) + ), + createDom('ul', {className: 'symbol-summary'}), + createDom('div', {className: 'alert'}), + createDom('div', {className: 'results'}, + createDom('div', {className: 'failures'}) + ) + ); + getContainer().appendChild(htmlReporterMain); + + symbols = find('.symbol-summary'); + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + var summary = createDom('div', {className: 'summary'}); + + var topResults = new j$.ResultsNode({}, '', null), + currentParent = topResults; + + this.suiteStarted = function(result) { + currentParent.addChild(result, 'suite'); + currentParent = currentParent.last(); + }; + + this.suiteDone = function(result) { + if (currentParent == topResults) { + return; + } + + currentParent = currentParent.parent; + }; + + this.specStarted = function(result) { + currentParent.addChild(result, 'spec'); + }; + + var failures = []; + this.specDone = function(result) { + if(noExpectations(result) && console && console.error) { + console.error('Spec \'' + result.fullName + '\' has no expectations.'); + } + + if (result.status != 'disabled') { + specsExecuted++; + } + + symbols.appendChild(createDom('li', { + className: noExpectations(result) ? 'empty' : result.status, + id: 'spec_' + result.id, + title: result.fullName + } + )); + + if (result.status == 'failed') { + failureCount++; + + var failure = + createDom('div', {className: 'spec-detail failed'}, + createDom('div', {className: 'description'}, + createDom('a', {title: result.fullName, href: specHref(result)}, result.fullName) + ), + createDom('div', {className: 'messages'}) + ); + var messages = failure.childNodes[1]; + + for (var i = 0; i < result.failedExpectations.length; i++) { + var expectation = result.failedExpectations[i]; + messages.appendChild(createDom('div', {className: 'result-message'}, expectation.message)); + messages.appendChild(createDom('div', {className: 'stack-trace'}, expectation.stack)); + } + + failures.push(failure); + } + + if (result.status == 'pending') { + pendingSpecCount++; + } + }; + + this.jasmineDone = function() { + var banner = find('.banner'); + banner.appendChild(createDom('span', {className: 'duration'}, 'finished in ' + timer.elapsed() / 1000 + 's')); + + var alert = find('.alert'); + + alert.appendChild(createDom('span', { className: 'exceptions' }, + createDom('label', { className: 'label', 'for': 'raise-exceptions' }, 'raise exceptions'), + createDom('input', { + className: 'raise', + id: 'raise-exceptions', + type: 'checkbox' + }) + )); + var checkbox = find('#raise-exceptions'); + + checkbox.checked = !env.catchingExceptions(); + checkbox.onclick = onRaiseExceptionsClick; + + if (specsExecuted < totalSpecsDefined) { + var skippedMessage = 'Ran ' + specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all'; + alert.appendChild( + createDom('span', {className: 'bar skipped'}, + createDom('a', {href: '?', title: 'Run all specs'}, skippedMessage) + ) + ); + } + var statusBarMessage = ''; + var statusBarClassName = 'bar '; + + if (totalSpecsDefined > 0) { + statusBarMessage += pluralize('spec', specsExecuted) + ', ' + pluralize('failure', failureCount); + if (pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', pendingSpecCount); } + statusBarClassName += (failureCount > 0) ? 'failed' : 'passed'; + } else { + statusBarClassName += 'skipped'; + statusBarMessage += 'No specs found'; + } + + alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage)); + + var results = find('.results'); + results.appendChild(summary); + + summaryList(topResults, summary); + + function summaryList(resultsTree, domParent) { + var specListNode; + for (var i = 0; i < resultsTree.children.length; i++) { + var resultNode = resultsTree.children[i]; + if (resultNode.type == 'suite') { + var suiteListNode = createDom('ul', {className: 'suite', id: 'suite-' + resultNode.result.id}, + createDom('li', {className: 'suite-detail'}, + createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description) + ) + ); + + summaryList(resultNode, suiteListNode); + domParent.appendChild(suiteListNode); + } + if (resultNode.type == 'spec') { + if (domParent.getAttribute('class') != 'specs') { + specListNode = createDom('ul', {className: 'specs'}); + domParent.appendChild(specListNode); + } + var specDescription = resultNode.result.description; + if(noExpectations(resultNode.result)) { + specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription; + } + specListNode.appendChild( + createDom('li', { + className: resultNode.result.status, + id: 'spec-' + resultNode.result.id + }, + createDom('a', {href: specHref(resultNode.result)}, specDescription) + ) + ); + } + } + } + + if (failures.length) { + alert.appendChild( + createDom('span', {className: 'menu bar spec-list'}, + createDom('span', {}, 'Spec List | '), + createDom('a', {className: 'failures-menu', href: '#'}, 'Failures'))); + alert.appendChild( + createDom('span', {className: 'menu bar failure-list'}, + createDom('a', {className: 'spec-list-menu', href: '#'}, 'Spec List'), + createDom('span', {}, ' | Failures '))); + + find('.failures-menu').onclick = function() { + setMenuModeTo('failure-list'); + }; + find('.spec-list-menu').onclick = function() { + setMenuModeTo('spec-list'); + }; + + setMenuModeTo('failure-list'); + + var failureNode = find('.failures'); + for (var i = 0; i < failures.length; i++) { + failureNode.appendChild(failures[i]); + } + } + }; + + return this; + + function find(selector) { + return getContainer().querySelector('.jasmine_html-reporter ' + selector); + } + + function clearPrior() { + // return the reporter + var oldReporter = find(''); + + if(oldReporter) { + getContainer().removeChild(oldReporter); + } + } + + function createDom(type, attrs, childrenVarArgs) { + var el = createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(createTextNode(child)); + } else { + if (child) { + el.appendChild(child); + } + } + } + + for (var attr in attrs) { + if (attr == 'className') { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; + } + + function pluralize(singular, count) { + var word = (count == 1 ? singular : singular + 's'); + + return '' + count + ' ' + word; + } + + function specHref(result) { + return '?spec=' + encodeURIComponent(result.fullName); + } + + function setMenuModeTo(mode) { + htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode); + } + + function noExpectations(result) { + return (result.failedExpectations.length + result.passedExpectations.length) === 0 && + result.status === 'passed'; + } + } + + return HtmlReporter; +}; + +jasmineRequire.HtmlSpecFilter = function() { + function HtmlSpecFilter(options) { + var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; + } + + return HtmlSpecFilter; +}; + +jasmineRequire.ResultsNode = function() { + function ResultsNode(result, type, parent) { + this.result = result; + this.type = type; + this.parent = parent; + + this.children = []; + + this.addChild = function(result, type) { + this.children.push(new ResultsNode(result, type, this)); + }; + + this.last = function() { + return this.children[this.children.length - 1]; + }; + } + + return ResultsNode; +}; + +jasmineRequire.QueryString = function() { + function QueryString(options) { + + this.setParam = function(key, value) { + var paramMap = queryStringToParamMap(); + paramMap[key] = value; + options.getWindowLocation().search = toQueryString(paramMap); + }; + + this.getParam = function(key) { + return queryStringToParamMap()[key]; + }; + + return this; + + function toQueryString(paramMap) { + var qStrPairs = []; + for (var prop in paramMap) { + qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop])); + } + return '?' + qStrPairs.join('&'); + } + + function queryStringToParamMap() { + var paramStr = options.getWindowLocation().search.substring(1), + params = [], + paramMap = {}; + + if (paramStr.length > 0) { + params = paramStr.split('&'); + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + var value = decodeURIComponent(p[1]); + if (value === 'true' || value === 'false') { + value = JSON.parse(value); + } + paramMap[decodeURIComponent(p[0])] = value; + } + } + + return paramMap; + } + + } + + return QueryString; +}; diff --git a/test/unit/lib/jasmine.css b/test/unit/lib/jasmine.css new file mode 100755 index 000000000..c54ff3050 --- /dev/null +++ b/test/unit/lib/jasmine.css @@ -0,0 +1,59 @@ +body { overflow-y: scroll; } + +.jasmine_html-reporter { background-color: #eeeeee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; } +.jasmine_html-reporter a { text-decoration: none; } +.jasmine_html-reporter a:hover { text-decoration: underline; } +.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; } +.jasmine_html-reporter .banner, .jasmine_html-reporter .symbol-summary, .jasmine_html-reporter .summary, .jasmine_html-reporter .result-message, .jasmine_html-reporter .spec .description, .jasmine_html-reporter .spec-detail .description, .jasmine_html-reporter .alert .bar, .jasmine_html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; } +.jasmine_html-reporter .banner { position: relative; } +.jasmine_html-reporter .banner .title { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAZCAMAAACGusnyAAACdlBMVEX/////AP+AgICqVaqAQICZM5mAVYCSSZKAQICOOY6ATYCLRouAQICJO4mSSYCIRIiPQICHPIeOR4CGQ4aMQICGPYaLRoCFQ4WKQICPPYWJRYCOQoSJQICNPoSIRICMQoSHQICHRICKQoOHQICKPoOJO4OJQYOMQICMQ4CIQYKLQICIPoKLQ4CKQICNPoKJQISMQ4KJQoSLQYKJQISLQ4KIQoSKQYKIQICIQISMQoSKQYKLQIOLQoOJQYGLQIOKQIOMQoGKQYOLQYGKQIOLQoGJQYOJQIOKQYGJQIOKQoGKQIGLQIKLQ4KKQoGLQYKJQIGKQYKJQIGKQIKJQoGKQYKLQIGKQYKLQIOJQoKKQoOJQYKKQIOJQoKKQoOKQIOLQoKKQYOLQYKJQIOKQoKKQYKKQoKJQYOKQYKLQIOKQoKLQYOKQYKLQIOJQoGKQYKJQYGJQoGKQYKLQoGLQYGKQoGJQYKKQYGJQIKKQoGJQYKLQIKKQYGLQYKKQYGKQYGKQYKJQYOKQoKJQYOKQYKLQYOLQYOKQYKLQYOKQoKKQYKKQYOKQYOJQYKKQYKLQYKKQIKKQoKKQYKKQYKKQoKJQIKKQYKLQYKKQYKKQIKKQYKKQYKKQYKKQIKKQYKJQYGLQYGKQYKKQYKKQYGKQIKKQYGKQYOJQoKKQYOLQYKKQYOKQoKKQYKKQoKKQYKKQYKJQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKJQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKLQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKKQYKmIDpEAAAA0XRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAiIyQlJycoKissLS4wMTQ1Njc4OTo7PDw+P0BCQ0RISUpLTE1OUFNUVVdYWFlaW15fYGFiY2ZnaGlqa2xtb3BxcnN0dnh5ent8fX5/gIGChIWIioyNjo+QkZOUlZaYmZqbnJ2eoKGio6WmqKmsra6vsLGztre4ubq7vL2+wMHDxMjJysvNzs/Q0dLU1tfY2dvc3t/g4eLj5ebn6Onq6+zt7u/w8vP09fb3+Pn6+/z9/vkVQXAAAAMaSURBVHhe5dXxV1N1GMfxz2ABbDgIAm5VDJOyVDIJLUMaVpBWUZUaGbmqoGpZRSiGiRWp6KoZ5AB0ZY50RImZQIlahKkMYXv/R90dBvET/rJfOr3Ouc8v99zPec59zvf56j+vYKlViSf7250X4Mr3O29Tgq08BdGB4DhcekEJ5YkQKFsgWZdtj9JpV+I8xPjLFqkrsEIqO8PHSpis36jWazcqjEsfJjkvRssVU37SdIOu4XCf5vEJPsnwJpnRNU9JmxhMk8l1gehIrq7hTFjzOD+Vf88629qKMJVNltInFeRexRQyJlNeqd1iGDlSzrIUIyXbyFfm3RYprcQRe7lqtWyGYbfc6dT0R2vmdOOkX3u55C1rP37ftiH+tDby4r/RBT0w8TyEkr+epB9XgPDmSYYWbrhCuFYaIyw3fDQAXTnSkh+ANofiHmWf9l+FY1I90FdQTetstO00o23novzVsJ7uB3/C5TkbjRwZ5JerwV4iRWq9HFbFMaK/d0TYqayRiQPuIxxS3Bu8JWU90/60tKi7vkhaznez0a/TbVOKj5CaOZh6fWG6/Lyv9B/ZLR1gw/S/fpbeVD3MCW1li6SvWDOn65tr99/uvWtBS0XDm4s1t+sOHpG0kpBKx/l77wOSnxLpcx6TXmXLTPQOKYOf9Q1dfr8/SJ2mFdCvl1Yl93DiHUZvXeLJbGSzYu5gVJ2slbSakOR8dxCq5adQ2oFLqsE9Ex3L4qQO0eOPeU5x56bypXp4onSEb5OkICX6lDat55TeoztNKQcJaakrz9KCb95oD69IKq+yKW4XPjknaS52V0TZqE2cTtXjcHSCRmUO88e+85hj3EP74i9p8pylw7lxgMDyyl6OV7ZejnjNMfatu87LxRbH0IS35gt2a4ZjmGpVBdKK3Wr6INk8jWWSGqbA55CKgjBRC6E9w78ydTg3ABS3AFV1QN0Y4Aa2pgEjWnQURj9L0ayK6R2ysEqxHUKzYnLvvyU+i9KM2JHJzE4vyZOyDcOwOsySajeLPc8sNvPJkFlyJd20wpqAzZeAfZ3oWybxd+P/3j+SG3uSBdf2VQAAAABJRU5ErkJggg==') no-repeat; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=') no-repeat, none; -webkit-background-size: 100%; -moz-background-size: 100%; -o-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; } +.jasmine_html-reporter .banner .version { margin-left: 14px; position: relative; top: 6px; } +.jasmine_html-reporter .banner .duration { position: absolute; right: 14px; top: 6px; } +.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; } +.jasmine_html-reporter .version { color: #aaaaaa; } +.jasmine_html-reporter .banner { margin-top: 14px; } +.jasmine_html-reporter .duration { color: #aaaaaa; float: right; } +.jasmine_html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; } +.jasmine_html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; } +.jasmine_html-reporter .symbol-summary li.passed { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.passed:before { color: #007069; content: "\02022"; } +.jasmine_html-reporter .symbol-summary li.failed { line-height: 9px; } +.jasmine_html-reporter .symbol-summary li.failed:before { color: #ca3a11; content: "\d7"; font-weight: bold; margin-left: -1px; } +.jasmine_html-reporter .symbol-summary li.disabled { font-size: 14px; } +.jasmine_html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; } +.jasmine_html-reporter .symbol-summary li.pending { line-height: 17px; } +.jasmine_html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; } +.jasmine_html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; } +.jasmine_html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +.jasmine_html-reporter .bar.failed { background-color: #ca3a11; } +.jasmine_html-reporter .bar.passed { background-color: #007069; } +.jasmine_html-reporter .bar.skipped { background-color: #bababa; } +.jasmine_html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; } +.jasmine_html-reporter .bar.menu a { color: #333333; } +.jasmine_html-reporter .bar a { color: white; } +.jasmine_html-reporter.spec-list .bar.menu.failure-list, .jasmine_html-reporter.spec-list .results .failures { display: none; } +.jasmine_html-reporter.failure-list .bar.menu.spec-list, .jasmine_html-reporter.failure-list .summary { display: none; } +.jasmine_html-reporter .running-alert { background-color: #666666; } +.jasmine_html-reporter .results { margin-top: 14px; } +.jasmine_html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } +.jasmine_html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } +.jasmine_html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } +.jasmine_html-reporter.showDetails .summary { display: none; } +.jasmine_html-reporter.showDetails #details { display: block; } +.jasmine_html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } +.jasmine_html-reporter .summary { margin-top: 14px; } +.jasmine_html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } +.jasmine_html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; } +.jasmine_html-reporter .summary li.passed a { color: #007069; } +.jasmine_html-reporter .summary li.failed a { color: #ca3a11; } +.jasmine_html-reporter .summary li.empty a { color: #ba9d37; } +.jasmine_html-reporter .summary li.pending a { color: #ba9d37; } +.jasmine_html-reporter .description + .suite { margin-top: 0; } +.jasmine_html-reporter .suite { margin-top: 14px; } +.jasmine_html-reporter .suite a { color: #333333; } +.jasmine_html-reporter .failures .spec-detail { margin-bottom: 28px; } +.jasmine_html-reporter .failures .spec-detail .description { background-color: #ca3a11; } +.jasmine_html-reporter .failures .spec-detail .description a { color: white; } +.jasmine_html-reporter .result-message { padding-top: 14px; color: #333333; white-space: pre; } +.jasmine_html-reporter .result-message span.result { display: block; } +.jasmine_html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/test/unit/lib/jasmine.js b/test/unit/lib/jasmine.js new file mode 100755 index 000000000..c943db1aa --- /dev/null +++ b/test/unit/lib/jasmine.js @@ -0,0 +1,2516 @@ +/* +Copyright (c) 2008-2014 Pivotal Labs + +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. +*/ +function getJasmineRequireObj() { + if (typeof module !== 'undefined' && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$); + j$.util = jRequire.util(); + j$.Any = jRequire.Any(); + j$.CallTracker = jRequire.CallTracker(); + j$.MockDate = jRequire.MockDate(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(j$); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.Suite = jRequire.Suite(); + j$.Timer = jRequire.Timer(); + j$.version = jRequire.version(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; +}; + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + 'toBe', + 'toBeCloseTo', + 'toBeDefined', + 'toBeFalsy', + 'toBeGreaterThan', + 'toBeLessThan', + 'toBeNaN', + 'toBeNull', + 'toBeTruthy', + 'toBeUndefined', + 'toContain', + 'toEqual', + 'toHaveBeenCalled', + 'toHaveBeenCalledWith', + 'toMatch', + 'toThrow', + 'toThrowError' + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = (function (jasmineGlobal) { + if (typeof module !== 'undefined' && module.exports) { + jasmineGlobal = global; + } + + return function(j$) { + j$.unimplementedMethod_ = function() { + throw new Error('unimplemented method'); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { + return jasmineGlobal; + }; + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_('Array', value); + }; + + j$.isString_ = function(value) { + return j$.isA_('String', value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_('Number', value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + callTracker.track({ + object: this, + args: Array.prototype.slice.apply(arguments) + }); + return spyStrategy.exec.apply(this, arguments); + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw 'createSpyObj requires a non-empty array of method names to create spies for'; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; + }; +})(this); + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + util.arrayContains = function(array, search) { + var i = array.length; + while (i--) { + if (array[i] == search) { + return true; + } + } + return false; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.fn = attrs.fn; + this.beforeFns = attrs.beforeFns || function() { return []; }; + this.afterFns = attrs.afterFns || function() { return []; }; + this.onStart = attrs.onStart || function() {}; + this.exceptionFormatter = attrs.exceptionFormatter || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + + if (!this.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [], + passedExpectations: [] + }; + } + + Spec.prototype.addExpectationResult = function(passed, data) { + var expectationResult = this.expectationResultFactory(data); + if (passed) { + this.result.passedExpectations.push(expectationResult); + } else { + this.result.failedExpectations.push(expectationResult); + } + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.markedPending || this.disabled) { + complete(); + return; + } + + var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns()); + + this.queueRunnerFactory({ + fns: allFns, + onException: onException, + onComplete: complete, + enforceTimeout: function() { return true; } + }); + + function onException(e) { + if (Spec.isPendingSpecException(e)) { + self.pend(); + return; + } + + self.addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: e + }); + } + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function() { + this.markedPending = true; + }; + + Spec.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + Spec.pendingSpecExceptionMessage = '=> marked Pending'; + + Spec.isPendingSpecException = function(e) { + return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Spec = jasmineRequire.Spec; +} + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global)); + + var runnableLookupTable = {}; + + var spies = []; + + var currentSpec = null; + var currentSuite = null; + + var reporter = new j$.ReportDispatcher([ + 'jasmineStarted', + 'jasmineDone', + 'suiteStarted', + 'suiteDone', + 'specStarted', + 'specDone' + ]); + + this.specFilter = function() { + return true; + }; + + var equalityTesters = []; + + var customEqualityTesters = []; + this.addCustomEqualityTester = function(tester) { + customEqualityTesters.push(tester); + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: customEqualityTesters, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var specStarted = function(spec) { + currentSpec = spec; + reporter.specStarted(spec.result); + }; + + var beforeFns = function(suite) { + return function() { + var befores = []; + while(suite) { + befores = befores.concat(suite.beforeFns); + suite = suite.parentSuite; + } + return befores.reverse(); + }; + }; + + var afterFns = function(suite) { + return function() { + var afters = []; + while(suite) { + afters = afters.concat(suite.afterFns); + suite = suite.parentSuite; + } + return afters; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + var maximumSpecCallbackDepth = 20; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + options.timer = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory, + resultCallback: function() {} // TODO - hook this up + }); + runnableLookupTable[topSuite.id] = topSuite; + currentSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + runnablesToRun = runnablesToRun || [topSuite.id]; + + var allFns = []; + for(var i = 0; i < runnablesToRun.length; i++) { + var runnable = runnableLookupTable[runnablesToRun[i]]; + allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable)); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + queueRunnerFactory({fns: allFns, onComplete: reporter.jasmineDone}); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + this.addMatchers = function(matchersToAdd) { + j$.Expectation.addMatchers(matchersToAdd); + }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + spies.push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentSuite, + queueRunner: queueRunnerFactory, + onStart: suiteStarted, + resultCallback: function(attrs) { + reporter.suiteDone(attrs); + } + }); + + runnableLookupTable[suite.id] = suite; + return suite; + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + + var parentSuite = currentSuite; + parentSuite.addChild(suite); + currentSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + this.it('encountered a declaration exception', function() { + throw declarationError; + }); + } + + currentSuite = parentSuite; + + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = this.describe(description, specDefinitions); + suite.disable(); + return suite; + }; + + var specFactory = function(description, fn, suite) { + totalSpecsDefined++; + + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeFns: beforeFns(suite), + afterFns: afterFns(suite), + expectationFactory: expectationFactory, + exceptionFormatter: exceptionFormatter, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + fn: fn + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function removeAllSpies() { + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + spies = []; + } + + function specResultCallback(result) { + removeAllSpies(); + j$.Expectation.resetMatchers(); + customEqualityTesters = []; + currentSpec = null; + reporter.specDone(result); + } + }; + + var suiteStarted = function(suite) { + reporter.suiteStarted(suite.result); + }; + + this.it = function(description, fn) { + var spec = specFactory(description, fn, currentSuite); + currentSuite.addChild(spec); + return spec; + }; + + this.xit = function(description, fn) { + var spec = this.it(description, fn); + spec.pend(); + return spec; + }; + + this.expect = function(actual) { + if (!currentSpec) { + throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); + } + + return currentSpec.expect(actual); + }; + + this.beforeEach = function(beforeEachFunction) { + currentSuite.beforeEach(beforeEachFunction); + }; + + this.afterEach = function(afterEachFunction) { + currentSuite.afterEach(afterEachFunction); + }; + + this.pending = function() { + throw j$.Spec.pendingSpecExceptionMessage; + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = 'loaded'; + + this.started = false; + this.finished = false; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function() { + this.finished = true; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = {}; + + this.suiteStarted = function(result) { + storeSuite(result); + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + function storeSuite(result) { + suites[result.id] = result; + } + + this.suites = function() { + return suites; + }; + + var specs = []; + this.specStarted = function(result) { }; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().Any = function() { + + function Any(expectedObject) { + this.expectedObject = expectedObject; + } + + Any.prototype.jasmineMatches = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return '<jasmine.any(' + this.expectedObject + ')>'; + }; + + return Any; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionScheduler, mockDate) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + timer; + + + self.install = function() { + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + installed = true; + + return self; + }; + + self.uninstall = function() { + delayedFunctionScheduler.reset(); + mockDate.uninstall(); + replace(global, realTimingFunctions); + + timer = realTimingFunctions; + installed = false; + }; + + self.mockDate = function(initialDate) { + mockDate.install(initialDate); + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + mockDate.tick(millis); + delayedFunctionScheduler.tick(millis); + } else { + throw new Error('Mock clock is not installed, use jasmine.clock().install()'); + } + }; + + return self; + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, n); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + self.reset = function() { + currentTime = 0; + scheduledLookup = []; + scheduledFunctions = {}; + delayedFnCount = 0; + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + for (var i = 0; i < funcsToRun.length; ++i) { + var funcToRun = funcsToRun[i]; + funcToRun.funcToCall.apply(null, funcToRun.params || []); + + if (funcToRun.recurring) { + reschedule(funcToRun); + } + } + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = ''; + + if (error.name && error.message) { + message += error.name + ': ' + error.message; + } else { + message += error.toString() + ' thrown'; + } + + if (error.fileName || error.sourceURL) { + message += ' in ' + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += ' (line ' + (error.line || error.lineNumber) + ')'; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + var matchers = {}; + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + for (var matcherName in matchers) { + this[matcherName] = matchers[matcherName]; + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ''; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + if (Object.prototype.toString.apply(result.message) === '[object Function]') { + message = result.message(); + } else { + message = result.message; + } + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.addMatchers = function(matchersToAdd) { + for (var name in matchersToAdd) { + var matcher = matchersToAdd[name]; + matchers[name] = Expectation.prototype.wrapCompare(name, matcher); + } + }; + + Expectation.resetMatchers = function() { + for (var name in matchers) { + delete matchers[name]; + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + return { + matcherName: options.matcherName, + expected: options.expected, + actual: options.actual, + message: message(), + stack: stack(), + passed: options.passed + }; + + function message() { + if (options.passed) { + return 'Passed.'; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ''; + } + + function stack() { + if (options.passed) { + return ''; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().MockDate = function() { + function MockDate(global) { + var self = this; + var currentTime = 0; + + if (!global || !global.Date) { + self.install = function() {}; + self.tick = function() {}; + self.uninstall = function() {}; + return self; + } + + var GlobalDate = global.Date; + + self.install = function(mockDate) { + if (mockDate instanceof GlobalDate) { + currentTime = mockDate.getTime(); + } else { + currentTime = new GlobalDate().getTime(); + } + + global.Date = FakeDate; + }; + + self.tick = function(millis) { + millis = millis || 0; + currentTime = currentTime + millis; + }; + + self.uninstall = function() { + currentTime = 0; + global.Date = GlobalDate; + }; + + createDateProperties(); + + return self; + + function FakeDate() { + if (arguments.length === 0) { + return new GlobalDate(currentTime); + } else { + return new GlobalDate(arguments[0], arguments[1], arguments[2], + arguments[3], arguments[4], arguments[5], arguments[6]); + } + } + + function createDateProperties() { + + FakeDate.now = function() { + if (GlobalDate.now) { + return currentTime; + } else { + throw new Error('Browser does not support Date.now()'); + } + }; + + FakeDate.toSource = GlobalDate.toSource; + FakeDate.toString = GlobalDate.toString; + FakeDate.parse = GlobalDate.parse; + FakeDate.UTC = GlobalDate.UTC; + } + } + + return MockDate; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) { + if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } + + mismatchKeys = mismatchKeys || []; + mismatchValues = mismatchValues || []; + + var hasKey = function(obj, keyName) { + return obj !== null && !j$.util.isUndefined(obj[keyName]); + }; + + for (var property in this.sample) { + if (!hasKey(other, property) && hasKey(this.sample, property)) { + mismatchKeys.push('expected has key \'' + property + '\', but missing from actual.'); + } + else if (!j$.matchersUtil.equals(other[property], this.sample[property])) { + mismatchValues.push('\'' + property + '\' was \'' + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + '\' in actual, but was \'' + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + '\' in expected.'); + } + } + + return (mismatchKeys.length === 0 && mismatchValues.length === 0); + }; + + ObjectContaining.prototype.jasmineToString = function() { + return '<jasmine.objectContaining(' + j$.pp(this.sample) + ')>'; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + this.seen = []; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === 0 && 1/value === -Infinity) { + this.emitScalar('-0'); + } else if (value === j$.getGlobal()) { + this.emitScalar('<global>'); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar('spy on ' + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (j$.util.arrayContains(this.seen, value)) { + this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>'); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + this.seen.push(value); + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + this.seen.pop(); + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append('\'' + value + '\''); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Array'); + return; + } + var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); + this.append('[ '); + for (var i = 0; i < length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + if(array.length > length){ + this.append(', ...'); + } + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Object'); + return; + } + + var self = this; + this.append('{ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.append(property); + self.append(': '); + if (isGetter) { + self.append('<getter>'); + } else { + self.format(obj[property]); + } + }); + + this.append(' }'); + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function(j$) { + + function once(fn) { + var called = false; + return function() { + if (!called) { + called = true; + fn(); + } + }; + } + + function QueueRunner(attrs) { + this.fns = attrs.fns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.enforceTimeout = attrs.enforceTimeout || function() { return false; }; + this.userContext = {}; + this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.fns, 0); + }; + + QueueRunner.prototype.run = function(fns, recursiveIndex) { + var length = fns.length, + self = this, + iterativeIndex; + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var fn = fns[iterativeIndex]; + if (fn.length > 0) { + return attemptAsync(fn); + } else { + attemptSync(fn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(fn) { + try { + fn.call(self.userContext); + } catch (e) { + handleException(e); + } + } + + function attemptAsync(fn) { + var clearTimeout = function () { + Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]); + }, + next = once(function () { + clearTimeout(timeoutId); + self.run(fns, iterativeIndex + 1); + }), + timeoutId; + + if (self.enforceTimeout()) { + timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { + self.onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.')); + next(); + }, j$.DEFAULT_TIMEOUT_INTERVAL]]); + } + + try { + fn.call(self.userContext, next); + } catch (e) { + handleException(e); + next(); + } + } + + function handleException(e) { + self.onException(e); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || 'unknown', + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function() { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.onStart = attrs.onStart || function() {}; + this.resultCallback = attrs.resultCallback || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + + this.beforeFns = []; + this.afterFns = []; + this.queueRunner = attrs.queueRunner || function() {}; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + status: this.disabled ? 'disabled' : '', + description: this.description, + fullName: this.getFullName() + }; + } + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.execute = function(onComplete) { + var self = this; + if (this.disabled) { + complete(); + return; + } + + var allFns = []; + + for (var i = 0; i < this.children.length; i++) { + allFns.push(wrapChildAsAsync(this.children[i])); + } + + this.onStart(this); + + this.queueRunner({ + fns: allFns, + onComplete: complete + }); + + function complete() { + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + + function wrapChildAsAsync(child) { + return function(done) { child.execute(done); }; + } + }; + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + var defaultNow = (function(Date) { + return function() { return new Date().getTime(); }; + })(Date); + + function Timer(options) { + options = options || {}; + + var now = options.now || defaultNow, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if (Object.prototype.toString.apply(haystack) === '[object Array]') { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + return !!haystack && haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = 'Expected ' + + j$.pp(actual) + + (isNot ? ' not ' : ' ') + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ','; + } + message += ' ' + j$.pp(expected[i]); + } + } + + return message + '.'; + } + }; + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof j$.Any) { + result = a.jasmineMatches(b); + if (result) { + return true; + } + } + + if (b instanceof j$.Any) { + result = b.jasmineMatches(a); + if (result) { + return true; + } + } + + if (b instanceof j$.ObjectContaining) { + result = b.jasmineMatches(a); + if (result) { + return true; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + if (className == '[object Array]') { + // Compare array lengths to determine if a deep comparison is necessary. + size = a.length; + result = size == b.length; + if (result) { + // Deep compare the contents, ignoring non-numeric properties. + while (size--) { + if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; } + } + } + } else { + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && + isFunction(bCtor) && (bCtor instanceof bCtor))) { + return false; + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return obj.hasOwnProperty(key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = 'Expected actual not to be NaN.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called.' : + 'Expected spy ' + actual.and.identity() + ' to have been called.'; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util, customEqualityTesters) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { + result.pass = true; + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; + } else { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function() { + + function toMatch() { + return { + compare: function(actual, expected) { + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = 'Expected function to throw an exception.'; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; + } else { + result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError (util) { + return { + compare: function(actual) { + var threw = false, + pass = {pass: true}, + fail = {pass: false}, + thrown, + errorType, + message, + regexp, + name, + constructorName; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + extractExpectedParams.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + fail.message = 'Expected function to throw an Error.'; + return fail; + } + + if (!(thrown instanceof Error)) { + fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; + return fail; + } + + if (arguments.length == 1) { + pass.message = 'Expected function not to throw an Error, but it threw ' + fnNameFor(thrown) + '.'; + return pass; + } + + if (errorType) { + name = fnNameFor(errorType); + constructorName = fnNameFor(thrown.constructor); + } + + if (errorType && message) { + if (thrown.constructor == errorType && util.equals(thrown.message, message)) { + pass.message = function() { return 'Expected function not to throw ' + name + ' with message ' + j$.pp(message) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw ' + name + ' with message ' + j$.pp(message) + + ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (errorType && regexp) { + if (thrown.constructor == errorType && regexp.test(thrown.message)) { + pass.message = function() { return 'Expected function not to throw ' + name + ' with message matching ' + j$.pp(regexp) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw ' + name + ' with message matching ' + j$.pp(regexp) + + ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (errorType) { + if (thrown.constructor == errorType) { + pass.message = 'Expected function not to throw ' + name + '.'; + return pass; + } else { + fail.message = 'Expected function to throw ' + name + ', but it threw ' + constructorName + '.'; + return fail; + } + } + + if (message) { + if (thrown.message == message) { + pass.message = function() { return 'Expected function not to throw an exception with message ' + j$.pp(message) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw an exception with message ' + j$.pp(message) + + ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (regexp) { + if (regexp.test(thrown.message)) { + pass.message = function() { return 'Expected function not to throw an exception with a message matching ' + j$.pp(regexp) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw an exception with a message matching ' + j$.pp(regexp) + + ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + function fnNameFor(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + } + + function extractExpectedParams() { + if (arguments.length == 1) { + return; + } + + if (arguments.length == 2) { + var expected = arguments[1]; + + if (expected instanceof RegExp) { + regexp = expected; + } else if (typeof expected == 'string') { + message = expected; + } else if (checkForAnErrorType(expected)) { + errorType = expected; + } + + if (!(errorType || message || regexp)) { + throw new Error('Expected is not an Error, string, or RegExp.'); + } + } else { + if (checkForAnErrorType(arguments[1])) { + errorType = arguments[1]; + } else { + throw new Error('Expected error type is not an Error.'); + } + + if (arguments[2] instanceof RegExp) { + regexp = arguments[2]; + } else if (typeof arguments[2] == 'string') { + message = arguments[2]; + } else { + throw new Error('Expected error message is not a string or RegExp.'); + } + } + } + + function checkForAnErrorType(type) { + if (typeof type !== 'function') { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + }; + } + + return toThrowError; +}; + +getJasmineRequireObj().version = function() { + return '2.0.1'; +}; diff --git a/test/unit/lib/pipeline-test-util.js b/test/unit/lib/pipeline-test-util.js new file mode 100644 index 000000000..93297b0df --- /dev/null +++ b/test/unit/lib/pipeline-test-util.js @@ -0,0 +1,112 @@ +var Vue = require('vue') +var Router = require('../../../src') +var Emitter = require('events').EventEmitter + +/** + * Setup a router app for testing with two nested routes: + * + * - /a/b + * - /c/d + * + * @param {Object} configs - an object that contains the + * route configs for each component. + * @param {Function} cb(router, calls, emitter) + */ + +exports.test = function (configs, cb) { + var emitter = new Emitter() + var router = new Router({ abstract: true }) + var el = document.createElement('div') + var App = Vue.extend({ template: '<div><router-view></router-view></div>' }) + var calls = [] + // wrap hooks + Object.keys(configs).forEach(function (route) { + var config = configs[route] + Object.keys(config).forEach(function (hook) { + var fn = config[hook] + if (Array.isArray(fn) || hook === 'mixins') { + return + } + if (fn.length) { + config[hook] = function (transition) { + var event = route + '.' + hook + calls.push(event) + var res = typeof fn === 'function' + ? fn(transition) + : fn + emitter.emit(event) + return res + } + } else { + config[hook] = function () { + var event = route + '.' + hook + calls.push(event) + var res = typeof fn === 'function' + ? fn() + : fn + emitter.emit(event) + return res + } + } + }) + }) + router.map({ + '/a': { + component: { + template: 'A <router-view></router-view>', + route: configs.a + }, + subRoutes: { + '/b': { + component: { + template: 'B', + route: configs.b + } + }, + '/e': { + component: { + template: 'E' + } + } + } + }, + '/c': { + component: { + template: 'C <router-view></router-view>', + route: configs.c + }, + subRoutes: { + '/d': { + component: { + template: 'D', + route: configs.d + } + } + } + }, + '/data/:msg': { + component: { + route: configs.data, + mixins: configs.data && configs.data.mixins, + template: + '<span v-if="$loadingRouteData">loading...</span>' + + '<span v-if="!$loadingRouteData">{{msg}}{{otherMsg}}{{thirdMsg}}</span>', + data: function () { + return { + msg: 'default', + otherMsg: '', + thirdMsg: '' + } + } + } + } + }) + router.start(App, el) + cb(router, calls, emitter) +} + +exports.assertCalls = function (calls, expects) { + expects.forEach(function (e, i) { + expect(calls[i]).toBe(e) + }) +} diff --git a/test/unit/specs/abstract-history.spec.js b/test/unit/specs/abstract-history.spec.js deleted file mode 100644 index 7835ab1e9..000000000 --- a/test/unit/specs/abstract-history.spec.js +++ /dev/null @@ -1,42 +0,0 @@ -import Vue from 'vue' -import VueRouter from '../../../src/index' - -Vue.use(VueRouter) - -const delay = t => new Promise(resolve => setTimeout(resolve, t)) - -describe('abstract history', () => { - it('run afterEach after initial navigation', done => { - const router = new VueRouter({ mode: 'abstract' }) - const afterEach = jasmine.createSpy('afterEach') - const onReady = jasmine.createSpy('ready') - const onError = jasmine.createSpy('error') - router.afterEach(afterEach) - router.onReady(onReady, onError) - - router.push('/').finally(() => { - expect(onReady).toHaveBeenCalled() - expect(onError).not.toHaveBeenCalled() - expect(afterEach).toHaveBeenCalled() - done() - }) - }) - - it('run afterEach after router.go', done => { - const router = new VueRouter({ mode: 'abstract' }) - const afterEach = jasmine.createSpy('afterEach') - - router - .push('/') - .then(() => router.push('/foo')) - .then(() => { - router.afterEach(afterEach) - router.go(-1) - return delay(30) - }) - .finally(() => { - expect(afterEach).toHaveBeenCalled() - done() - }) - }) -}) diff --git a/test/unit/specs/api.spec.js b/test/unit/specs/api.spec.js deleted file mode 100644 index 2a31b2501..000000000 --- a/test/unit/specs/api.spec.js +++ /dev/null @@ -1,350 +0,0 @@ -import Router from '../../../src/index' -import Vue from 'vue' - -describe('router.onReady', () => { - it('should work', done => { - const calls = [] - - const router = new Router({ - mode: 'abstract', - routes: [ - { - path: '/a', - component: { - name: 'A', - beforeRouteEnter: (to, from, next) => { - setTimeout(() => { - calls.push(2) - next() - }, 1) - } - } - } - ] - }) - - router.beforeEach((to, from, next) => { - setTimeout(() => { - calls.push(1) - next() - }, 1) - }) - - router.onReady(() => { - expect(calls).toEqual([1, 2]) - // sync call when already ready - router.onReady(() => { - calls.push(3) - }) - expect(calls).toEqual([1, 2, 3]) - done() - }) - - router.push('/a') - expect(calls).toEqual([]) - }) -}) - -describe('route matching', () => { - it('resolves parent params when using current route', () => { - const router = new Router({ - mode: 'abstract', - routes: [ - { - path: '/a/:id', - component: { name: 'A' }, - children: [{ name: 'b', path: 'b', component: { name: 'B' }}] - } - ] - }) - - router.push('/a/1') - - const { route, resolved } = router.resolve({ name: 'b' }) - expect(route.params).toEqual({ id: '1' }) - expect(resolved.params).toEqual({ id: '1' }) - }) - - it('can override currentRoute', () => { - const router = new Router({ - mode: 'abstract', - routes: [ - { - path: '/a/:id', - component: { name: 'A' }, - children: [{ name: 'b', path: 'b', component: { name: 'B' }}] - } - ] - }) - - router.push('/a/1') - - const { route, resolved } = router.resolve({ name: 'b' }, { params: { id: '2' }, path: '/a/2' }) - expect(route.params).toEqual({ id: '2' }) - expect(resolved.params).toEqual({ id: '2' }) - }) -}) - -describe('router.addRoutes', () => { - it('should work', () => { - const router = new Router({ - mode: 'abstract', - routes: [ - { path: '/a', component: { name: 'A' }} - ] - }) - - router.push('/a') - let components = router.getMatchedComponents() - expect(components.length).toBe(1) - expect(components[0].name).toBe('A') - - router.push('/b') - components = router.getMatchedComponents() - expect(components.length).toBe(0) - - router.addRoutes([ - { path: '/b', component: { name: 'B' }} - ]) - components = router.getMatchedComponents() - expect(components.length).toBe(1) - expect(components[0].name).toBe('B') - - // make sure it preserves previous routes - router.push('/a') - components = router.getMatchedComponents() - expect(components.length).toBe(1) - expect(components[0].name).toBe('A') - }) - - it('allows navigating to the same as current location', () => { - const router = new Router({ - routes: [ - { path: '/', component: {}}, - { path: '*', component: {}} - ] - }) - - router.push('/not-found') - - expect(router.currentRoute.params).toEqual({ pathMatch: '/not-found' }) - router.addRoutes([{ path: '/not-found', component: {}}]) - - // the navigation should have changed locations - expect(router.currentRoute.params).toEqual({}) - }) -}) - -describe('router.push/replace', () => { - let calls = [] - let router, spy1, spy2 - - const Foo = { - beforeRouteEnter (to, from, next) { - calls.push(3) - setTimeout(() => { - calls.push(4) - next() - }, 1) - } - } - - beforeEach(() => { - calls = [] - spy1 = jasmine.createSpy('complete') - spy2 = jasmine.createSpy('abort') - - router = new Router({ - routes: [ - { path: '/foo', component: Foo } - ] - }) - - router.beforeEach((to, from, next) => { - calls.push(1) - setTimeout(() => { - calls.push(2) - next() - }, 1) - }) - }) - describe('callbacks', () => { - it('push does not return a Promise when a callback is passed', done => { - expect(router.push('/foo', done)).toEqual(undefined) - }) - - it('push complete', done => { - router.push('/foo', () => { - expect(calls).toEqual([1, 2, 3, 4]) - done() - }) - }) - - it('push abort', done => { - router.push('/foo', spy1, spy2) - router.push('/bar', () => { - expect(calls).toEqual([1, 1, 2, 2]) - expect(spy1).not.toHaveBeenCalled() - expect(spy2).toHaveBeenCalled() - done() - }) - }) - - it('replace does not return a Promise when a callback is passed', done => { - expect(router.replace('/foo', done)).toEqual(undefined) - }) - - it('replace complete', done => { - router.replace('/foo', () => { - expect(calls).toEqual([1, 2, 3, 4]) - done() - }) - }) - - it('replace abort', done => { - router.replace('/foo', spy1, spy2) - router.replace('/bar', () => { - expect(calls).toEqual([1, 1, 2, 2]) - expect(spy1).not.toHaveBeenCalled() - expect(spy2).toHaveBeenCalled() - done() - }) - }) - }) - - describe('promises', () => { - it('push complete', done => { - router.push('/foo') - .then(spy1) - .finally(() => { - expect(calls).toEqual([1, 2, 3, 4]) - expect(spy1).toHaveBeenCalledWith(router.currentRoute) - done() - }) - }) - - it('push abort', done => { - router.push('/foo').catch(spy2) - router.push('/bar').finally(() => { - expect(calls).toEqual([1, 1, 2, 2]) - expect(spy1).not.toHaveBeenCalled() - expect(spy2).toHaveBeenCalled() - done() - }) - }) - - it('replace complete', done => { - router.replace('/foo') - .then(spy1) - .finally(() => { - expect(calls).toEqual([1, 2, 3, 4]) - expect(spy1).toHaveBeenCalledWith(router.currentRoute) - done() - }) - }) - - it('replace abort', done => { - router.replace('/foo').catch(spy2) - router.replace('/bar').finally(() => { - expect(calls).toEqual([1, 1, 2, 2]) - expect(spy1).not.toHaveBeenCalled() - expect(spy2).toHaveBeenCalled() - done() - }) - }) - }) -}) - -describe('router app destroy handling', () => { - Vue.use(Router) - - let router, app1, app2, app3 - - beforeEach(() => { - router = new Router({ - mode: 'abstract', - routes: [ - { path: '/', component: { name: 'A' }} - ] - }) - - // Add main app - app1 = new Vue({ - router, - render (h) { return h('div') } - }) - - // Add 2nd app - app2 = new Vue({ - router, - render (h) { return h('div') } - }) - - // Add 3rd app - app3 = new Vue({ - router, - render (h) { return h('div') } - }) - }) - - it('all apps point to the same router instance', () => { - expect(app1.$router).toBe(app2.$router) - expect(app2.$router).toBe(app3.$router) - }) - - it('should have all 3 registered apps', () => { - expect(app1.$router.app).toBe(app1) - expect(app1.$router.apps.length).toBe(3) - expect(app1.$router.apps[0]).toBe(app1) - expect(app1.$router.apps[1]).toBe(app2) - expect(app1.$router.apps[2]).toBe(app3) - }) - - it('should remove 2nd destroyed app from this.apps', () => { - app2.$destroy() - expect(app1.$router.app).toBe(app1) - expect(app1.$router.apps.length).toBe(2) - expect(app1.$router.apps[0]).toBe(app1) - expect(app1.$router.apps[1]).toBe(app3) - }) - - it('should remove 1st destroyed app and replace current app', () => { - app1.$destroy() - expect(app3.$router.app).toBe(app2) - expect(app3.$router.apps.length).toBe(2) - expect(app3.$router.apps[0]).toBe(app2) - expect(app1.$router.apps[1]).toBe(app3) - }) - - it('should remove all apps', () => { - app1.$destroy() - app3.$destroy() - app2.$destroy() - expect(app3.$router.app).toBe(null) - expect(app3.$router.apps.length).toBe(0) - }) - - it('should keep current app if already defined', () => { - const app4 = new Vue({ - router, - render (h) { return h('div') } - }) - expect(app4.$router.app).toBe(app1) - expect(app4.$router.apps.length).toBe(4) - expect(app4.$router.apps[3]).toBe(app4) - }) - - it('should replace current app if none is assigned when creating the app', () => { - app1.$destroy() - app3.$destroy() - app2.$destroy() - const app4 = new Vue({ - router, - render (h) { return h('div') } - }) - expect(router.app).toBe(app4) - expect(app4.$router).toBe(router) - expect(app4.$router.apps.length).toBe(1) - expect(app4.$router.apps[0]).toBe(app4) - }) -}) diff --git a/test/unit/specs/async.spec.js b/test/unit/specs/async.spec.js deleted file mode 100644 index 4cd82be9d..000000000 --- a/test/unit/specs/async.spec.js +++ /dev/null @@ -1,17 +0,0 @@ -import { runQueue } from '../../../src/util/async' - -describe('Async utils', () => { - describe('runQueue', () => { - it('should work', done => { - const calls = [] - const queue = [1, 2, 3, 4, 5].map(i => next => { - calls.push(i) - setTimeout(next, 0) - }) - runQueue(queue, (fn, next) => fn(next), () => { - expect(calls).toEqual([1, 2, 3, 4, 5]) - done() - }) - }) - }) -}) diff --git a/test/unit/specs/core.js b/test/unit/specs/core.js new file mode 100644 index 000000000..8f01ce6be --- /dev/null +++ b/test/unit/specs/core.js @@ -0,0 +1,1267 @@ +var Vue = require('vue') +var Router = require('../../../src') +var nextTick = Vue.nextTick + +describe('Core', function () { + + var router, el + + beforeEach(function () { + el = document.createElement('div') + document.body.appendChild(el) + spyOn(window, 'scrollTo') + spyOn(console, 'error') + }) + + afterEach(function () { + var el = router && router.app.$el + if (el && document.body.contains(el)) { + document.body.removeChild(el) + } + }) + + it('call Vue constructor with no arguments', function () { + /* eslint-disable no-new */ + expect(function () { + new Vue() + }).not.toThrow() + /* eslint-enable no-new */ + }) + + it('matching views', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a': { component: { + template: 'AAA', + data: function () { + expect(this.$route).toBeTruthy() + } + }}, + '/b': { component: { template: 'BBB' }} + }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + var cb = jasmine.createSpy() + router.start(App, el, function () { + expect(router.app).toBeTruthy() + cb() + }) + expect(cb).toHaveBeenCalled() + assertRoutes([ + ['/a', 'AAA'], + ['/b', 'BBB'], + // relative + ['a', 'AAA'], + ['b', 'BBB'], + // relative with traversal + ['../a', 'AAA', '/a'], + ['./../b', 'BBB', '/b'], + // no match + ['/c', ''] + ], done) + }) + + it('go() with object', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a/:msg': { + name: 'a', + component: { template: 'A{{$route.params.msg}}' } + }, + '/b/:msg': { + name: 'b', + component: { template: 'B{{$route.params.msg}}{{$route.query.msg}}<router-view></router-view>' }, + subRoutes: { + '/c': { + component: { template: 'C' } + } + } + } + }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.start(App, el) + assertRoutes([ + [{ path: '/a/A' }, 'AA'], + [{ path: '/b/B' }, 'BB'], + // relative + [{ path: '../a/A' }, 'AA'], + [{ path: '../b/B' }, 'BB'], + // relative with append: true + [{ path: 'c', append: true }, 'BBC'], + // named routes + [{ name: 'a', params: {msg: 'A'}}, 'AA'], + [{ name: 'b', params: {msg: 'B'}, query: {msg: 'B'}}, 'BBB'] + ], done) + }) + + it('go () querystring coding', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a': { + component: { template: 'A{{$route.query.msg}}' } + }, + '/b': { + name: 'b', + component: { template: 'B{{$route.query.msg}}' } + }, + '/c': { + component: { template: 'C{{$route.query.msg}}' } + } + }) + var App = Vue.extend({ + replace: false, + template: '<router-view></router-view>' + }) + var query = {msg: 'https://www.google.com/#q=vuejs'} + router.start(App, el) + assertRoutes([ + // object with path + [{ path: '/a', query: query }, 'A' + query.msg], + // object with named route + [{ name: 'b', query: query }, 'B' + query.msg], + // special char + ['/c?msg=%!!!', 'C%!!!'] + ], done) + }) + + it('matching nested views', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a': { + component: { + template: 'VIEW A <router-view></router-view>' + }, + subRoutes: { + '/': { + component: { + template: 'SUB A DEFAULT' + } + }, + '/sub-a': { + component: { + template: 'SUB A' + } + }, + '/sub-a-2': { + component: { + template: 'SUB A2' + } + } + } + }, + '/b': { + component: { + template: 'VIEW B <router-view></router-view>' + }, + subRoutes: { + '/sub-b': { + component: { + template: 'SUB B' + } + } + } + } + }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.start(App, el) + assertRoutes([ + ['/a', 'VIEW A SUB A DEFAULT'], + ['/a/sub-a', 'VIEW A SUB A'], + ['/a/sub-a-2', 'VIEW A SUB A2'], + ['/b/sub-b', 'VIEW B SUB B'], + ['/b', 'VIEW B '], + // no match + ['/b/sub-a', ''] + ], done) + }) + + it('matching nested views with keep-alive', function (done) { + router = new Router({ abstract: true }) + var spyA = jasmine.createSpy() + var spySubA = jasmine.createSpy() + router.map({ + '/a': { + component: { + template: 'VIEW A <router-view></router-view>', + created: spyA + }, + subRoutes: { + '/': { + component: { + template: 'SUB A DEFAULT' + } + }, + '/sub-a': { + component: { + template: 'SUB A' + } + }, + '/sub-a-2': { + component: { + template: 'SUB A2', + created: spySubA + } + } + } + }, + '/b': { + component: { + template: 'VIEW B <router-view></router-view>' + }, + subRoutes: { + '/sub-b': { + component: { + template: 'SUB B' + } + } + } + } + }) + var App = Vue.extend({ + template: '<div><router-view keep-alive></router-view></div>' + }) + router.start(App, el) + assertRoutes([ + ['/a', 'VIEW A SUB A DEFAULT'], + ['/a/sub-a', 'VIEW A SUB A'], + ['/a/sub-a-2', 'VIEW A SUB A2'], + ['/b/sub-b', 'VIEW B SUB B'], + // revisit a kept-alive view + ['/a/sub-a-2', 'VIEW A SUB A2'], + ['/b', 'VIEW B '], + // no match + ['/b/sub-a', ''] + ], function () { + expect(spyA.calls.count()).toBe(1) + expect(spySubA.calls.count()).toBe(1) + done() + }) + }) + + it('route context', function (done) { + Vue.config.silent = true + router = new Router({ abstract: true }) + router.map({ + '/a/:id': { + customField: 'custom', + component: { + template: '{{$route.path}},{{$route.params.id}},{{$route.query.id}},{{$route.customField}}|' + } + } + }) + var App = Vue.extend({ + template: + '<div>' + + '<router-view></router-view>' + + // context should be available in non-router-view + // components too. + '<view-b></view-b>' + + '</div>', + components: { + 'view-b': { + template: '{{$route.path}},{{$route.params.id}},{{$route.query.id}},{{$route.customField}}' + } + } + }) + router.start(App, el) + assertRoutes([ + // no param, no match (only view-b) + ['/a', '/a,,,'], + // params only + ['/a/123', '/a/123,123,,custom|/a/123,123,,custom'], + // params + query + ['/a/123?id=234', '/a/123?id=234,123,234,custom|/a/123?id=234,123,234,custom'], + // relative query + ['?id=345', '/a/123?id=345,123,345,custom|/a/123?id=345,123,345,custom'] + ], function () { + Vue.config.silent = false + done() + }) + }) + + it('v-link', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a': { + component: { + template: + '<div>' + + '<a id="link-a" v-link="{ path: \'b\', query: { id: 123 }}">Link A</a>' + + '</div>' + } + }, + '/b': { + component: { + data: function () { + return { a: 'a?a=1' } + }, + template: + '<div>' + + '<a id="link-b" v-link="{ path: \'/\' + a, query: { b: 2 }}">Link B</a>' + + '<a id="link-c" v-link="{ path: c }"></c>' + + '</div>' + } + }, + // test v-link with relative path + append + '/c': { + component: { template: + '<a id="link-c" v-link="{ path: \'d\', append: true }">Link C</a><router-view></router-view>' + + '<a id="link-null" v-link="{ path: null }"></a>' + }, + subRoutes: { + '/d': { + component: { template: '+D' } + } + } + } + }) + var App = Vue.extend({ + replace: false, + template: '<router-view></router-view>' + }) + router.start(App, el) + router.go('/a') + el = router.app.$el + nextTick(function () { + expect(el.textContent).toBe('Link A') + var link = el.querySelector('#link-a') + expect(link.getAttribute('href')).toBe('b?id=123') + click(link) + nextTick(function () { + expect(el.textContent).toBe('Link B') + var link = el.querySelector('#link-b') + expect(link.getAttribute('href')).toBe('/a?a=1&b=2') + // falsy expressions should not set href + expect(el.querySelector('#link-c').hasAttribute('href')).toBe(false) + click(link) + nextTick(function () { + expect(el.textContent).toBe('Link A') + router.go('/c') + nextTick(function () { + expect(el.textContent).toBe('Link C') + var nullLink = el.querySelector('#link-null') + click(nullLink) + nextTick(function () { + expect(el.textContent).toBe('Link C') + var link = el.querySelector('#link-c') + click(link) + nextTick(function () { + expect(el.textContent).toBe('Link C+D') + done() + }) + }) + }) + }) + }) + }) + }) + + it('v-link active classes', function (done) { + router = new Router({ + abstract: true, + linkActiveClass: 'active' + }) + var App = Vue.extend({ + replace: false, + data: function () { + return { className: 'a b c' } + }, + template: + '<a id="link-a" v-link="{ path: \'/a\' }">Link A</a>' + + '<a id="link-b" v-link="{ path: \'/b\', activeClass: className }">Link B</a>' + + '<a id="link-c" v-link="{ path: \'/\', exact: true }">Link C</a>' + + '<router-view></router-view>' + }) + router.start(App, el) + el = router.app.$el + var linkA = el.querySelector('#link-a') + var linkB = el.querySelector('#link-b') + var linkC = el.querySelector('#link-c') + expect(linkA.className).toBe('') + expect(linkB.className).toBe('') + expect(linkC.className).toBe('active') + router.go('/a?a=123') + nextTick(function () { + expect(linkA.className).toBe('active') + expect(linkB.className).toBe('') + expect(linkC.className).toBe('') + router.go('/a/b/c') + nextTick(function () { + expect(linkA.className).toBe('active') + expect(linkB.className).toBe('') + expect(linkC.className).toBe('') + router.go('/b') + nextTick(function () { + expect(linkA.className).toBe('') + expect(linkB.className).toBe('a b c') + expect(linkC.className).toBe('') + router.app.className = 'd e' + router.go('/b/c/d') + nextTick(function () { + expect(linkA.className).toBe('') + expect(linkB.className).toBe('d e') + expect(linkC.className).toBe('') + router.go('/bcd') + nextTick(function () { + // #114 should not match + expect(linkA.className).toBe('') + expect(linkB.className).toBe('') + expect(linkC.className).toBe('') + done() + }) + }) + }) + }) + }) + }) + + it('v-link active classes with named routes', function (done) { + router = new Router({ + abstract: true, + linkActiveClass: 'active' + }) + router.map({ + '/a/:id': { + component: {}, + subRoutes: { + 'b/:bid': { + name: 'b', + component: {} + } + } + } + }) + var App = Vue.extend({ + replace: false, + data: function () { + return { className: 'custom' } + }, + template: + '<a id="link" v-link="{ name: \'b\', params: { id: 1, bid: 2 }}">Link A</a>' + + '<router-view></router-view>' + }) + router.start(App, el) + el = router.app.$el + var link = el.querySelector('#link') + expect(link.className).toBe('') + router.go('/a/1/b/1') + nextTick(function () { + expect(link.className).toBe('') + router.go({ name: 'b', params: { bid: 2 }}) + nextTick(function () { + expect(link.className).toBe('active') + expect(router._currentRoute.path).toBe('/a/1/b/2') + done() + }) + }) + }) + + it('v-link active classes with v-link-active', function (done) { + router = new Router({ + abstract: true, + linkActiveClass: 'active' + }) + var App = Vue.extend({ + replace: false, + components: { + test: { + template: '<a><slot></slot></a>' + } + }, + template: + '<ul>' + + '<li id="link-a" v-link-active>' + + '<a v-link="{ path: \'/a\' }">Link A</a>' + + '</li>' + + '<li id="link-b" v-link-active>' + + '<a v-if="true" v-link="{ path: \'/b\' }">Link B</a>' + + '</li>' + + '<li id="link-c" v-link-active>' + + '<test v-link="{ path: \'/c\' }">Link C</test>' + + '</li>' + + '</ul>' + }) + router.start(App, el) + el = router.app.$el + var linkA = el.querySelector('#link-a') + var linkB = el.querySelector('#link-b') + var linkC = el.querySelector('#link-c') + expect(linkA.className).toBe('') + expect(linkB.className).toBe('') + expect(linkC.className).toBe('') + router.go('/a') + nextTick(function () { + expect(linkA.className).toBe('active') + expect(linkB.className).toBe('') + expect(linkC.className).toBe('') + router.go('/b') + nextTick(function () { + expect(linkA.className).toBe('') + expect(linkB.className).toBe('active') + expect(linkC.className).toBe('') + router.go('/c') + nextTick(function () { + expect(linkA.className).toBe('') + expect(linkB.className).toBe('') + expect(linkC.className).toBe('active') + done() + }) + }) + }) + }) + + it('multiple nested v-link-active', function (done) { + router = new Router({ + abstract: true, + linkActiveClass: 'active' + }) + var App = Vue.extend({ + replace: false, + template: + '<div v-link-active class="outer">' + + '<div v-link-active class="inner">' + + '<a v-link="{ path: \'/a\'}">Link A</a>' + + '</div>' + + '</div>' + }) + router.start(App, el) + el = router.app.$el + var outer = el.querySelector('.outer') + var inner = el.querySelector('.inner') + expect(outer.className).toBe('outer') + expect(inner.className).toBe('inner') + router.go('/a') + nextTick(function () { + expect(outer.className).toBe('outer active') + expect(inner.className).toBe('inner active') + done() + }) + }) + + it('v-link relative querystring', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/': { + component: { + template: + '<div>' + + '<router-view></router-view>' + + '</div>' + }, + subRoutes: { + 'foo': { + component: { + template: + '<div>' + + '<a v-link="{ path: \'?id=1234\' }" id="link"></a>' + + '{{$route.query.id}}' + + '</div>' + } + } + } + } + }) + var App = Vue.extend({ + replace: false, + template: '<router-view></router-view>' + }) + router.start(App, el) + router.go('/foo') + nextTick(function () { + click(router.app.$el.querySelector('#link')) + nextTick(function () { + var text = router.app.$el.textContent + expect(text).toBe('1234') + done() + }) + }) + }) + + it('v-link delegate', function (done) { + // Safari and PhantomJS only propagates events if the + // element is in the DOM! + document.body.appendChild(el) + router = new Router({ abstract: true }) + router.map({ + '/': { + component: { + template: '<div>Home</div>' + } + }, + '/foo': { + component: { + data: function () { + return { home: '<a href="/">Link Home</a>' } + }, + template: '<div id="wrap" v-html="home" v-link></div>' + } + } + }) + var App = Vue.extend({ + replace: false, + template: '<router-view></router-view>' + }) + router.start(App, el) + el = router.app.$el + router.go('/foo') + nextTick(function () { + click(el.querySelector('#wrap a')) + nextTick(function () { + var text = router.app.$el.textContent + expect(text).toBe('Home') + document.body.removeChild(el) + done() + }) + }) + }) + + it('v-link delegate on non-anchor', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a': { + component: { + template: 'hello' + } + } + }) + router.start({ + replace: false, + template: + '<div v-link><a href="/a"><span id="link"></span></a></div>' + + '<router-view></router-view>' + }, el) + var link = el.querySelector('#link') + click(link) + nextTick(function () { + expect(el.textContent).toBe('hello') + done() + }) + }) + + it('v-link with v-on', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a': { + component: { + template: '<div>foo</div>' + } + } + }) + var spy = jasmine.createSpy('v-on:click') + var App = Vue.extend({ + replace: false, + template: + '<a id="link-a" v-link="{ path: \'/a\' }" v-on:click="onClick"></a>' + + '<router-view></router-view>', + methods: { + onClick: spy + } + }) + router.start(App, el) + el = router.app.$el + expect(el.textContent).toBe('') + click(el.querySelector('#link-a')) + nextTick(function () { + expect(spy).toHaveBeenCalled() + expect(el.textContent).toBe('foo') + done() + }) + }) + + it('alias', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a': { component: { template: 'AAA' }}, + '/b': { component: { template: 'BBB' }} + }) + router.alias({ + '/c/a': '/a', + '/c/b': '/b' + }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.start(App, el) + assertRoutes([ + ['/a', 'AAA'], + ['/b', 'BBB'], + ['/c/a', 'AAA'], + ['/c/b', 'BBB'] + ], done) + }) + + it('multi-variable alias', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a/:foo': { + component: { + template: '<router-view></router-view>' + }, + subRoutes: { + '/b/:bar': { + component: { + template: '{{$route.params.foo}}{{$route.params.bar}}' + } + } + } + } + }) + router.alias({ + '/c/a/:foo/b/:bar': '/a/:foo/b/:bar' + }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.start(App, el) + assertRoutes([ + ['/c/a/123/b/456', '123456'], + ['/c/a/234/b/567', '234567'] + ], done) + }) + + it('redirect', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a': { + component: { + template: '<router-view></router-view>' + }, + subRoutes: { + '/b': { + component: { + template: 'hello' + } + }, + '/c': { + component: { + template: '{{$route.query.msg}}' + } + } + } + } + }) + router.redirect({ + '/whatever': '/a/b', + '/ok': '/a/c', + '*': '/a/b' + }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.start(App, el) + assertRoutes([ + ['/whatever', 'hello'], + ['/ok?msg=world', 'world'], + ['/fesfsefsef', 'hello'] + ], done) + }) + + it('multi-variable redirect', function (done) { + router = new Router({ abstract: true }) + router.map({ + '/a/:foo': { + component: { + template: '<router-view></router-view>' + }, + subRoutes: { + '/b/:bar': { + component: { + template: '{{$route.params.foo}}{{$route.params.bar}}' + } + } + } + } + }) + router.redirect({ + '/c/a/:foo/b/:bar': '/a/:foo/b/:bar' + }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.start(App, el) + assertRoutes([ + ['/c/a/123/b/456', '123456'], + ['/c/a/234/b/567', '234567'] + ], done) + }) + + it('notfound', function (done) { + router = new Router({ abstract: true }) + router.map({ + '*': { + component: { + template: 'Whaaat' + } + } + }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.start(App, el) + expect(router.app.$el.textContent).toBe('Whaaat') + assertRoutes([ + ['/notfound', 'Whaaat'], + ['/notagain', 'Whaaat'] + ], done) + }) + + it('global before', function (done) { + router = new Router({ abstract: true }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.map({ + '/no': { + component: { + template: '<p>NO</p>' + } + }, + 'redirect/:id': { + component: { + template: 'should never show' + } + }, + '/to/:id': { + component: { + template: 'to {{$route.params.id}}' + } + }, + '*': { + component: { + template: '<p>default</p>' + } + } + }) + + var spy1 = jasmine.createSpy('before hook 1') + router.beforeEach(function (transition) { + spy1() + setTimeout(function () { + transition.next() + }, wait) + }) + + var spy2 = jasmine.createSpy('before hook 2') + router.beforeEach(function (transition) { + spy2() + if (transition.to.path === '/no') { + setTimeout(function () { + transition.abort() + next() + }, wait) + } else if (transition.to.path.indexOf('/redirect') > -1) { + setTimeout(function () { + transition.redirect('/to/:id') + next2() + }, wait) + } else { + transition.next() + } + }) + + // a synchronous hook + var spy3 = jasmine.createSpy('before hook 3') + router.beforeEach(function () { + spy3() + }) + + router.start(App, el) + expect(spy1).toHaveBeenCalled() + expect(spy2).not.toHaveBeenCalled() + expect(spy3).not.toHaveBeenCalled() + expect(router.app.$el.textContent).toBe('') + + setTimeout(function () { + expect(spy2).toHaveBeenCalled() + expect(spy3).toHaveBeenCalled() + expect(router.app.$el.textContent).toBe('default') + router.go('/no') + }, wait * 2) + + function next () { + expect(spy1.calls.count()).toBe(2) + expect(spy2.calls.count()).toBe(2) + expect(spy3.calls.count()).toBe(1) // aborted at 2 + expect(router.app.$el.textContent).toBe('default') + router.go('/redirect/12345') + } + + function next2 () { + expect(spy1.calls.count()).toBe(4) // go + redirect + expect(spy2.calls.count()).toBe(3) // only go at this moment + expect(spy3.calls.count()).toBe(1) // still 1 + setTimeout(function () { + expect(spy1.calls.count()).toBe(4) + expect(spy2.calls.count()).toBe(4) + expect(spy3.calls.count()).toBe(2) // after redirect + expect(router.app.$el.textContent).toBe('to 12345') + done() + }, wait * 2) + } + }) + + it('global after', function (done) { + router = new Router({ abstract: true }) + var App = Vue.extend({ + template: '<div><router-view></router-view></div>' + }) + router.map({ + '/a': { + component: { + template: '<p>a</p>' + } + } + }) + var callCount = 0 + router.afterEach(function (transition) { + if (callCount === 0) { + // initial match + expect(transition.from.path).toBeUndefined() + expect(transition.to.path).toBe('/') + } else { + // second match + expect(transition.from.path).toBe('/') + expect(transition.to.path).toBe('/a') + done() + } + callCount++ + }) + router.start(App, el) + router.go('/a') + }) + + it('transitionOnLoad option', function (done) { + router = new Router({ + abstract: true, + transitionOnLoad: true + }) + router.map({ + '/': { + component: { + template: '<p>whatever</p>' + } + } + }) + var spy = jasmine.createSpy() + var App = Vue.extend({ + template: '<div><router-view transition="test"></router-view></div>', + transitions: { + test: { + enter: function (el, cb) { + expect(el.tagName).toBe('P') + spy() + cb() + } + } + } + }) + // ensure el is inDoc otherwise transition won't trigger + document.body.appendChild(el) + router.start(App, el) + nextTick(function () { + expect(spy).toHaveBeenCalled() + router.app.$destroy(true) + done() + }) + }) + + if (!isIE9) { + it('saveScrollPosition', function (done) { + router = new Router({ + history: true, + saveScrollPosition: true + }) + router.map({ + '/a': { component: { template: 'hi' }} + }) + router.start(Vue.extend({}), el) + // record + var x = window.pageXOffset + var y = window.pageYOffset + router.go('/a') + nextTick(function () { + window.addEventListener('popstate', function onPop () { + nextTick(function () { + expect(window.scrollTo).toHaveBeenCalledWith(x, y) + window.removeEventListener('popstate', onPop) + router.stop() + done() + }) + }) + history.back() + }) + }) + + it('slide to anchor', function (done) { + router = new Router({ + history: true + }) + router.map({ + '/a': { component: { template: '<a id="anchor">link</a>' }} + }) + document.body.appendChild(el) + router.start(Vue.extend({ + template: '<router-view></router-view>' + }), el) + router.go('/a#anchor') + nextTick(function () { + var anchor = document.getElementById('anchor') + var x = window.scrollX + var y = anchor.offsetTop + expect(window.scrollTo).toHaveBeenCalledWith(x, y) + router.stop() + router.app.$destroy(true) + window.addEventListener('popstate', function onPop () { + window.removeEventListener('popstate', onPop) + done() + }) + history.back() + }) + }) + + it('async component', function (done) { + router = new Router({ + abstract: true + }) + router.map({ + '/a': { + component: function (resolve) { + setTimeout(function () { + resolve({ + template: 'hello!' + }) + }, wait) + } + } + }) + router.start(Vue.extend({ + template: '<div><router-view></router-view></div>' + }), el) + router.go('/a') + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('hello!') + done() + }, wait * 2) + }) + + it('async component abort', function (done) { + var spy = jasmine.createSpy('async-component-abort') + router = new Router({ + abstract: true + }) + router.map({ + '/a': { + component: function (resolve) { + setTimeout(function () { + resolve({ + template: 'hello!', + created: spy + }) + }, wait) + } + }, + '/b': { + component: { + template: 'B' + } + } + }) + router.start(Vue.extend({ + template: '<div><router-view></router-view></div>' + }), el) + router.go('/a') + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + router.go('/b') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('B') + expect(spy).not.toHaveBeenCalled() + done() + }, wait * 2) + }, 0) + }) + + it('late-rendered view inside conditional blocks', function (done) { + var component = { + template: + '<div>' + + '<div v-if="show">' + + '<router-view></router-view>' + + '</div>' + + '</div>', + data: function () { + return { show: false } + }, + compiled: function () { + var self = this + setTimeout(function () { + self.show = true + }, wait) + } + } + router = new Router({ + abstract: true + }) + router.map({ + '/a': { + component: component, + subRoutes: { + '/b': { + component: { + template: 'Rendered!' + } + } + } + } + }) + router.start(Vue.extend(component), el) + router.go('/a/b') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('Rendered!') + done() + }, wait * 3) + }) + + it('switching between rotues with conditional <router-view>', function (done) { + router = new Router({ + abstract: true + }) + router.map({ + '/foo': { + component: { + template: + '<div>' + + '{{ a }}' + + '<router-view v-if="!$loadingRouteData"></router-view>' + + '</div>', + data: function () { + return { a: 0 } + }, + route: { + data: function (transition) { + setTimeout(function () { + transition.next({ + a: 123 + }) + }, wait) + } + } + }, + subRoutes: { + '/bar': { + component: { + template: 'rendered' + } + } + } + }, + '/baz': { + component: { template: 'baz' } + } + }) + router.start({ + template: '<div><router-view></router-view></div>' + }, el) + router.go('/foo/bar') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('123rendered') + router.go('/baz') + nextTick(function () { + expect(router.app.$el.textContent).toBe('baz') + // go again + router.go('/foo/bar') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('123rendered') + done() + }, wait * 2) + }) + }, wait * 2) + }) + } + + function assertRoutes (matches, options, done) { + if (typeof options === 'function') { + done = options + options = {} + } + var match = matches.shift() + router.go(match[0]) + nextTick(function () { + var text = router.app.$el.textContent + expect(text).toBe(match[1]) + if (matches.length) { + assertRoutes(matches, options, done) + } else { + done() + } + }) + } + + function click (target) { + var e = document.createEvent('HTMLEvents') + e.initEvent('click', true, true) + e.button = 0 + target.dispatchEvent(e) + } +}) + +describe('Stringify Path', function () { + + var router + beforeEach(function () { + router = new Router({ abstract: true }) + }) + + it('plain string', function () { + expect(router.stringifyPath('a')).toBe('a') + }) + + it('object path', function () { + expect(router.stringifyPath({ path: '/hi' })).toBe('/hi') + expect(router.stringifyPath({ path: '/hi', query: { a: 1 }})).toBe('/hi?a=1') + expect(router.stringifyPath({ path: '/hi', query: { a: 1, b: 2 }})).toBe('/hi?a=1&b=2') + expect(router.stringifyPath({ path: '/hi?c=3', query: { a: 1, b: 2 }})).toBe('/hi?c=3&a=1&b=2') + expect(router.stringifyPath({ path: '/hi', query: { a: '/c' }})).toBe('/hi?a=%2Fc') + }) + + it('named route', function () { + router.map({ + '/test/:id': { + name: 'a', + component: {} + } + }) + expect(router.stringifyPath({ name: 'a' })).toBe('/test/:id') + expect(router.stringifyPath({ name: 'a', params: { id: 0 }})).toBe('/test/0') + expect(router.stringifyPath({ name: 'a', params: { id: 'hi' }})).toBe('/test/hi') + expect(router.stringifyPath({ name: 'a', params: { id: '你好' }})).toBe('/test/' + encodeURIComponent('你好')) + expect(router.stringifyPath({ name: 'a', params: { id: 'hi' }, query: { b: '/c' }})).toBe('/test/hi?b=%2Fc') + }) + + it('named route not found should throw error', function () { + expect(function () { + router.stringifyPath({ + name: 'a' + }) + }).toThrow() + }) + + it('encodeURI', function () { + router.map({ + '/test/:id': { + name: 'a', + component: {} + } + }) + expect(router.stringifyPath('/hi/你好')).toBe(encodeURI('/hi/你好')) + expect(router.stringifyPath({ path: '/hi/你好' })).toBe(encodeURI('/hi/你好')) + expect(router.stringifyPath({ name: 'a', params: { id: '你好' }})).toBe(encodeURI('/test/你好')) + }) + +}) diff --git a/test/unit/specs/create-map.spec.js b/test/unit/specs/create-map.spec.js deleted file mode 100644 index 57c81afe1..000000000 --- a/test/unit/specs/create-map.spec.js +++ /dev/null @@ -1,259 +0,0 @@ -/*eslint-disable no-undef*/ -import { createRouteMap } from '../../../src/create-route-map' - -const Home = { template: '<div>This is Home</div>' } -const Foo = { template: '<div>This is Foo</div>' } -const FooBar = { template: '<div>This is FooBar</div>' } -const Foobar = { template: '<div>This is foobar</div>' } -const Bar = { template: '<div>This is Bar <router-view></router-view></div>' } -const Baz = { template: '<div>This is Baz</div>' } - -const routes = [ - { path: '/', name: 'home', component: Home }, - { path: '/foo', name: 'foo', component: Foo }, - { path: '*', name: 'wildcard', component: Baz }, - { - path: '/bar', - name: 'bar', - component: Bar, - children: [ - { - path: '', - component: Baz, - name: 'bar.baz' - } - ] - }, - { - path: '/bar-redirect', - name: 'bar-redirect', - redirect: { name: 'bar-redirect.baz' }, - component: Bar, - children: [ - { - path: '', - component: Baz, - name: 'bar-redirect.baz' - } - ] - } -] - -describe('Creating Route Map', function () { - let maps - - beforeAll(function () { - spyOn(console, 'warn') - maps = createRouteMap(routes) - }) - - beforeEach(function () { - console.warn.calls.reset() - process.env.NODE_ENV = 'production' - }) - - it('has a pathMap object for default subroute at /bar/', function () { - expect(maps.pathMap['/bar/']).not.toBeUndefined() - }) - - it('has a pathList which places wildcards at the end', () => { - expect(maps.pathList).toEqual([ - '', - '/foo', - '/bar/', - '/bar', - '/bar-redirect/', - '/bar-redirect', - '*' - ]) - }) - - it("has a nameMap object for default subroute at 'bar.baz'", function () { - expect(maps.nameMap['bar.baz']).not.toBeUndefined() - }) - - it('in development, has logged a warning concerning named route of parent and default subroute', function () { - process.env.NODE_ENV = 'development' - maps = createRouteMap(routes) - expect(console.warn).toHaveBeenCalledTimes(1) - expect(console.warn.calls.argsFor(0)[0]).toMatch( - "vue-router] Named Route 'bar'" - ) - }) - - it('warns about unencoded entities', function () { - process.env.NODE_ENV = 'development' - maps = createRouteMap([{ path: '/é', component: Home }]) - expect(console.warn).toHaveBeenCalledTimes(1) - expect(console.warn.calls.argsFor(0)[0]).toMatch( - 'vue-router] Route with path "/é"' - ) - }) - - it('in development, throws if path is missing', function () { - process.env.NODE_ENV = 'development' - expect(() => { - maps = createRouteMap([{ component: Bar }]) - }).toThrowError(/"path" is required/) - }) - - it('in production, it has not logged this warning', function () { - maps = createRouteMap(routes) - expect(console.warn).not.toHaveBeenCalled() - }) - - it('in development, warn duplicate param keys', () => { - process.env.NODE_ENV = 'development' - maps = createRouteMap([ - { - path: '/foo/:id', - component: Foo, - children: [{ path: 'bar/:id', component: Bar }] - } - ]) - expect(console.warn).toHaveBeenCalled() - expect(console.warn.calls.argsFor(0)[0]).toMatch( - 'vue-router] Duplicate param keys in route with path: "/foo/:id/bar/:id"' - ) - }) - - it('in development, warns about alias and path having the same value', () => { - process.env.NODE_ENV = 'development' - maps = createRouteMap([ - { - path: '/foo-alias', - component: Foo, - alias: '/foo-alias' - } - ]) - expect(console.warn).toHaveBeenCalled() - expect(console.warn.calls.argsFor(0)[0]).toMatch( - 'vue-router] Found an alias with the same value as the path: "/foo-alias"' - ) - }) - - it('in development, warns about one alias (in an array) having the same value as the path', () => { - process.env.NODE_ENV = 'development' - maps = createRouteMap([ - { - path: '/foo-alias', - component: Foo, - alias: ['/bar', '/foo-alias'] - } - ]) - expect(console.warn).toHaveBeenCalled() - expect(console.warn.calls.argsFor(0)[0]).toMatch( - 'vue-router] Found an alias with the same value as the path: "/foo-alias"' - ) - }) - - it('in development, warn if a path is missing a leading slash', function () { - process.env.NODE_ENV = 'development' - maps = createRouteMap([ - { path: 'bar', name: 'bar', component: Bar } - ]) - expect(console.warn).toHaveBeenCalledTimes(1) - expect(console.warn.calls.argsFor(0)[0]).toEqual('[vue-router] Non-nested routes must include a leading slash character. Fix the following routes: \n- bar') - }) - - it('in development, it does not log the missing leading slash when routes are valid', function () { - process.env.NODE_ENV = 'development' - maps = createRouteMap([ - { path: '/bar', name: 'bar', component: Bar } - ]) - expect(console.warn).not.toHaveBeenCalled() - }) - - it('in production, it does not log the missing leading slash warning', function () { - process.env.NODE_ENV = 'production' - maps = createRouteMap([ - { path: 'bar', name: 'bar', component: Bar } - ]) - expect(console.warn).not.toHaveBeenCalled() - }) - - describe('path-to-regexp options', function () { - const routes = [ - { path: '/foo', name: 'foo', component: Foo }, - { path: '/bar', name: 'bar', component: Bar, caseSensitive: false }, - { - path: '/FooBar', - name: 'FooBar', - component: FooBar, - caseSensitive: true - }, - { - path: '/foobar', - name: 'foobar', - component: Foobar, - caseSensitive: true - } - ] - - it('caseSensitive option in route', function () { - const { nameMap } = createRouteMap(routes) - - expect(nameMap.FooBar.regex.ignoreCase).toBe(false) - expect(nameMap.bar.regex.ignoreCase).toBe(true) - expect(nameMap.foo.regex.ignoreCase).toBe(true) - }) - - it('pathToRegexpOptions option in route', function () { - const { nameMap } = createRouteMap([ - { - name: 'foo', - path: '/foo', - component: Foo, - pathToRegexpOptions: { - sensitive: true - } - }, - { - name: 'bar', - path: '/bar', - component: Bar, - pathToRegexpOptions: { - sensitive: false - } - } - ]) - - expect(nameMap.foo.regex.ignoreCase).toBe(false) - expect(nameMap.bar.regex.ignoreCase).toBe(true) - }) - - it('caseSensitive over pathToRegexpOptions in route', function () { - const { nameMap } = createRouteMap([ - { - name: 'foo', - path: '/foo', - component: Foo, - caseSensitive: true, - pathToRegexpOptions: { - sensitive: false - } - } - ]) - - expect(nameMap.foo.regex.ignoreCase).toBe(false) - }) - - it('keeps trailing slashes with strict mode', function () { - const { pathList } = createRouteMap([ - { - path: '/foo/', - component: Foo, - pathToRegexpOptions: { - strict: true - } - }, - { - path: '/bar/', - component: Foo - } - ]) - - expect(pathList).toEqual(['/foo/', '/bar']) - }) - }) -}) diff --git a/test/unit/specs/create-matcher.spec.js b/test/unit/specs/create-matcher.spec.js deleted file mode 100644 index fcc2587c2..000000000 --- a/test/unit/specs/create-matcher.spec.js +++ /dev/null @@ -1,154 +0,0 @@ -/*eslint-disable no-undef*/ -import { createMatcher } from '../../../src/create-matcher' - -const routes = [ - { path: '/', name: 'home', component: { name: 'home' }}, - { path: '/foo', name: 'foo', component: { name: 'foo' }}, - { path: '/baz/:testparam', name: 'baz', component: { name: 'baz' }}, - { path: '/error/*', name: 'error', component: { name: 'error' }}, - { path: '*', props: true, name: 'notFound', component: { name: 'notFound' }} -] - -describe('Creating Matcher', function () { - let match - - beforeAll(function () { - spyOn(console, 'warn') - match = createMatcher(routes).match - }) - - beforeEach(function () { - console.warn.calls.reset() - process.env.NODE_ENV = 'production' - }) - - it('can add nested routes', function () { - const component = { name: 'fake' } - const matcher = createMatcher([ - { - path: '/p', - name: 'parent', - children: [ - { path: 'a', name: 'a', component }, - { - path: 'c', - name: 'child', - component, - children: [{ path: 'n', name: 'nested', component }] - } - ] - }, - { - // easier to debug tests - path: '*', name: 'not-found', component - } - ]) - - matcher.addRoute({ path: '/b', name: 'b', component }) - matcher.addRoute('parent', { path: 'b', name: 'p-b', component }) - matcher.addRoute('child', { path: 'b', name: 'p-c-b', component }) - - expect(matcher.match('/b').name).toBe('b') - expect(matcher.match('/p/b').name).toBe('p-b') - expect(matcher.match('/p/c/b').name).toBe('p-c-b') - expect(matcher.match('/p/c/n').name).toBe('nested') - }) - - it('can get all routes', function () { - const component = { name: 'fake' } - const matcher = createMatcher([]) - - expect(matcher.getRoutes()).toEqual([]) - - matcher.addRoute({ path: '/b', name: 'b', component }) - expect(matcher.getRoutes().length).toBe(1) - - matcher.addRoute({ path: '/c', name: 'c', alias: ['/a', '/d'], component }) - expect(matcher.getRoutes().length).toBe(4) - - matcher.addRoute('b', { path: 'd', component }) - expect(matcher.getRoutes().length).toBe(5) - - matcher.addRoute('c', { path: 'd', component }) - expect(matcher.getRoutes().length).toBe(8) - }) - - it('in development, has logged a warning if a named route does not exist', function () { - process.env.NODE_ENV = 'development' - const { name, matched } = match({ name: 'bar' }, routes[0]) - expect(matched.length).toBe(0) - expect(name).toBe('bar') - expect(console.warn).toHaveBeenCalled() - expect(console.warn.calls.argsFor(0)[0]).toMatch( - "Route with name 'bar' does not exist" - ) - }) - - it('in production, it has not logged this warning', function () { - match({ name: 'foo' }, routes[0]) - expect(console.warn).not.toHaveBeenCalled() - }) - - it('matches named route with params without warning', function () { - process.env.NODE_ENV = 'development' - const { name, path, params } = match({ - name: 'baz', - params: { testparam: 'testvalue' } - }) - expect(console.warn).not.toHaveBeenCalled() - expect(name).toEqual('baz') - expect(path).toEqual('/baz/testvalue') - expect(params).toEqual({ testparam: 'testvalue' }) - }) - - it('matches asterisk routes with a default param name without warning', function () { - process.env.NODE_ENV = 'development' - const { params } = match( - { name: 'notFound', params: { pathMatch: '/not-found' }}, - routes[0] - ) - expect(console.warn).not.toHaveBeenCalled() - expect(params).toEqual({ pathMatch: '/not-found' }) - }) - - it('matches partial asterisk routes with a default param name without warning', function () { - process.env.NODE_ENV = 'development' - const { params, path } = match( - { name: 'error', params: { pathMatch: 'some' }}, - routes[0] - ) - expect(console.warn).not.toHaveBeenCalled() - expect(params).toEqual({ pathMatch: 'some' }) - expect(path).toEqual('/error/some') - }) - - it('matches named catch-all route with empty pathMath param without warning', function () { - process.env.NODE_ENV = 'development' - match( - { name: 'notFound', params: { pathMatch: '' }}, - routes[0] - ) - expect(console.warn).not.toHaveBeenCalled() - }) - - it('matches asterisk routes with a default param name', function () { - const { params } = match({ path: '/not-found' }, routes[0]) - expect(params).toEqual({ pathMatch: '/not-found' }) - }) - - it('allows an empty pathMatch', function () { - process.env.NODE_ENV = 'development' - const pathForErrorRoute = match( - { name: 'error', params: { pathMatch: '' }}, - routes[0] - ).path - const pathForNotFoundRoute = match( - { name: 'notFound', params: { pathMatch: '' }}, - routes[0] - ).path - - expect(console.warn).not.toHaveBeenCalled() - expect(pathForErrorRoute).toEqual('/error/') - expect(pathForNotFoundRoute).toEqual('/') - }) -}) diff --git a/test/unit/specs/custom-query.spec.js b/test/unit/specs/custom-query.spec.js deleted file mode 100644 index 9ba5988cd..000000000 --- a/test/unit/specs/custom-query.spec.js +++ /dev/null @@ -1,18 +0,0 @@ -import Vue from 'vue' -import VueRouter from '../../../src/index' - -Vue.use(VueRouter) - -describe('custom query parse/stringify', () => { - it('should work', () => { - const router = new VueRouter({ - parseQuery: () => ({ foo: 1 }), - stringifyQuery: () => '?foo=1' - }) - - router.push('/?bar=2') - - expect(router.currentRoute.query).toEqual({ foo: 1 }) - expect(router.currentRoute.fullPath).toEqual('/?foo=1') - }) -}) diff --git a/test/unit/specs/discrete-components.spec.js b/test/unit/specs/discrete-components.spec.js deleted file mode 100644 index a0d1bf077..000000000 --- a/test/unit/specs/discrete-components.spec.js +++ /dev/null @@ -1,22 +0,0 @@ -import Vue from 'vue' -import VueRouter from '../../../src/index' - -describe('[Vue Instance].$route bindings', () => { - describe('boundToSingleVueInstance', () => { - it('updates $route on all instances', () => { - const router = new VueRouter({ - routes: [ - { path: '/', component: { name: 'foo' }}, - { path: '/bar', component: { name: 'bar' }} - ] - }) - const app1 = new Vue({ router }) - const app2 = new Vue({ router }) - expect(app1.$route.path).toBe('/') - expect(app2.$route.path).toBe('/') - router.push('/bar') - expect(app1.$route.path).toBe('/bar') - expect(app2.$route.path).toBe('/bar') - }) - }) -}) diff --git a/test/unit/specs/error-handling.spec.js b/test/unit/specs/error-handling.spec.js deleted file mode 100644 index a9b8e11e8..000000000 --- a/test/unit/specs/error-handling.spec.js +++ /dev/null @@ -1,227 +0,0 @@ -import Vue from 'vue' -import VueRouter from '../../../src/index' -import { NavigationFailureType } from '../../../src/util/errors' - -Vue.use(VueRouter) - -describe('error handling', () => { - beforeEach(function () { - process.env.NODE_ENV = 'development' - }) - - it('onReady errors', done => { - const router = new VueRouter() - const err = new Error('foo') - router.beforeEach(() => { - throw err - }) - router.onError(() => {}) - - const onReady = jasmine.createSpy('ready') - const onError = jasmine.createSpy('error') - const onPromiseReject = jasmine.createSpy('promise reject') - router.onReady(onReady, onError) - - router - .push('/') - .catch(onPromiseReject) - .finally(() => { - expect(onReady).not.toHaveBeenCalled() - expect(onError).toHaveBeenCalledWith(err) - expect(onPromiseReject).toHaveBeenCalled() - done() - }) - }) - - it('navigation errors', done => { - const router = new VueRouter() - const err = new Error('foo') - const spy = jasmine.createSpy('error') - const spy1 = jasmine.createSpy('promise reject') - router.onError(spy) - - router.push('/') - router.beforeEach(() => { - throw err - }) - - router - .push('/foo') - .catch(spy1) - .finally(() => { - expect(spy).toHaveBeenCalledWith(err) - expect(spy1).toHaveBeenCalled() - done() - }) - }) - - it('NavigationDuplicated error', done => { - const router = new VueRouter() - - router.push('/foo') - router.push('/foo').catch(err => { - expect(err.type).toBe(NavigationFailureType.duplicated) - expect(VueRouter.isNavigationFailure(err)).toBe(true) - expect( - VueRouter.isNavigationFailure(err, NavigationFailureType.duplicated) - ).toBe(true) - done() - }) - }) - - it('NavigationCancelled error', done => { - const router = new VueRouter() - - router.beforeEach((to, from, next) => { - setTimeout(() => next(), 100) - }) - - router.push('/foo').catch(err => { - expect(err.type).toBe(NavigationFailureType.cancelled) - done() - }) - router.push('/') - }) - - it('NavigationCancelled error for nested async navigation', done => { - const component = { - template: `<img />`, - beforeRouteEnter (to, from, next) { - setTimeout(() => next(), 100) - } - } - const router = new VueRouter({ - routes: [{ path: '/a', component }] - }) - - router.push('/a').catch(err => { - expect(err.type).toBe(NavigationFailureType.cancelled) - done() - }) - router.push('/') - }) - - it('NavigationRedirected error', done => { - const router = new VueRouter() - - router.beforeEach((to, from, next) => { - if (to.query.redirect) { - next(to.query.redirect) - } - }) - - router.push('/foo?redirect=/').catch(err => { - expect(err.type).toBe(NavigationFailureType.redirected) - expect(err.from.path).toBe('/') - expect(err.to.path).toBe('/foo') - done() - }) - }) - - it('NavigationAborted error', done => { - const router = new VueRouter() - - router.beforeEach((to, from, next) => { - next(false) - }) - - router.push('/foo').catch(err => { - expect(err.type).toBe(NavigationFailureType.aborted) - done() - }) - }) - - it('async component errors', done => { - spyOn(console, 'warn') - const err = new Error('foo') - const spy1 = jasmine.createSpy('error') - const spy2 = jasmine.createSpy('error') - const spy3 = jasmine.createSpy('promise reject') - const Comp = () => { - throw err - } - const router = new VueRouter({ - routes: [{ path: '/', component: Comp }] - }) - - router.onError(spy1) - router.onReady(() => {}, spy2) - - router - .push('/') - .catch(spy3) - .finally(() => { - expect(spy1).toHaveBeenCalledWith(err) - expect(spy2).toHaveBeenCalledWith(err) - expect(spy3).toHaveBeenCalled() - expect(console.warn).toHaveBeenCalledTimes(1) - done() - }) - }) - - // https://github.com/vuejs/vue-router/issues/3225 - it('should trigger onReady onSuccess when redirecting', done => { - const router = new VueRouter({ - routes: [ - { path: '/', component: {}}, - { path: '/foo', component: {}} - ] - }) - - const onError = jasmine.createSpy('onError') - const onReadySuccess = jasmine.createSpy('onReadySuccess') - const onReadyFail = jasmine.createSpy('onReadyFail') - router.onError(onError) - router.onReady(onReadySuccess, onReadyFail) - - router.beforeEach((to, from, next) => { - if (to.path === '/') next('/foo') - else next() - }) - - const pushCatch = jasmine.createSpy('pushCatch') - - // initial navigation - router - .push('/') - .catch(pushCatch) - .finally(() => { - expect(router.currentRoute.path).toBe('/foo') - expect(onReadyFail).not.toHaveBeenCalled() - // in 3.2.0 it was called with undefined - // expect(pushCatch).not.toHaveBeenCalled() - expect(onError).not.toHaveBeenCalled() - expect(onReadySuccess).toHaveBeenCalled() - done() - }) - }) - - it('should trigger onError if error is thrown inside redirect option', done => { - const error = new Error('foo') - const config = [ - { - path: '/oldpath/:part', - redirect: to => { - throw error - } - } - ] - - const router = new VueRouter({ - routes: config - }) - - const onError = jasmine.createSpy('onError') - router.onError(onError) - const pushCatch = jasmine.createSpy('pushCatch') - - router - .push('/oldpath/test') - .catch(pushCatch) - .finally(() => { - expect(pushCatch).toHaveBeenCalledWith(error) - expect(onError).toHaveBeenCalledWith(error) - done() - }) - }) -}) diff --git a/test/unit/specs/history/hash.js b/test/unit/specs/history/hash.js new file mode 100644 index 000000000..f0d3b602d --- /dev/null +++ b/test/unit/specs/history/hash.js @@ -0,0 +1,66 @@ +var History = require('../../../../src/history/hash') + +describe('Hash History', function () { + + it('notify change', function (done) { + var history = new History({ + onChange: step1 + }) + history.start() + // init + function step1 (path) { + expect(location.hash).toBe('#/') + expect(path).toBe('/') + history.onChange = step2 + history.go('/what/the') + } + // root path & hash + function step2 (path) { + expect(location.hash).toBe('#/what/the') + expect(path).toBe('/what/the') + history.onChange = step3 + history.go('huh', true) + } + // relative path + function step3 (path) { + expect(location.hash).toBe('#/what/huh') + expect(path).toBe('/what/huh') + history.stop() + window.addEventListener('hashchange', function onChange () { + window.removeEventListener('hashchange', onChange) + done() + }) + location.hash = '' + } + }) + + it('hashbang option', function (done) { + var history = new History({ + onChange: step1, + hashbang: true + }) + history.start() + // init + function step1 (path) { + expect(path).toBe('/') + history.onChange = step2 + history.go('/what/the') + } + // root path & hash + function step2 (path) { + expect(location.hash).toBe('#!/what/the') + expect(path).toBe('/what/the') + history.onChange = step3 + history.go('huh', true) + } + // relative path + function step3 (path) { + expect(location.hash).toBe('#!/what/huh') + expect(path).toBe('/what/huh') + history.stop() + location.hash = '' + done() + } + }) + +}) diff --git a/test/unit/specs/history/html5.js b/test/unit/specs/history/html5.js new file mode 100644 index 000000000..9d461f9a7 --- /dev/null +++ b/test/unit/specs/history/html5.js @@ -0,0 +1,111 @@ +var History = require('../../../../src/history/html5') + +if (!isIE9) { + describe('HTML5 History', function () { + + var url = location.href + var pathname = location.pathname + var history + afterEach(function (done) { + history.stop() + window.history.replaceState({}, '', url) + setTimeout(done, 0) + }) + + it('notify change', function (done) { + history = new History({ + onChange: step1 + }) + history.start() + // init + function step1 (path) { + expect(path).toBe(pathname) + history.onChange = step2 + history.go('/what/the#lol') + } + // root path & hash + function step2 (path, state, hash) { + expect(location.pathname).toBe('/what/the') + expect(path).toBe('/what/the') + expect(state).toBeNull() + expect(hash).toBe('#lol') + history.onChange = step3 + history.go('huh', true) + } + // relative path + function step3 (path) { + expect(location.pathname).toBe('/what/huh') + expect(path).toBe('/what/huh') + done() + } + }) + + it('root option', function (done) { + history = new History({ + onChange: step1, + root: 'root/' + }) + expect(history.root).toBe('/root') + history.start() + function step1 () { + history.onChange = step2 + history.go('/haha') + } + function step2 (path) { + expect(location.pathname).toBe('/root/haha') + expect(path).toBe('/haha') + done() + } + }) + + it('popstate with root', function (done) { + history = new History({ + onChange: step1, + root: 'root/' + }) + expect(history.root).toBe('/root') + history.start() + function step1 () { + history.onChange = step2 + history.go('/') + } + function step2 (path) { + expect(location.pathname).toBe('/root/') + expect(path).toBe('/') + history.onChange = step3 + history.go('/haha') + } + function step3 (path) { + expect(location.pathname).toBe('/root/haha') + expect(path).toBe('/haha') + history.onChange = step4 + window.history.back() + } + function step4 (path) { + expect(location.pathname).toBe('/root/') + expect(path).toBe('/') + done() + } + }) + + it('respect <base>', function (done) { + var base = document.createElement('base') + base.setAttribute('href', '/base/') + document.head.appendChild(base) + history = new History({ + onChange: step1 + }) + history.start() + function step1 (path) { + history.onChange = step2 + history.go('test') + } + function step2 (path) { + expect(location.pathname).toBe('/base/test') + expect(path).toBe('/base/test') + document.head.removeChild(base) + done() + } + }) + }) +} diff --git a/test/unit/specs/index.js b/test/unit/specs/index.js new file mode 100644 index 000000000..28b081898 --- /dev/null +++ b/test/unit/specs/index.js @@ -0,0 +1,30 @@ +var UA = navigator.userAgent.toLowerCase() +window.isIE9 = UA.indexOf('msie 9.0') > 0 +window.isIE = UA.indexOf('trident') > 0 + +// IE has some shaky timer precision issues when using the Promise polyfill... +window.wait = isIE ? 100 : 30 + +require('es6-promise').polyfill() + +var Vue = require('vue') +var Router = require('../../../src') +Vue.use(Router) + +require('./util') +require('./core') + +describe('Pipeline', function () { + require('./pipeline/full') + require('./pipeline/activate') + require('./pipeline/deactivate') + require('./pipeline/can-activate') + require('./pipeline/can-deactivate') + require('./pipeline/can-reuse') + require('./pipeline/data') +}) + +describe('History', function () { + require('./history/hash') + require('./history/html5') +}) diff --git a/test/unit/specs/location.spec.js b/test/unit/specs/location.spec.js deleted file mode 100644 index 543e06b9b..000000000 --- a/test/unit/specs/location.spec.js +++ /dev/null @@ -1,143 +0,0 @@ -import { normalizeLocation } from '../../../src/util/location' - -describe('Location utils', () => { - describe('normalizeLocation', () => { - it('string', () => { - const loc = normalizeLocation('/abc?foo=bar&baz=qux#hello') - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/abc') - expect(loc.hash).toBe('#hello') - expect(JSON.stringify(loc.query)).toBe(JSON.stringify({ - foo: 'bar', - baz: 'qux' - })) - }) - - it('empty string', function () { - const loc = normalizeLocation('', { path: '/abc' }) - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/abc') - expect(loc.hash).toBe('') - expect(JSON.stringify(loc.query)).toBe(JSON.stringify({})) - }) - - it('undefined', function () { - const loc = normalizeLocation({}, { path: '/abc' }) - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/abc') - expect(loc.hash).toBe('') - expect(JSON.stringify(loc.query)).toBe(JSON.stringify({})) - }) - - it('relative', () => { - const loc = normalizeLocation('abc?foo=bar&baz=qux#hello', { - path: '/root/next' - }) - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/root/abc') - expect(loc.hash).toBe('#hello') - expect(JSON.stringify(loc.query)).toBe(JSON.stringify({ - foo: 'bar', - baz: 'qux' - })) - }) - - it('relative append', () => { - const loc = normalizeLocation('abc?foo=bar&baz=qux#hello', { - path: '/root/next' - }, true) - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/root/next/abc') - expect(loc.hash).toBe('#hello') - expect(JSON.stringify(loc.query)).toBe(JSON.stringify({ - foo: 'bar', - baz: 'qux' - })) - }) - - it('relative query & hash', () => { - const loc = normalizeLocation('?foo=bar&baz=qux#hello', { - path: '/root/next' - }) - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/root/next') - expect(loc.hash).toBe('#hello') - expect(JSON.stringify(loc.query)).toBe(JSON.stringify({ - foo: 'bar', - baz: 'qux' - })) - }) - - it('relative params (named)', () => { - const loc = normalizeLocation({ params: { lang: 'fr' }}, { - name: 'hello', - params: { lang: 'en', id: 'foo' } - }) - expect(loc._normalized).toBe(true) - expect(loc.name).toBe('hello') - expect(loc.params).toEqual({ lang: 'fr', id: 'foo' }) - }) - - it('relative params (non-named)', () => { - const loc = normalizeLocation({ params: { lang: 'fr' }}, { - path: '/en/foo', - params: { lang: 'en', id: 'foo' }, - matched: [{ path: '/:lang(en|fr)/:id' }] - }) - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/fr/foo') - }) - - it('custom regex can be case insensitive', () => { - const loc = normalizeLocation({ params: { lang: 'FR' }}, { - path: '/en/foo', - params: { lang: 'en', id: 'foo' }, - matched: [{ path: '/:lang(en|fr)/:id' }] - }) - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/FR/foo') - }) - - it('relative append', () => { - const loc = normalizeLocation({ path: 'a' }, { path: '/b' }, true) - expect(loc.path).toBe('/b/a') - const loc2 = normalizeLocation({ path: 'a', append: true }, { path: '/b' }) - expect(loc2.path).toBe('/b/a') - }) - - it('object', () => { - const loc = normalizeLocation({ - path: '/abc?foo=bar#hello', - query: { baz: 'qux' }, - hash: 'lol' - }) - expect(loc._normalized).toBe(true) - expect(loc.path).toBe('/abc') - expect(loc.hash).toBe('#lol') - expect(JSON.stringify(loc.query)).toBe(JSON.stringify({ - foo: 'bar', - baz: 'qux' - })) - }) - - it('skip normalized', () => { - const loc1 = { - _normalized: true, - path: '/abc?foo=bar#hello', - query: { baz: 'qux' }, - hash: 'lol' - } - const loc2 = normalizeLocation(loc1) - expect(loc1).toBe(loc2) - }) - - it('creates copies when not normalized', () => { - const l1 = { name: 'foo' } - expect(normalizeLocation(l1)).not.toBe(l1) - const l2 = { path: '/foo' } - expect(normalizeLocation(l2)).not.toBe(l2) - const l3 = { path: '/foo', query: { foo: 'foo' }} - expect(normalizeLocation(l3)).not.toBe(l3) - }) - }) -}) diff --git a/test/unit/specs/node.spec.js b/test/unit/specs/node.spec.js deleted file mode 100644 index 292b7ea48..000000000 --- a/test/unit/specs/node.spec.js +++ /dev/null @@ -1,69 +0,0 @@ -import Vue from 'vue' -import VueRouter from '../../../src/index' - -Vue.use(VueRouter) - -describe('Usage in Node', () => { - it('should be in abstract mode', () => { - const router = new VueRouter() - expect(router.mode).toBe('abstract') - }) - - it('should be able to navigate without app instance', () => { - const router = new VueRouter({ - routes: [ - { path: '/', component: { name: 'foo' }}, - { path: '/bar', component: { name: 'bar' }} - ] - }) - router.push('/bar') - expect(router.history.current.path).toBe('/bar') - }) - - it('getMatchedComponents', () => { - const Foo = { name: 'foo' } - const Bar = { name: 'bar' } - const Baz = { name: 'baz' } - const router = new VueRouter({ - routes: [ - { path: '/', component: Foo }, - { - path: '/bar', - component: Bar, - children: [{ path: 'baz', component: Baz }] - } - ] - }) - expect(router.getMatchedComponents('/')).toEqual([Foo]) - expect(router.getMatchedComponents('/bar/baz')).toEqual([Bar, Baz]) - }) - - it('should navigate through history with same consecutive routes in history stack', () => { - const success = jasmine.createSpy('complete') - const error = jasmine.createSpy('error') - const router = new VueRouter({ - routes: [ - { path: '/', component: { name: 'foo' }}, - { path: '/bar', component: { name: 'bar' }} - ] - }) - router.push('/', success, error) - expect(success).toHaveBeenCalledTimes(1) - expect(error).toHaveBeenCalledTimes(0) - router.push('/bar', success, error) - expect(success).toHaveBeenCalledTimes(2) - expect(error).toHaveBeenCalledTimes(0) - router.push('/', success, error) - expect(success).toHaveBeenCalledTimes(3) - expect(error).toHaveBeenCalledTimes(0) - router.replace('/bar', success, error) - expect(success).toHaveBeenCalledTimes(4) - expect(error).toHaveBeenCalledTimes(0) - - expect(router.history.current.path).toBe('/bar') - router.back() - expect(router.history.current.path).toBe('/bar') - router.back() - expect(router.history.current.path).toBe('/') - }) -}) diff --git a/test/unit/specs/onReady.spec.js b/test/unit/specs/onReady.spec.js deleted file mode 100644 index 1590151dd..000000000 --- a/test/unit/specs/onReady.spec.js +++ /dev/null @@ -1,39 +0,0 @@ -import Vue from 'vue' -import VueRouter from '../../../src/index' - -Vue.use(VueRouter) - -describe('onReady order', () => { - function factory () { - const router = new VueRouter({ - mode: 'abstract', - routes: [ - { path: '/', component: {}}, - { path: '/foo', component: {}} - ] - }) - - return { router } - } - - it('should trigger onReady after push with redirect', done => { - const { router } = factory() - - let n = 0 - const count = 2 - router.onReady(() => { - expect(router.currentRoute.path).toBe('/foo') - if (++n === count) done() - }) - - router.beforeEach((to, from, next) => { - if (to.path === '/') next('/foo') - else next() - }) - - router.push('/').catch(() => { - expect(router.currentRoute.path).toBe('/foo') - if (++n === count) done() - }) - }) -}) diff --git a/test/unit/specs/path.spec.js b/test/unit/specs/path.spec.js deleted file mode 100644 index bd4e346b2..000000000 --- a/test/unit/specs/path.spec.js +++ /dev/null @@ -1,77 +0,0 @@ -import { resolvePath, parsePath, cleanPath } from '../../../src/util/path' - -describe('Path utils', () => { - describe('resolvePath', () => { - it('absolute', () => { - const path = resolvePath('/a', '/b') - expect(path).toBe('/a') - }) - - it('relative', () => { - const path = resolvePath('c/d', '/b') - expect(path).toBe('/c/d') - }) - - it('relative with append', () => { - const path = resolvePath('c/d', '/b', true) - expect(path).toBe('/b/c/d') - }) - - it('relative parent', () => { - const path = resolvePath('../d', '/a/b/c') - expect(path).toBe('/a/d') - }) - - it('relative parent with append', () => { - const path = resolvePath('../d', '/a/b/c', true) - expect(path).toBe('/a/b/d') - }) - - it('relative query', () => { - const path = resolvePath('?foo=bar', '/a/b') - expect(path).toBe('/a/b?foo=bar') - }) - - it('relative hash', () => { - const path = resolvePath('#hi', '/a/b') - expect(path).toBe('/a/b#hi') - }) - }) - - describe('parsePath', () => { - it('plain', () => { - const res = parsePath('/a') - expect(res.path).toBe('/a') - expect(res.hash).toBe('') - expect(res.query).toBe('') - }) - - it('query', () => { - const res = parsePath('/a?foo=bar???') - expect(res.path).toBe('/a') - expect(res.hash).toBe('') - expect(res.query).toBe('foo=bar???') - }) - - it('hash', () => { - const res = parsePath('/a#haha#hoho') - expect(res.path).toBe('/a') - expect(res.hash).toBe('#haha#hoho') - expect(res.query).toBe('') - }) - - it('both', () => { - const res = parsePath('/a?foo=bar#ok?baz=qux') - expect(res.path).toBe('/a') - expect(res.hash).toBe('#ok?baz=qux') - expect(res.query).toBe('foo=bar') - }) - }) - - describe('cleanPath', () => { - it('should work', () => { - const path = cleanPath('//a//b//d/') - expect(path).toBe('/a/b/d/') - }) - }) -}) diff --git a/test/unit/specs/pipeline/activate.js b/test/unit/specs/pipeline/activate.js new file mode 100644 index 000000000..da2614980 --- /dev/null +++ b/test/unit/specs/pipeline/activate.js @@ -0,0 +1,201 @@ +var testUtils = require('../../lib/pipeline-test-util') +var test = testUtils.test +var assertCalls = testUtils.assertCalls +var routerUtil = require('../../../../src/util') + +describe('activate', function () { + + beforeEach(function () { + spyOn(routerUtil, 'warn') + }) + + it('sync', function (done) { + test({ + a: { + activate: function (transition) { + transition.next() + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + assertCalls(calls, ['a.activate']) + done() + }) + }) + + it('sync (no arg)', function (done) { + test({ + a: { + activate: function () { + // noop + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + assertCalls(calls, ['a.activate']) + done() + }) + }) + + it('async', function (done) { + test({ + a: { + activate: function (transition) { + setTimeout(function () { + transition.next() + }, wait) + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + assertCalls(calls, ['a.activate']) + expect(router.app.$el.textContent).toBe('A ') + done() + }, wait) + }) + }) + + it('abort sync', function (done) { + test({ + a: { + activate: function (transition) { + transition.abort() + // should have no effect + transition.next() + } + } + }, function (router, calls, emitter) { + router.go('/a') + assertCalls(calls, ['a.activate']) + expect(router.app.$el.textContent).toBe('') + expect(router.history.currentPath).toBe('/') + done() + }) + }) + + it('abort async', function (done) { + test({ + a: { + activate: function (transition) { + setTimeout(function () { + transition.abort() + }, wait) + } + } + }, function (router, calls, emitter) { + router.go('/a') + assertCalls(calls, ['a.activate']) + expect(router.app.$el.textContent).toBe('') + // path changes during validation phase + expect(router.history.currentPath).toBe('/a') + setTimeout(function () { + // but gets reset when validation fails + expect(router.app.$el.textContent).toBe('') + expect(router.history.currentPath).toBe('/') + done() + }, wait) + }) + }) + + it('promise', function (done) { + test({ + a: { + activate: function (transition) { + return new Promise(function (resolve) { + setTimeout(resolve, wait) + }) + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + assertCalls(calls, ['a.activate']) + expect(router.app.$el.textContent).toBe('A ') + done() + }, wait * 2) + }) + }) + + it('promise reject', function (done) { + test({ + a: { + activate: function (transition) { + return new Promise(function (resolve, reject) { + setTimeout(reject, wait) + }) + } + } + }, function (router, calls, emitter) { + router.go('/a') + assertCalls(calls, ['a.activate']) + expect(router.app.$el.textContent).toBe('') + // path changes during validation phase + expect(router.history.currentPath).toBe('/a') + setTimeout(function () { + // activation error should continue transition + expect(router.app.$el.textContent).toBe('A ') + expect(router.history.currentPath).toBe('/a') + done() + }, wait * 2) + }) + }) + + it('error', function (done) { + test({ + a: { + activate: function (transition) { + throw new Error('oh no') + } + } + }, function (router, calls, emitter) { + var errorThrown = jasmine.createSpy() + try { + router.go('/a') + } catch (e) { + errorThrown() + } + expect(routerUtil.warn).toHaveBeenCalled() + expect(errorThrown).toHaveBeenCalled() + // should complete the transition despite error + assertCalls(calls, ['a.activate']) + expect(router.app.$el.textContent).toBe('A ') + expect(router.history.currentPath).toBe('/a') + done() + }) + }) + + it('multiple', function (done) { + var calls = [] + test({ + a: { + activate: [ + function (transition) { + calls.push(1) + setTimeout(function () { + transition.next() + }, wait) + }, + function () { + calls.push(2) + return new Promise(function (resolve) { + setTimeout(resolve, wait) + }) + } + ] + } + }, function (router, _, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + assertCalls(calls, [1, 2]) + expect(router.app.$el.textContent).toBe('A ') + done() + }, wait * 3) + }) + }) +}) diff --git a/test/unit/specs/pipeline/can-activate.js b/test/unit/specs/pipeline/can-activate.js new file mode 100644 index 000000000..85d053666 --- /dev/null +++ b/test/unit/specs/pipeline/can-activate.js @@ -0,0 +1,153 @@ +var testUtils = require('../../lib/pipeline-test-util') +var test = testUtils.test +var assertCalls = testUtils.assertCalls + +describe('canActivate', function () { + + it('sync allow', function (done) { + test({ + a: { + canActivate: function () { + return true + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + assertCalls(calls, ['a.canActivate']) + done() + }) + }) + + it('async allow', function (done) { + test({ + a: { + canActivate: function (transition) { + setTimeout(function () { + transition.next() + }, wait) + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + assertCalls(calls, ['a.canActivate']) + expect(router.app.$el.textContent).toBe('A ') + done() + }, wait) + }) + }) + + it('sync reject', function (done) { + test({ + a: { + canActivate: function (transition) { + return false + } + } + }, function (router, calls) { + router.go('/a') + assertCalls(calls, ['a.canActivate']) + expect(router.app.$el.textContent).toBe('') + expect(router.history.currentPath).toBe('/') + done() + }) + }) + + it('async reject', function (done) { + test({ + a: { + canActivate: function (transition) { + setTimeout(function () { + transition.abort() + }, wait) + } + } + }, function (router, calls) { + router.go('/a') + assertCalls(calls, ['a.canActivate']) + expect(router.app.$el.textContent).toBe('') + // path changes during validation phase + expect(router.history.currentPath).toBe('/a') + setTimeout(function () { + // but gets reset when validation fails + expect(router.app.$el.textContent).toBe('') + expect(router.history.currentPath).toBe('/') + done() + }, wait) + }) + }) + + it('promise allow', function (done) { + test({ + a: { + canActivate: function (transition) { + return new Promise(function (resolve) { + setTimeout(function () { + resolve(true) + }, wait) + }) + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + assertCalls(calls, ['a.canActivate']) + expect(router.app.$el.textContent).toBe('A ') + done() + }, wait * 2) + }) + }) + + it('promise resolve false', function (done) { + test({ + a: { + canActivate: function (transition) { + return new Promise(function (resolve, reject) { + setTimeout(function () { + resolve(false) + }, wait) + }) + } + } + }, function (router, calls) { + router.go('/a') + assertCalls(calls, ['a.canActivate']) + expect(router.app.$el.textContent).toBe('') + // path changes during validation phase + expect(router.history.currentPath).toBe('/a') + setTimeout(function () { + // but gets reset when validation fails + expect(router.app.$el.textContent).toBe('') + expect(router.history.currentPath).toBe('/') + done() + }, wait * 2) + }) + }) + + it('promise reject', function (done) { + test({ + a: { + canActivate: function (transition) { + return new Promise(function (resolve, reject) { + setTimeout(reject, wait) + }) + } + } + }, function (router, calls) { + router.go('/a') + assertCalls(calls, ['a.canActivate']) + expect(router.app.$el.textContent).toBe('') + // path changes during validation phase + expect(router.history.currentPath).toBe('/a') + setTimeout(function () { + // but gets reset when validation fails + expect(router.app.$el.textContent).toBe('') + expect(router.history.currentPath).toBe('/') + done() + }, wait * 2) + }) + }) +}) diff --git a/test/unit/specs/pipeline/can-deactivate.js b/test/unit/specs/pipeline/can-deactivate.js new file mode 100644 index 000000000..505d7957d --- /dev/null +++ b/test/unit/specs/pipeline/can-deactivate.js @@ -0,0 +1,168 @@ +var testUtils = require('../../lib/pipeline-test-util') +var test = testUtils.test +var assertCalls = testUtils.assertCalls + +describe('canDeactivate', function () { + + it('sync allow', function (done) { + test({ + a: { + canDeactivate: function () { + return true + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/c') + assertCalls(calls, ['a.canDeactivate']) + expect(router.app.$el.textContent).toBe('C ') + done() + }) + }) + + it('async allow', function (done) { + test({ + a: { + canDeactivate: function (transition) { + setTimeout(function () { + transition.next() + }, wait) + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/c') + assertCalls(calls, ['a.canDeactivate']) + expect(router.app.$el.textContent).toBe('A ') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('C ') + done() + }, wait) + }) + }) + + it('sync reject', function (done) { + test({ + a: { + canDeactivate: function (transition) { + return false + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/c') + assertCalls(calls, ['a.canDeactivate']) + expect(router.app.$el.textContent).toBe('A ') + done() + }) + }) + + it('async reject', function (done) { + test({ + a: { + canDeactivate: function (transition) { + setTimeout(function () { + transition.abort() + }, wait) + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/c') + expect(router.app.$el.textContent).toBe('A ') + // path changes during validation phase + expect(router.history.currentPath).toBe('/c') + setTimeout(function () { + // but gets reset when validation fails + assertCalls(calls, ['a.canDeactivate']) + expect(router.app.$el.textContent).toBe('A ') + expect(router.history.currentPath).toBe('/a') + done() + }, wait) + }) + }) + + it('promise allow', function (done) { + test({ + a: { + canDeactivate: function (transition) { + return new Promise(function (resolve) { + setTimeout(function () { + resolve(true) + }, wait) + }) + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/c') + expect(router.app.$el.textContent).toBe('A ') + expect(router.history.currentPath).toBe('/c') + setTimeout(function () { + assertCalls(calls, ['a.canDeactivate']) + expect(router.app.$el.textContent).toBe('C ') + expect(router.history.currentPath).toBe('/c') + done() + }, wait * 2) + }) + }) + + it('promise resolve false', function (done) { + test({ + a: { + canDeactivate: function (transition) { + return new Promise(function (resolve, reject) { + setTimeout(function () { + resolve(false) + }, wait) + }) + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/c') + expect(router.app.$el.textContent).toBe('A ') + // path changes during validation phase + expect(router.history.currentPath).toBe('/c') + setTimeout(function () { + // but gets reset when validation fails + assertCalls(calls, ['a.canDeactivate']) + expect(router.app.$el.textContent).toBe('A ') + expect(router.history.currentPath).toBe('/a') + done() + }, wait * 2) + }) + }) + + it('promise reject', function (done) { + test({ + a: { + canDeactivate: function (transition) { + return new Promise(function (resolve, reject) { + setTimeout(reject, wait) + }) + } + } + }, function (router, calls) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/c') + expect(router.app.$el.textContent).toBe('A ') + // path changes during validation phase + expect(router.history.currentPath).toBe('/c') + setTimeout(function () { + // but gets reset when validation fails + assertCalls(calls, ['a.canDeactivate']) + expect(router.app.$el.textContent).toBe('A ') + expect(router.history.currentPath).toBe('/a') + done() + }, wait * 2) + }) + }) +}) diff --git a/test/unit/specs/pipeline/can-reuse.js b/test/unit/specs/pipeline/can-reuse.js new file mode 100644 index 000000000..6956ab1a8 --- /dev/null +++ b/test/unit/specs/pipeline/can-reuse.js @@ -0,0 +1,98 @@ +var testUtils = require('../../lib/pipeline-test-util') +var test = testUtils.test +var assertCalls = testUtils.assertCalls + +describe('canReuse', function () { + + it('allow', function (done) { + test({ + a: { + canReuse: true, + activate: function (transition) { + // just for logging calls + transition.next() + } + } + }, function (router, calls) { + router.go('/a/b') + expect(router.app.$el.textContent).toBe('A B') + assertCalls(calls, ['a.activate']) + var A = router.app.$children[0] + router.go('/a/e') + assertCalls(calls, ['a.activate', 'a.canReuse']) + expect(router.app.$el.textContent).toBe('A E') + expect(router.app.$children[0]).toBe(A) + done() + }) + }) + + it('deny', function (done) { + test({ + a: { + canReuse: false, + activate: function (transition) { + // just for logging calls + transition.next() + } + } + }, function (router, calls) { + router.go('/a/b') + expect(router.app.$el.textContent).toBe('A B') + assertCalls(calls, ['a.activate']) + var A = router.app.$children[0] + router.go('/a/e') + assertCalls(calls, ['a.activate', 'a.canReuse', 'a.activate']) + expect(router.app.$el.textContent).toBe('A E') + expect(router.app.$children[0]).not.toBe(A) + done() + }) + }) + + it('function allow', function (done) { + test({ + a: { + canReuse: function () { + return true + }, + activate: function (transition) { + // just for logging calls + transition.next() + } + } + }, function (router, calls) { + router.go('/a/b') + expect(router.app.$el.textContent).toBe('A B') + assertCalls(calls, ['a.activate']) + var A = router.app.$children[0] + router.go('/a/e') + assertCalls(calls, ['a.activate', 'a.canReuse']) + expect(router.app.$el.textContent).toBe('A E') + expect(router.app.$children[0]).toBe(A) + done() + }) + }) + + it('function deny', function (done) { + test({ + a: { + canReuse: function () { + return false + }, + activate: function (transition) { + // just for logging calls + transition.next() + } + } + }, function (router, calls) { + router.go('/a/b') + expect(router.app.$el.textContent).toBe('A B') + assertCalls(calls, ['a.activate']) + var A = router.app.$children[0] + router.go('/a/e') + assertCalls(calls, ['a.activate', 'a.canReuse', 'a.activate']) + expect(router.app.$el.textContent).toBe('A E') + expect(router.app.$children[0]).not.toBe(A) + done() + }) + }) +}) diff --git a/test/unit/specs/pipeline/data.js b/test/unit/specs/pipeline/data.js new file mode 100644 index 000000000..5d7433962 --- /dev/null +++ b/test/unit/specs/pipeline/data.js @@ -0,0 +1,244 @@ +var testUtils = require('../../lib/pipeline-test-util') +var test = testUtils.test +var assertCalls = testUtils.assertCalls +var routerUtil = require('../../../../src/util') + +describe('data', function () { + + beforeEach(function () { + spyOn(routerUtil, 'warn') + }) + + it('initial load', function (done) { + test({ + data: { + data: function (transition) { + setTimeout(function () { + transition.next({ + msg: transition.to.params.msg + }) + }, wait) + } + } + }, function (router, calls) { + router.go('/data/hello') + assertCalls(calls, ['data.data']) + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('hello') + done() + }, wait * 2) + }) + }) + + it('reload', function (done) { + test({ + data: { + data: function (transition) { + setTimeout(function () { + transition.next({ + msg: transition.to.params.msg + }) + }, wait) + } + } + }, function (router, calls) { + router.go('/data/hello') + assertCalls(calls, ['data.data']) + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('hello') + router.go('/data/reload') + assertCalls(calls, ['data.data', 'data.data']) + router.app.$nextTick(function () { + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('reload') + done() + }, wait * 2) + }) + }, wait * 2) + }) + }) + + it('waitForData', function (done) { + test({ + data: { + waitForData: true, + data: function (transition) { + setTimeout(function () { + transition.next({ + msg: transition.to.params.msg + }) + }, wait) + } + } + }, function (router, calls) { + router.go('/data/hello') + assertCalls(calls, ['data.data']) + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('hello') + router.go('/data/reload') + assertCalls(calls, ['data.data', 'data.data']) + router.app.$nextTick(function () { + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('reload') + done() + }, wait * 2) + }) + }, wait * 2) + }) + }) + + it('waitForData + promise sugar', function (done) { + test({ + data: { + waitForData: true, + data: function (transition) { + return { + msg: new Promise(function (resolve) { + setTimeout(function () { + resolve(transition.to.params.msg) + }, wait) + }) + } + } + } + }, function (router, calls) { + router.go('/data/hello') + assertCalls(calls, ['data.data']) + expect(router.app.$el.textContent).toBe('') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('hello') + router.go('/data/reload') + assertCalls(calls, ['data.data', 'data.data']) + router.app.$nextTick(function () { + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('reload') + done() + }, wait * 2) + }) + }, wait * 2) + }) + }) + + it('promise reject', function (done) { + test({ + data: { + data: function () { + return new Promise(function (resolve, reject) { + setTimeout(function () { + reject() + }, wait) + }) + } + } + }, function (router, calls, emitter) { + router.go('/data/hello') + assertCalls(calls, ['data.data']) + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + // should not abort + expect(router.app.$el.textContent).toBe('default') + done() + }, wait * 2) + }) + }) + + it('return object containing promises', function (done) { + test({ + data: { + data: function (transition) { + return { + msg: new Promise(function (resolve) { + setTimeout(function () { + resolve(transition.to.params.msg) + }, wait) + }) + } + } + } + }, function (router, calls, emitter) { + router.go('/data/hello') + assertCalls(calls, ['data.data']) + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('hello') + done() + }, wait * 2) + }) + }) + + it('return object containing promises reject', function (done) { + test({ + data: { + data: function (transition) { + return { + msg: new Promise(function (resolve, reject) { + setTimeout(function () { + reject() + }, wait) + }) + } + } + } + }, function (router, calls, emitter) { + router.go('/data/hello') + assertCalls(calls, ['data.data']) + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + // should not abort + expect(router.app.$el.textContent).toBe('default') + done() + }, wait * 2) + }) + }) + + it('multiple data hooks', function (done) { + test({ + data: { + data: [ + function (transition) { + return { + msg: new Promise(function (resolve) { + setTimeout(function () { + resolve(transition.to.params.msg) + }, wait) + }) + } + }, + function (transition) { + return new Promise(function (resolve) { + setTimeout(function () { + resolve({ + otherMsg: ' ' + transition.to.params.msg + '2' + }) + }, wait) + }) + } + ], + mixins: [ + { + route: { + data: function (transition) { + transition.next({ + thirdMsg: ' ' + transition.to.params.msg + '3' + }) + } + } + } + ] + } + }, function (router, calls, emitter) { + router.go('/data/hello') + expect(router.app.$el.textContent).toBe('loading...') + setTimeout(function () { + expect(router.app.$el.textContent).toBe('hello hello2 hello3') + done() + }, wait * 4) + }) + }) +}) diff --git a/test/unit/specs/pipeline/deactivate.js b/test/unit/specs/pipeline/deactivate.js new file mode 100644 index 000000000..8c461ed00 --- /dev/null +++ b/test/unit/specs/pipeline/deactivate.js @@ -0,0 +1,189 @@ +var testUtils = require('../../lib/pipeline-test-util') +var test = testUtils.test +var assertCalls = testUtils.assertCalls + +describe('deactivate', function () { + + it('sync', function (done) { + test({ + a: { + deactivate: function (transition) { + transition.next() + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/b') + expect(router.app.$el.textContent).toBe('') + assertCalls(calls, ['a.deactivate']) + done() + }) + }) + + it('sync (no arg)', function (done) { + test({ + a: { + deactivate: function () { + // noop + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/b') + expect(router.app.$el.textContent).toBe('') + assertCalls(calls, ['a.deactivate']) + done() + }) + }) + + it('async', function (done) { + test({ + a: { + deactivate: function (transition) { + setTimeout(function () { + transition.next() + }, wait) + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/b') + expect(router.app.$el.textContent).toBe('A ') + setTimeout(function () { + assertCalls(calls, ['a.deactivate']) + expect(router.app.$el.textContent).toBe('') + done() + }, wait) + }) + }) + + it('abort sync', function (done) { + test({ + a: { + deactivate: function (transition) { + transition.abort() + // should have no effect + transition.next() + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/b') + assertCalls(calls, ['a.deactivate']) + expect(router.app.$el.textContent).toBe('A ') + done() + }) + }) + + it('abort async', function (done) { + test({ + a: { + deactivate: function (transition) { + setTimeout(function () { + transition.abort() + }, wait) + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/b') + assertCalls(calls, ['a.deactivate']) + // content hasn't changed yet + expect(router.app.$el.textContent).toBe('A ') + // path is changed + expect(router.history.currentPath).toBe('/b') + setTimeout(function () { + // aborted, path is reset + expect(router.app.$el.textContent).toBe('A ') + expect(router.history.currentPath).toBe('/a') + done() + }, wait) + }) + }) + + it('promise', function (done) { + test({ + a: { + deactivate: function () { + return new Promise(function (resolve) { + setTimeout(resolve, wait) + }) + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/b') + expect(router.app.$el.textContent).toBe('A ') + setTimeout(function () { + assertCalls(calls, ['a.deactivate']) + expect(router.app.$el.textContent).toBe('') + done() + }, wait * 2) + }) + }) + + it('promise reject', function (done) { + test({ + a: { + deactivate: function () { + return new Promise(function (resolve, reject) { + setTimeout(reject, wait) + }) + } + } + }, function (router, calls, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/b') + assertCalls(calls, ['a.deactivate']) + // content hasn't changed yet + expect(router.app.$el.textContent).toBe('A ') + // path is changed + expect(router.history.currentPath).toBe('/b') + setTimeout(function () { + // aborted, path is reset + expect(router.app.$el.textContent).toBe('A ') + expect(router.history.currentPath).toBe('/a') + done() + }, wait * 2) + }) + }) + + it('multiple', function (done) { + var calls = [] + test({ + a: { + deactivate: [ + function (transition) { + calls.push(1) + setTimeout(function () { + transition.next() + }, wait) + }, + function () { + calls.push(2) + return new Promise(function (resolve) { + setTimeout(resolve, wait) + }) + } + ] + } + }, function (router, _, emitter) { + router.go('/a') + expect(router.app.$el.textContent).toBe('A ') + router.go('/b') + expect(router.app.$el.textContent).toBe('A ') + setTimeout(function () { + assertCalls(calls, [1, 2]) + expect(router.app.$el.textContent).toBe('') + done() + }, wait * 3) + }) + }) +}) diff --git a/test/unit/specs/pipeline/full.js b/test/unit/specs/pipeline/full.js new file mode 100644 index 000000000..e73b154ec --- /dev/null +++ b/test/unit/specs/pipeline/full.js @@ -0,0 +1,93 @@ +var testUtils = require('../../lib/pipeline-test-util') +var test = testUtils.test +var assertCalls = testUtils.assertCalls +var util = require('../../../../src/util') + +describe('full', function () { + + beforeEach(function () { + spyOn(util, 'warn') + }) + + it('should call hooks in correct order', function (done) { + function makeConfig () { + return { + canActivate: function () { + // sync boolean + return true + }, + activate: function (transition) { + // async call next() + setTimeout(function () { + transition.next() + // multiple call should warn and not mess up + // the flow + transition.next() + }, wait) + }, + canDeactivate: function () { + // promise boolean + return new Promise(function (resolve, reject) { + setTimeout(function () { + resolve(true) + }, wait) + }) + }, + deactivate: function (transition) { + // promise next + return new Promise(function (resolve, reject) { + setTimeout(resolve, wait) + }) + } + } + } + + test({ + a: makeConfig(), + b: makeConfig(), + c: makeConfig(), + d: makeConfig() + }, function (router, calls, emitter) { + + router.go('/a/b') + emitter.once('b.activate', function () { + assertCalls(calls, [ + // initial render + 'a.canActivate', 'b.canActivate', 'a.activate', 'b.activate' + ]) + // should not render yet + expect(router.app.$el.textContent).toBe('') + // wait until activation to assert render content + setTimeout(function () { + expect(util.warn.calls.count()).toBe(2) + expect(util.warn).toHaveBeenCalledWith('transition.next() should be called only once.') + expect(router.app.$el.textContent).toBe('A B') + router.go('/c/d') + }, wait) + }) + + emitter.once('d.activate', function () { + testUtils.assertCalls(calls, [ + // initial render + 'a.canActivate', 'b.canActivate', 'a.activate', 'b.activate', + // check can deactivate current views from bottom up + 'b.canDeactivate', 'a.canDeactivate', + // check can activate new views from top down + 'c.canActivate', 'd.canActivate', + // deactivate old views from bottom up + 'b.deactivate', 'a.deactivate', + // activate new views from top down + 'c.activate', 'd.activate' + ]) + // should not switch yet + expect(router.app.$el.textContent).toBe('A B') + // wait until activation to assert render content + setTimeout(function () { + expect(util.warn.calls.count()).toBe(4) + expect(router.app.$el.textContent).toBe('C D') + done() + }, wait) + }) + }) + }) +}) diff --git a/test/unit/specs/query.spec.js b/test/unit/specs/query.spec.js deleted file mode 100644 index 54bfcff55..000000000 --- a/test/unit/specs/query.spec.js +++ /dev/null @@ -1,86 +0,0 @@ -import { resolveQuery, stringifyQuery } from '../../../src/util/query' - -describe('Query utils', () => { - describe('resolveQuery', () => { - it('should work', () => { - const query = resolveQuery('foo=bar&foo=k', { baz: 'qux' }) - expect(JSON.stringify(query)).toBe( - JSON.stringify({ - foo: ['bar', 'k'], - baz: 'qux' - }) - ) - }) - - it('should turn empty params into null', () => { - expect(resolveQuery('?foo&bar=&arr=1&arr&arr=2')).toEqual({ - foo: null, - bar: '', - arr: ['1', null, '2'] - }) - }) - - it('should keep undefined and null query values', () => { - const query = resolveQuery('', { a: undefined, b: null }) - expect(query).toEqual({ a: undefined, b: null }) - }) - - it('should keep objects query values', () => { - const query = resolveQuery('', { a: { nested: 'o' }, b: [{ a: true }] }) - expect(query).toEqual({ a: { nested: 'o' }, b: [{ a: true }] }) - }) - - it('should keep null query values in arrays', () => { - const query = resolveQuery('', { baz: [null, '2'] }) - expect(query).toEqual({ baz: [null, '2'] }) - }) - - it('should cast query values into string', () => { - const query = resolveQuery('foo=bar&foo=k', { baz: 1 }) - expect(query.baz).toBe('1') - }) - - it('should cast query array values into string', () => { - const query = resolveQuery('foo=bar&foo=k', { baz: [1, '2'] }) - expect(query.baz).toEqual(['1', '2']) - }) - }) - - describe('stringifyQuery', () => { - it('should work', () => { - expect( - stringifyQuery({ - foo: 'bar', - baz: 'qux', - arr: [1, 2] - }) - ).toBe('?foo=bar&baz=qux&arr=1&arr=2') - }) - - it('should add only the key with null', () => { - expect( - stringifyQuery({ - foo: null, - bar: '', - arr: [1, null, 3] - }) - ).toBe('?foo&bar=&arr=1&arr&arr=3') - }) - - it('should escape reserved chars', () => { - expect( - stringifyQuery({ - a: '*()!' - }) - ).toBe('?a=%2a%28%29%21') - }) - - it('should preserve commas', () => { - expect( - stringifyQuery({ - list: '1,2,3' - }) - ).toBe('?list=1,2,3') - }) - }) -}) diff --git a/test/unit/specs/route.spec.js b/test/unit/specs/route.spec.js deleted file mode 100644 index c9483ab7d..000000000 --- a/test/unit/specs/route.spec.js +++ /dev/null @@ -1,153 +0,0 @@ -import { isSameRoute, isIncludedRoute } from '../../../src/util/route' - -describe('Route utils', () => { - describe('isSameRoute', () => { - it('path', () => { - const a = { - path: '/a', - hash: '#hi', - query: { foo: 'bar', arr: [1, 2] } - } - const b = { - path: '/a/', // Allow trailing slash - hash: '#hi', - query: { arr: ['1', '2'], foo: 'bar' } - } - expect(isSameRoute(a, b)).toBe(true) - }) - - it('name', () => { - const a = { - path: '/abc', - name: 'a', - hash: '#hi', - query: { foo: 'bar', arr: [1, 2] } - } - const b = { - name: 'a', - hash: '#hi', - query: { arr: ['1', '2'], foo: 'bar' } - } - expect(isSameRoute(a, b)).toBe(true) - }) - - it('nested query', () => { - const a = { - path: '/abc', - query: { foo: { bar: 'bar' }, arr: [1, 2] } - } - const b = { - path: '/abc', - query: { arr: [1, 2], foo: { bar: 'bar' }} - } - const c = { - path: '/abc', - query: { arr: [1, 2], foo: { bar: 'not bar' }} - } - expect(isSameRoute(a, b)).toBe(true) - expect(isSameRoute(a, c)).toBe(false) - }) - - it('queries with null values', () => { - const a = { - path: '/abc', - query: { foo: null } - } - const b = { - path: '/abc', - query: { foo: null } - } - const c = { - path: '/abc', - query: { foo: 5 } - } - expect(() => isSameRoute(a, b)).not.toThrow() - expect(() => isSameRoute(a, c)).not.toThrow() - expect(isSameRoute(a, b)).toBe(true) - expect(isSameRoute(a, c)).toBe(false) - }) - - it('queries with undefined values', () => { - const a = { - path: '/abc', - query: { a: 'x' } - } - const b = { - path: '/abc', - query: { id: undefined } - } - const c = { - path: '/abc', - query: {} - } - expect(() => isSameRoute(a, b)).not.toThrow() - expect(() => isSameRoute(a, c)).not.toThrow() - expect(() => isSameRoute(b, c)).not.toThrow() - expect(isSameRoute(a, b)).toBe(false) - expect(isSameRoute(a, c)).toBe(false) - // NOTE: in reality this should be true but because we check queries as - // objects, they are different objects. We should check queries as their - // string representation instead - expect(isSameRoute(b, c)).toBe(false) - expect(isSameRoute(c, b)).toBe(false) - }) - }) - - describe('isIncludedRoute', () => { - it('path', () => { - const a = { path: '/a/b' } - const b = { path: '/a' } - const c = { path: '/a/b/c' } - const d = { path: '/a/b/' } - expect(isIncludedRoute(a, b)).toBe(true) - expect(isIncludedRoute(a, c)).toBe(false) - expect(isIncludedRoute(a, d)).toBe(true) - }) - - it('with hash', () => { - const a = { path: '/a/b', hash: '#a' } - const b = { path: '/a' } - const c = { path: '/a', hash: '#a' } - const d = { path: '/a', hash: '#b' } - expect(isIncludedRoute(a, b)).toBe(true) - expect(isIncludedRoute(a, c)).toBe(true) - expect(isIncludedRoute(a, d)).toBe(false) - }) - - it('with query', () => { - const a = { path: '/a/b', query: { foo: 'bar', baz: 'qux' }} - const b = { path: '/a', query: {}} - const c = { path: '/a', query: { foo: 'bar' }} - const d = { path: '/a', query: { foo: 'bar', a: 'b' }} - expect(isIncludedRoute(a, b)).toBe(true) - expect(isIncludedRoute(a, c)).toBe(true) - expect(isIncludedRoute(a, d)).toBe(false) - }) - - it('with both', () => { - const a = { path: '/a/b', query: { foo: 'bar', baz: 'qux' }, hash: '#a' } - const b = { path: '/a', query: {}} - const c = { path: '/a', query: { foo: 'bar' }} - const d = { path: '/a', query: { foo: 'bar' }, hash: '#b' } - const e = { path: '/a', query: { a: 'b' }, hash: '#a' } - expect(isIncludedRoute(a, b)).toBe(true) - expect(isIncludedRoute(a, c)).toBe(true) - expect(isIncludedRoute(a, d)).toBe(false) - expect(isIncludedRoute(a, e)).toBe(false) - }) - - it('trailing slash', () => { - const a = { path: '/users' } - const b = { path: '/user' } - const c = { path: '/users/' } - expect(isIncludedRoute(a, b)).toBe(false) - expect(isIncludedRoute(a, c)).toBe(true) - - const d = { path: '/users/hello/world' } - const e = { path: '/users/hello' } - const f = { path: '/users/hello-world' } - expect(isIncludedRoute(d, e)).toBe(true) - expect(isIncludedRoute(d, f)).toBe(false) - }) - }) -}) diff --git a/test/unit/specs/util.js b/test/unit/specs/util.js new file mode 100644 index 000000000..0c0bf5f66 --- /dev/null +++ b/test/unit/specs/util.js @@ -0,0 +1,51 @@ +var util = require('../../../src/util') + +describe('Util', function () { + + it('resolvePath', function () { + expect(util.resolvePath('/a', 'b')).toBe('/b') + expect(util.resolvePath('/a/', 'b')).toBe('/a/b') + expect(util.resolvePath('/a', '/b')).toBe('/b') + expect(util.resolvePath('/a/', '/b')).toBe('/a/b') + // append mode + expect(util.resolvePath('/a', 'b', true)).toBe('/a/b') + expect(util.resolvePath('/a/', 'b', true)).toBe('/a/b') + expect(util.resolvePath('/a', '/b', true)).toBe('/a/b') + expect(util.resolvePath('/a/', '/b', true)).toBe('/a/b') + // relative query + expect(util.resolvePath('/a', '?b=1')).toBe('/a?b=1') + expect(util.resolvePath('/a/', '?b=1')).toBe('/a/?b=1') + }) + + it('mapParams', function () { + expect(util.mapParams('/a/:id', { id: 'b' })).toBe('/a/b') + expect(util.mapParams('/a/:id/', { id: 'b' })).toBe('/a/b/') + expect(util.mapParams('/a/:id/c/:d', { id: 'b', d: 'd' })).toBe('/a/b/c/d') + expect(util.mapParams('/a/:id/c/:d', { id: 'b', d: 'd' }, { e: 123 })).toBe('/a/b/c/d?e=123') + }) + + it('resolveAsyncComponent', function (done) { + var handler = { + component: function (resolve) { + setTimeout(function () { + resolve({ + template: 'hi' + }) + }, 0) + } + } + util.resolveAsyncComponent(handler, function (Component) { + expect(Component.options.template).toBe('hi') + done() + }) + }) + + it('getRouteConfig', function () { + expect(util.getRouteConfig({}, 'data')).toBeUndefined() + expect(util.getRouteConfig({ options: { route: {}}}, 'data')).toBeUndefined() + expect(util.getRouteConfig({ options: { route: { data: 1 }}}, 'data')).toBe(1) + expect(util.getRouteConfig({ $options: { route: {}}}, 'data')).toBeUndefined() + expect(util.getRouteConfig({ $options: { route: { data: 1 }}}, 'data')).toBe(1) + }) + +}) diff --git a/test/unit/webpack.config.js b/test/unit/webpack.config.js new file mode 100644 index 000000000..e374a4be9 --- /dev/null +++ b/test/unit/webpack.config.js @@ -0,0 +1,16 @@ +module.exports = { + entry: './test/unit/specs/index.js', + output: { + path: './test/unit', + filename: 'specs.js' + }, + module: { + loaders: [ + { + test: /\.js$/, + exclude: /test|node_modules|vue\/dist/, + loader: 'babel?optional[]=runtime&loose=all' + } + ] + } +} diff --git a/types/composables.d.ts b/types/composables.d.ts deleted file mode 100644 index 981f7a2ab..000000000 --- a/types/composables.d.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { ComputedRef, Ref } from 'vue' -import type { Route, NavigationGuard, default as VueRouter } from './index' - -/** - * Returns the current route location. Equivalent to using `$route` inside templates. - */ -export function useRoute(): Route - -/** - * Returns the router instance. Equivalent to using `$router` inside templates. - */ -export function useRouter(): VueRouter - -/** - * Add a navigation guard that triggers whenever the current location is about to be updated. Similar to beforeRouteUpdate but can be used in any component. The guard is removed when the component is unmounted. - * - * @param updateGuard - */ -export function onBeforeRouteUpdate(updateGuard: NavigationGuard): void - -/** - * Add a navigation guard that triggers whenever the component for the current location is about to be left. Similar to beforeRouteLeave but can be used in any component. The guard is removed when the component is unmounted. - * - * @param leaveGuard - */ -export function onBeforeRouteLeave(leaveGuard: NavigationGuard): void - -export interface RouterLinkOptions { - /** - * Route Location the link should navigate to when clicked on. - */ - to: Route | Ref<Route> - /** - * Calls `router.replace` instead of `router.push`. - */ - replace?: boolean -} - -/** - * Vue Router 4 `useLink()` function. Note the active behavior is different from Vue Router 3 as highlighted in the - * migration guide (https://router.vuejs.org/guide/migration/index.html#removal-of-the-exact-prop-in-router-link) - * - * @param props - object containing a `to` property with the location - */ -export function useLink({ to, replace }: RouterLinkOptions): { - route: ComputedRef<Route>, - isActive: ComputedRef<boolean>, - isExactActive: ComputedRef<boolean>, - href: ComputedRef<string>, - navigate: () => Promise<void>, -} diff --git a/types/index.d.ts b/types/index.d.ts deleted file mode 100644 index 0716e67ed..000000000 --- a/types/index.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import './vue' -import { VueRouter, RouterLink, RouterView, START_LOCATION, NavigationFailureType, isNavigationFailure } from './router' - -export default VueRouter -export { RouterView, RouterLink, START_LOCATION, NavigationFailureType, isNavigationFailure } - -export type { - RouterMode, - RouteMeta, - RawLocation, - RedirectOption, - RouterOptions, - RouteConfig, - RouteRecord, - RouteRecordPublic, - Location, - Route, - NavigationGuard, - NavigationGuardNext, - NavigationFailure -} from './router' - -import './composables' diff --git a/types/router.d.ts b/types/router.d.ts deleted file mode 100644 index a334bc95f..000000000 --- a/types/router.d.ts +++ /dev/null @@ -1,573 +0,0 @@ -import Vue, { - PluginFunction, - AsyncComponent, - VNode, - Component as _Component -} from 'vue' - -type Component = - | {} - | _Component<any, any, any, any> - | AsyncComponent<any, any, any, any> - -type Dictionary<T> = { [key: string]: T } -type ErrorHandler = (err: Error) => void - -export type RouterMode = 'hash' | 'history' | 'abstract' -export type RawLocation = string | Location -export type RedirectOption = RawLocation | ((to: Route) => RawLocation) -export type NavigationGuardNext<V extends Vue = Vue> = ( - to?: RawLocation | false | ((vm: V) => any) | void -) => void - -export type NavigationGuard<V extends Vue = Vue> = ( - to: Route, - from: Route, - next: NavigationGuardNext<V> -) => any - -/** - * Router instance. - */ -export declare class VueRouter { - constructor(options?: RouterOptions) - - app: Vue - /** - * Original options object passed to create the Router - */ - options: RouterOptions - /** - * Configured mode when creating the Router instance. - */ - mode: RouterMode - /** - * Current {@link Route} - */ - currentRoute: Route - - /** - * Add a navigation guard that executes before any navigation. - * - * @param guard - navigation guard to add - * @returns a function that removes the registered guard - * - * @example - * ```js - * router.beforeEach((to, from, next) => { - * // must call `next` - * }) - * ``` - */ - beforeEach(guard: NavigationGuard): () => void - /** - * Add a navigation guard that executes before navigation is about to be resolved. At this state all component have - * been fetched and other navigation guards have been successful. - * - * @param guard - navigation guard to add - * @returns a function that removes the registered guard - * - * @example - * ```js - * router.beforeResolve((to, from, next) => { - * // must call `next` - * }) - * ``` - */ - beforeResolve(guard: NavigationGuard): () => void - /** - * Add a navigation hook that is executed after every navigation. Returns a function that removes the registered hook. - * - * @param hook - navigation hook to add - * @returns a function that removes the registered guard - * - * @example - * ```js - * router.afterEach((to, from) => { - * console.log('after navigation') - * }) - * ``` - */ - afterEach(hook: (to: Route, from: Route) => any): () => void - /** - * Programmatically navigate to a new URL by pushing an entry in the history stack. - * - * @param to Route location to navigate to - */ - push(to: RawLocation): Promise<Route> - /** - * Programmatically navigate to a new URL by pushing an entry in the history stack. - * - * @param to Route location to navigate to - * @param onComplete Navigation success callback - * @param onAbort Navigation aborted callback - */ - push( - to: RawLocation, - onComplete?: (route: Route) => void, - onAbort?: ErrorHandler - ): void - /** - * Programmatically navigate to a new URL by replacing the current entry in the history stack. - * - * @param to Route location to navigate to - */ - replace(to: RawLocation): Promise<Route> - /** - * Programmatically navigate to a new URL by replacing the current entry in the history stack. - * - * @param to Route location to navigate to - * @param onComplete Navigation success callback - * @param onAbort Navigation aborted callback - */ - replace( - to: RawLocation, - onComplete?: (route: Route) => void, - onAbort?: ErrorHandler - ): void - /** - * Allows you to move forward or backward through the history. Calls `history.go()`. - * - * @param delta The position in the history to which you want to move, relative to the current page - */ - go(n: number): void - /** - * Go back in history if possible by calling `history.back()`. Equivalent to `router.go(-1)`. - */ - back(): void - /** - * Go forward in history if possible by calling `history.forward()`. Equivalent to `router.go(1)`. - */ - forward(): void - match (raw: RawLocation, current?: Route, redirectedFrom?: Location): Route - getMatchedComponents(to?: RawLocation | Route): Component[] - /** - * This method queues a callback to be called when the router has completed the initial navigation, which means it has - * resolved all async enter hooks and async components that are associated with the initial route. - * - * This is useful in server-side rendering to ensure consistent output on both the server and the client. - * @param cb onReady callback. - * @param errorCb errorCb will be called when the initial route resolution runs into an error (e.g. failed to resolve - * an async component). - */ - onReady(cb: () => void, errorCb?: ErrorHandler): void - /** - * Adds an error handler that is called every time a non caught error happens during navigation. This includes errors - * thrown synchronously and asynchronously, errors returned or passed to `next` in any navigation guard, and errors - * occurred when trying to resolve an async component that is required to render a route. - * - * @param handler - error handler to register - */ - onError(cb: ErrorHandler): void - /** - * @deprecated use {@link addRoute | router.addRoute()} instead - */ - addRoutes(routes: RouteConfig[]): void - /** - * Add a new {@link RouteConfig | route record} as the child of an existing route. If the route has a `name` and there - * is already an existing one with the same one, it overwrites it. - * - * @param parentName - Parent Route Record where `route` should be appended at - * @param route - Route Record to add - */ - addRoute(parentName: string, route: RouteConfig): void - /** - * Add a new {@link RouteConfig | route} to the router. If the route has a `name` and there is already an existing one - * with the same one, it overwrites it. - * @param route - Route Record to add - */ - addRoute(route: RouteConfig): void - /** - * Get the list of all the active route records. - */ - getRoutes(): RouteRecordPublic[] - - /** - * - * @param to Route location - * @param current current is the current Route by default (most of the time you don't need to change this) - * @param append allows you to append the path to the `current` route (as with `router-link`) - */ - resolve( - to: RawLocation, - current?: Route, - append?: boolean - ): { - location: Location - route: Route - href: string - /** - * backwards compat - */ - normalizedTo: Location - /** - * backwards compat - */ - resolved: Route - } - /** - * @internal - */ - static install: PluginFunction<never> - static version: string - - static isNavigationFailure: typeof isNavigationFailure - static NavigationFailureType: { - [k in keyof typeof NavigationFailureType]: NavigationFailureType - } - - static START_LOCATION: Route -} - -/** - * Enumeration with all possible types for navigation failures. - * - * Can be passed to {@link isNavigationFailure} to check for specific failures. - */ -export enum NavigationFailureType { - /** - * @internal - */ - redirected = 2, - /** - * An aborted navigation is a navigation that failed because a navigation guard returned `false` or called - * `next(false)` - */ - aborted = 4, - /** - * A cancelled navigation is a navigation that failed because a more recent navigation finished started (not - * necessarily finished). - */ - cancelled = 8, - /** - * A duplicated navigation is a navigation that failed because it was initiated while already being at the exact same - * location. - */ - duplicated = 16 -} - -/** - * Extended Error that contains extra information regarding a failed navigation. - */ -export interface NavigationFailure extends Error { - /** - * Route location we were navigating from - */ - from: Route - /** - * Route location we were navigating to - */ - to: Route - /** - * Type of the navigation. One of {@link NavigationFailureType} - */ - type: NavigationFailureType.aborted | NavigationFailureType.cancelled | NavigationFailureType.duplicated -} - -/** - * Check if an object is a {@link NavigationFailure}. - */ -export declare function isNavigationFailure(error: any, type?: NavigationFailureType): error is NavigationFailure - -type Position = { x: number; y: number } -type PositionResult = Position | { selector: string; offset?: Position, behavior?: ScrollBehavior } | void - - -/** - * Options to initialize a {@link VueRouter} instance. - */ -export interface RouterOptions { - routes?: RouteConfig[] - /** - * Configure the router mode. - * - * default: `"hash"` (in browser) | `"abstract"` (in Node.js) - * - * available values: `"hash" | "history" | "abstract"` - * - `"hash"`: uses the URL hash for routing. Works in all Vue-supported browsers, including those that do not support - * HTML5 History API. - * - `"history"`: requires HTML5 History API and server config. See HTML5 History Mode. - * - `"abstract"`: works in all JavaScript environments, e.g. server-side with Node.js. **The router will - * automatically be forced into this mode if no browser API is present.** - */ - mode?: RouterMode - fallback?: boolean - base?: string - /** - * Default class applied to active {@link RouterLink}. If none is provided, `router-link-active` will be applied. - */ - linkActiveClass?: string - /** - * Default class applied to active {@link RouterLink}. If none is provided, `router-link-exact-active` will be - * applied. - */ - linkExactActiveClass?: string - /** - * Custom implementation to parse a query. See its counterpart, {@link stringifyQuery}. - */ - parseQuery?: (query: string) => Object - /** - * Custom implementation to stringify a query object. Should not prepend a leading `?`. {@link parseQuery} counterpart - * to handle query parsing. - */ - stringifyQuery?: (query: Object) => string - /** - * Function to control scrolling when navigating between pages. Can return a Promise to delay scrolling. - * - * For more details see {@link Scroll Behavior}. - */ - scrollBehavior?: ( - to: Route, - from: Route, - savedPosition: Position | void - ) => PositionResult | Promise<PositionResult> | undefined | null -} - -type RoutePropsFunction = (route: Route) => Object - -export interface PathToRegexpOptions { - sensitive?: boolean - strict?: boolean - end?: boolean -} - -interface _RouteConfigBase { - path: string - name?: string - children?: RouteConfig[] - redirect?: RedirectOption - alias?: string | string[] - meta?: RouteMeta - beforeEnter?: NavigationGuard - caseSensitive?: boolean - pathToRegexpOptions?: PathToRegexpOptions -} - -interface RouteConfigSingleView extends _RouteConfigBase { - component?: Component - props?: boolean | Object | RoutePropsFunction -} - -interface RouteConfigMultipleViews extends _RouteConfigBase { - components?: Dictionary<Component> - props?: Dictionary<boolean | Object | RoutePropsFunction> -} - -export type RouteConfig = RouteConfigSingleView | RouteConfigMultipleViews - -export interface RouteRecord { - path: string - regex: RegExp - components: Dictionary<Component> - instances: Dictionary<Vue> - name?: string - parent?: RouteRecord - redirect?: RedirectOption - matchAs?: string - meta: RouteMeta - beforeEnter?: ( - route: Route, - redirect: (location: RawLocation) => void, - next: () => void - ) => any - props: - | boolean - | Object - | RoutePropsFunction - | Dictionary<boolean | Object | RoutePropsFunction> -} - -export interface RouteRecordPublic { - path: string - components: Dictionary<Component> - instances: Dictionary<Vue> - name?: string - redirect?: RedirectOption - meta: any - beforeEnter?: ( - route: Route, - redirect: (location: RawLocation) => void, - next: () => void - ) => any - props: - | boolean - | Object - | RoutePropsFunction - | Dictionary<boolean | Object | RoutePropsFunction> -} - - -export interface Location { - name?: string - path?: string - hash?: string - query?: Dictionary<string | (string | null)[] | null | undefined> - params?: Dictionary<string> - append?: boolean - replace?: boolean -} - -export interface Route { - path: string - name?: string | null - hash: string - query: Dictionary<string | (string | null)[]> - params: Dictionary<string> - fullPath: string - matched: RouteRecord[] - redirectedFrom?: string - meta?: RouteMeta -} - -export interface RouteMeta extends Record<string | number | symbol, any> {} - -export interface RouterLinkProps { - /** - * Denotes the target route of the link. When clicked, the value of the `to` prop will be passed to - * `router.push()` internally, so the value can be either a string or a location descriptor object. - */ - to: string | Location - /** - * Setting `replace` prop will call `router.replace()` instead of `router.push()` when clicked, so the navigation will - * not create a new history record. - * - * @default false - */ - replace?: boolean - /** - * Setting `append` prop always appends the relative path to the current path. For example, assuming we are navigating - * from `/a` to a relative link `b`, without `append` we will end up at `/b`, but with append we will end up at - * `/a/b`. - * - * @default false - */ - append?: boolean - /** - * Sometimes we want <RouterLink> to render as another tag, e.g <li>. Then we can use tag prop to specify which tag to - * render to, and it will still listen to click events for navigation. - * - * @default "a" - */ - tag?: string - /** - * Configure the active CSS class applied when the link is active. Note the default value can also be configured - * globally via the `linkActiveClass` router constructor option. - * - * @default "router-link-active" - */ - activeClass?: string - /** - * The default active class matching behavior is **inclusive match**. For example, `<RouterLink to="/a">` will get - * this class applied as long as the current path starts with `/a/` or is `/a`. - * - * @default false - */ - exact?: boolean - /** - * Allows matching only using the `path` section of the url, effectively ignoring the `query` and the `hash` sections. - * - * @default false - */ - exactPath?: boolean - /** - * Configure the active CSS class applied when the link is active with exact path match. Note the default value can - * also be configured globally via the `linkExactPathActiveClass` router constructor option. - * - * @default "router-link-exact-path-active" - */ - exactPathActiveClass?: string - - /** - * Specify the event(s) that can trigger the link navigation. - * - * @default 'click' - */ - event?: string | ReadonlyArray<string> - /** - * Configure the active CSS class applied when the link is active with exact match. Note the default value can also be - * configured globally via the `linkExactActiveClass` router constructor option. - * - * @default "router-link-exact-active" - */ - exactActiveClass?: string - /** - * Configure the value of `aria-current` when the link is active with exact match. It must be one of the allowed - * values for [aria-current](https://www.w3.org/TR/wai-aria-1.2/#aria-current) in the ARIA spec. In most cases, the - * default of page should be the best fit. - * - * @default "page" - */ - ariaCurrentValue?: - | 'page' - | 'step' - | 'location' - | 'date' - | 'time' - | 'true' - | 'false' -} - -export interface RouterLinkSlotArgument { - /** - * resolved url. This would be the `href` attribute of an `a` element - */ - href: string - /** - * resolved normalized location - */ - route: Route - /** - * function to trigger the navigation. It will automatically prevent events when necessary, the same way `RouterLink` - * does - */ - navigate: (e?: MouseEvent) => Promise<undefined | NavigationFailure> - /** - * `true` if the [active class](https://v3.router.vuejs.org/api/#active-class) should be applied. Allows to apply an - * arbitrary class - */ - isActive: boolean - /** - * `true` if the [exact active class](https://v3.router.vuejs.org/api/#exact-active-class) should be applied. Allows - * to apply an arbitrary class - */ - isExactActive: boolean -} - -/** - * Component to render a link that triggers a navigation on click. - */ -export declare const RouterLink: new () => { - $props: RouterLinkProps - $scopedSlots: { - default?: ({ - href, - route, - navigate, - isActive, - isExactActive - }: RouterLinkSlotArgument) => VNode[] | undefined - } -} - -export interface RouterViewProps { - /** - * When a {@link RouterView | `<RouterView />`} has a name, it will render the component with the corresponding name - * in the matched route record's components option. See [Named - * Views](https://v3.router.vuejs.org/guide/essentials/named-views.html) for an example. - * - * @default "default" - */ - name?: string -} - -/** - * Component to display the current route the user is at. - */ -export declare const RouterView: new () => { - $props: RouterViewProps -} - -/** - * Initial route location where the router is. Can be used in navigation guards to differentiate the initial navigation. - */ -export declare const START_LOCATION: Route diff --git a/types/test/index.ts b/types/test/index.ts deleted file mode 100644 index a0445dd19..000000000 --- a/types/test/index.ts +++ /dev/null @@ -1,258 +0,0 @@ -import Vue, { ComponentOptions, AsyncComponent, Component } from 'vue' - -import VueRouter from '../index' -import { - Route, - RouteRecord, - RedirectOption, - NavigationFailure, - NavigationFailureType -} from '../index' - -Vue.use(VueRouter) - -const Home = { template: '<div>home</div>' } -const Foo = { template: '<div>foo</div>' } -const Bar = { template: '<div>bar</div>' } -const Abc = { template: '<div>abc</div>' } -const Async = () => Promise.resolve({ template: '<div>async</div>' }) - -let err: any -if ( - VueRouter.isNavigationFailure(err, VueRouter.NavigationFailureType.aborted) -) { - err.from.fullPath.split('/') -} - -let navigationFailure = new Error() as NavigationFailure -navigationFailure.to.fullPath.split('/') - -const Hook: ComponentOptions<Vue> = { - template: '<div>hook</div>', - - beforeRouteEnter(to, from, next) { - route.params - next('/') - next({ path: '/' }) - next(vm => { - vm.$router - }) - }, - - beforeRouteLeave(to, from, next) { - route.params - next('/') - next({ path: '/' }) - next() - }, - - beforeRouteUpdate(to, from, next) { - route.params - next('/') - next({ path: '/' }) - next() - } -} - -const JSXComponent = () => { - $props: { - } -} - -const router = new VueRouter({ - mode: 'history', - base: '/', - fallback: false, - linkActiveClass: 'active', - linkExactActiveClass: 'exact-active', - scrollBehavior: (to, from, savedPosition) => { - if (from.path === '/') { - return { selector: '#app' } - } - - if (from.path === '/offset') { - return { selector: '#foo', offset: { x: 0, y: 100 } } - } - - if (to.path === '/child') { - return - } - - if (savedPosition) { - return savedPosition - } - - return Promise.resolve({ - x: 0, - y: 0 - }) - }, - routes: [ - { - path: '/foo', - component: Home, - children: [{ path: '', component: Home }] - }, - { - path: '/foo', - components: { default: Home }, - children: [{ path: '', component: Home }] - }, - { - path: '/', - name: 'home', - component: Home, - children: [ - { - path: 'child', - components: { - default: Foo, - bar: Bar, - abc: Abc, - asyncComponent: Async, - JSXComponent - }, - meta: { auth: true, nested: { foo: '' } }, - beforeEnter(to, from, next) { - to.params - from.params - next({ name: 'home' }) - next() - }, - props: { - default: true, - bar: { id: 123 }, - abc: route => route.params, - asyncComponent: (route: Route) => route.params - } - }, - { - path: 'children', - redirect: to => { - to.params - return '/child' - } - } - ] - }, - { path: '/home', alias: '/' }, - { path: '/foo', props: true }, - { path: '/bar', props: { id: 123 } }, - { path: '/baz', props: (route: Route) => route.params }, - { path: '*', redirect: '/' } - ] -}) - -const App: Vue = router.app -const mode: string = router.mode - -const route: Route = router.currentRoute -const path: string = route.path -const name: string | undefined | null = route.name -const hash: string = route.hash -const query: string | (string | null)[] | null = route.query['foo'] -const params: string = route.params['bar'] -const fullPath: string = route.fullPath -const redirectedFrom: string | undefined = route.redirectedFrom -const meta: any = route.meta -const matched: RouteRecord[] = route.matched - -matched.forEach(m => { - const path: string = m.path - const components: { - [key: string]: Component | AsyncComponent | {} - } = m.components - const instances: { [key: string]: Vue } = m.instances - const name: string | undefined | null = m.name - const parent: RouteRecord | undefined = m.parent - const redirect: RedirectOption | undefined = m.redirect -}) - -const unregister = router.beforeEach((to, from, next) => { - to.params - next('/') - next() -}) - -unregister() - -router.beforeResolve((to, from, next) => { - to.params - from.params - next() -}) - -router.afterEach((to, from) => { - to.params - from.params -}) - -router.push({ - path: '/', - params: { - foo: 'foo' - }, - query: { - bar: 'bar', - empty: null, - removed: undefined, - withEmpty: ['1', null], - foo: ['foo1', 'foo2'] - }, - hash: 'hash' -}) -router.replace({ name: 'home' }) - -router.push( - '/', - () => {}, - () => {} -) -router.replace( - '/foo', - () => {}, - () => {} -) - -// promises - -router - .push('/') - .then(route => { - route.fullPath - }) - .catch(() => {}) - -router.onReady(() => {}) - -router.addRoutes([{ path: '/more' }]) - -router.go(-1) -router.back() -router.forward() - -const Components: ( - | Component - | AsyncComponent - | {} -)[] = router.getMatchedComponents() - -const match: Route = router.match('/more') - -const vm = new Vue({ - router, - template: ` - <div id="app"> - <h1>Basic</h1> - <ul> - <li><router-link to="/">/</router-link></li> - <li><router-link to="/foo">/foo</router-link></li> - <li><router-link to="/bar">/bar</router-link></li> - </ul> - <router-view class="view"></router-view> - </div> - ` -}).$mount('#app') - -vm.$router.push('/') -vm.$route.params diff --git a/types/test/meta.ts b/types/test/meta.ts deleted file mode 100644 index e320ba3dd..000000000 --- a/types/test/meta.ts +++ /dev/null @@ -1,45 +0,0 @@ -import VueRouter from '../index' - -const component = { template: '<div>home</div>' } - -declare module '../index' { - export interface RouteMeta { - requiresAuth?: boolean - nested: { foo: string } - } -} - -const router = new VueRouter({ - routes: [ - { - path: '/', - component, - meta: { - requiresAuth: true, - // still allowed - other: true, - nested: { - foo: 'bar' - } - } - }, - { - path: '/foo', - component, - // @ts-expect-error - meta: {} - } - ] -}) - -router.beforeEach(to => { - // should pass - if (to.meta!.requiresAuth === true) { - } - // still pass because any - if (to.meta!.lol === true) { - } - // @ts-expect-error: nested will never be true - if (to.meta!.nested === true) { - } -}) diff --git a/types/test/tsconfig.json b/types/test/tsconfig.json deleted file mode 100644 index 0a5a3d4f7..000000000 --- a/types/test/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "es2015", - "moduleResolution": "node", - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "lib": ["es5", "dom", "es2015.promise", "es2015.iterable", "es2015.core"] - }, - "include": ["*.ts", "../*.d.ts"] -} diff --git a/types/vue.d.ts b/types/vue.d.ts deleted file mode 100644 index eada07035..000000000 --- a/types/vue.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Augment the typings of Vue.js - */ - -import Vue from 'vue' -import VueRouter, { Route, NavigationGuard } from './index' - -declare module 'vue/types/vue' { - interface Vue { - $router: VueRouter - $route: Route - } -} - -declare module 'vue/types/options' { - interface ComponentOptions<V extends Vue> { - router?: VueRouter - beforeRouteEnter?: NavigationGuard<V> - beforeRouteLeave?: NavigationGuard<V> - beforeRouteUpdate?: NavigationGuard<V> - } -} diff --git a/vetur/attributes.json b/vetur/attributes.json deleted file mode 100644 index 4a3e30105..000000000 --- a/vetur/attributes.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": { - "type": "string", - "description": "When a `<router-view>` has a `name` prop, it will render the component with the corresponding name in the matched route record's components option." - }, - "to": { - "description": "Denotes the target route of the link. When clicked, the value of the `to` prop will be internally passed to `router.push()`, so the value can be either a string or a location descriptor object." - }, - "append": { - "type": "boolean", - "description": "Setting the append prop always appends the relative path to the current path. For example, assuming we are navigating from /a to a relative link b, without append we will end up at /b, but with append we will end up at /a/b." - }, - "tag": { - "description": "Specify which tag to render to, and it will still listen to click events for navigation. By default, an `a` tag is rendered." - }, - "event": { - "description": "Specify the event(s) that can trigger the link navigation. By default, the `click` event triggers a navigation." - }, - "replace": { - "type": "boolean", - "description": "Call `router.replace()` instead of `router.push()` when the link is clicked, so the navigation replaces the current history entry." - }, - "exact": { - "description": "The default active class matching behavior is inclusive match. For example, `<router-link to=\"/a\">` will get this class applied as long as the current path starts with /a/ or is /a.\nOne consequence of this is that `<router-link to=\"/\">` will be active for every route! To force the link into \"exact match mode\", use the exact prop: `<router-link to=\"/\" exact>`" - }, - "active-class": { - "type": "string", - "description": "Configure the active CSS class applied when the link is active. Note the default value can also be configured globally via the `linkActiveClass` router constructor option." - }, - "exact-active-class": { - "type": "string", - "description": "Configure the active CSS class applied when the link is exactly active. Note the default value can also be configured globally via the `linkExactActiveClass` router constructor option." - }, - "aria-current-value": { - "options": ["page", "step", "location", "date", "time", "true", "false"], - "description": "Configure the value of `aria-current` when the link is active with exact match. It must be one of the [allowed values for `aria-current`](https://www.w3.org/TR/wai-aria-1.2/#aria-current) in the ARIA spec. In most cases, the default of `page` should be the best fit." - } -} diff --git a/vetur/tags.json b/vetur/tags.json deleted file mode 100644 index bc31049f8..000000000 --- a/vetur/tags.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "router-view": { - "attributes": ["name"], - "description": "Component that renders the matched component for the current location. Components rendered by `<router-view>` can also contain their own `<router-view>` to render nested routes." - }, - "router-link": { - "attributes": [ - "to", - "replace", - "append", - "tag", - "active-class", - "exact", - "event", - "exact-active-class", - "aria-current-value" - ], - "description": "Component that renders an `<a>` with the correct `href` attribute and click listeners to trigger a local navigation when clicked. Can also customize its rendering by providing the `custom` prop and using its `v-slot` API." - } -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index cd110eb2b..000000000 --- a/yarn.lock +++ /dev/null @@ -1,12573 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8", "@babel/compat-data@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" - integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== - -"@babel/core@^7.11.0", "@babel/core@^7.8.4": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.0.tgz#47299ff3ec8d111b493f1a9d04bf88c04e728d88" - integrity sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.0.tgz#0f35d663506c43e4f10898fbda0d752ec75494be" - integrity sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg== - dependencies: - "@babel/types" "^7.14.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8", "@babel/helper-compilation-targets@^7.9.6": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" - integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== - dependencies: - "@babel/compat-data" "^7.13.15" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.13.11", "@babel/helper-create-class-features-plugin@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz#38367d3dab125b12f94273de418f4df23a11a15e" - integrity sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" - integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1" - integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" - integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== - dependencies: - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.16" - -"@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12", "@babel/helper-module-imports@^7.8.3": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz#8fcf78be220156f22633ee204ea81f73f826a8ad" - integrity sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" - integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" - -"@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" - integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.12.13", "@babel/parser@^7.14.0", "@babel/parser@^7.7.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.0.tgz#2f0ebfed92bcddcc8395b91f1895191ce2760380" - integrity sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q== - -"@babel/parser@^7.18.4": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" - integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" - integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - -"@babel/plugin-proposal-async-generator-functions@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz#80e549df273a3b3050431b148c892491df1bcc5b" - integrity sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.8.3": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-proposal-class-static-block@^7.13.11": - version "7.13.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz#6fcbba4a962702c17e5371a0c7b39afde186d703" - integrity sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-class-static-block" "^7.12.13" - -"@babel/plugin-proposal-decorators@^7.8.3": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.13.15.tgz#e91ccfef2dc24dd5bd5dcc9fc9e2557c684ecfb8" - integrity sha512-ibAMAqUm97yzi+LPgdr5Nqb9CMkeieGHvwPg1ywSGjZrZHQEGqE01HmOio8kxRpA/+VtOHouIVy2FMpBbtltjA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.11" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-decorators" "^7.12.13" - -"@babel/plugin-proposal-dynamic-import@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" - integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" - integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" - integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" - integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== - dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" - integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-proposal-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" - integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-create-class-features-plugin" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" - integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-decorators@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz#fac829bf3c7ef4a1bc916257b403e58c6bdaf648" - integrity sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" - integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-syntax-top-level-await@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-arrow-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - -"@babel/plugin-transform-block-scoped-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-block-scoping@^7.13.16": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz#a9c0f10794855c63b1d629914c7dcfeddd185892" - integrity sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-classes@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-destructuring@^7.13.17": - version "7.13.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" - integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-exponentiation-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-for-of@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-member-expression-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-modules-amd@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz#589494b5b290ff76cf7f59c798011f6d77026553" - integrity sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ== - dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" - integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== - dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.13.12" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== - dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" - integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== - dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - -"@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-object-super@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" - -"@babel/plugin-transform-parameters@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-property-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-regenerator@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" - integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-runtime@^7.11.0": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz#2eddf585dd066b84102517e10a577f24f76a9cd7" - integrity sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" - semver "^6.3.0" - -"@babel/plugin-transform-shorthand-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-spread@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - -"@babel/plugin-transform-sticky-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-template-literals@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/preset-env@^7.11.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.0.tgz#236f88cd5da625e625dd40500d4824523f50e6c5" - integrity sha512-GWRCdBv2whxqqaSi7bo/BEXf070G/fWFMEdCnmoRg2CZJy4GK06ovFuEjJrZhDRXYgBsYtxVbG8GUHvw+UWBkQ== - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.13.15" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-class-static-block" "^7.13.11" - "@babel/plugin-proposal-dynamic-import" "^7.13.8" - "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.13.8" - "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.13.8" - "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-private-property-in-object" "^7.14.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.13.16" - "@babel/plugin-transform-classes" "^7.13.0" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.17" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.14.0" - "@babel/plugin-transform-modules-commonjs" "^7.14.0" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.14.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.13.0" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.13.15" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.0" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" - core-js-compat "^3.9.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.8.4": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" - integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.0.0", "@babel/template@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.7.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.0.tgz#cea0dc8ae7e2b1dec65f512f39f3483e8cc95aef" - integrity sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.0" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.0" - "@babel/types" "^7.14.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.0.tgz#3fc3fc74e0cdad878182e5f66cc6bcab1915a802" - integrity sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - to-fast-properties "^2.0.0" - -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== - -"@hapi/joi@^15.0.0": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== - dependencies: - "@hapi/hoek" "^8.3.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== - dependencies: - "@nodelib/fs.stat" "2.0.4" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== - dependencies: - "@nodelib/fs.scandir" "2.1.4" - fastq "^1.6.0" - -"@rollup/plugin-commonjs@^17.0.0": - version "17.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz#757ec88737dffa8aa913eb392fade2e45aef2a2d" - integrity sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew== - dependencies: - "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-node-resolve@^11.0.0": - version "11.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== - dependencies: - any-observable "^0.3.0" - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@testim/chrome-version@^1.0.7": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@testim/chrome-version/-/chrome-version-1.1.2.tgz#092005c5b77bd3bb6576a4677110a11485e11864" - integrity sha512-1c4ZOETSRpI0iBfIFUqU4KqwBAB2lHUAlBjZz/YqOHqwM9dTTzjV6Km0ZkiEiSCx/tLr1BtESIKyWWMww+RUqw== - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/estree@*": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/json-schema@^7.0.5": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== - -"@types/minimist@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" - integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== - -"@types/node@*": - version "15.0.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.1.tgz#ef34dea0881028d11398be5bf4e856743e3dc35a" - integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/yauzl@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" - integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== - dependencies: - "@types/node" "*" - -"@vue/babel-helper-vue-jsx-merge-props@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81" - integrity sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA== - -"@vue/babel-helper-vue-transform-on@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz#9b9c691cd06fc855221a2475c3cc831d774bc7dc" - integrity sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA== - -"@vue/babel-plugin-jsx@^1.0.3": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.0.6.tgz#184bf3541ab6efdbe5079ab8b20c19e2af100bfb" - integrity sha512-RzYsvBhzKUmY2YG6LoV+W5PnlnkInq0thh1AzCmewwctAgGN6e9UFon6ZrQQV1CO5G5PeME7MqpB+/vvGg0h4g== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - "@vue/babel-helper-vue-transform-on" "^1.0.2" - camelcase "^6.0.0" - html-tags "^3.1.0" - svg-tags "^1.0.0" - -"@vue/babel-plugin-transform-vue-jsx@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz#646046c652c2f0242727f34519d917b064041ed7" - integrity sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" - html-tags "^2.0.0" - lodash.kebabcase "^4.1.1" - svg-tags "^1.0.0" - -"@vue/babel-preset-app@^4.1.2": - version "4.5.12" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.5.12.tgz#c3a23cf33f6e5ea30536f13c0f9b1fc7e028b1c1" - integrity sha512-8q67ORQ9O0Ms0nlqsXTVhaBefRBaLrzPxOewAZhdcO7onHwcO5/wRdWtHhZgfpCZlhY7NogkU16z3WnorSSkEA== - dependencies: - "@babel/core" "^7.11.0" - "@babel/helper-compilation-targets" "^7.9.6" - "@babel/helper-module-imports" "^7.8.3" - "@babel/plugin-proposal-class-properties" "^7.8.3" - "@babel/plugin-proposal-decorators" "^7.8.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.11.0" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.0" - "@vue/babel-plugin-jsx" "^1.0.3" - "@vue/babel-preset-jsx" "^1.2.4" - babel-plugin-dynamic-import-node "^2.3.3" - core-js "^3.6.5" - core-js-compat "^3.6.5" - semver "^6.1.0" - -"@vue/babel-preset-jsx@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz#92fea79db6f13b01e80d3a0099e2924bdcbe4e87" - integrity sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w== - dependencies: - "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" - "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" - "@vue/babel-sugar-composition-api-inject-h" "^1.2.1" - "@vue/babel-sugar-composition-api-render-instance" "^1.2.4" - "@vue/babel-sugar-functional-vue" "^1.2.2" - "@vue/babel-sugar-inject-h" "^1.2.2" - "@vue/babel-sugar-v-model" "^1.2.3" - "@vue/babel-sugar-v-on" "^1.2.3" - -"@vue/babel-sugar-composition-api-inject-h@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz#05d6e0c432710e37582b2be9a6049b689b6f03eb" - integrity sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-composition-api-render-instance@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz#e4cbc6997c344fac271785ad7a29325c51d68d19" - integrity sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-functional-vue@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz#267a9ac8d787c96edbf03ce3f392c49da9bd2658" - integrity sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-inject-h@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz#d738d3c893367ec8491dcbb669b000919293e3aa" - integrity sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-v-model@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz#fa1f29ba51ebf0aa1a6c35fa66d539bc459a18f2" - integrity sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.2.1" - "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" - camelcase "^5.0.0" - html-tags "^2.0.0" - svg-tags "^1.0.0" - -"@vue/babel-sugar-v-on@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz#342367178586a69f392f04bfba32021d02913ada" - integrity sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" - camelcase "^5.0.0" - -"@vue/compiler-sfc@2.7.9": - version "2.7.9" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.9.tgz#aa31813c94de39f4977e4b924eb261c2199218ad" - integrity sha512-TD2FvT0fPUezw5RVP4tfwTZnKHP0QjeEUb39y7tORvOJQTjbOuHJEk4GPHUPsRaTeQ8rjuKjntyrYcEIx+ODxg== - dependencies: - "@babel/parser" "^7.18.4" - postcss "^8.4.14" - source-map "^0.6.1" - -"@vue/component-compiler-utils@^3.1.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d" - integrity sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.14" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2" - -"@vuepress/core@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/core/-/core-1.8.2.tgz#4f5bafc894691bfea4146294a582a129483daf2a" - integrity sha512-lh9BLC06k9s0wxTuWtCkiNj49fkbW87enp0XSrFZHEoyDGSGndQjZmMMErcHc5Hx7nrW1nzc33sPH1NNtJl0hw== - dependencies: - "@babel/core" "^7.8.4" - "@vue/babel-preset-app" "^4.1.2" - "@vuepress/markdown" "1.8.2" - "@vuepress/markdown-loader" "1.8.2" - "@vuepress/plugin-last-updated" "1.8.2" - "@vuepress/plugin-register-components" "1.8.2" - "@vuepress/shared-utils" "1.8.2" - autoprefixer "^9.5.1" - babel-loader "^8.0.4" - cache-loader "^3.0.0" - chokidar "^2.0.3" - connect-history-api-fallback "^1.5.0" - copy-webpack-plugin "^5.0.2" - core-js "^3.6.4" - cross-spawn "^6.0.5" - css-loader "^2.1.1" - file-loader "^3.0.1" - js-yaml "^3.13.1" - lru-cache "^5.1.1" - mini-css-extract-plugin "0.6.0" - optimize-css-assets-webpack-plugin "^5.0.1" - portfinder "^1.0.13" - postcss-loader "^3.0.0" - postcss-safe-parser "^4.0.1" - toml "^3.0.0" - url-loader "^1.0.1" - vue "^2.6.10" - vue-loader "^15.7.1" - vue-router "^3.4.5" - vue-server-renderer "^2.6.10" - vue-template-compiler "^2.6.10" - vuepress-html-webpack-plugin "^3.2.0" - vuepress-plugin-container "^2.0.2" - webpack "^4.8.1" - webpack-chain "^6.0.0" - webpack-dev-server "^3.5.1" - webpack-merge "^4.1.2" - webpackbar "3.2.0" - -"@vuepress/markdown-loader@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/markdown-loader/-/markdown-loader-1.8.2.tgz#b2a58291a967f2bbe0af6e58f9542f5911879233" - integrity sha512-mWzFXikCUcAN/chpKkqZpRYKdo0312hMv8cBea2hvrJYV6y4ODB066XKvXN8JwOcxuCjxWYJkhWGr+pXq1oTtw== - dependencies: - "@vuepress/markdown" "1.8.2" - loader-utils "^1.1.0" - lru-cache "^5.1.1" - -"@vuepress/markdown@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/markdown/-/markdown-1.8.2.tgz#50ea5a1962591a436b26d1aa2b111df37eb9ea8a" - integrity sha512-zznBHVqW+iBkznF/BO/GY9RFu53khyl0Ey0PnGqvwCJpRLNan6y5EXgYumtjw2GSYn5nDTTALYxtyNBdz64PKg== - dependencies: - "@vuepress/shared-utils" "1.8.2" - markdown-it "^8.4.1" - markdown-it-anchor "^5.0.2" - markdown-it-chain "^1.3.0" - markdown-it-emoji "^1.4.0" - markdown-it-table-of-contents "^0.4.0" - prismjs "^1.13.0" - -"@vuepress/plugin-active-header-links@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.8.2.tgz#0cb9b29c826dd97d35357a9b09c962ef782cb793" - integrity sha512-JmXAQg8D7J8mcKe2Ue3BZ9dOCzJMJXP4Cnkkc/IrqfDg0ET0l96gYWZohCqlvRIWt4f0VPiFAO4FLYrW+hko+g== - dependencies: - lodash.debounce "^4.0.8" - -"@vuepress/plugin-last-updated@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-last-updated/-/plugin-last-updated-1.8.2.tgz#7ce689f8d5050cf0213949bc2e5aa879c09ff4b1" - integrity sha512-pYIRZi52huO9b6HY3JQNPKNERCLzMHejjBRt9ekdnJ1xhLs4MmRvt37BoXjI/qzvXkYtr7nmGgnKThNBVRTZuA== - dependencies: - cross-spawn "^6.0.5" - -"@vuepress/plugin-nprogress@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.8.2.tgz#dc6c082925420c8c59ecb7fc2d4a9401f6d4664a" - integrity sha512-3TOBee2NM3WLr1tdjDTGfrAMggjN+OlEPyKyv8FqThsVkDYhw48O3HwqlThp9KX7UbL3ExxIFBwWRFLC+kYrdw== - dependencies: - nprogress "^0.2.0" - -"@vuepress/plugin-pwa@^1.5.3": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-pwa/-/plugin-pwa-1.8.2.tgz#a82ecaa9f920bfc79f283fb3c224a42540109e19" - integrity sha512-6dQXMI+oqTQtHK22Ba+crhzP5yyAf+V1qVfapgPb8JxLXUasOhr+083VRz5LMYqDzu6CAXM+P8cUgSSBNjifXw== - dependencies: - "@vuepress/shared-utils" "1.8.2" - register-service-worker "^1.7.0" - workbox-build "^4.3.1" - -"@vuepress/plugin-register-components@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-register-components/-/plugin-register-components-1.8.2.tgz#2fb45a68b0a1efb8822670d95c3b231a2d0eb74d" - integrity sha512-6SUq3nHFMEh9qKFnjA8QnrNxj0kLs7+Gspq1OBU8vtu0NQmSvLFZVaMV7pzT/9zN2nO5Pld5qhsUJv1g71MrEA== - dependencies: - "@vuepress/shared-utils" "1.8.2" - -"@vuepress/plugin-search@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-1.8.2.tgz#74b92f663acf6b4560e15dc0442a84c4e874e206" - integrity sha512-JrSJr9o0Kar14lVtZ4wfw39pplxvvMh8vDBD9oW09a+6Zi/4bySPGdcdaqdqGW+OHSiZNvG+6uyfKSBBBqF6PA== - -"@vuepress/shared-utils@1.8.2", "@vuepress/shared-utils@^1.2.0": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/shared-utils/-/shared-utils-1.8.2.tgz#5ec1601f2196aca34ad82eed7c9be2d7948f705b" - integrity sha512-6kGubc7iBDWruEBUU7yR+sQ++SOhMuvKWvWeTZJKRZedthycdzYz7QVpua0FaZSAJm5/dIt8ymU4WQvxTtZgTQ== - dependencies: - chalk "^2.3.2" - escape-html "^1.0.3" - fs-extra "^7.0.1" - globby "^9.2.0" - gray-matter "^4.0.1" - hash-sum "^1.0.2" - semver "^6.0.0" - toml "^3.0.0" - upath "^1.1.0" - -"@vuepress/theme-default@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-1.8.2.tgz#7f474036c752c1f9801b83f68f5c70c092b182b4" - integrity sha512-rE7M1rs3n2xp4a/GrweO8EGwqFn3EA5gnFWdVmVIHyr7C1nix+EqjpPQF1SVWNnIrDdQuCw38PqS+oND1K2vYw== - dependencies: - "@vuepress/plugin-active-header-links" "1.8.2" - "@vuepress/plugin-nprogress" "1.8.2" - "@vuepress/plugin-search" "1.8.2" - docsearch.js "^2.5.2" - lodash "^4.17.15" - stylus "^0.54.8" - stylus-loader "^3.0.2" - vuepress-plugin-container "^2.0.2" - vuepress-plugin-smooth-scroll "^0.0.3" - -"@vuepress/theme-vue@^1.5.3": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@vuepress/theme-vue/-/theme-vue-1.8.2.tgz#7cf253588bed9199fdd051c77bfc2304b18f9c42" - integrity sha512-Eu+8JrJc9ksXLgbtkweFURBPMywQGvOWAFuVcYMQjHLfecI06Zfc1XLeXmKw50gRRQFgsB1kUhqrQOah9gIpwA== - dependencies: - "@vuepress/theme-default" "1.8.2" - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= - dependencies: - acorn "^3.0.4" - -acorn-jsx@^5.0.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= - -acorn@^5.5.0: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^6.1.1, acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= - -adm-zip@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.3.tgz#f5ac6b2507f4418e2691c0feb6f130b4b90d7643" - integrity sha512-zsoTXEwRNCxBzRHLENFLuecCcwzzXiEhWo1r3GP68iwi8Q/hW2RrqgeY1nfJ/AhNQNWnZq/4v0TbfMsUkI+TYw== - -agent-base@5: - version "5.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" - integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== - -agent-base@6, agent-base@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" - integrity sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8= - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -algoliasearch@^3.24.5: - version "3.35.1" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.35.1.tgz#297d15f534a3507cab2f5dfb996019cac7568f0c" - integrity sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ== - dependencies: - agentkeepalive "^2.2.0" - debug "^2.6.9" - envify "^4.0.0" - es6-promise "^4.1.0" - events "^1.1.0" - foreach "^2.0.5" - global "^4.3.2" - inherits "^2.0.1" - isarray "^2.0.1" - load-script "^1.0.0" - object-keys "^1.0.11" - querystring-es3 "^0.2.1" - reduce "^1.0.1" - semver "^5.1.0" - tunnel-agent "^0.6.0" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-union@^1.0.1, array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assertion-error@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" - integrity sha1-x/hUOP3UZrx8oWq5DIFRN5el0js= - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types@^0.13.2: - version "0.13.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" - -async-each@^1.0.0, async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" - integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autocomplete.js@0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.36.0.tgz#94fe775fe64b6cd42e622d076dc7fd26bedd837b" - integrity sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q== - dependencies: - immediate "^3.2.3" - -autoprefixer@^9.5.1: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axios@^0.28.0: - version "0.28.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.28.0.tgz#801a4d991d0404961bccef46800e1170f8278c89" - integrity sha512-Tu7NYoGY4Yoc7I+Npf9HhUMtEEpV7ZiLH9yndTCoNhcpBH0kwcvFbzYN9/u5QKI5A6uefjsNNWaz5olJVYS62Q== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.24.1, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@^10.0.2: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-extract-comments@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" - integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== - dependencies: - babylon "^6.18.0" - -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-loader@^7.1.3: - version "7.1.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" - integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - -babel-loader@^8.0.4: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^1.4.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4" - integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.0" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2" - integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" - core-js-compat "^3.9.1" - -babel-plugin-polyfill-regenerator@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8" - integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= - -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= - -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= - -babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= - -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-class-properties@^6.8.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-env@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" - integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^3.2.6" - invariant "^2.2.2" - semver "^5.3.0" - -babel-preset-flow-vue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow-vue/-/babel-preset-flow-vue-1.0.0.tgz#bd28eb64b53d65f9c47262b32ce6c6033fe70671" - integrity sha1-vSjrZLU9ZfnEcmKzLObGAz/nBnE= - dependencies: - babel-plugin-syntax-flow "^6.8.0" - babel-plugin-transform-class-properties "^6.8.0" - babel-plugin-transform-flow-strip-types "^6.8.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0, babylon@^6.8.4: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@3.7.2, bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - 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.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - 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.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" - integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== - dependencies: - bn.js "^5.2.1" - browserify-rsa "^4.1.0" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.4" - inherits "^2.0.4" - parse-asn1 "^5.1.6" - readable-stream "^3.6.2" - safe-buffer "^5.2.1" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^3.2.6: - version "3.2.8" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" - integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== - dependencies: - caniuse-lite "^1.0.30000844" - electron-to-chromium "^1.3.47" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.5: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -browserstack-local@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.4.8.tgz#07f74a19b324cf2de69ffe65f9c2baa3a2dd9a0e" - integrity sha512-s+mc3gTOJwELdLWi4qFVKtGwMbb5JWsR+JxKlMaJkRJxoZ0gg3WREgPxAN0bm6iU5+S4Bi0sz0oxBRZT8BiNsQ== - dependencies: - https-proxy-agent "^4.0.0" - is-running "^2.1.0" - ps-tree "=1.2.0" - temp-fs "^0.9.9" - -buble@^0.19.8: - version "0.19.8" - resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d" - integrity sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA== - dependencies: - acorn "^6.1.1" - acorn-dynamic-import "^4.0.0" - acorn-jsx "^5.0.1" - chalk "^2.4.2" - magic-string "^0.25.3" - minimist "^1.2.0" - os-homedir "^2.0.0" - regexpu-core "^4.5.4" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-json@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" - integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cac@^6.5.6: - version "6.7.3" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.3.tgz#10410b8611677990cc2e3c8b576d471c1d71b768" - integrity sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg== - -cacache@^12.0.2, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cache-loader@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-3.0.1.tgz#cee6cf4b3cdc7c610905b26bad6c2fc439c821af" - integrity sha512-HzJIvGiGqYsFUrMjAJNDbVZoG7qQA+vy9AIoKs7s9DscNfki0I589mf2w6/tW+kkFH3zyiknoWV5Jdynu6b/zw== - dependencies: - buffer-json "^2.0.0" - find-cache-dir "^2.1.0" - loader-utils "^1.2.3" - mkdirp "^0.5.1" - neo-async "^2.6.1" - schema-utils "^1.0.0" - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: - version "1.0.30001220" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001220.tgz#c080e1c8eefb99f6cc9685da6313840bdbaf4c36" - integrity sha512-pjC2T4DIDyGAKTL4dMvGUQaMUHRmhvPpAgNNTa14jaBWHu+bLQgvpFqElxh9L4829Fdx0PlKiMp3wnYldRtECA== - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chai-nightwatch@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.4.0.tgz#028dc2bf234d9ef1e895cb134027795b1c7c9467" - integrity sha512-1xw74vR02XiHzo4wQfHqme2nqYPIzYnK5s3DMST7UW8FIHDWD7qplg+DTJ5FIPcmWiGYX/Re0CzvOcZQKJm1Uw== - dependencies: - assertion-error "1.0.0" - deep-eql "0.1.3" - -chalk@^1.0.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.2, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - -chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^2.0.3, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -chromedriver@^96.0.0: - version "96.0.0" - resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-96.0.0.tgz#c8473498e4c94950fa168187b112019cce9e5c6c" - integrity sha512-4g6Hn5RHGsbaBmOrJbDlz/hdVPOc22eRsbvoAAMqkZxR2NJCcddHzCw2FAQeW8lX/C7xWVz3nyDsKX3fE9lIIw== - dependencies: - "@testim/chrome-version" "^1.0.7" - axios "^0.21.2" - del "^6.0.0" - extract-zip "^2.0.1" - https-proxy-agent "^5.0.0" - proxy-from-env "^1.1.0" - tcp-port-used "^1.0.1" - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.1.1.tgz#9a32fcefdf7bcdb6f0a7e1c0f8098ec57897b80a" - integrity sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@4.2.x: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@^2.0.0, cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" - integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" - -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@^2.14.1, commander@^2.20.0, commander@^2.9.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -common-tags@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" - integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0, concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -connect-history-api-fallback@^1.5.0, connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -consola@^2.6.0: - version "2.15.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" - integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -conventional-changelog-angular@^5.0.12: - version "5.0.12" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" - integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-atom@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" - integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== - dependencies: - q "^1.5.1" - -conventional-changelog-cli@^2.0.11: - version "2.1.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-2.1.1.tgz#7a11980bc399938e0509d2adf8e7a0e213eb994e" - integrity sha512-xMGQdKJ+4XFDDgfX5aK7UNFduvJMbvF5BB+g0OdVhA3rYdYyhctrIE2Al+WYdZeKTdg9YzMWF2iFPT8MupIwng== - dependencies: - add-stream "^1.0.0" - conventional-changelog "^3.1.24" - lodash "^4.17.15" - meow "^8.0.0" - tempfile "^3.0.0" - -conventional-changelog-codemirror@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" - integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== - dependencies: - q "^1.5.1" - -conventional-changelog-conventionalcommits@^4.5.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.0.tgz#7fc17211dbca160acf24687bd2fdd5fd767750eb" - integrity sha512-sj9tj3z5cnHaSJCYObA9nISf7eq/YjscLPoq6nmew4SiOjxqL2KRpK20fjnjVbpNDjJ2HR3MoVcWKXwbVvzS0A== - dependencies: - compare-func "^2.0.0" - lodash "^4.17.15" - q "^1.5.1" - -conventional-changelog-core@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.2.tgz#f0897df6d53b5d63dec36b9442bd45354f8b3ce5" - integrity sha512-7pDpRUiobQDNkwHyJG7k9f6maPo9tfPzkSWbRq97GGiZqisElhnvUZSvyQH20ogfOjntB5aadvv6NNcKL1sReg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^4.0.18" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - shelljs "^0.8.3" - through2 "^4.0.0" - -conventional-changelog-ember@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" - integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== - dependencies: - q "^1.5.1" - -conventional-changelog-eslint@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" - integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== - dependencies: - q "^1.5.1" - -conventional-changelog-express@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" - integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== - dependencies: - q "^1.5.1" - -conventional-changelog-jquery@^3.0.11: - version "3.0.11" - resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" - integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== - dependencies: - q "^1.5.1" - -conventional-changelog-jshint@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" - integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^4.0.18: - version "4.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" - integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== - dependencies: - compare-func "^2.0.0" - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.6" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-changelog@^3.1.24: - version "3.1.24" - resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.24.tgz#ebd180b0fd1b2e1f0095c4b04fd088698348a464" - integrity sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg== - dependencies: - conventional-changelog-angular "^5.0.12" - conventional-changelog-atom "^2.0.8" - conventional-changelog-codemirror "^2.0.8" - conventional-changelog-conventionalcommits "^4.5.0" - conventional-changelog-core "^4.2.1" - 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" - -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" - integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - trim-off-newlines "^1.0.0" - -convert-source-map@^1.5.1, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-webpack-plugin@^5.0.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2" - integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ== - dependencies: - cacache "^12.0.3" - find-cache-dir "^2.1.0" - glob-parent "^3.1.0" - globby "^7.1.1" - is-glob "^4.0.1" - loader-utils "^1.2.3" - minimatch "^3.0.4" - normalize-path "^3.0.0" - p-limit "^2.2.1" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - webpack-log "^2.0.0" - -core-js-compat@^3.6.5, core-js-compat@^3.9.0, core-js-compat@^3.9.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.11.1.tgz#57a91e9b02d3bb8cf37f82eceaf44a3d646fa614" - integrity sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g== - dependencies: - browserslist "^4.16.5" - semver "7.0.0" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - -core-js@^3.6.4, core-js@^3.6.5: - version "3.11.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.11.1.tgz#f920392bf8ed63a0ec8e4e729857bfa3d121c525" - integrity sha512-k93Isqg7e4txZWMGNYwevZL9MiogLk8pd1PtwrmFmi8IBq4GXqUaVW/a33Llt6amSI36uSjd0GWwc9pTT9ALlQ== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.0.0, cosmiconfig@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-error-class@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.3: - version "7.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.5.tgz#910aac880ff5243da96b728bc6521a5f6c2f2f82" - integrity sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" - integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w== - dependencies: - camelcase "^5.2.0" - icss-utils "^4.1.0" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.14" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^2.0.6" - postcss-modules-scope "^2.1.0" - postcss-modules-values "^2.0.0" - postcss-value-parser "^3.3.0" - schema-utils "^1.0.0" - -css-parse@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" - integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= - dependencies: - css "^2.0.0" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0, css-select@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -css@^2.0.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -csstype@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-uri-to-buffer@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - -debug@*, debug@4, debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-eql@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" - integrity sha1-71WKyrjeJSBs1xOQbXTlaTDrafI= - dependencies: - type-detect "0.1.1" - -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -degenerator@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" - integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== - dependencies: - ast-types "^0.13.2" - escodegen "^1.8.1" - esprima "^4.0.0" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= - dependencies: - repeating "^2.0.0" - -detect-node@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" - integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0, dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -docsearch.js@^2.5.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/docsearch.js/-/docsearch.js-2.6.3.tgz#57cb4600d3b6553c677e7cbbe6a734593e38625d" - integrity sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A== - dependencies: - algoliasearch "^3.24.5" - autocomplete.js "0.36.0" - hogan.js "^3.0.2" - request "^2.87.0" - stack-utils "^1.0.1" - to-factory "^1.0.0" - zepto "^1.2.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^5.1.0, dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" - integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== - -dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - -duplexer2@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^3.1.6: - version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.723: - version "1.3.725" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz#04fc83f9189169aff50f0a00c6b4090b910cba85" - integrity sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw== - -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= - -elliptic@^6.5.3, elliptic@^6.5.4: - version "6.6.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.0.tgz#5919ec723286c1edf28685aa89261d4761afa210" - integrity sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -envify@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" - integrity sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw== - dependencies: - esprima "^4.0.0" - through "~2.3.4" - -envinfo@^7.2.0, envinfo@^7.5.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.2, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^4.1.0, es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@^1.8.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-plugin-flowtype@^2.46.1: - version "2.50.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f" - integrity sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ== - dependencies: - lodash "^4.17.10" - -eslint-plugin-html@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-4.0.6.tgz#724bb9272efb4df007dfee8dfb269ed83577e5b4" - integrity sha512-nj6A9oK+7BKnMm0E7dMRH3r75BfpkXtcVIb3pFC4AcDdBTNyg2NGxHXyFNT1emW4VsR7P2SZvRXXQtUR+kY08w== - dependencies: - htmlparser2 "^3.8.2" - -eslint-plugin-jasmine@^2.10.1: - version "2.10.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-2.10.1.tgz#5733b709e751f4bc40e31e1c16989bd2cdfbec97" - integrity sha1-VzO3CedR9LxA4x4cFpib0s377Jc= - -eslint-plugin-vue-libs@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue-libs/-/eslint-plugin-vue-libs-2.1.0.tgz#e7faf4ae11dad58553f63f907d6642e2d816dcef" - integrity sha512-FFiJJ3apqnXkb3+mIgr4juPKWXL/Bo4jORbW8qYpY78+iRzOLBDcOJGyD6z52h2kO5EqMRfzrfo4Q/28CUPuJw== - dependencies: - eslint-plugin-html "^4.0.1" - -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-visitor-keys@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@^4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - -espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -estree-walker@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" - integrity sha1-va/oCVOD2EFNXcLs9MkXO225QS4= - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-stream@=3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource@^1.0.7: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.1.tgz#4544a35a57d7120fba4fa4c86cb4023b2c09df2f" - integrity sha512-qV5ZC0h7jYIAOhArFJgSfdyz6rALJyb270714o7ZtNnw2WSJ+eexhKtE0O8LYPRsHZHf2osHKZBxGPvm3kPkCA== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -express-urlrewrite@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/express-urlrewrite/-/express-urlrewrite-1.4.0.tgz#985ee022773bac7ed32126f1cf9ec8ee48e1290a" - integrity sha512-PI5h8JuzoweS26vFizwQl6UTF25CAHSggNv0J25Dn/IKZscJHWZzPrI5z2Y2jgOzIaw2qh8l6+/jUcig23Z2SA== - dependencies: - debug "*" - path-to-regexp "^1.0.3" - -express@^4.17.1: - version "4.20.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.20.0.tgz#f1d08e591fcec770c07be4767af8eb9bcfd67c48" - integrity sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" - 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.3" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.10" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - 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.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" - integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== - dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -file-uri-to-path@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" - integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== - -filelist@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - 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" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - -flow-bin@^0.66.0: - version "0.66.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.66.0.tgz#a96dde7015dc3343fd552a7b4963c02be705ca26" - integrity sha1-qW3ecBXcM0P9VSp7SWPAK+cFyiY= - -flow-remove-types-no-whitespace@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/flow-remove-types-no-whitespace/-/flow-remove-types-no-whitespace-1.0.5.tgz#3d297985a0bed5197b8fb0cbe89ec163f8dea9eb" - integrity sha1-PSl5haC+1Rl7j7DL6J7BY/jeqes= - dependencies: - babylon "^6.8.4" - magic-string "^0.16.0" - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -fn-name@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= - -follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.15.0: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.0.0, fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.1, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -ftp@^0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -g-status@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" - integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== - dependencies: - arrify "^1.0.1" - matcher "^1.0.0" - simple-git "^1.85.0" - -geckodriver@^1.20.0: - version "1.22.3" - resolved "https://registry.yarnpkg.com/geckodriver/-/geckodriver-1.22.3.tgz#324b3102944e8928e67bde61ca129afac417dece" - integrity sha512-HJvImEC5m/2J7aIn+AdiZml1yTOSFZAb8h8lmZBSUgGSCPdNTd0/6YxBVBsvzpaTuaDQHbMUr+8ikaFKF+Sj/A== - dependencies: - adm-zip "0.5.3" - bluebird "3.7.2" - got "5.6.0" - https-proxy-agent "5.0.0" - tar "6.0.2" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-pkg-repo@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" - integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= - dependencies: - hosted-git-info "^2.1.4" - meow "^3.3.0" - normalize-package-data "^2.3.0" - parse-github-repo-url "^1.3.0" - through2 "^2.0.0" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-uri@3: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" - integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== - dependencies: - "@tootallnate/once" "1" - data-uri-to-buffer "3" - debug "4" - file-uri-to-path "2" - fs-extra "^8.1.0" - ftp "^0.3.10" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -git-raw-commits@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" - integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - -global@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.0.1, globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - -globby@^11.0.1: - version "11.0.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-5.6.0.tgz#bb1d7ee163b78082bbc8eb836f3f395004ea6fbf" - integrity sha1-ux1+4WO3gIK7yOuDbz85UATqb78= - dependencies: - create-error-class "^3.0.1" - duplexer2 "^0.1.4" - is-plain-obj "^1.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - node-status-codes "^1.0.0" - object-assign "^4.0.1" - parse-json "^2.1.0" - pinkie-promise "^2.0.0" - read-all-stream "^3.0.0" - readable-stream "^2.0.5" - timed-out "^2.0.0" - unzip-response "^1.0.0" - url-parse-lax "^1.0.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -gray-matter@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -handlebars@^4.7.6: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -has@^1.0.0, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -he@1.2.0, he@1.2.x, he@^1.1.0, he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hogan.js@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" - integrity sha1-TNnhq9QpQUbnZ55B14mHMrAse/0= - dependencies: - mkdirp "0.3.0" - nopt "1.0.10" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== - dependencies: - lru-cache "^6.0.0" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= - -html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== - -htmlparser2@^3.10.1, htmlparser2@^3.8.2: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== - -http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -https-proxy-agent@5, https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" - integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== - dependencies: - agent-base "5" - debug "4" - -iconv-lite@0.4.24, iconv-lite@^0.4.17: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^3.3.3, ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.3: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -ini@^1.3.2, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip-regex@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - -ip@^1.1.0, ip@^1.1.5: - version "1.1.9" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" - integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== - dependencies: - call-bind "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887" - integrity sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw== - dependencies: - has "^1.0.3" - -is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" - integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - dependencies: - symbol-observable "^1.1.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-path-inside@^3.0.1, is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-promise@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-regex@^1.0.4, is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-running@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-running/-/is-running-2.1.0.tgz#30a73ff5cc3854e4fc25490809e9f5abf8de09e0" - integrity sha1-MKc/9cw4VOT8JUkICen1q/jeCeA= - -is-stream@^1.0.0, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= - dependencies: - text-extensions "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -is2@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.6.tgz#094f887248b49ba7ce278f8c39f85a70927bb5de" - integrity sha512-+Z62OHOjA6k2sUDOKXoZI3EXv7Fb1K52jpTBLbkfx62bcUeSsrTBLhEquCRDKTx0XE5XbHcG/S2vrtE3lnEDsQ== - dependencies: - deep-is "^0.1.3" - ip-regex "^4.1.0" - is-url "^1.2.4" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" - -jasmine-core@~2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" - integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= - -jasmine@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" - integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= - dependencies: - exit "^0.1.2" - glob "^7.0.6" - jasmine-core "~2.8.0" - -javascript-stringify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" - integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= - -javascript-stringify@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" - integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.13.1, js-yaml@^3.9.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -linkify-it@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" - integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== - dependencies: - uc.micro "^1.0.1" - -lint-staged@^8.2.0: - version "8.2.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f" - integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A== - dependencies: - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.2.0" - debug "^3.1.0" - dedent "^0.7.0" - del "^3.0.0" - execa "^1.0.0" - g-status "^2.0.2" - is-glob "^4.0.0" - is-windows "^1.0.2" - listr "^0.14.2" - listr-update-renderer "^0.5.0" - lodash "^4.17.11" - log-symbols "^2.2.0" - micromatch "^3.1.8" - npm-which "^3.0.1" - p-map "^1.1.1" - path-is-inside "^1.0.2" - pify "^3.0.0" - please-upgrade-node "^3.0.2" - staged-git-files "1.1.2" - string-argv "^0.0.2" - stringify-object "^3.2.2" - yup "^0.27.0" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= - -listr-update-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" - integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^2.3.0" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" - integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== - dependencies: - chalk "^2.4.1" - cli-cursor "^2.1.0" - date-fns "^1.27.2" - figures "^2.0.0" - -listr@^0.14.2: - version "0.14.3" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" - integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - is-observable "^1.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.5.0" - listr-verbose-renderer "^0.5.0" - p-map "^2.0.0" - rxjs "^6.3.3" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-script@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" - integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE= - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - integrity sha1-urFWsqkNPxu9XGU0AzSeXlkz754= - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._baseclone@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - integrity sha1-MDUZv2OT/n5C802LYw73eU41Qrc= - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= - -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== - -lodash.clone@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-3.0.3.tgz#84688c73d32b5a90ca25616963f189252a997043" - integrity sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM= - dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.template@^4.4.0, lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@2.2.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^4.0.1, lru-cache@^4.1.2: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.16.0.tgz#970ebb0da7193301285fb1aa650f39bdd81eb45a" - integrity sha1-lw67DacZMwEoX7GqZQ85vdgetFo= - dependencies: - vlq "^0.2.1" - -magic-string@^0.25.2, magic-string@^0.25.3, magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" - integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -markdown-it-anchor@^5.0.2: - version "5.3.0" - resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz#d549acd64856a8ecd1bea58365ef385effbac744" - integrity sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA== - -markdown-it-chain@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz#ccf6fe86c10266bafb4e547380dfd7f277cc17bc" - integrity sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ== - dependencies: - webpack-chain "^4.9.0" - -markdown-it-container@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-it-container/-/markdown-it-container-2.0.0.tgz#0019b43fd02eefece2f1960a2895fba81a404695" - integrity sha1-ABm0P9Au7+zi8ZYKKJX7qBpARpU= - -markdown-it-emoji@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc" - integrity sha1-m+4OmpkKljupbfaYDE/dsF37Tcw= - -markdown-it-table-of-contents@^0.4.0: - version "0.4.4" - resolved "https://registry.yarnpkg.com/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz#3dc7ce8b8fc17e5981c77cc398d1782319f37fbc" - integrity sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw== - -markdown-it@^8.4.1: - version "8.4.2" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" - integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== - dependencies: - argparse "^1.0.7" - entities "~1.1.1" - linkify-it "^2.0.0" - mdurl "^1.0.1" - uc.micro "^1.0.5" - -matcher@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" - integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== - dependencies: - escape-string-regexp "^1.0.4" - -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - 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.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== - dependencies: - mime-db "1.47.0" - -mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.0.3, mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -mini-css-extract-plugin@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz#a3f13372d6fcde912f3ee4cd039665704801e3b9" - integrity sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw== - dependencies: - loader-utils "^1.1.0" - normalize-url "^2.0.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@3.0.4, minimatch@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minipass@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4= - -mkdirp@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" - integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== - dependencies: - minimist "^1.2.5" - -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.3, mkdirp@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkpath@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" - integrity sha1-67Opd+evHGg65v2hK1Raa6bFhT0= - -mocha@6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912" - integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "2.2.0" - minimatch "3.0.4" - mkdirp "0.5.4" - ms "2.1.1" - node-environment-flags "1.0.5" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanoid@^3.3.4: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - 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.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -netmask@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nightwatch-helpers@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/nightwatch-helpers/-/nightwatch-helpers-1.2.0.tgz#cdefeb7635074a141825a7b6d1b955b6d7810a0f" - integrity sha1-ze/rdjUHShQYJae20blVtteBCg8= - -nightwatch@^1.3.6: - version "1.6.3" - resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-1.6.3.tgz#94936dd1a267d9a16969141ac03ac61c5a26f636" - integrity sha512-otVr+YUmtXcj7aG14GfkuCMUOpuJfSOVvsTxQiSRmO3rSfclOWglE6jaCmyMiHMYNwy/LPp86PXJFD5pzMo/wA== - dependencies: - assertion-error "^1.1.0" - chai-nightwatch "^0.4.0" - ci-info "^2.0.0" - dotenv "7.0.0" - ejs "^3.1.6" - envinfo "^7.5.1" - lodash.clone "3.0.3" - lodash.defaultsdeep "^4.6.1" - lodash.merge "^4.6.2" - minimatch "3.0.4" - minimist "^1.2.5" - mkpath "1.0.0" - mocha "6.2.3" - ora "^4.0.3" - proxy-agent "^4.0.1" - request "^2.88.2" - request-promise "^4.2.5" - semver "^6.3.0" - strip-ansi "^6.0.0" - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-environment-flags@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" - integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-releases@^1.1.71: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== - -node-status-codes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" - integrity sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8= - -nopt@1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699" - integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== - dependencies: - hosted-git-info "^4.0.1" - resolve "^1.20.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -nprogress@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" - integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-inspect@^1.9.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30" - integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.0, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optimize-css-assets-webpack-plugin@^5.0.1: - version "5.0.4" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" - integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== - dependencies: - cssnano "^4.1.10" - last-call-webpack-plugin "^3.0.0" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -ora@^4.0.3: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" - integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== - dependencies: - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-homedir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-2.0.0.tgz#a0c76bb001a8392a503cbd46e7e650b3423a923c" - integrity sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q== - -os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pac-proxy-agent@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" - integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - get-uri "3" - http-proxy-agent "^4.0.1" - https-proxy-agent "5" - pac-resolver "^4.1.0" - raw-body "^2.2.0" - socks-proxy-agent "5" - -pac-resolver@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd" - integrity sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ== - dependencies: - degenerator "^2.2.0" - ip "^1.1.5" - netmask "^2.0.1" - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-github-repo-url@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" - integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.1.0, parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" - integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== - -path-to-regexp@^1.0.3, path-to-regexp@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24" - integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== - dependencies: - isarray "0.0.1" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= - dependencies: - through "~2.3" - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" - integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -please-upgrade-node@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== - -portfinder@^1.0.13, portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" - -postcss-modules-local-by-default@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" - integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - postcss-value-parser "^3.3.1" - -postcss-modules-scope@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" - integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^7.0.6" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-safe-parser@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" - integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== - dependencies: - postcss "^7.0.26" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4" - integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.36" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^8.4.14: - version "8.4.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - -prettier@^1.18.2: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -pretty-bytes@^5.1.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-error@^2.0.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - -pretty-time@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" - integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== - -prismjs@^1.13.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" - integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== - -private@^0.1.6, private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -property-expr@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c" - integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA== - dependencies: - agent-base "^6.0.0" - debug "4" - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^4.1.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^5.0.0" - -proxy-from-env@^1.0.0, proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -ps-tree@=1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" - integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== - dependencies: - event-stream "=3.3.4" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pupa@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -q@^1.1.2, q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0, querystring-es3@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== - dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-all-stream@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" - integrity sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po= - dependencies: - pinkie-promise "^2.0.0" - readable-stream "^2.0.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.0.0, readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -reduce@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce/-/reduce-1.0.2.tgz#0cd680ad3ffe0b060e57a5c68bdfce37168d361b" - integrity sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ== - dependencies: - object-keys "^1.1.0" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.5.4, regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -register-service-worker@^1.7.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.7.2.tgz#6516983e1ef790a98c4225af1216bc80941a4bd2" - integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A== - -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - dependencies: - jsesc "~0.5.0" - -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" - integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== - dependencies: - css-select "^2.0.2" - dom-converter "^0.2" - htmlparser2 "^3.10.1" - lodash "^4.17.20" - strip-ansi "^3.0.0" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise@^4.2.5: - version "4.2.6" - resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.6.tgz#7e7e5b9578630e6f598e3813c0f8eb342a27f0a2" - integrity sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ== - dependencies: - bluebird "^3.5.0" - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.87.0, request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -require-relative@0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" - integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.6: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.2.0, resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -resolve@^1.22.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@~2.5.2: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" - integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ= - dependencies: - glob "^7.0.5" - -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-buble@^0.19.8: - version "0.19.8" - resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz#f9232e2bb62a7573d04f9705c1bd6f02c2a02c6a" - integrity sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw== - dependencies: - buble "^0.19.8" - rollup-pluginutils "^2.3.3" - -rollup-plugin-flow-no-whitespace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-flow-no-whitespace/-/rollup-plugin-flow-no-whitespace-1.0.0.tgz#bd4ba1bcd99ad5b88234d72e6e2dacea9aa02d16" - integrity sha1-vUuhvNma1biCNNcubi2s6pqgLRY= - dependencies: - flow-remove-types-no-whitespace "^1.0.3" - rollup-pluginutils "^1.5.2" - -rollup-plugin-replace@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz#f41ae5372e11e7a217cde349c8b5d5fd115e70e3" - integrity sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA== - dependencies: - magic-string "^0.25.2" - rollup-pluginutils "^2.6.0" - -rollup-pluginutils@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" - integrity sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg= - dependencies: - estree-walker "^0.2.1" - minimatch "^3.0.2" - -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.3, rollup-pluginutils@^2.6.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup-watch@^4.0.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/rollup-watch/-/rollup-watch-4.3.1.tgz#5aa1eaeab787addf368905d102b39d6fc5ce4a8b" - integrity sha512-6yjnIwfjpSrqA8IafyIu7fsEyeImNR4aDjA1bQ7KWeVuiA+Clfsx8+PGQkyABWIQzmauQ//tIJ5wAxLXsXs8qQ== - dependencies: - chokidar "^1.7.0" - require-relative "0.8.7" - rollup-pluginutils "^2.0.1" - -rollup@^2.34.1: - version "2.79.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.2.tgz#f150e4a5db4b121a21a747d762f701e5e9f49090" - integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== - optionalDependencies: - fsevents "~2.3.2" - -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - -rxjs@^6.3.3: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selenium-server@^3.141.59: - version "3.141.59" - resolved "https://registry.yarnpkg.com/selenium-server/-/selenium-server-3.141.59.tgz#cbefdf50aae636ee4c67b819532a8233ce3fd6b0" - integrity sha512-pL7T1YtAqOEXiBbTx0KdZMkE2U7PYucemd7i0nDLcxcR1APXYZlJfNr5hrvL3mZgwXb7AJEZPINzC6mDU3eP5g== - -selfsigned@^1.10.8: - version "1.10.8" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" - integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== - dependencies: - node-forge "^0.10.0" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - 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" - -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== - 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" - -serialize-javascript@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.16.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.0.tgz#2bf4ed49f8af311b519c46f272bf6ac3baf38a92" - integrity sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shelljs@^0.8.3: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.4, side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -simple-git@^1.85.0: - version "1.132.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1" - integrity sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg== - dependencies: - debug "^4.0.1" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== - dependencies: - is-fullwidth-code-point "^2.0.0" - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - -smoothscroll-polyfill@^0.4.3: - version "0.4.4" - resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8" - integrity sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.1" - -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== - dependencies: - faye-websocket "^0.11.3" - uuid "^3.4.0" - websocket-driver "^0.7.4" - -socks-proxy-agent@5, socks-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" - integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== - dependencies: - agent-base "6" - debug "4" - socks "^2.3.3" - -socks@^2.3.3: - version "2.6.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" - integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.1.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== - -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= - dependencies: - through "2" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" - -staged-git-files@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" - integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -std-env@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-2.3.0.tgz#66d4a4a4d5224242ed8e43f5d65cfa9095216eee" - integrity sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw== - dependencies: - ci-info "^3.0.0" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= - dependencies: - duplexer "~0.1.1" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-argv@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.2.2, stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-comments@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" - integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== - dependencies: - babel-extract-comments "^1.0.0" - babel-plugin-transform-object-rest-spread "^6.26.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -stylus-loader@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6" - integrity sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA== - dependencies: - loader-utils "^1.0.2" - lodash.clonedeep "^4.5.0" - when "~3.6.x" - -stylus@^0.54.8: - version "0.54.8" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" - integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== - dependencies: - css-parse "~2.0.0" - debug "~3.1.0" - glob "^7.1.6" - mkdirp "~1.0.4" - safer-buffer "^2.1.2" - sax "~1.2.4" - semver "^6.3.0" - source-map "^0.7.3" - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-observable@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -synchronous-promise@^2.0.6: - version "2.0.15" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" - integrity sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg== - -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tar@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.2.tgz#5df17813468a6264ff14f766886c622b84ae2f39" - integrity sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.0" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tcp-port-used@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.2.tgz#9652b7436eb1f4cfae111c79b558a25769f6faea" - integrity sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA== - dependencies: - debug "4.3.1" - is2 "^2.0.6" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -temp-fs@^0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/temp-fs/-/temp-fs-0.9.9.tgz#8071730437870720e9431532fe2814364f8803d7" - integrity sha1-gHFzBDeHByDpQxUy/igUNk+IA9c= - dependencies: - rimraf "~2.5.2" - -tempfile@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-3.0.0.tgz#5376a3492de7c54150d0cc0612c3f00e2cdaf76c" - integrity sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw== - dependencies: - temp-dir "^2.0.0" - uuid "^3.3.2" - -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2, terser@^4.2.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" - integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@^0.2.0, text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -timed-out@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" - integrity sha1-84sK6B03R9YoAB9B2vxlKs5nHAo= - -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-factory@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-factory/-/to-factory-1.0.0.tgz#8738af8bd97120ad1d4047972ada5563bf9479b1" - integrity sha1-hzivi9lxIK0dQEeXKtpVY7+UebE= - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-newlines@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" - integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== - -trim-off-newlines@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz#8df24847fcb821b0ab27d58ab6efec9f2fe961a1" - integrity sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg== - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" - integrity sha1-C6XsKohWQORw6k6FBZcZANrFiCI= - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^4.7.0: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== - -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== - -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -uglify-js@^3.1.4: - version "3.13.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113" - integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw== - -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzip-response@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" - integrity sha1-uYTwh3/AqJwsdzzB73tbIytbBv4= - -upath@^1.1.0, upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-notifier@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-loader@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" - integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== - dependencies: - loader-utils "^1.1.0" - mime "^2.0.3" - schema-utils "^1.0.0" - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vlq@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vue-hot-reload-api@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" - integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== - -vue-loader@^15.7.1, vue-loader@^15.9.3: - version "15.9.6" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.6.tgz#f4bb9ae20c3a8370af3ecf09b8126d38ffdb6b8b" - integrity sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -vue-router@^3.4.5: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.1.tgz#edf3cf4907952d1e0583e079237220c5ff6eb6c9" - integrity sha512-RRQNLT8Mzr8z7eL4p7BtKvRaTSGdCbTy2+Mm5HTJvLGYSSeG9gDzNasJPP/yOYKLy+/cLG/ftrqq5fvkFwBJEw== - -vue-server-renderer@^2.6.10: - version "2.6.12" - resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.6.12.tgz#a8cb9c49439ef205293cb41c35d0d2b0541653a5" - integrity sha512-3LODaOsnQx7iMFTBLjki8xSyOxhCtbZ+nQie0wWY4iOVeEtTg1a3YQAjd82WvKxrWHHTshjvLb7OXMc2/dYuxw== - dependencies: - chalk "^1.1.3" - hash-sum "^1.0.2" - he "^1.1.0" - lodash.template "^4.5.0" - lodash.uniq "^4.5.0" - resolve "^1.2.0" - serialize-javascript "^3.1.0" - source-map "0.5.6" - -vue-server-renderer@^2.7.0: - version "2.7.9" - resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.7.9.tgz#39f2cace07e8a5c89d0e6a8c678fdd5a0d855639" - integrity sha512-XBANTA8BScw6ls+GT3SnVWM4GKWx6aBQv+m+vNT2RKiTc1AG6Mpoh+xA4n/Uf314ZVofX7L7y6Z3MfcV+/DhSQ== - dependencies: - chalk "^4.1.2" - hash-sum "^2.0.0" - he "^1.2.0" - lodash.template "^4.5.0" - lodash.uniq "^4.5.0" - resolve "^1.22.0" - serialize-javascript "^6.0.0" - source-map "0.5.6" - -vue-style-loader@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" - integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.6.10: - version "2.6.12" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e" - integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg== - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -vue-template-compiler@^2.7.0: - version "2.7.9" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.9.tgz#ffbeb1769ae6af65cd405a6513df6b1e20e33616" - integrity sha512-NPJxt6OjVlzmkixYg0SdIN2Lw/rMryQskObY89uAMcM9flS/HrmLK5LaN1ReBTuhBgnYuagZZEkSS6FESATQUQ== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - -vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vue@^2.6.10: - version "2.6.12" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123" - integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg== - -vue@^2.7.0: - version "2.7.9" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.9.tgz#ac3ccb4a4ac5dd31a8eec4c68a094efe7f83dfbb" - integrity sha512-GeWCvAUkjzD5q4A3vgi8ka5r9bM6g8fmNmx/9VnHDKCaEzBcoVw+7UcQktZHrJ2jhlI+Zv8L57pMCIwM4h4MWg== - dependencies: - "@vue/compiler-sfc" "2.7.9" - csstype "^3.1.0" - -vuepress-html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vuepress-html-webpack-plugin/-/vuepress-html-webpack-plugin-3.2.0.tgz#219be272ad510faa8750d2d4e70fd028bfd1c16e" - integrity sha512-BebAEl1BmWlro3+VyDhIOCY6Gef2MCBllEVAP3NUAtMguiyOwo/dClbwJ167WYmcxHJKLl7b0Chr9H7fpn1d0A== - dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" - util.promisify "1.0.0" - -vuepress-plugin-container@^2.0.2: - version "2.1.5" - resolved "https://registry.yarnpkg.com/vuepress-plugin-container/-/vuepress-plugin-container-2.1.5.tgz#37fff05662fedbd63ffd3a5463b2592c7a7f3133" - integrity sha512-TQrDX/v+WHOihj3jpilVnjXu9RcTm6m8tzljNJwYhxnJUW0WWQ0hFLcDTqTBwgKIFdEiSxVOmYE+bJX/sq46MA== - dependencies: - "@vuepress/shared-utils" "^1.2.0" - markdown-it-container "^2.0.0" - -vuepress-plugin-smooth-scroll@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/vuepress-plugin-smooth-scroll/-/vuepress-plugin-smooth-scroll-0.0.3.tgz#6eff2d4c186cca917cc9f7df2b0af7de7c8c6438" - integrity sha512-qsQkDftLVFLe8BiviIHaLV0Ea38YLZKKonDGsNQy1IE0wllFpFIEldWD8frWZtDFdx6b/O3KDMgVQ0qp5NjJCg== - dependencies: - smoothscroll-polyfill "^0.4.3" - -vuepress-theme-vue@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vuepress-theme-vue/-/vuepress-theme-vue-1.1.1.tgz#9fb14859cf1eecd18b44fed88e7f51e6573b437a" - integrity sha512-ZXe7TgJ9kW1LnLGi7772U4h27wdZqXuU3PlEq1rR7zwuxuszHIjn3zyxdQzbxVCChzaYz4dRMg1X4lVSnPn4vA== - -vuepress@^1.5.3: - version "1.8.2" - resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-1.8.2.tgz#97e8bf979630611fc7b621fc4cc35b798ee5e847" - integrity sha512-BU1lUDwsA3ghf7a9ga4dsf0iTc++Z/l7BR1kUagHWVBHw7HNRgRDfAZBDDQXhllMILVToIxaTifpne9mSi94OA== - dependencies: - "@vuepress/core" "1.8.2" - "@vuepress/theme-default" "1.8.2" - cac "^6.5.6" - envinfo "^7.2.0" - opencollective-postinstall "^2.0.2" - update-notifier "^4.0.0" - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webpack-chain@^4.9.0: - version "4.12.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" - integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^1.6.0" - -webpack-chain@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" - integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^2.0.1" - -webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.5.1: - version "3.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" - integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-merge@^4.1.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.35.2, webpack@^4.8.1: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -webpackbar@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-3.2.0.tgz#bdaad103fad11a4e612500e72aaae98b08ba493f" - integrity sha512-PC4o+1c8gWWileUfwabe0gqptlXUDJd5E0zbpr2xHP1VSOVlZVPBZ8j6NCR8zM5zbKdxPhctHXahgpNK1qFDPw== - dependencies: - ansi-escapes "^4.1.0" - chalk "^2.4.1" - consola "^2.6.0" - figures "^3.0.0" - pretty-time "^1.1.0" - std-env "^2.2.1" - text-table "^0.2.0" - wrap-ansi "^5.1.0" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -when@~3.6.x: - version "3.6.4" - resolved "https://registry.yarnpkg.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" - integrity sha1-RztRfsFZ4rhQBUl6E5g/CVQS404= - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@1.3.1, which@^1.2.10, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -word-wrap@~1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -workbox-background-sync@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950" - integrity sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg== - dependencies: - workbox-core "^4.3.1" - -workbox-broadcast-update@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz#e2c0280b149e3a504983b757606ad041f332c35b" - integrity sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA== - dependencies: - workbox-core "^4.3.1" - -workbox-build@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-4.3.1.tgz#414f70fb4d6de47f6538608b80ec52412d233e64" - integrity sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw== - dependencies: - "@babel/runtime" "^7.3.4" - "@hapi/joi" "^15.0.0" - common-tags "^1.8.0" - fs-extra "^4.0.2" - glob "^7.1.3" - lodash.template "^4.4.0" - pretty-bytes "^5.1.0" - stringify-object "^3.3.0" - strip-comments "^1.0.2" - workbox-background-sync "^4.3.1" - workbox-broadcast-update "^4.3.1" - workbox-cacheable-response "^4.3.1" - workbox-core "^4.3.1" - workbox-expiration "^4.3.1" - workbox-google-analytics "^4.3.1" - workbox-navigation-preload "^4.3.1" - workbox-precaching "^4.3.1" - workbox-range-requests "^4.3.1" - workbox-routing "^4.3.1" - workbox-strategies "^4.3.1" - workbox-streams "^4.3.1" - workbox-sw "^4.3.1" - workbox-window "^4.3.1" - -workbox-cacheable-response@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz#f53e079179c095a3f19e5313b284975c91428c91" - integrity sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw== - dependencies: - workbox-core "^4.3.1" - -workbox-core@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-4.3.1.tgz#005d2c6a06a171437afd6ca2904a5727ecd73be6" - integrity sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg== - -workbox-expiration@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-4.3.1.tgz#d790433562029e56837f341d7f553c4a78ebe921" - integrity sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw== - dependencies: - workbox-core "^4.3.1" - -workbox-google-analytics@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz#9eda0183b103890b5c256e6f4ea15a1f1548519a" - integrity sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg== - dependencies: - workbox-background-sync "^4.3.1" - workbox-core "^4.3.1" - workbox-routing "^4.3.1" - workbox-strategies "^4.3.1" - -workbox-navigation-preload@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz#29c8e4db5843803b34cd96dc155f9ebd9afa453d" - integrity sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw== - dependencies: - workbox-core "^4.3.1" - -workbox-precaching@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-4.3.1.tgz#9fc45ed122d94bbe1f0ea9584ff5940960771cba" - integrity sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ== - dependencies: - workbox-core "^4.3.1" - -workbox-range-requests@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz#f8a470188922145cbf0c09a9a2d5e35645244e74" - integrity sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA== - dependencies: - workbox-core "^4.3.1" - -workbox-routing@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-4.3.1.tgz#a675841af623e0bb0c67ce4ed8e724ac0bed0cda" - integrity sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g== - dependencies: - workbox-core "^4.3.1" - -workbox-strategies@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-4.3.1.tgz#d2be03c4ef214c115e1ab29c9c759c9fe3e9e646" - integrity sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw== - dependencies: - workbox-core "^4.3.1" - -workbox-streams@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-4.3.1.tgz#0b57da70e982572de09c8742dd0cb40a6b7c2cc3" - integrity sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA== - dependencies: - workbox-core "^4.3.1" - -workbox-sw@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-4.3.1.tgz#df69e395c479ef4d14499372bcd84c0f5e246164" - integrity sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w== - -workbox-window@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-4.3.1.tgz#ee6051bf10f06afa5483c9b8dfa0531994ede0f3" - integrity sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg== - dependencies: - workbox-core "^4.3.1" - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" - -ws@^6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" - integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== - dependencies: - async-limiter "~1.0.0" - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.3: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== - -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs@13.3.2, yargs@^13.3.0, yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yorkie@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" - integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== - dependencies: - execa "^0.8.0" - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" - -yup@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" - integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== - dependencies: - "@babel/runtime" "^7.0.0" - fn-name "~2.0.1" - lodash "^4.17.11" - property-expr "^1.5.0" - synchronous-promise "^2.0.6" - toposort "^2.0.2" - -zepto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/zepto/-/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98" - integrity sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g=