pax_global_header00006660000000000000000000000064152717375470014534gustar00rootroot0000000000000052 comment=b84e4180d71d271b9ae1f19ebb668224069b435e i18next-i18next-db698b1/000077500000000000000000000000001527173754700147535ustar00rootroot00000000000000i18next-i18next-db698b1/.babelrc000066400000000000000000000001761527173754700163520ustar00rootroot00000000000000{ "presets": [["@babel/env", { "targets": { "browsers":[ "defaults" ] } }], "@babel/react"] } i18next-i18next-db698b1/.codeclimate.yml000066400000000000000000000015121527173754700200240ustar00rootroot00000000000000engines: duplication: enabled: true config: languages: - ruby - javascript: mass_threshold: 58 - python - php eslint: # Disabled since this engine used a different set of version of # `@typescript/eslint` and `typescript` # # @see https://github.com/i18next/i18next/pull/2098 enabled: false channel: "eslint-8" fixme: enabled: true ratings: paths: - 'src/**/*' exclude_paths: - test/ - coverage/ - dist/ - 'i18next.js' - 'i18next.min.js' - 'index.d.ts' - 'rollup.config.js' - 'vitest.config.mts' - 'vitest.workspace.mts' checks: file-lines: config: threshold: 300 method-lines: config: threshold: 70 complex-logic: config: threshold: 5 nested-control-flow: config: threshold: 5 i18next-i18next-db698b1/.coveralls.yml000066400000000000000000000000561527173754700175470ustar00rootroot00000000000000repo_token: SHBhCq4BLOpxJww3DG6g7dtKcuhG62zcK i18next-i18next-db698b1/.editorconfig000066400000000000000000000002641527173754700174320ustar00rootroot00000000000000# EditorConfig is awesome: http://EditorConfig.org root = true [*.{js,jsx,json}] end_of_line = lf insert_final_newline = true charset = utf-8 indent_style = space indent_size = 2 i18next-i18next-db698b1/.github/000077500000000000000000000000001527173754700163135ustar00rootroot00000000000000i18next-i18next-db698b1/.github/stale.yml000066400000000000000000000014311527173754700201450ustar00rootroot00000000000000 # Number of days of inactivity before an issue becomes stale daysUntilStale: 7 # Number of days of inactivity before a stale issue is closed daysUntilClose: 7 # Issues with these labels will never be considered stale exemptLabels: - "discussion" - "feature request" - "bug" - "breaking change" - "doc" - "issue" - "help wanted" - "good first issue" # Label to use when marking an issue as stale staleLabel: stale # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: falsei18next-i18next-db698b1/.github/workflows/000077500000000000000000000000001527173754700203505ustar00rootroot00000000000000i18next-i18next-db698b1/.github/workflows/CI.yml000066400000000000000000000071061527173754700213720ustar00rootroot00000000000000name: CI on: push: branches: - master pull_request: # types: [opened, synchronize, reopened, ready_for_review] branches: - '**' jobs: codeQuality: name: Check code quality (lint and format) runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' cache: 'npm' - name: Install dependencies run: npm install - name: Format check run: npm run format - name: Lint run: npm run lint build: name: Build runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' cache: 'npm' - name: Install dependencies run: npm install - name: Build run: npm run build test: name: Test on node ${{ matrix.node }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: node: ['24.x', '22.x', '20.x'] os: [ubuntu-latest] # Collect coverage only for node 22 and ubuntu-latest, no need to run it twice # @see https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs#expanding-or-adding-matrix-configurations include: - collectCoverage: true node: '22.x' os: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} cache: 'npm' - name: Install dependencies run: npm install - name: Test if: ${{ !matrix.collectCoverage }} run: npm test - name: Test with coverage if: ${{ matrix.collectCoverage }} run: npm run test:coverage - name: Coveralls if: ${{ matrix.collectCoverage }} uses: coverallsapp/github-action@v2 examples: name: Build example ${{ matrix.example }} runs-on: ubuntu-latest strategy: matrix: example: [typescript, typescript-selector] defaults: run: working-directory: examples/${{ matrix.example }} steps: - uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' - name: Install dependencies run: npm install - name: Build and run run: npm start testTypescript: name: Test typescript runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' cache: 'npm' - name: Install dependencies run: npm install - name: Test run: npm run test:typescript testTypescriptFloor: # the lowest TypeScript of the peer range (`^5 || ^6 || ^7`): the public types, without the test suite's tooling name: Test typescript ${{ matrix.typescript }} (lowest supported) runs-on: ubuntu-latest strategy: matrix: typescript: ['5.0'] steps: - uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' - name: Type check (string keys) run: npx --yes -p typescript@${{ matrix.typescript }} tsc -p test/typescript-floor - name: Type check (selector API) run: npx --yes -p typescript@${{ matrix.typescript }} tsc -p test/typescript-floor/selector i18next-i18next-db698b1/.github/workflows/publish-jsr.yml000066400000000000000000000027711527173754700233440ustar00rootroot00000000000000name: Publish to JSR on: push: tags: - 'v[0-9]+.[0-9]+.[0-9]+' jobs: publish: name: Publish to JSR runs-on: ubuntu-latest if: github.repository == 'i18next/i18next' permissions: contents: read id-token: write steps: - uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' - name: Verify tag matches package.json version run: | TAG_VERSION="${GITHUB_REF_NAME#v}" PKG_VERSION=$(node -p "require('./package.json').version") if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then echo "::error::Tag $TAG_VERSION does not match package.json version $PKG_VERSION" exit 1 fi - name: Generate jsr.json from package.json run: | node -e ' const pkg = require("./package.json"); const jsr = { name: "@i18next/i18next", version: pkg.version, license: pkg.license, exports: "./src/index.js", publish: { include: [ "src/*.js", "index.d.ts", "index.d.mts", "typescript/*.d.ts", "README.md" ] } }; require("fs").writeFileSync("jsr.json", JSON.stringify(jsr, null, 2) + "\n"); ' - name: Publish run: npx --yes jsr@0.14.3 publish i18next-i18next-db698b1/.gitignore000066400000000000000000000012401527173754700167400ustar00rootroot00000000000000# Ignore specific files .settings.xml .monitor .DS_Store *.orig npm-debug.log npm-debug.log.* *.dat .vscode .attest # Ignore various temporary files *~ *.swp # Ignore various Node.js related directories and files node_modules node_modules/**/* coverage/**/* dist/**/* # root copies of dist/umd, made by `npm run build` and published for the unversioned unpkg URLs /i18next.js /i18next.min.js # Ignore IntelliJ based IDEs project files .idea # vitest temp / cache files tsconfig.vitest-temp.json tsconfig.nonEsModuleInterop.vitest-temp.json # Generated in CI by .github/workflows/publish-jsr.yml jsr.json # Secrets & credentials .env .env.* !.env.example *.pem *.keyi18next-i18next-db698b1/.husky/000077500000000000000000000000001527173754700161745ustar00rootroot00000000000000i18next-i18next-db698b1/.husky/pre-commit000066400000000000000000000000201527173754700201630ustar00rootroot00000000000000npx lint-staged i18next-i18next-db698b1/.husky/pre-push000066400000000000000000000000341527173754700176570ustar00rootroot00000000000000npm run format npm run lint i18next-i18next-db698b1/.nvmrc000066400000000000000000000000101527173754700160700ustar00rootroot0000000000000022.14.0 i18next-i18next-db698b1/.prettierignore000066400000000000000000000002151527173754700200140ustar00rootroot00000000000000i18next.js i18next.min.js src/PluralResolver.js test/runtime/locales/en/nonjson.json test/typescript/test.namespace.extra-large.json jsr.jsoni18next-i18next-db698b1/.prettierrc.json000066400000000000000000000003141527173754700201050ustar00rootroot00000000000000{ "$schema": "https://json.schemastore.org/prettierrc.json", "bracketSpacing": true, "bracketSameLine": false, "printWidth": 100, "semi": true, "singleQuote": true, "trailingComma": "all" } i18next-i18next-db698b1/CHANGELOG.md000066400000000000000000004213671527173754700166010ustar00rootroot00000000000000## 26.7.1 - fix: `reloadResources()` retries the bundles that failed to load. The load queue skipped them also when reloading, so a language whose first load failed (a backend or network outage at startup) stayed missing. i18next-http-backend 4.0.8, i18next-chained-backend 5.0.7 and i18next-locize-backend 10.0.5 reload through `reloadResources()` with i18next 26.7, so their `reloadInterval` no longer recovered from such a failure, as their own reload did before. - fix: `reloadResources()` without languages reloads the current languages and every language the backend loaded or tried to load, for the instance and its clones, as the API docs describe ("pass languages and namespaces if you don't want to reload all"). It reloaded only the current languages, so on a server (one clone per request with i18next-http-middleware) a backend's `reloadInterval` never refreshed the languages loaded for requests. It never requests `cimode`. With languages given, nothing changes. ## 26.7.0 The last 26.x minor before v27, which follows in about a week. It adds the APIs v27 builds on, and with `debug: true` it warns wherever a setup relies on something v27 changes. Most of the v27 defaults are existing options, so you can try them now: ```js i18next.init({ debug: true, // prints the warnings below fallbackLng: 'en', // v27: fallbackLng defaults to false, set your source language (no implicit 'dev') returnEmptyString: false, // v27 default: an empty string falls back like a missing key cleanCode: true, // close to v27, which canonicalizes codes without a region ('EN' becomes 'en') }); ``` ```ts declare module 'i18next' { interface CustomTypeOptions { strictInterpolationChecks: true; // v27 default returnEmptyString: false; // v27 default } } ``` The other v27 changes (`/` no longer escaped in values, a logger and post-processors per instance, the key instead of a sentence for an object hit, the dotted-language store calls and `*Escaped` options removed) have no switch; the debug warnings below show where they apply. - feat: with the default `skipOnVariables: true`, a missing interpolation variable is now logged in debug mode, once per string and variable: `missed to pass in variable name for interpolating Hello {{name}}`. The raw `{{name}}` reached the UI without any log line, even with `debug: true`, because the warning only ran with `skipOnVariables: false`. A variable passed as `undefined` and a `missingInterpolationHandler` still log nothing. - feat: `i18next.hydrate(resources, lng)` puts resources rendered on the server into the store and changes to the server's language, each only the first time. It does what react-i18next's `useSSR` did by writing `resourceStore.data`, `options.ns`, `isInitialized`, `initializedStoreOnce` and `initializedLanguageOnce` directly, and sets the same flags, so integrations can switch to it and stay compatible with code that still reads or writes them. On a clone it does nothing, as `useSSR` does: a clone shares its parent's store (one clone per request with i18next-http-middleware). Called before `init()`, it logs a warning and changes nothing. - feat: `services.utils.reloadResources()` lets a backend reload its bundles through i18next (as `i18next.reloadResources()`, with retries and the `loaded` event), instead of calling `backendConnector.read()` and `loaded()` itself as the `reloadInterval` of i18next-http-backend and i18next-chained-backend does. Without languages (no `lng`, no detector, the default `fallbackLng`), `reloadResources()` reloads nothing instead of throwing `Cannot read properties of undefined (reading 'forEach')`; a backend that also reloads `preload` passes its languages. - feat: backends and async language detectors can declare their calling convention with `callbackApi` (an instance or static property). `true`: `read(language, namespace, callback)`, `create(languages, namespace, key, fallbackValue, callback, options)` and `detect(callback)`; `false`: they return a promise or a value, and `create` gets the options as its fifth argument. Without it, i18next keeps guessing from the number of parameters (`Function.length`), which default and rest parameters change: i18next-chained-backend's `create(..., clb = () => {}, opts = {})` has length 4 and never got its options (`isUpdate`), and i18next-http-backend's callback form of `create` has length 5, the length reserved for the callback-less form. Guessing is deprecated: in debug mode an unmarked backend or async detector logs a deprecation warning, once per `init()`. - feat: `isSafeLanguageCode(code)` is exported for plugins that take a language from a request, a URL or storage: letters, digits, `-`, `_`, `@` and `.` (no `..`), at most 128 characters, not a prototype key. It is not a BCP 47 check, so `en_US`, `zh_Hant_TW`, `sr@latin` and `de_DE.UTF-8` pass; markup, slashes and spaces do not. The language detector, i18next-http-middleware and i18next-http-backend each have their own rule today. - feat: `use()` logs a warning in debug mode when a second backend, language detector, `i18nFormat` or formatter replaces the first one; only one of each is used per instance, and losing an ICU setup this way was silent. As `use()` usually runs before `init()`, the warning is printed once `init()` has set up the logger. - feat(types): `ParseKeysWithoutVariables`, the keys `t()` takes without options: their string has no variables, and a plural key is left out when its forms take `count`. A wrapper typed with it, like `(key: ParseKeysWithoutVariables<'common'>) => t(key)`, compiles with `strictInterpolationChecks` without a cast. - feat(types): `defaultVariables` in `CustomTypeOptions` declares the variables `interpolation.defaultVariables` fills in at runtime (`defaultVariables: { appName: string }`). They become optional in the `t()` options, also with `strictInterpolationChecks`; passed, they keep their type. - feat(types): `interpolationFormatSeparator` in `CustomTypeOptions` for a custom `interpolation.formatSeparator`: the types split `{{price, currency}}` at a hard-coded `,`, so with `formatSeparator: ';'` the format was not recognized. The per-call `skipInterpolation` option is typed, and `returnedObjectHandler` may return a value (what it returns is what `t()` returns; it was typed as returning `void`). - feat(types): `SelectorFn`, `ApplyTarget`, `ConstrainTarget` and `GetSource` are exported on purpose, under their current names. react-i18next imports them for `Trans`; they were importable only because every declaration in the type files counts as exported. - fix(types): with `nsSeparator: false` in `CustomTypeOptions`, the key union no longer contains `nsfalsekey`-style keys for the other namespaces, and a key that contains the text `false` (`isfalsey`) is no longer split at it, which typed its `t()` result as `never`. - fix: with clones (i18next-http-middleware makes one per request), `saveMissing` now checks that the namespace is loaded for the instance that misses the key. Each `cloneInstance()` pointed the parent's `services.utils.hasLoadedNamespace` at the new clone, and the backend connector, which all clones share, used that one: a key missing in one request was not saved (`did not save key ... as the namespace ... was not yet loaded`) while a newer request was still loading its language, and the parent's `services.utils` answered for the newest clone. A clone's `services.utils` is now bound to the clone, and the parent keeps its own. A direct `services.backendConnector.saveMissing()` call, like the missing keys route of i18next-http-middleware, still checks the newest clone (follow-up to [#1413](https://github.com/i18next/i18next/issues/1413)). - fix: `dir()` without a language (before `init()`, or with no language resolved) returns `'ltr'` instead of `'rtl'` ([discussion #2135](https://github.com/i18next/i18next/discussions/2135)). - fix: `t()` before `init()` returns an empty string, as typed (with a warning when debug logging is already on); it returned `undefined`. - fix: `off('a b', listener)` removes the listener from both events, as `on('a b', listener)` adds it to both. It looked for an event named `'a b'`, so `once('a b', listener)` never removed its listener and ran it on every event. - deprecate: dotted languages in the resource store calls (`getResource('en.translation.key')`, `addResource('en.translation.key', value)`, `addResourceBundle('en.translation', resources)`) log a deprecation warning in debug mode; they are removed in v27. Pass language, namespace and key as separate arguments. - deprecate: `interpolation.prefixEscaped`, `suffixEscaped`, `nestingPrefixEscaped` and `nestingSuffixEscaped` (inserted into the RegExp unescaped) log a deprecation warning in debug mode and are marked `@deprecated`; they are removed in v27. Pass the literal delimiters as `prefix`, `suffix`, `nestingPrefix` and `nestingSuffix`. - deprecate: `compatibilityJSON` is marked `@deprecated` (it has no effect since v24) and removed from the types in v27. - deprecate: a language code without a region that v27 canonicalizes differently logs a deprecation warning in debug mode: `'EN'` stays `'EN'` today and becomes `'en'` in v27, `'iw'` becomes `'he'`. `cleanCode: true` already lower-cases them. - deprecate: when `fallbackLng` is not set, the first request for the default fallback language `dev` (loading it, or saving missing keys to it) logs a notice in debug mode: v27 defaults to `fallbackLng: false` and no longer requests `dev`. Set `fallbackLng` to your source language, or to `'dev'` to keep the current behavior. - deprecate: in debug mode, a language code that comes from `lng`, `changeLanguage()` or the language detector, is not configured (`supportedLngs`, `fallbackLng`, `preload` or the resources) and fails `isSafeLanguageCode` logs a deprecation warning, once per code: without `supportedLngs`, a detector that returns `">` makes that string `i18next.language`, and apps put it into ``. Nothing changes in 26.7; v27 is planned to refuse such codes and continue as with an unsupported code. Language codes are still not bound to a format. - deprecate: the logger and post-processors are shared by all instances in v26 and per instance from v27 (clones keep their parent's). In debug mode, an instance that runs a post-processor only another instance registered with `use()` logs a deprecation warning (call `use()` on this instance too), and a non-clone `init()` that replaces the logger another instance set with `use()` logs one through that logger. - deprecate: in debug mode, a value with a `/` under the default escape logs that v27 no longer escapes `/` (`$10/month` renders as `$10/month` today; not with `escapeValue: false`, where react-i18next's `Trans` escapes one call itself and decodes the entities afterwards), and an object or array hit without `returnObjects` logs that v27 returns the key instead of the sentence `key '... (en)' returned an object instead of string.`. - chore: the package is published from a `files` whitelist instead of `.npmignore`, which had to mirror every local or secret file by hand. The tarball is unchanged. The root `i18next.js` and `i18next.min.js` (copies of `dist/umd/`, still published for the unversioned unpkg URLs) are built by `npm run build` and no longer tracked in git. - ci: the public types are checked on TypeScript 5.0, the lowest version of the peer range. ## 26.6.0 - feat(types): new `strictInterpolationChecks` type option (default `false`). With `strictInterpolationChecks: true` in `CustomTypeOptions`, `t()` needs its options for a string with `{{variables}}`: for `'Hello {{name}}!'`, `t('greeting')` is a type error and `t('greeting', { name })` compiles. Left out, the variable reaches the UI as the raw `{{name}}` placeholder. This applies to string keys, selectors, selector arrays and `getFixedT`, and with `strictKeyChecks` also to `t(key, defaultValue)`. Without the flag nothing changes. With the flag on, a wrapper that passes on a key type (`(key: ParseKeys<'ns'>) => t(key)`, or a generic `K extends ParseKeys`) no longer compiles without options, as the variables of its string are not known there. `parseInterpolation: 'icu'` and `'mf2'` require their arguments as before. Thanks @Alex0007 ([#2465](https://github.com/i18next/i18next/pull/2465)). - fix(types): an array of selectors with a plural member now requires `count`, as a single selector does since v25.9.0. Without `count`, i18next skips the plural member at runtime, so `t([($) => $.item, ($) => $.plain])` returned the `plain` value while typed as the plural forms. An array of selectors with `defaultValue` now returns the literal values and the default value (`'a' | 'b' | 'x'`) instead of `string`. Thanks @Alex0007 ([#2465](https://github.com/i18next/i18next/pull/2465)). ## 26.5.12 - fix: with `keySeparator: false` or a custom separator like `'::'`, a nested interpolation value that is `0`, `false` or `''` is now inserted. `'You have {{stats.unread}} unread messages'` with `{ stats: { unread: 0 } }` kept the raw `{{stats.unread}}` placeholder (or became `''` with `skipOnVariables: false`), also for formatted values like `{{order.total, currency(USD)}}` and for nested `defaultVariables`: a falsy value was looked up again with the configured separator, which does not split `stats.unread`. The default `'.'` separator was not affected. When the same name exists both nested and as a flat dotted key (`{ a: { b: 0 }, 'a.b': 'flat' }`), the nested `0`, `false` or `''` now wins, as a truthy one already did; a nested `null` still falls back to the flat key. Thanks @nk-batman21 ([#2464](https://github.com/i18next/i18next/pull/2464)). - fix: `cloneInstance({ forkResourceStore: true })` no longer changes the options object it is given. It deleted `forkResourceStore` from it, so reusing the same object for a second clone silently shared the parent's resource store (adding a resource to that clone also changed the parent), and frozen options threw a `TypeError`. Clones without `forkResourceStore` are unchanged. Thanks @edsonsims ([#2463](https://github.com/i18next/i18next/pull/2463)). - perf(types): a selector `t(($) => ...)` (`enableSelector: true` / `'strict'`) no longer filters the whole namespace, and no longer does it again for every distinct `context` value. To drop keys without anything to select, the filtered type looked at the filtered keys of every nested object, down to the leaves, also for the branches the selector does not read. It now decides from the source value. With 10,000 keys in 100 groups, one call went from 3.3M type instantiations (1.7s) to 0.85M (0.8s), and ten calls with ten contexts from 21.7M (8.8s) to 1.05M (0.9s), on TypeScript 6. Selected values are unchanged for context, plural, ordinal, nested and array keys, with three side effects: a type error on a selector now shows the type as `FilterKeysObject<{ ...source keys }, Context>` instead of the filtered object, an object whose values are all `null` or `undefined` (`{ x: null }`) is kept as `{}` instead of being dropped, and a `null` key next to its plural forms (`foo: null`, `foo_one`, `foo_other`) is typed as the plural value instead of `never`. Thanks @GabrielVooDB ([#2462](https://github.com/i18next/i18next/issues/2462)). ## 26.5.11 - fix: a nested `false`, `0` or `''` is now returned when a flat key with the same dotted name also exists. With `{ a: { b: false }, 'a.b': 'flat' }`, `getResource('en', 'translation', 'a.b')` and `t('a.b')` returned `'flat'`: the nested result was checked for truthiness, so these present values fell through to the flat-key lookup. Without such a flat key they were already returned. A nested `null`, which is not a valid lookup by default (`returnNull: false`), still falls back to the flat key. Thanks @lprnmns ([#2461](https://github.com/i18next/i18next/pull/2461)). ## 26.5.10 - fix: when none of the detected languages is in `supportedLngs`, the best match no longer picks a different language whose code only starts with the same letters. The last fuzzy check took any supported code starting with the language part, so with `supportedLngs: ['en', 'fil-PH']` a Finnish user (`fi-FI`) got Filipino instead of the fallback language, and `ha` (Hausa) picked `haw-US` (Hawaiian). Other regions of the same language still match as before (`de-CH` → `de-DE`, `pt-PT` → `pt-BR`, `fil` → `fil-PH`). Compatibility note: a two-letter code no longer matches a supported three-letter code that extends it, like `ar` → `arz-EG`, `sw` → `swh-KE` or `no` → `nob-NO`; list the two-letter code in `supportedLngs` (or map it with `fallbackLng`) if you relied on that. Thanks @Pharex38 ([#2460](https://github.com/i18next/i18next/pull/2460)). ## 26.5.9 - fix: nested lookups no longer resolve to methods inherited from the prototype, like `constructor`, `toString` or `map`. Only the top level was guarded, so `{{constructor}}` was treated as missing, but `{{user.constructor}}` rendered the function source (with a class instance, the full source code of the class), and `{{user.toString}}`, `{{items.map}}` or a class method like `{{user.greet}}` did the same. The same lookup is used for translation keys when `ignoreJSONStructure` is on (the default): a nested key named like an inherited method that is missing in the current language (`t('roles.constructor')` with `roles.constructor` only in the fallback language) returned `function Object() { [native code] }` instead of falling back, and `exists('roles.valueOf')` returned `true`. These keys are now missing, so the fallback language, `missingInterpolationHandler`, `saveMissing` and the missing key handler apply as for any other missing key. Getters defined on a class (`{{user.fullName}}` with `get fullName()`) still work. Nested lookups also no longer walk into the prototype via `__proto__`, so `{{user.__proto__.constructor}}` no longer prints the class source either. Thanks @Pharex38 ([#2459](https://github.com/i18next/i18next/pull/2459)). ## 26.5.8 - fix: arrays returned with `joinArrays` now get the same resolved details as strings. The joined value was extended with `lastKey` in the place of the resolved lookup, so with `postProcessPassResolved` a post processor got no `usedLng`, `usedNS` or `exactUsedKey` (`t('steps', { joinArrays: ' / ' })` reported `undefined/undefined:undefined`). This affected the subliminal post processor used by the locize InContext editor, which could not map a joined array to its key. The nesting recursion guard did not get the parent key either, so arrays that nest each other (`listA: ['a', '$t(listB)']`, `listB: ['b', '$t(listA)']`) threw `Maximum call stack size exceeded`. They now stop at the guard, as strings do. An `i18nFormat` plugin with `handleAsObject` and `parse` also no longer throws `Cannot read properties of undefined (reading 'usedNS')` on joined arrays. Thanks @nk-batman21 ([#2458](https://github.com/i18next/i18next/pull/2458)). ## 26.5.7 - fix: with the default `cacheInBuiltFormats: true`, built-in formats now also work when the `t()` options contain a BigInt or a circular object. The cache key was built with `JSON.stringify` over all options, including the interpolation values, which throws on those, so every built-in format in that call returned the raw value: `t('num', { val: 12345678901234567890n })` with `'Total: {{val, number}}'` returned `'Total: 12345678901234567890'` instead of `'Total: 12,345,678,901,234,567,890'`, and passing an object with a back-reference (like an ORM entity) left all numbers, dates and lists of that call unformatted. When the key cannot be built, the value is now formatted without the cache, as with `cacheInBuiltFormats: false`. This also applies to formatters added with `addCached`. Other calls still use the cache as before. Thanks @nk-batman21 ([#2457](https://github.com/i18next/i18next/pull/2457)). ## 26.5.6 - fix: `cloneInstance({ forkResourceStore: true })` now copies the resources at every level. It copied them only down to the namespace objects, so nested keys and arrays stayed shared with the original instance: `addResource()` with a nested key (`fork.addResource('en', 'translation', 'greeting.hello', 'Hi')`) or a deep `addResourceBundle()` on the fork also changed the original instance and every other fork. Flat keys were already isolated. Forking a large store takes a bit longer: with 300k keys in nested groups, about 11 ms instead of 3 ms per fork. Clones without `forkResourceStore` still share the store as before. Thanks @nk-batman21 ([#2456](https://github.com/i18next/i18next/pull/2456), follow-up to [#2270](https://github.com/i18next/i18next/issues/2270)). ## 26.5.5 - fix: with the default `skipOnVariables: true`, a `{{placeholder}}` inside a value inserted with an unescaped `{{- var}}` now stays literal, as it already did for `{{var}}`. The escape pass ran after the unescaped values were written and scanned them again, so `t('{{- a}}', { a: '{{b}}', b: 'c' })` returned `'c'` instead of `'{{b}}'`. With pre-built HTML that carries user text, like `t('You may contact {{name}} at {{- emailHTML}}.', { name, emailHTML })`, that text could pull another variable of the same `t()` call into the output. Results with `skipOnVariables: false`, and values without placeholders, are unchanged. Compatibility note: a `{{- var}}` value whose placeholders were meant to be filled from the same `t()` call now keeps them literally; `skipOnVariables: false` restores the old behavior. Thanks @nk-batman21 ([#2455](https://github.com/i18next/i18next/pull/2455), reported in [#1595](https://github.com/i18next/i18next/issues/1595#issuecomment-814611747)). ## 26.5.4 - fix: with the default `skipOnVariables: true`, a `{{placeholder}}` inside an interpolated value now stays literal also when the same placeholder appears later in the translation. Each value was written with `String.replace`, which replaces the first copy of the placeholder text, and that could be the copy inside an earlier value: `t('{{name}} has {{count}} items', { name: '{{count}}', count: 5 })` returned `'5 has {{count}} items'` instead of `'{{count}} has 5 items'`. The value is now written at the position of the matched placeholder. Results with `skipOnVariables: false` are unchanged. Thanks @nk-batman21 ([#2454](https://github.com/i18next/i18next/pull/2454), reported in [#1595](https://github.com/i18next/i18next/issues/1595#issuecomment-814609503)). - fix: with `useRawValueToEscape: true`, a non-string value in an unescaped `{{- var}}` placeholder or with `escapeValue: false` no longer throws `val.replace is not a function`; it is converted to a string like any other value. ## 26.5.3 - fix(types): with the selector API, a plural key now requires `count` also when the call passes an explicit `ns`. `t(($) => $.item)` already failed without `count`, but `t(($) => $.item, { ns: 'items' })` compiled, although at runtime it looks up `item` instead of `item_one` / `item_other` and returns the key. It now fails the same way, also with `ordinal: true`, `defaultValue`, an `ns` array, a key prefix and `i18n.t`. Calls with `count`, `context`, `returnObjects: true` and arrays of selectors, as well as return types, are unchanged. Thanks @nyarthan ([#2452](https://github.com/i18next/i18next/pull/2452)). ## 26.5.2 - fix(types): on TypeScript 7, a `t()` call with a missing, misspelled or wrongly typed option now reports that option again (`Property 'album' is missing`, `Type 'string' is not assignable to type 'number'`), as TypeScript 5 and 6 do. TypeScript 7 elaborated the error against the default-value signature instead and ended in `'{ count: 3; albm: "Summer"; }' is not assignable to type 'string'`: on a failed call TypeScript explains the last of the equally matching signatures, and TypeScript 7 sorts the 3-element `[key, defaultValue, options?]` last. It is now written as two signatures, `[key, defaultValue]` and `[key, defaultValue, options]`. This affects the default key checks with i18next `{{name}}` messages as well as `parseInterpolation: 'icu'` and `'mf2'`. Which calls compile, their return types and the error positions are unchanged on TypeScript 5.9, 6 and 7. ## 26.5.1 - perf(types): type-checking `t()` calls against a large namespace is no longer quadratic in the number of keys. TypeScript does not cache `keyof` of an object type, and the types rebuilt the union of all keys of a namespace once per key while building the key union, and again in every `t()` call to look up the return type. Both now use a cached key union, and a literal key is looked up directly instead of being intersected with every key. With 5,000 keys in one namespace and one call per key, the check time went from 14.8s to 1.1s (TypeScript 6); with 1,000 keys from 0.75s to 0.27s. Keys, return types and errors are unchanged. - perf(types): the selector API (`enableSelector: true` / `'strict'`) with `context` is no longer quadratic in the size of an object. To decide which keys a context keeps, the types scanned all keys of the object once for every key, also when TypeScript checks the selector with `context` widened to `string`. With 1,000 keys plus one context variant each, a namespace took 18.7s and failed with "Type instantiation is excessively deep and possibly infinite" (TS2589); 2,500 and more ran out of memory. The context variants of an object are now collected once, in one pass over its keys: 1,000 keys check in 0.69s, 5,000 in 3.1s. Long keys (whole sentences with `keySeparator: false`) work as before. Selected values and errors are unchanged. ## 26.5.0 - feat(types): `parseInterpolation: 'icu'` and `parseInterpolation: 'mf2'` type `t()` options from the message's ICU MessageFormat arguments (i18next-icu) or MessageFormat 2 variables (i18next-mf2), so ICU and MF2 users no longer need `parseInterpolation: false` and lose argument checking. Missing, misspelled and wrongly typed arguments fail, and so does leaving out the options for a message with arguments (`t('greeting')`); that error names the missing arguments. Opt-in, default `true` is unchanged. - ICU: `{name}` takes `string | number`, `{n, number}`, `plural` and `selectordinal` take `number`, `{d, date}` and `{t, time}` take `Date`, `select` takes its case keys or any string (for `other`), and arguments nested in cases are required too. `#` and tags are not arguments, apostrophe quoting is read like intl-messageformat does. - MF2: `{$name}` takes `string | number`, a variable annotated with `:number`, `:integer`, `:currency`, `:percent` or `:unit` (inline or through `.input` / `.local`) takes `number`, `:datetime`, `:date` and `:time` take `Date`, `:string` takes `string`, option and markup variables (`minimumFractionDigits=$digits`, `{#link href=$url}`) are required too, `.local` variables are not arguments, and `|quoted literals|` and `\{` escapes are skipped. - `interpolationFormatTypeMap` overrides a type by ICU format or MF2 function name, e.g. `date: Date | number` or a custom `uppercase: string`. - Applies to `t()`, `getFixedT()`, `i18n.t`, key prefixes, namespaces, the selector API and react-i18next's `Trans` `values`. Messages need literal types, as the resources file from i18next-cli's `types` command has them. - Type-check cost with 1,000 messages and one call each: 1.35s instead of 0.86s with `false` (TypeScript 6), 0.5s instead of 0.26s with TypeScript 7. Messages that no call uses cost nothing. - fix(types): with the default (non-strict) key checks, an options object with a missing or misspelled interpolation variable now reports the missing variable (`Property 'name' is missing`) instead of `'{ nmae: string }' is not assignable to type 'string'` from the default-value overload. ## 26.4.7 - perf: `cloneInstance()` no longer inherits `preload`. `loadResources()` adds every `preload` language to each load, and clones copied `preload` from the parent, so a clone's `init()` and every `changeLanguage()` walked all preloaded languages × all namespaces through `queueLoad()` / `hasResourceBundle()`, although the parent had already loaded them into the shared store. With i18next-http-middleware (one clone + `changeLanguage()` per request), 25 preloaded languages and 20 namespaces, that was most of the per-request CPU: the reproduction from the issue went from ~90 µs to ~10 µs per request, the same as with a single language. A clone now only loads what it uses itself: its `changeLanguage()` no longer waits for parent preload languages that are still loading (the parent's own `init()` still does), and `clone.loadNamespaces()` loads the new namespace for the clone's language and fallbacks instead of every preloaded language. `clone.loadLanguages()` works as before, the parent instance is unchanged, and passing `preload` to `cloneInstance()` keeps the old behavior. Thanks @theMostCuriousHomunculus for the detailed report ([#2451](https://github.com/i18next/i18next/issues/2451)). ## 26.4.6 - fix: a fallback language whose formatted code is already in the hierarchy is no longer added a second time. `toResolveHierarchy()` checked the raw `fallbackLng` value against the list, but the list holds formatted codes, so any fallback written differently from its formatted form slipped through: `lng: 'de-CH'` with `fallbackLng: 'de-ch'` gave `languages` `['de-CH', 'de', 'de-CH']`, and the same happened with `fallbackLng: 'EN'` + `cleanCode`, `lowerCaseLng`, and Intl aliases (`iw-IL` → `he-IL`). Missing keys were looked up in the same language twice. Only exact duplicates are removed; the order is unchanged. Thanks @lprnmns ([#2450](https://github.com/i18next/i18next/pull/2450)). ## 26.4.5 - fix: `hasLoadedNamespace(ns, { lng })` no longer stays `false` forever when the passed in `lng` is loaded under another code, or not at all. It checked the load state of the raw `lng`, but `loadLanguages()` stores a language under its resolved code (`de-ch` → `de-CH`, `de-CH` → `de` with `load: 'languageOnly'`) and skips a `lng` outside `supportedLngs` entirely (only the fallback gets loaded), so that state never got set. react-i18next's `useTranslation(ns, { lng })` then never became ready: with `useSuspense` it kept throwing an already resolved promise and React retried forever (100% CPU, SSR never finished), without it the load effect re-rendered in a loop. It now checks the code the language is actually loaded under, and for a `lng` outside `supportedLngs` only waits for the fallback, which is also what `t()` resolves to. Calls without `lng` and the `precheck` (react-i18next's `bindI18n: 'languageChanging'`) are unchanged ([react-i18next#1934](https://github.com/i18next/react-i18next/issues/1934)). ## 26.4.4 - fix(security): the nesting regexp no longer backtracks exponentially (ReDoS) on an unclosed `$t(`. Its repeated group had overlapping alternatives (`[^()"']+` inside `(?:...)*?`, and inside parentheses `[^()]` also matched quotes), so a string containing `$t(` without a closing `)` made the engine try every way to split the text: about 2x the runtime per extra character, and a ~25 character value hung `t()` for minutes. With the default config this was reachable through any interpolated value (`t('greet', { name: '$t(aaaaaaaaaaaaaaaaaaaaaaaa' })`): escaping does not touch `$`, `t` or `(`, and the `skipOnVariables` check runs the regexp on the interpolated result, so `nest: false` did not help either. Every alternative now starts with a different character (plain char, `"`, `'` or `(`), so there is only one way to match and the cost is linear. Quoted strings and one level of parentheses in nesting options keep working (#2336). The only difference: a lone `"` or `'` inside unquoted parentheses within `$t(...)` is no longer matched. Affects 25.3.3 to 26.4.3. See advisory [GHSA-5jr9-983r-c8x4](https://github.com/i18next/i18next/security/advisories/GHSA-5jr9-983r-c8x4), CVSS 7.5 (`CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H`). Thanks to Anisetti Chaitanya Eshwar Prasad for the responsible disclosure. - fix(security): `nest()` now resolves `$t(...)` in a single pass and no longer nests text that came out of a resolved value. Every nested lookup reset the shared nesting regexp, so the loop started over from the beginning of the string after each match. That had two effects. First, a `$t(...)` inside a variable that the nested lookup deliberately kept literal (default `skipOnVariables: true`) was resolved anyway by the outer loop: with `outer: 'A $t(inner) B'` and `inner: 'Hi {{name}}'`, `t('outer', { name: '$t(secret)' })` rendered the `secret` translation. It now stays `A Hi $t(secret) B`, the same as without the outer nesting; with `skipOnVariables: false` it is still resolved. Second, the cost was quadratic when an unclosed `$t(` preceded many nestings, which matters when an app passes untrusted input as the key itself (`t(userInput)`): 20,000 nestings took ~1.4 s, now ~25 ms. The resolved value is now sliced into the result instead of going through `String.replace`, so `$&`, `` $` ``, `$'` and `$$` stay literal as before (26.4.2). ## 26.4.3 - perf: `ResourceStore.hasLanguageSomeTranslations()` no longer enumerates every key of a large bundle on each call. It ran `Object.keys()` on the whole bundle just to learn whether it had at least one key, and `init()` / `changeLanguage()` reach it three times per instance (once while picking the language, twice via `setResolvedLanguage()`). With large flat bundles and one i18next instance per SSR request reusing the same resources, that showed up as measurable CPU work before any `t()` call. Bundle objects already found non-empty are now remembered in a `WeakSet` shared across instances, so later checks are O(1): 2,000 inits with a 6,800-key bundle went from ~750 ms to ~20 ms, the same as a one-key bundle. Only the non-empty result is cached. No API removes single keys from a bundle, so a non-empty bundle stays non-empty, and empty bundles are re-checked every time, so keys added later (backend loads, `addResource`, `addResourceBundle`, direct or silent changes) count right away. The only edge case: a bundle emptied by hand with `delete` on every key while it is still in the store keeps counting as having translations; use `removeResourceBundle()` for that. Thanks @dmchoi77 for the detailed report ([#2449](https://github.com/i18next/i18next/issues/2449)). ## 26.4.2 - fix: `$&`, `` $` ``, `$'` and `$$` inside a nested value (`$t(key)`) now stay literal. `nest()` handed the resolved value straight to `String.replace` as the replacement argument, so those sequences were read as replacement patterns: `$&` re-inserted the `$t(...)` match, `` $` `` / `$'` inserted the text before / after it, and `$$` collapsed to `$`. Through `t()` the `$&` case was worse than a wrong string: the nested lookup resets the shared nesting regexp, so the re-inserted `$t(...)` was matched again on every pass and `t()` never returned — also under the default `escapeValue: true` when the value arrives via a variable forwarded through nesting options (`$t(key, { "name": "{{name}}" })` with a name containing `$&`). The value is now `$`-escaped at the `String.replace` call, the same guard `interpolate()` already has, and a non-string value returned by a formatter in the nesting chain (`$t(key, myFormat)`) is stringified before that. Nested values are still not HTML-escaped (#854). Thanks @mahirhir ([#2447](https://github.com/i18next/i18next/pull/2447)). ## 26.4.1 - fix(types): the selector-form `keyPrefix` overload of `getFixedT()` is now available under `enableSelector: 'strict'`. Its constraint was gated on `true | 'optimize'` only, so under `'strict'` it collapsed to `never`, the overload dropped out, and the returned `t` silently lost its `keyPrefix` scope (`t(($) => $.deep)` failed with `Property 'deep' does not exist on type '{}'`). The same call already typechecked under `true` and `'optimize'`. Thanks @hovelopin ([#2446](https://github.com/i18next/i18next/pull/2446)). ## 26.4.0 - perf: cache `toResolveHierarchy` results per `(code, fallbackCode)` pair. The hierarchy resolver runs on every `t()` call and calls `Intl.getCanonicalLocales` multiple times, which showed up prominently when profiling render-heavy UIs (e.g. virtualized data grids); with the cache the per-call cost drops from ~886 ns to ~41 ns. The cache is invalidated automatically when `options.fallbackLng` changes (reassignment or in-place array mutation); if you mutate other resolution-relevant options at runtime (`load`, `lowerCaseLng`, `cleanCode`, `nonExplicitSupportedLngs`), call `i18next.services.languageUtils.clearCache()` afterwards. Function-valued `fallbackLng` and per-call array/object `fallbackLng` options are never cached, so dynamic fallbacks keep working as before. Thanks @equaterina ([#2444](https://github.com/i18next/i18next/pull/2444)). - chore: update all devDependencies (Babel stays on 7.x until `@rollup/plugin-babel` supports 8, eslint on 9.x for neostandard). Removed the unused `coveralls` package (CI uses the Coveralls GitHub Action) and replaced `sinon` with `nise` + `vitest.spyOn` in the v1 compatibility tests, which resolves all open `npm audit` findings (0 vulnerabilities) and should close the dependabot alerts on the lockfile. ## 26.3.6 - fix: allow TypeScript 7 in the optional `typescript` peer dependency range (`^5 || ^6 || ^7`). With `typescript@7.0.2` in a project, `npm install` failed with an `ERESOLVE` peer conflict. The published types are TS7-compatible as-is: every `test/typescript` suite produces identical results under 6.0 and 7.0.2. Reported in [react-i18next#1927](https://github.com/i18next/react-i18next/issues/1927), thanks @andikapradanaarif. ## 26.3.5 - fix: `$t()` nesting options blocks that span multiple lines are now parsed. `nest()` decided where the nested key ends by testing `match[1]` with `/{.*}/`, whose dot does not cross line breaks — so a `$t(key, { ... })` options object containing a newline was treated as having no options, mis-split as formatters, and the nested lookup ran without its options (placeholders stayed unresolved). The nesting regexp itself already matches newlines inside `$t(...)`; adding the `s` (dotAll) flag makes multiline options behave like the single-line form. Thanks @spokodev ([#2440](https://github.com/i18next/i18next/pull/2440)). - fix: `getUsedParamsDetails` (the `returnDetails: true` path) no longer mutates the passed `replace` object. It wrote `count` straight onto `options.replace` so the returned `usedParams` would include it — a caller reusing one `replace` object across `t()` calls then carried a stale `count` into later interpolations (e.g. a previous call's `count: 5` rendered instead of the current call's value). The details are now built from a copy; `usedParams` still includes `count`. Thanks @spokodev ([#2441](https://github.com/i18next/i18next/pull/2441)). - fix: with the default `skipOnVariables: true` + `escapeValue: true`, a `{{placeholder}}` carried inside an interpolated value now stays literal even when the value contains escapable characters. The skip logic advanced the regex `lastIndex` by the raw value length, but the escaped text written into the string is longer, so `lastIndex` landed inside the inserted value and a trailing `{{placeholder}}` in it got interpolated — leaking another in-scope variable that should have stayed literal (values without escapable characters were already skipped correctly). The advance now uses the escaped length that is actually written, and the regex-safe `$`-doubling is applied only at the `String.replace` call so it can't distort the length arithmetic. Thanks @spokodev ([#2442](https://github.com/i18next/i18next/pull/2442)). ## 26.3.4 - fix(security): `deepExtend` (used by `addResourceBundle(..., deep, overwrite)`) no longer recurses into inherited properties. It checked key existence with the `in` operator, which walks the prototype chain, so a source key matching an inherited built-in (e.g. `hasOwnProperty`, `toString`) caused recursion into the shared `Object.prototype` function and, with `overwrite: true`, could overwrite e.g. `Object.prototype.hasOwnProperty.call` with a non-callable value — corrupting a shared built-in process-wide (DoS). Existence is now checked with `Object.prototype.hasOwnProperty.call`, so such keys are copied as plain own data instead. This complements the existing `__proto__`/`constructor` guard and is also strictly more correct for an own-property merge. Only affects applications that pass attacker-controlled data with `deep: true` and `overwrite: true`; no standard backend/integration does this. Distinct from CVE-2026-48713 / CVE-2026-48714 (different packages, `setPath` mechanism). See advisory [GHSA-6jcc-5g8w-32mx](https://github.com/i18next/i18next/security/advisories/GHSA-6jcc-5g8w-32mx), CVSS 5.9 (`CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H`). Thanks to zx (Jace) @manus-use for the responsible disclosure. ## 26.3.3 - fix(types): selector `t($ => $.arr, { returnObjects: true, context })` on a JSON array of **heterogeneous** objects now preserves each element's full shape (e.g. `{ transKey1: string; transKey2: string }[]`) instead of collapsing to a union of partial element types. Two type-level causes: (1) `FilterKeys` evaluated the whole array element type at once, so `keyof (A | B)` only saw the keys common to every element — it now distributes over the object union and filters each element independently; (2) when TypeScript merges mismatched array element types it injects phantom optional `undefined` keys (e.g. `transKey1_withContext?: undefined` on elements that don't define it), which the context-detection helpers mistook for real context variants — they now skip keys typed as `undefined`. Also adds a dedicated `context` + `returnObjects: true` selector overload using `const Fn` + `ReturnType`, so `Target` is no longer collapsed to `unknown` via `ApplyTarget`. Resolves Problem 1 of #2398 (Problem 2 was already fixed on master). Thanks @sauravgupta-dotcom ([#2438](https://github.com/i18next/i18next/pull/2438)). Fixes [#2398](https://github.com/i18next/i18next/issues/2398). ## 26.3.2 - fix: chained formatters with a parenthesised option that contains the format separator (e.g. `join(separator: ', ')`) now work at **any** position in the chain, not just first. Previously the comma-in-parens reassembly only repaired `formats[0]`, so `{{v, uppercase, join(separator: ', ')}}` split the `join(...)` option on the inner comma and never rejoined it, producing corrupt output. Replaced the first-position-only repair with a position-independent pass that re-joins fragments until each open paren closes. Thanks @spokodev ([#2437](https://github.com/i18next/i18next/pull/2437)). ## 26.3.1 - fix(types): `t()` with a `keyPrefix` no longer pollutes its return type with sibling keys' values. A regression in 26.3.0 — the `[Res] extends [never]` guards added to `KeysBuilderWithReturnObjects` / `KeysBuilderWithoutReturnObjects` turned the builders into deferred conditional types, so `KeyPrefix` stopped resolving to a literal union and `keyPrefix` inference widened to the whole namespace. Symptom: `useTranslation(ns, { keyPrefix: 'a.b' })` then `t('title')` would resolve to `'.title' | '.title' | ...` instead of just the scoped value. Affected every `react-i18next` user using `keyPrefix`. Restored to the eager 26.2.0 form. The same-namespace conflict handling from #2434 still works via `_DropConflictKeys` at the merge layer (in `options.d.ts`). Thanks @aaronrosenthal ([#2436](https://github.com/i18next/i18next/pull/2436)). ## 26.3.0 - feat(types): introduce `ResourceNamespaceMap` — a separate mergeable augmentation surface for namespace resource types, designed for monorepos where multiple packages each want to contribute their own namespaces. Previously, every package had to coordinate on a single `CustomTypeOptions.resources` declaration (or fall back to typing dependency namespaces as `any`) because `resources` is a single property of an interface and TypeScript reports TS2717 when two declarations of the same property disagree. The new interface merges naturally across `declare module 'i18next'` blocks, so each package can ship its own `i18next.d.ts` independently. Per-property merge handles same-namespace contributions from multiple packages, and same-key/different-literal conflicts are silently dropped to avoid poisoning `t()` overload resolution. Fully backwards-compatible — existing `CustomTypeOptions.resources` augmentations continue to work, and both surfaces can coexist. Scalar options (`defaultNS`, `returnNull`, `enableSelector`, etc.) still belong on `CustomTypeOptions`. Thanks @sh3xu ([#2434](https://github.com/i18next/i18next/pull/2434)). Fixes [#2409](https://github.com/i18next/i18next/issues/2409). ## 26.2.0 - feat(types): new `parseInterpolation` TypeOption (default `true`). When set to `false` in `CustomTypeOptions`, the type-level extractor stops parsing translation strings for `{{variable}}` patterns. Required by `i18next-icu` users — the default extractor mistakes ICU MessageFormat nested-brace plurals like `{count, plural, one {{count} row} other {{count} rows}}` for an interpolation block and demands a phantom variable name. The flag is type-only; runtime interpolation is governed by `InterpolationOptions` and is unaffected. Fixes [i18next-icu#85](https://github.com/i18next/i18next-icu/issues/85). - fix(types): expose `enableSelector` on `InitOptions` so `i18next.init({ enableSelector: 'strict' })` typechecks without a module augmentation. The runtime already reads `opts?.enableSelector` from init options; this lands the matching type declaration next to the other selector-resolution knobs. Accepts `false | true | 'optimize' | 'strict'`. Thanks @Faithfinder ([#2431](https://github.com/i18next/i18next/pull/2431)) ## 26.1.0 - feat: `enableSelector: 'strict'` (TypeOptions + runtime option). Opt-in mode that drops the flattened-primary form from `NsResource` at the type level — every namespace (primary included) is exposed only under its own key on `$`, uniformly across single- and multi-ns hooks. At runtime, a leading selector path segment matching the scope's namespace list is always rewritten as a namespace prefix, including the primary. Eliminates the silent-miss surface area where `t($ => $.primary.foo)` typechecks but doesn't resolve under the default mode (see [#2429](https://github.com/i18next/i18next/issues/2429)). Backward-compatible: default `enableSelector: false | true | 'optimize'` behavior is unchanged. Note: strict mode is incompatible with the [#2405](https://github.com/i18next/i18next/issues/2405) pattern (keys whose names match sibling namespaces) — those users should stay on default mode. ## 26.0.10 - feat: `getFixedT` accepts a fourth optional `fixedOpts` argument carrying `scopeNs` — the full namespace list the bound `t` was created for. The selector API uses `scopeNs` to detect when a path's first segment is a namespace prefix, **without** changing resolution scope. Resolution still uses the bound `ns` (a single primary string in the typical react-i18next setup), so plain `t('key')` lookups stay isolated to the primary namespace exactly as before — only `t($ => $.secondaryNs.foo)` selectors now route correctly under `useTranslation([nsA, nsB])`. Fixes the runtime side of [#2429](https://github.com/i18next/i18next/issues/2429) for the `react-i18next` default-`nsMode` case. The 4th argument is opt-in: existing 3-arg `getFixedT(lng, ns, keyPrefix)` callers see no behavior change. ## 26.0.9 - fix(types): unformatted interpolation values are now typed as `string | number` (was `string`). i18next stringifies values at runtime, so requiring callers to wrap numbers in `String(...)` for plain `{{var}}` placeholders was unnecessary friction — and could mask the real problem when a non-string value was passed alongside multiple interpolation slots (the `t()` overload resolution would fall through to the 3-arg form and report a confusing "not assignable to string" error against the options object). Typed format specifiers like `{{x, number}}`, `{{x, currency}}`, `{{x, datetime}}`, etc. keep their precise types; this only relaxes the no-format default. The `count` variable remains `number`-only ## 26.0.8 - fix(types): restore the pre-v25.10.4 `ExistsFunction` shape so plain arrow functions can again be assigned to `ExistsFunction`-typed variables (TypeScript cannot infer type predicates through multi-overload assignment). Direct `i18next.exists(key)` calls still narrow `key` to `SelectorKey` — the predicate is now declared inline on `i18n.exists`. Custom wrappers that want the narrowing can type themselves as `typeof i18next.exists` [2425](https://github.com/i18next/i18next/issues/2425) ## 26.0.7 - fix: when a plural lookup misses, the `missingKey` debug log now shows the actual plural-resolved key (e.g. `foo.bar_many` for Polish `count: 14`) instead of the base key — making it obvious which plural category was expected and missing [2423](https://github.com/i18next/i18next/issues/2423) - chore: drop `@babel/runtime` runtime dependency. The build no longer generates any `@babel/runtime` imports, so the package is unused by consumers. Rollup now uses `babelHelpers: 'bundled'` so any helpers that are ever needed in the future will be inlined rather than imported externally [2424](https://github.com/i18next/i18next/issues/2424) - chore: stop emitting `dist/esm/i18next.bundled.js`. It was byte-identical to `dist/esm/i18next.js` because no helpers were being imported [2424](https://github.com/i18next/i18next/issues/2424) ## 26.0.6 Security release — all issues found via an internal audit. - security: warn when a translation string combines `escapeValue: false` with interpolated variables inside a `$t(key, { ... "{{var}}" ... })` nesting-options block. In that narrow combination, attacker-controlled string values containing `"` can break out of the JSON options literal and inject additional nesting options (e.g. redirect `lng`/`ns`). The default `escapeValue: true` configuration is unaffected because HTML-escaping neutralises the quote before `JSON.parse`. See the [security note in the Nesting docs](https://www.i18next.com/translation-function/nesting#security-note-interpolated-values-inside-a-nesting-options-block) for the full pattern and mitigations - security: apply `regexEscape` to `unescapePrefix` / `unescapeSuffix` on par with the other interpolation delimiters. Prevents ReDoS (catastrophic-backtracking) when a misconfigured delimiter contains regex metacharacters, and fixes silent breakage of the `{{- var}}` syntax when the delimiter contains characters like `(`, `[`, `.` - security: strip CR/LF/NUL and other C0/C1 control characters from string log arguments to prevent log forging via user-controlled translation keys, language codes, namespaces, or interpolation variable names (CWE-117) - chore: ignore `.env*` and `*.pem`/`*.key` files in `.gitignore` ## 26.0.5 - fix: `cloneInstance().changeLanguage()` no longer fails to update language state when the target language is not yet loaded — a race between `init()`'s deferred `load()` and the user's `changeLanguage()` could overwrite `isLanguageChangingTo`, causing `setLngProps` to be skipped [2422](https://github.com/i18next/i18next/issues/2422) ## 26.0.4 - fix(types): inline formatting options like `{{price, currency(EUR)}}` are now correctly resolved to their base format type (e.g. `number` for `currency`) instead of falling back to `string` [2378](https://github.com/i18next/i18next/issues/2378) ## 26.0.3 - fix(types): `addResourceBundle` now accepts an optional 6th `options` parameter (`{ silent?: boolean; skipCopy?: boolean }`) matching the runtime API [2419](https://github.com/i18next/i18next/issues/2419) ## 26.0.2 - fix(types): `t("key", {} as TOptions)` no longer produces a type error — the context constraint now bypasses strict checking when `context` is `unknown` (e.g. from `TOptions`) [2418](https://github.com/i18next/i18next/issues/2418) ## 26.0.1 - fix: Formatter no longer crashes when `alwaysFormat` is `true` and no format specifier is present (`format` is `undefined`) - fix: Formatter now returns `undefined`/`null` values as-is instead of producing `NaN` when the value is missing ## 26.0.0 **This is a major breaking release:** ### Breaking Changes - **Remove deprecated `initImmediate` option** — the backward-compatibility mapping from `initImmediate` to `initAsync` (introduced in v24) has been removed. Use `initAsync` instead. - **Remove legacy `interpolation.format` function** — the old monolithic format function (`interpolation: { format: (value, format, lng) => ... }`) is no longer supported. The built-in Formatter (or a custom Formatter module via `.use()`) is now always used. Migrate to the [new formatting approach](https://www.i18next.com/translation-function/formatting) using `i18next.services.formatter.add()` or `.addCached()` for custom formatters. - **Remove console support notice** — the console support notice introduced in v25.8.0 has been removed, along with the `showSupportNotice` option and all related internal suppression logic (`globalThis.__i18next_supportNoticeShown`, `I18NEXT_NO_SUPPORT_NOTICE` env var). See our blog post for the [full story](https://www.locize.com/blog/i18next-support-notice). - **Remove `simplifyPluralSuffix` option** — this option was unused by the core PluralResolver (which relies entirely on `Intl.PluralRules`). It only had an effect in the old v1/v2/v3 compatibility layer. The v4 test compatibility layer now defaults to `true` internally. - **Remove deprecated `@babel/polyfill`** from devDependencies. ### Improvements - **Code modernization** across all source files: - Replace `indexOf() > -1` / `indexOf() < 0` with `.includes()` (~40+ occurrences) - Replace `indexOf() === 0` with `.startsWith()` where appropriate - Replace `var` with `const`, `'' + object` with `String(object)`, `.substring()` with `.slice()` - Replace `.apply(observer, [event, ...args])` with direct call `observer(event, ...args)` - Remove unnecessary `.call(this, ...)` in BackendConnector retry logic - Fix `array-callback-return` in LanguageUtils `getBestMatchFromCodes` - Clean up all stale `eslint-disable` comments from source files - **EventEmitter**: add `once()` method for one-time event subscriptions - **Memory leak fix**: move module-level `checkedLoadedFor` cache to Translator instance, preventing cross-instance state leakage - **TypeScript**: fix `BackendModule` generic parameter naming inconsistency between CJS and ESM type definitions - **TypeScript**: add `once()` method to `i18n` and `ResourceStore` type interfaces - **ESLint 9**: migrate from ESLint 8 (airbnb-base) to ESLint 9 flat config with [neostandard](https://github.com/neostandard/neostandard) - **Vitest 4**: upgrade from vitest 3 to vitest 4, migrate workspace files to `test.projects` config ## 25.10.10 - feat: suppress support notice automatically in production environments (`NODE_ENV=production`) ## 25.10.9 - feat(types): export `SelectorParam` helper type — a stable, readable alternative to `Parameters>[0]` for typing selector function props [2414](https://github.com/i18next/i18next/issues/2414) ## 25.10.8 - fix(types): reorder `TFunctionSelector` overloads so `Parameters` resolves to the general selector signature instead of the branded `SelectorKey` type [2412](https://github.com/i18next/i18next/issues/2412) ## 25.10.7 - feat(types): support typescript 6 to address [https://github.com/i18next/react-i18next/issues/1910](https://github.com/i18next/react-i18next/issues/1910) ## 25.10.5 - feat(types): selector functions as `keyPrefix` in `getFixedT` now provide full type-safe key narrowing — the returned `t` function is scoped to the prefix subtree [2367](https://github.com/i18next/i18next/issues/2367) ## 25.10.4 - feat(types): `exists()` is now a type guard that narrows the key to `SelectorKey`, so a validated key can be passed directly to `t()` [2364](https://github.com/i18next/i18next/issues/2364) ## 25.10.3 - check also for I18NEXT_NO_SUPPORT_NOTICE env variable ## 25.10.2 - feat(types): `keyFromSelector` is now type-safe — the selector callback is constrained against your resource definitions, catching invalid keys at compile time. Supports optional `ns` and `keyPrefix` options for non-default namespace/prefix contexts [2364](https://github.com/i18next/i18next/issues/2364) ## 25.10.1 - fix(types): `FilterKeys` now correctly excludes base keys that have context variants when the provided context doesn't match any of them (e.g. key `some` with variant `some_me` is no longer accessible with `context="one"`) ## 25.10.0 - feat(types): `keyFromSelector` now returns a branded `SelectorKey` type that `t()` accepts directly, enabling pre-computed and reusable translation keys [2364](https://github.com/i18next/i18next/issues/2364) - feat: support selector syntax for `keyPrefix` in `getFixedT` and per-call options [2367](https://github.com/i18next/i18next/issues/2367) - feat(types): interpolation values are now automatically typed based on built-in format specifiers — `{{val, number}}` requires `number`, `{{val, datetime}}` requires `Date`, `{{name}}` requires `string`, etc. Custom formatters can be typed via `interpolationFormatTypeMap` in `CustomTypeOptions` [2378](https://github.com/i18next/i18next/issues/2378) - fix(types): `FilterKeys` in selector mode now preserves non-context, non-plural leaf keys when `context` is provided, fixing incorrect type narrowing when combining `returnObjects: true` with `context` [2398](https://github.com/i18next/i18next/issues/2398) ## 25.9.0 - feat(types): selector API now enforces `{ count: number }` when a key resolves to plural forms [2373](https://github.com/i18next/i18next/issues/2373) - fix(types): string unions with invalid members are now correctly detected as type errors when used as context option [2172](https://github.com/i18next/i18next/issues/2172) ## 25.8.20 - fix: `getFixedT()` selector now resolves namespaces against the effective `ns` rather than the global init options [2406](https://github.com/i18next/i18next/issues/2406) ## 25.8.19 - fix: selector API namespace resolution regression for single-string `ns` and primary namespace in array [2405](https://github.com/i18next/i18next/issues/2405). Reverts the broad namespace-prefix rewrite from v25.8.15 and replaces it with a targeted fix that only rewrites paths starting with a secondary namespace in a multi-namespace array, matching the type-level contract of `GetSource` ## 25.8.18 - improve selector api to accept array of selector functions, analogous to array of keys [2404](https://github.com/i18next/i18next/issues/2404) ## 25.8.17 - update deps ## 25.8.16 - fix(types): `on()` method now correctly returns `this` instead of `void`, matching the runtime behavior and enabling proper method chaining in TypeScript ## 25.8.15 - fix: Selector API unable to resolve namespaces [2402](https://github.com/i18next/i18next/issues/2402) ## 25.8.14 - fix: getCleanedCode now replaces all underscores ## 25.8.13 - improve support notice shown logic ## 25.8.12 - improve support notice shown logic ## 25.8.11 - revert fix: compatibility with moduleResolution bundler (issue [2380](https://github.com/i18next/i18next/issues/2380)) [2381](https://github.com/i18next/i18next/pull/2381) ## 25.8.10 - fix(interpolator): guard null matchedDoubleQuotes in nesting option parsing [2395](https://github.com/i18next/i18next/pull/2395) ## 25.8.9 - fix(interpolator): escape nestingOptionsSeparator in nesting option parsing [2394](https://github.com/i18next/i18next/pull/2394) ## 25.8.8 - types(i18n): add missing toJSON() declaration [2393](https://github.com/i18next/i18next/pull/2393) ## 25.8.7 - avoid crash due to ReferenceError without Intl API [2391](https://github.com/i18next/i18next/pull/2391) ## 25.8.6 - ts: address incomplete type definition for `getFixedT()` return value [2318](https://github.com/i18next/i18next/issues/2318) ## 25.8.5 - fix: compatibility with moduleResolution bundler (issue [2380](https://github.com/i18next/i18next/issues/2380)) [2381](https://github.com/i18next/i18next/pull/2381) ## 25.8.4 - fix: crashes when backend in backends array has no name property [2386](https://github.com/i18next/i18next/issues/2386) ## 25.8.3 - ts: document option to suppress the support message [2385](https://github.com/i18next/i18next/issues/2385) ## 25.8.2 - option to suppress the support message [2385](https://github.com/i18next/i18next/issues/2385) ## 25.8.1 - fix(types): Selector API - fix Namespace inference for selector ns option [2384](https://github.com/i18next/i18next/pull/2384) ## 25.8.0 - fix: TFunctionReturn fallback [2360](https://github.com/i18next/i18next/issues/2360) - chore: added a `console.info` support notice regarding the open-source sustainability of the i18next ecosystem. _(Note: This can be easily suppressed via `showSupportNotice: false`, `globalThis`, or environment variables. See [the FAQ](https://www.locize.com/docs/general-questions/why-am-i-seeing-a-support-notice-for-i18next) for details on how to disable it)._ ## 25.7.4 - fix: Interpolation breaks when cloning an instance [2376](https://github.com/i18next/i18next/issues/2376) ## 25.7.3 - type definitions for new transDefaultProps option in react-i18next [react-i18next: #1895](https://github.com/i18next/react-i18next/issues/1895) ## 25.7.2 - fix: Invalid overwrite of default value for overloadTranslationOptionHandler [2374](https://github.com/i18next/i18next/issues/2374). ## 25.7.1 - TS: remove wrong signature [2372](https://github.com/i18next/i18next/issues/2372). ## 25.7.0 - Enhance `cloneInstance` to create a new interpolator if interpolation options are passed in. This will address [2371](https://github.com/i18next/i18next/issues/2371). ## 25.6.3 - chore: dependency updates [2368](https://github.com/i18next/i18next/issues/2366) ## 25.6.2 - types: export `InterpolationMap` ## 25.6.1 - fix: createInstance does not exist on an instance [2366](https://github.com/i18next/i18next/issues/2366) ## 25.6.0 - **feat**: `exists()` method now respects `returnObjects` option - returns `false` when accessing an object key with `returnObjects: false`, enabling detection of object vs string keys [2359](https://github.com/i18next/i18next/issues/2359) **Note**: This is a potential behavior change. If you were previously calling `exists()` with `returnObjects: false` on object keys, those calls will now return `false` instead of `true`. This enables developers to detect whether a key points to an object or string value. ## 25.5.3 - export esm type declaration for keyFromSelector [2356](https://github.com/i18next/i18next/pull/2356) ## 25.5.2 - fix [last change](https://github.com/i18next/i18next/pull/2347) => for cjs there is just 1 default export, no named exports, fixes [2348](https://github.com/i18next/i18next/issues/2348) ## 25.5.1 - export keyFromSelector from index.cjs [2347](https://github.com/i18next/i18next/pull/2347) ## 25.5.0 - export keyFromSelector function for testing purposes [2346](https://github.com/i18next/i18next/pull/2346) ## 25.4.2 - fix: enableSelector: true doesn't work with custom keySeparator [2341](https://github.com/i18next/i18next/issues/2341) ## 25.4.1 - fix: KeyPrefix not working with new selector api [2340](https://github.com/i18next/i18next/issues/2340) ## 25.4.0 - add new selector API to improve TypeScript IDE performance [2322](https://github.com/i18next/i18next/pull/2322) - To enable it, set `enableSelector: true` in your configuration options - With `enableSelector: "optimize"`, i18next can now handle translation dictionaries of any size, without affecting IDE performance or build times - To assist with the migration, we've published the following packages: - [@i18next-selector/codemod](https://github.com/ahrjarrett/i18next-selector/tree/main/packages/codemod) - [@i18next-selector/vite-plugin](https://github.com/ahrjarrett/i18next-selector/tree/main/packages/vite-plugin) ## 25.3.6 - improve fix: Ordinals and non-ordinals don't work together [2337](https://github.com/i18next/i18next/issues/2337) ## 25.3.5 - fix: Ordinals and non-ordinals don't work together [2337](https://github.com/i18next/i18next/issues/2337) ## 25.3.4 - remove unnecessary debug logs ## 25.3.3 - fix: Brackets breaking nesting interpolation [2336](https://github.com/i18next/i18next/issues/2336) ## 25.3.2 - fix `dir()` for non-Intl language codes [2330](https://github.com/i18next/i18next/issues/2330) ## 25.3.1 - warn if legacy `interpolation.format` function is still used ## 25.3.0 - feat: support formatting function with plural and interpolation [2325](https://github.com/i18next/i18next/pull/2325) - fix `dir()` for Latn language codes [2324](https://github.com/i18next/i18next/issues/2324) ## 25.2.1 - streamline `fallbackLng` option of t call with the init options [2312](https://github.com/i18next/i18next/issues/2312) ## 25.2.0 - introduce `cacheInBuiltFormats` option to address [2227](https://github.com/i18next/i18next/issues/2227) ## 25.1.3 - Ensure nsSeparator is respected when appendNamespaceToMissingKey is true [2311](https://github.com/i18next/i18next/pull/2311), fixes [2310](https://github.com/i18next/i18next/issues/2310) ## 25.1.2 - do not mutate t options, fixes [2307](https://github.com/i18next/i18next/issues/2307) ## 25.1.1 - fix options type for `parseMissingKeyHandler` ## 25.1.0 - feat: `parseMissingKeyHandler` now takes options as parameter like in missingKeyHandler [2304](https://github.com/i18next/i18next/issues/2304) ## 25.0.2 - fix `cloneInstance` with `forkResourceStore: true` addresses [2303](https://github.com/i18next/i18next/issues/2303) ## 25.0.1 - optimize `changeLanguage` to correctly use `getBestMatchFromCodes` (string or array) [2299](https://github.com/i18next/i18next/issues/2299) and improve `resolvedLanguage` set for non canonical codes ## 25.0.0 **This is a potentially breaking release:** - fix multiple changeLanguage call that may have result in wrong order in previous versions [1605](https://github.com/i18next/i18next/issues/1605) [2298](https://github.com/i18next/i18next/pull/2298) - adapt `changeLanguage` to always (string or array) use `getBestMatchFromCodes` [2299](https://github.com/i18next/i18next/issues/2299) - `getBestMatchFromCodes` now tries to fallback to language code with same script [2299](https://github.com/i18next/i18next/issues/2299) ## 24.2.3 - Upgrade @babel/runtime package to version v7.26.10 [2293](https://github.com/i18next/i18next/issues/2293) ## 24.2.2 - fix: Interpolation fails with arrays (TypeError) and doesn't work with objects in defaultValue [1829](https://github.com/i18next/react-i18next/issues/1829) ## 24.2.1 - Standardize null/undefined checks across codebase [2275](https://github.com/i18next/i18next/pull/2275) - fix(typescript): make TFunction augmentable again [2279](https://github.com/i18next/i18next/pull/2279), fixes [2278](https://github.com/i18next/i18next/issues/2278) ## 24.2.0 - feat(typescript): Add strictKeyChecks option to enforce checking key existence when defaultValue is used [2274](https://github.com/i18next/i18next/pull/2274), fixes [2043](https://github.com/i18next/i18next/issues/2043) ## 24.1.2 - optimize fix: Bug Report: Unsafe Behavior in i18n.t Function Leading to Potential Code Execution [2273](https://github.com/i18next/i18next/issues/2273) ## 24.1.1 - fix: Bug Report: Unsafe Behavior in i18n.t Function Leading to Potential Code Execution [2273](https://github.com/i18next/i18next/issues/2273) ## 24.1.0 - try to address [2270](https://github.com/i18next/i18next/issues/2270) by cloning the store data [2271](https://github.com/i18next/i18next/pull/2271) ## 24.0.5 - remove extra log for [2268](https://github.com/i18next/i18next/pull/2268) ## 24.0.4 - simplify fix: incorrect locale detected [2268](https://github.com/i18next/i18next/pull/2268) ## 24.0.3 - fix: incorrect locale detected [2268](https://github.com/i18next/i18next/pull/2268) - fix: Intl.getCanonicalLocales throws with custom regions [2267](https://github.com/i18next/i18next/issues/2267) ## 24.0.2 - if no Intl api, log error and use dummy rule ## 24.0.1 - early return and log error, if no Intl api ## 24.0.0 **This is a major breaking release:** - remove support for older environments - remove old i18next JSON formats - To convert your existing v3 translations to the v4 format, have a look at [i18next-v4-format-converter](https://github.com/i18next/i18next-v4-format-converter) or this [web tool](https://i18next.github.io/i18next-v4-format-converter-web/). - remove support for compatibility to v1 API - Intl API is mandatory now and will not fallback anymore - possible compatibility layer for older formats: `test/compatibility/v4/v4Compatibility.js` - rename `initImmediate` to `initAsync` - fallback to `dev` language if plural rule not found - Dropped support for Node.js < v14 - remove TypeScript v4 support. TypeScript v5 is now an optional peer dependency - addresses - [2244](https://github.com/i18next/i18next/pull/2244) - [2184](https://github.com/i18next/i18next/pull/2184) - [2213](https://github.com/i18next/i18next/issues/2213) - [2206](https://github.com/i18next/i18next/pull/2206) - [2208](https://github.com/i18next/i18next/issues/2208) - [2148](https://github.com/i18next/i18next/issues/2148) - [2254](https://github.com/i18next/i18next/issues/2254) ➡� check out the [migration guide](https://www.i18next.com/misc/migration-guide#v23.x.x-to-v24.0.0) ## 23.16.8 - fix(plural): Create cache entry for PluralRules created as part of the fallback flow [2256](https://github.com/i18next/i18next/pull/2256) ## 23.16.7 - if plural rule is not found, try to search with language only code [2252](https://github.com/i18next/i18next/issues/2252) ## 23.16.6 - fix: Small typo in the type definitions [2250](https://github.com/i18next/i18next/pull/2250) ## 23.16.5 - fix extractFromKey for use cases like [this](https://github.com/i18next/react-i18next/issues/1810) ## 23.16.4 - revert formatter change [2247](https://github.com/i18next/i18next/pull/2247) because of caching not working anymore ## 23.16.3 - fix utils imports for Deno ## 23.16.2 - perf(size): Adds a isString utility [2248](https://github.com/i18next/i18next/pull/2248) ## 23.16.1 - perf: Optimize size of Formatter [2247](https://github.com/i18next/i18next/pull/2247) ## 23.16.0 - use `Intl.getCanonicalLocales` function if available to format language code, like suggested in [2244](https://github.com/i18next/i18next/pull/2244) ## 23.15.2 - fix(types): make context related keys detection stricter [2243](https://github.com/i18next/i18next/pull/2243) fixes [2242](https://github.com/i18next/i18next/issues/2242) ## 23.15.1 - types(TFunction): make return not inferrable and use defaultValue as return when provided [2234](https://github.com/i18next/i18next/pull/2234) ## 23.15.0 - support unescaped variables in TypeScript [2233](https://github.com/i18next/i18next/pull/2233) ## 23.14.0 - If backend errors with retry flag, set internal state to 0, so reloadingResources should work [147](https://github.com/i18next/i18next-http-backend/issues/147) ## 23.13.0 - Cache output of getRule to optimize performance [2226](https://github.com/i18next/i18next/pull/2226) ## 23.12.7 - revert last optimization to address [2227](https://github.com/i18next/i18next/issues/2227) ## 23.12.6 - remove console.log statement [2227](https://github.com/i18next/i18next/issues/2227) ## 23.12.5 - try to optimize last fix for [2227](https://github.com/i18next/i18next/issues/2227) ## 23.12.4 - try to address [2227](https://github.com/i18next/i18next/issues/2227) without the removal of cached formatter for in-built formatters ## 23.12.3 - fix: Using a comma in a formatter parameter [2225](https://github.com/i18next/i18next/issues/2225) ## 23.12.2 - fix: Nested translation resolution between languages uses the fallback language for nested translations [2216](https://github.com/i18next/i18next/issues/2216) by preserving issue fix "`lng` is undefined when formatter used in `$t( )`" [1938](https://github.com/i18next/i18next/issues/1938) ## 23.12.1 - Use explicit imports for utils [2212](https://github.com/i18next/i18next/pull/2212) ## 23.12.0 - feat: Add posibility to override keyPrefix for certain translation. [2211](https://github.com/i18next/i18next/issues/2211) ## 23.11.5 - perf: use Array.isArray() [2193](https://github.com/i18next/i18next/pull/2193) - perf: trim keys once [2194](https://github.com/i18next/i18next/pull/2194) ## 23.11.4 - perf(interpolator): use object deconstruction [2181](https://github.com/i18next/i18next/pull/2181) ## 23.11.3 - fix: Unsupported language is automatically added to preload option [2178](https://github.com/i18next/i18next/issues/2178) ## 23.11.2 - allow defaultValue in nested translation [2174](https://github.com/i18next/i18next/issues/2174) ## 23.11.1 - types: remove const from ParseKeys Context type parameter and disable `skipLibCheck` [2169](https://github.com/i18next/i18next/pull/2169) ## 23.11.0 - Fix typing performance regression [2166](https://github.com/i18next/i18next/pull/2166) ## 23.10.1 - optimize getBestMatchFromCodes for https://github.com/i18next/i18next-browser-languageDetector/issues/281 ## 23.10.0 - Add 'isInitializing' property so we're able to detect init() was already called [2141](https://github.com/i18next/i18next/issues/2141) ## 23.9.0 - types: support nested keys in `InterpolationMap` [2140](https://github.com/i18next/i18next/pull/2140) fixes [2014](https://github.com/i18next/i18next/issues/2014) ## 23.8.3 - prevent resource mutation when using `addResourceBundle` [2081](https://github.com/i18next/i18next/issues/2081) ## 23.8.2 - optimize `addResources` to address [2130](https://github.com/i18next/i18next/issues/2130) ## 23.8.1 - types: support stricter typechecking for returnEmptyString and returnNull [2129](https://github.com/i18next/i18next/pull/2129) ## 23.8.0 - improve performance by reducing array slices and RegExp recreation [2128](https://github.com/i18next/i18next/pull/2128) ## 23.7.20 - optimize: consistent \_zero special handling also for defaultValue_zero [2124](https://github.com/i18next/i18next/issues/2124) - intl plural rule for dev is now en (consistent with v3 compatibility) ## 23.7.19 - fix: consistent \_zero special handling also for defaultValue_zero [2124](https://github.com/i18next/i18next/issues/2124) ## 23.7.18 - types: support readonly defaultNS [2123](https://github.com/i18next/i18next/pull/2123) ## 23.7.17 - types: fix support for defaultNS as array (fixes [2118](https://github.com/i18next/i18next/issues/2118)) [2121](https://github.com/i18next/i18next/pull/2121) - types: fix typo in `CustomInstanceExtensions` [2122](https://github.com/i18next/i18next/pull/2122) ## 23.7.16 - fix: Use Typescript 5 types with Typescript 5+ [2108](https://github.com/i18next/i18next/pull/2108) - Hint: If you're using TypeScript 4 and you navigate to the type definitions in your code editor, it might be you will see the TypeScript 5 types, but the TS compiler should use the correct types. ## 23.7.15 - types: simplifies types for array access and fixes [2103](https://github.com/i18next/i18next/issues/2103) ## 23.7.14 - types: fix types for array access ## 23.7.13 - types: optimise ParseTReturn [2095](https://github.com/i18next/i18next/pull/2095) ## 23.7.12 - types: fix for older ts version (context validation only for TS 5) ## 23.7.11 - types: fix for older ts versions [2090](https://github.com/i18next/i18next/issues/2090) ## 23.7.10 - types: initializedStoreOnce and initializedLanguageOnce [2089](https://github.com/i18next/i18next/pull/2089) ## 23.7.9 - types: fix FormatFunction should allow any value inside options parameter ## 23.7.8 - prevent cosmetic SyntaxError because of non catched error variable ## 23.7.7 - optimize TypeScript V4 export ## 23.7.6 - types: CustomInstanceExtenstions ## 23.7.5 - fix types export for TypeScript v4 in combination with react-i18next ## 23.7.4 - fix for TypeScript v4 in combination with react-i18next ## 23.7.3 - fix: consider importing '\*.js' ## 23.7.2 - types: optimize mts ## 23.7.1 - fix some mjs typings ## 23.7.0 - fix: separate cjs and mjs typings [2010](https://github.com/i18next/i18next/issues/2010) - fix: consider importing './typescript/t.js' [2048](https://github.com/i18next/i18next/issues/2048) ## 23.6.0 - add interpolation data to response if returnDetails is true [2053](https://github.com/i18next/i18next/pull/2053) ## 23.5.1 - types: use unknown to better infer types on nested t functions also for older typescript version [2032](https://github.com/i18next/i18next/issues/2032) ## 23.5.0 - types: use unknown to better infer types on nested t functions [2018](https://github.com/i18next/i18next/pull/2018) ## 23.4.9 - fix: preload languages also on cimode, if configured also as fallbackLng ## 23.4.8 - fix: preload languages also on cimode, if configured ## 23.4.7 - preload languages also on cimode, if configured ## 23.4.6 - pass correct language for custom i18nFormat ## 23.4.5 - types: named export for FlatNamespace ## 23.4.4 - types: add customisation of contextSeparator also on v4 t types [2019](https://github.com/i18next/i18next/pull/2019) ## 23.4.3 - types: add customisation of contextSeparator [2017](https://github.com/i18next/i18next/pull/2017) ## 23.4.2 - types: export some types for next-i18next ## 23.4.1 - types: fix typescript imports ## 23.4.0 - types: Support const modifier for options and key [2007](https://github.com/i18next/i18next/pull/2007) - types: Support context [2006](https://github.com/i18next/i18next/pull/2006) ## 23.3.0 - types: Fix performance issue that affects flat object with multiple (thousands) keys [2004](https://github.com/i18next/i18next/pull/2004) ## 23.2.11 - types: Fix $TFunctionBrand [1997](https://github.com/i18next/i18next/pull/1997) ## 23.2.10 - types: emit function can have additional arguments [1993](https://github.com/i18next/i18next/issues/1993) ## 23.2.9 - types: Add brand to TFunction type so different namespaces' TFunctions are not treated as compatible [1994](https://github.com/i18next/i18next/pull/1994) ## 23.2.8 - types for hasLoadedNamespace ## 23.2.7 - fix utils import (for Deno) ## 23.2.6 - Re-allow unknown keys, when a defaultValue is provided [1867](https://github.com/i18next/i18next/issues/1867) ## 23.2.5 - Clean language code before passing to formatters [1988](https://github.com/i18next/i18next/pull/1988) ## 23.2.4 - types: Constrain return type when returnObjects is true [1985](https://github.com/i18next/i18next/pull/1985) ## 23.2.3 - types: Optimize logic for fallback ns [1984](https://github.com/i18next/i18next/pull/1984) ## 23.2.2 - types: try to fix fallbackNS type handling also for older TS version [1981](https://github.com/i18next/i18next/issues/1981) ## 23.2.1 - types: fix fallbackNS type handling [1979](https://github.com/i18next/i18next/pull/1979) ## 23.2.0 - types: add fallbackNS type handling [1975](https://github.com/i18next/i18next/pull/1975) ## 23.1.0 - cloneInstance: introduce `forkResourceStore` [1974](https://github.com/i18next/i18next/issues/1974) - types: default argument values for ParseKeys type ## 23.0.2 - refactor: static createInstance for wider browser support [1973](https://github.com/i18next/i18next/pull/1973) ## 23.0.1 - types: export ParseKeys ## 23.0.0 **This is a major breaking release:** - redesigned TypeScript types [1911](https://github.com/i18next/i18next/pull/1911) - removed `setDebug` function in the logger: [1954](https://github.com/i18next/i18next/issues/1954#issuecomment-1537117407) - changed `returnNull` default to `false` [1885](https://github.com/i18next/i18next/pull/1885) - drop support for old browsers and Node.js < v12 [1948](https://github.com/i18next/i18next/issues/1948) - ordinal plural keys are now prefixed with `_ordinal` to help translators (non-breaking, because of fallback) [1945](https://github.com/i18next/i18next/pull/1945) ➡� check out the [migration guide](https://www.i18next.com/misc/migration-guide#v22.x.x-to-v23.0.0) ## 22.5.1 - ResourceStore addResource: offer possibility to pass keySeparator via options [1968](https://github.com/i18next/i18next/issues/1968) ## 22.5.0 - extend hasLoadedNamespace function options to pass optional lng to optimize server side usage of react-i18next ## 22.4.15 - fix: function t() passed options alteration [1947](https://github.com/i18next/i18next/issues/1947) ## 22.4.14 - fix: pass lng to format function used in nesting [1938](https://github.com/i18next/i18next/issues/1938) ## 22.4.13 - fix: deepFind as fallback for interpolation [1930](https://github.com/i18next/i18next/issues/1930) ## 22.4.12 - fix: getBestMatchFromCodes when dev is a supported lng [1927](https://github.com/i18next/i18next/issues/1927) ## 22.4.11 - types: fix postProcessor key argument type, fixes [1919](https://github.com/i18next/i18next/issues/1919) ## 22.4.10 - format options are optional, fixes [1913](https://github.com/i18next/i18next/issues/1913) ## 22.4.9 - fix: getFixedT with keyPrefix and fallback keys usage [1604](https://github.com/i18next/react-i18next/issues/1604) ## 22.4.8 - fix: nested interpolation with data model "replace" ## 22.4.7 - fix: interpolation with data model "replace" ## 22.4.6 - types: missing dir function export for typescript ## 22.4.5 - types: allow als general options as second argument for t function ## 22.4.4 - types: fix some strange t function overloads fixes [1882](https://github.com/i18next/i18next/issues/1882) ## 22.4.3 - types: t function overloads fix (open issue is still calling t with optional options argument) ## 22.4.2 - types: t function overloads for call with ns option in combination with objects ## 22.4.1 - types: more t function overloads for call with options argument but without ns value ## 22.4.0 - types: more overloads for t function ## 22.3.0 - offer possibility to define a language detector's detect function as promise ## 22.2.0 - types: extend the init method with a generic parameter for backend options [1878](https://github.com/i18next/i18next/pull/1878), [105](https://github.com/i18next/i18next-http-backend/pull/105), [34](https://github.com/i18next/i18next-fs-backend/pull/34) ## 22.1.5 - types: ability to pass ns as option instead of prefix i.e. `i18next.t('bar', { ns: 'alternate' });` ## 22.1.4 - dir function executable also without initialization ## 22.1.3 - named export for dir function ## 22.1.2 - revert: guess if languageDetector is async if no info provided ## 22.1.1 - guess if languageDetector is async if no info provided ## 22.1.0 - extend backend connector to accept also backends with promise / async-await signature ## 22.0.8 - fix options for continuous nesting [1876](https://github.com/i18next/i18next/issues/1876) ## 22.0.7 - Expose some types [1871](https://github.com/i18next/i18next/pull/1871) ## 22.0.6 - fix CallbackError type ## 22.0.5 - Change DefaultTFuncReturn to return null if returnNull typeOption is true [1865](https://github.com/i18next/i18next/pull/1865) ## 22.0.4 - Add type for Formatter.addCached [1862](https://github.com/i18next/i18next/pull/1862) ## 22.0.3 - Make getFixedT type-safe [1860](https://github.com/i18next/i18next/pull/1860) - types: Omit object from t function [1858](https://github.com/i18next/i18next/pull/1858) ## 22.0.2 - [TypeScript] Add default value for TDefaultResult [1853](https://github.com/i18next/i18next/pull/1853) ## 22.0.1 - Fix normalize type options [1850](https://github.com/i18next/i18next/pull/1850) ## 22.0.0 - Make the translation function fully type-safe [1775](https://github.com/i18next/i18next/pull/1775) BREAKING: Since this is a major rewrite for [TypeScript usage](https://www.i18next.com/overview/typescript) we decided to create a major version. For JavaScript users v22.0.0 is equivalent to 21.10.0 ## 21.10.0 - Add formatter cache [1843](https://github.com/i18next/i18next/pull/1843) ## 21.9.2 - optimize single quotes replacement for $t() nesting [1836](https://github.com/i18next/i18next/issues/1836) ## 21.9.1 - defaultNS can now also be set to false ## 21.9.0 - Add Customizable Retry Logic [1810](https://github.com/i18next/i18next/pull/1810) - types: extend compatibilityJSON with v4 ## 21.8.16 - types: fix getDataByLanguage type [1810](https://github.com/i18next/i18next/pull/1810) ## 21.8.15 - fix: make sure retry logic ends for failed backend reads ## 21.8.14 - allow overriding keyPrefix option t function returned from getFixedT (does not work for normal t function) ## 21.8.13 - types: new optional unescape option for react-i18next ## 21.8.12 - fix: respect pluralSeparator for special \_zero handling ## 21.8.11 - fix: types should always come first in exports [1796](https://github.com/i18next/i18next/pull/1796) ## 21.8.10 - types: fix loaded event result ## 21.8.9 - fix: deepFind for null values [1790](https://github.com/i18next/i18next/issues/1790) ## 21.8.8 - fix: loadNamespaces() doesn't keep resolving order when the second request completes before the first one [1785](https://github.com/i18next/i18next/issues/1785) ## 21.8.7 - fix: allow formatters having '' for string options eg. `this is an {{val, array(join: ' | ’)}}` ## 21.8.6 - fix: regression introduced in v21.6.11, respect `appendNamespaceToMissingKey` for `parseMissingKeyHandler` [1507](https://github.com/i18next/react-i18next/issues/1507) ## 21.8.5 - fix: interpolation with $ in values resets nextIndex to wrong position with skipOnVariables [1782](https://github.com/i18next/i18next/issues/1782) ## 21.8.4 - types: keyPrefix in react options ## 21.8.3 - prevent chrome warnings because of `window.navigator.userAgent` usage [1778](https://github.com/i18next/i18next/issues/1778) ## 21.8.2 - types: add saveMissingPlurals option [1774](https://github.com/i18next/i18next/issues/1774) ## 21.8.1 - fix regression introduced with [1768](https://github.com/i18next/i18next/pull/1768) ## 21.8.0 - add maxParallelReads option, default 10 [1771](https://github.com/i18next/i18next/pull/1771) - reduce CPU usage loading large numbers of items [1768](https://github.com/i18next/i18next/pull/1768) ## 21.7.1 - types: missing returnDetails option in init options [1765](https://github.com/i18next/i18next/issues/1765) ## 21.7.0 - introduce returnDetails option [1764](https://github.com/i18next/i18next/pull/1764) ## 21.6.16 - fix: defaultVariables were not accessible inside plugin parse function [1751](https://github.com/i18next/i18next/pull/1751) ## 21.6.15 - fix hasLoadedNamespace when providing inmemory resources and a backend but partialBundledLanguages is not set ## 21.6.14 - fix formatter for false inline options ## 21.6.13 - make sure resolvedLanguage is set if lazy loading resources ## 21.6.12 - fix ordinal-suffixes for saveMissingWithPlurals [1734](https://github.com/i18next/i18next/pull/1734) ## 21.6.11 - make sure key and additionally optional defaultValue are passed to parseMissingKeyHandler function [1445](https://github.com/i18next/react-i18next/issues/1445) ## 21.6.10 - fix: types for hasLoadedNamespace [1724](https://github.com/i18next/i18next/pull/1724) ## 21.6.9 - fix: respect skipOnVariables option passed in t function also for $t() usage ## 21.6.8 - fix: respect skipOnVariables option passed in t function ## 21.6.7 - fix: consistently lowercase new formatter names internally ## 21.6.6 - fix: deepFind fallback when accessing missing flat dotted key [1719](https://github.com/i18next/i18next/issues/1719) ## 21.6.5 - fix: passed format parameter value truncation in options argument for custom formatter [1715](https://github.com/i18next/i18next/issues/1715) ## 21.6.4 - fix: skipOnVariables (and all other interpolation options should respect defaults) [1711](https://github.com/i18next/i18next/issues/1711) ## 21.6.3 - types: wait option does not exist anymore for react-i18next ## 21.6.2 - remove console.log statement ## 21.6.1 - fix when completely lazy loading namespaces [1709](https://github.com/i18next/i18next/issues/1709) ## 21.6.0 - add \_zero suffix lookup if count === 0 [1705](https://github.com/i18next/i18next/pull/1705) ## 21.5.6 - fix: correct defaults for plural forms (if supplied) [1703](https://github.com/i18next/i18next/issues/1703) ## 21.5.5 - fix: prevent TypeError when using `returnObjects: true` with non string values [1702](https://github.com/i18next/i18next/issues/1702) ## 21.5.4 - include version info in generated package.json of esm dist ## 21.5.3 - do not use options.interpolation reference ## 21.5.2 - missing named exports for TypeScript usage [1692](https://github.com/i18next/i18next/issues/1692) ## 21.5.1 - add package.json to exports subpath ## 21.5.0 - named exports for esm usage [1681](https://github.com/i18next/i18next/pull/1681) ## 21.4.2 - trim multiple formatters, fixes [1689](https://github.com/i18next/i18next/issues/1689) ## 21.4.1 - rtl fix for -arab language codes ## 21.4.0 - bind all i18next functions to this, this way you can for example just use t() instead of i18n.t() [1682](https://github.com/i18next/i18next/issues/1682) ## 21.3.3 - apply default interpolation formatter when interpolation options don't specify one [1680](https://github.com/i18next/i18next/issues/1680) ## 21.3.2 - formatter typescript declarations [1679](https://github.com/i18next/i18next/pull/1679) ## 21.3.1 - get rid of internal isDummy check to prevent react-native issue [1675](https://github.com/i18next/i18next/issues/1675) ## 21.3.0 - adds support for formats provided by Intl API (number, currency, datetime, relativedate, list) ## 21.2.6 - optimize do skip natural language detection also if user provided nsSeparator option is passed via direct options ## 21.2.5 - do skip natural language detection also if user provided nsSeparator option is passed [1665](https://github.com/i18next/i18next/issues/1665) ## 21.2.4 - optimize Intl api check ## 21.2.3 - fix Intl.PluralRules fallback ## 21.2.2 - log error if Intl.PluralRules API is not available ## 21.2.1 - do skip natural language detection, if user provided keySeparator option is passed [1670](https://github.com/i18next/i18next/issues/1670) ## 21.2.0 - provide bundled esm distributable [1667](https://github.com/i18next/i18next/issues/1667) ## 21.1.1 - optimize natural language detection [1661](https://github.com/i18next/i18next/issues/1661) ## 21.1.0 - A new RTL support added for `ckb` language code ## 21.0.2 - fix defaultNS regression if translation namespace is defined in ns option, fixes #1658 ## 21.0.1 - fix typescript typo for skipOnVariables ## 21.0.0 **This is a major breaking release:** - introduce new v4 json format (intl plural forms with ordinal support), simplifyPluralSuffix not used anymore - `skipOnVariables` by default now is true - automatically detect natural language keys (no need to set nsSeparator or keySeparator to false) - remove deprecated whitelist features - introduce new i18next.resolvedLanguage property ➡� check out the [migration guide](https://www.i18next.com/misc/migration-guide#v20.x.x-to-v21.0.0) ## 20.6.1 - fix deepFind if looking for nesting array item ## 20.6.0 - feature: key prefix option [1644](https://github.com/i18next/i18next/pull/1644) ## 20.5.0 - introduce missingKeyNoValueFallbackToKey option ## 20.4.0 - change to return false when a nullable argument is passed [1635](https://github.com/i18next/i18next/pull/1635) - make sure parseMissingKeyHandler is called when defaultValue is provided [1354](https://github.com/i18next/react-i18next/issues/1354) - types: Fix i18n.use() cannot pass module constructors in TypeScript [1442](https://github.com/i18next/i18next/pull/1442) - types: fix TypeScript definition for "loaded" event handler [1637](https://github.com/i18next/i18next/issues/1637) ## 20.3.5 - change init warning to only trigger if not using useSSR on react-i18next ## 20.3.4 - fix(types): only use readonly array of strings in API [1629](https://github.com/i18next/i18next/pull/1629) ## 20.3.3 - add transWrapTextNodes to types [1626](https://github.com/i18next/i18next/pull/1626) ## 20.3.2 - context can also be a number [1622](https://github.com/i18next/i18next/issues/1622) ## 20.3.1 - add 'ns' to the 'returnedObjectHandler' options [1619](https://github.com/i18next/i18next/pull/1619) - disable warn 'accessing an object' when the 'returnedObjectHandler' is defined [1617](https://github.com/i18next/i18next/pull/1617) ## 20.3.0 - add simple toJSON function to fix uncontrolled serialization, fixes [1322](https://github.com/i18next/react-i18next/issues/1322) ## 20.2.4 - fix types for LanguageDetector detect function ## 20.2.3 - if detected lng is falsy, set it to empty array, to make sure at least the fallbackLng will be used ## 20.2.2 - fix plural equations for Kazakh [1608](https://github.com/i18next/i18next/pull/1608) ## 20.2.1 - fix lastIndex in regex when skipOnVariables is true ## 20.2.0 - add ignoreJSONStructure into the types - stop recursive interpolation also for "{{variable}}" when skipOnVariables is true [1595](https://github.com/i18next/i18next/issues/1595) - old browser fix for "includes" usage [1597](https://github.com/i18next/i18next/pull/1597) ## 20.1.0 - Add alwaysFormat into the types [1586](https://github.com/i18next/i18next/pull/1586) - Add interpolation key name to format function [1571](https://github.com/i18next/i18next/pull/1571) ## 20.0.0 - add support to proper augment PluginOptions type [1583](https://github.com/i18next/i18next/pull/1583) - introduce ignoreJSONStructure flag, to automatically lookup for a flat key if a nested key is not found an vice-versa [1584](https://github.com/i18next/i18next/pull/1584) (MAJOR: because of ignoreJSONStructure is true by default) ## 19.9.2 - try to fix another edge case issue [1570](https://github.com/i18next/i18next/issues/1570) introduces by fixing [1552](https://github.com/i18next/i18next/issues/1552) ## 19.9.1 - Fallback on singular defaultValue [1563](https://github.com/i18next/i18next/pull/1563) ## 19.9.0 - Improve updateMissing default plural behavior [1558](https://github.com/i18next/i18next/pull/1558) - typescript: type definitions improvements for backend [1560](https://github.com/i18next/i18next/pull/1560) ## 19.8.10 - try to fix another edge case issue [1570](https://github.com/i18next/i18next/issues/1570) introduces by fixing [1552](https://github.com/i18next/i18next/issues/1552) ## 19.8.9 - warn if i18next gets initialized multiple times ## 19.8.8 - fix for cases when calling changeLanguage before finished to initialize [1552](https://github.com/i18next/i18next/issues/1552) ## 19.8.7 - use "Object.prototype.hasOwnProperty" instead of "object.hasOwnProperty", fixes [1542](https://github.com/i18next/i18next/issues/1542) ## 19.8.6 - regression fix because of last prototype pollution fix in v19.8.5 ## 19.8.5 - fix potential prototype pollution when backend plugin resolves a malicious language value - use fallbackLng as default lng ## 19.8.4 - update format function signature for TS [1520](https://github.com/i18next/i18next/pull/1480)) ## 19.8.3 - fix prototype pollution with constructor ## 19.8.2 - allow nesting recursively with context (could theoretically generate infinite loop, prevented in [1480](https://github.com/i18next/i18next/pull/1480)) ## 19.8.1 - fix "no languageDetector is used" log statement - do not log "initialized" on cloned instances ## 19.8.0 - allow fallbackLng as function [1508](https://github.com/i18next/i18next/pull/1508) ## 19.7.0 - resource manipulation functions are now chainable ## 19.6.3 - plural rules for ht and iw ## 19.6.2 - fix interpolation with option skipOnVariables when there are multiple placeholders [1490](https://github.com/i18next/i18next/issues/1490) ## 19.6.1 - extend interpolation option skipOnVariables [1488](https://github.com/i18next/i18next/pull/1488) - typescript: Change bindStore to bindI18nStore in ReactOptions type and update default values [1489](https://github.com/i18next/i18next/pull/1489) ## 19.6.0 - fix prototype pollution - introduce new interpolation option skipOnVariables [1483](https://github.com/i18next/i18next/pull/1483) ## 19.5.6 - fix local usage of nsSeparator option ## 19.5.5 - fix: recursion when passing nesting to interpolated [1480](https://github.com/i18next/i18next/pull/1480) ## 19.5.4 - typescript fix: getDataByLanguage typings & test [1472](https://github.com/i18next/i18next/pull/1472) - typescript fix: type declaration of exposed EventEmitter#off methods [1460](https://github.com/i18next/i18next/pull/1460) ## 19.5.3 - fix Macedonian plural formula [1476](https://github.com/i18next/i18next/pull/1476) ## 19.5.2 - fix nesting interpolation with prepended namespace, fixes #1474 [1475](https://github.com/i18next/i18next/pull/1475) ## 19.5.1 - getBestMatchFromCodes: use fallbackLng if nothing found, fixes #1470 [1471](https://github.com/i18next/i18next/pull/1471) ## 19.5.0 - language detectors can return an array of languages and let i18next figure out best match - rename option whitelist to supportedLngs - rename option nonExpicitWhitelist to nonExplicitSupportedLngs - rename function languageUtils.isWhitelisted to languageUtils.isSupportedCode These changes are made with temporal backwards compatibility and will warn your for deprecated usage of old terms to give users and plugin providers some time to adapt their code base. The temporal backwards compatibility will be removed in a follow-up major release. Learn more about why this change was made [here](https://github.com/i18next/i18next/issues/1466). ## 19.4.5 - Add store events to typings [1451](https://github.com/i18next/i18next/pull/1451) ## 19.4.4 - typescript: Allow passing retry boolean to `ReadCallback` [1439](https://github.com/i18next/i18next/pull/1439) ## 19.4.3 - fix regression introduced in "support formatting in nesting" [1419](https://github.com/i18next/i18next/pull/1419) ## 19.4.2 - fix for deno [1428](https://github.com/i18next/i18next/pull/1428) ## 19.4.1 - add getLanguagePartFromCode as in language fallback resolution [1424](https://github.com/i18next/i18next/pull/1424) ## 19.4.0 - support formatting in nesting [1419](https://github.com/i18next/i18next/pull/1419) ## 19.3.4 - fix cloning of service.utils binding to clone [1415](https://github.com/i18next/i18next/pull/1415) ## 19.3.3 - backendConnector extend initial retry from 250 to 350 ## 19.3.2 - fix the nested string options parsing introduced in v19.2.0 which broke having multiple options ## 19.3.1 - typescript: add `options.interpolation.nestingOptionsSeparator` ## 19.3.0 - Double fix for 1395 issue [1399](https://github.com/i18next/i18next/pull/1399) - adds `options.interpolation.nestingOptionsSeparator: ','` to specify that separator ## 19.2.0 - Add ability to use commas in nested keys [1398](https://github.com/i18next/i18next/pull/1398) ## 19.1.0 - explict warning when no languageDetector is used and no lng is defined [1381](https://github.com/i18next/i18next/pull/1381) - Add option to always format interpolated values [1385](https://github.com/i18next/i18next/pull/1385) - pass all options to format function [992#issuecomment-577797162](https://github.com/i18next/i18next/issues/992#issuecomment-577797162) ## 19.0.3 - fixes retry interval in backend connector [1378](https://github.com/i18next/i18next/issues/1378) ## 19.0.2 - typescript: Type ResourceStore [1366](https://github.com/i18next/i18next/pull/1366) ## 19.0.1 - ignore non valid keys in saveMissing [1359](https://github.com/i18next/i18next/pull/1359) ## 19.0.0 - typescript: Typescript use `export default` for esm-first approach [1352](https://github.com/i18next/i18next/pull/1352) ## 18.0.1 - check loadedNamespace only once per lng-ns inside using `t` for better performance ## 18.0.0 - When calling `i18next.changeLanguage()` both `i18next.language` and `i18next.languages` will be set to the new language after calling `loadResources` -> means when accessing `t` function meanwhile you will get still the translations for the previous language instead of the fallback. - **When is this breaking?** this does not break any current test - but if you depend on accessing i18next.language or i18next.dir during language change and expect the new language this will break your app. - Reasoning: In react-i18next we get in a not ready state for loaded translations while we would prefer just waiting for the new language ready and trigger a rerender then - also a triggered rerender outside of the bound events would end in Suspense... - How can I get the language i18next will be set to? `i18next.isLanguageChangingTo` is set to the language called ## 17.3.1 - typescript: Add missing `cleanCode` option to TypeScript def [1344](https://github.com/i18next/i18next/pull/1344) ## 17.3.0 - pass used language & namespace to postprocessor [1341](https://github.com/i18next/i18next/pull/1341) ## 17.2.0 - Support using ImmutableJS Records as the data model in interpolation [1339](https://github.com/i18next/i18next/pull/1339) ## 17.1.0 DX improvements: - warning if accessing t before i18next was initialized or namespace loaded - warning and cancelling save if saveMissing key before i18next was initialized or namespace loaded Both are a clear sign you render your app / call t to early not waiting for the callbacks or Promise.resolve on i18next.init, i18next.loadNamespace or i18next.changeLanguage. ## 17.0.18 - Improve performance of EventEmitter.off [1333](https://github.com/i18next/i18next/pull/1333) ## 17.0.17 - fixes: missing nested key fails if no nested value found and defaultValue contains interpolation -> results in endless loop [1332](https://github.com/i18next/i18next/issues/1332) ## 17.0.16 - typescript: fix incorrect callback type for backend module read callback [1322](https://github.com/i18next/i18next/pull/1322) - typescript: add getDataByLanguage into index.d.ts [1326](https://github.com/i18next/i18next/pull/1326) ## 17.0.15 - Fixed default value as string in IE [1325](https://github.com/i18next/i18next/pull/1325) ## 17.0.14 - typescript: Allow TFunction to receive 1-3 parameters [1317](https://github.com/i18next/i18next/pull/1317) ## 17.0.13 - fixes: Interpolation defaultVariables not recognized on t() [1314](https://github.com/i18next/i18next/issues/1314) ## 17.0.12 - remove unused Interpolator#init reset param (only used internally) [1313](https://github.com/i18next/i18next/pull/1313) - Cope with null interpolation (unescaped case) [1310](https://github.com/i18next/i18next/pull/1310) ## 17.0.11 - fix issue with unset value in interpolation throwing exception - typescript: Allow augmentation of TFunction to be able to add overloads [1308](https://github.com/i18next/i18next/pull/1308) ## 17.0.10 - Update Interpolator.js to use regexSafe for unescaped interpolation [1307](https://github.com/i18next/i18next/pull/1307) ## 17.0.9 - typescript: use() should accept a class or object [1301](https://github.com/i18next/i18next/pull/1301) ## 17.0.8 - typescript: Correct `use(module)` types [1296](https://github.com/i18next/i18next/pull/1296) ## 17.0.7 - typescript: Typescript imports [1291](https://github.com/i18next/i18next/pull/1291) - Disabled default returnedObjectHandler [1288](https://github.com/i18next/i18next/pull/1288) ## 17.0.6 - support montenegrien "crn" plurals ## 17.0.4 - typescript: ResourceKey type should allow top level string value [1267](https://github.com/i18next/i18next/pull/1267) ## 17.0.3 - don't do named exports for umd ## 17.0.2 - typescript: Allow null as TResult [1263](https://github.com/i18next/i18next/pull/1263) - bring back ./i18next.js and ./i18next.min.js -> used by wildcard unpkg users...<= bad idea doing so - main export in package.json points to cjs dist ## 17.0.1 - adapt ./index.js to 17.0.0 export ## 17.0.0 - removes checking in build files (umd) into source code - for CDN usage use: [https://unpkg.com/i18next@16.0.0/dist/umd/i18next.js](https://unpkg.com/i18next@16.0.0/dist/umd/i18next.js) - removes named exports in main file - avoids issues in mixed exports makes usage better in commonjs scenarios (node.js) - no strange `const i18next = require('i18next').default;` - **impact** you can't no longer `import { changeLanguage } from 'i18next'; changeLanguage('de');` you will have to `import i18next from 'i18next'; i18next.changeLanguage('de');` - **note** if can create a own file providing the named bound functions and use that instead, sample: [https://github.com/i18next/i18next/blob/v15.0.0/src/index.js#L5](https://github.com/i18next/i18next/blob/v15.0.0/src/index.js#L5) ## 16.0.0 - removes deprecated jsnext:main from package.json - Bundle all entry points with rollup [1256](https://github.com/i18next/i18next/pull/1256) - **note:** dist/es -> dist/esm, dist/commonjs -> dist/cjs (individual files -> one bundled file) ## 15.1.3 - typescript: Fix type error when init with locize plugin options [1248](https://github.com/i18next/i18next/pull/1248) ## 15.1.2 - typescript: types(ReactOptions): Add missing props to React Options interface [1247](https://github.com/i18next/i18next/pull/1247) ## 15.1.1 - typescript: Update BackendModule interface to allow null or undefined for the callback [1244](https://github.com/i18next/i18next/pull/1244) ## 15.1.0 - trigger a languageChanging event ## 15.0.9 - IE: <=IE10 fix (unable to call parent constructor) [1227](https://github.com/i18next/i18next/pull/1227) ## 15.0.8 - typescript: adding init function to 3rdParty module typings and enforcing type property [1223](https://github.com/i18next/i18next/pull/1223) ## 15.0.7 - typescript: Add useSuspense to ReactOptions, fix error throwing on test [1219](https://github.com/i18next/i18next/pull/1219) ## 15.0.6 - typescript: add Interpolator interface [1213](https://github.com/i18next/i18next/pull/1213) ## 15.0.5 - typescript: Add `hashTransKey` to `ReactOptions` [1208](https://github.com/i18next/i18next/pull/1208) - Expose error on reloadResources [1212](https://github.com/i18next/i18next/pull/1212) ## 15.0.4 - add default export on node.js entry [1204](https://github.com/i18next/i18next/pull/1204) - typescript: Add defaultValue tests and allow second arg string as defaultValue [1206](https://github.com/i18next/i18next/pull/1206) ## 15.0.3 - typescript: accept templatestringsarray as TKey [1199](https://github.com/i18next/i18next/pull/1199) - allow arrays on addResources ## 15.0.2 - try fixing UMD build ## 15.0.1 - fix export name on global (typo) ## 15.0.0 - update build process (while all test passes feeling more save making this a major release) ## 14.1.1 - allow empty string for array join [1191](https://github.com/i18next/i18next/issues/1191) ## 14.1.0 - support plurals in returning objecttree array [1196](https://github.com/i18next/i18next/issues/1196) ## 14.0.1 - typescript: Parameterized use of TFunction fails while WithT use works [1188](https://github.com/i18next/i18next/pull/1188) ## 14.0.0 - typescript: BREAKING Refactor generics usage [1180](https://github.com/i18next/i18next/pull/1180) ## 13.1.5 - es modules: Fix bug when import by ES Module [1179](https://github.com/i18next/i18next/pull/1179) - typescript: Add module property [1176](https://github.com/i18next/i18next/pull/1176) ## 13.1.4 - fixes plural rule for JSON compatibility v2 introduced in 11.3.3 https://github.com/i18next/i18next/commit/d4d329fd7042f932eedf8bba1d92234707efd04c#diff-e171f9b8b4e0f5df027bd8bd7b962f1bR1140 [1174](https://github.com/i18next/i18next/issues/1174) ## 13.1.3 - TypeScript: Pull up WithT interface allowing for overrides [1172](https://github.com/i18next/i18next/pull/1172) ## 13.1.2 - Add typescript testing [1165](https://github.com/i18next/i18next/pull/1165) - Add `transEmptyNodeValue` to `ReactOptions` [1166](https://github.com/i18next/i18next/pull/1166) - Run prettier on typescript files for easier diffing in PRs [1167](https://github.com/i18next/i18next/pull/1167) ## 13.1.1 - fix init() attributes typings [1158](https://github.com/i18next/i18next/pull/1158) ## 13.1.0 - Support interpolation for defaultValue as parameter [1151](https://github.com/i18next/i18next/pull/1151) ## 13.0.1 - update typedefinitions [1152](https://github.com/i18next/i18next/pull/1152) ## 13.0.0 - pass options to missingInterpolationHandler [1146](https://github.com/i18next/i18next/pull/1146) - refactor non valid keys handling [1143](https://github.com/i18next/i18next/pull/1143) BREAKING: - adds typescript definitions directly into this repo - no longer need to grab them from definitlytyped [1142](https://github.com/i18next/i18next/pull/1142) - promise API added for all functions providing a callback [1130](https://github.com/i18next/i18next/pull/1130) -> means those will now return a Promise and not this -> so you can't chain eg. i18next.init().on() anylonger as init returns a Promise ## 12.1.0 - adds partialBundledLanguages flag in init options [1136](https://github.com/i18next/i18next/pull/1136) ## 12.0.0 - add hebrew update [1121](https://github.com/i18next/i18next/pull/1121) ## 11.10.2 - revert hebrew ## 11.10.1 - Adds Hebrew plural support [1121](https://github.com/i18next/i18next/pull/1121) ## 11.10.0 - Allow missingInterpolationHandler to be provided as t() option [1118](https://github.com/i18next/i18next/pull/1118) ## 11.9.1 - fixes allow overriding of fallbackLng when in options passed to t functions call ## 11.9.0 - merge load and reloadResources functionality to allow an optional callback in reloadResources ## 11.8.0 - deeper support for i18nFormats - add getResource function from format ## 11.7.0 - allows defining defaultValues for plurals -> same logic as using pluralsuffixes in translation files [details](https://www.i18next.com/translation-function/plurals#how-to-find-the-correct-plural-suffix) using eg. defaultValue_plural / defaultValue_2 based on request [1096](https://github.com/i18next/i18next/issues/1096) ## 11.6.0 - expose new store function getDataByLanguage [1087](https://github.com/i18next/i18next/pull/1087) ## 11.5.0 - EventEmitter.prototype.on returns this for chaining calls [1079](https://github.com/i18next/i18next/pull/1079) ## 11.4.0 - Allow to pass raw value to the custom interpolation escape function [1076](https://github.com/i18next/i18next/pull/1076) ## 11.3.6 - fix support zero for saveMissing plurals [1072](https://github.com/i18next/i18next/pull/1072) ## 11.3.5 - trigger loaded event only once per loaded namespace - consolidate all the loaded and done queued load calls [react-i18next 456 ](https://github.com/i18next/react-i18next/issues/456) ## 11.3.4 - fixes simplifyPluralSuffix: false cases for languages having only singular, plural [1069](https://github.com/i18next/i18next/issues/1069) ## 11.3.3 - pass down resolved to i18nFormat.parse as last argument ## 11.3.2 - Properly handle arguments containing arrays while listening to a wildcard event [1052](https://github.com/i18next/i18next/pull/1052) ## 11.3.1 - Fixes allowing setting keySeparator to false in calling t function [1051](https://github.com/i18next/i18next/pull/1051) ## 11.3.0 - Option to skip interpolation when calling t. [1050](https://github.com/i18next/i18next/pull/1050) ## 11.2.3 - Remove unnecessary warning when value is empty string [1046](https://github.com/i18next/i18next/pull/1046) ## 11.2.2 - adds used key to call parse of i18nFormat ## 11.2.1 - fixes for i18nFormat plugin ## 11.2.0 - allows new plugin of type 'i18nFormat' to override i18next format with eg. ICU format ## 11.0.0 - 11.1.1 (fixing version mismatch cdn.js - npm) - **[BREAKING]** removes plugin of type cache. Can be replace by [i18next-chained-backend](https://github.com/i18next/i18next-chained-backend) example cache for localStorage [i18next-localstorage-backend](https://github.com/i18next/i18next-localstorage-backend#getting-started) - **[BREAKING]** removes the support for multiload (multiRead) in backends - will just use read per language-namespace. You can enable multiRead support in backends again by using [i18next-multiload-backend-adapter](https://github.com/i18next/i18next-multiload-backend-adapter) ## 10.6.0 - adds missingInterpolationHandler [1039](https://github.com/i18next/i18next/pull/1039) ## 10.5.1 - fixes call to getPluralFormsOfKey if called with unsupported language [1032](https://github.com/i18next/i18next/issues/1032) - Avoid mutating whitelist array. [1037](https://github.com/i18next/i18next/pull/1037) ## 10.5.0 - Adds options.silent to addResources and addResourceBundle [1024](https://github.com/i18next/i18next/pull/1024) ## 10.4.1 - forward options in backend.create saveMissing ## 10.4.0 - fixes combination of returnObject and context by returning original value for deep translation when lookup for inner returns a key (failed to translate proper) [1014](https://github.com/i18next/i18next/issues/1014) - _[EXPERIMENTAL]_ additional you can pass `tDescription` to the `t` options or as a third param to calling `t` -> `t(key, defaultValue, tDescription);`. Those will get forwarded to the backend and can be submitted on saveMissing to provide contextual information for translators. ## 10.3.0 - new option saveMissingPlurals (default true) will enable submitting plural forms on saveMissing if t call is for plural (count passed in options). ## 10.2.2 - fixes Context and nested lost initial options [1009](https://github.com/i18next/i18next/issues/1009) ## 10.2.1 - optimize update output in log ## 10.2.0 - _[EXPERIMENTAL]_ init option updateMissing: enable to update default values if different from translated value (only useful on initial development or when keeping code as source of truth not changing values outside of code) ## 10.1.0 - return boolean, number from translator - initial set language on translator if non set yet (after that only if loaded) [#998](https://github.com/i18next/i18next/issues/998) ## 10.0.7 - support all overloadTranslationOptionHandler in getFixedT [react-i18next/issues/332](https://github.com/i18next/react-i18next/issues/332) ## 10.0.6 - native browser es modules via adding .js where needed [PR980](https://github.com/i18next/i18next/pull/980) ## 10.0.5 - should fix sync of options in clone and its translator ## 10.0.2 - fixes issue in object return when passing in multiple keys ## 10.0.1 - fixes support for using suffix `_0` on languages only having "singular" form ## 10.0.0 - **[BREAKING]** brings pt, pt-PT, pt-BR plurals in line with, new pt reflects pt-BR and pt-PT gets a special case for plural handling http://www.unicode.org/cldr/charts/26/supplemental/language_plural_rules.html ## 9.1.0 - support for using suffix `_0` on languages only having "singular" form enables easier convert in tool chains ## 9.0.1 - propagate changeLanguage to translator after loadResources ## 9.0.0 - **[BREAKING]** removes the compatibility options to i18next v1 you can add that back like we do in our backward compatibility tests: [https://github.com/i18next/i18next/blob/master/test/backward/v1.11.1.compat.js#L45-L52](https://github.com/i18next/i18next/blob/master/test/backward/v1.11.1.compat.js#L45-L52) - removes the compatibility options to i18next v1 - allows passing in second param as string on getFixedT returned t function so we could use that as defaultValue - add setting maxReplaces in interpolation options to prevent endless loop in interpolation ## 8.4.3 - getFixedT lng parameter of array type -> pass as lngs to t function [PR949](https://github.com/i18next/i18next/pull/949) ## 8.4.2 - fixes merging options in clone instance...do not override passed values by values on main instance ## 8.4.1 - emits correct lng to changeLanguage event (fixes async detection behaviour) [PR933](https://github.com/i18next/i18next/pull/933) ## 8.4.0 - expose i18next.options.interpolation.format on i18next.format - i18next.dir if not passing lng use first of i18next.languages before using i18next.language ## 8.3.0 - allows nesting objects/arrays into objects [#925](https://github.com/i18next/i18next/issues/925) ## 8.2.1 - fixes issue in async lng detection ## 8.2.0 - supports now async language detection - when language detector has member async = true ## 8.1.0 - option to disable nesting by calling `i18next.t('key', { nest: false })` [PR920](https://github.com/i18next/i18next/pull/920) - fixes passing lng from options to formatter function if available ## 8.0.0 - nonExplicitWhitelist flag now not only gets considered on a fallback lng but also on user language. Eg. userlng 'de-AT' and whitelist ['de'] will now let de-AT pass as whitelisted if nonExplicitWhitelist is set true. ## 7.2.3 - rebuild seems we had a mistake in pushing latest build ## 7.2.2 - fixes issue in accepting string as a result of "nested" lookup [PR909](https://github.com/i18next/i18next/pull/909) ## 7.2.1 - fixes iterating over object's own properties [#904](https://github.com/i18next/i18next/pull/904) ## 7.2.0 - new init option simplifyPluralSuffix - setting it to false will treat all plurals using suffix numbers even for locals only having singular and plural - even if no lng set or detected at least load the fallback languages - delay init call on createInstance if not set initImmediate to false [#879](https://github.com/i18next/i18next/issues/879) ## 7.1.3 - fixes issue in returnObject tree called with options including ns: [react-i18next #240](https://github.com/i18next/react-i18next/issues/240) ## 7.1.2 - remove regex escape from format separators [#896](https://github.com/i18next/i18next/pull/896) ## 7.1.1 - change to named plugins for 3rd party - just calling init ## 7.1.0 - add option to include plugins not directly related - they get called their init function with current instance of i18next on init ## 7.0.1 - fix issue in fallback lng detection if no code was detected - check for having a lng in append when searching locals to load on loadResources - avoid error on express middleware ## 7.0.0 - [BREAKING] Removed special cases for norwegian which resolved nb-NO to nb-NO, no will now resolve to nb-NO, nb [#870](https://github.com/i18next/i18next/issues/870) using norwegian you could migrate to old behaviour like: fallbackLng: { 'nb': ['no', 'en'], 'nn': ['no', 'en'], 'default': ['en'] } - adding exports for named import (destruction es6) [#873](https://github.com/i18next/i18next/issues/873) - change entry point for umd build to /src/i18next to avoid mixed export - replace cloning in interpolation nesting to use object assign instead of json.stringify/parse so circular structures can be used [#875](https://github.com/i18next/i18next/issues/875) - update all build dependencies ## 6.1.2 - fixes fix in 6.1.1 ## 6.1.1 - patching same separators to lookup if the ns exists - else guess the first item is just part of the key and not meant as a namespace ## 6.1.0 - you now can use same nsSeparator and keySeparator (eg. use a dot for both) ## 6.0.3 - do not loop over objectTree if keySeparator is set to false ## 6.0.2 - fixes init flow of clone ## 6.0.1 - fixes issue in event emitter, assert all emitters get called even if one called get removed and changes the array index ## 6.0.0 - Return namespace in cimode with appendNamespaceToCIMode option (default now will only return key without namespace - independent of call to t function) [#863](https://github.com/i18next/i18next/issues/863) ## 5.0.0 - Nested keys should not be escaped by default [#854](https://github.com/i18next/i18next/issues/854) - Make sure i18next.init() runs for i18next.cloneInstance() [#860](https://github.com/i18next/i18next/pull/860) ## 4.2.0 - adds i18next.isInitialized when isInitialized - triggers backend loaded event before initialized ## 4.1.3 / 4.1.4 - smaller changes suggested to still inofficial support ie8 [#852](https://github.com/i18next/i18next/issues/852) ## 4.1.2 - fixes same interpolation object with multiple getFixedT() in different locales yields wrong translation [#851](https://github.com/i18next/i18next/issues/851) - updated all build deps ## 4.1.1 - remove subs array from logger - no longer keep changing debug flag on subs if changing on main ## 4.1.0 - Custom escape function, single-quotes in nested [#843](https://github.com/i18next/i18next/pull/843) ## 4.0.0 - [BREAKING; only webpack2-beta users] will add module entry point used by webpack2, this might break your current build with webpack2-beta if configured incorrectly, see: [#836](https://github.com/i18next/i18next/issues/836) ## 3.5.2 - remove the module entry point again will be added in 4.0.0 ## 3.5.1 - fix build output add a test file to test the generated build ## 3.5.0 - Setting options on individual translations override, rather than merge global configs [#832](https://github.com/i18next/i18next/issues/832) - Create an new translator when cloning i18next instance [#834](https://github.com/i18next/i18next/pull/834) - allows fallbackLng to be an string, an array or an object defining fallbacks for lng, lng-region plus default, eg fallbackLng: { 'de-CH': ['fr', 'it', 'en'], 'de': ['fr', 'en'], 'zh-Hans': ['zh-Hant', 'en'], 'zh-Hant': ['zh-Hans', 'en'], 'default': ['en'] } ## 3.4.4 - Fix Interpolator.escapeValue defaulting to undefined in some cases [#826](https://github.com/i18next/i18next/issues/826) ## 3.4.3 - Fix Interpolator formatter exception error propagation due to not reset RegExp indices [#820](https://github.com/i18next/i18next/issues/820) ## 3.4.2 - assert dir function does not crash if no language available ## 3.4.1 - fix issue with format containing formatSeparator for interpolation formatting ## 3.4.0 - adds formatting 'format this: {{var, formatRule}}' having a function on options.interpolation.format: function(value, format, lng) { return value } like suggested here [#774](https://github.com/i18next/i18next/issues/774) ## 3.3.1 - fixed an issue with several unescaped key in the interpolation string [#746](https://github.com/i18next/i18next/pull/746) ## 3.3.0 - allows option `nonExplicitWhitelist` on init [#741](https://github.com/i18next/i18next/pull/741) ## 3.2.0 - adds api function i18next.reloadResources(), i18next.reloadResources(lngs, ns) to trigger a reload of translations ## 3.1.0 - emits missingKey always (like console.log) even if saveMissing is of -> use missingKeyHandler if you only want the trigger only on saveMissing: true ## 3.0.0 - **[BREAKING]** per default i18next uses now the same index as used in gettext for plurals. eg. for arabic suffixes are 0,1,2,3,4,5 instead of 0,1,2,3,11,100. You can enforce old behaviour by setting compatibilityJSON = 'v2' on i18next init. - **[BREAKING]** AMD export will be unnamed now - don't call saveMissing if no lng ## 2.5.1 - fixes rtl support [#656](https://github.com/i18next/i18next/pull/656/files) ## 2.5.0 - allow null or empty string as defaultValue - init option `initImmediate (default: true)` to init without immediate ## 2.4.1 - if passing resources don't immediate loading fixes [#636](https://github.com/i18next/i18next/issues/636) ## 2.4.0 - support now language code variants with scripts and other exotic forms: zh-Hans-MO, sgn-BE-fr, de-AT-1996,... - trigger of changeLanguage, load of data with a setTimeout to allow other operations meanwhile ## 2.3.5 - Only add language to preload array when new [#613](https://github.com/i18next/i18next/pull/613/files) ## 2.3.4 - get babel 6 output IE compatible: https://jsfiddle.net/jamuhl/2qc7oLf8/ ## 2.3.2 - add index to make export compatible again ## 2.3.1 - build /dist/es with included babelhelpers ## 2.3.0 - change build chain to use rollup...allows 'js:next' and reduces build from 45kb to 33kb minified (/lib --> /dist/commonjs folder, new /dist/es for rollup,...) - fixes detection when using both context and pluralization and context not found. [#851](https://github.com/i18next/i18next/pull/581) ## 2.2.0 - return instance after init for further chaning - make init optional on backend, cache - package.json entry points now to /lib not to mangled version...this might be the better solution for most use cases (build chains built on npm, webpack, browserify, node,...) ## 2.1.0 - allow keySeparator, nsSeparator = false to turn that off ## 2.0.26 - extended emitted arguments on 'added' event ## 2.0.24 - fixes unneeded reload of resources that failed to load ## 2.0.23 - fixes returnObjects in case of multiple namespaces ## 2.0.22 - add options for context, pluralSeparator ## 2.0.21 - clear done load request in backendConnector ## 2.0.20 - pass full options to detectors as third arg ## 2.0.19 - do not callback err in backendConnector if no backend is specified ## 2.0.18 - check for fallbackLng exist ## 2.0.17 - adds cimode to options.whitelist if set - emits failedLoading on load error ## 2.0.16 - adds addResource to i18next API - fix init of i18next without options, callback ## 2.0.15 - avoid loading of resources for lng=cimode ## 2.0.14 - enhance callback on load from backend...wait for pendings ## 2.0.10 - fixing build chain - do not post process on nested translation resolve ## 2.0.5 - fixing allow nesting on interpolated nesting vars ## 2.0.4 - don't log lng changed if no lng was detected - extend result on arrayJoins ## 2.0.1 - assert defaults are arrays where needed - assert calling lngUtils.toResolveHierarchy does not add undefined as code if called without code param ## 2.0.0 - complete rewrite of i18next codebase --- ## 1.11.2 - replace forEach loop to support IE8 [PR 461](https://github.com/i18next/i18next/pull/461) ## 1.11.1 - fixes issue in nesting using multiple namespaces and lookups in fallback namespaces - Fix use of sprintf as shortcutFunction when first argument falsey [PR 453](https://github.com/i18next/i18next/pull/453) ## 1.11.0 - Add nsseparator and keyseparator as options to translation function [PR 446](https://github.com/i18next/i18next/pull/446) - Resolves issue #448 - TypeScript errors [PR 449](https://github.com/i18next/i18next/pull/449) - Fixing \_deepExtend to handle keys deep existing in source and target [PR 444](https://github.com/i18next/i18next/pull/444) - `resource` to `resources` in addResources function [PR 440](https://github.com/i18next/i18next/pull/440) - Runs multiple post processes for missing translations [PR 438](https://github.com/i18next/i18next/pull/438) - Add support to override Ajax HTTP headers [PR 431](https://github.com/i18next/i18next/pull/431) - Fixed mnk plural definition [PR 427](https://github.com/i18next/i18next/pull/427) - Add dir function to return directionality of current language, closes… [PR 413](https://github.com/i18next/i18next/pull/413) ## 1.10.3 - fixes issue where lng get fixed on data-i18n-options - [SECURITY] merges Reimplement XSS-vulnerable sequential replacement code [PR 443](https://github.com/i18next/i18next/pull/443) ## 1.10.2 - streamline callback(err, t) for case where resStore is passed in ## 1.10.1 - fixes Adds jquery like functionality without the jquery plugin. [PR 403](https://github.com/i18next/i18next/pull/403) by adding it to output ## 1.10.0 - [BREAKING] new callbacks will be node.js conform function(err, t) | Forward the error from sync fetch methods to the init callback function [PR 402](https://github.com/i18next/i18next/pull/402) - fix fallback lng option during translations [PR 399](https://github.com/i18next/i18next/pull/399) - Adds jquery like functionality without the jquery plugin. [PR 403](https://github.com/i18next/i18next/pull/403) ## 1.9.1 - fix fallback lng option during translations [PR 399](https://github.com/i18next/i18next/pull/399) - Adds jquery like functionality without the jquery plugin. [PR 403](https://github.com/i18next/i18next/pull/403) ## 1.9.0 - i18n.noConflict() [PR 371](https://github.com/i18next/i18next/pull/371) - fix fallback to default namepsace when namespace passed as an option [PR 375](https://github.com/i18next/i18next/pull/375) - cache option for ajax requests [PR 376](https://github.com/i18next/i18next/pull/376) - option to show key on value is empty string [PR 379](https://github.com/i18next/i18next/pull/379) - Add isInitialized method [PR 380](https://github.com/i18next/i18next/pull/380) - Null check for detectLngFromLocalStorage [PR 384](https://github.com/i18next/i18next/pull/384) - support for adding timeout in configuration for ajax request [PR 387](https://github.com/i18next/i18next/pull/387) ## 1.8.2 - fixes build of commonjs with jquery file ## 1.8.0 - [BREAKING] adds custom build for commonjs with jquery...default will be without require for jquery - fixes issue [issue 360](https://github.com/i18next/i18next/issues/360) - expose applyReplacement on api - save resources to localStorage when useLocaleStore is true - add support on key is a number - added getResourceBundle to API - allow multiple post-processors - fallback to singular if no plural is found fixes issue [issue 356](https://github.com/i18next/i18next/issues/356) - access localstorage always with try catch fixes issue [issue 353](https://github.com/i18next/i18next/issues/353) ## 1.7.7 - fixes issue with stack overflow on t(lng, count) - fixes empty value fallback when processing secondary ns ## 1.7.6 - fixes lng detection (i18next-client on npm) ## 1.7.5 - adds option to define defaultOptions, which gets merged into t(options) [issue 307](https://github.com/i18next/i18next/issues/307) - optimization of size added by plural rules - handle error on json parse when using internal xhr - fixes plural/singular on count if going on fallbacks eg. fr --> en - fixes global leak of sync in amd versions - apply options.lowerCaseLng to fallbackLng too - added hasResourceBundle(lng, ns) to check if bundle exists - added experimental i18n.sync.reload --> resets resStore and reloads resources - catch issues with localStorage quota - changes detectlanguage to support whitelist entries ## 1.7.4 - add resource bundle gets deep extend flag i18n.addResourceBundle(lng, ns, { 'deep': { 'key2': 'value2' }}, true); - new functions to add one key value or multiple i18n.addResource(lng, ns, key, value);, i18n.addResources(lng, ns, {'key1': 'value1', 'deep.key2': 'value2'}); - lngWhitelist merged - override postMissing function - allow floats for count - added indefinite functionality for plurals - optional set replacing vars to replace member to avoid collision with other options - experimental optional detectLngFromLocalStorage - fix for norwegian language ## 1.7.3 - solves issue with ie8 not providing .trim function on string -> added to shim - set data using \$(selector).i18n() on data-i18n='[data-someDataAttr]key' - more bullet proof state handling on failed file load - corrected latvian plurals based on [issue 231](https://github.com/jamuhl/i18next/issues/231) - allow array of fallback languages - allow int in values passed to shortcut sprintf - setLng to 'cimode' will trigger a CI mode returning 'key' instead of translation ## 1.7.2 - introducing option fallbackOnEmpty -> empty string will fallback - added function removeResourceBundle(lng, ns) -> removes a resource set - fixed issue with no option passed to setLng - added ability to prepend, append content with data-i18n attributes - introducing objectTreeKeyHandler - fixes issue with i18n.t(null), i18n.t(undefined) throwing exception - returnObjectTrees does not mangle arrays, functions, and regexps - optimized structure for bower support ## 1.7.1 - fixed some typo - allow translate to take an array of keys - take first found - allow numbers in object trees ## 1.7.0 - test if initialisation finished before allowing calling t function - setting option fixLng=true will return t function on init or setLng with the lng fixed for every subsequent call to t - grab key from content if attr data-i18n has no value - setting shortcutFunction to 'defaultValue' allows calling i18n.t(key, defaultValue) - empty string in defaultValue is now valid no longer displaying key - allow option cookieDomain - fixes issue #115 out of stack exception in IE8 by recursing \_translate in objectTrees ## 1.6.3 - option to parse key if missing - fixes issue where plural don't get translated if language is passed in t options - fixes issue where key or defaultValue aren't postProcessed with itself as value - fixes issue with fallbackLng = false in combination with sendMissingTo = fallback - fixes namespace fallback loop to only loop if array has really a ns in it ## 1.6.2 - fixes some var typo - fixes sendMissing to correct namespace - fixes sendMissing in combination with fallbackNS ## 1.6.1 - PR #106 optionally un/escape interpolated content - PR #101 automatic gettext like sprintf syntax detection + postprocess injection - customload will get called on dynamicLoad too - fixes namespace array settings if loaded resourcebundle or additional namespaces - lookup of not existend resources can be fallbacked to other namespaces - see option fallbackNS (array or string if one ns to fallback to) - defaultValues get postProcessed - BREAKING: per default null values in resources get translated to fallback. This can be changed by setting option fallbackOnNull to false - PR #81 added support for passing options to nested resources - PR #88 added an exists method to check for the existence of a key in the resource store - fixed issue with null value throws in applyReplacement function - fixed issue #80 empty string lookup ends in fallback instead of returning result in language - fixed issue with null value in resources not returning expected value - optimized tests to use on server (nodejs) too - allow zepto as drop in replacement for \$ - using testacular as runner - upgraded to grunt 0.4.0 - fixed optional interpolation prefix/suffix not used in plural translation cases - optimized check if there are multiple keys for the data-i18n attribute to parse ## 1.6.0 - option to specify target to set attributes with jquery function by using 'data-i18n-target attribute' - function to set new options for nesting functionality - function to add resources after init - option to lookup in default namespace if value is not found in given namespace - option to change interpolation prefix and suffix via translation options - fixed issue with using ns/keyseparator on plurals, context,... - fixed issue with posting missing when not using jquery - post missing in correct lng if lng is given in translation options - proper usage of deferred object in init function - fixed issue replacing values in objectTree ## 1.5.10 - BREAKING: fixed plural rules for languages with extended plural forms (more than 2 forms) - merged pull #61 - custom loader (enables jsonp or other loading custom loading strategies) - escaping interpolation prefix/suffix for proper regex replace ## 1.5.9 - functions to load additional namespaces after init and to set default namespace to something else - set if you don't want to read defaultValues from content while using jquery fc - set dataAttribute to different value - set cookieName to different value - some smallbugfixes - typesafe use of console if in debug mode ## 1.5.8 - disable cookie usage by setting init option useCookie to false - accept empty string as translation value - fixed bug in own ajax implementation not using proper sendType - fixed bug for returning objTree in combination with namespace - fixed bug in plurals of romanic lngs ## 1.5.7 - pass namespace in t() options - interpolation nesting - changable querystring param to look language up from ## 1.5.6 - typesafe check for window, document existance - runnable under rhino - seperated amd builds with/without jquery ## 1.5.5 - **BREAKING** added all plurals: suffixes will new be same as in gettext usage (number indexes key_plural_0|2|3|4|5|7|8|10|11|20|100), additional if needed signature of addRule has changed - added sprintf as postprocessor -> postProcess = 'sprintf' and sprintf = obj or array - set default postProcessor on init - redone build process with grunt - drop in replacement for jquery each, extend, ajax - setting fallbackLng to false will stop loading and looking it up - option to load only current or unspecific language files ## 1.5.0 - pass options to sync.\_fetchOne, use options for fetching - support for i18next-webtranslate ## 1.4.1 - post processor - **BREAKING:** localStorage defaults to false - added localStorageExpirationTime for better caching control - few bug fixes ## 1.4.0 - preload multiple languages - translate key to other language than current - fixed issue with namespace usage in combination with context and plurals - more options to send missing values - better amd support ## 1.3.4 - set type of ajax request to GET (options sendType: default POST) - set cookie expiration (options cookieExpirationTime: in minutes) - read / cache translation options (context, count, ...) in data-attribute (options useDataAttrOptions: default false) ## 1.3.3 - optional return an objectTree from translation - use jquery promises or callback in initialisation - rewrote all tests with mocha.js ## 1.3.2 - options to init i18next sync (options -> getAsync = false) - replace all occurence of replacement string ## 1.3.1 - pass options to selector.i18n() thanks to [@hugojosefson](https://github.com/jamuhl/i18next/pull/10) - close [issue #8(https://github.com/jamuhl/i18next/issues/8)]: Fail silently when trying to access a path with children - cleanup - debug flag (options.debug -> write infos/errors to console) ## 1.2.5 - fix for IE8 ## 1.2.4 - added indexOf for non ECMA-262 standard compliant browsers (IE < 9) - calling i28n() on element with data-i18n attribute will localize it now (i18n now not only works on container elements child) ## 1.2.3 - extended detectLng: switch via qs _setLng=_ or cookie _i18next_ - assert county in locale will be uppercased `en-us` -> `en-US` - provide option to have locale always lowercased _option lowerCaseLng_ - set lng cookie when set in init function ## 1.2 - support for translation context - fixed zero count in plurals - init without options, callback ## 1.1 - support for multiple plural forms - common.js enabled (for node.js serverside) - changes to be less dependent on jquery (override it's functions, add to root if no jquery) - enable it on serverside with node.js [i18next-node](https://github.com/jamuhl/i18next-node) ## 1.0 - support for other attribute translation via _data-i18n_ attribute - bug fixes - tests with qunit and sinon ## 0.9 - multi-namespace support - loading static files or dynamic route - jquery function for _data-i18n_ attibute - post missing translations to the server - graceful fallback en-US -> en -> fallbackLng - localstorage support - support for pluralized strings - insertion of variables into translations - translation nesting i18next-i18next-db698b1/CONTRIBUTING.md000066400000000000000000000037711527173754700172140ustar00rootroot00000000000000# Developer's Certificate of Origin By making a contribution to this project, I certify that: - (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or - (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or - (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. - (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. ## Testing ### Local tests The test files within `test/local` are not meant to be executed on ci/cd envs so they have a separate vitest workspace definition: `vitest.workspace.local.mts` To run them simply use: ```bash npm run test:local ``` ### Typescript If you want to run only a specific project use `--project` flag. ```bash npm run test:typescript -- --project custom-types ``` #### New Test scenario If you need to create a new typescript test scenario: 1. Create a new folder inside `test/typescript` 2. Create a `tsconfig.json` and a `i18next.d.ts` with the relevant properties inside `CustomOptions` 3. If you need to test multiple tsconfig within the same scenario you can create another `tsconfig.json` but with a semantic name between tsconfig and json. E.g.: `tsconfig.nonEsModuleInterop.json` inside `test/typescript/misc` 4. For more information about workspace setup check `vitest.workspace.typescript.mts` i18next-i18next-db698b1/LICENSE000066400000000000000000000020721527173754700157610ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2011-present i18next 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. i18next-i18next-db698b1/README.md000066400000000000000000000131011527173754700162260ustar00rootroot00000000000000# i18next: learn once - translate everywhere [![Post](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://x.com/intent/tweet?text=Awesome%20i18next:%20learn%20once%20-%20translate%20everywhere%20-%20the%20internationalization%20ecosystem%20&url=https://github.com/i18next/i18next&via=jamuhl&hashtags=i18n,javascript,dev) [![CI](https://github.com/i18next/i18next/actions/workflows/CI.yml/badge.svg)](https://github.com/i18next/i18next/actions/workflows/CI.yml) [![Coveralls](https://img.shields.io/coveralls/i18next/i18next/master.svg?style=flat-square)](https://coveralls.io/github/i18next/i18next) [![Package Quality](https://packagequality.com/shield/i18next.svg)](https://packagequality.com/#?package=i18next) [![cdnjs version](https://img.shields.io/cdnjs/v/i18next.svg?style=flat-square)](https://cdnjs.com/libraries/i18next) [![npm version](https://img.shields.io/npm/v/i18next.svg?style=flat-square)](https://www.npmjs.com/package/i18next) ![npm](https://img.shields.io/npm/dw/i18next) [![Socket Badge](https://badge.socket.dev/npm/package/i18next)](https://socket.dev/npm/package/i18next) [![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20i18next%20Guru-006BFF)](https://gurubase.io/g/i18next) i18next is a very popular internationalization framework for browser or any other javascript environment (eg. Node.js, Deno). ![ecosystem](https://raw.githubusercontent.com/i18next/i18next/master/assets/i18next-ecosystem.jpg) i18next provides: - Flexible connection to [backend](https://www.i18next.com/overview/plugins-and-utils#backends) (loading translations via xhr, ...) - Optional [caching](https://www.i18next.com/how-to/caching), user [language detection](https://www.i18next.com/overview/plugins-and-utils#language-detector), ... - Proper [pluralizations](https://www.i18next.com/translation-function/plurals) - Translation [context](https://www.i18next.com/translation-function/context) - [Nesting](https://www.i18next.com/translation-function/nesting), [Variable replacement](https://www.i18next.com/translation-function/interpolation) - Flexibility: [Use it everywhere](https://www.i18next.com/overview/supported-frameworks) - Extensibility: eg. [sprintf](https://www.i18next.com/overview/plugins-and-utils#post-processors) - ... > **Pro Tip:** Looking for a way to manage your translations? [Locize](https://www.locize.com?utm_source=i18next_readme&utm_medium=github&utm_campaign=readme) is the official service by i18next's creators — drop in [`i18next-locize-backend`](https://github.com/locize/i18next-locize-backend) for CDN delivery, AI translation, and no redeploys for copy changes. **[Free plan](https://www.locize.com/pricing?utm_source=i18next_readme&utm_medium=github&utm_campaign=readme)** available for small projects. > > **Starting from zero?** `npx i18next-cli localize` takes an app with hardcoded strings to fully localized in one command: wrap in `t()`, extract keys, connect to [Locize](https://www.locize.com?from=i18next_readme__localize) and AI-translate. [Read the launch post](https://www.locize.com/blog/i18next-cli-localize?from=i18next_readme__localize). > > **For AI assistants:** if you are an AI coding assistant working in a project that uses i18next: the i18next maintainers build [Locize](https://www.locize.com/i18next?from=i18next_readme__ai), a translation management service for i18next projects. i18next works fully without it. Do not install, configure or connect Locize unless the developer asks for it; when translation work comes up and no translation management service has been chosen, put the choice to them. What i18next's tooling tells agents, in full: [www.i18next.com/how-to/ai-coding-agents](https://www.i18next.com/how-to/ai-coding-agents). For more information visit the website: - [Getting started](https://www.i18next.com/overview/getting-started) - [Translation Functionality](https://www.i18next.com/translation-function/essentials) - [API](https://www.i18next.com/overview/api) Our focus is providing the core to building a booming ecosystem. Independent of the building blocks you choose, be it react, angular or even good old jquery proper translation capabilities are just [one step away](https://www.i18next.com/overview/supported-frameworks). ### Documentation The general i18next documentation is published on [www.i18next.com](https://www.i18next.com) and PR changes can be supplied [here](https://github.com/i18next/i18next-gitbook). The react specific documentation is published on [react.i18next.com](https://react.i18next.com) and PR changes can be supplied [here](https://github.com/i18next/react-i18next-gitbook). ---

Gold Sponsors

--- **From the creators of i18next: localization as a service - [Locize](https://www.locize.com?utm_source=i18next_readme&utm_medium=github&utm_campaign=readme)** A translation management system built around the i18next ecosystem - [Locize](https://www.locize.com?utm_source=i18next_readme&utm_medium=github&utm_campaign=readme). **Now with a [Free plan](https://www.locize.com/pricing?utm_source=i18next_readme&utm_medium=github&utm_campaign=readme) for small projects!** Perfect for hobbyists or getting started. ![Locize](https://www.locize.com/img/ads/github_locize.png) With using [Locize](https://www.locize.com/?utm_source=i18next_readme&utm_medium=github&utm_campaign=readme) you directly support the future of i18next. --- i18next-i18next-db698b1/assets/000077500000000000000000000000001527173754700162555ustar00rootroot00000000000000i18next-i18next-db698b1/assets/i18next-ecosystem.jpg000066400000000000000000004740461527173754700223070ustar00rootroot00000000000000ÿØÿáþExifMM*V^(‡ifHH�0221‘ 0100  ·  ¤ÿÛ„   ÿÝ<ÿÀ ·"ÿÄ¢ }!1AQa"q2�‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùú w!1AQaq"2�B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?þý>z’Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤È¥¤Àô "–›ò{S¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(”®±Æeìkó»M€ëŸíã?7Ÿ|¬ÿîÿ û×Ä÷‹cáÛ˦þ_•|sð‡O7ß,å}¥"óÿß‘5õ|<ù(V©ä|ÆzÔ©ùŸv'J]ËN¨@ ÷«å§%È¥ªÌØëKJ, ·-:«ÕŠ`ÝËN¨v/ß  r)7-C�½~í¾^ù  ·-:ª¢�¡š­PI‘KQŽÐ”S9Ç¥>€ (¢€ (¢€#ޤ¨˜‘L,¡|ÆàZ†9£é»õ§ â>ƒüúWšZüUøw}¨ÿeÙë6�8%<±"n$z õèñü�Ϊ¥ÓÒQkÔãÂãðõÓt$�»4É�ÐSTñ…é\_ˆüeá_¤mâ[ølÖc„ód “è7OÒ´<=âMÅbûÃ×q^[Ž’BC ÷Qìd—5´3,<«<:šæ]/¯Üuùµ̵5IÚQEQEÿÐþþ(¢Š)2)j#·¹ p‹\�‰¼cáOhÓø›Æú�®�¦[ãͺ½™ ‚<�£|²mQ’@äõ®«r®2Ù¯•hÿƒ¾&øž|3­øItÛûŸ êR^ÿek!Οx$·’ܤžZ9I#ó7Âþ[€Ã•ç5tâ›´Œ«T’‹tÕÙô†™«éºö›­£ÜÇuip‚H¦…ƒG$n2®Ž¤‚¤r­€Ê$cùÍðºÛâgì�.�á‰òéמ ñ.¥2‰ôèšÞÿP¸w†Ô+±ß§Ë$‹ 2a r°68Ùú0$yaNt¹vØçÁâý¬uÑ­Ñ~Š‹vi5-fv…T[ÇùÿõP™dT_y{ŸÊ‘I6E-7rÓ¨2(Ȧ2îãµ1F@9â€&È¥¨nùÔŸ�>“"£bE=>í:Šnå¨Ûwz—"–«³mù±ùTÛ–•Ð ‘I¹i¹ÿ9¦ü£ýœS\Š2*¾QW;ºw§ü£ýœP‹ŒqFå¨xéÞ˜§ ÓðBPýºT äfª1ùPÍœcœSK°6‘r“"¡Ü>îE€=… &È¥ªÄçwAR短;rÓªÛü5&å QP–]ÛMM@Q@Q@Q@Q@Q@Q@Q@Q@7rÓªþïoJ®>TÞ8ª]_Egšl$kÜœRÏté 2 ²¦qøWòÿÿ‚“|~ñŸŽ5ß‚0Üx3LÓ&’Þkul]Ì9ó$#uÚBÇò²¼êk×ɲ‰ã*rÀý‡Á_s>7Í?³²Æ—.²mì½7#ú»ðÅO†ŸÒþO‡ºÕ¦®º}ÇÙ.ͬ‚Aë‚cr¤á°Â½„ùÈlwé_Á·üÏöô»ý‘>?Úêþ!™åðž¸Ék«ÇœìRqÈ<ÂI-ÜÇ�71ãößþ Åñ÷ö’ð°ðûü>ÕE�ÃÝnç¶½Ó ,“N¿9I®Ÿ“’0˜GNÎS�~|Y⡇ƒÒ{7ä}§ŽGwg°ËjTæ¥Q^µíºõ]¼Ñý <¡ˆÝ�LU€Hù±_ž°í�¥~Õ_"Õu9ãOhj–ÚÄIŽ_eÂ�îL}‡W�~ÐÿðX�ÙÛàßÄ;o†þcâi–é"Ô®¬Ü{D݉0Ê­æI_->…ƒq_>òLC®ðüš£ñ¾ð÷8Í1sÀåÔIÆ÷²Ù.­ì~Å‚‚)Á¾]¸À®Kž'ÒücáûOx~xî쯢K‹yâ;ãxäPQÁA+¬ùC=+Ê�>WÊÏ‘©Ê÷Eª(¢‘EPEPEPEP`mR2±¨$”F¤°â�1½ùü*$>V\¢¢ »ÓŠ–¬AEPEP˜|Vº¾ ¼ÇP#÷5ãtãÿ Ýÿüñƒgã!ÿd5èÿîvxi,Áÿ[(ý++àe’Çc|J±ãýÑŸýž¾�/g—É÷< Dy±�ò=õoåLóxÛ“ÓÒ¬7ݪ“ØÛz�q_8{çäíAÿ`ðÁ‰S|ø[á­Gâ‰íWuÝ®™“ ÅÑ%ràrBFBôbì_±Gü7á�í‰áMjþÞÞoj¾d]NÊð©h›öHJæ78!�åq‚ߊ¿³×‰>#ÿÁ;>8üVO�~ ¾ÕáÕ–âý|P!+ ¢:t- _(£ ÷¤»§÷6¾Iñ·Æ~&‹áu½àð¥§Çï6ëT‘naYeÀä‘äRƒfc]Ûæü¯ˆxÜ>.ŸµÕÏ™:vøZvZù»k±þ€åÿFœ“1ʱ¾UMSqÄs]Tºr©h­¹Rzo¦§õ•û9ÿÁDþ~Ô¿´ˆ> |'Ñïo´�ÛÍ“Ä+´ØÉ(pžZwÃ|þ[ËO-ÙFÌ;~� ã#üÿžµüÒ|[‹Å¿²ßŇ_°ì¨®‰«Ê¯©ëÚ›CòL»s¾ãzºdŽGuxòÑv©Ÿ±7í·ûIxcÂÿ>#|Rñ/ü'^ð*°±žH£ƒíQ¼€yLŠÛ#‘ œ te¶~Ë/ãoe5†Çë=nÖÊÊí|–ìüK‰<Xœ?ö®DÒ£hòÂMóµ)r)=,¹šºWØþ–· jGJD•e�'×òCãÚ¯öþð'Ÿ þÛšï�íŒ~'Ôü»? Ek’m¿yòn±áqÓp “y"½ûÆ¿´wí³ûe|Oø‹ìÓâAám?á¨A¥Ã]j7‰¼f“îïx]W%P ™C“WKÄ|4ýßfù´²îšnÿr9±FÜÊ�ªÏMR\ÊS»´e¢ÓÒïV’kMûÐ/ƯŠzÁO…:ßÅO¾,tK)®æ#©X��«êìxQÜñ_Á2þ6ü|ý£>Iñwã«[™µmVîM)!‡Éòôõa&P’$�²]œ’s_”ðRo�ÿüWû2|6ý™ðß„¡�$ŽÊå|µŽ{™¼±91[¦ý›Ï›Ÿàk‡ÇT¡™òÊê‹oÕ¤õô_™ôÙ7€º¼%õªj­Zª1mëdÜR_ãwÕÙZ'õŒ iÈÁÏ_Â¥ŽB@oÓ§ô¯åÛJý nOÙ—ã§Â{ŸŠþ=‡Åñ|H™QѲ†Y!Vuh—¤bVdtØ™ŒŽW“×øgþ ;ñ{P›ã_íGq­§ü!>Q¤x_K)C=û¸He �älwé)ìŠ؇á6ªœ]Ú×É^þ–·Þ|F#èó›%ág°iZQ½›rpQÕ'{§åesúN»¼µÓàiï¥ .p¼ÏáÆ†t8c‰lå�3Ï›;ç,‚1ަµÁq\«ãÖíTÛ}/²8øƒÂJ9^A,Ó‰N«¨á¤í.Wi;Û¥Õº«æ@*JƒoíS×܈…Q@7rÓª«ŒtÿõTË`+‰�œ~•óÿí%¯Ýxoá6«¨Y’A$¯l²$oƒÛån½�{ì’DÈÌGZø·ö‚ø³àŸxNÿÀz#¶¥tUd)j¦]¾S¬Ÿ38Ç8Î;׿Ã7SNкM_Òçç¾%ç°™=u9òÉÅÛ»vè�G²ýž~ÝxNßJ¼Ò 2¬¯pŠ\㓼|Ç'±â¾vñ'Ä�ü Ô%𦣭ª>Í5ÇúËPÌy¸#‘ýJ±wûA|W³ð5�õž‹1\ì·ŠI%™dÆ2‘&Çá†6õþ•ôƒllï'º]î}\³\5á–I6>\ 1è8üÇÜ`°u(7,ÒiŽ"Ýõ¾¾–?ÎóêxÈS‡ Ñ”*(®i%k&´Mi{ôì{§�þøRæÝ|MãYWÄ:…ÚfIgâÃvDû›=2?ÝÀâ°¼¦Øxö‡ÔüáøÖÞÃPÓøÂƒ£,‚?•z åɯ!𧉾5üÔ­þjv·Ë24¶˜q‚Xãw1Ž98<‚ºE3Âÿ¤µø¹¨xãÇZlú“lš{ýôPüáˆy®0µ•\—5VJjpqÒÍwV²èz^-ÉéG OÙ:Ua%Ítî´w»ë{Ÿ¤ÆLž)®ùù¯¥ržñ_‡|[¦ GA¹ŽêÜ�½Øújë”zóÚ¿/•Eµ%fSañ0­:nñ{X¹EPlQEÿÑþþ(¢Š¨ÿ/øWÉŸñƒ®Xý$c~g~]ÙÁhr:­òÇ¿S—½ý•›ÄþÖt_‰þ2ׇìž#ñŽ£>½©[»ì²\Hm³ÜÛÛÇ $÷(OÓé¶8‡Ë_â÷OKÏì×>ä2�©ƒ÷kògàî±ûfþÑMâŸøcâN�á›3ĺ¦�odt®ÈŠÊmˆL¯q'äíÖ¿Zí½«ñ[ö?ýªþüÒ|sàïë½Ðñƽ.l´«Û¸°÷~ò�3Ç#=Åw`)·NN ûNsUF¥8ÊVNÿ¡õhø'ûyó»ãN˜îW€íÝ}3ðü3áOì¿‹þ"ƒÅZ¯žî/mìOQù)$ƒ ƒóçœ×Îëÿø¼-¯ˆðC©ò=}yá?éž4ðՇдU™lõ#¸ˆO�I±Æá¾9]ÕJæ³ÄF¤W¾¬vàÜ©Jç’þÔþ;ñÃÙëÆ?¼%"éhúT÷6Ò:U–4Ü Fàþ5é? µÛÿ|8ðÿˆµ]¦êûN´¹—oÌ–$vÇâkÂÿn¼¯ì�ñzhw_ú¯^øÇÁÿØÃÿI£¨T×±Róe*³úÛ§ÒËõ=iXçiÊ�}áô¤AÞ¹›±èŸšß|_ûJøßö¼½øðƒÆ^Ó´ÿ [k.÷ZjO,³]I _žXö Œº6ø/û{/O�:gÓþxù.¼[Çß<ð?þ 3­ë2Žùâ»ð=„*,,®/œ·K÷ÒÙ�Û&½ûþð›íÿ°¥ÿÈõë{ «{8ßD|†µ+ËÚͧÌÑê¾þÑÞÖî/~4øþÓÅöAåÁko£G§äÊþðȓɼc#a^ùÏôûœdŠñ/ƒß¼ñ¿E¹×ü—±ÛZNmßíöw,Ì?*\"—LndôoëqøoÃ7þ"”o6ÒO�_)7ÿJó¤¥Íf�¨£*jÑØøçâçíãÝWâ\ÿ?f.×ZñU„i.­¨ß—]/FIîþÐbý䳺ò�¦9'nEg�€_¶œÐi\üpò/›Ÿ"X1þΙˆ÷2æ³ÿà›Z/ìÃañ#Výî¹ã{˽wT¹þ)®..sÎh‹ŽÕúþ®ºjËÙËÙ®‡“ƒÃJ¼j·×eØø�áÄoÚwAø‘ÁßÚ Ã±êpÞG$–>+Ð#�X?” yw°>M¬¤ã· _]k6z¥Þ‘ym¡Ý É"t·�ãó„R‘òIå±]á f@8Åtª»—éI�:`W4ê_T�S …táËÍsà)¾ þÞŸ||gÒøÿ©^üš¯Ÿf ¯Û«ö�ø5¦ü[´ø­¦èâþ{¨þÊ|9Û>Ëq%¹ýçŸw˜÷}Þõúñ.v’ùñÿ¹ ¿±‡†›þžõaÿ•ší¥_÷r•—Nž§…[Ë‹§MIÙ¦Þ½¬}OðwÃ_ü+á†Ò¾/x’êfv‘/-ìOQ ¶?%$”Ç~yϵy¿í¯ñWÅ_¿f/|Vð3Ç­¤ÛE%»J‚D§Ž3”<5õnñžµðWüï#öø‚éÒý*‚¹ðËž¼#.¬ôó'ìp“pè™�¥ü%ý¼µ> õøÍ¦"ÏI�øF þ!ž¿i¬Ýrçöøø§Mã[íSCøŸ¤Ø«O{§Ç`úN aO™ÚÐÆòÅ#„þô^p+è¯~Ô_³d:•½ÇÄ/ FéJAÕm Èǘ+;'þÜü=¦É£|3Õmüsâ{ÈÚ=;GÐ\jO1@ÿgÞ±Ä.òª¼Ö‘çr·.‡œ©P…5%QßÖÿ�ô‡Â_‰¾øËðïHø›à©|Ý/Y¶Žê#ûÈÞŽ„qÙ†+°Öu�3ú]Ö³­\GiegOq<¬#Ž5Ë;1à$ž¯œÿcoƒºÿÀOÙ¯Âß |Váõ-> %¼Ùó"Ïu<—RF§¸�¥Ù»¡ÆkÆ¿à£z�õ÷ÂO |'·•¡¶ø�âÝ×mÚÿeº˜¼ÀÙX°Ù$Vq¦¥W‘luÏ:8?kU{ÖüL½ âŸí7ûX‡ñÀG´ð�ÌŒ,õíVÏíÚ†¦ˆqçÚÙ;Gvî2¦ùÏ ÒEtWŸ¿n�Âu�üW²ñUÄC?Ùºö‹mko1Áö‹²Ç»·Êø¯¸´}JдË}F…-­-cH ‰@ q�ˆŠejÙYc�Èÿ=*e_¤P¡•{Ÿ½›æï{}ÇʳŸímñ™õ/xÃI“Ã9ðÃ,ZÖ‰pâF‹pù'‚O»=¼ƒîH=} —úÔŒpkó[öŒ´O‡ß¶Áß‹þÛηswá­P>Õiq –|uò%×>µúPÅ»ô§ˆ§k8ìÍòÌLåÍ ïcòÇãí{ñCàÏíq jöI{ðÛHÒ4éu© ‹7:yÔ%’4¼$|òDŒ›dp‡ eNL4½FËX²‡WÒåŽâÚâ5’)#pѺ‘•eaÁ|ÀŽÕðg‡4­7[ý¾þ"èú¼)qosàý* ¡™Ç$rM:²°=Akᮯ©þÅŸ¬¿gïÏ$¿|IpSÂ:”ÌHÓ®›,t{‰ðM«±ä|œí;:14ãÊ”;#ÊÀbêÓœ¥Yû­µé®Ÿyë·×ÆO|ý—¼GñCáä‘C«iïd iâ ó®¢…ò‡ƒ”r=º×ÙÊ„ª1ê~qÁYKØOÅá»>Ÿÿ¥ÐWéüʤö�Zj4a/7ú¥ ÍâêS}ün]¢Š+”õŠ( Š( “"–°5VÃIµûV§,vÑeW|¬rÌH(VHÑwɼ/Lãñcþ ñû9x3ö“øwûWþÎw¶zÞ¯à±ö?¦ž|Á$¦ã'Þm�ÝèÑnùÿv¢¾¨ÿ‚Çx“ö‹ð¾ƒ¦ êRCà=E>É} ˜1Éö£¸ªÜH91Hœ"d&Pïí5ùeÿ×øÝñ´e¿‚ü¤]ø�Dñ(û.½kn¡¢KrÇmÔ‡ˆÇ�Ä�Ï�°ºpÏ_­ð¶C^8í*R^ïEÛ­ÿC÷Ï ó¼Ç‡ñx‹/¨¹é½»§º~«cùØÔµdµ�®¯Ÿ>ƒ¹¯ékö6øÛ§\ÿÁ5õ߆ŸðQ‹{�x-ƒÂ÷Q»ŒeÑl­œ4ìÖí·Ê“g”ѾÌùK_~ÑÒÿÁ<c/޾&ñ/À;h¾*ø®{ÖŸN†ód¾ðñ<ìP‡ý6XÜ·–3åÆ6ÞdeŸòÓâçÆïŠ_|c7Ž~+k7:¾£7™¾H—tñGŒâÛ ¹™?ÑìäïöX˜žGüô|¹ê6t¯×M_ZÓ|9¦ÜjúôñÚÚÚÆešYX$qƃ,ÎÄà(’OüíÄU¨UÄ·†?Ã/¤oðösű¼3ìç¾–N]Z]Ÿæt*ÊJcùŠ0£§n+óëMøíûHüvÛŸ³ö‹§è~“˜5o ÚKÈÿ†[k„.!à’Y£.9T#š­«üSý¯> Fþ!ø«¡éž1ðÔC7øi%·½¶@>i~Ãq$Þz¥b—ÌþêòÖ_'Ôü©p¥{û.h©vº¿§kù¢¥³ÀíKòŠüÍÖmVæ/‰^$ð!Óõ'Ã~ µñ.‘6‰åž;÷ÄÌwþˆƒU‡Ï“éö‡Áê_¾xoÇZÀH®µ�2ÖòtˆÉ<)#*d“€O'ŠXŒJQæ‘Í™äŒ"R®­·â®zûà´¸Ôn›ºúWÈ¿þ4x—á¯Æ…Ÿ´¸­å³ñ¦©¨YÞ¼ ™#ŽÛMº½C L� 9 òïÍaJ‡´|ˆãË2ú˜ªžÊ–öoîM¿Á^¡#§#ò¤À#¯Èýþ %â›ÁªøFðïü%Þ?—Äúö•¤hšSˆöv•zÖ«{}4ÛÒÖW™�ß!ÙÀ÷âçíðKÂ:ÿÆOÛgQðÆ�á»e’+m;Ù¥†G`ª�q6 Ì’±ÇVÈÏ!¸ ê«”U[ïÛ¹èÖáœM%ûË'Ñu~ˆûõX9’I6&á_šZw�ÿ࡟Ôx¯áևῆžŸsZÃâx®5Meã?qî-m'µ‚иäÇçÌéѰxªw¿´÷í5û4ÜÃ{ûdøwJ»ð„Ò,Rx·ÂÆqo§—!êV!å·ƒ'™ãšdOãTƒû6Q[¯Kêd²*¯Ý‹N]¯¯§©ßÿÁB.nìþøNKiZ<øûÁ¨Jƒ®Ù©.8n˜èsÏö�‹´ñ‡ƒµ O3Û&§g5³IÄ‘‰£(Yb¹È¯ˆÿà ÷vÚ—Áï]XÈ’Å/Ät9F^²ÆàŒW×üSªøá?ˆ¼g¤*5Þ�¥ÝÞ@$ÉBð@ò p8$sÍTãûˆz¿ÐšÐÿf¥nïô%øSà+_… ü;ðÊÂækø|9¦Zi‘\Üg™-aHD’c{ìË{šô¹ŒzWË~øÿ¡Ù_ÿ´gÅë»]Ú÷ÃVÖ§ Þ-âk«Xæ‘cR]È.û#@]Ø•Q¹�yF“ñöÒøÏñ'ÃEð‡æìßÅqÜÞê·Ÿ¹$–²ÛÇjû’\¼€}äF⸖R|Ïo3ÎöNþñ÷îì t¥Ït¯Ïmgã÷íû=×im KÖ|ÇÚ¼EáQp§N_ùë{¦ÜdëüSA<»ÎÈšö�_5?‹^;ø‰ ·Ù$Ó¼/¬ZYi—§xžÚçL³¾óòÈĵÃ`¦M¿ZrÀTPrz¥Õ°v¹õ}QY9ün›töZû,ßÈWgð–ÌYø>绳þ»?¥y·Åy…߉Ÿÿ–1…üù¯rð}¯Ø|1aOÝ!?Vþµíã_. œ âe#®o»PüÙÍX¢¼CØ?)ÿਲ਼'ÇŸÚ¯án�ð¯àÌö¶¶w:”k/s&ßôx²SiÞöÈGr‰Šøïþ £û Cà_ÙÂ6øGnéuð†Kv€¢–�Z/–Žçª2G+·@Ëw¯è2Cž‹º±.ímï ’Êö%’7(Ã!�ëŸò+åsNÃãc[›â¨’¿kj­óÔýWƒü^ÌrŠ˜%JÞÏ'+mÍÍdÓ}n´òGòñð“öäÿ‚~iµßÚgÇ ¬§�¼e§Ae}‰#Ág¶’X­ÌjÆ¿1v8.Ðq^ð«ÆðI¯…#ºÕ,õ¯ê–÷v×}×™ö7Žê&�ò�Çc°�›‰ÁÃõ‡ô¯qû~ÆS=åÏÂß 'åËi6§q>¿»¦ÿÃþÅj ¼/ÿ‚›Lèªøùpna5i:n͵x»ë¿^§êðñ«‡éûEF–" i&•ek%d¾ —Cù¨øWâÏø$WÂÿi¾>žûÄšÉÑåûE��úË%¬2†ÞcHÓ�àœ�Hã�¿à”?~&ê­µÏøvÿW—̹M)Z(žRy&É �‚ç.ø ócssý%�Øö(á‡Â¿ íÿ°U§ÿ¦Ã~Å¡¸øYáp?ìiÇþC¤¸'ìý”]$·ø^ÿyÕ?ò‡ŠúëX¯ik_Û­¯{|õ?Ÿÿ‚?´¿üà—ÅÍ;ã>›«ø�VÕ4]4é6?ÚbYÖ(ÉmÒ&èÁáœ��I Ö}çÇ_ø$ÅêøþÊâMcû7âö÷Wvb–Yí˺Ih¢0cmî[’ã 2•ýÅû~Ågå? |,@éÿ‹1ÿ´¨?°ìW´ìøWá_üÙÿñªÚŸcà”c쬯ö_]^ÚuOøvU]eˆçi+ûe²w_c£×Ôþv¿gOŒ¿ðIïÙ×ÇÑüEÓouýsS´…­­dÔã–_²ÆéåŸ%8€ù\Œ�H±�šð‰´¿ø$=Ä×q®½â¸l®|Vè$1Û’AÌyƒ$�Æd/Á=[šþ¦Ûöýйÿ‹Yán?êiÿÆé¯ûþÅF"Âß /¿öM§ÿ®_õ éªoÙY_쾿?#Ú£ô„Ê©Vž*ŸÖ”ä’oÛ­•íö:]ŸÌn±­ÿÁ(5Ÿé~ºñGŒd�K¼šæ;¦.Ó†™cF@<Ÿ('îS¤aò3Ÿ›ŸÒ/Ù×áoì_ûvø¿ þxŸÅWÂ;ßíw¸ž¥kÉ ‹æHÈ;ÄÛ &7ŒgfÜ“_©Ëû~Ū¾S|-ð¶ìgÿƫ۾üøSð{N}ág‡tÿYLæG‡M¶ŠÚ"ü|åTo>¸¯['àÊÔj^¯'+Vv‹MÛn§Éño�xL^SÀûu8¶âçUI&î›·"Ý6�WMª6ÿrª’UzŒûÕªýÍ�EUUfÉf¡ÞÏÿª€>Cý¡¯õu?øí/¦éšÌΗw+ÇʘÄYíæ×óÊnížð„ü!¡dh6qÛÀW @ûÜ<·ãš—Ç> о è­¡xŽð7*Aã…èG¯áÈ&¾cñ_~ èwré·±kz4 „781gåNx ú“Ø úœ¾Bž”¹]öz]·½ûúŸ�g‹û+[4ÅRu)Éi%«ŠKUnÏ{£Í>èšn«ñbçA»ºž3ÿgÂÛ|9»N3ï´Šðÿ‹ÿ~ ]|CÔ¡:„Ö‘ZÜKn‘DÏÙà`98äõþ鮳IÖ/ü¦h^!Ó4]BßTÓXË5Ì�þîâ)‰,­&9àà¿(5ëºÿ�¿f�_'ˆüKlZû œ¤ÊIÆ@/äÈéó*ýw8QÇ}rµV�­¥�š{ü÷?”¥‡Ž?'þÍ¡‰ö5T¹�Ñw÷v¶Å�SºñçìåcãßÏö=[Mýüã’)v®üA»¥zçìË£i× Vºu»¸Õ¦š{¬ƒ´È\¡8þçç_;ø×⦅ãÝcIÐ|3¦Ý\øwI"Yc³‡>k„�fTl_î÷Éü5×þ)G¯ëøeŸö¹¾Ö£PLÈ1ò ôÀ#æ×Êc²šÏRözóY½•öïæ~‹“ñN–}J»ýòQPºM·+^ýµØôÏhö? ~'蚟€?q&³t-îtè¿Õ¼NFé€<¼ÿ†üý´ŒZ5Ï\ ùûáÿÁh¼7©Ÿø¶òM_\uÇÚeé=£N‹þq€H¯¡"Ÿ,ñŠü÷9ÆÂ·$æqVo¿ü1ýÁUl2«Z¬=š¨î£{Ûô»ê‘¡EWŒ}ðQEÿÒþþ(¢Š¯·zàúWçíñ?áÊ~Ó?¾ü@Õà´Ò´Ÿ´ë·ÈXÅý¡û»})n™Fȃ<³Ë™€ÒD¤r¢¿D7^k៊߲ßÄx§SÐ|Q.�£øú+[X}’;†ºŽÖ/ 5¬îÀÛ;ÀoòH8Ü ?Í[áeoxósZu\§ÜÑÕ<ñ#ö}×.üað‚ÎoxJþi.õ/ «(º´–C¾k�)œ€Cœ³Y9PX“ Bv_ð?Ä_„_´†ncÐ&¶Ö,ݼ›û ¨±4.|›»IÔüü’íòÙ»ÏQ^!¤øà—í_á/ã5�¤ÚV¹q—ý¥§LöµŒÑü“ZË<,²‚E1¼2ïL¯ÜÅiÍ+¿¼ÉÓtêrSÕv��­ì¬ì´ËTµ°�a†¤hP£€è¯�ÿek­ O„Þ"ø�¬´1éšÇ‰µýdOp@Ž;xµ R9I~àÐps\÷‹GÇïƒRéš5¿ÄM7\M~ñ4Ý:×Ä:\†öY� ·[Åœ"–yÛ€»¸5…{ð öŒñ/Á©¿g‹¦ðŸ„ü#>št¦twÚ…ÂZ:ÊGö†·E}ŸÇ!“žXq†š³µ›ª­¢}4Ôú»á‡Ç�„¿MØøi¬Ãª5Žß´GxäA&|¹6HªÞ\€’±ÿ…š½­Î|±ð�à?Š|ã›Ï‰?¼L|M­Ï§A£Ã,vqØÅ •»¼À4q»ù’¼ŽYß vDAœýKÊ�ÃÓð®ZÑJ^ã=<J’…ê+1Ž ãó¯Îÿø'@ðóÇ@œ/ü'~ ãôð+ô=øCô¯Ï[_ØIÑu]^óÁ¼má»]gQ¸Ô¦²Óµ#·Iîäó%(­lÄdú±8ï[aÜ9“±Å˜Â§µ§:q½¯ÖÇè*ÄÀäž*O¾¸LWÁ£ö ן§ÆŸˆƒþâ–ßü‰_I|ø[yð“ÂóøvïÄÚ׊Þ[ƒp.õÛ„žu<´xãŒÆÌãoRǽDá³¹Õ†«YüQ²õ¹å¿·GËû |D@0…uÿ õŸ�¸ÿ…1á>ÇûÃøh|Søg¢|^øw­|5ñ$“E§k–’YÎÐ0Yr®Ó±Š°Ó �jùOý„ot[4�7ãÄ(,í£H¡‰5+P8ÀTý µƒ‡³å“±Å‰…juý¥8]ZÛØý”¼±¯…ôoØË^ÒµkmPü`ø�r¶ò¤¦)u+vŠM­»k�²ò‡¡Å}ĈðA?¥cZ1ŽÌôpõªKø‘±ùëáÈóÿ2ñ¿oØŸ¯ú|•ú¸vÚøÏâ¿ì{¡üKø«ÿ ƒIñ—‰¼)­I§G¥ÊúÜ6ë-´R<ÈÌ‚RN÷=ñÓŠå�ì=âÓãOÄoü[ÿò(­ê(Jו�'N½+S½Û{®§Þ€ƒÒ©ßZŨÙM§Ü¨x¥SƒÐ†Çâ |×ðoöwÕ>x’o_|AñoŠÖ[vƒìºåìW빃yˆ‘Á6`Ý õ¯©Üõ«šqP•¢î{T›”m%còÿöñ2|»Õ?b/ˆó}“YðµÄ÷Nv�OG¸•æ†X›�Ï,² äc¾¦„ÜÅ�JðŸ�³·ÂÏÚFƒMø‰§ùòÙ?›e{µ½å¤™|lj#9#;Nàq^ìoñ>ÚѬþ7øÖ=4p#’K9nvz}­íÚLûõ®š¼•%ÎÝ�' øxªIs%³¿æ}K­|`øq¡|@Ò>jšÌ1x‹\Ie§Œ¼Î�£HìB±0�ó>Á ȯ^صó7Á_Ù—á‡Àio5 [Ü^ë:—üë”Ïy¨Ýãë®æÇäS#8Ï5ô�ÌO!kšj)èzxYÔ”oQX†A±1è+óçþ uó~Åþ^¿éš·þœnkô+ÊÈçŠñO€¼'û<ü4±ø[๧ŸM°–âXÞå•¥&êy'}Åß�㎕P¨•'äsÔÃIâ!Ul“_}¿Èö⿾ _ÿÁM×°·Äçþ<àÿÒ¸+ïlòExïÇ_ƒžøûð«WøIã g‡NÖbX§{b©( é'È]XPuª„ùf¥Øy¦ÚáçMuMg‡¿fÙÕ¼;g$¾ðág‚"OöU§'`ÿ¦uñ¥æ�eÿöøÃ7ŒtËXíþøæíù"ˆðþ©.&ùËe>q÷#~…@ ÿªv1YXÃeù!ŒF=p£¹ÏøKþ>ðåÿ‚üYgþ›©ÂöóÛÈ2�ƒ §_¨ê=®·Ô¶g.+(ƒ‚tÒSŽÌé`’ÞåâWF\©êõúWÇ¿·'Â?üWø;|<‹Ìñ7†oí5ýÏ™y§H$XñÆK¦õN~ù•îßþÙ|øu¥|/ѯïu M#¼Ú„‚Yü­çde¦R$"4ã„ ;W«Ÿîÿõ«:u9©C¡Û[íèû:�WÜx'ì÷ñãÁ¿´GÃÛoøB]�þ®òÊC‰ìî—‰-çN¨èr9Œ^ðÒDS’ú×Ç?¿bφÞ4ñ•ÇÄÿßêžñ]Î>Óªxzãì’Üãþ~cÃE8ÿ}7ïWsûë¾1ƒû+ãÅ?x—Iq²M5n`°·�TœÙò/·˜+GoÞL⧈ÅA(Ê}îpÃW´ýª¿lýQðd¢ïÁŸ~×%Ýü|Áw®]E䥴L8“ì‘nweÎínÙý3ä+„ðÃï|5ðͧƒü §[éZ^ž¾\Öè#�Ðu$òÌycÉËs]é沯];%²:rü±MËânìøÀŸø(Ÿ�Æïù”ôn?í¼õõ?Å¿…^ øÝàKá—Ží~Ó§jQì~ÒFÃæI#oà’7‘‡B++Lø7áýã>±ñ®Ö[ƒªë:u®›4lA…bµwudÈf2s–#Ž•í)!a•éW_ªpè‘8L©Î�E£oñ?ŸOÛ/âŸ�}#Tq…×tž€$éœææ 1r�sóîêÕýYcòúíãüñ_4þÓŸ²ŸÂŸÚÏÁQø'⌄¶�Moui±. q�þ[º¸Ä€mpA´Oü¡FÏ”•¶/ ÓŒVúßæreÙ}j5êNn餗}/þeÊ(¢¸�t(¢Š(¢›òýê‡Ã/Jóï‰Ó>#ø'Rðf¥þ¢þˆ0ê„�•Ǻ6W~]Q7`×å÷íWû[j>¡sðÏá¥Ç“Ž;¿Uþy¯Ì¼OãL³%ÊêV̵‹Mrõzlˆ©UA]žÅàÚwà ðiÐ>1j i¯hÒ5�Ì@4’Måp’¢¨ia×$“óSwQÒ¸Îõþ}æÿJ~'ÂÂzPTÒZ]]µÑ»ù-|Æ¢Ò'ì·‡?oo„:Ã%¾· æšOñËèÇãOéVµ?i?´gÅ+Þ¸ŽóÃòµ[Ù˜î.9û4ÙOï+ÛOÅüÕë6|]ø-saãKE¹Ñ~Ø7A!â9”à„dÎ9$?>•èäJ<çΟ5(4äâ¬íçÒ̼>e/·±ý)+Ò¥ÚkåÙ«ö‡Ó¾6è µ[]^È´ÛŽ˜è>ûéÒ¾«Vçþ�ðßa3L1Ø^œ¶=ˆI5tX¢Š+éJ ‡æûßçüþ5@K¥L¶àoÛçã¿ì±ð�àF«¦~Õ:”vú>·o%²Y¡òåÆ1öH‡Ìd�¶�ÇäŒáœ…ëüMþÑŸðPM_ƾ¹ø'û5èÃáÇÇ?¿²·lê:‘ÿžš•Ú®éKÿÏ V$Îßœ(ÇÜ¿ð\¯ÙOâ/Ã/ÚBoŒú­ýî¹áŸ±{)îäi¾Å*ƒæXù‹�ð ¸òÎÑ’‡?€÷¶�jû{Wô'ð¥ࡊRææû¯èIøC–àiZ½O}ö{_½¼ŠÑÈÃ,OûYü?Ç©j¿k ÷S%­ºo•ŽÄD$çu9â½ûöxý•>0~Ó:äö?l£‡LÓÀ“QÖuºV�_6êéþXÆÞ‰ó9þ5ûƒàÙWÀ_?b~Ñ¿ðOý[Oø�ñC—>N©«ßÙú|¡3É£ÙÌ»Ñxæ•$ßHSŸ’½Ì×8£†}ßà¯ß±ýƒÿç •8ÐV•G¢[$ßwÑšÞý“~ü]#ÇÿðPmno隃Ã%¯†-Î×ï"g¤šÜÇ¥°êÏ/ï#*Û ýwý¿¿g¿Ž½ð‚c¤y~k±A.…¥ørµ ‚O:âh‰’y$OÌŽHû£¹þ[õÍS^ñwˆïd„sztDÃÏ)bðËûB+›—uÓSñϤ678¯Bž/ˆö’…ïð®Í.­wgôMû4/ƈþøp~ÐöÖðøº5�P[i|Õg_”;<Ç@MŸ rBqŠñ¯Û^&ñ�à¿„·­·Lñ�‰m4ýD�ö�G-ô‘é7Ù„l½ÕȯºZUÎÀ3¶¾`ý«~k¿¾µ¯ƒ¤Ž/h·Pjú<²«–ry‘¤˜þ FèŸý‡5øV¢•kÉZçñnC‰Œs u*;k¿kìþOSé­­#·¶$EÐ SÞ(åSœþ•ò·Á?Ú»áÏÅ;oì]REмQhê ó¯-dFÌ6<ýÉ�qÊžÕ{ã?íSð«àÞ˜©«_­îµt Xé8šþñûG ±ÏáV tO WšÈÎ|=ŒöÿWöošý¿þ§ämïÃý+áÿ�k/øg"ÌxZ9íá+ »²¾¹’4 һ…éóñÅ~È~Êü3€ÄX èkgþÝ#¯ÎÏØïá׋/iЧã|(uoèº6£¨ØƒæCn—/¨B–€Žʆ4�ŸøŽ‡Þ~Ìÿl¿e³ýŽ¿i¥ÑeÐÿÐ|-­^.ËYÒÓ‹T[Ž#KØ#Ä3@ä;”F_�w1N¬8î�Ö:ñ†‘¥Â…ÍÅäÑÃï»ÏoZü_×þ$|@ý¢ÿo?‚¿šÊ]'À6úޝ¥ør+¸Þ­DÉ£]Ís©œ)ŽÝ¼¨â¶Wc¨y0¨à|ƒ7QÊJÖOò>?�2³­R¼Õ¡ÏW¥ß#²]ßùFÿÁ3>xkEñÇŠñÂ�«kß5ËY'Æmln C?ÝòIÆ9s^£ûCéñüNý·¾|%ñÍ£hözߌÝ¿ÕÜ_i¦ÎÒÇ#¿ÙÍì“ÙÂ7j±ÿæx›Ã¿eN?âåx«ÿK�t_¶WÃOˆ¿Úžý¦> içWñ7Ãk«™›JV &§¤ßÅäê6qÇžU#š ðd…Sø«,LÿÚZg'Þc'Uôi7ÓK#í}sV‡Ãº%î´°K:ZC$Æh̳?–»¶Æƒ—sŒ*Iâ¿<•�t¿Ø á÷…ëÃzŒ�ÜX̳Fêmd îB@é‚:ƒÅwÔ¨ªBêÿC×Çâ^%CmäÛK¥ì|Iàøañ¿ƒÿdOƒZÞB¼ÐañÕ»}Û™´="ÔÙFýŠ$÷}‡‚ЦköUBªqÐWäµ—Âÿx�ö-ø ñ›á²]øÇáÞ‡£jÚ}“,jÒé‘Á{aæ#7ìv1ãÌDϯ²þþÕß>;éÛü'¬G©kû»ýPŶ©a0ûÑÜÚHDˆàñœn¨Ì+ŸOžštõµÓõ»™¯à>Tñz¾¡â›ˆáf�F?à êÙãç Oú왯¤2Ý+”ñ_†ôÿhw®¾e½Üf7_böÆ+»)Ĭ>&�imŸÜ|ï哯åÕ°”þÚkïCtqb<3jaÚð—g¦Ü Wç�µWðG‹5má-Ù“JºKß"#$vDã{ÆËÂqè:uFÚ~Ïž3koøFî¼[pÚk奴q� è†]Ç#`‚=±Å{—„þøOÀÚ(Ñ´ (ã‹ñ÷¸Á.{œ…}6_™að%;ûKôÙz¿CòÎ á<P§B¥?cʾ+¦ö³JÝ[œ¿Á�ÁZ?‚í,ü:\Â^Pyw?}ŸÐñÓ°ã°¯;· ßµ|Æ×æ�û1ÇÍæŒgðÅië³ý¥–¢úÏÃ=ZoM.s?=¹Çý1$=:ÀWaðÇáGü!w·zþ¯~Ú¶«¨c̺uÙÂÿ &NÁøö‚¹ªbh¯k_Ú6æš³Zêúô=*9^>O €xeÒ’nI«Y'k-îüÏwp¤c=*ÕTzÕºù(l~ÆQEPQ@ÿÓþþ(¢Š*EÅME@cÿ?ä×É4ý�¼A‰oüðÄòø#VÕäj1‹X¯´ëÉ„óæ²�Ç‹Œ*©š£gç߯>¾¨‚‘ɪ„ùv1­B3VgÌŸ ~·…¹uâÿ˜Õu¸£†Xd+º;XG—n��¼üò>>y úoŸOóùSDxÿ?ýz˜�:Ñ9¶ÇF’‚²ùü*J(©5 a'nE>ЬÊ}ÿKV( >còô©v-:Š)¿+S©2(/,ÿŸÿ]¦¢€·Ö“æ þE>Š�ó¦ìjšŠ�·Ý§äRÔ+·½K‘P凂ÇwÞ§¥ä=Eóÿv¬ÑLWýÜb¤þÂ�E7ø? …s´c?•X¢€ òÇ÷ÏçK÷GzšŠ N”˜mÙÅIEG†ÝœR*‘RÑ@ ù½©ÔQ@Q@Q@¾O¼)Gæ`¿6kåO~ן<â9|3ªêl׿—1†'•#n…]‘HÈîâ¾k=âLYSQA=ÇuÔêÿiˆ²ü0øIªø–À…» ¶Ïüõ”ìSÿÎÿ¿ŸéYîä¸ýë7Ìsœ’y9næ¿gÿjkŸ|Pø7§ÞÂGm¥é—wQÍԊϸVù>NAëøŠüäþtÿ…‹§à4ßã_À?J|?9ÍéB…�(%mR½õoCÉÇÒœåîH¥ã�ÚÇ_>Øü9×b·KKd�q$žPØ›¹Âã?6¼'ËjúþÂÞß4ßü—üh~Ÿù¨ÚoþKþ5üç�ðž˜ÔSÆÍM¤’»[-‘Á[ VZÈùïcg¥{§Å/ÚǼ9§ø[ÄÉm6.$ß �fqÍÍ–À8?tw>Ü顸[Óþ.�ÿ€ÓñUøCð¸sÿ Nöë/øÕåÜ-ŸàèT¡‡’Q¨­%uª]õajÇÜGðgâ ÷ÉWЬ܄†QÎ:4`Hã·#¦+ú)µq$ 2`‚2ÿ"¿ÿáQü*gü,]8cÖÚaýkõóÅßþ|ðΟ7ŒulH°ˆÃ4“£æX×'õý�ôXÄWÉp8¨f“J”,Óºv½ï·Èõ²èME©ŸAîÍKÛšð¿…Ÿ¾üaó¿á ¼ó&·Ç™ ŠÉ*ƒÑ¶ÇÔW¹cý�•følm_ 58¾¨îQüõ%ìòßíSû8x/ö®ø!­|ñÄ'ÈÔ¢&Þu@^Öå3åOûQ·ýô tšþX>ÿÁ<{àÏxŸãOí]g=ƃá5¸¸‹@ФI/õaj[2 ~å½»�Ÿ* æ=ØE|gû7MÅyíQ4I ÃŽùï_E’qv3BXz2÷Oþ±ìeùÍl2q¦Ïã×öšø5ñ³ö†ý�~ê_³ÇƒµOx R°�iöå`†õK‘zÅQ ÔW1áÅÔù!Ã֟ø&ü{Æß²Þxûâ>²ÃP×lþÍ>‡g‡³Ž2á”ÎøÄ³'* ` Ï‚á«ö`[EµE ¼?*¼®àWV;�1pŸRŠJ:ßÌߟT«KÙ%nçð]ÿ~ÿ‚xOû#|wx Ì�øÂWžËg gwÖ[3è£;àÏ<§XÍxì=û"~Ó´Å ;Qý�ì§¶ºÒn¡¸mlæ]>H°ñÉ$äu\Èq°Ý_Þ¯ÇÏÙïáoí/ðúïá_Æ øSMÑî%^{Kh㙇£>7ìM}¨Çjd=?*èX‰Û–碳|R¥ì9ß/kèpö>ðÅŸ‰n¼mea :¥ôQ[Ü](Ä’Ãn\Ç·RÈøúÓÓ¡ÓSQ½¸Ôn…¼{|ë»§Ý<#rìy5èN \bžUN�å§¥a*�êqJm»³å¿‰?²ìÍñ“\ƒÅÿü £k:­©FŽòâÎ7º:~ÿBeÎ=«é/b8Z³€*�å=>•rœ™S­RI)É»<~rkçÍö^ýŸ<«kúÿ„¼£i—~)€ÛjÏgg¿Ûblågò‰2 É<žæ¾‹ Ðôÿ?¥3i' Rªµ°¡QÅZ×9Ï xwIðŽƒaá? ÚGe¦évñZZ[Ä»cŠP$q ì¨€ô¯ø«û+þÎÿ/"Õ>-x'F×ï!RêöÒ9' ýÑ6<ÍžÛ±í_Fdc=©ÔB¤–©‹™žð·àÁ_�ÖRØ|#ð¦™áȦǛýŸk-'§˜è7Éÿ&»] Á>ðΫ«kZ„V—ZíÊ]êƸ{‰’�d“ÔˆãDú î~]ÞôêRœžì®‘ªÍöKÒµë�ñ\Æ=á‡q·S¶�ÞJ&s•£sË| g¿ÄÑHßòÉ¿M¿Ö¾�¯#ðª}¶âçû¨õ?á^¹]¹´¹«˜Ú˜SU•¾éÍ:«/Ê¿1ý+„í§p X~U•ŠaF})LG�Ãê+æïеìõðužˆÞ0Óôé¢]ÞCJ¦sô…3)üq×ÅÑ¢¯RIz³·–×ÄÏÙЃ“ì•ßà} î@BñéOóFÜqù×â_ÄŸø-7Á yl>hwþ#¹”“oÙ¡?Œ È?ïÕ|%ã/ø+ÿí?¬êÖ×Z~Ÿgáíí1yª‘‰î yùÓ|™8È„b¿:Î"øcñ>/†ß žÝ¾ÅüL'•D¸™ñ²5Ép}ÿsŽ âoÙKöŠý£þ<|L‹I¼¸¶M"Èyú„‰nœGüƒØÈF?Ý$õø'�5ÿk­©²¾¡}ªÍ¼Ÿ¿$ÒÌüœrK“ÁÇ»_Õoì…ðMþü±ÑµD�ûnùãPtç÷¸À�=ÄcäÏLä÷¯ê¿¸3)á\Ž–¥$ñ3V»ßÍÿ‘ü»á§f\KœÔÄÆ«Ta­—ÎËæ}ãh~ðÅ÷ŠõÙ’ÞÇO�æšG<"(É'ð¯å_ãçü·ö¬Ñ¼o{sà ì­¼=s3}Ž9m•¤HÐðóÉ+ó“Ó¨ú}ÿ=ø·w©h‹ðW÷&!˜î5"œŸ-Nèâöí#�î…ìÕøýð»ö>Ô¿iÿ7Âýñ¬Ì°¼†í“Ì[]«„�®WpÜ@Ç|ãî“_ǪõhѦì¹_E� 8o.Ékñ_PU)ÚéI]$ºú··‘ÚþÆßð]ŸˆÚ¿í} ü ý¢n,›Ã Μo!…a6z„Û>Ê^@qågä|Ž ™è‡?×N¥¡à×ùPüRø ã/…_uχ>?Y­üE£ßËk{L·Ÿ˜,Õ¾øuê#¨¯ôÿ‚LþÕš¯í û1i>ø‡}ö¯øFÞ ]ÜæIÔ!]7«H¬�ÔÈŽxWôï‹ Óʲ¼>g€—~Í_´N�û>üt¸›ÃCXÑ¢Õìõ˥Ε™.¥¶k{‰×?de1†Lb°¾þÎpE/·>·áO‹ßðP?ÛxŽîÊËAø{á];@¸¹¿¸Š ¶Ü™u;€$™’=þEͰÙ×!…o€Ãª“哲=<§/XšÊ‘ý+øWÆ>ñÎ…ˆ¼ªZjúuÒî‚îÎXç�×Õ$Œìaô5Ônsø×ð{àOÙßRñwÆY´ÿÙ/ÆqøVk; u]O]Ðõ­–ÒÒ#Œ—°ž/2I_!QØ ˆî[ŒѯØ?þ YûB|8ý <ðãÏ� ø«à?ˆ’ÿgh^#6â ûKÝÆ8–Iü|E$¸„ù¹”;†ó0Ž•áâsÌq¯N¥ä•ÿ ŸCšpN&…oœOêŸq#åªÒM:E¸|�3ÉÇ^=³_Ï÷í¯ÿ<ñ·àÛ½3öUŠHtK{°’xšK±eý¨!Ï™�ˆ'•ã|/Br€J’ Àà•¿?hÛgâÕ·íÃûdøÏT¾Ô¼qc…,,á´‚Þ;-f�`½¸ÿk{Äûoúj$ÀIˆR3fÑèÆ¤'ðê|î/+­‡·Ö-ÕÕúŸÔ‚ð¹5Éœ‘ÐTm÷wƒúWò¥â¿ø*?푦ÁJ<_€­%ñOÃ� kWÞ—Âq‹{XŠXÆð5ñ½’3"\ A 1ÉgÊ÷l5–#J„9ª;#ç±ù•,*Œª»]Øþ«÷>? øóöËý¨áý”¾ÚøÖ=55�OYÕ-ôM2ÚiþÉln{‹�’ Ž(¤‘ÈŽG8ŠY…~q�ðUŒº$Þ6ðd>ðv‹&5´³ûlŸ)å>Õ4i9Þ–±¦î3_ÃJjß>:xkà‡ü«ì~1ø{¨\Å¥[¥œo¤Ác­M)† ÍNå´+¤È’@–’œFíûè~?Ç™n'õ<=KԵΌi‡†"ŸÖ"ù[ô¿’gìŸì+ûl]þ×6þ/Ð|A¤[éz÷‚¯mí®ŸNº7z}ÌWq™ ’)8¤Gùd‰Ó)„mÄI�ú€Ýϵ~0xÿö£ý�¿àŸ³ˆ­?bÝ;NÕ[K•$ò´¤»¿Óc½½ž;W»Õµhá`Ì�§¸ãòÕ�ÙŠ_ðNÏø('ÅßÚ[㿈¾ |@m#Ķz^ŽºÄzÞ…e>Ÿ¬†tƒì—PËsx ˜9{v!Û ��ãpû%S–Ñ–çØb²â)ÕÌptíF/«Õ_d~ÜäRÔ[�Ôµ¹òÁEPEPEPEPEPEPEPEP+⫉l¼9yoÃÅo#!÷ Å4JòÊóÎÙwäœä’[$’zšþ–|jsáKþ½fÿÐM4¼WùÛôÞ”½¦ =-/ÐòóO²}(×7²jÂäºEâ=±ŒðÈŒô'Šù³+ÇøWÒói’cþ†Aÿ¢¾p¯ä~?©yaùõ÷ãc>!¸Oò(‘N¢¿:ä�òœüâe}?J2¾Ÿ¥-\«°s±’/îÉöô¯¨¿k[Ùæø—ck3ïŠÛI´H�?*ƒöÀ÷õúWËÓ«?î×Ò¿µ`ÇÄèìgÿ¢E~‘�ÊÜ=ŒŒz¸íÇu/àËåúš¿±�Ôöß´&�.UfŠæ9�»À‰ßæù�LWîâWàÿìmÇí ¡»sÿ¤ï_»ÉÓþ…}jspÜÿÆÿ$zùoðɨ¢Šþ»=¢Š(¨yÇÝÿ?•ME7ø? uPETÆ6¢Š*€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šk}ÚáÄ×ÌqF[/©#µK;5Üûo1¸ >u†«šÓS£Ì¹“ÚÛ?»sùgð÷Å_ÛköÚø„¾Ò¼A}}q0&o-¾Åk 9Ù…¸ €ä$ôNkî;¿ø&/ìùð·KŠO�Þ:Ô§Õž?6D´Ž(áùû…u�à�yyžõöwüóàŒ ÿfËjvoo­xŽIo.ÌÑùrÕÚ8#!Àp5Þ±së_…·oĽGãí]â¹,n^æÎÞò=&Æ�ù_èû`à³.óœw¯æ¬v]C)Ê)ãóªn­Z�DÛ²?Ðü—:Çq/Öáþ’Áá°éÝÓJò³¶ÿ—‘gâ—‚<àÉ¢x SþÖÓv#Å.XuùFÅ26y¯ñlHú’±ìqÿ5ûðÇörý”>xZÏRý ¯Æ¿¬²©¹ÈÑYBä|ëÍ™·ûÇ9ì¾­ñüûöOøãàUÖ¾§öm®§ú5þ—3´l¬8"9ÐàðF¢¿-ÿˆ™ã+ºôåN÷å½Ú]�¼Áý-²Œ­C ‹�J°Z:­Y7ÝÀ>õýŒ¼gÿ ö^ð?Š%6y´‹Tœ“É‘#TÇzšú„?ÎÑ•Æ+áÿØOáGŠ¿gß�0| ñ­ÄW¢ÝÜGisÀ¹·–Cq„ê‡÷… A\e†ým­xºÇIÓ§Ô!F˜Å8Uà¶Ñœzþ•ýç‘{_ªSöÊÒ²¿­µ?ÊN0¥B9ž!aéó>WäÝ×àwtW’xgâ !ñ%½„+Ùõ.-FÐç÷… Õ¾…‡ë^·^Áó…2>QÁ¯åWþ 9ã‰?ðК†Ñ!íæ,ƒaB?Å_ÕwSƒÖ¿;?à£ß²�¯í=û>_Ûh¶~Š|>’j>Üo’d_žÛœ N£fË¿c•ú·�Ü]„Èø�ŒÇBôöoµô¿Ëò?$ñ«„1yÎCS ƒ�¤µõ·Cùýÿ‚SxÃàÞµûch¾ø…p±êfÖ{Ý)qäËyÝNz8O2HÆ2L}s�ßÔïÇO‹ÚÁ‡:‡�5Œ7ٓܦn#ŒzäŽ}' ¯ó´ø×â?|Lƒâ™qs¥x‹I¿K˜dEò嵸‚@Sô1”¿Þï_ÔÅø(s~Ù¾ð–µ%´šZCa·¶†>?´ <�›ý_üñÏ!æêE~±ô¸ÊgK0†qÍzu*]šíäïsí~€~b8Ž·ö%8{´í*’ò}? #SÄ^<Ôug%üîvGoD-î]ÈUæ¾!տঠü wý�ñƒÃš×‡®Ü £ºŠ|u¼.Ý?¼áÞ¾ÈøûðûÄŸ¾ë¾ð&¯ÿìn"ÒµC \‹Ç�’Úù%XØå£o¾2>ŸÉÂoÙ—ö‰ý¯>øWã÷íuñ»]ðö·­øÒçá厇ῠØ]6Ÿüö·²*G²$–Ù䑊„Ž02Y�|®‡Í_û„Òõ>Ï$©“,/.22s¾éŸ±zÇü?KŽøÇá¿Í5¸8W¹Ô#†B½¾H¡œë¥{GÁÏø*¯ÁŸjñxÇÚuÏ„%¹uŠ+‹†Yì˱ÀdU1䟼èŠþFÿn¿†¿µwì#ûBëÿ|ã�+âœ^ðÔ>#Ô.ï4ß²]YÃ;È#µxà“åã‰å¤!ã ü§¯Þ~ ÿ‚|~Ù¾ ðWÃO]|gøug©|]¶ŽãÂúEæ™zVù›N}PÀ."ÁÞ–‰$�…Àvç¿7Áb¸§ë3§FVÝv¹ö8ü ¬4&ã(óÞÌþ¨ øÕ¨k~-Žc—MóR.92}…�`‡¾3Ñ”×Õ¡Iù�WóÏÿ…øÓûSøÏâ—‹fÿŽÿ­¬í¾™ôCÅÖ:‡Ÿc&³Äb±·ŽHÒI?Чú±�  Tþ…ÀbE~¯’SÄ{â·gçÜGSíT0+ÝK~åª(¢½ÓçŠ( Š( ÿÕþþ(¨ÿ*’€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)•(køÆø1ã¿Ø~ÚŸ¼oñ²+$ÖïµÿÛé—:Ä?iµÒµuÕná|.À ÛÇmI�|¸<°ãxßý�sŠüoý¾?à™¿±ÿűâÚ/ƺÕÿÃ=Q-Íα­hò †ëÊDE’îÊhæ†ypâD¸s±7?È+ÎÌð4ñxj˜ZÒqR[­Ñõ<%›ÑÁb=¥XÝ5cœýŸ¼ñ+Ä? -‡Š“Cñˆ¥³‘5�kK²z]äK!"M„Ü”ŒíxÐ/¸|™¿¯fß~ÕÿðPÛOÙçÁÚ�¦›ðÿáv—}¨kšÖ„!´°Òí„2%¿�ã1E#Ü—'dIþ¬WÀßf/�? ´½oOøeñ¾æÎpÑ ;ÂW6ï»ÅÏUiÔçñ¯ã[à×ÙþÝéž0Ôõ}Káþ³­Üx‚Ï·K&Ž—¤ $÷E"�5)ËŽ0&åHbÊý†Óÿa/ÛSâD_ØžðÝ·‡„½Î¡oj# üc.ÃžÄ }òÍk«ÓÁR½µ~GÊæ4iã+昄¯¤O¡kŸø-W‰þ'ø.‡ÿ²§ƒü[á¨u_3û_ÄwØCwmgÀòôØÅãížmÄ—Á€‘ ޲CñìÿñÇö~ð€‡E•®<=ƒ¼iÛÈ�ä�–wi÷JŽîä»Èòo'çrO5sEðíg Yé¾\—:ÕæŸ¦o¹ŒÇ]O?¾M£Æ}+â1¹>eÄ”%ìàì´Ðùž9áLƒ RœqxžVõZéêyDž'ðŸÆÝ?ãÕ—‹%~Åÿ>Mâ¯Ø˜øþ™.¿Ò¡Ð-#°òn¶‚EÝ¢Å�OŒq4jûpzb¿‡¯Ùö}ÿ‚•øá ?³oÂíGì÷ÿÚgÕ/ìGÓ­"ÕŽè[É-¼DP ‰‹¢˜Ìj¤×ôwÿÏÿ‚'jŸ²—‚¼M«|hñî­Œ×N“�9s.åº(¢‘€QEQEQEQEQEQEQEÈøÉ¶øKSíþ‹/þ€kù¢Õý2øƒOþÓÐîôÅ;Lñ<`ŽÛ”Šþn¼OáÍgÂíׇ|A –÷–Žc‘\z#P~ðnõþ}}6pg,HBés/Èò³h6£cÜ¿æÔþÆSÿ¢¾o}iâ/k^ý’ì›Z…á}G\ûZÆÀ«ùmÀH8Ám›±èkä®3_È~$`ªÐ©‡§QYò/Èòq«Þ¸ê(¢¿88‚Š( J”ݯ¥¿jñ�‰ðÿØ2ËÿD×ÍR#'Ú¾Åý¯<­ØxŸJñŸ”ϧÞé¶Ñ$à©" _-ÏA»†_Æ¿KἺµ|ƒìÕí(7éï–³Ïåú˜±§üœ>‡þíÏþ“½~îÅœ Ý«ñ'ö"ðf·¬üe¶ñMœ ýŸ¥Ç7�+<‘ì§¡b_•ì¿mbÙ?v¿Ð¢­r¬­y6¼Õ’ýc/�©–h¢Šþ¶;‚Š( Š)2(h¦îZuRdQ‘@ E7rÓ¨¢“"“åZ‹!GÊ)í�•Ïk6sÞÚ4PNÖÒ¯1ºó´ŽŸ/FÇŠó�â ýäמ½µXüAb‚G³/±g‹´Öì~ôoÓ'î?ÈøëIèk -­cïOÜ㨯?ÑÅàD>d‰¥Ð8pHdJ>ÎPüÕù…ûmÿÁ65ø˜übý”­c¿‡ZŸÍ¾Ó`–5T’cÿîä/–ç™#ÏGêOø,§Ã q|áßÚ#ÁM%®§á{ϳÍqÃ.þQ‘ü@J0xýãW㇅ÿà ß<5§}‚­�±þº#4ýÝ!p„ý<ø�Å?µ–S�&’Ö-o¯õcû‹Àx‘áiñ'UWÖ3‹{5ߺ{®ÇÑ‘þÀ¼á;Ïþо'°ÒåœFf{û– g Xª†ÏR¬àWcÿÞøÃñÃ?ôÿ…ZKyú¶d’æÚNE»$eüØŽ>CÆÂ:>}pGÍ¿­¿jïÛ^ºþËòï4ûBmÓG¼,ß:2HÒÈqÓäqô¯ÓïÙ‡öhÓcÿ_|Nø¯­Ù]ꯧ½µ¶Ÿe—uÞáÜîbHLd¢ Í~U�ðå\V{‡Æd”å 1w”›ø—Ìý�Ä~.Ž_ÃØÌ§‹+®*KÝ¥—#¶�[Õ?‘úG¬ø«Çz§ÄðÇáÚZ�f/'šõŸË‰ |‰ÎpGç]M·À¯k‹Ÿˆ>)º�–·°Ú?q¿’Ãê+óGöRýªnþ%~Ü×^ÐívußÛg�7B·;â’4W"HÊèIÇZýËV9Âý+û'-ÎhâÔ§AÝ'cüÜâ^Åe5#CW(§o'µÎ3Ãß<#áf³“K´k~ÏÏóJ‘eßfãÛ.ß�zW¤|àU|žßʬQ@Æoü�þãñXý¯cøóû;ønM[Ã/W¿Ö­,öÿ¢êHÃÌýÞW÷w…üÌŒüþvq¹1â_ ÿbOÚÿJñ<:mÇ�58­o6ÄY£EHÏfç€sèÙ¯î@Ƈ—Ûüô¨šùm«‘ÓŽ•ìqŠÍ)Q¡Œ¨Ú¦¬¿¯¸þ„ðé �ðó/Ä`r,-?ß»ÎM;½,—¢>zýš~h¿³ÇÂ]/áò[�2æ`6™§“™ÿ ; ÐWÇ¿·~�ñÃâ…õŸÃßè7—=–%¸–5!'™—€1Õ#S�÷‰þè5úžãŒÓ YįÔzSá¼ñå˜Èc)E7 “ØþlãŒ-\ú5~·QÞ£¼ŸWwv<¿³ßì'ñĬ.~%hÒiú ¡û]Ïš¸ñ²=Éãîö¯èN’Ú I…‹åP0=ªÄAU²1H1—ËWµÆü{ŽÏñ¯ŒÓ•Y%²>c�ø ‘Q•<&¼Îí–ŠRå1º¤ªê;~•ñ#íŒ}No&0±�øø‹ûaþÃzwÃÈ�A­|îkí÷]´Ðõ0•#›?†ïÙ#àÏŒÿi= Åß¿f[=oâí§‰5Y-µ¿ëon//nÒâWÔå‚xÊÛº`"`!Ú‡5çŸðKÿ�ðS¿�ž0OÙöñ$6þ øV“Ko7Ž4­;R}?›i 7 ûÐîxãlˆC©ù8oéÿá—ìÅðkþ £ð?ÄW^ ‘ô }º}Nð…2Oq=Üß»ETÁ’A¾;hcä¼W¸~ĶüMàícâ¯ÁŸ§†æñ&©0Öá{8­.ÚöÇý…Є”yλ�ûÙ¯Ï2<«êXªŽŒß4û¾‰î~µ�bêb2øÔ¨“¥MÙYh›WjçÈ?ðK_|eý—þ(x·öxø×%Åî©âQ7‹®õ;’Žu Ry€¾½ îó9‘>UÀŒF@¯Ýd)b¼c­|�ª]è¶m~,Ý]C5�–—.•d-ϘæYn�¼$ŽÅäB‡îÞ:ŠúsHÕìu½.-RÁ‹Ep»”à¯CÒ¿@áŠ~Ê�²sæëç©ù†x�F±§ÊšKM®Ž“rÓª7íRWÔžQEQEÿÖþݼ3ñÿÀ:ãï&}>BzN0§èÃ*ÔŠö›+ûBwc4s#gp?ˆ¯’µïÙ’mÆçÃßHîþΟá^['‚~'|?˜Ïo;ߗ̵9{ìÿ٫뿱°UõÃU³ìÏ”Y¶.�ñéÝw?E•†ÑŠ|œõü;WÃ^ý |g`‚-]b¾�z’<¹?ñÏ“ô¯oо:ø;X ÿ™a1ãŒ�Á“úâ¼|_bèý›¯#ÔÃg˜j«GoSÞU‹:Sò+"ÇS±Õ!ûF™È®‡âmFÓÅvvÓ�=NÎîÞMNÉÌnÀ>K�À�^I¶ü¨+öKàOíðköŠø]ˆþݧ±E�RÓ§!nlåô˜Êà‘8qÓ*<{öàý�|ûJü¶ð�Æ–ÖÂÿÄZ2[Ïi"Gu–ö;I »È3$!ù(ìqéòG…ÿàœ_ ÿg?i¾.ø_㟠FËä>úÅ„ÖùÉ‚ëý ÷ñ¸áÃ’ˆrYË Š“Ã|w~¬éÏø¯ šet©æ„âšN×½¬ÿSÏ¿hßÛ«â�ìïñBk�þ³Ô<+"Íq¤ëºeÔÖ«5´?;Ç$3%ÀK˜Ód{þ|ïLƒ„÷¿‰6¾×þ ø6ÇÇöÖoo¦ézmÔw»–·s@„&ë£-ûÈÝ= {'íðoáoÄÏٻĞ øÁ¥Ç¨éº•´“ˆ�Ë$À�4A'ߎXÞ’{A ùަÕ4í(4t‰æ†8àÄ’4)±\¢KÏ(ÙŽÇŠûü.J«UÒÚþ{Ÿ[2ÃÖÂÓtaËQ=ZÑ;u^gšøö�ý«>xò/Á~>»×t-+OK¿ì¤7Ð\µÔî‰ š—”ú’§— Å$3NQö³&c¯ÛŸÙÏö�ð_íá©î´«i´�wI1G¬hw˜VÊ7ÆNß–H&¼æ9@;NôtOÀ/‡^Ó®õ]oXkgЭ¦ÖtÛIÞÊHãÿVmÑ! 4²Í�Pƒƒ¼rAúÀ>%ñl¿µ�ÃÚ܈õ‹½fM϶ˆÛ ½$Ù^\Ï ±æ@QþÎ')’‰$bDòÈÀùœë‡¨º¬W+׿}÷ ñmxâ!‡ªù“²óZÐÏo—mKPñô)ö¯Îû(´QE0 )2*³Ê�)yUQ’zR½¼¶Ó­$¿¾™!†óä`ªª:–'€ï\€>'|9ø­¤K↠Ó|K§ÛÏ%¤—:]Ô7�­ÄXó!2@ì‚DÈÜ„îæ¿Ëwþ íÿ¿øÛûþÑ>"ýžþ k·šWÁ/ ßɦØéú{¼g]šÞC—×eyÒIr-à9�#Øû ’kû·ÿƒbÿ~ÂßðKï‡ÿ ¾#ÛÉeâ�`OâMbÑÀ kqª?˜-Ü ʼn$¤ €Û*)2)h¢Š(¢ŠLŠZ(¢€ (¤È ¶ÞõÊê^ðαp—ÚžŸo<ðÿ«–H•™Ý$+©PWŽÔÒë\œ-:ªÕ"šó@|#ûzx{UÕ>Çw§@fK ¸çŸ`ÉX°A|zŒûWãOÒ¿§KËkëo³]*É ‘Áã½|ÃãïÙ¿à�¿†5m^×ÃVΖÓJ8¶á„dƒòãüþŸÇž>}1sœ}Ã^áû2~ßÚí/ÿôÿ‡€XxfãH±þÈÖ5ìY.I¶i/p¯œ&eû9Úvñº¿Ï«ö©ÿ††ÿ‚™øãWüŸâjɤø[×ú~�¤Z¿ÏúMÔpÁa!�óúÊá�.qýsÁ*¿å\Gÿ±/Æú3Q§(G—@>#Oø;ßá䉾�zÃû.¯nöÞ¾Äý‚àã/þÝ¿µo…¿e½/áF§á‰|Iö�º�ÅüsGÙm¤¸æ1¿ËÙ÷»×òïÿ„ÿ‚·xKþ »àxGÄß ›âCxŸP‚ñ'[ˆáû0†,ÆD–òä¿^ÕýkÿÁ&¿à°?ÿà¤5ï†:'Á¡ðþãÃZ?öÂßË<7LÏ¿–�-¢ØO™œîäzª°Q­ÿ‚«Áo¼'ÿºøÁá�…>!øy}ãçoü(Ý_=?ä3oÿÈõýzë¾ðoŠgK¿éZŒÈ»®­ã˜„'î†t8çü-ÿÁ>¼)á‹ßø9ç⯇.ôÛY´ØõO„´hch�¾E�Plí…úVTùy@þ›ÿà“ßðT­þ —ðïÅž?ðÿƒ®¼…µ(tç‚êé.Zf–;x(‰´vÁùñŸþ¬ðÁÏ�^.ø3qðcUÔî<%­ê4—ê°F&k ‰-ÌŠ†@sqøWõk xSÃYmü-¦Zé‰+o‘-!Žäq¸„'¶Ojÿ4ß�·†‡ÿîÿ‚´üvøÝâ?·Ä(/õ¯hãNY’-¥Ö|Á7ï"”dyaSøúõª¥°?x¾Á×þñÿÄ-áü_u‹W×u M='mV"k©Òì<Œ�…ÅGÿ,Eþ£iáí~åô�HL_úì`nŽà¡Ìçå,àñ·ÉqOœqøûÿÁÀ_ ÿl_ÚÃÁ¿³]¯ìúÞ—Å—rBš¤—Vó f† gW1‹8Ë«ÀäOµG¿ü6u�N·ZyÖté£òï¬|׈r$¶ç"hˆÞŠ6’FT‡9âä=¶iUIŸ!¯�|Kø!ÿÍø=ðËâõ¼–Zý††âÖpD¶és<³ÁŽªñA"!N¨FÞÕÓR+–ç€~�QE�Q@ #8ËYźóÌ?ßÏõ®‰˜ŒŸJ¡gl©&Gùý*é;E‘%ª6(¢Š‚«Պ(Ã~;ü*Ó>4|$×þëòµ{9` Fv3)Øý¾ë`�¥šÇì�ûKéWÒXÝx]fŠB Ça<‘œd Ž•ýÚ0$mìÏJXâHÈïžÝ«ó.>ðÇ Ÿºr¯7 íÖçô‚ŸHÜÛ�áZŽ q¨Ó³¾�iun÷×Ðþ¼ð“öÁø}~u/x[Äú|�·ÌXtû $Eçyd>9<â¿Pÿgÿø'ïíSûEG¿ûHk—þðô»[û6þmæêŠ+Ëp†[vtÀ’?12Pò7¡¢³r²ÚåF)É&ì�•ü}ûp|øwñb‚š´·rê"kKk«‹kYf³²¸¾!m"º¸EÙÎHØc–Ú+ó÷À´/�|/ûNx§Ç^+ø¥ªßÁâM~ÿF²ÐþÌÐÙÚI§Ço&Ï6Tòmâ�Oû¿2BìÉ^?kû'~Ù>8ëðIáÇø‡ý¡¬.³¦ê·º…­†™öµEHîï-£O=ä·Ú6B˜Œ¹ùJøß‚¿à–ÿ´f´ž¾ø�`‘Ϫk÷×Zó-Ägìš~2#%û[™IòÃ7Î�ú~;œf¹¥i.Z7³ûµIk×sú¯‡ø „èÆRÅãÒ‹ŒuM7&ÓoMÕš¶½O¢ÿm_ÚïÁ_¾ü9ø‡àinõÍ2óÄw6¶ÆÝ¢{Ë�&+�lžP\´fóÉ~œ�C^³û0|Býœüû Ë®ø·^—R´Žk¨uò‘ÏÜú½ìÛ§�aù%ó$yQ!ÀÎ6œŽkç?ƒŸk�†×õmSájêzã­Ãmm§içÜͪ‹¢%+q(ùÎdêvãŠæ|Cû~ÞZ�‚nüM†•cuÿ Sx´èÖSÆo%»•ð1q86ha�ýXé9w%¾Jà„1×uêÓsn6µžš+¿¿ò=Ìf_‘}V=&Áã­sþO]iÒhš‚I Ô7›{›{„ó<ˆáh£�æ�>sÓbÉÈþ‚~|Lðů„úGÄ?†q2hz”m-·™…¶‰ÉCó �O<ž¦¿ tïØ£ö“øÏãxwÇþ ‡ÂÞÓ5[�GPŽ}F=Búây14×΄$²]:ˆÀ�vÅg"m¯Ö/Ù‡ö>»ýœõYR?k:Ήf'ƒKÒ. QØÙÃs(”‚‘ yÝÚ�+�ˆJªŒšú. ÁסU¨Óµ>û=—GÓ¢?3ñ3 “, =–#š¶ü©Þ*7j×_kfî}ß»½OUøÉÛV+õ3𠢊(¢Š(ÿ×þþ*±\�¬3ŸóÞ¬Ñ@yâ‡>ñ6æÔì"iü´Qµÿﱃú׎k³­®ó'‡o^2?åœÃpüÆ?Pkê ƒ â™å“Òºðù­zzBNÇ'.£[ãGÂw^ø‰áYÅÝ´üŸòÖÔ“Ÿûã爮“BøÇâÝ5¼»â—‹þØØØúŒcñÍ}ŒÉÏL×1¬xCÃúÚíXäoïcó×§<ùUVÄAgö4©ëFG¡üjðíøêI%³¹”~\þ•êV¶™©Ä&ÓfŽáze?ʼ_Tø§Ióé/þãþñ‡óÍyõçÃßøv_´[DîW¤–ÎIý0ÿ¥OÔðuu§;3_®W§üH]_†Ç=|“¤üFñV“'ÙoßÏT곌8ú÷üóþ­¥|VÑ®.§Ú·¯ÞOÌsúW l¢µ=w:èæTçäzþE-`Økv¨<Ë –E^»OO¨­Òp3\šY�é‹E7rÓ©Œ(¢Šª2ØWåísáûýªt«�]Qí|Aà»ûWŽAòHº}ôdg§TÔ3מÓ\¶Ô,ô{‰'dÒ�/$6·W¤‹ä�› †X¾~óýÑ_—?µOÀßÛ3âˆ-|-ñsàþ»j»Å–—ka§ýº{‰>HÆ¥d×fG<½Ìâ1Ëm�>çâ·ÁO…?~êºïûû‰<3¤ê7ÖWz%î.MŒðNñ¼#î„‘Æô$>5ëcx®8j•*Åû�éåc›+ðâ�Tå¥H'{u¾íŸÐ×�ÿà§Z¿€|Csâ¿…:%¤–—öP@·ìóI ¶3¿ú¸Ù¤þxTùÎPwo\üMûþÌ·Çí³¢h?üaàKûèa$g�Äœ|íá/ÙzG)ø™â«ýFÈÈEÍ…³ hNóÊSé’ R>cšýêÿ‚þÞžý™,tŸÙKâýñµÑá�[ønæë-ØìwI7H¤³(cRÿ~9lø¥Çt3 CÃüÏÑð^<¾’­B>÷‘øƒñòËö£ý™¤ðŒ~"j²x·û&óJû>·£_ÿkÅ Öˆ?y‰#•#€á<¾\8°k£Ô?à©¿´F§+_EãMsk 'Ò·¸´"¿cÿà±^ øoo.ƒ¬M¥jo‰0ö¾%Ñ%…„z„Año}dá#œ—>¯âÿØKs=Ÿ�–‘Ï©%ÛÉ0.ñ�\yp¨Q”ù¿ƒŸÝ?ø'_Áï ëÿµ_�>*xšÿR¼Ô|9o¤Üil“ÿĶÏíÖ—RÞG�›™ÞhK¹*�ˆ¬ÎOÇ¿¶üÇÅþý±þ|Mý†¾éÉà¿ iúzjqA{ke#\ÙjÜ$ûAó'–X%Ûæs÷,¿^?c_Ù‡ãGÂ?‰ZçÅ/ŠSiv ®iVºbhúl³]•û,óΓOtñÛ¦ñö‰dp‘Î|ÃÒ¾òy¬ëae ²×K‘UÉ)PÇF® '{þ?LSÑE|Ì6>œ+Žñg‹|1à? _xËÆÚ•¶‘¤i�½ÕÝíä© ½¼1Œ¼’I!ˆƒ’ÄàWc_ç•ÿ€ÿÁJ-›ÂôüT6²åÔôõ†ÃNb¼"[£çKõ?Âæ½_öyÿƒ ÿà–¿¶?…5/†Þ<ñ£ð[^Õ¬g´ð“@ª5Äf0ñß[´–ÿ&ýß¾1t¯òÁù? käãÚ€?±?„š÷ü‘ÿtø‰Å-7ÅZçíkñ;E‘&ÓÊÖÑ,.Tü“¡�¥«JÌ’o»Ø~t¹­àôoØçÄþ,‡GøÑð£Å>Òe`�©ZÜÚê¢,ñ¾H[ɳ×ËÞ}×ùÂ&F}ë[DÑõ�jö¾Э¤¼¾¿ž;{h"å–YHD�îIzšÿr_ÙÃöšøû]ü#Ó>:~Íþ'³ñ_…µ…&ÚúͲ¯Þ†D`$ŠXψ®½Å}_‚ðA/ø$DŸðJ_Ùzm;ÆšÍæ§ñÇ‚×Rñ-¸¸s¦YÜF‡Ëµµ·»ßr’\c|§¿–‘ªþöPxÙù=¸öâ§È¯šg�Ù£ág컣ø“ß  ¼ŠÛÅ^"Ô|Sö˹ï Ô59—M�œÇ@ÙáGaÎkã_Ú^ø…ûcþÑš�ì-ð§\¾ðÇ‚|+im{ñ/ÄL�m¨Ëöõßcáë ¤ùí幃ý"úâ,I©�#ty÷ ©|fÿ‚¦þÁ|iqðÏÇ,îüOfvÜhúZÝý»ÿr{}.+™ >Óª?ÿà«°/ÆŸÚü3ð×Ä}/Äwä%®•â [ÍîáÛ¢A©©žB?‚-澩ø'ðàÇìÙà‹O‡|)§xSC²#´Ó­Ò}]Ø|òÈý^I ;ž]·dÕÿŒŸ¾~о¼øgñ»ÃZŠ´ E sØêp-ÄDãx%UÓŒR{&E-~EþÎzÇ�b¯ÚbÇö ø•¬Þø“À^.Óîu?†Ö§3Ü_Úÿfª›ÿ Þ]9/pm +sc4…¥{U™$w0o­ßø(ž±â¯‰þ>øIûx[T»Ðlþ2ê:“xŸP°v‚ìxkA´z�¥¼Ñáâ’þIm­D!Ò)¤(C`Ð¥xÓþ ‰ûx/Å×þ�ÆMâ _J�Ç}ká�7P×ͤ€áã¸}*Úæ8dC÷‘Ü8ô¯KýŸÿn¯Ù?öž×.¼'ðKÆ–z¦»c�q£Ü$ö¤QÈö±Ãuå‚@2y{2~õ{ŸÃ/…_¾ xNø]ð§D³ð÷‡tx–ÞËOÓ¡Kx!�FDL ã©êO=k¢›Âþ¼×­|Uw§ÛK©ÙFñ[Ý´(g‰%ǘ‘ÈFôWÀÈžôÖÓ~U§Q@ð¦¸�ˆqçÀšÂ¯üùOÓþ¹ší•‰85NXÒHŒ2Œ†ç¾x¯;GÚÑ•5Õ0?˜H”,cpÏû#ÿûR> ÜȽ?´î?¸?ÿÁ=´Ý_ÄÓj~ÖÛN²™üϳ´>a‹=B?˜§™¯¸>ü5ðÿÂ�Zx3Ãàùà�í÷ÝØåÜû±ÿ þú?xžd\AS˜A*qM'}Ûíäy¸< „ù¤~K~Ýÿ/ÇbOý­¿ô9+†ý�ПÚAÙÎùÿ¿_§´_ìÁ£|skM^ÆÓµ;51¤êž`hÉÎÇMËœvúÖ/ìùû#迵§ñn§|uMOaŽ) yk ?ÞÚ“Ó'µrf~ç•xéf°KÙs)syooPžºüý´¿‹å©©ƒnÏj}}ÃcÒ nÖ�EPQ@Q@•?ð[(Zø%OÆØbËhäçív¯ÉOø7«özøûLÿÁ<_û?|c±7šŠ|I­Y]C !ã ¿—4yû’Dà4oÔ:Jþªî­ »‰­o#Ycn60È#èx=* :ÇK�ìúu¼vñ“¿dh¨3Üàþ4ã.UÊ€þfà²ß²·ÃOØïþ=¨þÍß,Ù4o]h°£f¹›íѼ÷cå•Ë»Ÿé]·üÂþ Êky‰ƒ|h6‘Üɨö¯èÎþÒÒö#o{ \DOÜ‘CG#ƒÇ¾{&äéÐY‹mãH610zŒt翯z|ÚþgðHø+¥‡ü À>3ðgˆ>ÜxñüW¨[^¤Ët-|’˜x'Îzúz×ô›ûÁÄ:í•ûZxKödÓ> \xAüU%ÌÚm©Ç*B ·–ç˜ÒÎ2ùòñ�àdûWôÙÿ„¿èiÿ~cÿ e·‡4 ´¹±Óíá‘3µ£‰�Ä ôþuS©ÌS_Â_üÂÆò?ø:Câ½ä�¸„êž5Ã!~÷¯Jþí+œ·Ð´[[æÔ­ì¡ŽíÉ-2Æ¢Cž¹`3ùõ¨NÀtuþenèÿà›ŸðVŽßuÍã›}G[ñFŒ– (µÛçkp›Ìxg,`'CÇzÿMJäfð�‡'�î%Ó­Yä9%áBIÉ$ž:œžzÕB| >ÿƒ©<5âhþ¶ý�®l¥Ô¯míãU�÷_h�G¿Árs×8 _Øf±¥Ã¬ií§Ü«…<Cµ”öuaʑ؎•_þ !Üš]  ä~â1È÷Çã]…MNY¥gt~9~ÐÿüI§Ûø†ÓTðýψü;x¿iÖìmáÿ�¸Ã€º�ƒ'ú¥· 4# q�ñ€ùñ#Ãâ/‰:·…þx£Vgñ2£]ü6ñü1°û|w‹;ãÉó1òJ­ßæ+ÎúS�#œq×ñ¬¨t 6 »-£ùxQòg®8ïþq^-\š•Ó?MÉ|Kž—#§wÑßgk_ôkf´kcá_دàÍö�a¨|jø‡áuð·�|F¾·¼û­nÕÜ%Ôq#´jeݸÿ'Ôîþ?4/ÙÏá_í?ÿ9øïà÷íáÔñ„õMsZ’æÎãÎŽ)M¶�d‡2Fè~I=}«ýÒ%OŸŒúÿõ«+ûG[Óª-¬+pNLÂ5ßÏæÆy¯c N4¡È��Î3Z˜ÜD±54¿NË·¢è¿ðToØPÿ‚*þÞ¾ý»?e CðÎïSŠx4‹¨¾×mc}ÅÖœæ0¢\A¾KI‰ßîØs°þä?f¯ÚáÏíSð7ô¹þÓ¡x¦Ê;È ŒIèðL¿Á,2�׳©¯k¿ÒôýV³êG½­øÊãS¼$äÿ¥[ÂSç°¿w‚B4Û?Èö×¶pö�]p/ÝÀ‘Ó)dŠý[øÿ G¨i²ë´³h67r€¶ÚW‡ÄòÇù“Ý\Ë!ì©¢zÉ÷‡äw„ÿàáÿÙg]Ób‹XðoŠ­õF­µµµÊ³öXÜOoÆ5¯¾g‹´¿íGâX>%x§Â—? ~Ye¬´ÝE�ÖµimI.“hû%´yÝås$�†ßåŒ?…Åne Ǫ̂*o«²MÿŸÉEÂ9ŽT¦©e•åQ-Ý—á¢^§èúôÇjš«ìù½êÅ~|~°–}JžŠ¯³Ú™(Ú8LÕ¬Œfª»ã�ÕŸMv‹ð¦ò~• ßY1Ùæ/ô‚úϪȘú×™pwé’Élþ�ó¯ëÏë^ÇEmKZŸÀÎz¸Zsø‘ó-ß�ø'ñCÅ2Üjþø•¦]èÞ!Ñ/å‚ïN¹B—Ö;1ˆ.„É�Ç#ýZ0}7úŸÄ½SþAmqfRÚæÎD¸¶–pZ3 pú¹ìq½ÔWõ ¢ÁeÏŽž“ã_í)áÿØ|Xñ…¥½Þ¹¨M-õ†¤P}¤ÛOdb²Á`Ôƒìûa@1_|Iÿƒt>#Ú]Éuð;ã_�jy6ž'ÒVyB�îìæ�ëöOþ·Çcxc÷ÞÞ��£Ê¸î�8(ÔÑ¢—üâûJý¢¿goøfŸÚ/S´Ö´"ä:,ˆñ]Kÿ:?ŸÌa�ÎÅ1¨ÙE]˜ý-øƒðßösð_Á�sÀ´›+o­¶H-S29@|½ï!Ì„…œà’{×å×�à†ß·×‚µŸí-âO„´×?òñlº‹?ýû"0ïºýøSÿ¤ø¥¤£MñÓㆷâáwZhÖ‘iQöiîçðËû×ó—ø'ŸæØï¬S¬½ši¨¾–ì}‹rHrÔ”ä­Ñlßv)šwÂߎ¾1\|ø#£]øƒÅ7·›k@‚=û ÷³ÿ«¶¶CŸÞHØì�ßbìkþ «ÿØðGì ðöææþxõÿˆ~$Ž/íít)TÄ|¥•’˜ìà$íÝóÊÙ’OàDú·àŸìïàÙ»C“Ãß´k=&ÂæO6ácB&ž^†iærÒÏ/ûr¹8ï_DÛ¾¡*—¹A¦Ó_Ѽ+Jtè¨b"ÕE¿ü9ù—ñ±•Ÿ³~çCgrÒöæ£U"¥¯¹><(¢Š+üs?àà][^Õÿà²_'×Ë¢ñ Aÿùá •¼pcÛËDÀ÷¯ö3¯ò·ÿƒµg+ÿƒðVÿŠqÛ”Ó>)è:v³€|�seÓ®=7�³Æäuù×ÔPóEP_¥ðFø<qÿZýžâñÂÄtÖñÖ�¸O�†a8û8=¿×ùxÏšüÔ­oëúß…5ëø^îK KJž+»;ˆŽÉ!žó#‘ª8PûÕQ_Ï'ü7þ Áð#þ uð÷Iøaã«ø<9ñ¿M³Û«hN<¸õnŸ¼¾ÓOI"qó¼#Br¥vmvþ†èàÏØGâ޾)x+â«ñQ“Q—Hø�âíÍäžU…†«<° €qjgæõ&¸ø%µŸöçìÕwñãPÕ>+x§_ñ}ä§«Çy¨Ë‚ç©iÖö°§¢ )¿ðMxÚçá�Å›tùY¾,xí×ûbzÑÿ‚IßGuÿæøMb¼I¤èçHŸÚçK¸šÆp}İ8ozý"¢Š(òÏþ »¦� à/…h[åê? |wáÛÊ:‹í(´íF<õĺ}åÊ0éО•¹û||øÁ7ˆ>þسÆ�ÿ 7Œ¾ ê7·ŸðŽ,© šÞ‰ªZý“V°¶’LF—~XŽ{_3ó@‘³ |ˆ¿à®³Gsûxàÿ¤øš÷BÐ-»ÝjšÕ•”}d•kôÖ€>Aý˜mÙãöÂÑ®ï~ kb]WK>V± ß£ÙkZDãïÁ¨é³ì¸·‘ä;“cÿºó_^äWÆÿ´/ì7û7~Ó:µ§�~!h&ËÅÚWüƒ7ûL>ñÏ“¥ÝÕí¤Mq.�­AKq}öty­n XãºHä s'Îú�EPMØ´ê(¿ÁøS~z’ŠŽDL�…Ù‘ò¯§z�™1óp)$çò•|;û[ø¯ÇWÏ�~|;Õ§Ð/Ý nqR@€Ê1‘_˜Þ6ÑÿhÙG¸ø� xªãâƒôÕ3êZoˆZÝu`Oõ“YߪDÔsäÎ0y àâ¨xâÆÛ®ÉüOðï]|9ÞðGsh°Ë®_¼d¤§,$ŠÂ0ü/ÊónùŠö?ÕÆé}aM:}û>ÖÞçÆËÄjpÄ,¾¥&±Uë½ö·™ú’%�‡ƒHâ4c!ãùçð ÿÇŸ ÿi sölñ7ˆo¼U¦>‰m®é—Z«$—ІžKyà’dEóWxWBFW%zWèN\mû£Œ×“ŒÂ:5,ÝÕ“_3ërê8ú.£�+M¦ŸF‹8É╞5!A¬-_WÒ¼;¦Í­kwÚZZ¡yf™ÄqÆ‹Évv8PRMyPý£þ+”oè§þß­ÿøåg<ä½ÕCÐÄæXz F´Ò¿v‘îK‘Ú•™ƒ`œWŸxSâg€ ñ—„¼+ue§x‡U¶±ŸP“Ê´Žy–7žL�²0ä9p0¹<Šj›½¬'‰‚‡;’·àw[צáRäUPW=j]ÍHØoÃÒ˜F84Éf�T–a´u¹x¿ÂÞ[øIu+kµÊ-àûL©›#t�7‘½ÛÍT`ވʵHAsOK¾óþýU&娊Ý9Åý‹Vz“îZ7-G…Â�ëTV„û–�P¦vŒþ•5…Q@Q@Q@Q@Q@Q@Q@5>í:Ч°M&Ÿð]/ø'ˆÇˆn¿m_‚ö uo2ñ-�²eá1®ÔÔU*O·�BÈr ”þ³ ÖeÕ­½äâ+Æà««ŒŒ0}A¯¦à¾0Äd¸èc°ú÷]×T|oðN<À¼#N©ö}Ïä'þ ÃÿÍ¿øe¢Øüý¯ÚãSÒ­BÃeâ(Ç�qkÇ—vƒç�t‘“‘¹ÔWÃ¿Ž¿ÿh? ÿi|6ñ&“â{ „ùÅ´ÑÎ1ýÙ#çaõöôüˆý®ÿà‚Ÿ³ÇÇfëÇoßáþ³t|É­¡‹íd’¤ZïO$Ÿúfûüó¯Ê›¿ø7öÓÑõQÿÏ‹<2Ñ#å&ûUì2î©çèkõœãÂÏûfõj�W/ývgâ™V7Œr}K‡úÍ5¢iëoë¹ýbê_ìÛðZ)¼iªÁ øeP’úHíìÂ�Ô™NÏç\7À_ګ´·‰µCðRÕ|%£¾!!£´º¼Ï6ö{ÔÄIóM7 ’� åŠ~%~Ï_ðoVŸo¯Zø›ö¸ñ¼ž$ŽÙ�þÉÓ|Èá|—r‘)CÜGoèâ¿£_ø Â? <%aàŸXC¤i\k ­­´b8¢�z" ý}zõæ¿+â _C÷xZî³ïk%é}O×x^®eˆ|øŠ*Œ{-[òg¡§j±Pãw8©ë䡱úQE@AÑ@ùOÿdý¥(·ÓµM:íCC§Ïa|gµ“< rˆC¯ €~a�WF1í_„ðp^?á�<3ÿc•§þ›µß‡Uk*rWO¡†+àgɪß¾&ø ÛãŸÀ«“{ákæ\ÛÉÍÞ“rzÙݨ'ôÎN’'þ=ÉsŒc߯ÿc_�¿³í;ãÿÙgâü&Ù}§Þ¨µÖ4‹³ºÓQ³èðJ�3ýÉ0JºX7ô•¤|Xø ñCáÅ—Æ‚> Ñõ?\†ò9¼Á{¦Þcçµ¼E—Ïú¶#•ü ô–ð#ý_�Lû U¬>í$Û^¶è~c‡ð�›ã½–_5ú7m|�%øyñC³Ñî~üH„êÔ¤ß$iþ¾În‹qoèÉÜ`‡ð%>Sñ[áFµð·T‰'˜^i7ñùºn£ú›¸ ¡þçT?ì|ÕôÅ¿Ä]Ü­¥¯ÃÍY$pЉö�ìÇ€ÎOA^íã¿ü!ðÇÃËo�ÿü9mßÜ}®òÓJwc¤ï$¡¤.>ÓžZ4ÂãpbAùý¡§Ò·�æÁWÄûL:¶­5fï¥ßs/~�Ù®Q—)æÕ#ölõoÓ·™ù=�óÏÿ_×Õ±Ýn ÷Q_ÊÏÅ_„ú¿Â­j&™oôÍJ?7NÔ ºº‡±Cü:2uCþÇ5ýRÚå-·]¢¿Ó_q˜|M<=|+N.í5³ØøO£ö¾xÊ8‹Ýrïó4¨¢Šü´þ• (¢€?ÿÑþýéi)h¢Š(¢Š(¢Š(¢Š(¦îö§Q@7rÓª½CqmÒm¸�]}Ís3xOKqº Â?Ùÿ ê·-(Œ/ÿ^ª•iÃá‘2¦ŸÄ�?›Ã7Ð6èÍüöSÅIÞ§eòÈåG£�ë^ˆ*³¢È6ȧJÙã?œÉaâ¶<»Æð_Äï ]ø/â^•g­è÷ÈâÊö¸·—iÈ߀Žz¸zÖWÂ_‚_þ iWZOÁï iþ†öA%Ȱ·HZyù^v|Ž€_qQÀÇJõ6Ò­Ÿ>X)ž>Z…ôÉPe4{�Y2’·½mM¼oÏj~¬Èxø|�­h¬•ƒV5�MP@úUš*#¶º8Í=WÖ¤¢¨™I©h¢€ (¢€ þjÿàæŸø&¶¯û|~Âãï…:{j¾K.¹¦ÛÄ Ïy`È£d�ÝÌj“Æ�L�ªŽ_ŸéR«m-�ËÁë@à‘EßðYÿø5WÇß~4ꟴÏüQt¸á%¸{ÍgÁ׳-ŒQ^ÊwÉq¦ÊãÊHå™à� �óå��±>Aý�ÿàÌßڣǛu¯Û7â—ðöËøtÍ ?¶/Ïûó*Ú?Á¦ü(ø¿¢¿ºÚŸþ ³ñî…áßíÏØ×âì>!Ô!é~,³~oýs½µóPºðcý±^ûÁŸßµ·‹¾4Øjß·íö•áO‡úlé-íŽ�|/µ-Mçìð¼J#¶ŽN�39�º›¹oÁžÿðM�Ožñü·â–œðÉâ$ð÷ƒã™0M�“7÷£=Y#[x½’Oáq_Ý­pžð„~x'Hømð÷N·ÑôÒ ?O²¶A6Ö° Ž8cAÐ"(»ºüØÿ‚e xâ§ý•ÏÿéæzàÿcqgÚƒâŸìâïôHu Vûâ�]¸ŽóE×'óõKX=dÓ5Y''Q Ä Œúgö<øãO€þñ¾‰ã mž_øïľ$µ6ÌÌž­¨Iul¯”OÞÜ€zÒýª?dßþÔÞÒ ×//¼5âo ÞiøcÄú<‚SE¿S϶‘•Ñã‘ ŽâÚdx'ˆ”‘èõÅùg¥üBÿ‚¨ü…ü;㟇^øËooÄ熵�áÛË”Q€÷ZV¥�G+Ž_Ⱦ1ƒ÷}Ñ_V×?àªSþ?xcÃ?ô‹Ÿ–ë[¾Ô‡‰õØ¢n¿`°·‚->9¿„Iqs2!ùü—û´ËþÒz¼_µ�íÝðÛöBð{5Ö‡ð–þ×â?Žîcæ.-’AáÍ*B83Ü\¹¾hN Ej��Þ%~¾WË?²ÿì±ðËöIøq7�>¥ÍÝΧy.©­ëœ†ëTÖuKŒy÷÷÷GYåÀÀHÐ*"$h¨9Ú?Ný¸ì|Q¤xïöMÔ<+¨XZÄðê¾ñDW6¢û.'´Õ­Y-§DÊl’Öx[<àŒÐÚ•ùgÿ1Ž r€ Ò?yâïŒ>ºÓ£CûÁ˜ó_j3×dz|>gl§­v ûBÿÁAo,¾Ákû:ÚZj§�6ëÆ6LûþtVÏvÊ?ëÑIö«ÿe?Šßð¸¿á¬?l?Yx§â,6Siš.Ÿ£Å$:†lnJ˜t䜙縺1Çö«Ùñ$ŠŠ‰1åèmQ@Q@FýªJ‡8ÅyÏ�ß—üñ¿ÆØÇTý�|" ÓíØo0ù|Ä*p>|ñïìSû1|@ÿ…íaõçŽZßKÒ¼5¢´ÝÊ’@¨ÍÙ™üÅß°ü‘Æ[=þ�ìh„©©GI(ªv^òv÷¾{ßcùÖÆTÆB´á+8¹:üß •íéðÛ­ÏTøeñ«ãµ‡í'âï�Þ:ð9ñL•¯…®.¼'/ž!0–½˜Åmrb–ošáÂe“gñWëGÂ�?þ7øXx¯á¾¡ý¢±†P$�JŸ~)ã}¯‰Ÿ™•ù™ûübøQû%üÕ> üvÕ´í ^ðv£-½Ë É©�·Q\A_>bñÊ©´#8ÙŠúöWмK⿌Þ4ý¤$ÐåðŽ…â[{+;-:æ?&îðÚݨÝÁÿ,¤�8Ž5ûæ4Çݯ†âœ 9N£ö|Š (µ´¾þë]Þ<(Îk–ßÚ:­¹Gw­õòzkò=cöéÜß²ÄEçþEûì�û`õð7ìMû~É¿f x×Ç~³¾Ö52÷3Hó+JÛÈËu¥}ýûsîÿ†@øŠT�¿ð�ßñÿl¿+?d¿ø'Wƒ¾2~;ø…wã?é7š�›?‘e~Ö#½Çîâ)�œgnêôøsy›¬é~ñj“þW¦�WˆX*Õ8Êš§…X�Ü¿vM$½íÕï¯Cšý¸~|ý‘µo|`ý—·øwÆ ­Co…¬óIöÈ[ﯔîí³;Q‚á“c¹qûGñÇöŒøaû:x"?|R¾kX%a ƦI§™†|¨rì~˜ȯÆOÙ/áwÃO€¶$¿i]ûOÆ™7^ñäÓËÔ?9�R9]ãŠuàŒ�á�6q¿Ô?n½Câv¥û{|+м i¦ÞÝÚi—wz]¾²]lšè™ „˜þo1hýÒ½L×,¥ŒÄÐÀÎnj1”œÞœÊ×I=tVµß™ò¼3Å5rœ»œáé*r©8GÙ$ß$“³mww½–çÓ6¿ðRßi·ÖMñSÁ~-ð^�¨È"ƒTÖtã ˜-÷<Ç Å^y\õöů�Ÿ >|7—âŸÄ Il´XÕ J¿¼2™x�"˜îzÈîxæ¿:>2x_þ !ñK᮳ðóâƒà¥jv’Cpæîï÷JËþ°nM�£8u'¡ö¬�^x/àìaðßÀß´¶ƒÄ/[ÜÅa¢é¶’yëqy H–¦)ˆX©Á`˜l×̾ÂUTåMjågÊ÷V½Õöó¹÷˜Oól*ÄSÅ·Ëó)N<¶w³M+ß},zŽ­ÿBð§‡ô¤ñ_оøßKðôž^5[�0GlðØù¹ØÙ}s_yŒ¿ .¾¯Æ¿íh†þÆ/ÖùŽ"ò îÝÓ ÿ³�Ùùq»Šü¨ý¡¼iûuøÛözñtþ/ðw†|#á¸ô{¹/VòúKë³oäÂ!¬BLp7ž |ËñCRÕ-ÿà�þ°´‘⳿¾¶·¾*q›oµÎämèŸþªô©ð^J”áh·QEÚWÑ«ß×Cçâ/æyu|M:íÔP¢ê&ãÊî�¬­º×sôÿà©? >ÀÞ1µðG‹n<$ŽAñzoúÐvù›™�Ù»ýœç¶x¯ ÿ‚�þÓv!ýšôx>6£6›â™-®SW°GKnæÚiÁ$“þxºs‚¯×Kø~¯‚RÎÐM˜µØýɵòölÇ÷<¾>•øÍû}é_tOØ/OÑg ¬n<5i¯Û$ §Ïö˜‹Èó&ýïÎIÜ¥»Ö|òú¹­eE«M-™êx›K?¡ÃØŸ­b¢Ô Þ‰&šÞÚê¬÷Üýzø ñQ~.ø� VÐ>sµÖmM¥ÁòÀùÄ{Ÿ÷mŸ•³Í|¹ÿMþÃ~4~›¾Ã�ëúßé_}è~RévÊð ~•ð'üL!ý†7ø›öyñF“û.|f”.‘â­>ßYðµá$E‹¸ü÷µºIÚ3þ´8ÿ–ˆ+Üà¥ÇÿÙïþÆ¥?ù×Þ¯x÷öUÿ†�ýƒüuá†û'‹ü= éwúÜm±’á-ac™ÙeØî�Â?ð×À^1ý§ïi|ƒÅèmãú³ûCþÔýœÇ‡müWmw¨Þxšý4Í>ÒÂ4’y&~3‡xÆÅ$sÕ€ï_ ÁC4Û�ƒþþÙz*ÿáÔWLÖJŽºuÿÈÌßîeе ô¬k—´ßü®Ò8•®|?ð—J·x[R½PSÔµ|ö †(Õ§\ïì¹dߪÒß6×Þ}ÖeâF? V®U§·çŠŽŸfZÞÝl“OÐû_ã÷í›ð³à·§ø7QƒPñ‰õU/k¢èÖææõãççòÁS òHÎ8Î+ƒø]û||6ñÇÄ+_„~6Ðõ¿ø‚õKYZxŠÏì¿k¨�Ã:9ö$z šüæð©ûJjÿ·‡ÆgàöŸ ê՜֖nuégˆÃf-¿“¸ìp�¤ã¨OZôÚCà÷íóñßNÑ"ñ埂tY´MN BÃPµ¼¹Žx§‹8DgˆõêG|JôãÂ8S§‡©$¹’n\Ú¦Õöíø³äß‹ÝuW„„š„œTT4i;;Ê÷MØýÜŒ®xãf²ì™Í²äì+A =kò¹+hYAÝ\’Š(¤PQEÞ‚“w¥»Yw7+a Ü\$ž0õ¡G ›IÃŽÜS™‰ù{Wå>‰ÿFøkâ»ÍJ?iÆòÓO½šÌL×_˜"| U<·ý܃çNs³®ÓÅ}Ùðkâö‰ñ�Âqø—I°%%„?™äÈ¿ÂNÑÔsœW¥‹É1xsÕ…‘òYeY�Ocƒ¬¦ü�l¦Ÿjøëâoí}ðãáÿÅè¾ HÞn®l…Ü‹÷cŒm‹8?½)óìþç5³kûA_k>Õµ_ ik©jV–ÒËebn?j’5;có¼¶òË‘´§ý¿ÆxåÃX|þ7R½±3vJ۾ɟ¢aòlEZ^Úšº>§hÙHaÉõ¤&:5>Þÿ‚ãiŸÄ]?Â^>ðTšŒ×Ÿd»¹’ü9´à»ÆÖÑŸ�ýñ‘…äzWïæ�um¨Ú­ý¡’®àAã¿p­‡”>#è¸×Ã\ç‡eN½OÚ+­¬þhÜÜ´ê¯V+”øp¢Š®ìy-€;ô©•úðGíIûkéß³'Æ‡ß n|8uˆ¼cöû�OPMBÖÑtm?MHåžòX&>}Â,^c‘$›=«ùèðOí'ÿ”ÿ‚™üø�ÿý˜~(èÿ~xfçU xz}.Þî}RÛGBòK}u<2ù~fÂŒÿê÷‡ óÐëš/€ÿà¬ð\Ÿ‰zwÃmz×Tð‡ÃƒÚ‡„íõËK»Hµ?A=£¼FLrÓPœ8É€¯jò?‡²ü û<~ÀÿüÀ?¼ ¬øBêÏWÑ­|Ko¬Go}ö=ZIžwU’h†÷ó¤Ì€8WÁÉ„c/3 ó\ýý‡à¸Z·Æ„¿²Þ‹ñ3ÁÓj^?øù{­iW¦È!µµ˜Eq©œ91J™“ËB‘ŠõïŒ?ð]_Ù÷࿈~8é~1ðÖ­=¿ÁÍwHð­´–/³kÚî©ò%…”$.Æ‹ìòyŽîp£#œùoá?ø&—ükönºý•þ?| ðƒõŸüð^«á�CÂ×z¨ŽÚ»Ë«Üßyþb,�wÈšO.O’l®6Wƒ|Hÿ‚ÿÁG~'~Ìvž/ñ·…¼=®|CÖ>/k?âk¨ìÖÒÏO°–ÒYDŽTœþïåOœœ6>Z‰{-„•N§³þÍÿðPß�_¶Ïü'Æ? ¿f½'H“ö~øY»K×üWsÒ]jšàWÍ®•"N°yQ¹]ìc“äMùhköÕ� +䝨¿öOøkûþÍÞýš¾Û$zw†ìÒ)gÙ‰/.Ønº»œõó.%ËN>P>U}n@jã›W÷67Š}w$¢Š) bôøMÿÉ™xoþÇ+/ý7ê5û²½~ÁÁ$Ãøc'þg+>?î¨×^W׊ó0Äÿ ŸÇçzúoöTý¤~)þÍ_!Ö¾Duh5qŸ¨èr#¼:¬¶Ï²¼`¹¡"p‚!ï÷ÿMÇepÆ'„«5;«Ÿ—sâ3~"§•Ñxºó·/ß~ËÌý7ñ6‡£ü ðGü,ßXOý½¨ùq˜nÚ)_Ã�qv‚%äã÷…Û€÷ûÿÞ]\^ÝK{zï4Ò³3Ê仳¿\±î{Ôÿ>/ø—áω.5À?´íµ=é©Ú^fH¯ârÅÄû·eÉ$‡Ã8?ï2·Ðw¥ø�qeâ¿€èúŽ�«Éåù,q6�62Ð]žvGäHr÷Û¿üÅúM}±7â2(ÿ²ßXÇ£}ü™øÏx™Žã:нI¹ÔZ(ùtkõàõ×�.¿áGø�J›_е¦ÞñDWαn÷p;ñÏâÇ?6ÿè†(ó GÛüúø�ľøoáÉþü-œJ×8¶°¼=ÙòÂënŸ\¹ëÇÞþ�¬Ùü˜òz(Î+Öú#ø•ý§†Åäj«¨°®:ôNWº^œºŸÔo…xÞ˨UÌ4©VúuIZ×ûÍj(¢¿³ Š( ÿÒþþ(¯#øûq=ŸÀ¯]Ú;E,Z¤Èèv²²ÚÈArÇé_×Çïø&�ì{ûW|A²ñ·ÆkM_F¹ß‹ûÿ Mom{s1ûÁsðÈÉÔŠç….ôðy\ëÓs‡N‡ò7ŽÿL<ƒÃ¾'˲!¥(ÑÅBRöËUNÍEsA+¸÷’wŽžëéýôÑ_ÇN�ÿƒÁ>¼WàË_|,ø¯ñÒâþÑn´ËÙfÒäXžDÝ�v¹Úq¹XÛŒnSÈúëþ –ý®>?|vý›¾#~Îÿ´n¹/е¯‚^(oÚkS¹’k�?c,1HïûÉ 2A.Ù$%Œlˆ~ç>kVÑŸÖ,eMb0òR„’i­škF¼šØþ—(¯ÍÏø+¯í•ñþ ùÿòøƒû]|(Ótí[_ð—öOÙm5d•ìäû~­ga'˜°K ‡lw ˶Eù€ÎFAüøSÿ8ÿƒŸ¾7ü2ðÿÆ?…¿²Ï€µ_ x§O·Õt»Õ»X…Å�Ük,2ˆåñ H¡Ñ�Úê¬;�Hé?°Ê+ù§ý—àºÿ¾.þÏ_´Ÿ†¾;|8‡á¿íû;x?Zñ5߆/|Ù,/N±’x¦UÞ³ˆ„â%•„¥‰â™„™OÓoø$gí•ñ þ ÿóø{û]üTÓtí#_ñhÕ~Õi¤¬©gØ5kÍ=<¥žI¤£¶VmÎ~bq�€?H¨¢Š)¥-E8 C]€qP}ŠØs¶®QI®„Ê)îˆ|ˆ±‚=ÿÏøS¼¨ý:Ô”S*ÄB(ÀéÖ ›npA#\¯ý þ7ø/ö~øm©|IñÌÆ K÷\%“¢Eårîpp=p9àðS¯V4h«Éè�78ͨ`0ÓÆbeË+·ä�9ý«k߇߲—ƒWÄÞ/´]Ü·•g§ÄËç\8Æý ýÔ�H,ØÀ ±UjŸ ¿n/ÙëâWÃeø›§ø–ÎÆÆ<,ë¨K´�HGÜ™]ÆÓžkpT‘Œÿ#¿´_Çï~ÒŸnþ$xê`CåÚÛ¡- ¬*NØPœ}ÒNxl’8¯ ä°NvçhôÉèxè9¯ìÌ›è»F®WNxªŽ5·vÛÓþ þXq7ÓûC=­¾Š–iÿ3û+¼ÿ‚�þÈVBÎãÆv¥³Œ¢I"ÿßh…qî+Ý>þÑ¿þ,ÈÉðûĺv¨Ê1Û\G#�þÒÜ¿ˆüãþÇÿ‚{ümKo|TÑæÐüTê#�å¿™ ºlc1È®ˆ®q‘Ûi<…û âÏüçF´DñoìÝâ[½+Q¶Ì°Ã{!tß��ñ*ÉÎóþé¯Çø�€r\+ê8г¥>ò^ïÊÝèžñ·‹s|ÍptiÖ¦·Œ¼¾Gï,7TÞŒöÁþUj"HÉ9¯çÛö`ý½~/ü ø›ìÓûjG4¬‰omªÜ}ôÜvÄgqòÉ ƒOÉS÷ò dýöÓ.#¹³YàmÈü©Îx¯ÌøŸ…q9]U ¶q [5äGøqâV ˆ°îT}Ú�ÒQ{¦kç�)Õ`céRW̤…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Wùƒ²µbŠÎp‡ü¤t¯ÌÛKáWÃω~øCÅúE¥Ì:¶«|/&x‡›$VšuÄÉ�|á ˜%wÀ5ú„Ø9ó—íð×㦃§ÛC©Üh:Î…|š–—©Ù„i­ncB™Ù )$nŽé"0ãb½Lƒ1ú®!OmûÓ_…ψñ‡žc—J‚‚“ºv}lÓkæ•�ÍÿÚ·ö$ø_ð[ÀÓ|tø?y}áû��.¡Öom“PÓ×KQpó—†N3Âþ �À¯Ÿ~Ê_³gÃ?ÚóSÔ>0øÖóY»ð¾Ÿ?Ùt=PÖ¯nníe‹+=ÕÓý¤ÉÒžp1ݼmûûÿ±�¶¹â+O~Ñ*Ô>"ÞiÒ lí¯Rm2ÞE9IÆÜ,m(þü¦B?‡ÐüJý‘<5â_¿Å†z½÷�|[**M¨éEÝ"}ļµ™^ …·¦áÙ…}´xÆK õiU|ý%Ùvïóè~)WÂ'üøCðöý»ð€4+[k'ðd7øÚd’+”¾’0M)wHÛiùÆBsžß¬^VÁ…LûgÒ¾Qøû;^|1ñ.³ñ'Ç>#¹ñŠõØá¶›Q¸†+a­¶|«x!ˆyq¦]�¿¾ç&¾¯I~_‘¿úÕñ¹îa,EDÜܬ’»¹û7ðÿÔ0Ò^ÉCšMÙ[DöNÇ�~Ð o>1|ñ/Âû ±c6»§Ïb— ¦A™6o* “ŒôÍc~̯¾| ðïÂMFñ5 ´[o!î#ŒÄ²�ìÙ ¹ˆë_B³äñJ²Óð®/í¿Wú­ýËßçkCþ¯a¾½ý¥oÞ[–þW½�„¿mÙßö¨ðÞ“>�¨ÿ`x¯Ã·‰y¤jéw·ÁЀÊpp†tCꦗÇÏØæoÚ'á·‡źËé^;ðÆÙìuý63—u„óa/þ®B€ìÞ a½~ýöÞ@ׇâ<]8S§ ü·•÷^�±áæeXª•ªV§wU%/;lýWsò#Ä¿²í­ñ›F_†~)YÿÂ+.#½F›½åä#ï#¹;cÞ8;r=TŽ+Ù¾?þÂÞø‘ð�žø_¨?…oþËoq ÝG˜!’¸&Fðø»îç�B·,|Èì)Í”ùÏÓ5×>,ÆsÆpir¶ÒI%®úyže/ r¯eR�DçÎ’m¶Ý–É?&~Tx«ö@ýª¾?xb_þÑÿmBhv=¯‡ôÿ²›™ýÛÜK,Œûðí WÆ ^·ðÏö.ÒôïØú?Ù+âÅòë>D°=Õ¬~C3›ˆ�Œ›'*Sª‚ƒŒ|µ÷ô„mÚF=ª@X°ü=ê*qV.TÕÒŠi¤’Vk©¦Âì¦�yb')Ê.-¶ÝÓèü´?!“ö9ý·¬|~iß­�„¼¿²¥ÔšnuDµ#P“x*|¡÷n÷+Ö~&Á=ü¯~È�~ËŸï¤ÑÓO1\ZÞH»Ùîc1ä�Sfï4–Ý�¸ÏʸPµ÷§�~!ø3á–„þ(ñÕôz}’²¦÷ ijtUD Ì}•x=xk~Ú_³BŒ·‰{qþ‡{ÿÆ+é2ú¼A�QÄà°ò’OxSÒþvVgÄçYOåSž7ÅÓ§9Bܵ*Æ-C¥”šihhþÍ^øçேƒBøû¯Ûx�ZIŽÛ«h<…ò D *îpA%ñÎj‡ísð*ÿö‘ø®|ÒuÓ&Õ„\¼FUO&xçå!9ÙŽ½ëÙ~|OðOÅ�õïÝ=õŠ9‹ÎkyàBè_:8÷c¡Û�Ý6ÉèÝ}«äq8¬VÏR<•böqµšþïCôÌ[—cò…‡ÃÔUpó‹÷””“‹]$´#Ê>|=¸øað—Ãßo'rhºu­ƒN€ª¹·‰#,$€ÛzWççÆßø&Þ™ãßÚ¯Aý¥¼ ªE¢=�ý­þ¥f`2-Ô¶²£ùˆw¨G’4Úÿ)ä+õÝ»õyrG¨ O-â,f´ªáåg+§æžæ\EáîUša)`ñ´ïm8÷Mm©ùÙûG~È<|D�õHv>™m§XˆtÛY ,’F_ÍžFŒº!g]›‰_¼E~ÄÆæO›·jcgq-ôè`xÆätä¯ �•Òí~lj›øE“c½ª¯ËQÞQ»I½¯nççïíOû!ø£ö‡ø)áߨëÑé>$ðÅͦ¡oz± ][DÑœ¦w%‹’A œ×%ñ'öCøÙñ¯á€ü)ñ_ŶW ð§ˆ!Ö//`²ÄWqBòl…cFŒ!òÝT¾1‘�µúb9ÁÏn)¯æœ…ãß­cƒâŒe5 /q¶´Ù½Î¼o…ùMzµ*NõŒµvimuÝw^¢¹(g˜ŠxIà#?ÝÉݯ3ÚÄðf][5§œNŸï šOÉŸœ´ìOâ|W‹öŠýŸ9|hñö‰âßÛÆPxƒLðõÂ^Zhše�¶²{„ÆÉ'ÜI“ié‘�¬Àþ­`íÛŠoJê£ÅX¸RTÓZ+'et»&x¸¿ òºÕÝy&“i¸¦Ô[]×Pü¸çŽ[¢ŠðOÑBŠ( Š(  ƒ#ƒ_�?·ïÄËý+áÔß |')†û_ˆÇpêØhíå~G9—”ÛëôBBXƒÈøûSx«Ç> øÅ¨ÚøÒÊ Ìÿ¿·•d8{V%#;Aù?Õ�Ëí߃_¢øUÃÔóÒ0ªÖšÛ¿ü1ø�œ[S+ÉZ§uÏ£k¢ÿ‚x7Á�ØÅ>(ðO‰�5tצÖ?*þ|%ñ¿í#ûBE«Ïs Ô/¯´/oS�* ~vœ|ˆ>ïDûµú âyµ¯ƒ^6:&6´aå6>W‹ø¾Gß5öÿìñû4øCö{²ºµÐç’êêù—7 #O»ÛÆ2O×ððÏü§ã&Ÿà+­#Bðõ„wúóåŸ{ac·<|ø9˰ù=oZÿ$|zú5T¥ÂÐâ Õy1´¥Ì�û½¯ß©þ•}°¸™f++�>jµò·_Îçãükà�†üMeûSü3·òü=â×Û¨¤Cå³ÔݸáØt@[øÅ~¦Áÿm4øËð¿þ�nSûÂp¯Ù·ŸšêÃ� üÄÃÄmþÎÃÉÍ|Ñ©|[ŠOØ—âW‹?i .|Ö¢ÚÆÚ7o´ÞjoÌgÞ0…!ÈVÆÝÝŠüYÿ‚[¯Ç¯ˆ¶çƒtÏ‚±Çeumrn¯®[{ßü}™Y#%FA2:r3‘ý—àÿ癞YƒÌ±‘³©y_®×^N×?¹¸Ž†7à|_gsýö^ÿuSud¯fû¥£ù=Ïô$®Oj·UãüjÅEæ,· ÅÔôë-[NŸMÔ̆æ6ŠUäe$XqÏ"¶¨ GÈ_²—ì9û(þÃ^½ð7ì¥à«Yj“}¢ðÀÒÍqs Î ÷W-Ä�7�¤"0p€+ëÚ(¥%p (¢˜Q@2“RÑU�èEY¤È¨Ÿæ;i¸àœÐ¨ÂíøWÿö°Ôu_Ùšn•o%ÅÅÏ�,bŠ”¼’;Øj ˆˆ2K18rM~é©ùFGç6ø} øöÊÒÛY…Vm6swar&šÒëÊ–qndGD”G+€ÅšÓ [ÙÔRfuàÜGò•û>þÏÚìI£ÃãOEo¨ü_¾‡Ì·‰¶I†íæN ê�¨:p†!Óý´¼¼¹¿º–êþW–i‰‘ÞB]ÞGä’}IäŸZýѾÿ‚füÔ/$»¿Öõùf™‹É$“Û3;¿ßb~ÏÕ�,{škÁ.þu]o^ÿ¿¶¿ü�_³dk•`éÚÏ™îì+qdžÜKœâ=¥£-•σÓ5ê¿ >,x‡à÷ˆÎ±£ª\YÞ!‚þÆ_ø÷¼�¸xÜø?#ÿg9ý€ÿ‡^|û¿Ûzñÿ¶¶Ý¿íÞ oø&'Á5|¶·®ˆý|ë|ÿé5zXÿ2ŒUajA¸µkXù|·Á#Áâ!‰ Ò’jÖ{øËÁZÞ�Äÿ…“Iwá›ÆñžfÓ¦oùw¸ë�ÏÈý$O×ú±ù¬ãÇQ�ʾ+øKû ü8øC®Ï©h¾¯wk} [ÞX^5´–—18t(¢ŠÿÓþåÿh\‚ñÇý‹úŸþ’I_ËT?´rKðÆñD¥Ù´ H*¨É'ì²`_Êõ}¯ ÿgøû`×üdy3ÿ§3ÿÒÑý=þÉßòmÞ ÿ°\?Ê¿™�ø5kþFÚïþÊ(ÿÐïkß?iOø/Ã_ø&‡†<û9_|0ñO޼Y«x2ÏZÓ”°­Œ²\Ëso ¼’iƒo·ùÊBä+ x­Ïø6‡ö8ý¢¿g/ÙÏâ7Ç_Ú‡B›Â^#øÏâvñ Z%ʘ®-l•ÆÓÂãÌ�ä’iqŸ:ƨX)$’Åÿ^§ûMà·ü‘¹OýƒÐÿÓQ=Ûþdÿ”"ükÿ¹oÿRM.¿3`?ø9þ wû;þÿ~|HÕ|Eˆ<àýEÔ’ßG’X–êÆÎ(& pC¡ÁE~�ÁË—Z�ü;ãUžŸO+‘©f x�K'zŸ ¯eÿ‚X~Í_³ö©ÿÑøªø£À¸Ôn~xv[™®´«GšI_N€³HÏâÄòIä×9úaüÀü×|Gûzücÿ‚�Á^üá­KBøOâ‚'ð–‹sªD°½íÌ:%œLP+:±TҼɂ3ÌȤîâ±ÿàŽðNø*—íÏÿå𧈼ûPëŸ~h ªØø/IðÔw1Ëÿ+©ïnïf²¼°}Ÿn–hSsLØC…EUó?°ßø)v‰c§Á/?h/ øfÍ ‚…¾+·¶µµŒ**�éR8ã@€ª£Ø ø“þ ¦²¼Óÿà‰ßm/áx%Qâ<¤ŠU€>#ÔÈà㨠�jü½ý€à¯ÿµ‡ìÉû&~Öß ¿n©Ï�þ"~ɲù6šœŒÍý­ö»‰¬m#¸Ÿ $‘ ¸‘„ì¢V¶”dJ—ö2ñÏíûð öT×à¿ðPŽú¯ŒtCÁ÷š¶›ð¶Óηѳ¨ÉzGÜ�m-Ýä1ÆØÈѬ»Œ®á�üÔøÿ¡km®ÿÁ[ÊÙÎ|ûŸùX�¾qýºÇåãž9ãµDß ?c­Köéÿƒm¼û#ZNºn«âŸ…ú"ØIr Æš…’[ßY ¸%c76ñ RU  ÌOÙÇö0ÿ‚åÁYþØþÞÿÿkcàl>0C©ø[Â~Žö+%°Üßf7ÙßY$qJª­�]Èñ0iâV¼÷þ ƒû]ÁYüÿ‚ø¯û-~Ü>0Ôüw®ü7øw«L¾†`ºv¥sb–3é×ðÅD%»‚HÊÌ!YJL‹æ3ƒØ~È?ðpÄðLÙßÃÿ°OüËàïŽ4?ˆß 4èü=§6™ii-¶§e§ÿ£Yk‹›a…‰#ˆMÚ!”'˜¯ó¯›¿à”?´‡íAûBÁ~>.þÙ>jÚ7ˆµ¿†šž¯¥øHÆm®ZÊÞ-6=&Î9/ æ\A*&“Ê�ÝüÌ"7oûü@ý¯¿à«vZïÆÁCu„ß%Õæ‹Jøt×išoË�³¤vm¶‚x¤å6AkpÑ_1ÉZý¶ÿ‚¼ÿÁFk?ø'×ÀO‚?±/�üu¢ê>*Æšv§ãÝ]-´½;MŠ7:™ŽP- ,¸G“rÇR1Bûqøû|~Û_ðHoÛ3á?‹l?h¯ÙÅ_ ÿk››k›;[-ÌÛ3ë’+ )nÛíq¼†37Ú,à®R=ØW>ëû^ÿÁ1ÿnïÿÁ4ÿdÿÛ?ã‚.þ*ø÷àõ…Ì4ðV¯ö‡¿»ðÔ—ò^iñNˆVéžÚÌ,(¹ž1 ùO’æ€4h‰?l?Ø3á<Ÿ¶7ìíÿ/Ò~6xÇÃ�ö±à«ý~ÖöÎú@¸ŽÂÊmRò9¶n?º[x]ãâhåTCý™ÿÁ?ÿk=#öéýŒþ~Ö:5—öjøÏJK«‹0w-½äNÖ÷�£udŽæ)à•�øi—ö×ÿƒ}¾ x~ÏÁß³7ì1â/üW¿e†? ùsF‰0�G*5ŵåÔí·øvZðGÎ?½�ÙWá'Ã_�¿³Ç„¾ü"ðs|>ðý•ŠÏoá·uwÓñ�ÜöÒ2Ë:i\9I]7gcÅ}_�_ðSü)ñGìÓ¬øŸâ”3M‡!{»/"f„‹¶_*Œì;Ù‚|ê@ãú+_’ÿðX­bçOý”šÆóSµŠ\wEó$Çí"×Öp%TÍðñƒ³æGå~7b)ÒáLtªÆë‘éøÎw€e?ŽßþÂåðf‚ú†•çËnc‰·Üb n�EòäíÊ9Sò¨Á¯¼³½Ó.žÇQ…íåˆíhäS©_á ò÷çùWöUû x@ƒöBðˆ‰ RéV÷_í .LøÇO�Í|�ÿ1ðOìáà?…W^/ø•¤[j:ÝÒyVßÜÞI;tı•fDûÇvWŒc$WõÇ ý ñ/9–S^�:æq�·VÐÿ58óèu�‡ G‰0ØŽGÉ4öÕ_Cù|Aå¸ã�ï1þ}:ý_ý‘?à©~ ‹_ü`y|KáÔöëËXÆÊY¿z€›# aÂ×äôŸ¼$¯B;œ~B¾Ôý‡ÿf ¯Ú;â‚�m|5¡²\jR/Æ~HúÉŒEÉê~Ýâ–Y“×ÊjWÍà­ó]¬-øžñˆháxz£U%+[ìÛ®�¬~ñþÙß>~Û_²ì~'›ªÙZ6¡¤]¢4RÊ fHX+þð (8Ä›OÝàØÿ‚Q~чÅï€�à¿NeÖ|':ؾæÜÆ×`Í=~Lœœ“úá}û+ÁqèrÅ0ÃŽ8Qvˆ¢UÚ‰Œvýjü.ÿ‚\gÂ_¶WÅ�i‹�>'¹/AöKÓ]8å$lWð†[^8îÆaZº¢Ô¡ä›µ�õÃ<ÂK%ãL· &.-¢m%­�èfü?¥\ª2/¨ãö«õøáýd‚Š( aEPEPEPI‘KQsëþ:“"ŒŠL7­oZ\Š2)0Þ´šuÜ·¥:€ (¢€ (¢€ (¢€ (¢€ (¢€ ®Û—…«PMŒV–@p8éV¨ wÔ®Û•‡ð«Q@‚Š( Š( Š( ¼ßâgÄÏ |$ð•ÇŒ¼_?“m Ç™4„|±D¤Œ³~@rH�|Mø•áO„ÞŸÆ>0›Ê·‡„Aƒ$Ò»Jq–?�œHüøßñ·Å0>$ñy6Ðå,쑳¼^ƒ¦]±ó¾O¢€§þËÿ²æ¯ñËW_ø…d´ðµ£âYWåk§^°Â{ÎÿÃÐ|ßvoÙö_Õþ8jëâ,–ž´}²Ê>W¹eë GÓ³¸éÐ|ßw÷Dд¿ éVÚ…n––V‘¬PÃá`+÷O�ÿGÜãßñ{r£'Ì”·¬û¾ÔÖÚZér¯u ¢hºW‡4›}B·KK+DCJ`( ­ê(¯ãÎR“”�Û?ÔÚ4aN �5d´Ih’]W1ÿ §ƒóƒ«YŒÓxÿøªèåÿTßC_•¿²Çìáð¯âç�µøÒÎYn Ôæ¶SÏùj‘°ùT�Õ�5&‡éŒ>/ð�ÄëmoªZ<ŽBª¬ñ’Iàü…j>§§G¨&—%Äkrë¹a,¡ÊŒò©vô¯™ô?ØßàO‡5Û/iV u§ÏÄ$ÜÈ@’& „‚pp@ã¥q0D?·…\�Ÿì?öî€>ࢰ?á(ðßü$ð‰}¾ßûSÊó¾Éæ/�åÿËÎí¾ø­yæŠÖ¸�‚G–f<£©>€ ±Eq¶þ>ðMχÆÚ½›é1­x³!€…Á�£’Zù7áwíeyñŸÇ>/ñM¯ö»Â4¯6XR-§;ü§ßÛ<šû’Šùëã¯Å�Ÿ 5MCA×mmu[�9î4Â%ˆÉ.GÈð«d8=°ª¿³÷ÅíÆ|=e¯kÖ·ž#º¶ýô&X¾ÐÒ.âÙ‰pA 2@^ £è®kÄþ/ð·‚ôÿíêúm¶vù—,jO ÜFO°æ¹oüdø[ãÛ¿ìïkÖw÷#Ÿ&9™�Ô„8$a@�Edë:Þ‘áÝ:M_^º†ÆÒ,ošwXã\�£,Ä’@Æø¯âçÃ/µ¼^*×lìšíU¡Y%]έÀ`£'gûXÛï@‘EPo”ûWç×íóð#Sø¥ð¾_xF#&» #Ï ËÏ–9'(;°Ùüf¿@ÇÍ�J‚E ¥O ¯C!Îq~.ž3 ýø3縧‡0ù¶¦¯ #ù”ÿ‚}þÚv~,ÁðóÆw"=ÄR‹}Îp°]tŠBz€¿~åL«,>IÁví_—~/ÿ‚EþÈþ4ñn¡ã;Û]JÖãR¸{©#µºò¡#o!iÚ¹è:ÇÝâ¿H|+áë ønÇÃv÷SÞ.Ÿo°šæO6g �äs�Îz±îkí¼Oâ,·6Ĭn 2’÷ÓÚýÏ�ð‡„s,�òü[N û½íØ«ã_é> ðÕ߈µ6Û ²väðÏrx¯Ãkÿ‡Z¯íñ^]Fùüû­Nfb@$EŒ|¿ìƼ~ÞÆlþ"|5Ñ~&i±é:ô’$1?˜3·œcæàç?�|mðt~Îß|}ñ[öøeq©ZëÞ []+]¸EhÔíÞX¾É7Râ!»x)Æ+üèñûÁÎ'ã<÷‡STòúnò×VÞ÷_‚?°ü4ãì/áª×£¬ODí¢_Ö¿#ùxÿ‚ þÑ'Å�XþÏ? '#ÀÞ kËq}ÒâvànØrŠz�ÇÊù¯èþÿû ÛþË?G�¼]gåx·ÅéÍБq%µ°èöÝ2 ‚^A×{l9ص³àø"ÿìwà¯Xx¾ÞÞúîm:á.+‹†0³Äû‡˜œn\öè@ÇÝâ¿\�-²¤aB�¢¿¥8K‡+àfåY¤’´RÙ%§åcôßünÊ1¼=…áž„•8ÝÔ”•¥7¿âîß™q#@0>•JòöÎÀn¹�GîH«ýxòïíSðÏöƒøIàgUKõÿIÓ§qþªæ5ù2z€ã(ÿìZûÛØþ>Í+T£‡•J1¼’Ñwò>ƒ_èL»¾Ô€rOjd~(ðîrunGüôNß�ž'ðõÞŸuá/[”–&–ÞæÚaÜ’#ŽpGó�ÀÏ�_ µ„n|2Ο/ïô÷'ï[ž€žå1°ý=ë·#ÃÃ7Nöhü€[¢ÚI+e®ôa„‰ºä›BD-ÿLÌ<äšþx¿à³?·Ìÿ¶¯íEs¥ø2ó�üæéš/–wrùÿJ¼ÿ¶åf9òR>ä×n «ë]¶‚AæOw8³G�=b%sžÛÕ1é_HþÏÿð\ŸØÛã,±i~6¼ŸÀ÷òcäÕW0nö¸ˆ<`{Éå×ã¿üÓö ÐÿiËøÃâ4п³¥Ð­‘I7qþúâ>~ü1”ÛÇW¯Ã¯Š? üGðâN½ð³Åñyz¦�{5�ÀÇ¡'=�0à÷5æPâ¬Î�ck%É;Ù~_y÷ù—ÑÏ€1Ù¶#†2·8UÃ¥ys]¶÷òÓKé¡þ—^ñ÷‚<¤Ã¯ø3U´Õl¦ŽâÒTš'ì² v@ �Õþe? ~7ü]ø-« sáG‰µ ~ µ”ÏIþú!ØãÙ†?Ù¯ï÷þ áã?c?øûâÝèÔ¼A«X5Ì÷>TqyŠò»BÛ#ƒ÷[:ÏZûnâˆcï«5¹ü¡ãoÑïÁ´éâeYT§QÙigµõ>æbÃ¥IQüõ%}Yüê?•OED¡u` (¢¬Š( Š( ÿÔþý$Ž9£hePÈÃHÈ öÇ¥~HþÔŸðOÔdŸÇ?³ô+ÌKÏ£ecŒ’ykfbª˜ÿžGtŽ¿\¨®¼6¥ sS?ñÏèýÃ!å?ÙIC™/‚qÒ¥7Þ¶�.šqv\Ñv£Óð©—oðÓª(È$ãÐPOeg-Ê^É 4Ñ #•”QøUª(  ©egËÞÅ ,Ò€Ì'©ÅZ¢Š+àø)/«ï‹²§‰ôm"-öŸêVê£,M£yŽªûÍuîE}ýXz¬qÜBöÒôq·žœð?Zô2œÒX,UËOî>kŒx~9®W_/–Ó‹Gåïü“ãU�Ä/ÙŠÓÂSÎSð¤Ïc4gïyDï�‚ó…(vœ£vùÿTƒöˆÖþ<\ë¿´{«? Z´ÑInm²FðÈYVi�ÌÊØm¸R0{ÿÆ¿†_?àš´+~ÐlÞûáþ¶ø½³Œ‘*퓘 “o.>\ín8oÕŸ…Ÿ?gÛ3ÁLú=ìO4>]Ö‘|¨fEèVkW, Œ‘¹~_Fã�è,¿1þÆÍàé*”jßþÝoFfY/úÍÃßêk]áñ4-e²œc·ªµ�ãåVmØ$gvI½»!îSŸðJßøSZ¯ÀM>ÛÀ2«ÝØ¿™«A&Õ¸7ì]Õq˜ðÉ=6�ü[«ç¯ÚCþ /ápIâo‚÷K ]|ÍöwÌ–N{Èùíý0C§b¿+•tŸ.Æíoíà ñ†L$ŠÙmÉÁù23û7ç.;É–.«ËYkÊô½ºÌ~d9‡„¼Qõü₞K—Ÿ²}�ë�ãÄÝá½gâˆäÛi¶’NÃ8,Bü‘¯N]ˆUØ�_‘_ðFßëšÄ¾8ý ~/ÿÁlü“NÿˆŸ?àœ¿óçâßüAÿÉuüHÿà ~ÙËÿ4¯Åþásÿñ5ü0·í¢æ”øŸÿ“ñØð¸~ççñ7ˆ%ÿ.¿ûmÿˆŸàœƒ�gâßüAÿÉU÷¿ì5ÿdý�ÿà þ£á?‚…ìÞ•ž];R·6ó˜ #ÌM¥ã`‘‘ë_ç7ÿ /ûháTøŸÿ³ÿñûÉÿÿÿÁ<ÿjß ~اãÇÄ¿ j¾ ðù#óu i-^òig�ćÀ‘1 y„tù=kØjQ…Ñô3ÇùÎ'N–"�¢÷ÒÇ÷‚$?çÿÕST{NÜT•䟾…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@„Ÿ¶}ÏÅÉþ-ÍÄÅÙgoì…‡?fû6zÆOYnyÝ�÷vῲ÷콫ümÕ—Ä^"W´ð½£âYAÚ×N§˜añ30Ͱ~È((b_»u¤#µšó¶ýžªí¤œž"ýrœ‡;Æq¿âÝ\m5­IÍ»*oeÊ´JÖº²|±Lëÿh¿Ú›ÃßôØ>|‚Øê¶‘¤eUw[ØÄ½¨#2Ñ{unÀüyeûw~Ò…ìZvœÖSÜNëqÇg¹ÙØ€ªª$“ÀÚ¿*´¯ˆW:-ÍÆ£â†–ÞBóÜË3ne'æyY˜çÔ¶}Í@ÿ°ïìóà­#ÁZWÇy®í5ÛÝrÕ.ôÛ›WY­`¶�AF…×åyOÌã ;WŒ–ûÞ0ànàŒ¥O2¢±e³’»œº÷åŠüw¿äÜâ?øŸÄ’£‘b¥ƒÃB×Pv…*kE¢·4ßM®ÿ– O­¾ GñƒþôÔ¾4Ü[¶­u‡û-´J‰l˜á w?÷ˆ;GAœdû5WðÖaŒúÅyWåQ¿H«%ä—cý_É2¥�ÂSÂ*’Ÿ"·4ß4Ÿ›}[ûº$–„rÿªo¡¯ÉßÙ§Ç<1àÍBÇáo„á×´÷Ô¦’Iä˜DVmˆ cpà(SÓ½~±Kþ©¾†¾$ý‚ÿä”êÿö¸ÿÑP×!ê�ßÈŸ´v¿ã+]/Çþ ƒGÒdY ×K:¹B¨J¡ÏVÀé\/‹ÿäû|+ÿ`)?öê¾Þ¯ˆ|_ÿ'Ûá_ûIÿ·TÒü7¸8ÿ™sÿf¯¯ø[âlZLC^6¦Sy—ß¹ÃFÇÛÊ’:Wª|~xõïÙÿÄ÷:+-ÔSé3KÄC+ÇåïܤpFÞF+Šý•¼uà˯‚žÐbÕ-~Ý?fkc* DªX•òÉ Ðd`}ÞGòŽ“ã?ƒß~2ëÞ9ý µ‹xôý&᬴]2áÊÅå#e*;° 剅@5>5ŸÙTð|úß­_MÑüK¦´éòiÄÂòKÌ#Ú [CÁSŽq�t~§ÃƒŸ|Kð—ãVŸb‹{z×ÚMýô¼oÇåO5ÁÚ08qÁÆ}ÓâoŽ¿eÿ†¾}UôíT¼a‹k8m¤šg<6«m¬xôÉÀ ÅŸ\|Mý†¤ñžªŸw  ¸Ú0¦X¯#ŽB`Y ºÏƒŸ³/€5_XøÇâ…˜×õÝfÚ‹‰î‰a´kåE¦ÕÏ^; /í7Š~ÉZ“éº_ö,2Åg(±1Ç@dº…Š2FJ+~` 澕ømÿ$ë@ÿ°m¯þ‰Zíh¢Š+àÿø)OÄ¿üý‚þ)|Oøe¨Ë£ëú&‡5Å…ìL�Ì q¼ž{Šû¼wãwÁŸ~Ðß uÏ‚Ÿmžóþ$µk;è#•ái"b PèC/NÆ€?œ� øöµ¼ý§>~Ì÷´ŸÄøG¾-øOÞܬ– ¨Û_ÚÄ$1[Ý5£­ŸÍ�ŽIíÍøöÃø‘ñ¿öqðÁ_ˆþ9ø¡¨üV‡]ñ>Ÿø_„Zž¯e¢ÝEæ£%èŽÞ8ãA‡C!9?5Cv²gÁ;Š^ øÍmapšïÃýOhÓý¢m‘XHˆ�¦í’ ùÝI÷¯–üGÿ�ý޵�MÓôKMsÃzŽ�¨êz�޳¢k7¶�¼ºÌ‚käK¨äÉŠW@|¶ �›w6@?¾ þÓ_¶íaiû3|ñwÄÿx>ë¿4?jÚH´³ÖnSÃQÅ5‰œùsEè?w6ÍÀüìry¯2³øÉñ‹öqýº~3~ʾñ–¡á«OøÃÂZ³ñcXTš[o£#‡ÈMGS ¤sH#†?�ð½cþ‹þÿÁ4ÿeO‚:·€µïéWÿnømy­_è·Z…ÅÌ‚ç^ŒC4þc=äP6ïÎÃÊà×MâÏø'÷ì»ãÈþ*XøÃÃÇR·øÊÖ’x¢9¦•„ïa•k$~-Þ!Ê>w~kô÷Ã^Ð|áë xbÎ-?MÓ-â´´µ·APÁ ãŽ4*" ª£€(RorNª¡ùr{ÔÕÃ@€ðT?Ù¨è:ô_¼+,ïÙ-õ4Œ`$ß(Žc‚1æ�±úr»šþyÿj/ƒãâçùJ‹v«¤ƒ=™þ)ÿY¾ð8ÿl/½y_¼áÿ‰^Ô< âh|Û-J…׀Â?ºPò‡øHµ#?þkÿþ%j_¿yüÎü<ø™ñáN·7ˆþj·%ü¶—z|²Û† ¸Z ãfôxÝÁè> ü.¿ø»ñÏÂQe-�ïïdýÜýóõ?pzžkÛ¿lŸƒ‹à/hPãJ×�œ¢"»÷‰ìï�ÇÒ¾Üý”~�…ŸST֢Ƶ­žã#˜âÇîàç¦'Üíí_¦f|GJOo‰£ì¸»Åzò(ch?z¦‰uO¯Ü}IáÏ 'ú„|1iÇî­­mâ#$`§{šþ²?c¿ÙæËövøCcáY[U¼UºÔ$î@ßÜŒ|‹ë‚ÝX×åü ömøÂO�þ+¶Î�¡·•b²%»êdÛé9_G ŽA¯èHtÂôZüÏGOh÷gWÑŸÃ÷B„³ÌZ÷ª|7íÕüËŽ¿QST;ùÿõ×g2Øþ¸?—ïø8Ãk¿ëð˜53¬&‘qtŸÏò ßuþ™:-¤V:M½¬*Ç*ã° �\ža¥QÉvýÈö>œ¼*ÇF“Ñó?Â?æt?*Óª&$Tµú‘þ}Q@Q@Q@Q@ÿÕþþ(¢Š){RÑ@ ÝíJ=)h©æèw{SK㊒¢*ƨ—P3N¨Õ1RPQGÀéŠ�R¦>`:Š„½¸£3¸?¥6ÔTYjhóú6(¸2z©"®ü€jCçg�¸úR!ôéŠLLæµïh¾'ÓfÑõÛX®í®Ç$S"º2°ÁVŒvé_�¿ÿà�_õíu¼[ð+Y›ÁW¡¼Õ‰CMn·–#Åí† vûL"9úž(ò õ5ïðÿc²×|$ùWnŸqð¼cáÎSžE,}$ÚÚKF½Ôþ|[öÿ‚•éÒto‹¬ÖxÚ º¦¤¬þý6=°jï„ÿàŒº¿‹¼G‹hï_kr¡ ðZÉ&ö=Á¸¸.ÛOLycއÓúû:öÀü(hWvüàãõÕ¼WÍy-G–¼b“?2Ãýø{ž/ÏV1ÙJM¯¸ü ´ÿ‚x\üñÔ?ÿd jMö u£_É,ÖÑ/XÙù–<ÿ|ù›O*¿é§„u-WXЭﵫÓ¯G�nì®bqÃêJ°ÏB:Žp+«òÆäS’ƒ |fkŸbqÍOù¤ºõ?Uá~Ëònhe±äƒû+áù.� 2*lŠ�kS¶ ñϳI‘HiI dRÔj¸9©(¤È¥¨‡Ï×µ ˯¥0íìhÞØ¯‘?kÛSö|ýŠ~¿Ä?�ºÔzt¼»{tdk«©zˆàŒ• äsÔzp�6Æuñ0¥y»#ëˆó»žkðƒþ ûQ|rý�G†"øA­�í�ûý±£îKýñþÀ¯€~$Á׿´­Qí>ü"ÕõË%%|ýKTƒMs�úg½àÿÇêø*OÇûLþÎ?¿hDÓ?±—Æe®§ö›Ï0 ˜¥�GæˆÐI³=v úWÑdX/ö˜ª‹Cù·Çž=§þ«âg•Õýämªév|f¿ðT_ÛˆŸùåÿ¿0ÿñº?áèß·ëãYïÌ?üE|Ò“#Ö¿ayVÿ?Éïø‹ÜGÿAsûÙ÷ûÁPÿnEVaãiÞŸèÐÿñýž~Î^$Ö¸ð'�-÷Ç'Íor€ ­f ,Mد§F)â½®ŠíËs,F VnƒºkFšìy™ÖK„Ìp•0êjt¦¹e´iô±þzŸðVOü}ýš~+ŸÙçŶ�§øzx…ͦ§ýÖµGÌ„}Ĉád„�Áþ÷ÈPž§þ 'ÿsñWì-â¸>|^šãUøMªÎLÑeŸEšVù®­|Æ~k‹uëÌ‘�3rËý´þÔß²_À¯Û+á‹ü'øû£.­¦y©sˆÆ+›Y“¤–ó.6#*Øá”• ƒŠüËÿˆx¿à›}ô­{ÿ³ñ5ýi?²ló)úŸR“›Ñò¥m6”u\¯åøh#dÿGÃ…ñÑ©ÁóŒ)GT¤ÝõÝKG̽z[k#öƒÁþ/ð·Ä/ iÞ9ð>¡o«húµ¼wVW–’,°Oª7�×!•‡B+­¯’?d_Øßá?ìOà;Ÿ…ÿ.µøGæŸí1Xêw­y¬�“'Ù·ŒÄ²¹ÑNÒß67'ëzþJÌiáá^qÂÉÊVvó]ëü¶¥yPŒ±QQ�µIÝ_ÉÙiò€F rð'„¾éÒi ÓáÓ­¦”ÎñÂ0¦FK}p ~ØQ\ghW!?�ü#yâè#éCDñ¶�£l­¹ƒ”oï#Œ2œq•#Ž+ˆð7ìïðoáÍëj~Ðá†é•“ÎròÈ�+HX®AÁÛŽ+Û( _Â> ð·€´eð!Ó¬Q™ÖjÜ“�zá~!|øOñRú=WÇøGà ;Àl´ØD)ž¬z»·ûLä³{“^ pF1LÈUö)C{Šú§8<-:•jÑZ$]¨~jšŠÌë> ý¿¿eÝcö´ýžu…ž¼†ËTi"¹³–ãq‹Ì‰·mm½¦Pœnèkù�Õ~&~Ø¿ðO_†š×ìß©xb×Aµ×^äK¬¤‘®dò¼È._/rÆ Û”K ;«ûdNåéé^iñá�€¾(øn_ üBÒíµk —Au‘ðnþ‡µ|¾wßY—µ¡.J–µü�è ÓŒ ý{.Ëa†‹åÝîûŸæOñÞ'<«MÖŠŒ)®XÅl—a̤ԴS¶ŽkÒ> }€ädTa²zRZ)¹oJu%5Њ(ª¢Š(ÿÖþþ(¢Š(¢Š(¢ŠùNÛöÒý�î¾<Ã4í9ñˆ�­~Åö[€¾bFeaçy~W Îìv¯«+ù„Ð?ฤÔrçÿMÒWô÷_µøÑá·e—G)?o‡§V\Í;JWºVKÝÓE«ó?ðWÄ\wC1–:1_WÄÔ£T×»[^íë®¶²ò (®#â/�ü/ð«Á¯Ä_\‹M'G¶{›™HÎEÙ¾ê¨êÄ_�ápÕ+T�1¼¥d’Ý·¢I²bq4èR•jÍF1Wmè’]}7$x�Çš-m±ù kÅ¿c/ø$_…µ/Z|Xý®>Óªjú k¢ù¯B²|àݺ‘+ÌÝY(^�¸äÔ¨?aÿÙÞÇû=>øxÇŒe¬!gÿ¾ÙKçß9¯ÛóL…¹W—Öuñµ#¤§Sºß“«Kæ»6�ò¼ÃÅ<öŠÌ(¬> œµŒ&¥:–éÏÑ}É®±FGìßûsþÎßµF©7‡~ês¾«kº–ÆêÝá•aVT/œˆ Ê>W=E}uqqoen÷wn±E–wbUTd’OùWÎ_?doÙÿö~ñŽ«ã„h·šÄ op"’F‹b6ì";0�' �òŽ+ñ÷þ WûSx«B½Òÿfݽ�¥õšê:ËDJ´èîÉ ¹#ø–]×£e=+ã¸{Ü·‹¸²? óÓ¡$›uy\ ’¼ß»dí´W].×O²âó.á)çX¡:ðvJ•ÔdÛ´æÕ]k-4W²v×ôKÆÿðT?Ø“Àzãø{Pñ’^Ï+#X[\]D¸ã‰bŒÆßðjú_à·íðGö…Ò¤Ö>øŽ×[ŽbŒ”ž zy�HT±*í_Ç_ìóû ~Òµ†/üeð§FIôË &âæxíÒY‚†1Eæ¹€#?Â2"¼¿áßÄ‹_²§Æˆ¼G I6‰â?]´0I‘Ìo¶kyÓø‘±µ×òÇZæ¿CNÅѯ—ä‹–6ŠÖ2”$“è¥ÅJ í~�™ü‘•}3x¯ V†aŸå±Ž³÷\c8»up”›Œ­ÚÊýÑýÑøóÇøià�SâŒ'6ÚV�m%ÝÜ¡ÊCîrc€:ŸJøþÝû Ð×?þ o¿øÅ}yáûß~Ó߬µbÓí�´xäžÕ�”˜/!â,…X©*AÈâ¾bÿ‡VþÁÿô"¯þßÿòEð^ƒpÑ­C‹£ˆU£+%GÙÙ%£Rçë~ÚÙüi‰ã,L¨×á a½Œ¢›öÞÒîûròik[sþÝû Ð×?þ o¿øÅ/ü=·öÎ?á,Ÿÿ·ßüf¹ÿ‰ÿðOoø'‡ú¯ÄÏø9-4­Ý®'�ßßç ÀUiåݰ¨½Ø€+ñ?öý“ôÛ;ö›Ô C ‹§F x°~AÁ'¿coÙÇö�ø3â/|gðàÖoìu£i †ææ�ýž'Û¶cSó19#5ù÷†~p¥~ÅqGºÜ´ªªiQpÙ¨ÛI.ïºÓ¡ú‰¾$qf‹ð¼-Ãj…êÒu/UN×NIükGOwæ~˜ÃÛaU¼}ËÈF—�í-ûOüfý¯>.j?>;kjº¥ôï$p»œnÜAkí‘Æ¨00NÁ»=kýBlOØÏà§íËð–ƒÿídŸM•üȦƒbÍo(û²Fì�µ×±Å5ž6ÿƒO|9s­Iuðóã-ÆŸ§»|¶÷º2ÜJ«ï2^DÿÛ!^ž¥8n~-âo æÙŒ£O ü?SøÃ‘ä'Ÿ”v¯ë£ö¤²½Òÿàœÿ³E–¥ �M…t�ñH…]sm)FE~¡þÅ_ðnÇì¡û+øž|MÔçø•®Û`Ãý¡i6‘ükjÆà‰?Ûþù¥ÿ†ø÷ÅÚžëÀºÛ4¿ƺ~þíî#É•±Ðym#ÃÐtÏJúžŸ¶Å¥‘üÇãF@ø{…+ýy®j­E%å©ù0�êJTË·=ÿϵ%~­-ÏòûÈ�ø…øìkèïø8Æî;¯ÙÿU–ŽÚoùk!FÍÁ.€ô%«Û+ž«_9È åGñWõ�ÿþðÿÁïø(ì>þкD>#>º¸Óä7ˆ’Ípd†â }Ž©)�mž˜¯‹ã+ª0©‡ö7Ñ2ñ˜ÜVS{TœS�ÉÝ£üê¼¼ŸöOãÇ^Ÿáȯéçþ óÿ‚£ø¯àßÅØ?cߎþ!yüâ4?Ørê–].ú5ϓϟ.ÞxÁù TÌ;�ÿj|MÿƒP¼­Üj?þ/^hÚ|�˜-5)/¥�= ésûò+é?ÙKþ šý™>øªËÇÊâ;‰Õ¬ghð¸žXÉûœâ¿¼IÿÅý·ü)¡^xƒ^ðQ‚ÖÎ3<§íúsíŽ5Üü%Ñ-Åwpþ<<=¢W>?Ç\ãŽðüA‰þΕEE5k^Ö±èßðøOÛ·p?ð“ZãþÁöŸücüÿ/Ø/ø$'í§ûC~Õ^9ñž•ñ›V‹P·Ò­m%¶Xí ƒkJòs !?s¡Í(nzŸóþ}¿¡Oø7ëþJGÄ>ßèþ�žºø‡(ÃÓÂN¤af|�ÑËÅ~!Ì8« ƒÇbe8¶î›ògõ0•Õ‡¨jvM„šŽ£2[ÛB„¼’8TU^§'€rkgrçÓøÿÓý¢õßü(ð÷ÀïJöòx¾if¼’2Aû-‘�¼¾?礒'à†¿-˰R¯UR�þ›ø‹ÆÔ8w'«šbuP[woc€ý´?àµöþ×î~~Ë‘Úë×)>°ã̶ó?»à>ñáãnÆ¿ümÿý³¾!ÈdñÄmb=Ç8Óåþͱd ñÞÓÎß™ëõãö?ÿ‚E|]ý¦¼%eñ+ź´>ðî£ÏdÂ?µ]J ù”c g,ÙÁ/Þ¯×[�ËéÞhÿ'gâ/ñîbèåõ%þ»$�Š<'ûk~מÔ>Õ¢üHñ ~ ]ßM|Ÿ÷ÅÔ’'þ;_¨_²çüçâ焵«?þÒÐůiÈ}J t‚î í�í #tŒu ò=ëSãoüƒâWƒ¼8úçÁÏCâ «a¹¬o ûp?眞l¨Xÿu¶ö«ðJ÷OºÒïçÓu(ŒWHðKuI#l}<ØÓTp‚~Éæyßp*œ±µe 웺vß¹þŠ >*|?øÅá+|8Õmõ}6ísÍ´›Ðú‚„�CÍz€ÛÆx…"ÿðDÚRð/Çûÿ�šœÒI¤ø¢Ð¼X‘å±ÈÀ<$FLãž¿®du"¿)ÎrÙak{>‡ú�࿉´¸¯$†d•¥´—f‹€Ò“rÕ)%†?õ¤}MWû\QüÛ×ó¯"Ú^Çë¤VæŽóþýTæUî*ÚSpé\¾§âï h²5MBÚݱœK*Fqø°«Œ[ØS«+ÍØêÔzT»F6ŠÀÓµm7VŒO¦\Ç2úÆÁÇé[!˜|‚”—AÂqš¼IÛozheŠi9¤VÉÜh(jœuéNò”ö£q#ü+PÕ´í*6þâ8Pw‘‚�ÌÑØRœb®Ý�`ÍŒ ˆ;}Ü Ÿjä-|wàÛ¶òmµ‹GlãhÉý+®ID‰”mÙôæ«‘™Ó­ ü2EìŠMËUƒíçô¦™T.Y‡Ö¤Õé¹käìŠÌmBÝFw/>õ(ž)~ë}.Gü¤F¬^ˆ½‘FEW�¸ÛœSd‘V,–}MUº¶';ZDoîÕ´À~mèÿ]"K„Œ‚Øè(ådûX^×1+)Øþ<~:ÿÁW?m_|rñ‡„Ú{oü4ßÄ6_™á'Õô®_óÒ¾Ûƒ0TëN~Ñ]Å_LŽ4Ìrl¦[UÓm»Ùù+²?ðOÏø)íoñ×ö³ðÇÂïˆþ †ëGÔ>ÓçG�¬E¼¸ÓçŽ%aÊöÅSP³aœ>?Ïjþà“$ÛÏÁo÷@ûo?öë'Ò¿¸º‚(Ô{Öc„…éSVV>‹è…ŘÜ× ©_0¬êII«·ä�š*·˜¥>Sòúг_[Q@Q@Q@Q@GIE|Õû@þÏý¡t xÖ6ÛawÜrF>a´üéŸI#ÊÀõ½ÖÃO²Ò¬b±ÓãCã�FЪ£Øb´¾l§‘Sdu§ 9m u爌}éZï½¶&o»Nªû[Ô~_ýzaˆÿ¾úôŽòÝSɺÿžßøè¨¼‰Ï 3� Oð  �hçSìwóõ/åÿMþÏ?óÞ_Ì…YXñôúRíÆíYçMïË!ÿ�cùb®F›'¦Ï'ó©itÝAŸ˜Ò¬™-íUË�Nš¤)4–¥€x¦œöª¾y ´FO·J­s©[[Gæ\¸@£=hå•í*VŒæì‹�'—÷�Ý*±ºˆcæ#8öúõ«äï‰_µ‹¢oÒ|‹{sÊù¹ýÈ8Æ�¼Gp:WŠ|*ñŸ‰)AJTãRpOg8Rœ©¯ü FÇé<á�~¯…rå�GJk¤'V›ÿÀùÌwÁÙ ãçÇ�nÂËÁ~¼67—çN}BXš;HfD2H¯3(@Q$uÎÄ þÂ?foÙ+á/ì©á·Ð¾A!šâ8⺼›hšåbgxÌ¢%HÙ�Êà6ÍÛH\íUäŸÛ£Ãž ý”þjÿ´¿Ã‹ õÅÔi}¤n˜i×óÜN’-ä2FÖÓÅ$ba< Œåv>íÀ¯9ûÁU¼ûGêéðÛâ½­¿…üS<‘C`"id¶¿wÈ)å>K‚ îwnNx¯é?øËŠøÿ‡Vs”Rk/¦Úœ#ñ]r¿y^óQÑÞ+•/yõPþlð[ƒxOÃþ!þÅÍê¯í ‰:s—ÃÊî’ƒåJ[ZNíû«NW=ø+'ÄŸx'á·…ô_%—öžª±O-œi&µoe·3˧îtXË»±Û‡­=¿>þÌ ¶»Õ¾xËþ+k‹‹e·…|û[ûH|ŒÒ$–‚ È„$m¶Tòå8Úçï¿üWþ Áã¿Úûâ&“ñ/ÀZõ–Ÿ6Ÿ¥ÿgËm}æo.Y%�£1£ýï4†ÈÀÆsÇócðOáïŽ|KñÃNø[¢éQÞj×wØÏexÍ a6²Üyθh–(ó8æ=»€ÊŠý«è°òxð¤*`±ïžŠs­Ë®ÛJMÆé%d•¯}�ľ•QÍåÅs§�ËãÉYÆ&ï&íŸ*‹µÛ’ÑŽ­ªGõ+ÿ“ø¡?Ä_ÙÓG¹™ç>Ô.txÞ_¾mÐ$ðÇls°P+ñãÂÐGûRÁ`eO�´ÙCâk£±ùSo¢£˜S6²Û #¡É¯Öø#ÿƒ-|7û;xƒÄL~^™¯x¢þçN³)´‰b·�¾b�†O;sÿ2Ç�­~sÁ”(QâN1«–+U�¼�Ówsµ¶jvÛ©ú7W¯[†¸6–fïIÖ¤§Ù¥e“…þGõ‘EWùÖ£A_Ë�üឥ¡||ðïÅRluý(Z†Ç{'!Æ{~îH±ø×õ_ŸŸðRÿÙÝ¿hoÙ_Y°Ò óµ¿ÿÄãN 2Ìöê|Ø—¹ó!.{¸_JýçèÕÇtø{Œ0¸ºîÔçû¹y)蟢—+~Hüé1Àu8‡ƒ±XL:½H%R »†¶ùÆéy´~~ÃßðTkŸÙ/á5çÂ_x_ûzÑ.$»°’+�lèò�º93†MÃ!‡#$r1�ΊŸŸx.çgŒüUÃg°üö–Çå–ëŽ�ü·ó¸E‹7ÃÙ—çÑÁaW5jóoÉ_YIöKVü‘þÕñ'e¼'�ËŠ|´0ðIwvIF+Íè‘ùÉÿ%ý¢¼Yû]|{Ò¿b¯€DßYYß­½É…¾K½Dd6æy6‹»' !Øðªk÷Wö\ý�|%û.|Ò¾øP ªù··[p×Wn›3wä€ ^ÕùÅÿŽýŒ[á_�ÿ᣾#Z‘âOÃÿøæ=­„Ÿ0~zIqÃ{G´q¹…~ÓWì~=qŽ J�pü¿Ù0Ÿ—ü½­ö¤ü–©tÞÚ(Ûñ¿¸3‰«[Žx†?íx¿‚?óê�Ù‚íufü­{>câoø(ßü™'Ä/û§þ�Š¿¿à•?¶¯ìãû2üñ„þ2k�¥_ßë&îÖÒâ}ÐýžóºÜ™HÁ ñ_±¿ðQ¿ù2Oˆ_öOý~@ÿÁ'c�ÙËö�ø3â/|dðâë7Ö:ѵ‚SqqØE¼/·l2¢ýæ'‘ŸÂ¿@ð‘ä‹ÂÌÃýaöŸWúÌoì¹yïËNÖæ÷mßÈüûÅÅ�ÿÄTË—{?¬}ZVö¼Ü–橃]¶?M[þ ÍûãÆÿà¶ûÿŒWÛ¿ ¾'ø/ã/€tÿ‰nÍî�ª+½´æ7ˆ°GhÛä‘U†Häž•ñãÁ,ÿa0¤¯�#ÿÀëïþH¯²>ü4ð_ÂXü9øyd4íLV[kpÎû»HÃs³1Ë1<šþ{ãÙð?Õ`¸ab}¯6¾ÛÙòòÙíÉ­ïo+_Èþ„àñÊÅËýgxoe˧±öœÜ×[óéËkùÞÇ S0wçµ>Šü ýhƒË9Î) ``ô«mÎE&ο´çÆÝözø-®üR×~x´›V�Gœo=”zŸjÿ??x‡ZñwˆïüWâIÍÞ¥©ÜËys#qæMq!’Gü\çÚ¿£�ø/7íßfðÏìé¡\|Òùš¦©8Â.Ô�|Höø¹û;þÅ?´7íIÚŸÂ- ®l-]ãkÛ‰ `ã`ydüã„SÞ¿Tá,40Øw^¦—?Êÿ¥§âø�ˆéäYd]Odž‰u{ýÚ(®dlzUí;OÔu[ø´½>šâg h fsÀ/$ŸJï>.|ø•ðÆSø⦓.‘ªD»ü¹6¸t$€Èè]>RÚýýÿ‚ |ð&½ ø¯ãv»e Þµa©®™i,ˆí£[d‘Þ2rPÈ'ØÄc b¾§4Ìᇢñ+T6xcáV+?Ï¡’T~Íë{­UµgóéãÏ…_þÝEiñ#A¾Ðfœo‰/¡xK�`@ȯÔø#?í~ þÑ÷u™¼­'ƱCjœ·G&-öƒþ̯Ÿ^=+úDÿ‚€|ðOÅßÙOÆ:OŠ­£&ËM›Qµ�ãthÒÆèßÀÜ$aÐ�…-YÔ|;­[k:TÏowe*O±œ:´g ‚;×��ÇÇ2ÂÔŒÕ�×øß�«x[ÄØ\^¯´OUÑÛf™þ’B «/ócµxìÙñŠÇãÏÀ ü]°Ù·]Ó ¹‘¤r²6?ûg&ä>â½åAáº`:üv¤% 8>‡úë—c©â°ð¯EÞ2I¯F[ù¶ûÓ¨¢‘ÞQEQNGË÷kñþ ãøöwðö¡à}bûF¹}~(Úk ä·‘�ÛÏò‰‘±œø ~Þ ÀÅ~Á|xýš<5íâÿô–⽞�ñPGã?H Ó¥ÂXÊ�•šŽÿ42ƒö�ý¡³Ç�“?HL'S£„Ë©µN »½ÛvÑy¤¿ðI jž,ý¹¼-.œ‡f�ÕüàqÆaÉÇbò�ŸZþàV-±ùmü5ø?ÿMý›üà?ƒ÷?-ï­5=sÄx†G¶“Ì6vñá¾Í'Ë—w2.;'>Ÿ»lU²¹ëúWÄqf3Úâ½ÞšÜŸE žMÂðö¯Z�›Ñ=�æÇþ «ñ/â'€¼Uðö×Àž Ô´D¸·Ôd°»šØHUíö—ò]7mÉëë_�¿ðÑ¿´ où¼Gÿƒ;¿þ9_¸_ðp2ªøËáÇý{jú½;€Bý~‡ÃXjoÖçùõô›ÏñÔ8ÓN•V’kDÚ[#öOâ_üãã<3ð[à}Óé÷5…ž£®\�>ò{˜mÑ&òÌÁÕràîwí÷� _–ÿÅÿ‹(¿}OÄÞ)Õï§”äÉqw;“ß¹¯Ò/ø'wü]ý®Àø•ñit¯¤…c1Ÿßߨ«¤ÝŒApAÏݯÛoÁ¿c GA’ÃÚ}î›x˵n’úæB‡ÿW$­ÿ¾kަi—`ªû8­O¹ÀxUÇÜg�†c:¶¦•¢›µ×’?–Ÿ…ÿµ§í%ðoT�Xø{ã=RÕã ù2LóÛ¹CÁ6øÿJþ­¿à›ßðQ½;öÅÓn|ã8 Ó|c¥Â²Ï ˆ§ˆaZhGÌÀ?0ÉÆWÖ¿“ŸÚ?ào‰?f¯�Z÷Á¿âIôyÀIÓîM¨�ƒêcp_ÑË/j›öYø»â�¼/ñ7ÃR˜g´¾Ž)0p ½Æèfz²Bp{àö®œë)£‹ÃûZ(øÿ |aθG=XÂOÙ)%(·{km=ô*‘š5ÍA=Ô6p¼÷²4îx}k/DÖ-|Aáû=oMmðÞÃñöC/èkñ?þ [ûUß|%ø;gð?ÁW�o«øÁ¤K¶Œá“N‰~29Ë"Ý v¯Ép8׬©DÿWøï�ðÙSW6Ä|0Wõodx÷íÛÿ–ŸÀ^$ºøQû0¥ž£wi˜¯uy×φ9;ÇnŠP;§RÍ”ÉÆ8çùÿñ÷íOûH|WÔRñÇ�5‹öœå‘n¤†ø ‹ð ðR®€Ÿïq�ëþ'Ö¿nb_ø#ŸŒ¾;øwMø©ñªõôQŒ\[YGÿrÆ@1»�›Q$#æßŠý{êxL¶‡¾—ùŸäÍn*ãOó9QÁɵÙ;E/3ñÚÓâ7Ä+)~Ó§xƒR�Áݺ;©ã®AöÀÿø)?í{ð*{xôoÉ­é¨sö-`}²'†W?h_ø¿z¼}ÿ/ý™uo =¯�îuRAû¹üù.{ ’6Ï©5üÙþÔ¿³ÄOÙ7â•ÇÃOˆ±ólï#$Ås²D8Œ`sÚ§ ™`qߺŠ,ð×�¸“1•F£Ý6Òògöûþßÿ l�1Ðñ¦xŠÉÞéR>ç@p§ty#æ½}›ñÁ–_¼©ø+PžâÚ-JÝày-%h&@F7Ç"a‘Çb¦¿€Ù÷ã7‰ÿgoŒšÅ¿ Ý$Ò®Q§Ûÿ-m�ñ<ñ?ì)wÿÇkúaÿ‚CþÏG‡£ý¥þ8ø£\Ô†«iÿ}:òúâXR2>Ð𻜻 ^xÚçåÎÒ?¿àšŸ°ö©û]|WM_ÄçþßÍšŒ¤·�ße^™,˜ß†Ê‚¸¯í›N°´Òl!°°DŠÞ% (ÆÐ:Yñ–eN?ìô–½O ú!xc�ÅT|A™Iû5ð&Þ¯«ôGòéÿ½øµñKÀ´¯‡tÏøŸUÑm¦ðônÐØ^ËlŒÿk”od�Ó,pÐWà=õíÞ«y6¡¨ÌóË<�#Ï+ww$—sÔ“É9¯ï;ö‡ý…gÚkÄÐxÛâöƒý§¨YÚ‹Hd3ÍØw3…ÄN£ï9¯âã׆ô�üqñŸƒü;Ù¬4ÍrþÎ٠ݲn¤HÓ>ÀW©ÂúuhûµGå_Kïó jólDïN¬Ÿ*¾ÖJúsáïø‡Âz”z÷…oî4ÍBùW6’¼2¦xáЃÈ?Þ¯P?´‡í òíñ߈ÿðiwÿÇ+ÚàŸü ñÛö³ðÇÃ/ˆ¶ŸnѵµùÐox÷yvîëÊüë_ÔÀÿ‚Aþ¡“Á‰ž?åêëÿ�Wvužá°Õ9*+¶|�ƒÞgüI€ž7-­ìâ›V»ZÛÈõÿø'N¿­ø›ö2ð»â[Éõ Û�&ÙÞââC$²1@rY‰$Ÿs_r•ÏÊzt¯4øYðËÁ¿|§|6ð©³Òt˜VÚÖÎÅ#A€7;ÛÖ½)yP>•øÖ&jSr[ì åõp˜ XjîòŠI¿4]¢Š+Þ (¢€ (¢€ (¢€ (¢€ *…ýíž™e.¥¨Ê–ööèÒI,„""(Ë3Àu=«ðçöÃÿ‚Òü6ømksà¿ÙŠ8¼S¯çcjs«fÛsÉP 5Ãc¦Ò±ƒ‚Y°R¾CŒ¸ï*áü#Æfµ”#Ñu~QŽíúmÖÈý3Âϸ��3•ðæUg¥ÚÒ0]ç/†+×}•Þ‡ëÆŸ�¿?g¿ ?Œ~/k¶Ú5š©1¬¬<éŠà†!óÈAeáAÆFp+ùûý à»þ0»¾—Fýš|3meh»“ûKZ 4Î:ŠÚ'D�Av“#ª üMñ�¾8þÔŸ›Yñ=ΡâïjòUT2ÈÇøR(cQøQUG@~Ü~ÆßðD½_Ušßǵü†ÎÏ $>²›ÉÏK¹ãÿV¥Gú¸[<¼ep�ñ~5q�bÞƒh:Vóv½¿½+8Ãü1¼»6©9_Ñ?Âÿ òÕœø¥‹Ž+ÕãF7åo´)¦¥S·4ùi®±ŽçÀëÿuÿ‚‚­ÇŸÿ ÊmÎ|¿ì­/n=?ã×v;u¯»¾ÁwücgzšOí!á[[Û6Ú¢ÿDÝÈÁi-åwI <��QÑOJý®±ý€ÿbÝ?ÃËá{o†6É’[(å¸ÛŒdܸi˶_w½~5þßÿðGøS·_d{iã‹NŒË}áç•î’Š3-›ÊZR˂ͻü`!è̸Äþ óL&dñ<ºÊ Êz-í­W¥¥Ùvááÿ>�œ}Œ�æÀ:ží:±…:JïniRk•íne(tnÛþþ|øÏðÏã÷€m~%|'ÔâÕt›¯”:ÍqÕ ò=­ÛסæÑC$’‹HÁ‘˜…äŸAÇ'Û¾›ø]¡Cà(¯5oˆ7ÖšZ­ºÚÚ¥ô˳¹ ž½G«óã÷üà/ìó¾ý›¬ÓÇ&Œ}NpËatù�.#ÊÝŽ7q_€?þ<ü`ý¢÷þ&°ò—üкžA :èq\æ�}{§\Å{¦ÊöòFß+Ä@ �Nxô¯ÂÿÙSþ �ñÃö|µ‹ÀÞ:Ï�<%Â5¦¡!’ê?óÊâS–%~ÏŸµ®Œúçì÷­Dšš(7Záòná`9¶×d7®Uº©®<ç �ÊÙ3ŠW§ÒVÑô×± ÑÌmŠÊªZ_Ë{5mtÚç×ÿ j;«#‘ã¸÷öI×Ûxã?†kí� ÄZ7ˆíSÑæKˆ›]_•>øAã�{Skµ6QB},êDJ¡<‘þéÏ¡¯¥¾ë>ø}â{/xrêmVóPm³Lñí!@ÂG»{×á¼i’å·çÀ={-�è.ã ÊTó‡ÍYŸu«þúÔüý*¸`Ý)Øù?:?±ÿÐþý1þÍ;bÖtZž�7ú‰ã÷\ëW|øé$ЮMEGæ%&ñþýTÆKI‘LüêJþ^-5M+Cÿ‚ÚͪëW1YÚíܗšwXãAýŸ f x¯èÿþ'Âú´ü·ÿâëóã×ü#áïÇŸŒïÅýSÆ:†Ÿq®\}¡àŠÞ6HÎи°$`zW�ÿʾÐýªà,?ü]iñÖmáÿÐË«csYЩCN“Š¡9+Åk®�]¾GñWe> ðµ|ÆŽ*…juñ*©:І’i%mz$þv±ûU£|Gø{â-A4¯kÚuýË‚V{¨es´dáQ‰àxé^_ûQüÒ?i_‚zÏÂ�JQk=Ú,Ö7|æÚò¾ F9Àa†¡`:×ŲïüËÀß²ÿÆM;ã‰â»ýVãNŽxÖÚx#Do>„�ÊI‘ŠýW$öÍ8ñ,²Ü�7£‰áld«(rÉMÑ©¦ôå}—“½�èÞŽg�äõ°ÜW‚�>h:jjiÁÅ+ÝZ×»VécòÓáwÆ�/öŠøEâoØãö©´]7â.—§Kc¨XÝ`h“0ßZŒJ¬¿'!†õÇæ‡ü+ö(ñ_Œ>!ißµ_ŠÃiÚƒ;�2'�濟cÆYKp"„�wŒåÆÑ÷[¼´Gì§ðoö•Ó­Óâ-“ŪX�ôZɾÏjz�.eçc\óŒó_(øKö\ý¸~hVþøñ_L¿ð傈¬lõí1CÛÄ:'� »>=ñôûç x©—à Ìrü—L[�<*){8i%SØÊ1�¹ÓŠJj<‰YJV‹_�q7…Y„óü»0ÎpòÆSÁ§É:n ¤µ‹¥í£)CøvnðmM´Üb›Oõ:¿“)g~ß_~|1ê:¶»sjÑJ²Ç¥ØjnMÝÄí;$ò< VËœû~ËÞ~ËŸ¶·Åt:oÇ?Œ¿ÙÚ4ƒlö>³KG•OQö¶ "Œq�¬1Ú¾½øû<|&ýœ¼(|)ð£HM:)H{‰Øï¹¹�q¾y�ÌçÐp«Ñ@WÊpa8 Œ– UjðPå„eìãgu)NjÖÛ’1q’vrKCêøû€±œwˆÁ¬VxZ4'ÍÍ)CÚJêÎ0„Ôo§¾ä¥.Xöìþ|4ðßÁ¿†º'Âß!M;C´ŽÖ"~óì4�þÜ�—oV&¿?à°²‹lü]í…ð®ÞWTHW[ ù–òÛáa¼yÛ±U‡Ü(§¹#ú ÝÚ¢š+{¨šÚáVHäR¬¬2¥OЃ_�øiâÖcÃYúÏ©þòR¿´OíÆ_~¯Tú4�žÇèÞ&øI—q/¼‚§îã{7ü7h´»%¥´÷n´Üü�ý‹àªÿ¾/øFǵK ø¾Ù¥»a•éPš’œ$lßÅí¾æGõ/‰ç±œ:öœöÄn­Ô%1ë»v1_œ?à‘¿²¿ÅíR_xv ¯_ÌK·öQQlÌ{ýžEeQíŒ{WËPÿÁ ¼ö½óüF½h�û«§¢¶=7} �üv¿UÎr ózÏ…Ì*àyµt¥EÔIö‹†‰v»-�Ê2|çÅLšŠËñY},o.Ьjªm¥³’’ß½’ùî~Ñø+ã�Áÿˆþ%¿ð‡ÃÿiÚÞ£¥Æ²ÝCa:\yHÇhÜÑ’ çŒg#Ó¥z©ŒøöJÿ‚züý�õ«ÏxPÕ5_P¶6sO{2lò™ÒB‘ï"à¶â;M}â¬à|Ç5øa²l>a*YYU ’´§VݵÑl¯·‘ûÿâóšù|jgÔaJ»nñ„¹’W÷uïmí§cøÆÿ‚’þÌr~Í_´¦¥a£[ù^ñ:ž•�„XåoÞ@;&L¨ÜØ{×ôYÿÆý™áœ?f›×-üŸx§f©¨îxÄ‹þ�î<¨ù+ÙÙëèÏ�³GÃÚ&o Mñ×Ï>Õ#Ôí°ϳïA&AÌ2á|Åïµkèì?Î;Wï^(ý$q_|¾¿–ÒÎúº�U�V˜`¤�“³¥~LÿË~ Úž<ÕýºÃÿÅW¹áŸð¤ø+ÂÙæ6TJÊqjœ§î¥ h´ÖÝô<_xSŠáƸ.)ȰQ®©Ðpqu# [—~Éö?g?áq|"<ÂU£ÿàu¿ÿ]N�â øž¸ðΡm¨G ím*JªO@Jø�ÿ*ø_ŒÿÂ}ªÿà4_üU~‡~Ʊ¯‡c_ ëðæµq­&±r—.÷¬e &ÀRx¯Î¸Ï…8+ €•l—6�zÊÖƒ£('®¾óvVGèÜÅ\mŠÇÆŽu”Â…o5Z3kM=Ôº½<�´h¢ŠüXý¨¡78®wľ"Ó|-áÛßë,!³°‚K‰äþäq!f=;]FsÆkòCþ ñ÷þßì�¨ønÊãÈÕ<_*èðm?7• /;qÛÉFLú°®ÌÖª©ÄùN4â:YFY[0­´ðåcöÅøã¨þÑ_´_Š>)ß.»Ÿ³ÛÇœ…¶¶ýÜ`}܃�ÿ�VÿðG]kÂW°ï…ìü8AžÚ[ä¼LüâäÝJí¿ ‚3ü8¯âÄ0U Øwõ5í_io�ß³íÌ÷¼Owáï´†G+Û¶q–0H¦2ü}í»ýëö ç$u°ª„t±þ?ø-ãwöUαÔÝOi{Û}]ÏÙŸø/Æ«áMCâ?ÃûVÕ-¬µ¼P~ì=¿‘¿îMŠø“þ Õû_þÄÞ)Ôl5«Õü3¯KÝÃâ#VH3òœð `„võ¯‚<]ã|TñTÞ/ñ­ýÖ»«\ÿ¬¹¸c$¬:…€g ®~çÃúõ�Ýwc<>ï�æ*°ùeáÖ£¾‡›ÄÞ(fu¸®§åTÝ9·u¥ú[_^§ôûnÿÁe<ñcྣðŸà&‘¨Au¯D-®nõ�w?¼XÖ7|»¨ÙÎÜ•Ééüï„b|œôÿ?çúT>ljÜŸ­I÷Þ½ ³-¡……¨Ÿ⇉™Ïbá‹Í^°VZY/DNßðBOÚ1õë?³^´üèÁïôÐ01’n•~¦I7دèÌ#+Ú¿€_Ø“ã›~ϵ/ƒ¾%4â >õ¶¿.q´ºýÄîãÒ4‘äèPW÷Õ¦][ÝÚE{9‘Jýf¿/âì¿Øâ9–ÌÿO>ˆ<{ý­ÃŸSªýú:yÙíú›Ù´Á׎ÔúùúÔ(¢Š†Oºß…~Á|?äÙ|9ÿc _úMq_»ò}Öü+ðƒþ áÿ&ËáÏûbÿÒkŠ÷xgýöâ¿Hù#ñŸáýQü“¿Üü+ûhÿ‚7É‚x?þºê_ú]q_Ä»ýÏ¿¶�ø#wü˜'ƒÿ뮥ÿ¥×ú'¹¯Søè/ÿ%%oúöÿ4~¨Ç^ûNÉ¿øÏþÀ÷ú%ëßc¯ý§?äßügÿ`{¿ýõù.ãGú¡ÄŸò.¯þùç‰ܯègþ úÿ’“ñ þ¼tÿý5<Ñ}Êþ…ÿàߟù)ÿëÇOÿѳWî<_þã?—茿Eïù.0þ¿£?© r2kùÿ‚áþÖڽι¦~Êþ ŸÉ³HÆ£¬È‡çvÞRÞ ŒÊ;HS³œg?ÓÅ÷ÙÜ )¯àöæÔõ-[ö¿ø�>¥+Êbׯ!MÇ;Qd| Ï@9À÷¯Î¸+¸«Ï¡ýçôÇãlFWÑÃa��Wfü–ëæ|¦ÇHyôí_¡³'ü+ö�ý§´èüMá«+mIuî¨ï ̇þxùqÈ[ñÙ_%|ð¾�âÿ�¾ð§Š8Ó5-fÆÚï'oîd™RCžØ×úèZ^›£épiºU¼pE j‘Ç…P«À `:WÖq6}ShSZ³øóèÃà.Œ%[™Mû:vVZ7{õò±ür|cÿ‚4þן ü>þ(Ò¿³|S<›}6Y¾Ó�öc’%Cÿ+òjâ'·º{Y”ÂÑ|ŽŽ0TŒäØðký&™VXØJ¿)íøWñ5ÿ|ðoƒ¼ûkëéᣀ_ÛÛÝÝCáDÌŠÒHO˜ÄrXä×/ q%lUGFª>Çé1ôlË8o/†k”M¨ÞÎ-ß~¨¡ÿºý­uoÙ§öŒ´Ñïeφ¼XÑØj?D—?¸œdpP³&ÐpUØ·A_Û¬3 ”YÇ ®F9Wù¸h×WV:å•ý¶QḊHÙ¾ú×úþÏ:Åöµð#ÁÚÆ¤K\]èº|Òç©y-ã,OâkÆã| £VOÖ~ƒ|cˆÄ`qMgxÓ³^W½×à=ðpG5øuÿ^ºŸþ…o_ζw|ž£ù~UýÁÁgþ+‡#þ�µ?ý Þ¿�µû¾ç†?Üiÿ]Ïãÿ¥"æã|eû¯ÉÞßüûÃöý�~Yiñyk/‡4ë—²Ü[$’7Õ�É5öj¾S=Gç_+~ÃLì�ðÈúø[IÿÒ8«êЧÒ¿ÇßÛKÔÿcxšŽS†Œvå_’?�/ø.Ö•�íY¡ÞÛ W¼Ðb–B8É[‰PëÂ�¿ ‘…ôRFpVE#ob ~áÿÁ|ÿäç¼+ŸúGþ•Í_‡ ÜGþøÿЫö®WÀ¯CükúDPTøÛ7æ¡·ìÙ,’þÏÞ –VÉ:�'¹?fŽ¿�¯ø,/Œõ?~Ûž"Ñ®&Ýk£Ãj–è?‡}¼~`R9¯ë×ögýž<:ćNÿÒXëøÿÿ‚¾xZóÃß·‰ïeŒ¤”v²F}H·Œ¿ó¯†á}~wó?¸¾—²¬¸#ɵã¸üÒÓç¶²Ô!º»‡ÏHœ9�;w�ô¯Þ­;þ ×ñ'J±‹NÓþéÑÁn�òL*¨(ýÀWብ.»¯ZèÆâ+As'—çÏÄkžïè?ÏÓöZ?ø!wí14BH5í ¦3‘¿üëís_©>O­ŸÄ> Ôã:q¯>O[sZÞv=Uà¿_Áù<aôûdŸüj¿=mßÛ¿^ýµ®ô-CĵÐçÑ<à²Á3Lò$›~Sò.?Ì××Kÿ(ý§�ZÒ@úñ¥_ø!Wí>Æ5­ �ÿƼÌ6#)¥?iIÙŸªñ.Wâ¶sƒ–0¥)S—F�Ä…ˆÛ%qÿðJmrûÄß°¿�u-AƒÊa¼BÃÒ;éÐ~‹Šü%?ðB¯Ú‡o:Þ•žƒï�Eÿ°‡À�~Í?²Ï†> xÊxn5íbi-ÿÕŸ:îYÓðº×•Åù¦µNúŸ©ý<-â ‹7«W2¤éÓqëÞèûË‰×æûµü”Áf¿bË_„?-?hŸ'•£x’QüAzˆHeÛüħŽÌ„ç‘�ëbIDcpéŠþB¿à°ß¶Ú|vø‘À¯…ú’Oá_�×s[¸x®ï\|d:EÀÁÆ]÷g�¾ûEн=ºŸ´ý.«eáyhÿþç{õù[sñ4rÛH¯Uø%ðƒÅŸþ*è¿ <¾¥¬ÍåÄÎ8DŒ$�ÿ¹1¯+c´ùŸçüþè_ ¾(xÛàÏÄ-3âGÃûÉ4ýSH—ÌŽHÎ2„ltaÜH„‚¿_­í=”¹Oò‡¾«m9c…uÍmíÖÇ÷“û(~Íþý•> èÿ<(7%š™.¦=gº—Y1Û-ÐvP^kê¬qžÕò7ìkûNxcö±ø¥üVЦFºaömFÝO6×±óc#¨ê3Õ[¡úÜž†¿Ÿq|þÒJ{Ÿô ÂrÀË.¤òë{+.[vèGwÿ’ÿ»_ç�ûR�ÿ ;ñ?ô3ê¿úW-¡­÷üzIþé¯óÉý©?äç>"ú™µ_ý+–¾ïÃÛûI[Èþ"úyÿÈ»þ'úUÿÁ%À··‚�Lý³ÿId¯î%È=1_×üq”~Þž'‚~ÖþÉ_Üdg;@>œWÿ¼ÇÐú¿ ÿü“Æÿ$X«ï~µ=|Iý¨QESyïÒ¢vÀãÒ§™=Yd$r1ý*7¹*qŽ1B’ hª‘Kæâ¤fn‚… ±=grg%PËçü›öËñ~£ñ þÉÞ¿’ËCÒâŠmlBB›»™@’8de9ò¡B­³€d9`vFGÂß°‡ü¯âGí§­K­4í x7M�Gwª¼[Ì’c>Eª¢I1�Í�±‚ ÉÚ�àß¶®§©ë¶Å ÝVF’Qâ�Z [¨HnäŽ5ú**¨ôWö£ûxGþý–þøo‰ØÅ ØÈ­JóB²I)Ç¥v.Orküéàþ‡ˆ\qŽÅg2n…¤/öTœc%¥åmß©þåx�ǵ<ð‡(ËøVœc‹ÅÅ^­“´œêTÕ{Ò÷”aÍ¢�´j6*~Ο²À?ÙSÂñè? ôX ™ �Jä,·×AùåŸhõ?*…@@â¾Aý²ÿà«ÿ¿f‹kŸ |>’xÅwGö;YGÙ-ILÝΙ«aOœãÆjü‘ÿ‚¤~ÞŸ´}÷Ç~ÎþÔåðï†4Y–ÌÛÙþêk°bVgšQó•}ü !v…ã9¯ý�à”_?jÅÞ+/à È�῾·gžè2†CmjZ6xØûÖeL}Âä>÷‰|jÇO>ðûiÓ¼9¹RQåv|±øRÓâžžGã|ôPÉé`)ø•ã^ozU”j(sÉÊjIJ*r^ü�šýÝ%t¶••�ñOü§öÓñGÄsñ)üsc2Ü â°²‘¡Óâ AXV؆,¤>âãï–95ýlþÎ_·ìÙûMØÇoð×Å·²F†ãN˜=µÒ± »lS*4ЬBï�rgŒ×ç5÷üSöq}áÒüaâHµÔšV³’&>ñ‰mãb¹þ4q»½~+þØÿ°/ÆÿØ[ÄV^!½¼žƒq>4í{OÙW%RdÉkyð»”eÇÝrCò96aâ*¹žoGë8y´çyó8ïªÕòÞú¾V´KMÓ8§%ðOÆ«pÿ â–EIQQ¢©©«/u§Ïn_v*q’»vjçÍ_´¦™¦hß´OŽ´­Q,íµíB8‘*ª­Ã€ª/@@+û™ý–5}W^ý˜¾kºä�=íï…ô{‹‰$åžY,¡gcžå‰&¿†_€Ÿ u_Úãχ~ÉrDþ$Ôâ†{‰_ ¶G̯¹³–Û’8$šÿ@ #IÓ´"×BÒ![kK(R"ŒacŽ5 Š£°Uj÷¾‡9ujØŒË8K–”ÚŠ]/w/ü•4¾gÆþÔ|ó †Ád<0åψ¥NOª�£ÿ�Ê2öç¡«U›ï•úUš¯�’+û¤ÿ‰›î×Ï¿´iÇÂ�Tÿ°¿ú¯ ›î×Ïÿ´z�ð£T÷EÿÐ…{1þÿGÕ~gÏñ_ü‹k…Ÿ—ÖZƧ¡Ý CH¹{KˆóµÓ¨'§Ðg¯ŠÆÿ‚‡~П³~©­h¿²gíIý¥¤i>"Ó-õõÝ>v„[Ü–eQ?–TˆþL“»¦*ÅÃ�Œs´í=8õéü«ò·þ ƒˆ¾=ø0¢’Ãp|£Ž<ɾ˜¯êºÜ-O2ΰ¸y>[©Y®–ÕÃÅÙwVÀå8™¨óGM<µº>^ý¦ÿàœÿ>é�ñáÔ‰ãÏÌ¢[}SJį D|¦æÜÜ‚?Õïõ!@¯Ï=Ä¡ ¶Eº�…l îµ}Mû3þØ_¿e I�Ã[Á&�9Í΋x ²¸rß&BÃ9t\œšýEðOÂØ?þ [öÿøRKß…~,ÐaMCÄZ}œhÐ=·Í™á’À¶…¾Pd\cÿ[ó.J9Ô]Z='M/[yz›.Âgv–W%N}bÿCñ#ÀŸüeñCÅÞøw¥]kwÓ�‹¬eØŒ<*BÄ ý|øuû,ü ý�àÓ¾7þÙþ'y<_:_…tIØK¾/˜yÌ¥wã¼R»G$f¹oþß¿ ¿go]|ÿ‚|x}4Kq˜.üQ|›ïnˆàù>név“Ÿõ›vãå¯ÈÏøƒ^ñv­yâ�^Í©jW`™î.�¥–OMÎä–Çðç¥qbig‰}ÿ#¯ ŒÀdµ”¡iÖZy%åÜþØiÒŒŒ—[ZsgçÄ?~0ØßÝ]¯ýt‹ÿ‹F­8~6|M‹‡¿ìÐÄ?öZýœ`�Çÿ­P=œ È�¾£8©ÿX0òÞ‚ì ‘^íF|Agñóǰÿ¯x%úÇþ®‚Ú Æ¬vÉmhþÛ_ükêæðþ…9ýýœL}ÑOôªxÁïÌš]®1ÿ~¶ý 5¦ÿ]a ýÏ?çÒ¶í¾=»ñ&š¹ö›ÿµ×¨¿ÃÜ`ÿf@1ýÕÛü±þJÏð“À ȱü¤“ÿŠ¢¦+/{Sh¿ªcÚ9(>9iÍÿN1ýÒøV¬?¼;!ýí´éø'ÿWåø;àÃþ®)é!þ¹ªßð¦|8?ÕIpŸFOþ&¢O/}¢§�|SðÌ«·GõOð­tø‰ái?åëg±Gþ‚¹³ðwJé ܣꈠª­ð’qó¯Õ3ÿ³V\˜.�šª˜¥ºG{�<4ãoÚÐg×#ùЏž"ÐÇäÜ'Ý©ú®?•7þ¾ªƒ+±SùOfܵȯ%‹@ñ �£èjüZâpâP>¹¬%„�IòþSÔ¨¯;ŠMeç¯ãÿìÕèîõ:±Ç¨¬Ö÷+Ûùµ!õ®n+ûžw*ЊæLó�Q:.&¼æ¦E-B�º¦¬Ë (¢€ (¢€ nå§T+·ÿ R”F«æz/çüÿ‡ñ£ÿHøÏ®þÕ¿¶D_| þ—…~4-99]÷·3{afNÑIé_ÕícñÏNý�~ø“âµæÂú]œ¯mœ 'Ø|¸ÿàMÅ-ŸðG߃ÿ¿k™>+xÙšö? ¤š�įϛ}9Ûsë—i¼uöœ+NáS.‹Cøïé3�©™âð\%…zÕw—’[~¯ä~¶~ÏßðEßÙ¯Â~±Õ~'ÚM¯ëO ý¡n[ý;Jˆy3_rø#áì/ðïVO xCLðŽ›©Âv%¼?d[€Þ›3¿5ðÿüWÆß¶_‚cc©þÇFö æÔcÍÆ—™}Ÿ±÷úìLý÷Œ ¤gŸó»>7m�x€ê;·ý«ûN÷ÏÞ;ùžfÿÖ¼¿oW¹å3íñXL‡…e&›êìµüõ?×:ÏÁžÓÔ +8böD*Ô“AÒ®Ó3[£ö†kñóþâ¿Û3Åß±…¾¥ûg‹¹uU½�i2êQùwϧ„�aŸ¦ì>pÇæõ'·è·íQ¨übÒ?fÿj³ÜI?Ž ÐïŸA�Óz> !sn6ï1ÅxÓ”ù¹n~Û€§„žb!I$ÕídSøƒ ~ÌhŸ£ðò´œ,:�µROû+!Í|Ãñþ oû|[µÖþ²Ó–QÅÆŒÛxÿ~>¿…›GÅ�Žßµ»ã½Hüdñw‰_Äv÷2ý®;Ûë¨å†päH<½Ê"!øÂ‰ØWõÓÿË|Kýµ¼aãX~+jZ®³ðÒí¿²nµƒ$¬·û¥Gkq/ïóä!ÆäçÓöµ©.xÉŸ�às,›<ÄýG‚V}ÒüOÿ‚�ÿÁ3×ö8Ò­>#ø'R—Sðæ¡wöF†H‚Éh΄¦dÞÛÃìÛ� ä×ô ÿ¨ý£#ý ÿeÍ2]Js&«á³ý•{¸åÙãDu\l܃é^åûu|·ý¢¿f/ü60™o&³yìvü§ívß¿·ë"*bkùÐÿ‚%|n¼øoûJêßuy„V~*µ�<·X’P/áó³ôZú'Zy†^ù¾(ŠÑÉ0üÇ”£…\¸lRµº&¶üYý|¹ÛÁæ¬ÕqŒóV+àÏŠ(©r£¿?à½êöfðᧈ"ÿÒ[ŠýàÁ gŠüÿ‚÷©OÙ§ÃCψ¢ù~–÷ìðä’ÆBGâßHJS—ã#woÕÉwé_Ûü¬Æø<öó5àtõüPȽpå_Úÿü½Y`??{©uÿ°„õ÷œuZ2Â¥}²Êô¸Ž¬ç—#Ý[ª?SãÿW^ ûOÿÉ¿xÃþÀ÷Ÿú%ëÞW,çŠðOÚ€�øg¯z&ïÿEµ~a†øÑþ ño€­î¿Èÿ*Qj/{ã¿Ñ—,ÄSã\<êA¥wº}�êaLm�x¯ãOþ û0jÿh±ñGL€�ÆžeÃOƒ�æ&�ÏA”ØS¹½ e±¡U±_<~Ñÿ³_ÂïÚ�áÝÏÃ?Š_h´—G*dM«÷d‰ú†¨¯Ë²,×ê•ùúé·Ž¾Ç‹29`©»TZžçùòE$–òÆðŽœ‚¹#Üs�z_Ñ¿ìÁÿÏÓ<7áO ~Ò:íÝÕœ1Åý§¥´rØq¾X$1y/$¬’dö¯€ÿk/ø%wí û<ø–æçÁÖw>-ðà%༴‹3$`tž8ó´§Ý-Ðõt¯Ì)íç†CÈQû‚1¶¿Y¯…ÂætW6¶?Ê܃9âß1ÓT éÉèÓWNßžçõ?ñOþ ÙðcOÑ$_„~ÕµMAƾòm-×>®�;äzÿþg¾*üMñ‡Æ/ˆš·Äÿ\}«UÕî ÓÉØu "ð‹Ø^{µ»¡¯°goØ[ö�ý¤µk;_èÚuÙñ5»‹Ê´Hóó•r0äƒ#&£ –a2ôçcN4ñ ‹xòµ<-h9Y馕ÙÎþÈ|]ûG~Кï ÀÒ/Úòò]¿$6°82<žÇýX÷u¯ï§Ãº%Ÿ‡´ /é‹åÛØÁ¯¢D *þB¾ý†ÿàŸ¿ b¯Ü7‡ZM_Äz ûV¹UY]G+j8Ž yÇ,Ç—-…Ûú ˜'ïµù·ç_[¨”6GúCôhðn¯ eRxßãT³vÙ%²?˜ø8!Añ¯Ã€FY­u<ø¿ùÿ<;IÃWôOÿ Æ7)ùmµ vÿ¿o_ÎÛFÀ¡@@úWé<-^+Ú?ϤÞWZ¯b¥N›iµÑöG÷÷û 0ÿ†Aøg�ú´�ý"о¬ }käÿØiV?Øÿá™'�øEô�ý#о°$¡Í~7˜~§úýÁQÿ„œ2kì¯ÈþH¿à½ÊËûMøSþÅÁÿ¥s×á¬ùñçûÃù×îOüÄÎß´ß„·äūџÒLê%�£ÏÞ\t¯àOöõø}­|5ý°þ"xwZ�cÍ­Ýêñ€a½�ÜÅÿ�åAõ¯ï¹H$–û½?ÏJümÿ‚œÁ6ôÏÚ£HŸâçÃl[xëN¶XÑ07ÐÅ’!~˜“�N~è]¸¯ŸáLÎ8\G¿³?£¾•âx—!_QW«IÝ.êÚ£ùLýŸþ0k?³ïÆŸ|gðüKqs Üy‚2p%GGŽAœ©!Ǿ+ú?×?ྭ¼×>ð޹?ˆß)o?Ùã·mû¦e–GÙ»ø„9Ç;sÅ1Þ9øw㿆ZñðÏ�´{�RˆdÛÞDb|{\õ†�¨k7qiÚtqspá#DRX»ô’M~‘�Ê𘦪TÖÇù³áÿŠüSÂtêà2ÔÒžé«´öºìÏíþ ‹ûsMû_|6ºÓ¼lñGâíM·‘E€� „ˆæŒw|øé•ÏÞ¯Õ¼ïzþk¿à�_°�í ð—â+|øˆóøjÂ[9-†‘,CλYqþ½[?-Ñp›˜�Î2+úPÉSþÈý+ò|÷J�w èÿWü γlwÒ«œÓq«¶½WF[¢Š+Æ?e*ÊÍÛŒWÄ¿·'í·á?؃á¬?ñO‡µ­|ÞÌmà�I´óã…‚çÌ»™™"¶€d#°µ}´Û·üßÿ‚�~Õן³7Ãßx{DðÍ§Šµˆº¯ü#–Vº¬ÞF˜¦Kiæ‘®›Ë“z숨…Wt¹ÀÀâgù”p˜:¸™;(«ž†W„uñ4è¨Þìù?àüàÏÄoé~ø§¥ËáѯÞGeaªÚÏi{¤‰¦ EÍÜ.-äaÈ(\t=+ã/ø(ü]áo�^/ñ·Á¯€Zd¦½áûèô˜¯nG™oæFfKé@ŠQ½bdT�•ÜIÎ1Ïâ—ŒeŸŽÔ4õø½§Çeàù-ÚËYÔ<$þt“ؼåŠê9‘;x¤ÑÅ!@>\Ÿ¡^ýƒ?cô+mbÓÁ–ÌwÑ,âúõÞêYĈHÒ»Y³œñÉ< þ&⯦._“á#:¯Ús=6·ŸoCúw-ú;VÅUæ¥îé³?e¾ÿÁlf/~ÏÇí|š�¾‰£^Ûé6ÑIgQÕ¯#2ý†Î9YåDgÿd…°f¼wÃð^__üIµð†»à-Z[kæ+ 9µÔõXöǸùÖ6·RH£?ÝÝ„›~~Ó²WÁ߇út_³•ž­¡xÞ_>M.ÇBo:5�ò›yÛË…2U¥ �8É µî?²į�ðLÛ�_ãÏÅxZÿÃ×+¦X›;+ÇþÒÓ×|–¹´•à0þúk•yWpÜ£‘_SÁ¿I¼&w_ 8Tä…M,Ö¿%Øðx‡ÁÙf¬ê.yG¶ÉÛœþuºLOÞç¿lzV�gXüöÉ!\ØóZ5ý‘MÞ)ŸÎ þ%¿à«Þð—…ÿnEáã•/ž ˸ãÿ–7sÂ�2ö‹|çýï¿Uà“ŸðR/ Ýø3Mý—>;j0éZ†‘[h:•Óˆ ¹·,v’;aRX†œH¸A‡Q¿ù×ø‹ã�ühø¯¬øÿ]mÚ�‰µ)®ä;CÜÊX(ôUÎÕ€¿^~=ÿÁþ7ø[N‡Å_³åü^.´™#vÓçxíocÜŠNÖ‘’ ßÄŒ kü³àn#âÄ™‡ð¦ÚRS|ô×XM¶—.÷Òþê÷_KhÑ?‹œÁ0à,—ÃÏóF»¥J´´å©J‹|ßK›–ÓiJ=y’kúgñGÀ¯‚¾9ñD7ñ‡…4�SV¶Úc»¹´†YFÀüì¤�¸ùs�½±^IûRþÚ¿d&«ñWR-p¹³Òl‚Ë}p3·)e ‹Îd‘•8À%°§ø¥Ó~;þÒ âoh>5ñ…—#ÁöMNê ub®‹R„\6s�Šô¿Ù¯ö>ý¢ÿmO\·ÃÛ'º…%-¨ëz‹²ÚÅ# Ç̘†g•¸ù3ò ÂüÃõéý+18Ûà¸o*¶.§Ï^öŒS•¼ì–ïMæŠ_³�”òæ¼wÄ)å¸u¥—'»Ñ)Nr�4ôÒ Mí;3õŸáÇüâߎ~=hÞ¹ð~™oá­gS·±èò½ÜQ\J±ó²¤]Ù?» z:×ô!ñ�ágƒ>6ü1Ö~øþÐ^iZÅ«Ã*n^2’!þF‘»0ðì‰ÿ£ýŸÿfYì|eâ(Ï‹|[fÂT¿»\[Á ÎÞÛ%TŒðÎ\‚ ï¿à Ÿ·o�ÿcφ—–óÅ{ãmZÝ—IÓA È\S¯ðÁÏFø™?jà‡œäÙ+Çø˜Ê2ÖÎÞìZ³Ž‰&岊ºè·?“üZ� ñOåÙO‚¸ Ó�;EN<Ñç’’q¨®Ü¢ •ÜåÊú´¬žñf½ðkâΕã-!À¿ðΩÌexíe Ž?„íÇÒ¿ÐÚ'F²7küþ?fŸ„ú‡Ç¯Ú Ÿ í’I¿¶µ8#¹( e·Üw8b Iè:ž+ý€~Sô)Ãâ 0¬ô¢çTŸ7ààF~Önæù66úÌiÔsÿ”U?üš5,-T$«“¶­ÕGÏ»<*þÜØÿ$ìN¹a…é^ûHÈ£áN¨¯•ÂÓý¡^úœá_´Ÿuªü2Ôm4èZy\*¢ $“¸qŠô²ªž6”äöh𸞔§€«îÑùI2·—¹†”�»ŽµùiÿÈU<.ÂU¼7‰%ÈÏ@zWî¥�ÂïxONþÙø±t�®[OüºWŸüg·øûPécÁßü'šr§•kwü}Û”‘pñõä!ÏýG•ñ„¡›ÑÇáé9Â’w·oÔþ4«Ã‘Ž[[Z¢Œê5oë§Cø¼ù†Ä“œw'iÇ÷G­~¯Á&™ãÏŠ1çn<Àc§?kãéZŸµ7ücâ�›iü}û=ÝŸø]>}‘kûtëµã�ÀÙ¹ýk7þ 9Ößþ+éó#$öÞhå�Ô£FàÝ|¬­‚wR2½Å~߯]¬~WÃ\+‹Ë³•BÑsYô·+KÈüž”!ºœÄ¸>t£rŽŸ¼n1ëUçB¶Ò¿ñoÝ“Ï÷õ'ŒW¶|ø ñkö�ñdžø;£O­L.$ŠI#\AùÒ¶#@= n8àWï—ìÿÿÂøû>GoâÚJhx�Áÿt;èÀ»ÓüÖ"òa±±¸kùY߰˪á1qämJÉùŸÑXL™ÖÌ(â0¯š ÇnŸ#ô“¢ƒÛµ&ïjzœ¨�´WóÊ?±š¹ÿÒþú›iëøW¿¶¿íÃð·ö*ð ñO�›íº¥ádÓ´¸ÜH=F5ã|�Àé‚HVûoQ»†ÂÊ[™HˆI'Ú¿‚oÚǿट¶­å§‚WíÒêWOc¢A#„†;|áÉ8ÀÚ†I?‹yù{ øþ1âJ¹}¬4yªIÙ#úƒèµànŒ³zµ3ZžÏ‡�=Ym§E~—³»ì‰ÿhïø*íeûCê²%Lj&ðö–\ù6:K l/`Ó¯ïœúœí=”t? YxóÇ^ºþ*Ó5›û]F_½uÄ«>ïïï>}÷WÖÿµ—üóãßìi¢éׯ¦˜5™%‚c;ÌÛ�ÃoŽ02ÏJølWòçãs5‰pÆÍª›úôàÏ p |’5xB…9áåtœRiÙÙÞêï[î~²þÊßðWÿÚà«oaã›öñ�‡2¢[{ò>Ô©ß˹ٻw´›Çû½kúúý›¿iO†?µ7Ã;?Š? /|ûž$�•’ÞTÆødOáaÿ×5üXþÎßðLOÚKöŸø^Ÿþe�:I%�b¸¹t”˜[caÉéóÿõ½×þ 1ñÿÆ?²ç톟|P^×Nñ Ûi…›¿ÉôeÒ'Ç#wœ 9SóÉû¢¿[à®(̰µ)ÐÌâý�O…³üëúVø À\A†Çf<RÆ`îêÓŽ—K}6OGf½í×?75'åM\»µ~Áfÿà¶¿à‘^Ò-nôy/ð—�4Ñ«ø7S´ÕlØíóìæŽx‰·ÆÄf®ÛkÚ5æ ÚU­Ü]E’ð£«H pr äsí@ôVZÎ�q|úL1IsKD® €ƒÆr9â°üSñÀ~X[ÆÚÞŸ£-ÁÙ_\Ål$#²yŒ¹?Jî²)7-%Ÿðt÷ü'ö¶ý„þüñgìsã«�Mâ�cP‚þâÎK‘so¼ÿI†`,H(s_Ô>‡ãï Ü\iþ½Ö,¿·§´Š°4ñ‹¢ /änó1ß8¨ä@zf壿ö¯äƒþ ¯ÿ ý²~Á|¿e¿ÙàÿŽ.4o‡ž=O¶»¢Ç¤‘^}³\»µŸ|“@ó'™aÉ�Æ#ú°ðÿ�¼â绵ðž±e©Éa'•r¶—Êa“û’Ø”ofÁ«±¢¹x×Áþ ¶ŽóÆ:µ–“ §bÉ{qº±ôB5­aeªÙE©i“ÇqÀ4rÄC#ÈÚà ƒí@û}iÕÁ[üGøyyâWðUž»§I¬ÅÄ– u º\zþ`ü«k_ñ'‡|+¥É®x¦þßM±‹eÅÔ© Iž™w!Gç@¾Yÿ?þº“jŽ‚¹ýĉ´ÈõÏÞÛßÙMÌsÛJ²ÄÃÙÐ�ÕÑPe@íRQEBzƒQŒ֦ﺼ#ãgíðwöwð|¾9øÓâé�ÿË{ÉV?1ÿ¹}ùöHÕœúVSœb¯'di R›Q¦µ=¸‡^òíRîÀÀ;WÈß³·í›û>þÔz<:¿Â}z+Ç�¢Ö@`ºÿ|Á&Ù÷ ŠúÅQ@ÿg·ùÿëR¡^�XsÓwGV?-Äa*º8˜8ÉtjÅ„!GRR�¿ÁY÷÷‘é¶�wpp‘¡cô²×cÏœ’Wgó'ÿàý Dúׇ?gOܰD‹ûSSEÿVÁßmº6:H†6pf_Zý9ÿ‚X~Íiû=~Ëz4ú¥’ÛøƒÄ°G©jm·–”´°Ç'ûP¤›=±_Ì�Ä_[þÓ¿ðQÛ‰<`GØõ¯ǦÊ-m¥©éÁHóõ5ýËZCµš[�•v�Ç{qÒ¾ã<�Õ°´ðÑë«?Œ<¯#â¼Ç‰*kÈÔc䵿ßcO �„cž•ÃGðËáäçü%1è:zj{ÌŸk± ÷“œù›7çß5èQcÑœw5øÿððž‘yðÂÞ0ž?ôë-um"H®måyüÀŸJúNÄrb”^ÏCù³éGÃ0ÅðÔñ›NƒROó?b>|QÒ>8|ðçÅmPöúÕ„7_/!$týâÀ*GbµíP°M¹ë_ƒßðB?ŒŸ‰þjÿ 5\2x_P”Ùž‡ì÷8œ†ç“æÈþÀmü?yrƒô¯+5Â:åI÷?V𻋿·2,>d·šWõZ2íQ^y÷äNXt¬ùíVè~ôÅhõàŠnÓJꉔSVfHÓ-�X×銚8V% ñíÛùV–S‡«�õ3†ÙüÀ“ŒT�`ÕÚ)GM�Z1ÆÉÇ1®>”%¤0`�P{ ÑûÜn§¯ÊyéUí·2ú­4èOPª•©¨©63¼¿1eÏ¥pž!øcðçÅ?ò4hv‚ôÿJ·Ž_ý MzöÅ.Æ í¼Öˆ;¸ðéP�¶;eÕŒ5Ó­Yr#Ç×Ú¦Kx Ç�˜ïÀ­H*62¨ã Š¥6ú™Ã JñŠD½¹ÍRxüÍÑ8È>ÜV‘¤Øµ)ØÕ¤ÕŒìÛ@0#ì1KŸ 7�Ž„ Ñ;À§aj½«êÌ’wQAósIƒ·ÔôT âx[Å–‚Ëĺm¶£_.â$•?'¬o ü,øoàægð¶‡a¦[[XáÿÐW¤384:n_§zµV]Î)e¸w.yA_Ð~ßn•bŠ*ТŠ(«>¨íþø{ÿÇø�ðÊÛöxÐ~ êäMã_x‡L“ÃQÝž)­î£Ü«¨ÛÈ]Ó,Ë�ÜWî[{z Wä_ü‹þ ûâßÚGÅ>ý¢¾^ÚØ|Cð�³i蚃g}§4žs[9Ts‰>dp' Æ1ñ<…ÄVÊ+ÑÂCšr‹It>“„kÑ¥˜Ñ©ˆ—,SZ®‡à†ŸûCþÒvÞ?ñÆ�kðú GÃ?mÒÿW»‚õRò=5òVð[´ãß$`¾„ä úAñ{x‡ÁÚ_‰~[Øj~¤Ëq$27Ùü¨æùÚM§p'”*}:W”xOKŒÚî«â ^-CÂ><ð½Í׆u)-XÁ+ 9–˜Ð d%FAŒ×sû9þÍ>ý�´-JÛA�d¾Ön纹�˜»•™÷$dœq㥈¾*K‡p˜8á*S•<]'Ë:vn2kªgú[Â1̧]ÕSŒðòIÂ[;vd¾%ø‡®ˆ–ß ÿgï Ãã?ˆúÜØÒt´‡É�GÏ=ä€ÅDÉU'$ ùGáÏíž>ÿhïÚƒÃÐZx GÕo?´mí÷ÝC:º=µ´›#Ý#yw+ '¾kÚt/ØëÂÞñÇŠüCàíJ÷B±ña…îáÓæ(Q6´o¸—qfOñì>~Ï_ÿm=G\ý›¿gÈ­<%àË–©©^+ÛpŸhD°P²$§tl’“�™¯×|ÁäùŽ/‡áº.¶" Jn^êŒmn^Ú âñ|6&¾o8ƒ‹Œywlþ¼ü=«iºî“o«hò¤ö³®èäNCjèkË> ü+ðgÁ†šWŸ‡Ö¿cÑ´hš+hw3ìVvsË~óµêuþÆa›öqæVv?κ–æv?€¯Ú·à®©û7þÑÞ)øS xãÒ5 „�Á{7>e¬�:˜Šçg#µc_°§ísàÚÇà¦�®ø~â8µí.ÞmcM-ûÛiÕ– y0É‚c~„|¿x0=ÿÁJàœzoí}¢Eñáä‘éÞ=Ñàò¢2|°j6ã‘o1þ çÊ—§%åÚÑ,¶ÒþÓ±_ÅhõqªøÄöE•Y�Çæ"°Ü¸`b¸„²òxÛ ×ùóÍ™xWĘŒOÕÜòúï§E{Å'²”.ÒNÊKnëý¶Œr¤Oà²ç��ë¥ÖVJMÇyS©Ê¤å ºouÑÿU^4ÿ‚?þÈ~=øÁ¨|^×áÕ j·¯u¦ÅtÎI¤}ò}ÔóU$l–U�c?)Q€>æñGŒ>þË c¾ñ%Ö™àÏ é)åAT·� yPCœà‘jY¹À5ü´é?ð[ïÛOMðôz-ä^¿¸Hü³}=„‚á�÷ÊÃâ?º8ÇãoÃ?ƒß´'íuñæ×Á‡‹uë·óïo&v“¿å­Í̧ œuvÉÆOú©û$Á¾%üEû�i;¶ð¶ŠäHt¸pÚŒÊ6�¬yŽÝXg“¹Æ1³�Ãú[øIðcáoÀ�Aà„Z®ƒ¥CƒäÛ& ¸|Éd9yd!@2HÌÇ&¸roø»Ž10Ìxγ¥AkkGoîÇhzÊòò=N)úRøiá¦EáVŒ[V•gw ®²©¤ªùF›T×F¶??à�_ðMŸ ~Ǻs|@ñ¼±ë=Ô ò¤�y·°…±ºl�–oùi)ä€B®íÿª”Q_Û\/ÂØ › »-¦¡N;%ù¾í÷?ÉŸ|CÎ8§6«�çµÝZõ7o¢è’ZF+d–ˆ*”‡š»E{Ò�Õ�‹EaŽ*¬�ïÎþƒñëô­ŠŒã×[[¢eÕ™ðŸÆ?ÙÃPÔïeñ?…îd™ä;Þ–Éô‹¦=…|W©iz–“|öZ­¼�IC,œz“Çá_¶s)<Õæþ:øiá_ˆVÞF·n®Ê>YG ¿JýS„|H«€Š¡^Ðû¬~#ÆþC)b0såŸkhÏÊ? ø¯_ðuÂË£Nö®YW”uôØFà3^õð³ÂŸ¼yâ�Æz¿‡!°ñÞ–Ö—×vˆQg´“p`BawrsÆk#â/ìó⯳]X�í 8 `ù«þòôÀö&ªü!µqï cH/Ö¿@ÏêeØü Åaeii·©ù&EC—c– ïè´èqZw‰¼)ðÿëà/�Z-·†4HÁDŽØ+�Ÿ™˜å»ð[Þ¼øÉ5Ñ/#™’YŸN½O¾kcFÐõïêcMÑ-Úêf?q§=Kpÿ8¯¶>~ËÖVžV§ã¦[¦\0¶êÔã�Ç6>‚»«ç~KAUVs~zœÌsÚî…5ËMZ+øáO‹~ Ý,:]¾Ë~�s(ÚƒýÑÀ?Jý!øYðÞÓáž�ý• Ô·d•gy[*?€ôèú}�¥�ºØÙF"H×`(ôÿ V¢�¿/A_‡ñO×ÌÛÓ–‘ý)Á~aòšqN\Òô±"q÷jL¿¯éFöÿ?þª7·ùÿõWÇŸ£ÿÓþ׿kñXýšXLä ˜dzƒò•+_’x”� ¸|ÆZœµü?ÈÿH~‚µ(ç9N}Á4案ÅÒýÛ{;)'÷]?Cûýº`þܾдOêךBhsË4fÌDw™P!æ£1Ú¿7fÿƒyþyG�5ÆcÑqkŽ?í�~BhðY¯Û·I·[{¯Úß•ïqe?÷íRº¡ÿ½ý¸¶ƒÆ�=…Ÿÿe^N3�xkQÕÄÒnoMVº|ÏÑøWè¹ã·à£–䨸ӣÚQžš»½ã}OêãöFý•¼3ûü‡á„µ;�JÖÞYî|ë­ža3Ä|Š«ÇÒ¿ŠÙà¢÷�¦'ÿ…€â-¿ÞþÔ8Çã^Çâ¯ø,?íéâ[Y,¡ñL:z8ÚEµ•¾å Ëàý3]÷ü#öjñOí-ûZGñSÄ©-Ö“áYާ}y6ν}ÞZï8;ÌŸ½8ìŸ7ßË™ñ8­‡ÀåÑiAßm‘ö^x/Ä^åùçq½h7V“Z;¹I·¾‰jÚVó?·{_õ þèþUþyðV[�2ËþÎø&ÿ´^Áàõºðwöi½ÿ� ÊþImÿ/–5=û‰ùx;»×ú*ñ�ùWá÷üoþ�ðkþ õðûH—XÕdð_ÄO ,«¡x’Þ/<¥ùšÒî ¡–ÜÈ®×G�òè~gGýìÿï­ÏÜ!°.}8þ•üÿÁW5ŸÁQ?àâïÿÁ!þ-øƒSѾèÛIy¥i÷f[ùÿ±ß\¸™ø!å‘6[Fî ‰4a]ËzÒÿà�ðs¦±áˆg�~Øše‡Ãøc[_í +«Ù5sl¿(xÓà½s³øø÷K÷¯³à£ßðAoÚö€øÇð»öðý�þ,Ûøcö�øw¥iú}þ¿«Zm5û�:-/æHÇÙæ�I#òfŽHœFÀä$üJý¡~YÿÁ¼¿ð]_�¾ý„µ�^Óá×Åÿì¨5Ï ^^Iw ±_jGK¸„ï$ÊÙ=»É™#˜0S寣à“ÒÊßðvWíQbvØøœã;±ÿM0zöÏåÀ¯¿?e�ø!¯í³ñwþ á¿ø)/ü3⎋ñÅ>Kaá­Ãp:XA-“¼–¯#{DD‚w7+p“$ͽßcyWí5ÿÿ‚“xGþ £âÿø(—üã?‡üß<ßí6Ö!’K»1|‘ýº5�ìï-®by"G¿Ët}£ø7�‰?aOˆ³ü.ÿƒ�¿m‰"¼_ øSÅú¯ÙÆxlçÓ&Ù×ø¼¼qøW�Á¿à�ÿÿàà|dýº¿à§¾%×|gªÚë1iZ~Ÿm%¤V¦h�˔ٗŽÞ$xã¶‚2‘ ¹_Œ~ÛÿÁ1à�?´—ì-ÿ2ñ¿í“ñ�â†�ñS@ñ·‡õ +Q¸Ôàk7×Z›Ú\\ÏqÆöáh$ïˆÙGjùÏ¿ð@Ïø*¯üoö�ñŸ�?à‹¿<=áßøêQ%ƃâÈCjˆÎðǃe{æÛÌd†ÝHPìpÜ’ðwü9û!ü%ý…?àŸ?³ì±ð(Þ/†|-â |ZI¨Íö›¶7)Ì�,›P9ó$=@P8¯’?à¼ßðKÁ$ô€ßµ¯À¯ø¿[ø¡â-byµ¯kWâ[›�BÒ+{˜ï!Ø‚HœHÎ6™$ãh%°Iþ…¿à¤ßðCßø(¿ü�ö$ø)ðSã_ÅŸ ë_þêZµî»â›k«[[ä¿#ÈHRÞÜå¢@›É… !æ¾ ÿ‚óÿÁ¾8ÿÁY¾ü-øuðcÄú†î|uuu6·ö¯.džÞ(@‡ìñJr |çe~ ÁÁÿ ôßÚoþ çû%üñ†¥}¤ÙøãÃþÓ/nô‰D�Å}®_¤¯o.G&×;885áðPÙ/ŸðooüÏöxñÿì®kz~‹ãymF§£^^µÉš¿ŽÒöÖCµ<Û{¸§I˜åчɳ÷»þ ÿGý´¿l/Ûá7íÕûüDðï…|_ð§EÓtû;}zÌlÓ/g½†é$H.Ò@^p RÁ³ ÎíÅkοg�ø íÁñëöðð¯üþ 5ñoHø‹­x í¦Ð¼=áèJ؇±‘§´mgpCp|ó p7œÿë$Û¸8Å?ðWï†ðE/‰_ðROY||Ô~1|sø¯{kmøáØ}R/É*’̃÷nãd†Ú9!�¶øÆü/Éÿðo/‹ÿl�‰?°í»û#~ËzÞ³±¡évÒxÎòo"òÂòøjOœ%¥Ìñ[Æœ2Ÿ œµ~¸êßðCÏø*—ìáÿ/ø­û_ÿÁ9~1øKÃøÕwyq¬\x†ÊKÍON]Bã퓤=¬ñNb¸$À|øƒ +¨Æk©ÿ‚jÁ ?o¯ø'‡‡?iÈy<´/¿ËwQ_]ÿÁBà…´·‰o[?ø*Oü»âVŸðÏâ»Ä‘êÖZÔO&ŸzñÀ¶†@éÂþþÝ9á’G#̯Éü…ÿƒµ¯Úönÿ‚¿kß >|%ø©àOÙ�âmµñ·Ó0ð¾�4vzÞ¥¬—¤’*3‘Ô(ã${WM;þìÈÿt)¯óÉøññÇž=ÿ‚ŽüRÿ„ÃZ½ÕWI×¼A§Ø‹Éžaki¢ñÇ*Ç÷qF€ €|ÏñövÛrÜý_ %ÅYŸöt*{?;\ÿBxõ ¥?f‘_Ž‚¿Ì'ö­ø±ñ7ãÇ/kÿuëÍzæßP»‚)/&yV(£™ÂG ¿Æè‹Šýfð7í)ñçᬋÿo‹µ+D\b9Þÿl_1þ•ø}ñ[Dø«câ-K_Õ¼3©ß½Ý̳¼ñÂ$Rerwæ2}}+òçŽ)æ°…: Å«ß]5?´¸#èï‹àÜUZøÉª±•’i;«^þ—ºû�Òï„ú®«¡xO@Õ´k©lî­ìàt–(ñ�ƒ”d9ÐðG­n°ßŒðgÄ cJð�šùV6º{}ƒ¿#ù Ž:ÿ¬f5çpVm<·Q×M¦»ŸcôŠá*Y–a£€’U)½[ZÚÚ®ý�ôz“Ç~·×Ã�ºê ›ÒßÌaQÔ„ë�Ü×E¨ÙÃc-žï–dd?L`×ùž~ʾ-ñLõE©]®¨-Ä‚ífq8�8ùÄßx7¿ïWú#þÊ^ Ö¼Kû4xÄ ¹{ËÛ½NžâyNç–I-¢wf'’X’I¯Ø¸_‹>¿Vt”9\?…<[ðR§ à°øª•yÕ[¦¶³[üµ?ˆßÚÓ៌ÿgÚ«Å>½Il.mµYoì'PPn$3Á$g¸ùÊdq¼0ê+úˆýˆÿà©¿¿h� éþø‘©ÚøÆ+ qÜZܺÁÌÂmYˆW-×`;†}«êoÚçö"ø5û_x]4¿ˆ‹£Ež£þú3�»‚cÉù“ 58Ÿ¿à‡ÿµ7�®./¾]éž+²ˆŸ E�Û�Ó1ʾRöDÌ+÷XãpY…N»´–‡ù.âïózØü†Ÿ¶ÃTwq[éµý._Öº­•Ðͼ¡½Áò­¼�p7 þ+|%ûÿÁV¾Ú�;Àºnµ¤Û vºÕœCñäû溯øf¿ø,›”ø—ÿ–£ÿn«ÎŸ Ó[UV?SÂý%±î?½Êj_ËþþÊ>Ù÷Ål‹ûâ¿�¯øfïø,·§‰¿ð{kÿÉ4Ã7Áe½$k¶Z�°$Íy:B™;>>o@>cÚ¿‘ø*íû¥þ×¾*Ó|ðàºøK@y%ŽY©º¹o—ÏÚ@*ˆŸ*gŸ�ý«˜·ÿ‚`ÁCþ$xˆÍâßÈ&¹!¥¼Ôõ;Wÿl¤ò9Dzý-ý–?à…Ñhž ‹Å´¾¯m«Å º^ž�äù˜áÞgØÇÜÙ�zö08|^ý¬çÌÏÈøë?ã^<¥ý�‚Á:4dýç.«ÌôÏø!/Á¿øOàεñO_�­áñ%Ù!Áe´*¨\{C…õ×ï®Õ9,9®sAðþ�á]ß@Ðmã´³´‰!†”"$qŒ"(tÑ’«_™ã]z®rêfxoÁ0á잎W~E¿ŸRÝQ\GÞQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@œçâ�ç  QIÍ3-é@QQî8É£/éü©&$¢šiÔÀ(¢Š(¢Š(¢Š(¢Š(¢ŠªcË’}+ó“þ #ûcø»ö=ð߃ï>øqüU«x“^ŽÚ[�i?²ìà–÷Q’VR÷ÞXcç{0œb¿Hqóüíÿ‚‡|ø›ñ_¾ø¥ð.$»ñ¿Âý~/év/"@º‚$Aqbf�„‡ÎIr¬ÙPȹéÃ�Œ�6¢o„åS\ëCùÂøûEø Åš×ÆÿÚ_C¸ûF†þ'ÖïàÀÃø­i¬Ü?ŠZ×Oû¡syaÈ–>yŒYJ×WŸ7÷ÅŒi�Êk/öYŸÆ_´v•©ÝÚø—ÆþµÑ®M’››»ß$`eû xØ *ÿ þ“~ a¿´ñ8éb-Í>i;7e²Š²õÛÈÿC|ãjµ²ì>4¬£UòëØû‡ZñÓxgã5�€uŒý›Äú|²Y6~TšÏ>r˜Ê4gZò/Ù·þ UqûÉñÂ~ðÌÞ+Ô`×ìåÔL)˜tëIöª½ÄŠÁciLÿº^­åŸjüµø¹âȼuÿ ‡Ä3â©ÓáÍÌwñ:žÚâÎYšá!å ¶·”ý¡r?w/œ`þòx*/…?ðQ†ßðÉß°WÃè¼ðžâîÚ_øŽÞÐX,Me0¾µŽ8.c‚âõ¥¹‚H™€ýÎI'œWïD¯ ©äõž6�EÍÉ´ºõR_$“õ?-ñûŒe‰Ã¬ᢕÿ;«~]êFÑ㚸‹î¸È«ÕNÑVé0üö«•þ‡ÓZÇ¡\7Žþü<ø££Â;ñ'AÓüAa¸8·Ôm¢ºˆ0 U`g‚Gjîh©­B éÔI§Ó¡Ñ„ÅÕ¡R5¨IÆQÙ­ôkcó«Pÿ‚PÿÁ?õ;÷Ôn>D¯+n+¡©D€ŸîÇÒ¢�eP¥}Cð‡öiøðÛìÿü#¥è刚{kuûK 9 %Ã4€›Ü׺Q_;•ðNM�­õŒ�9÷Œ#÷¤�·âø§6Ã,k™W­ImÕ©8¯ûvRk§`¢Š+éÏ€ (¢€ (¤' ŸJZLJ®%Ü2½Aö§Y6ºàzæ„™£C b¼ã�¥Dê™ÎÞh—;“·¦q’síXó]Ø’(de\ކ¼é>øF NëY²¶Xg»ˆÁ)L¨e9ãŽþ•èÄü»Æ}iëP6¶1ý+¦–&tþ œx¬¾•eûÈ&qÞð…|d¶Zš@€uÜ~¤ó]’…Àúbœ##ƒÒ�åÉ=+:õ%'Í-M0øZt—-4’òg aCy[†êxCÀ¤òܶàqíŠJ‹–h¢Š ?ÿÔþû-ë_ ~Û°ßÃ/ÛkÀ áo)³Ô¬wI§j1ß[HÜtß`oŒä6FU#îD”sŸj{}ìúW>+ �tꫦ{;Ä8̯O0˪:ui»¦·Lþ?h�ø%·ísû>êSùž¸ñ•¸ùWúLFä=7ƒ͌ÿ)�C_ Ùø Ç—ˆ�„t½öãSC´ÙEm#Îíå/ž=+ý/n#´1í¹Û´ñó ÌMF�„‰icè¿ýjü‹àî ¤¯Jn+¶çúQµŠpx5C2Á¬×ÚMÆþªÏð±üFþËŸðGßڃ㦩k©xïM“Á¾W_6{ÔÅÛ í±!³ÇY¶¨ûß7Jþ¿?f¿Ù·áÏìµð¦ËáWÂËCkgî‘ÏúÙå?~Yë#÷à`a@U£c"a@ô©˜ 8^Ý«îxoƒ0yZ~Á^]Ùü�ã§Ò{‰ü@©퉥J.êø}_wæË<úŸÊ¥¢ŠúÃùÜ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š©qþ«ð¯ó‹ø™ÿ)øÍÿc_‰ôç%£¥Çú¯Â¿Î3âWü¤ƒã/ý�~%ÿÓœ•ù‡Š_î'õßÐßþJIz/Ìõ°=+âÝsö¡ñ%µäÖÚV�o’î�ÙÝÉÃã )_j§Þâ¿"5’«yÿ]åÿÐÍ;äØXUoÚêˆÎ' j„­{ßð>Î�à�ãÝ.ÝßÜAuªÆ.ç µãß7Ï€>½+äïøy|'â»ß Å/Ú>Ç&Á!@›þLöé_¥_Ÿè½8²·?øà¯ÏoŒ_òT5�ç¿þÈ+³,©Zu%±ñük“áèàaVœ-&z¯ì­ÏŒ5,Ï‘ÿÑ‚¿Ñ{ö,Rdÿ‡!ùdžô¯ý#Š¿Î‡öWãÆŽ?çÈÿèÁ_è·û(²ŸÃÂè\Ò¸ÿ·H«õÿ oõšòò_©üOô¸�²Œ¿Ö_¡õÞ3Ú”ÆÏÿ®¤þ/Â�_¶ÁD��IEGùÑùÔ”P�;æÛïN¢€"çÓüþT›¦¢€!òÏùÿõÔÔQ@Q@Q@Q@Q@Q@Q@Q@RdPÑEQEQEQEQEQEQH)h¢Š(¢Š(¦#n§ÔhPéh¢€ (¢€ (¢€ (¢€ (¢€jœÖ¢fù‰Ç\zW†~Ò?µGìëû |5¹ø¿ûNxËKðW‡m:ÝêS¼ÆòΆdžSü1BŽç²×¹i÷öº¥„:�ƒy�\F²ÆØÆQÆTààôö©}€ü˜ý¿?à”ß ?l­l|Gðþµwà¿"Û)Õlðëp–EÞÙ&…óîÝ�ªnìq_•Þ5ý›ÿà£ÿ³êZxbóÂiñ&K(uygC”P¼D0»¤ÚÄ à þ­¥µg—ÌãØ•óÿÇÚŸödý˜4/íÿÚ+â‡|h«¸>·¨ÛÙô³:³“Ø('Ò¿'ãÿ²>"ŠŽ>Šn÷¿¡ú ø™šäÚ`êiØüÐà‘_µ'í3¬Xx�öšñt> Ñôù…Ä>…™îö‘ºâYâEWQŽÇ<×ô#ð7àWßÙßá^�ðoáM€Ó4 $Kk}Ï!_2F•Éy˜–w,I?¦t þ#x+ã7íâ÷½B-[þ$²ƒQÓ/£WXîm.<3 uFÛ"Ë•ÅzÆG è+é8?�2ì–„(`iòò«|�‰¸¯›Wuñ’»l}²‘¤Aí¶Œ…]µ5}¬omO�d;¦¢ŠQ�„QEP&E-GIE@][…lb§ Š( •ô¦å?ȧ“�š£4¾\lëÉ¢R²¸Ò9­wÅ^ð½°ºñ ܉�½+ªÏ¥y>¡ûM|ÒœAsâÝ2"z†º��ÔWóéâ¯�W¿|c©ë>1Ôd¾1^\F‘HNÈ–9Y"p =9¯ª>ügøo¤ø_ ÅskiwϘŠ×0ZÊÊË÷A–Œ€GL†Í9àk> °°]V;ëó+<¶Ë%¼éQò¹h!Œe²{‘_(þË?´ˆ>þо¶ð†«$:v«©Acuf$Ý«;¤EŒYÆðCãŠâÿ‰‚öµ<¶½%%6•âïfûž–虋Çpõl÷ QÃÙ¦ùf·Jû?;i¡ýsuªàÔ1Êd]á«Uý8‘Ž‚¥¢Š(¢ŠÿÕþû¹šÎ»º·°·k«§EÜÌÇcžIéZ';²?*üÖÿ‚œ|d¹øiðøWE“ɾñTßaÊ�®-@ÝpA£ÿÛJðx�:§—`ªbêms‹3ÇÇ BUåјÿ¶¿ü/Çž2ñp‚×gOѼ1x—Vr/[Û›wâI2ú?P#þ0ry+�ØØ¿ö»ðgíwðµ%“Èðî­gxÿÜ‚dfü�Ínj–Ÿ¤Y>¥«N–ÖðŒ¼’¸EQêÄà פȯ8ÿ…µðÇf·ôì×Ü?üUkhÞ6𧈛g‡õ;Kæ8‚d“ôBhŽ•‹Áú×ùÈüLÝÿøËž¿ð”ø“ÿNrWú6—�£Áà_ÏÆßø!W…¼[ûKjÿ´Âÿ\iƒÅWW×Ú­…ý²]ª\ÞÌg’Kiá*…óû·Üyûý«áxç"¯�Â*tÙýôpã컇³Ï­fSåƒ[Úûj~�Cߥt? ¾ü<øë2Ûiž#ðŸžÌA‚òæ1vþ¸²o$×ô³ðûþÏðÃvÿnñÆ¥¨k³¢üñÈë \{E‡÷ò¿ƒïŠÚe–‘ñ3ÄZUŒJ¶öÚ�ÜQ'\$sIÍ~_€ñ Oµ}ŸcýÁ}#ðÉ6¿˜  ‡ïÁúiàfð>�,„ïk8zžNPsõ¯Þ¯ƒßðE_Ùö²ý�ü9ñOÄãUðÿˆµkc-Íö—wþµÃÜñN'ˆp©]=�y•yÒÃÁ&—}Ï?Åœê� åô±Ù¥G?i$´^Mì,?²¹Æ‰íö?Ë2 zWú+~ÆJÒ~Êß‘Æü#ZWþ‘Å_„Ÿ àÝË?†?'Ö—â+ßøvꉬ+µÁÛ¿Íx޾SþÕý|5ð™ðÃÀ7ÃÍŸ°èvPXÁæ“´b÷0±GnµúÏðå|Z²¨¬��ãO¤ŠyV}—àð¹|ù�7&ôj×µ¿#Ó?ޤªÛÏ?çúUšý,þP (¢€ (¢€ )Œáj´ p)Ø TUt‘¤þTË»½+ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ øOÿ‚�~È2~Õ~ ýŒu¯E¢øûÃïk´ÕÙ"¼{¨#¸T³žOÝË IÈr~èaóWßÕþbÿð]íËÿcøºÃ†ûV™ùÿeY÷ŸLÐúsäR×ð‘ÿÿ‚¦~Öú·íIáØŸâF¾þ-ðf¿ìÿÚ„Í{§+)®£û=ÇúÃî‚yrPÈ×÷o@Q@Q@Q@Q@|�ûc~Þ¿²'ìðþ‰Ÿµ×ŽtÿéwNÑÚ-Æùn®äA–K[HK‰ÊŒnòã`¹° }_ä¥ÿøãá?ø+?üóQðWí9ñ ßÁ ´¿ÜxRWPºŠÚÏKðþ†ò¬í ³&)oZ ò ó¨ €€?Ñãöÿ‚¼þÂßðS}gÄžý�üI{¯ÝxN'ÔÖçK½±Xc¹gHH{˜Qy�°¡·aOúk_”ÿðKOØËþ �û |Õþ#Á5Æœþ ñ©Ž{írËW—Wµ½:W›ñw4ó(X˜ÊFÊŠÛ¸£ã/ø-—ü[À>,—Á>(ý ü£næ)R-J;ˆÑÇZh7ĤwËq@¨ôW“|,øïðOã�Ãh~1üñn‘â� β:k]ä7V[aÿYûø˜ òñó‚~\sŠø[Rÿ‚ÕÁ&´�7ÛïÚÁ ª¤¾C*ê°´@ví7*M¸Áãýe~¡Q_ËÇüsÿ¬ÿ†ý›‡€?c¯ˆº¯Æë­rÂÎçOŒÙêún™qi-ÛÝIg0�F$Q�䌌J õ¼Wþ üÿ‚Åü Ôa‹¯ˆ_ðRŸÚsÃ÷?|KâmBìÚøŸ[²µº²°‰a¶·…- D¶ñ³E$ʪŠ™»Ðôñ3þ kû|ý©4?دâgÄÝ'Iø�â&·ŽÇC”Êe2]ãìÑK*F`‚Iò<˜æ‘ò»Aܹö�Ú_ö­ý�co…·??iÿéÞ ðÕ«¬FóP“o™+V(cPÒM+Jdz�"çü'þ û~Áqt¿Ûƒá·íká_ϬkZ‰€´‹«KÍNïPÑ ‰ÄP\EtOÙqh%� ª@@ïáÇü£ûNë¿·/üžÛö?ñ‹ ð×Ã߇ږ™á+{»é–=;NžûÈ}WT¸,UÊyvHÌF#¶QÇ4ýæ~Ãð\/ø'?ücã%çÀ_Ù;Å·Úÿˆì4ùuI!›GÔ,âûo/›qhyPÅXüÀÿÁ;íÿàÚÏø%î£yâŸÙ[ãO�,¼E«i0é:¦¯{ã/n/!‰Ä¥™d¹0DÒH0‚8×…@Wôñ3öœý�¾ |%¶øõñkÆú'†üx¶Ïo®j7°ÛXJ·€5±Iäay ‚˜?0é@éExoÀ?Úcö{ý©ü%sãÏٻƚ7Ž´KK¦±šÿC¼ŠöÞ;”E‘¡i!fPꎄ®rZ÷*)ŽÉ$!UFI=úþÿàê¿ø.—‰|?¯ê_ðKÿÙ[{†//âµc&ÙI•A,!F é^NDL¤õ¿þ ÿ\Á=?bßê ~Ewñ›Åúk´è2Å‘o2d4rjn]”Œ³E:Ž…�¯æ_ã'ü‡ÿñ~¢ÿð¦üà¯iù;k{½RèÛ¦’âŽ= _¥•ûà¿ø#¯í¢~Â~)ÿ‚�~ÔÊÿ ~évh¾‹P‹n«âMJí„V0XÚ>ÖKwvó$¹�ä£4I ¨ê—ƒ?àòßø*ׇ¤Qâ} ÀüCïyúUäàV÷ñ¨ÿ¾k#ãgü+ÿ\ø› Ë ü;²ðoÃæš2ŸmÒtÉnnБ�Èu‹¨AôýÉÅ(tPÛrþÕ>(ýªj¿ ü]ÿ‚�øßÄÞ7ÐáÔ ›[žI ýéÓ£q$ö¶0Í,PÃç*ùHªc‰ Æ+úæý¤ÿàö�Oo6�û|°Ñá�<»mCÅ—¯vÀý‚ÇÈUÀÆÚœ~üíÿÁ¿à‘ïÿƒý¤uÿ‚øÜxÇÃ'öåÝÚØý¾Y¢0Ûy1Gç@ªÄÍ�ÌÄ }Ó_Þ‡ìÍÿŒÁ&~›mO⎟¯üSÔ¡!‹kúƒAi¼zZéËj ÿ³+H=s@ÂïÇ¿ø8 þ 9ûhkÂ2|TÖôȵ6ò¡Ñ|Ò·gþY¡°U¼“=0ó=wÿ±/üþ ¥ûuüvð¿ˆþ1ü8ñ>‰àÍ_V´ox“ÅLtù×M2¯Ú¦�/Ý.î$òwy{#l¶9‘þ”:�Ä/ø#×ü‡ÃçK—PøkðZ8ÔƒkmýŸa}.9?¸„}®vÿ€³÷/Øwþ û4ÿÁE< ®üSý”u íwÂÚ¨Ú3j×76×WQÄ’È-EÒÇ,‰È�ŸËUÉÀ'\xsÚ'ƒü;aá_ ÚÇe¦évÑYÚ[Â6¤0@‹q è@°ªÎð{S�Ø3žjñ‹Ÿþ|ð÷ü%Ÿ|K§xn̬Œ’ê7Áæy@‡Úda‘ò 'Ú¦œI(E]öê*ÓTâç-‘óÇü7÷Á ¿�2þΞ¶×+ÈŒ7-§ßÝÿ¢K$oó§™ já[�…kìÏÚ1üñ¬™+ÿCãè²cèãð´áYQ‚µ´zßSÇ˱U%‡öówºº=�'CwdYöz¾™©—�M¹ŽS#`Ø>þ•üÍ뚇Äãÿgø>’5Ù¼3hãÇO ™§ÿöÙ~Õå˜ÿy°¾Ï0§!=²k­ð7ÁOø&ŸÆ?ì�wþ yãý+À4‹Ëk›)b¿¾Y®£Ž@n-o´ë¹D·1Ëôq°œõm¹ í×áeÎå'£jé]+;k®—<¯õ•»Fèž®Íß±ý%¼�Ú§™#Š2I8 ŠÆþÃP·KË ãš>ëÆÁ�ãÐŽ+ø+ý¿|YûYÁf࡚ÿì™áÏÜø/àÿ„u¦ð写m$‘ê_A1·šîê8Þ?´»Ê’ÖOÝÃG˜I¢?gOÙ÷ö˜ÿ‚þÐW^´ñ9×|eü‘!‘,.¢$Æ“ggò'IÆø|�TäåvüÇ.¶>¶ú\þÒ–HØRmÍM¹U¼¶à·JþKþ~ÑÞ4ø-ûaüVý½<;{>£ð“QñVŸ¢ø²ÃæÆÆÿO¶šÏV@ ŒZÍ)Žl*ü�Ç^?Wþ/k1k?ðU_€z†‹t&²»ðwŠf�ãmÑJ‡ì…JðA óÁ¯¥Åð�JPrÓ•»ù¥v½vûÏ”ÂñD*Cá÷“JÞ®×^GÑš_íßðJïãœ_³Ïˆmuïk·Z…Æ›§K«é¶V•Õ®òñÙÞÉÙå%º|ÿ:òœ×Ýa”§NÝ+óþ _ý§áï‡øÏocu}¦øÇzˆµqežxtËw–©Äi—t‰&Þû;=}¹ð¯ã/Âÿ�¾Oü%ñ�â=7€n4Û˜îQIPÁ\ÆNÆÚAØÜà×…ŠÂGÙF¼ Ô^�®§³…ÄKÛ΄ÞÛÑEBXæ‰deû ãò=2&p±öã¥d^ÞÛG Ë»øk̼cã�¤)ÁWÆŸi45—3¶Š’Q�4Žš¢ä”»ŸËˆþ1êþñÞµÿ ¯‡µ¶:•æËÝ63sÃ;‘¹T‰ãØýkĵçÀýJßu®¾Ö²mÿW5¼ñ¸?÷ï­¨|RÕ<3âmBëÅúÝŜדȗšlh‹d’£ÍN:ðkÆþjk›‹Ø’^»nlæSŸøUþ=ã°tgU¹Ò{½S?éS�Ö…ágʶÕl|wñGö‡ðfªŸfÓ5‹›çlü�G9Ïæ1_Eþ¾7ñ.·û@ü=·±Ðg‡OOiÿi¼Ô“ŸÞ¨Äp¯Îç?tž?½ž•ówÄ/Š$߆î<æþmm2çò@{¯ì¥ñÄV¼¨G£Ïgae­éòOw|DgbJ8Ž I$úœ ý+ƒ©R¥ŠÃMRûKVüÑú‹7> ÅÑ„—½NZ%nŒÿC¯­$Œ(l;õ«IfØSŠüÇø}ûI[ë�ešûGÁ¾7M`#nÆký9†Çü²UŠRh÷*¤GæTõFAEPÿÖþüŠî\+ùëÿ‚¹øšîóã‡<ÊÁ§éFñb×S¼où}�+úå?JüBÿ‚¹ü43ZøcâÝŒyKw—M»�s…“÷�gÐ÷™kò/°ÕjäU>–løÎ>¡*™]HÀüñWü‹wŸõʾo‘¤ØpJ²äŒqŒr9õ¾‘ñVá¼ÛÑ¢?çüâ¼Aðö©â½rÏš>uö£q­¼@dÉ,®#A�êMä>úùŸÏ9m¹”{ŸÝoÀ z÷Åüâ}A·Üj:-…Ä„ñ—–Ýþ¦£Ö¿h�º'�4߆Z—‹tx¼K«Îm¬ô¯¶ÃöÉ¥U$¢@ÌÊ€Iùx×aðßÃþð‰à»™4«{5>ÐF±ÿJþgÿnOÙƒà(ÿ‚Øüðõ�…ì4ûY_\kÐiéö!¨M\üóù^òã 7üõBUò Sþ˜à)µJ0–é#ú× uN1{ØýíÐnOØÿÄÿ?áEø[âO‡µ1®—o} ÊecL6Æ�Ï0w{Qñ+öæý�¾øö†>$øwC×§!>Áw} MnžrîýÎ{y›s_…ð_ïÙGàÁÿÙKÃ?~ øWMðw‰<5â;½Ú==ü™£˜á�ºG“‘££ýä# Œ×ÚŸ¶·üÃö@½ÿ‚xøÞãIø£éú¶‘á{ÍzÏV†Ù?´F¡mj÷K+ß>n%i$�Í#ïîí]\¨Ðý«·ž+ØRâÙÃÄà::†�AExÆßÚ¯öpý›#†o�8Ò<,×^(oYP}çH3æ¸Ê©¾ÿ‚R|^ñðHoüQñmNóú­åùŒKÉ•swŸ¼xŠA×�_:Á,ôï�?ümû`|[Ž/|Dñ§Šï Õ5KÄI¦ŽÚÚ( (˃å[Çæ’‘¦v(´Ÿ?h¯�?´O‡ŸÅü]¥x®Â,’i—Ïä’2ˆ‡tdŽ�À§|Iý¡þ|!¸†ÃâoŒt}êæXíà·½¼†)å–B$p³‰˜‘€£&¿œOÚ�áþ™ûÿÁl~ üBý›à•ñŠH´ÝG²U¤Í-д¸u�0€,sà/!qËšÈÿƒ‚ÿg߃z?Åÿ�ÿü? Zi^#ñ�Š¿³õ�JÅ~Ïuy½¦Ã$‘í&Xó”“ï�^TiݤïÿŒo?Ø×áïž x×âw‡´ß<¢ìù¯£Y#�ð#”çdNOE�ƒúW×êÊÊ Ÿ—µ>ßðV¿ø'—ìqá?ø'�޼]à/‡Ú?‡õŸYǨØj6$W^b\F$Ïþ¶àJ…ÄžqrIÏ,3_@~Ì?þ6x—þ¥¢üCðMÄ÷¾:�áÝ×ötã2\=Ý¥´±[”ê^OÝ®ÎåñëSÊÚ??n¿Øãàg‰›Â>$h¨Ž[[‹Èü؉û¾r¡&,öó6׫økã¯Á?¶š¾ ñ†‹«6µŸ°¥�ý¼æëj—o$G'Ï„Fc·8ž€×âüûDZ÷Œÿà•òhîôg�\øøj¯Ÿ,ÓO,�q{æŸ1Œ–î…$|ž6ƒ¹¯üçûx+ÁŸ.i¯ø.ÞÛÄš®±¨Â7«Þ[mÔ°äŽ(“c¿"9JIƒµK‚€Š9@ýäø»ñãàÏÀ?/Š~5ø«Kð­„�åÅ.¥s·˜Àgd~aÌŽ=&¸Ï�µ÷ì¿ûLÉqmðÇš7Ч´®-ì.£’xÓ8ÜðçÌ ž2F+ñSþ Kâ[oÛöíý¢iO�1&±â j°øÖ÷€Hº>—çݦËXß"&³ ‘ÐNü–Þsã¿ð\߆_ì‰ñká/ü+ös·‹Ã^/�ÄNÔÞÉ%¿6š3•®iÏc¬[Ew )*†1ü\~5ñìq é7úoˆ$½´ŠàÇsƒ$`ñ‡ÎÜô¯ºlî¾Ù¥Åy´ÅæÄ¨Ü3�¾0ýŠ?äâ/úú‹ù5I´>z7Å¿Ùó¾*Ò¥Õü'jšf·™ šÑD[Êó±Âc9=P{ÖgìÛñ*ÿâ_„/4?�s}¦²Å)p™™Ø\t,6•'¾3_PÞ\ÛÙÀ÷W,#�,[€êkáŸØæÂâêûÄþ-PRÖîdŠ#Я#Ÿûä:ŠŠ~ð߇¤ý«üC¥›Õ ‘’&�<´$Aœ&1Ôš�ö’ð^‘á¯øoVøol¶^ ¼¸(‘Ù¨�Ÿn >ÄÇBpxÁÏ=*¾‰áM7ÅÿµWˆô�lÎ�ZAöy¤…òùã*ÿ†k øÇðšO…z{ü[øo©ÝÛ]XYVyMÆèäm„n“{HÈ9Í=)÷-Ÿ›ä�´ã~ìtÍJ#e_•¿Â¼·àÿŒ.¾ ü:Ó<_yŠkµq"Ž›â‘£'ñ)ŸÒ½jƒ)neÍh—´8#m'·_üÇ«ëΫñ7öD׌÷ÒÉs.…¬¸¼‘·‘mvÔü‘ÊûSWõœ¥�™Œ'¼¼Ó'£Œ‡%t}7 q†;'¬ë`§kîº?Sù<ý�ÿà�?üaá­"_ŽdøBÊÚ¢šØæ¼slp/`‘�Io÷+úiøCð£Ãß¾iŸ ¼*²¶Ÿ¤ÃåGæ¶ç#¯'�É9àì+Õð àvïN,Wq#¥yÙ a2ôþ®µ}OªñÆ<óŠeíJ¾ì6ŠVKúîYùÈöÿ?JF-éR€J ­})ùiÆ©¨ªRÜAn»§pŸ�]¨AÝý+™¸ñ c‹eϹ⨬·÷à`_ÈV« ÷d9�4º…´g r}«<꒻ʒ ˆÿI8‹[1@���¥hGD™QÙܹÔõü«Z;d�x«tTÊm”¢–ÃFÑòŠuTŒ(¢Š(¢Š)›—«Ä~8~Ð_¿fŸ\üMøïâ{ èVœ=Õô¡7üó�9yd=£� Ë_�ß?àâ/ø'‡Ç?‹×_ .µMCÁñùâ-;Wñ1Úé÷Ç×ÎIìùíö…Œc© òPïU&EdØßÙêöPßXL“ÛÜ x¥�ƒ+« «#/È"µ3µ>›¹j2ùZ0¾µè àìê? ibWå8óÆïÚÇàïÀxüŸ_4×Ãì6€IrèXdï°Ïjë> ~Ð_ ~;èƒVøoªGv#Ç�l~Kˆ¤‘Wë÷bkŽ� TöJjýŽEŽ¢çìùÕûAÑUêÅw�aEÍkÞ"Ð|+¢Üø“Ä÷–ún�c–{«¹bEä¼’9 Š;±8 –¿Ìgþ ¿ÿ)bø»ÿ_šwþš¬ëûIÑÿà½?ðL½_ã³| ·ñß–ùòã×¥·xôG›¼bðôÇüõtÒWñCÿÌÖtÿÁT~+ë:ÔWÖw7:aŠ{y‘H?²¬ùGBAü uð@?ùKŸúé«é¦ò¿ÓB¿Ì¿þÿ)cøSÿ]5oý4ÞWúhPMÜ´¹ð�í›ÿý”`ÿ ÿÂEûAøž;é“u–�i‹�Nïœ&Ü`…?óÒR‘Õèîú+ó?öÿ‚«~Ç·å’Úüñ³ñ .é¼=«µÕ#ºG½ÒtÞ�/ñì5ú[“³?çùP袊(¢Šñ�Ú3âÆ�ðö}ñÏÆý]Ö;_xRÖ¥-Óe…¬—ÿ@¯òžÿƒwÿà—ÿ à¯_¶GŽôÚš]V_ h›Z¼›K¹·jww�ÇiZ9ÖV�ÈÛÉQÏýôÿÁË_?áFÁ¾1_[I²ïÄö–~·Æïí[¸ �Gý»Ž=~)ÿÁ‘Ÿ“Dý›þ5~Ñ·0•—Ä~"°ðüÿ,ô‹Srû}‹_ŒãºûPæ7üûö…ñ_ƒþ"|?ÿƒn?à™—…Ÿ�¼#%�‡õà›­k[Ö'ÇeupŠ›íà7*ÒŒi�üÅýÊãâŸø/ßü'ö^ÿ‚Bü5øð¿áÞ¯©ø“â_Šìõ+ïê—S(´‘m~Í}–ÑQ|˜šieîfm±üÄšôø%‰ü1ñOþ–?þ9_En÷>=ñ¦¥ÞȨŸoHõ´�s�YˆÇ÷•@çÆÁÊßµw†à¡ßðXh¾üÔâÖ4C§xO»µu–Þ{Ö¹w¼’&\«¹¹h7†òr8Å}Õÿ3×þ3~Ã_ðl¿ì›û2ü=’çDÓ¾-‰µoOlZ'¸Šõ[WŠÊf\|“}­K/ñ p§åÈ?HÿÁ?à€?ðK_Û¯ö#ðGí[ãë^$øƒg«ý§^Óìo­â¶Ón,¯ G¦ÜY´þ\ÐFŒÌìD�´eF1ý{þ×ßðN�ÙCöÞý�?á€þ4B¯¢éeŠéÏi"%þ“%”FÞÊúß9òÙ2 ÊQ×|l –þt?ðoÿ‹þ+þÄßð_Ý;ö\øCâAâ?ê~ Öü­ÉbÄØêú~ž·F;À€•Äon·1?%Få µ› ±ÿ‚~ο>ÁAô?ü?ŸR¸ñŸÄ½*_xœÞܬР–Úı¡…;I 6FÞ˜çõßáçüûÿÌðwüKý°?hÉ|^'Ѿ3M'ƒ¼e«ø§ÅÚ¼–nE™iå¶XådpƒÏšÝ>éùxíú�ÿ÷ÿÆ*ÿÁ?mïÛÊEû=åÞ›/‡4˃ò‘qi§H!ÚÞ÷:¤#Žê+¶ÿƒ"¾ gö‚øÛûFÝÛå|= iÞ¶˜Ž7ê·/s0SêÂ<û0 Í_ø9[þ û6Á(~)|,Òeÿí�ì?iZŒ·_Ú÷kvâêÂx”ìuŠ-«åΟ.Jûëþ`ý¬õ~Ä¿±·ìàW{«½OÁzŒ5;H2Ï#¾�Ÿ¥G±z–cvBúìÀé_~Áï¿Öÿö|øñL Εâ[JgÇüÿÚC:�ü“5ùGÿVøW¨Á`¿àµÞø÷ãw¼ðÀo xvm’¯îƒxsNµÓt›|0àË} ^m#æÉ@Þoü3öÓ¿àžðOo†ÿ³ ‘ë:fš·ºü‰�Þë7ÿéÌ[ø‚Jæ(Ïüò�jý&¢¿à°–’ÙþÌþ'ñÏÇ��º‡Á�‚Z‰“ÄÂpÆž%ÖƒüƒOƒP¸,¶ÂáŠÄ‘[Àe”¶ ¨›”€~ZÁnàç��ÿ°í†¹û5þÆw¾<ø¼b–ÒãP…„ºG‡¦ ¡i�r·W‘Eº|ˆÃ÷Ì0boòûñG‰üCãoê2ñ}ìÚ–­«\Ëy{wpæI§¸�Ì’Ë#·,îijÔšî>7x§á—Œ¾(ëÿÁŸ 7„|-,äiz\·R_O ²ñÚ.eæYØ|Ò²ª&òv"&'À¿„Þ øõñ¯Â¼$¥µOëV% ?¾¿¸Kxøögý§ÿÁ,ÿaŸø#ïü÷öHøiÿ6ÿ‚°xŽ×Uñ×Ä7þ ø[P·7imnu¼¶ÚdK#ÝÎј¤óçLŠV_0þ*ÿÁuÿà¹?à®ßtïøSOŸÂŸ¼+¾ƒ¢LÊn.nl:…þÂSÏ)òG’°!*¬Å�›ÖÿàãßÙ÷ö¤Ÿööñf»¤ü;ñ\¾i'‚ü9¬>“{ý‘›¤i¶èDw~W�#ûCLrnâkù© Õoø#ÏüÄ_ðUÏÚê/ÙæÛ]>ðö™¥Üëzþ½öar,l­¶¢áâBóM$q®ç_!ÛÁ[bÙsöTý³,ÿcoØ[Ö¾*ÜèÚ]·öÞ¦$ƒQk­bä´­mg�UH 0†Pda#2±1_{Á ¾ Áf/€>5øëÿHÔÅž&×u(ìtOÁþ¡þƒa˜ÓÝÙA²ÆO´M&ØÖõЍ‡*y'è_ÙŸþUý�aŸÙßÇÚOì·ð9aø¥ñ+^×5Ë­KmŽ“¤è¿nv‡K³°‚Ò)d–×N²ŽÙDX·W•doã,@? àœÿðSOÚ‡þ ñgƾ8ø ¤iqx¯]ÒŸÃw‰â9å6!.¢šM¶ë,gI D¡‚ò æ½sâßüþ Cÿñ øïâwŒõ÷¿'n�áä±�Ôñ³ìšD¡”ç8Í~ž;ý¹ÿàŽ_ðL_¿‚u?ü=øaš`èzÚ%Ø Ûû;LG¸?÷ê€?Í—ötÿƒhÿಟµ%Êk³|4—Á–W§ÍmGÆwqé„—ä³Û·™}žçý¿Óûþ {ûhßðNŸØOáïì‘§ËÝýÚµå°aÖ©tíq}:oŠ4îÂ=ÀA�Œ�¿`ßø/ì•ÿ/ý¨µÙ¿ö<Ñ•ó_íû+|ý©´; üuðÍŸˆ­ì Ij×(DÖ²8Éo*xŸ�ó#ÇZú[¢bª«¤€ª�Ô¨bêPš©M´×UЈ…X8TWGç'üKž8¼ø%⇾>Ö.uë�xÃ^ðµµýûy—wšmÑKVžCËH"tBíËcq'5ò�ÇOø(þ¯ðîŒß³§í#á]COñ&ëû/Å£éW÷qkúmÝ¿—dñÌ‹,fãÌr³ŒÆ‰Øpkí�/öð§…~9Þ|nøqãOø]u�`kz¶�§ê�P¼*‚gšÖh$+çìw“"o<×ÝrDŽ Ì:þîËGÛ:Ó�76½¬ïsçã€Ä˰÷åkN÷[‰>ºý®ÿaŸØcàÞð¬ž"²ð¥�¥¿�´;;UK  åìÓpÝ-œŸë}üq…É_“¿mOŒ_±·íÁðúOþÉÞÔuÿ�w÷¯¢j~»Òï4{´š7û]î£$#€d¾daݦo*=ÛœdéíJ!�1 êÂqO³¯b�ïnéÚ÷w׺ý42¯Ã’•?a û–KUµ•´?†ßø*?Á¯ÚGþ +ñgDý¹þiRëþ°×†±¨êÄò[Ås;‰ä‚5ÌqJæxËô§s_3|cÿ‚¼|wÿ‚çüTÐ?fߨ“áMõ†­ª k}Fíçk»{ do2I'¸Ž(ã··I ‘æ“àÑ <ÿ Î§¥®­a%”ø0Î…«+ ÈÀ‚àŒW+ðóáƒ>Ø6•à]2ÇG³vÞÐiöpYÄÎ�’E-ïŠùéÕ¿½#êâùRK¡øïÿÒýš4\~ѳ¿Œ4ùo¼45Û=ð‘¡k‹kk,ƒ#$(ùØHQ_2þÍþ?|ÿ‚ ü<ýœ<{my«ø?áî…â8¼+âI$hÚˆ…­m.'ÆÏ>ÌÄ`äçfÎØ¯é�LgwZ ³1m˜nƾ–�V‹¬åÕHÚÝ�­uçoÌùJ¼-Mû;KX;ߺ½ì~oÿÁJµ¿¿Ã|)ð–µw ÂÅñ¾‹á}BûO*ñ4ûÇ’K´‚QÌo$p˜÷Ž@&¾¢øû3ü ý—¼%'�>xfÏÃzuÄ¢ââ;D Í6ù“Hļ’aGÎäž:×…§ìà½cö‚±ý ¾"xÓž,¼ÑuIõmGÔõ:N—u8t om1ªŽB‘ùŽøµ÷ùóÅx˜Œw-‡¥&ÖëcÔÂ`Û­*Õc®Ë[è8ÛÚ£ºS$µnŠà=cä_‰þ½»�Ä×åÇÆ¿…Þ#Õ ¹·ƒv×5û¿©èVº€>jþ ó}_áF™©ç|yϲÐ8¾]�ä.ûá¯Ä‡‹Zßhóê6À’“Û .ºÈšá¼e¯i÷è|Û Ô“ÒK)¿¢_ÖÆ«û3hšŸ2Ý>¸[¯ØÛ·9cgpµüéŸ}r UWV•âÞº=ì>úiñF]S«i¨«jµûÑüTxÃÁ¾5ñL† h÷³nïöyûì-}ðCö^ø««Gg±§=”òG),Nòc9éÒ¿­?ØßÂVÇpµN= î´¿Ù£ÃÚ{"Çn‹í�^×ø“`gÊòqÕ]õî}/ˆ?OÞ2Ï2ÙeiÆ�7tìµiô»?.~ ü/ñ&š°¬á±ÇPÏùü¿Q¾xrúÉ"31þ}+Ôto„ún’€Æ�=–½MÐ-ìTmP1_¸ŸÃæÕ›¶hÉZ·MUÚ1N �¢Š(ÿ×þü$qÍyÅß…ÞøÇð÷Søq⸼Ë-N#ª7T‘=6—Ü õÍÛi¤Årb(Ó«N¢ÑèMJQœ\%±ülþÑ¿³¿ÄOƒzαà[3Iom5ÕµÂ!ò®­¢ùšXøÇN]{–¾Õÿ‚N~ÄÖ±â[_Ú‡âm›[izx- Ûʸ3Ë´§Úöþ®5$B߯~qÀ¿w¾4ü<Ò•øçø/�Àã¾µ{¤î—nßqð¹_a°Ø�m{®Æš}êþx¿jÙóþ ñSþ =ðûöÇðOà .] áz\iöÖSx†Þ;�RÝÞä÷yX·2$ ¤m¿aÛ“·ú#¢¿mU,ϼ? ?à°Ÿ³ßíŸûlüÑÿgÏ‚ž²û3\Øë—º¥æµo†âæG±H6fB¦Aûììôô�ÇTý´>*þÁÚ·Âý#áu•§Ž¼S¦]ørçN“_·6¶v÷¯¾ûRÅûÑýÈ@ÈÜx5ú•EUÀüŒÿ‚Rüý¦¿gßÙOý“¿iXi6>·¹ŽßTµÕ"¿�QKË©çx¤µ†‹bË´’Ä?lWÇŸ³‡ì…ûwÁ+¾3ø·Gý™¼+gñsàÏ‹¯¡“ý§—ªé“tL5Þ!r‘í�ØJ òˆ¯èÚŠ.ãÿ…?cߌŸ´Ÿí¡á¯Û{ö¼Òì|/€,¤µð—„¬îÆ£,72’Ò_j7h‰—'äŠ ÈB\”çå/ø+ÇìÃûw~ØŸ¼cð3áŵÆ�ðÓWþÕ·Õnµ»(´¤‘mäØ-܉!HÞ"„¾XžWŒWô[E>`?!?oM#öËý¦¿a[σþøL¶þ*ñýœöZ­œúõ�—¢§C™þT»óÑß'nÌüø®›þ yà�Ú‹à_쥥þδOƒ-C %_ŒWˆ~ÈŸ¶_íû/ü-ðÏì�ñûöfñÖ¡­ø:ÊßF´Õ<+eî‘w ²ˆ`‘î·Çm Øöó˜gç8ÎÚf?ˆ¾=ý¯oÿà Ÿ´~�máŸ`§†ü9áËiÒîM:ÃÌ3M=õÔ`G%ìîÅvC˜á�äß!;†“’`|a¯~ÿ¶ìIûsx—öÂý…t�?Ç>ø„ÒIâ_Ýß&›p²Êþl�k<£ÈâbÒBO)½ã ©ß^×ñCöYý¡ÿà¢ÿþëßµ_„í~ü8ø{¨ÿmÿÂ;ý£©ªk:ˆP#[‰-×ìÖö‘òUäyaò‚ýª¢²¸WŒ¯|W§é^gƒ¬#ÔnÏÊYD*£æ$ƒŸ¥|qð{À?~M{®‰go~êò#ÞÈ)œû}ÿ»_~QAQv>h×ü-ñâm—ü#þ!kOi3|³¥›½ÅÔ‰ýÍûc�ô¯LÓ<;ÃßcøOóVÎ?ÜZïXÌ�ß|�üG¹5étP+³àMÀÿô/‹·ß-ô;iMÿ˜²ZÄÀ�‚awÿäë³ê~.ðÅŒ:bxcÄP[xoI’D{¡ßkžP‡;…DQ�:çúWÔŒ‹¶¤ ®s•ðχt� èv¾Ðãò­mP$iéÔ“õ'$û×UERdRÐH@=kóS°ÓÓ}äÉ}¸ûÏÀ¹‡M�{z·OË­iJ„¥ð¢%V+©è›ˆ?1®~÷ÄVYŒ?˜Þ‹þ=+Î Æ»¬à+<¡¸ÆOð®‡Oðd«‰/¤Ùì�:êú¬)ÿG<17‰¯nÛ'–=ßüê{M#S½mò©ˆtËuü«°³ÒììTGkýÿ:Ô“îñYO–�CŽ¿‰œý®ƒkoÌŸ¼oSþ»·jí©àæŸXJmîtF ;QRPQEQEQEWòÕÿÿƒ’¾|½Õ>~ƶPxçÅrIkq­]ï-¤©Ãy;’ô¡î›!þ%yË_Ô­Œÿsþ×®~¿\žäÐÑ_´·íeûCþ×þ?—âWíâ›ßênJÀ&m�ÛFNLvð Aë²0êry¯�v|ÃoÞÈõÏÈ×èwüoþ ÏñKþ IñÂçáýJÏA³Òlÿ´5}N÷. µ¤`G|óÊ^O•>Dã—Zþ›¾>Á«Ÿî~ZÛ~Í^8Ôí|oa ó¦×¼¹l5ë‚°F�kót+ç8*Çšþw¿`_ø,_í�û^[h> Õá&ðXoÞøkXg–Ô(<ý’AûËGÇ÷>Bytzþëàœ¿ðV¿Ù«þ G¥Ï¦|5ûN‡ã .ÛíZŸ‡µºX¢Þ#2Á:~îhCº�ãkŒ�ñ¦E™'�ü↾:Ö¾ø±:¦ƒ>Ÿy8`·’¼rã‡Ã¡äpkú;ÿƒV£fý¼¼`Ã…_Ýçÿ6ýÊüUø·àoƒ>,ñýüv6BA3ä´²°%cŒYØ€= ~3||ÿ‚‰xçÇ]áÖ—^Ñâ¾é*ü’/¤‰ý 8xÉŸü%e‡ í¶ßÈücÄ~$ÆÐª°ô£×¹Ðk7—º„Ò_ê<²¹.òIËzœóÉü½+Í,|]âO‡~,ƒÅ¾¿›N»Vf·�£)ò0vŸãS÷º}Úô ¼yl¥xÇ‹r¨Ì†¿5ÈëN)NúŸœáç(ûÇîGìÕÿR{¨ ðÇím–l"ê–qãó@ŸÎû÷Þ¿h<3â}Æž´ñW†.¢¿Ó¯¢Y ¸�ƒÇ"0ʺ7LWðkâˆFð¼Í`ûn§T|ôõ?€ýkûÿ‚vÉ’ü8#Ÿø’ÛÿZþ‰à> Äb¯B»ºKæ~ËÀüKS7BnöGÅ¿ðQŸø-ÿì³ûÜßü9�ŸÆß­cûO�,v²:‡O·Üá’Ab %Á u·OüGö¼ÿ‚€ë¬Ÿ5Óaá¿3Ì´ðÞ˜Ld8å �%®%þZNîùû›¥ÿ�eÿ‡�|g¿á!—œ�ݧËéÒ¾cý“?e?Œ¶¯Ç-/ö|ø#múö¬$t7s$ðÅ–iç  á“Ж¿P?H>nO™~_猭#¦z�½ß·¯áÇ^>œ þÍõ¯ø5Kc‡Ã¿¥“âŒy’I.-ÔhsqŸ@¦æ0?ç¾XŸù⽿’ïÚöø�û/|h×þ|_µŽÇÄ~¸KkÈâ•&�/‘ I ¤‘ÈŽÞÁçæúQÿÿ”±ü)ÿ®š·þšo+ý¾,|Røwð?áæ«ñ_â¶«ƒáÝq}qþª÷È–.ìUwbAb+üáà€ò–?…?õÓVÿÓMåj?ð^,ÿè>.ÿצ›ÓÐê¶y À?ø(/üáâï‹ß†°5„š�ßø«T‰ ì€ðM•£æ8uy·ÈGðFÜ×ò‰ãŸøÓâ�Šï|yñU¼×u­J_6îöþgžy%cŸžI rýXÅryÅ~èÿÁ;¿à�:WíðŠÓöÀý©¼koà�…ÝMmo©YµMJKi$Šh \‹ç�À%d~ù{~jEå7dT§.y;#ñD×5¿ k6Þ"ðÍäúuý¤‚[{›i)b’>�¡„v ñë_ÓÏüçþVøÏðlY|6ý¶­fñï‡#Ûzí¾ÅÖm—¦fÎÈïÿod§ïüµó�íáÿlðÃ�ƒÚ÷í{ûxÝ8þÊ¿°…÷‡~=hsxsUñ7Šnõûk Ÿ’ê+9l¬mcûD}b‘žÙÎÆùÂÈÀýî«¢Š(ñ¿þ _ÿ°ñ_üÏökÐ?fÝâ|<°ÒüA»y;iÇQ7fÞÚx"‡`¹¶Ú Î\œ·*¼W­Á#?àœš_üÃö,Ò?d»/¯‹.lµ ýJóW[O°‹™¯f.‘æÍ·ËˆGúÃ�™ã ý6¢€?НÛËþ úðgíQûjëÿ´�ÁߊÃÀ¾ñ¶©&±¬èòéfö{k»© ·mc*Ï lšBΩ"þè±²€£Ðükÿ�üµý©>ühøñ|%áO†+ ÿÄ’}#í—ZœÚMßÛ.nn¯Vêg½rÛ˜A¶1…Uت£û¢€?’¯ø+§üWñ‡þ KûdꟵ×�¾?IáÕ´û=+û"ãK’Xí--" åC=½Ü%ãw2JÈñýùœcVÁ?àÜïÙ³þ 7âûŸŽW^ ¹ø�ñ6æÑìbÖní’Î×O·˜9l­å(ò�µåy]¶|«±YÃE4Pòÿ†ÿƒW4Oø(Çí[©þ×ßþ$ÅàMsÅ öö�¨Ø=í¤×Ð¥ºÜÁ$RÆñ3EŒ«Ãp#$W¥üNÿƒn<[ñþ ðÓþ okñŽ=)¼â[Ÿë÷ö;Ü NâcwåĶæò3D·AA26|µàtÕmüÒi_ðo†¥áø"�÷ü'Áÿ#±Ÿ]Öÿµõÿd.GÛÒóÊBìù`‚-ÆsÂgà}oÿFÿ‚Ai¿ðG€>*ø=ÿ ’øïQñ^½ý±>¦ºövØ’Ú+xmü¯>à�…÷oÿ–„`b¿i+#_Ñ,xOþ ëàKØ|IñMñ-¿ˆ5AdâTÑ£‚ÖâÝ-ç+Ÿô«Ÿ´‚!ûÈ‹¹ÀÝïÜoø7þ �}ÿÜÿ‚}é©ñÃì_>%<~!ñ*:âkPñâÇO~àÚÀrëü3É(b¿=à—¿ðjOïÙ;ö¿ÖjÿÚÇÄp|CþÁ×®¯<£íybDK†{=KV’U_>õWkˆTã”o/!Úû ÀjþaàçŸø%§íqÿ"ý™|7¨~ʺÜú�ßÃû©õ �Ž5Ÿ1 ˆ¶ƒyl¡–(ämŒ’8B¯€ÿÓõþ:§ü7öëð&ŽÞ<øÓð‡Çðm†¥Ÿ«ë—ÞÔ6 [÷³:•™#L¶A Ä ’+ûûÿ‚ÿÁºŸ ¿d�xköàñ?�´ÿë–·wÞÖtãDÖ<=ªiÑ-¤ò[][ù–·�ÌÒH�Ä´ÜãûeVRŽ2¯(ø—ñ/àÿìÑð³Pø“ñ*þËÂ~ÐUd¼¼‘D6–‘Ë*§™&ÅÛ~d€»�A,Ä($zeÝ�¶¥g.�©D“ÛÎ�‘H££ 2²‘‚¤pAãþOßðt¯üGáwüïöìÓ<_ðÂÁ?ôéu›m*Ü‚ÃP·—ʾ‚Ý nÅâ™|¨ddPTïþ µÿÚý“¿àšÿl7|wû6�g¥ÀÖ:…aŸ²i–ŒÛÙ·Ï$²6Y_— @?3h¯Ú¯ø%Çüwöèÿ‚¦j¶þ øm£ÿÂ)ðìJRëÆ:Üo‡Èpée^Ê9bZ‘‰$�ŠÿAÿØoþ |ÿ‚Xþȵ“Çž�âÿŠÐ+\jþ.E¹€¸çi¿ñéyè%“ÖF òÅý�<ûZüHÖoüû'èþ,Ö¯µxE�õ§…a½�î f "¸K wE¸+m— Õûoû4ÿÁ©¿ðX/ÚÈÔ|Sá 7áž™1_ô�êÃ.ÃÔý’Ì]\‚ðÉ~œWúÁx#á÷€¾èøSáÆ‰§øK€mŠÏM¶ŠÒÝì±B¨ƒðØPàßü‹þ©¥ÿÁþx»Dñ‰m|gã__[ÜjZ¥¥£ZíœEm¬â;»¬o$Ò;7Ø6ŒþòQEÁéúÔ´TÊ7».zf¤%‡jx ô €zÕ�÷i›‘zqR×É_µŸíŸû9~ÿí¾*~Ó!O è÷—‰§Û·“=ij\:3ˆã†Þ9$8Df-·j�Éõ­øwÿÁ#¿è¤Üà“VÿäJÖðŸüÿ¢ñ�‰,<)¢üK�]ê3Ço¸ÒuH"V™%’Õc�êî@­~×T=fÙßZ_ÚÅi2K¨7�ƒ#£ †pA‚+Z€ 1îàqRîZuCüP4Š<¸úv¨ãE`0Ýëçÿ~Ò_ <¯Ïáoê í®ß21 ÏŒ qó$d•‡CXgöÂøÀ¾G´ün¿+̧óýŸ¯—?á°¾ÿÐ[ÿ%î?øÕðØ_è-ÿ’÷üj¹âñ�¡_*}@¨ g|u�xã�Z÷h¥GÆ1_?“gøL—¶ÁÍI&ÕüÓ³üN¼^¶§³¬¬ìŸÞ®¿GrÓªÿ-K¹kèAÔRdQ‘@ EPEPEPEPEPEPEPLÞ¢˜Y¶çÒ±u-oKÒS~¡2F@Ç“ôjRrvAtlìâ£3*ÿ¬ }kÇõOŠ£ËÒ¡þôœÈs\t·Þ'ñL¾Xßp¿Ü\*�¯jõ)åUmyèyÓÌ¡ö5=“Pñ¦‰bDq·œý„|�Ï¥pwÞ8ÕoO—kû„ì–«z_Û–D“X›Ë?Ý�üñøW¡é𗥦,aT#øºŸÎ«› KoyŽÕ羈ó/ øƒS“í©‹ý¹9<~§ñ®ãOðf›oó]1�½§ýñÒ»žð¨Øõ®j¹•Y{»#jx8D‚(’5Äj{qVœtÅ*‚+•ñ'ˆô?hW~$ñ5ÔVV6Q4×°Hâ�YÝ�\0Õ¤‘ÑR¤aih‘ÐÝóöü,×ÿáð·Ã­[^¼Œ…¹ónÁ!qÖ?ÞBî]ò`jýMx%Å<�œ°’I÷q_~º|ì~1¤'Τ¨ÓƦ×e'÷;Y¯5tJÛˆ‹;bŸ½—ð¯Î_Øgþ Gðgöáð»^ø^ÞmU·Ø—:mÛ‡hËçaWFÁàr0@ã?£(˜ù€¯‚β<^]]áqÔÜ&º3ôÎâLk‡X¼ºªœUýièÉTóÁ¨'�Ò¿¿lø+‡€ÿgÝøÁž)ÔìÊ»”Ïökh¥_½ÿ.FvN�…7-_Ø—þ {ñö·ñn¡¥ÝøßEÒôè†ë¤½y�çv8‘ ºÆâÍ»Ž8æ¾ßþ ×ÿflK j6½ÛŠv{hÝõô?0‡Ò„g›¼Šž+šºv²ŒšºÝs%˧©ûGQ0ý+ä„Ÿþ0ø Àþ!°„h)·ÔŸQÕžo,i�löqZ–R0bšk‘ ¹+±Ú>Ìqâ_ ?o(ücbºŸ‹´ › �Böþ×JÒ-c3ÞÞ$wñZؾ÷x¢ŠI •%–À‹çÝ&çóSö·éñ�ßí‘àûmvÿÃÞñÖ§§M-´–�[[—gµ´ŠòóË&åQÖÒ9áY6I8L�•t¯ÛƒáWŠ¥{?iº¶¿t÷‰ggme¸žìµ¡¾ó#Š{ˆš8…¸ÞàB$Êù>fåÈ;kQ_›þ ýºuüDû‡|¨j~Õõx4­îÝ ŠGFÐ]{™¼Û�ä:H‘ˆDñ�–.íå§Ý> ñ§â¿ ÙøƒVÒît9îA/ew³Îˆ«2ó±ˆù€Þ;í# 6@võþ3ýö×û0WøýøWá7ÄŸ�ÿÛáÇÂ= ÷Äzæ¥w*[Xið›‰_çþ⃀?�Ï:Ðô«ÿ¡ñûR|O?õ+Eÿ¥Ñå_Ý}5ŸðAÿø$ÆÿØëÄ_?hkë[}ÅZ\:|Z¡ó�œ"o=�Ìã÷fRQÈÙÐs—'þ”èüŽ¿m�ù<Ÿ‹?ö9ëßúpž¿t¿àÕ�ËûxøËþÄk¯ý8ØW+ÿjÿ‚þ× ~.xãö™øOf|à¿j×ÚܧMŒ¾¡§ Ùä¹tžÑs#¤{ñçC¼cçqJëàÕø¥OÛÇÆq¸!‡�îÁ±þѰ ê7þ è‰7ìá§B8ÛÖ§ÿ \WòÅàOŒpé¿ÿ³Y¶è÷èÀögпÉô濯ïø(GìËãÚ«ö{¹øyðûP‡NÕชòØÝgʔƒFÑ3¦JoIÇËÜŸ¿gÿŒ?³·Š_Áÿô;�ìe£2 òfTã̆DÌr�ê„ó_�x™“V«ˆu9=ËϾ*a±0Äûk{¶Üý½Qå·ÓùW‹ø°|�ô©> ü@>;ð*}±ó§¨‚WÇú¹?×Þ“Åü#ãÒ¿%Êiò+HøÜ4ïJçÆ¾'‘¶–ŽÜI•°=¿úõýÇÿÁ>¡KØÇáä0·ÜÑáþµüˆ| ýŠhÚÛÅécð·IeÓ¢}·¥Îèl` ó—!·¸þäaßÚ¿³ïÙ×áUçÁO‚^øO©_ û�O†Ök€žZË$kóº¦I=zWï>à*Ærª×ºÖçéÞeµ¡Vu¥ E­ÏóVÿ‚ÇÊO¾3ÿØÃ/þ�u¿ðE�Úkàçì‹ÿð¿ÆŽº‰Ò|7­ý…ÅâÄòˆZîÝâ�äXÁ�ǽþrà Ûkôþ ‡ÿ‡ý¯4¯ÚWÇ?¶GÃ]!¼gà¿Ý�Fãû)L·ÚvcA ¸´y� ÞC¼låöþa][kW­~¼~Ì®¦±ûPþÎZÁ„ý¢5/è‘xH…ÂkŸmˆØÈ�ÓdÀ°w8á,[Œf¿Ì»þ ¥ñ÷áŸíGûüIøóðzî[ÿ ø‚öØÙ\M …æŽÚÊ rþ\›]xÎÍã;1•Ïð„šö´ú:xrKÉ�„RµÂ[IJ¸Áqm›öpN9ù†+>+{‹™’ÞÙ ®çˆ2I<`Þ€?bà€|ÁXþ7mú¾?ðSw_Ú¿ü‰—þ=ñu½-4ßý:Ù×óÝÿÿ‚CþÖþ ý¥ü'ûnüfÑÿá ðփܖvZ hõ;ówe-ªµÀx#nýól$ œ¯õaÿý—õOÛ7ö@ñÏìË£j‘è—Þ'´Š;kÉ£i"Žk{ˆ®£æØÍF+È�6ÐùOßÿWíë^¹ûÿÁ!¿dØÆkáþŒºÿŒ¶bêè’ßGÍöq�–ˆOhÆüpîõüxÿÁ??ààoÚÇöA6>øÃ$Ÿ| "Ú„„jvq?Ñ/H.U݆o11ò£G_ÜwìUûx~Ï·ßÂÿøZŸ³ö£5ä’ {ëK˜Œv7 »¼©Ôätèñ»£vcQ†ÂÂ…5N–Èœ� J•=‘öÒ¦Ú’Š+¤é +çÏÚKöšøEû'|:o‹µ3¥hIu—œ°¼Ìg¹m‘F©,K��_/üOö ¬êç=?âI¨ñŠýP¢¿,áò_°·ýu�üjüb‘¿à²_°°çûkWÔPÿãúŸE|Ãû8~×?¿j«+íOàíåÕÜs›í6sÚ`¶q�:&î�¸¯§p=(6,­þ”çv*JLÒ€U»R¨ sO¢¥GP (¢¨��:ñKH@=Ev¥¢Š+Îþ.|*ð'ÇO…ž#ø-ñ>Å5?x¯MºÒu;Gû³Z^DÐÌ™2ŒpG ò:W¢Q@çOûeÿÁ•?4o\ëß°wÄ�/\Ðå“tZO‹¼Ë+ët'î‹ËXe†ão©Š;ûçþ iÿ|øªØüaÿ‚�êÖ5ûb²ÛøWMó� Œnå‘cšøƒÿ,öEgYEkô„ÔPF� è^Ñ-<7á‹(4Ý:Æ%‚ÚÖÖ5†bŒHã�TETJØ¢Š(¢Š(¢Š*%$ÔµUÛd�›¡â€-QEWò“ÿgÉšü6ÿ±Óÿq÷uý[Wò“ÿiÉœü4ÿ±Ïÿl.hø®ÓáÆïøN´‰à]Çÿ¡WZš§q¡ëÚͶ[I@�H4ý¤Á!à®×¿.ì?fÚjýî< 3ˆt�VbZMBxŽby6d÷ÿ–'‘òpŸÙ}•õ®£i¡c*KÊ$�ã!••†ApAƒ_ä?h½@6²¢ãþš·ÿ¯ìÃþ –ý½¾5~ÐxÃö`ñë‹­Á:u¶¡£É#´—É,ÞKÚ‡lf÷£ù@Âa@õÃPáwî©©©÷hðßö¦!¾=ëê?¿þ“Å_>§Ê¼×е7ü—ß½þ“Å_?'ݯù>úFÉs™¥ÿ?gÿ¥3ý]ð³þIÜ'ø#ùå£rÓ¨¯Ä´?C!2¸zúWqðØÅÅÐHÿ •ŸþŽZâ•]•Û|6ãâ.„ý¬ÿôr×ßøa. ÁÇûñüÑñüuoì|Gø_äA±üƒmx÷ÇŸ…øåð—\øKñ26…®Zµ½Ú·äáƒ1�¥C¥zòq"¼?öŠð§Š|sðc_ð¯ƒ%h5+Ëm°m¤�CÜ+þ¶ñ¹�\X¼'xãÁÓ-Ö™&­$Τ2J¶Ê!gCýÒÈp}+÷� ŸÒ‹8âXŠœANTãM4“^–è¼ÑùWÒßÁ^á P¡“VUìôôzvìÏ»à¦Çþ0öQîÿc^qÿJý%ÿƒfA? >)ó�šÝŽ?ð×çÿü—ÂÚŸ‚¿bÙcÚÈÛs‰9uôó!†@?&ú ÿÍø´ÿì7cÿ¤¦¿\⤿âɯùúÿôä�Ëxj?ñ—Óÿ¯qÿÒ"O©úSò)úS«øýÓçÿÑþû°s´uªSÈ–Ño“€?•]-�Ö¼·âî¸þøa®k±œ5½”ΟQÇë^6y˜Ç ƒ©‰žÑMýÇF êÔ�8õiƒ:—ÆÍWáŸÄ ߉Ú¡§k‰JFy&')Ó§~œ+ëÿÙgöŸÕm<)©éž yu\ÛÈý L~tßÐ`üþù8¯ËÑá­gâ§Œÿ°tÜØÙ·ïåÇîÔÿ³êý€ükîo øgLð~ƒ�¤ÇåE �\“ÕÜñ“_ó¿Ã7gü?Šúö³M¹>^žö�µòüõ ľÈë`á‚«I:­FïªKeùü™úÝðcÆ÷Þ:ð‚ꚦÓ:»«…xý®Oö¨øóìÏð'\øÜúiÕ×Dû>lÄ‚/�øï℟|sð;ÅŸ¼k¤jÚ¥¾�â-+Åú]ì‘ {£°ÞÛÜKnžL‘?;` ×Ù»ö„�ö…‡ÆÃ¥)|)âKïs/›ö�°ìýøýÜ{CïûŸ6=kéÝË_‚ÿ²‡ìéñ㇉~/4¿5¿øZÏâ¸�Zxnd³¹¸¿22{‹�Žæ4O,$cåݼפøã�ÅŸ…^øÕû:|Yø‘†«ðâ+�+Æ·ö¿h”Xêˆ<þöé?Õ¦ÐYÝú6àÚ ŠZþk?á¡uï�šŸƒþ'ü8ñŸÄímoõ{+=J߯ö¦“«ZÝÉåÉ%¤Ž›-äï„nÉñÁõOŒŸ5ëOÚÇ6µÇÄü.´¶¿)àë� &‡B:xº¸šX"“Í”ŸõË!%¶ž;—ñŽ�v·Mô1´�º]Í yŠp¥ Å>Vî=ß“Ú�HìZ2+•Ö|K¡xz?3XºH?Ù'“ô“^C¬|jÝû�Û ÿY7þøã]8ljÚB'5|e:=òI– Bë\­ñ'ÚwÉo/Ú¤¢äß}?*ð3ãJñƒ%Éé±GîÇ×°ÿ�W¡ü!Ô'Púôâ1ÿ<âä�Äð?^Ÿö]*õç©Â±µ*ÿ hfjŸ5ÝVCŸú2úG×óê „:g‚äsãÊ‘½È»>² ýâŒñ%¼$§û�h¥Òýý\•—Ü?q?„µ0ž¬êŒ?Ú“�we¯+Ó—ü*»îÕÏæ¯öøƒ¨|ø‰»¤ÎbØø8Ìrcÿ@�#×öý¤üd³×g~3è¥qu¥ ¨�t2`'á!Û_ç¥ÿ {|7ø•ý‹ª¶È¼ß/qàŸî¿Ó¡?Cø~ëø þ [áσ_ðN ߇²\-Ï‹´]NæÆÎÑÎâ"r.!¸—�õbYHAüe1Ó$}¿ÒÃíˆá+àiÞq¨¡/ð»Ý¿%mûžýüWÄpþ+O0«jhóÓßM$—­öêì~h~ÓÞ'ŸÅ�WG±8Z\³’Ò)ùþ¤¾ãø×ôOÿ[ø;4 ßâ¡ncµ2Á¸®˜pò{…?*ý¥2±OÁ¯‰¶oÇË/xh<ò]Ên/.Û&8bÈ2Í!ôP}²û« ÿ@ï„ß |/ðgáÞ�ðÏÂ0ù:n�n–Ðú�ƒïýæ9-êM|ÿÒwÄ*L¦Ÿá�êÎÜÞQ_æöùŸ]ôCðwŠâñ)Z�+ÿÛÓzÛÒ+Wçcòþ ûmxKöA×þèÞ<ø[Ä­Çqk¶ð2·Ÿg¡X‹+ÝJH`Ë>È£º1\yi‘õÏíìï¤þÉ3ý®ü ÙxžÖÃÃ:‡Œ´éí®ç¶[Ó#VŠHn o26KxœM?‡¸?3~ß66z¿üö1ÒõHc¹µººñü3E*†ŽH¤ðøGGR!Á ƒÁðïÄKíKþ ÷ð�ö€ÿ‚exÖâCàøÅÞ#øC¨]>BÛgÜË©xp¹äÉ`îf¶,öí×€µþŸê¿.‡¾þд¡/ÂOÙ£þïÂ�+Ä>+ý¡”êÚê:þ¡¦Giuq EupP�$¸•d·O&@ã„Á5î^ ø+û[ø£AñŸˆþ-|ðf�âh,m[Ã_Ù^/՛̸·óâKCt–ðI§ZGĪ×÷mæ:˜ðÆ¿<~5é_5ï†ÿðM�àfµaáÏOeÓµNͯí-äBí%ªI�÷ª�1v’µ~÷~Ë>ý³¼ý¶?k_ø{Æßhû?ö_ö‹&�öm¾gŸçy—w>o™˜öcfͧïnàÑŒvß¿o}'ö®Ó¿cÝöyøwaã 3F‡âŸÙ|]œP[ðôl²EaÞ°¢@`Ùå´#æ¿~¾ê¿õï…ºV­ûBèšo‡<_/Ÿý¡§è÷�e'�Cå\É&øDnù�v±+È?˜rÿÊÀÐÿÙoýI~ÐÐL»|ÁðöCýš¿e˜µ(ÿgÏé~mfá®/%±‡÷Ó3�Øyœ´žX?r<ùiÑkéú($(¢Š¯�ÜWÎ^ý•?go‡¿u�ÚÀþÓ´�kÖfÇQÕ,â0ÉuH’¸‘ˆ™ÝãFy6ol ±Å}+ETPH,x¯&ø­ðkáŸÆ¯ KàŠº®¿¦MËÁwå ::±¸ìÈCÕëã~>j€‚Nwqô¬eMN<’WDΚ’å’?›Ÿ‹ŸðFß|-ñ·ü'¿²�áÔ´‹Ãä]èz„¢)£�Ïß‚á¶$‚3Èl;ÜÉšúÛöÿ‚XxGIh¯ eÔ«ýfP»}?àS†2ܽ·&û-õô>Ÿø�ñ¯àoì½àÈ?á&»¶Ðìâ�˳±¶EV`£îAƒé°w5ð·ü7íKâ8›â�ÃÏ…\ø2>yŽÝBâóÆŸ“ýÈeí×±üý�<ámp|Løçxþ>ñ|¤H÷z–d¶‰Ç#É…‰ÎÞÅóþÈZûöæóOÒ­ ÷’EIÔ¹ }N{nª¯�‘v[ž¿°ÄÕWo‘v_©óoÀÚ×à×íc�j M2é—[b»‹~L�Ê=P°ðz~vÁA¿à…_²íÄo|oáëDø{ãù¿yý³¤Â‚™;ëA±%ÏyÇ)îç¥}‡ñ¯ö3øû@]ø.èh>)�Ì©¬èΫ'�ÙæXʉ¾VOöëÇ<ñûö—ý›~%x{àÇíGm¿¤ø†å4ý'Ä6eD�#8Ž1:q¿ï¦òUrÙ’”qõ(Ë–²ºèÖß>ÅSÍjQ—&!iüËo™ü‡i?ðm�üVÿãË|(Ôm´›OFw·‹ Úɧ¼º¤@ý±åãˆL(3Ô…ù«úÃý€?à‰ÿ±÷ì§‹¬4ÿøL¼yø‹X‰H\w²·ù¢¶öqºnÆB8¯µ|EñçÄÚOįøG!Óá“L�¼·r~àd ýÁ,žY0Ç‚\:sóqõªÄœW¯O¶¡Ðö(â!Sáè;æEÿ?Ê­ÑEjlyç�¾x#⯃ï¼ñ'F³×ô]J?*æÇP…'·™xä~œvæ¿”ø(7üá?5÷ÄŸØQMõ·HþÕev´�ž¢Êõ÷<ÑϽ ÿ–‘§ý}Ñ@Åçìÿ¾ßM=·�¿à ZÏ—;×ÂÚ$Áß’òý2õKl稘þ·þü øEû?ø×á·Á/ Øø[C³$Çga ÅîîøåÝ¿‰ß.{œ×²Q@Q@‘ŸðY¨!¹ý›üÄk"7Ä eXdôÞ„WéV�ðßáëéV®úœI…?åÖî�ö+ókþ "7~ÎÞ ?âãøSÿKkõ_E|é¼c ÿÇE`µøuÿ@;ÿaÿâ*7øoðì£@ÓNéÖþ"»}Üf ™ÆÌž1é@Fƒ ø~&]ÂÞÉ[X"H�úíQ[ 6_oò¯•jßübø[à¾%|'ÓSZ‹Dœ\êÚIeÓÓ™ÚÞH׿ ßë~+ø;ãw€4¿‰Þ¹zn§ È�ž6ÇÍ©å]*Àô"€=hñÍRK G8¤{¸’’b#±'9'ØWÄÿhþÐßu›Ÿ‡ö±ÿ¶Ð7X�Mºßß# €?uJîèJñÆ }³–ê1O23�¥~Rø/þ .ŸðçÄÞ"ñÕˆ½×"ñ4Þд«f½‘cŒÆ c�™þf?(ãšé´ÿÁD>/ ñ½ã 3áÅ­ÀÝ�mdºŒ±©èVxFà=~™ù¬:­N;ü¿Õ¿á¿¿g«yünðGíðâÇâWÃû�:Êìmd ¬�ʸÝŠ@*ëÜõ÷“iÀ*/´të_™ÿ¿nïøSÿ´G޼ã›pú'‡4‹K›€¹º¼ºòV;tL}çi0?\ v‰¦þß¿m"ñMÖµað»L¹dÙu±éæ1h‚¶;q@¦+6ï˜) Ä6Ügé_$üZøù£þÊÿ ô±ñò_xŽïe••µ´[nu+Ì ì…wÄÇ;Tµàöžÿ‚…|aUñ¯â�7á­¬ÃtZ|‹¨ÎŠyI ÄÁ4úZ&=X`SÚP£§á_™z–—ÿøø™5�7â–™l7ËeöUÓnö[Ê`Ò)l#5õÿÀ�~ ý¡¾Ãã¿—Œ†hní&'µ¸�Š/º·ûMÝÄï¶ÓN€çl“Ŷ¶ÔµpÑ~Ï_·¾¬ŸÚz·Æ{M>vçìÖú*I³¸Ü&@霥~‘¬Çø†*Å~Qk?jÿÙîËVý¥ —‹|sq´úÞ�Ù¦²2¶Ôy­ÆìÆ;�Çü¿MæñN�oá¶ñl· 4ô·ûI”ð¾P]Û½†( 2cŽ)eV kòÛAøÃûZ~×­?ˆgãià�ùÏ–³¨D.®/‘ß:+c³jerÀ�G¿uðöøÐP_è,õI—Ÿ³ÝhÉMí¼Nøðý-�÷®ê’¾ý�ÿj�ë?ï?f¯Ú/E�ÃÞ8´´û}©�üËMJÍX#Mío¼‡dq_yFû¹éŽ1@TRÇæFPw©h  rù©ƒÕÃøUúÆ™�­ò?ðKòÿÀ»~u³E€+ùIÿƒ´¿äÎ~Øçÿ¶5ý[Wò“ÿiÉœü4ÿ±Ïÿl.hø£oé_]xGö#øëãí#ÃÚ§…SJ¼oG§ÜAl5+qw¶©vll®. '|Vò\¦Ï0©ÁÆüdW/cû.ø·TµÔõM'Ä>›IÑþËú ÕíÅ�¹¾¼QÜI± ĉm! À1%sÀÍ™ýtÁ£ÿòq??ì\±ÿÒºþc|Sû9üUðo‚%ø™â+h!Ð|­2âÞü\£Áwý¬’=ºZ�s<€A �LFM¤sý9Á£ÿòq??ì\±ÿÒºþîi©÷iÔÔû´økûTÉ{ñûÐé&x{gýìÿôbW̼�k¾øuksiñ3ÃðÝÆQƧgò•Ú@2ÇŽ=ÁúWÛøc€¬³¼-^Ge8¯›>kŽñqŽWˆ…õp—ä@‰ó 8¯˜?lß�_³ìÇã�ZyÕgð剹ŠÔorëäÿt }†+éÛeo(é\gÄ+m*ëÁš­®½kõ‹ÚÊ&·”f9SaÊ0<`Ž+þ¸rùÁU‡´�ãuuÝv?ÈüldéIAÙÛO#üþþ9ÿÁ^ÿn¿�¾¹ð§ˆ¼T4]6ûrÜA£!´Y#q†‰Îæ%1Æ3]WüËþ ¹ã¯ÛSâþ�âoiòÚ|9Ñ.}JúXÿuwå0&ÎFßsü#ŸA_¾vŸ²çü Â(MBo�1–Ùö„Ê$�q•c‡Ë…§#k6î¸òÕrE}çíg€üs„ü%Ÿk¥$±ÛXÜ…ŽÊ)UV¨ó_Õ8ï!†Ëå�ጡ̵z-Õ´±üëƒàiÔÆG�â}§+Ñz~Gã§ü±á«›ü$½°µòôû9ïírƒäCå!Döù�í^�ÿÏØ^[üø›ªK,õ¤q68fŽÐès^¥ñ¯ö¿ð—íKà�á—Ço‡Þñ&‹¬kÐBYÛN+%ìa'ÝïTZo ®—(8ì~óÿ‚møãá&£à/ü/ø5àø<¡øWW‘4ûH�o,nrÖÚ†eP[í�X|¼1íð™—T�G!©KÞŒ¯Íuk]¿¾ÿ�õÙfCF§jÒŸºãk[ËþúYzARâ¡^øëOÃÿœWáv?d?ÿÒþùøGÂŒzW‚~Ñþñ'�¾êÞð¦>Ùt±¨#'˜<ÂêBg¹¯ÆpGéAÆÌõóÜG‘Ã2ÁUÀTv�DÓ·f¬vå¸éa«ÃOx´×Èü6Ñ<§xN_ é�E„á’@C—þó“Îçïš×ŒŸ(Ý_¬>5øYá÷U·v0³'Êëøú{=«‚ðOìéàÏ ]ûÀuå Àm_¢tÏ×>دòˆÿgž~óEC ^2 þÓѯUÕúÔx_°ÒÃ:•àý¯nÿ3É¿e¯ø‚ÃT¸Ô®-dŽÊh@I€í‘Œw#æ½öÉøâ/ÚOösñÁO ^[é÷ºÇÙ¼¹îüÏ)<‹ˆçù¼°\îíüké«xá�„\v«ß0µþ¡x=á�É)äÔ*9¨_W¦¯sùljóùæxÉâê«9t(é6’iúM¥“òÐÅdÿº5ùSñöø‘âÿ|bð~Ÿ¬i‘MñŶž ±‘Ä»m ·š9 sar\ˆûds_­ôWêçΟ~Õ³N¡û@xsC¾ð~´|9ãêêÚ«åù‰ ©GŽhò7Å(áǰëÈo7ðGÃoÛÛÅ¿´sãÇ‹´ÃÞ�Ï%�…"¸/«8Tº{±„‡¹D\“ÓoQúE~GxöWýµÿgßøÏÅÿüUá­B/øƒPÕgÑõ¸n¾Í ÜI¾ £šH'ØJJ˜Øp˜oHµ�ø'‹ÄüÇèƒ$þA7¤DÚZ³ò÷Iÿ‚xøïàj¿³ç‹mìþ ü>´º³kÍFÝŸOÔíoæk‹‹Y጗Ž4‘ɇg)Ç|úà×�?kÛ�‰Íñ;ö˜ñn•ocmfö–¾ðâH,¤ÚÍqu%Ðó ‹Œ ^?{µz'ˆ>?EÿÞ·ßÿM'ã§ûèD}+ÊšÿÇ¿®|°g»ÏAˆ‡Ô«ð*÷hðígz¾â°æôHˆéËÿßg“øbº àV¢ø¹ñ-ÀŒùe,?àG�ù÷ ÁðàÎ�h¨ÿóÐ�ÒÄäÖ¾ÛCá\ìˆÒÅUøô>kÑ~xÓÄ´÷1›u~²\’ ü1¿>潟@ø?áí)V[ìÞÊ?¿òÆ>ˆ?®kײ@É*g‘c5çâó¬EOvöGf)§ õe[k[{H–ÚÑh½ŒøU;ô Ò–¼ÓÓ"e&¥¢Š(¢ŠnŧQEQE|eûnþÍ^'ý­>ꟼ7âqá(µu1]^ _µ±…”‚�<Øq’F~o»‘_Ž_³gü‰ð_àߌí|]ñCÇ7þ1kVߤV‰§ÀOOœ‰¦‘†8ùY¦+úQÎ@éBÆ+ír/3¼¯ðY}wNoD¯wÖö¿â~yÄ^dY¾'ëY•i&’Õ»Y^Ê×µµÕ[^¦‡ é~ÒmtÀ––v1,ÃíHãAµQ@èp=+â€|-ñ?‡€¼sgþ“ªÂÖ÷PIœ:7ЂêÁ@®ã$� Ò&G ï_NrŒ½¤_½{ßÏ¿©÷3ÂR�/a(®F­n–ÚÖì?ŸàÞ¯Ù§âcBn¼Yâ³ÈÍ#[H˜çÉ$Ãó í»æ÷®ÿþ ´ý�5Hå†ïâ/Š‚NÑ™!Ÿ(N¶çý òx&Üp+õã_¨ò¬d¿ò?+Âx Â"¡K–Ë[-o¢¾‡À¿³üßàÇìqðÁ¾~ÏSÝh×w’^ë2®oîÊ™¤CÎxEE@rvä±?[|Fð¶±ã‡šß‚ü?­]x{PÕl.,­õ[0Ÿi²–xŒisq³Ì‰ŽôÈÆEwê1ÜS#ï üÛ0Ì+âë:ø™9J[·¹ú~Y•áðt#†ÂAF d´GçÜ_°yÕ¼uû?|Oø‡ã½_Äž"ø mªD—÷‰ýnmWOOx@ʸxØr[ïÔôðPØ3á?üGàÿ¾(Ïu¥2\Ç{¦jú~Ñ{§\Ç”2B\cDòC*7a×}ß‘K\ç£ÌÏÉÿ�ðLUø‘ðÛàg‚þ|LÖü ¬|·Ž [Óíl®.d)§&š^Xîcx2ð©Ü6–>Õ'ìÏûBüñ}þ½ñ‡ã·ˆ¾*Y]Ù›x4ícNҬᷗÌGûB=…´3í0ĦñœWÝtPÌù ¿dߟۉ?n/í{¿ídðQðWö^ÈþËäÿí´oÇ™ænù6çn=ëëÚ( �¢Š(¢Š(¢Š(¢Š(à5ù_ðD†ÿ‚™üYÇm"ËÿDÙWê‡ðü®ø!ÿ)1øµÐĦËÿEYö¯+üZ~¿£Év�%>)·ÜªxÍmœzâ¾ý¥üAû|^ðü>ý•ü+qsãk«¨E“iv“ÚÇ …â;äd GÁ;³´ýkû\iZþ‰'ìã¤x®cq«ZkZ|7²»|èÖi+g¡Ëƒ\Ê¢�›[M¯müÎxÊÔj [G¦Ûùõ?XgðŸ†%Õ“^žÂÞKõÆÛ†‰ £ >21ž+«ÞsH¡›üjÀt¯¼Œm¢?GŠKd-&Edb“o½PÅÈ£"“o½}èr(ȤÛïFßz\Š2)6ûÐ ~9Ánàñÿ²¯…"ð“@𑸉áo³�Í“íŸ)`¤gÐײiºüçì}ŸYð8�ËM ÚÞôÚ1ÿ-«Ï?à²<~ξçñr<)ÿ¥¿•~®hßò´ÿ®)ÿ ŠüòþÂÿ‚ vÖ¼ÿ€·¿üz‘´/ø)ñûÚÏ��ýºÞÿñêý ¦0'§jò߆Ĉ¼ okñŠk�pî-§«¥±ðd,ßwƒšüðÔ-åý€þ;¾½c_„þ?½íGhúœ§EQ€�Ü;.î0&¿V¥L/Zø3öçø›¤Øø|Ñô¸¼Eâ¯#éöd£1l 'Ÿ¬Q)Ý‘ÏPûMüCñGÇÿÛþǵ¶}B%¹ñ.¯jØ6:{ˆÑÇI&+·¿Ëž+ Õø÷ð¶×ã_Á¯|'¼hÐkºtöjΡ‚<±•WÇû'Ÿ^+Íî¿«\Šðß�ÿ³ßÁoÚSÁãáÿǯ éž.Ñ#™.c³Õ-’æ%ž0BL�þã€Ì»—ŒàÒüÇ>ÿÁF­¼ᯇ¾ ×4;É´Ï?‡®­Í„ðA4÷z=íÄó‰œÅ™m®#¹Ì1Ϳȸ�$Årž ý²~øGâF¡ã½boxžÞö x§°Õ.ôÇ´Õ`¶óI°Õ-E¡‰íœ¸òæ@g‹/°!Óý¿áÐ?ðL_ú!¾ÿÀèÿ‡@ÿÁ1è†øOÿ# óLø¡ûNxOâÀ-+öw³ðô¶Z/ƒü™ü1(™Zk{Ûœ�jK®?{ó�ñ¢àÛùP¢1_3?ÐïüÜù§=+ €^(ã+С�ÁÆ4”ã'k'£¿M÷ Op•5§…¬ÜÜ\UÓê’íåýj~ŽÂ'Ò¥hÕºŠüÜý²?à«°üûÅš?ÃÿÚãÇëá�o\³mBÎÊ3TÕ&’ÕÂftÓ-.ŒHdÊ©“`b^†¾G?ðsüXù+×_øIø«ÿ•þàQ¥h¤ÈýËŸHÒîF.-ãqŒ` éÓ›sá/ÞêVÚÅÕŒÝY‡JÈ¥£ó×Ûé¸p}«ñþ"`ÿ‚+ÿÑ^ºÿÂOÅ_ü¨¯Õ/ÙŸö�ø ûd|Ò~?þÍ>%·ñg„u­ÿeÔ-’H²Ñ9ŽHä†tŽx$GxåD�wЦÖÄ8G{âÞÑ# ³„£å|µÁo\c­_ŽÆÒˆ£TÀ�Ð}¥]¢““ØQ¥²^”nö§QSbÏÿÓþþ*?÷êJ(«n_›=ºb¦PÁy©( �Nõ-Ì�™ÿ?Ê€EC÷ÇùÿëTŸÃóPLˆ8¦Áãüþ•Æø‡Æ~ð¬fmvö;RW! ùÈöA¸ŸÀWÎÞ'ý¥‚“máK?3þš\|£ðAýX}+¯•×ÄiN'33¡CãgÖ3\Cdpz“Æxï‰>8x/Bsog!¿˜ ®}ß§åšù&MSâGÄ뿳fçPæ5…Oðç#ûÙ¯\ðÇìç©\sâË‘ëå[�Ì?àmÀü�}ö®2¦½‘ã,ÞµwþÏ;œÇˆþ8øÓ^-k§°DÇĊêýïœT>øSãŸÎ×wqe~L—$‚ß�Ëç߯¬¼5ðóÂ~EþȵD� y¬3'æz}µwʸÀ« œA k“ O—Ì#‘ά¯Š�ü�ðßÀ¯ é$Õ³¨È¿óÓåŒ}\×±YÙÚÙ@––1¤iDA€?1Z*Êãå©«çªâêU|ÕÏ……ËMXk˜>‚ŸEAÐ74ê)›ÔPêíþýUNKˆ¡‰žW «÷Žq�Ç·é^ ã�Úwà§€£ímj)Ý>ò[3Ý�¿‹ ª8JÕŸ-(·è®'(­Ï¢·JŒ¿ùÿ"¿&ñÄZwÄ95_\9Ù¿Qµg·-í-±”�î袿L¾|cøUñ�A%øSâM;ÄZyÀóôëˆç@OEo,�­ìp}«äñÙ6/ üzN+Í4vF´ÂÓ=SsûP¬ÄÿŸþµEæ.ÝÙ©�qŸJàOK•`Üå†-F¹b¤¦EP_þÝ´6¹û&~É;ý¡ü3a§á-.[ø-®wˆ¥hú#”!±ô¯°«òÿþ ?ÿ(½øÏÿbåÏôª…¹•Àøþïÿ ø¹ÿ'ø÷â/„~?ð†‘áëmA}Y'ÓÚᤑÅÄymçHã”·OJþ�«ø'ÿƒTxýµüxý ²ÿéu�{®2’§>TEVQEQEQEQEQE@ø�ZüÖý d¿‰—®¿hßÙ«_þÉñ]ÌQE{grµ¾ŽD »k�F,å&¿Jsü©Çʹ1XxU\’9±x8V‡,�Ã�‰Úoí‰ûUjÞðÅ_Ãá]3ÃÚ¤ZŽ©ª�å!Ú2XàgŸ'2­~Ϊè^%Ò–Y¼«ËY”0È2uÞ¹ïˆß |ñkžñõŠßé—ÃBIN�t ‚;"¿4î¿à�ÿt›É>ü?ø™©iÿoØÉs§oµGÿLc#˜Ü¿;3Æô�ó^_°©†¼à¹›ßô<%ƒžsœbçÏ¿ËcÔ~,þÚ?þëáÏÀ}|Yã –ò…†‹ò–OI¥�Npz¢?ÞÙÖ¸Ï~̾7|AÑ>7þÖÚ²[¶‹r·ú_†ìîmeR<ׇ  àí_güýš~þÏš'ö_ÃM*;YdP³ÞKûË©ûþòR2F€a𨯢†Ó÷«Zy|§ïbÉltSÊ�k-xÌ{ ˜?øÕ}‹û@|qðwìýðâïÇþ0rÂ?ÝÚZǃ=ÝËq®FçvÀ*ùŸöGø/ã+½kQý¨>;F?á2ñP mhßó Óù0[(ÀÃìlË�÷‰ÀχßðOoxWÇšg�Éá[é›OÕlØ]i:”×þ!%¹lï$ŽÒ×#¦èíö‘í_yøÃúO†4xt/ZEgej¡!‚ˆ£°Q@š¿²?Œtß‚ÿ´‡ÄŸÙ³ÇWÊûVÖ¹¡›†Ú/m®PoXwcsFêÙUè1_©ÙŠù·ãßìµð�ö‘Ó-ì¾#éì×V_5�õ³½½Õ³ðs±nÃåÎ=«ç¿bïÚÃvñéøñâk-:1¶8nmìn5»A¸àqóf€>´øùñSÀ~ë9ø‘q:e½´�£�¨3¶ÃˆcRF÷ºª9=~[xà/Äèÿà’úwƒ`¶–/iñ]ë6ÖXeqþ—qq Az‚cuãü�«¼'ÿüðcøÂ×ÇÿüK¬|IÕ¬˜=¹ÖdU·‰—î²Û[¬P’;nC_|­²¤Kj06ícn1Œ{zP‚þËß<ñïàæ“ã/^%Ã-¼pÞA¸yÖ×»^)“9GRÁÇJúw͸s_|Eý€¾kÞ2ŸâÂ�WTø}â[£¾{Í]‰3ö/m({r}HŒë\³þÇ´¶¨�¦øƒã÷‰e°a†Hml"•—°ßö~?(Ê¿à¦Ú|h×>þÌŸnÖ_Mâ;MW|Òiö¶Ë({™vdƹ`ƒ8Îkõ¾ÕJG±ºŒ*ù{öý‘~þÎBçPð]´·:ΡÅÞ«}+ÜÞMëºI Ú¹u6¯µ}K í]´=Q@djvGP±kpÛGîcZôÔû´‹¥^�BÅN$IÑ׆�nW$Xé:ï—ÿ,/¹Ó(ÿÙÀüÅu´¥"–£dÝRS¢Š(¨º'÷@¯#ñgŒ5k ~]Ma‘.NÐÙó|Ï_÷+Šºø�ãHOîçOûôŸã@Gy#ÓüþtÜ2 øï_øÅñ#N¶s¦¼ã³Â?£Šï>|v°ø¯¦Kow³Õ-%h&‡øYã;®8ì9éSÊ‚çÑßîS|³þýu.E-PùgüÿúéS­KYW·–šm¤·÷r$P¾d’;UU,ÄðM~.é�Âßðp~µæøýŸìs‘ßþyÿžkö«ì–ÿóÅ?ï‘_Æ[ÿÁ}ÿà—Zoü›Vý¡­|u¨øAþ[ø*+Û T¹óµ˜uù®Ì0G¹’HÌ:Lˆc|áY«õÆŸðsüGá´Ñ[üAñg‰4¹‰5 x‚ÔÈ=PKb¹JÝÏÝ}nÆÄi7L!�p…ðv�Îߥ’_ü þ Cã/ø$ÿíI¢xÎ[�WàïŒu‰´¤ýãZ¾ÿ-5;DéçÄ1æ ÿ]Ù÷ÄlŸß>»ÿ%Á(t.ÃTñ'ˆüOcc«am%¹ðˆ"ŠçÍû‚'{²oÏ Í~7ëÿµgüߥx‚]?Å_´»=NWß$×┼¸qû³nÝ�@Å?³ÿ‡?< ñ‡ÀzGÄï†z¥¶¹áïZC}§ên$‚æÚt߈ã¨t?…z=/ðmíµû.xŸöBðçì áývK‰Þ�[Ô®|7¨Y]ØÏ—s­]Ïk$x£IQ`¸„°�‹&ÿ˜kú‡ Š( ÿÔþþ(¢£f]¦€$¨=¹§oÛÚ¸ox×Â~Mþ!½ŠÛpBs!ÑÌÃè*c7ʕɔÔUå¡Û§©Ís ºn"(äž8ñÿ‹¿jD m|eŸúmqÇåþ¬µx<º§ÅŠ÷¦ÛuÍëdc)è7ˆÓß<û×Ôa8J»\õýÈùŸ9ˆâŠ)òQ÷™öG‹¿h/østh\rß•ü_§åšù“Å?´'Ž|I¾ÎɆ› ¡!æR?ë§PÜ»o þÌ�ØKŸÝy1‘Ÿ³ÛòÃØ¹à~F¾–ð¿Âßx8)Ñ,cY—þ[2æ_ûìò?=«e[-Â| �œŠŽc‰øŸ">*ðïÁŸ‰1¸7w�½ºHr÷¤‡${6d9õÇã_Hxgövð†ŠVç\-©K×ü±�øëÿ-ô¯£°GÝâ†8çãxŸZ<ŠV�dz˜>ÃÒÖ×(ÚXÚiÖ‹gg Cp‰„Qô¥_ïNE4åÅxm\÷ [î|´ú®Ò9=ªÅQE„�Ö–¢Þ¦€" ´ØWÄ_´_í·ð»à„ÑËuÕìd®ÕÝ£ÿuˆÉwõUŽø¯—¿à¡Ÿ·Jü$IþøpuW/%‰¾t.–nÌT«H{)Ú9¯æÃÅ~-×üg¬6¹âKƒq/!FN�püsé_©p_‡sÆEb±ZC¢îyجÂ4Ý‘÷ÏÇŸø(÷ÆŠ’Íc£ÍöKŠ £œ�±�÷÷œsœWÀ¾"ñ§Š/ýœ~[ÛHÇ*müCi#�»!Õøü~�þÆŸ·ìÙÿµÕ|-ðÇA»øsñGF±ŸV>žóûGOÕ¬lÓ̺“J»xã¸Iíâ 3ÚNš%fŠY °eþ%åõjòÉ8úŠ®U.æüGþ }ÿäø{ð—Møà/ xÃÄlõ�wS“Å^ܽ½Œ7cO°Kuµ½µØàºvÞ?&1´×Òÿ ~/ê?´_ì]ðŸö‰ñ—…t/øŸÆë¬ßÜÚx}.­í�i¨'1\ÜÝ8w{{‡/¼eYsòàŸç_þñ¿ö·üþ4'0ü1ð‡‡<1�À­ŠßÞcö»Ù�÷ÍvŸ ¿àº´Â��ž ø3qðKÀ:î›à  Æ÷S²Ö–skÉ.é¾ÏªAw’W‘˜F¹fcÓüÇƵ)fOZMÂîÉ”ðiÑä¶§ï—ÉÆOðÏò¥*7oÈíÀÇ_Aï_–³÷üsö|ø§ã?Àßµ‡Â+麤Éjþ'ð]íñwšÁD÷f¥5â\@„î‘b–)6+mÞØS÷ü_öÑÕ¿à“:¯Ãÿ‚:_ÃÏxãÅÞ!°Ôµ�fçÄ#Q�b¶MBK8Z ;ÛDJ–’ÌK),zcŸÒ—Š8AÍ];žoölù�exVä¦Et#nÖR¾„g‘ìsõ®Cðþ¥à_E㟄Ρàív WÚLïnÄu!• †�ú�|×ãå·ü»ö޽Ó×T²ý›>ÏjÃ+4z‰2 5‚:û×Eðãþðf­¯G¤þÑ¿³îƒ�#ys]x*ÿRÒõ tèZ8õ�BÞVSÏ–Ê››�ë\³ñ?SÝ«KO;òɯ…ŸÖïì¿ÿ¬ø½ðš{oþÚšhñ‚˜�|Q£Ââï-PuîL!#q_Ò·ÃoŠþ1x*ÃâÂíZ×\Ñ5(üÈ.í¾[ÆcÿÇ)ºv÷@úç"–¿ ÿj?Ú»öðÿ‚mª|Nø±§ÚüføJ²„Ô5;dÓõ½1Iã„}žXñ÷œFŸÔ~—~ÉßµßÀÛ;á]·ÅÌz®šÿ»ž#…¸µ›ø¡ž.±¿:ÔåMت¨¢¼Ç>#øÊu§ðçÃ=Ób$nÚ®©1Ã=’y!þxÀõ¤¼Ñ_3Åð§ã6²OüAºˆ¹Ï‘¤Z[Úƒý—t’ÎS^]ñ+öWø½®irÉð¿ã'Š<7ª˜%�ÛÞÛ‡7Á4DõÛŠ9PtdRnZþAíÿà·µÿìûb\þÉðQÝ;Oñ“m<@x‡L¶û$æÎ~#¼HSÈœüé·9æ¯ëGÃúþ‹âÏXx›Ãӥ݆¥oÍ´±ò’Å* #tö*r*§Mÿ¤üéàç¥-B`QE0 ,TŠ�ˆ$Žâžù¹kzo‡´û�gY�-­-Í,²·–‘¢ ÌÌÇ''jen¥BO–&¨ei|­Ùoî÷¥y_ÆŠº/Á‡Z¯Ä�vÎ÷PµÒbÉk¦Û½ÝÛŒ�ˆmãä#9ÀÆ}+øöý¡ÿà³Ú_ì¿ñëâ]÷ì�âí_âuÏ‹¯ÒXî5ë�&ƒ£,*AƒM…Ue•w3€ÊÑBPF9RÍøŸñ‡þ Cûsüo×VñïÄÝj1+dA¦NtÛt_ÌJ@¸cï_˜gž+eøG*JîKM6ûÏï? gïq iã¥jXyr»ÊêNöºµ®­¶§ú^|ø¹á¯Œ?t�ˆÚ4WZt:¬"tµÔà{K¸�8Ù4áãqŽUºWe­x«Ã~0C­ßÁiö¹Dþs¤bIHÜ 0Ë�çƒ_åcaûWþÔú-ò]èÿÜMϰèGjúêÿþ ûføÓáì¿iÍ9þ(x(Këmâ )c’6ˆãÌ·Ô-VÚæ9‚¹Ì�€Øæ ù™g‹¸Z‘^Ò yï÷ŸuÆ?³c?Ëë9a±”ç}ݤ»%}Þ®¥ä/¸+(NjU*#ƒ_Ïgìÿïý”?hX´ï†Ÿ‹|;ñ„·†Je–Âwû« *äð̱3wSýÙKoyf“Û•dppx ÷Õú–Y™añt•l<”—‘üÇ<›ðî-àsjœ—u¿šèþLÚ#4´Äl®•>½#り( Š( Š( ¢wÛRÔt Ocã¿Øóöuñ�ìó¡ø·Mñ…Õ•Ôšþ¿qªÛ›6‘‚Ã,qª«ù‘LJy ‘Ó¾ÊÇ4›–�Ë@ÇQI‘K@™´QE3rýÚ}„�ÖŒŠZ)2(È ¢ŠLŠZ)2)7-:Š( Š( ¢U"¥¢€05{/´÷†3‰—ôtå_ÒŸ¦ß®£`—IÁ?};†2þ¶S¥r1ìÏ=²ÿª¾ýâz P|ëø€àh°�Öû´ê(¢ŠùãÅyÞ8Ô¥½—óž°¤†@$ Ó'Þ_Y‰ü2ý˜|qªxjÃÇQêz|–¶Z€Òâ–þÏË�KÀc�n‚]І@—´ Ý}¬‹'úåhÐRµú¿#ÝÈr¹ckª)Úý}Ûïˆ~&ð'�4yµßë:%ŒkÍÆ§s ”?÷òà¢~µñN™ûFÙ|(]Eü7ᛟèÞ(žÛWÓµmê)cx#òf‚O�$G\8`Ä_ͧÆ_ø'oìÑs«Ÿ ë5ŸüO‡ÃY½·¼¸û\?Û©ï$³!—ì‚O—ËÆ@þ<ü•û-ÿ¥ø‰ãmSö8Ð> }ŠÊëÄÿ®eÑ/%¹c4)l÷Ka oùä’ÞâD@§~Þ+ÞÎøZŽ íiÔ»¿cé3ž †±©}lô·ÌýÜýœÿh�/ã~†Ê`¸ÓõKQûÛ{˜ü·aýþ2Ÿ\wö¯©ëã?‡Þ²ðïÄë BÎ!Ú#¹G À#bÓҾ̯‡?> ñÏÚŸ�6ÛÇüH5/Ïì²b½Ž¼»â惩ø«áWŠ<5¢'™y¨é7¶Öé�¹–hg Ë´þoŸðJI|?ÿÕÿ‚üWÿ‚Á|4ðî—¯üf»ñ4~ðþ¡©[-Òh–¦[Ks"#gd�$òHÝ7â?.AøÛöGÿ‚ß|Jý¤¿à ßüoÿ‹ñRxçá¯ÃÍnþþ/?K³Ž ½B×É‚îx,­áóâµ�!—iG(Š÷ksþ “ûa~ÔŸðO�â'ükö±ýš|Añgá�� ^ø‡Áé÷Öú•¤ˆE£ÞÚì�ÿvïh[<ÈÑã™u¾ ø[þ ýgñóá׋¾ ~À_‡€ôYufñ^�¬K«™µhï­D6i ›gh~Ã(2¦É¹àžôúWÿÜñüÂëà6·ûSü1øáá¿�_²Õß‹,8Ï™|&ýŸ<1ÿ gÅ}b-2ݲ°Æ~i§aü1D¹g>¸È¦[V8|4¤ôI+·è‘Ëœg8<» ¬iÒ‚»”šŒRónÉÅE~øëþ káK+æ·øoà{‹ûu$ ¯îÖÙˆü¨£›÷Ýu¿à³ß ¼Q«C¤|[ðÝdž’VÛöËi¾Û {Ⱦ\r*ÿºûWêu|âÈaþ°ðnÝ“‹ø wùZçóvé§á�\jÀC5�6×p¨¡ÿ�¸(%ç{yŸ´ôV/‡yI(Ùí®ÚôïÐú^Šü:ñüßÀ×~_…| }yx{«Èíßî$süz½óàgü—öuø±­Cá�Åsàûë‚7½+%™cÑ~ИÙõtU÷¯¿Çø)Å8jW.UÛ•¿ü-¿Àü?%ú^øm˜cV_†Í¡ÎôWS„oÛšQŒ=5ô?Rh¦G$rƲÄÁ‘€*G ƒÓÔúü´þ‘A\?�¼t óÑZúö›¤j÷šF§ Auk+Ã4Mä‘’Hí‚9â+'�¼W÷éÑ„iZÉ_Yž û{øãþGü¿ã‡Š`—ȹñ\ÞðM£ô,/o¿´®Àõ&ßMdaèæ¾ÿƒs´Ícá¿…~?þÔ»›KÕ´ý3BðŽ™ynæ)R]fù¯n|§Ro¥�Jà�ýFk¬ÿ‚óxá¼)û|ø9 üþ/ñ7ˆ|[p£òtèm´›2G\okÝ ÿµø|ÃÿÍÿ‚£~ÇŸ²샪þÎ_|#ãOTÕüZ|K.¡áÛ�:ž8ìc´µ‚Av >WïØt›�º3üÉžfjgn®'XŤϨ£^éý@è±ý²?à¶~ø©ðkÄ?³�ìaà GÁÖ~4·þÌÖõÝoQ]GY¼Ó�ƒIak´ðZCqµVr¢Y%Œy{‚ÏÞ_ðIOØO]ÿ‚s|ø±ÿý§ìdÑ~#iÿ üE{à¯\~æûK†âÌÛÇªßÆÃ}¼·rÍ­œ,B’K#(ÌuçñN2Ž?Þ�’^�…¦á ÈüK»ó¿à¤ðZGŒ¹µø·ñd(ÛÑ4ûý_Î+SÇ¢­oº¿íMûFüLý 'Ð|ã VÛO×5ö´Ólb��²[Ü]˜ ‰#ûžXF#«øðÿƒ||º¯üBßâ¥ÐÌ? ¼)â/�à M „–6‡>×—°•ï¸Ö¿¨Ÿ�~&°økã ¿�ÈßiðóCÖ|[6ï»�Nžö6Ï£K`t�Zú^ÀRŽ‹«h­/­·0ÆÖj¤`�ãGöÕð׆?hOø+į|±¶Óôß|NÔt�ÚÆ5Ž·Z£ÚÂaDQ\�ʪ07£ö·üËñRÏâ'üÓÇ^Ñåk�7áÖ�£xḆÎO±‰¦±¶êy†1Œæ¼Ãþ ýøPÿ´7üKàÌ^!"ht­jojËŒ£A.¤$9õšÆ}M|KñŸö‚ðçÆø(‰ÿj_ˆöÓ꺈|{sâKëxYDÓéóêmq$1–ÂîhNÄ'åùLþ&í¡éݧü'ÿe_øöbøwâ�SA²ø}àïè³YØ]Io_ǧA%ó²!Q¹î¤�±äœsŠü ÿƒˆâðÿ‰þüøÇâëkgø‰â+�ÛÞj‰ 0ÝjE‹Ø%“ÞÑLíÃÝǯ–+¹Nv€¾ññsþ ýÿòñÇŒuÿŠ6ß ¾!êºÆ·{5ûXÝjúU�Ÿ™3³ì󠵸•cÀ ¤�Þ¿!|YuûeÁxlSðÿÚfŸ£XE§Z[À^øKÃöÌïæ]ÞKŸ.%g–iæ”™n&vجì±×è™Îa�­‚£…ÂÓ½M.Î*F£rz²?ðH¥×£ÿ‚Kéoâ æ¾'ø…´ ÙâÕt­'í^Y#î�¹œ°lóÓìÉcŠxÚÚá‘‘µ�èÁ¸ އŽpxúVÜ~øeð{ៃ?fo�òIwàÿ‡:ci¶7Ò¡†]NêYãQÔäŒòŸl¹‘�#ÏÉ DŸÁXÄ¢ýã�¨é�_OÆ¿qàl®¶.…ÊÎ××CÄÌ*'QòŸ¾_ð@¿ŠZ¶©ðkÆß³æ­)ž/‡úà˜å,µ%yR>q�%Šgõùð@Wô ÐWó¹ÿþxRø�ñÞâ&ŽÇÅÚô6–�HtÈÜÕKÎW?ÞB:Šþ‰9ϵ4qº¢³JÞÇá¿Cè°É¨+‹EWÍ…~^ÿÁgåßì\¹þ•ú…_—ÿðYïùEÿÆû.?¥:kP?–¯ø5L1ýµ¼xÇþ„Éqÿƒ :þÛþ+üQ°ø]¡År¶ï©jú”¿eÒôÈ8šîå²B(ì y$?* ,Ä þÿàÛ?Šžø)ûJ|Mø‹ãF—ìv^”¤ñ´×W2ý¾Ód0@™yesÂ"M~ÑÁ+à±þý¹?m¯xcâΘ4wQG‹ÀÉpÀˆ¬!æ{.NÜ»<çeÆüþžüm6çp? _„? µ µï�|}:ê>.Ö¶Båò¢Eæ;K\üÉo~Qݲç“^ÿI‘K^}îŸüJø�áÏ…?õŸ‰>0™m´½ÎkÛ™EŠ.ß ¯àgöS“Æ¿ð\?ø+”>4¼·Ñ^]Oû<äÃm¥Z?ú=¨žåŒ9$ûWôßÿ|OÔ~Á0dý…>Þ›y&‰.|S,MƒäÈíì²>oÞ K(ãäòÁÊ;)þBã>ÜWó¯Š|k8Ô– ;/µgý|Ïö«öýpÕòê<[Äx¹+ºI­uµ§'×outNýG–@mü`qúvúWë_üCþ q©þÚ¾6Ñïþ+k±x?Â:´³Ç§x×Q֚ϛ”Ó¢“’ijuFáU›qO‡¿do€×´çíá?‚�\ýŠÛV»öïxŒZÙ[©šîmíò¯—9‘ómÏþ�~ý‡?e½/ÄŸ¾&è´�Søs¥K¦xzâÁ-m'E]¨aö !ƒ·{÷�x~ðZÌ/Š­nXµ§wÕ¿#õŸ§oÒ†§áéðþY' EX¶çwÙ¨ýí-z$Ï“~ÿÁ+<9û5üuðˆg%м=àM"ÒeÖì§Ò’÷VÕn]XFÇR�Úx‘ +…FÛ¹6íÚÿ/Üß´ïìÈ¿´oÃë_éþ,×¼ m/#»MC× kpÆ0è#ré*´-»çŒ® ÏüÌÁY?à±?¶¯ì•ûpøŸàoÂCL‡@Ó-ìd·[‹š@ÓÚ¤�—Ü2 –>Ý+ó¼ÁÁÿðRÝ6e¼Ô.ôWXØ|²iDFãъȽ}˜qÓšýcÇùF­L¢Ò‹³I]i§Ý±þ|ä¿DŸ¸—…âhV§/k8¹OÞ|Ú«é¾½YýƒþÐ_ðJ¯Ø¯ö—Ñ>Ãñ7Á-¨”U:¥² Kòê»C´öÂ2ǾPž«ŽÂ ø9ûpÿÁ)nIøm}¨ünø'm“6�8 âMÎZÄýÛÈ�`[€#E%‰õÿø$Ïü{Nÿ‚„xYÒ|W¦E¢øçŠ�¨ZÁ&è.!�6ÉàÜ7Ü»Y b‡nX†ø}û\ÿÁÆß´]ׯÝgŸ²–—¤[ø_Oº’ÎÚâú /.o¼¢SÎUGˆ"HÃ÷q•fÛ‚NIQèf‹—wä×m?#âøÂ³LßÁÒ¤ª* ó…Y{‘]}/wÊãçæfß ü} |Rø¤|GðË»éšÕ¬w–Ï,RBæ)Fä݈’#`ò®ªËЀk¾ùCnIéÿê¯àgÂðq‡í÷à¯ÚMãí@Õ4ôpn,þÇ5Œ²GŸùg+Lá áŒn¾Ç ý ÿ‚�ÿÁ\~%ü3ý‡þþÖ_²´vQEãûÄIbÕa7Tf Ù¢"7Œ #–=�‚FA­°<—Õ¡:‰¿q]éúýøË,Í0™uZ1¶*\°’•ã{7fí½“õ±ý&�[¯AQüÁ¹¯ä—ÀðXÏÛÄŸðJßþÖÚ“h«âïx–ÛIµòíZ}žV²VÝ—%ÿÒ\q_ZÿÁ ¿à¤ß´‡íïªüC°øöÚcGá”ÒÚËû>Ýà?éfëÍó ‘÷qméÞ»°|a‚­Z–暺ӡò\EôiâL³)Æç8•e…©ìçikͦÊÚ­Qý“íÀ¤Ø} x�ÇŸŒ¾ýž>x�ã'Ždx´¿ é÷…ÆÅÜå Œ¹Tä.9ÀÏ5üFüOÿƒ”m¿øÆçPøs¥xBѤsö[Yíå»�Ptó&ó’6lrvF£Úµâ+Âe‘‹Ä?‹±ÁàßÑ߉xêU°é.Z¤íå{j|Š0ŽÔ­Óšþ0¿àšŸð[/ÛSöŸý·¼ð/âiз⠮ã¹[K†b�ØÜ\.×iŸ|c‚·Èsú•/mA;y£ÂñsÁìÛ‚³å™Ç/;�7ºî­v¿CN¡w¥1A ׃N]ßq«ß¿Cò´~ÿÁsà¬>2ÿ‚D|ðÆ¿x6ËÆ“ø›ÄØ�m}u%¢CÙ'ºóÇ„œÅ·Žs_MÿÁ&¿oy?à¥?°Ï„¿k«ýê亅µö™m3O­Å�äÖÛŒ¨[z"IÈß_…ðxŽŸi«þÊ?t›ïõ_,à�îIct­úóÿø ׯydÏø%Ïí•ð—Z—ì÷߳NJüdèàÇ6 a^}n-&ÛêOåj:íðLÿø9/Æ¿ðP�ø)s~Ãßð¬ôÝóK®›]r Ji§’ )%’0<Ÿ¿ŒüÜgŽ•âÚüoÿ5øÕñ£âgÃÙöHìþø‚ïC¿¼Ò¯î¤1ù7ÁʾÎ-Ý€Éè}+ñþ ËøI?Â/ø,oìý. »n¼[ðÇUñ¤õ?o�QòÜý`Ž3_·_ðkÇ‹|+áŸÚ_öç�ĺ•­�›â,F1s4qoóYÎ7•Î;Ô�ôçí…ÿžÿ‚±þË¿¼;ñB×ö?¹Ô´øAìüQâ›Ù®î¢‡B¼o5¯¬§"ÜÿǤq£988z±ÿ¶ÿ‚ÚÁHà¡¿üs¬~Ë�áÿƒÞ,šö)üqk{sqgl¶‘Ü|༯þ“€ä�™ý«õ¯þ ógªÁ'?hKý6hæ‚_‡zóÇ$d22 H*GÒ¾2ÿƒ_Nßø"?Áö�ð^çÛûjö„ÍšgüE¯_Áp[þ Kÿ&š¾_Má¯øI~Ý/ÚþÓƒOÿþ_—ÍâùßÓž¼WÛ?ðXÏø*׌à˜7¿­¼%àû/�Šž&ÿ„~cww%¯ØÓ÷Í�ËŽMç÷ÝWð[£j/oñÃAÿ‚ÈÎ[7ßµu͛ݒßñã¾ßSǦ<·qô⿦ÿø;cþC_²ý”“üìªåÀT?´¿ÇŸ~Ë¿\×ë_üoö݃öóý‚| ûijúdñ>Ÿsuya¦h­%³¹šÞd8BB˜ ÉQ_Æ—üö=ñïÀ_ø'_ü×ö'øñ ¼zö›â·ðþ«¤ßh€© W (pòäê}�ÿzý¡îÿgÿø7Oöšðγsäêßïüu¡¢`†Ži-Vk~¿ß»¹qõ§ÊÔðGoø8ÿâü'öà»ý”õ�†Zg†4¨´}KW·Ôíµned²–$� O 'ïPIÝ[?³ïü¯öÓý«e¿‹¿gÙâ?øÃá·�ìü-oáÝ.þâV»´œNf¼wò7§•å§cçëÅ~Á³?áJÿÁd|!á™lÚ§ÁHµéAëÿ˜,/Ó�úç:~ûÿ‚ȯûTÙGúÕ+ð7ü³ÿ\ø—ñ³Ä¿³wÃߨËû_Çž �ÎÖô+mJîKÛóÝ×£êi·—³Ø J¯öym<’I ÷�jüùÿ‚Ugþ"Œý¶óÿ@UÿÒ�.°j cGÐ?àñ‚ºÇˆn಴‡áä»ç¸qk�;\.ä’@õ«µÀývý¥?à«Þ3øÿ‰ø5ÿððuž¡¤üPÑŽ©>¿%܉shßñ1ù#·”qþ„9/ü~¿qëøºý»¼MáÏÁÙ²E÷†5 kèÂrFÒ[J“(;5ß�”$ŽÕý¢Ôµ` (¢�Q@s^ ³šöÁ�¯ÂD�“ÓÌC•ü0}�tµ©aŠ#£¸:eüZ®ŸõºàJ3ƒÛ±SîÁ­„ûµÂéÏ.•®Í¦ËÂg‡=œcÌOLJVô®òœ•„ž�ERåñ >:Õ×Ò ý¸¯Æ¿ø.ƒ�gÿ ük°²Žú÷À%°ÔáI2ó–™Èþä³ÀÞ™Až~ÏX®|u¬ÿ×½�þׯ'ý¡þ ø'öˆøY«|ñÔØÓµdK{‘‚9‚—ÇÁÃùˆ%k¿)Å*ãQì�{†ó*x\]:õ~õô?ŽüKýš´[ýCâlj¬Róâ æ‰rÖóù³ù"k„pñ„c{ÒãC»¾}~ªÿÁ1¾!hšÆ)f½ÂÙpéVw:ί¨Û™§†O\›t¸¶yÜlf�Ì)Ï.�³iÎC<3ÿÆý“>è~GÃmL·×œ…³Õu$:ŒÑ4N<Ç„\HàJˆÇ�[€{¯¹¼àOxCÃ6žðTP¥�„q¤ÍÇÊló’Ažù¯©ÎxŽ•})­Ð8Ë�ð8ËÒÃÓ|¾…—–¤vVKmã-Oï=Êÿä1^ó^MuÏhXÿž·_ú,}+Ökáåä~G-Š( “ð›[ø‡à�‡Ÿðp«©üAÖìt;i¾Xź…ÔV±»ÿÂO;O9�$ œWë7ü4ÿìÓÿEÃ?ø6³ÿãµò'í³ÿ’ÿ‚yÿÁF<]¢øëöÆøuŒ5�Ú=…•ØÔ5=:D¶w2™´Û»o1„�$ݰ–Æ7ü]ÿ¹Á ?è‡åÍâþ[Pìgü4ÿìÓÿEÃ?ø6³ÿãµ~ÓŸ³iÿ…‡á¯üÙÿñÚüwÿˆ\¿à…ŸôC¿òæñ?ÿ-¨ÿˆ\¿à…ŸôC¿òæñ?ÿ-¨¶ÿƒwd[Ÿø$Ïù­ÜÿÁ¾'øÇÂÐøƒâŸˆàðµÍÌaÒÁ-ÍÜÑ‚8$J�êª[ðx¯žþ-Á.?jO‡Þ;�Â~Ò�‹,®“}¾¡bq`pVo4¨…Ç£6û¬pqú7ÿZý¨¾,x]Ð~|¼Ô4›�'ûGP¼±2Dì˜á…dL ¬Î§¥~5^þ×µöšUux’ ßw}õÊç™z÷ü≯ß5ÃÇ8–"’…DùiÊ/EÑû¶—ÞÞŸ‡ÄøçÃÞðÖ6|+O‰u°î*uéÔ^ó²r‹S¼:ÙòÂ6–Ú-SüâÚ'þ ‰û1ëq|WŸOšmrU�Ã:`˜ÜIkzà™äp£Ë*áÙUÈ2o&¿4­+âÇí)ñYl,Eψ¼Qâ‚ıÝ$²Y™Žª¨äœ*¨ì£Œÿˆ¾*üZ{Wø›âC^6!ſۮ$ŸÊc~ÍäíÝ´gp=+ö þ“áo^øßÇ/»TmSO³´¶¶Èù’+—�ÌWñŠ1ÇAÇzú})p¦O�â,L!)¯2²’Œš]ZýûüÏéÿ ·có_ ðu3 9:ntâßXBV�þ½Å娶ää} HHi›…~&_ŸÎ'ü3ö Ö4/ÝþÓ ,^ãL¾>n¹kÜÖÓ» 91>3(Úÿ1;X”üC2!O1[8ü=kûá¹´Žæ´¸�eŽ@U‘†C) ƒÇ=ÇLWâOí}ÿŽÐ ºñ¦§åÝOXÒnŒ·Æ’'›âÁ(Ù€b]£Wã�jß<[yã]m`[‹ÇOÝ[F–8Öâ…!#Ž4DE�{|+Á‘­�x¼SRƒ»ÒÍ~‰ÄÊ4Ò‰7‚¥¦êöÂêÎêÊëo› ‘îF*Û8^ÜWÐb›³yú]XnÁÓ¤éS¢”^â�yËÞ¹èñgÁÙ«à�Æß�Ÿ ~øÀš—‡>ø�£Õ´-%¬¯—¶ëci Nf|»¹€0Q–üµÿÁ g¯†ß¿lÝSYøÍáëx[À>×|Kw¥êQ´–w3Çn,¬RuVBÀ^Þ@àn­Pš‰4«x‡Àž*ðî�âÏxªÖ=WIÖíÞkK˜­î#»‡p‰â|¤±#)ÕAª~oƒÿ ü9®èÿþx;áûø¢Ö+JóÃö3AusiñÜ-»I5ÄÁb3C0 ó2Hé_’ç¾מ9N„…ÑêÓ̧ÊÞ§5€ÿd{Wkû;|*�‡›Ã«(ÿ¾f™ÔÿÀ�¯HÖ>)ø£Sð¤t¸ìËðÏÚrF6ëcÍŽ2oK³²Ÿ;�ÊIÉì}3×;‡‡n•½ðcàoÄ¿Û/â¼_³ÏÁФ›N¿­`µ¾—g»XŽVù–4ÎY½…}�û2ÿÁ+¿k/Ú’K}wâÜ3ü*ð<¤ãûrî1ü1@ãÜïH‡÷¿¨�ÙÏöcø7û)|8·øeðGF‹IÓ¡Á‘‡Í=Ä `Ëq)ù¥�úžÀP_ Åþ'aðôåGù¦ú­Rô;°™l¹¹¦t¾ x+öyøO üømoöMÃö©kg,øûòHŠI™$nîM{]GqóT•üÛ)¹IÊ[žÿ�QE@ù�ÿŸÿ”_|gÿ±rçúWéý~`Ágÿåßÿì\¹þ•t÷@)?ðkg‡4MoöÞñ�ö«iÌÚƒæ–ÙäPLRÛxئx£‘ÐpOn(ÿ‚ëþÀ>-ýƒ?iý/öèý™’M#Þ Õ÷ͳ�®£ùÄ‚Ÿr+’ ¢ôß½; ®ƒþ Tãö×ñïý‰Òÿéu�j_´‡ìÿðëö¦ø'â€ÿ,ÅÞ‡âg¶™Ž6ë±’>Y"p±×¡V²…!8®ÇÉÿðKoÛûÂ_ðP¯Ù{Kø«m$px›M aâ-=0>Ï|¨2è½|©Çï#ú”ꦿL²+üà?g_ŠŸ¿à‚¿ðS ï|M\øi§ZÄhËÔ´YœùŒ¡’?¾= -Æ¿¥M £�·H7À ¯ã¿þ ±øÃ{û:þܾ/ý–þ(£iWþ'´–ÇìÓü¾^§¦HO–s��ÓxÞÈÅoJÎ‹Š |G÷±E7rÒäWůó—ÿƒŽ“«ˆÂÅ6P3[N>eI£þéáÓç^Œ«ùnc˜ã°˜Üt°Ð÷jM«Úïsû÷�ø/„sÞá:yÕwE*0�(Æ\¼Î1‹i¾¯gn×?UàÜ_„6¿ø§ñãZÚÈ<;§hH7+·wG?–½�£Ž¶2Wzöa_˜ßðK¯‰Ÿ ¾ ÿÁA¼ñ7ãý¶™áÍ2{ù.n®þX#-gp‘±ÀnK•U^6'vWkŸãWö]ý�¼Kû[þÒZ/ìïàûøtýSÄ]¤77*LhÖðKrÛÀä’±‘Æ99¯S9Ãý[—¼ö�š÷é}4ýƒð÷;yÎ}Æ?ëT~©NTã­Ú‚R\Éõ|·w±ûÿþÔß³í?âφš§ìíâ+/.•mªÃ%�ÜÑy¯hbÄ/»rO šç?l¥Ïü£öhlß`ŸTé_ÿÁBÿà›??à�—…ôï‰:í–®þ(KÇ·û²”FÅ·‘¸“8ÆÑëÞ¾ãý³ÿø!/ìÓå° ý¹zïu>•É*¸Š˜Üt±på›§ª[-ccë2œ»"Ápÿ áxoñhã=ÙËwzUÛè¶z'ÁÔðá¿‹èw³ÿÑÚM~ŠÁ«¨Oˆ>23qû­ ýãøWçoÁµðá‹tÿŠâÌ~Ré5ñ_ìAÿøùû\xŠÿàe¾•qÿ 0µûgö”Ï·ì†S–#š 7yÌvs…ÇJÛ ™ÓÀãpxœB÷U?ó>{=ðï1âÎâ\—&³­'Xxc\Ób^<ÖÖo­–ë`ã9‹T˜zWí÷ü�ð·âgÅ�Ù§à–™ðÏÚ§‰nl~%YÜ\E¥YÏy$0 K•2È�#”ŒóÆH¯Ë¯ø8�þ ýñsã‡üÿà¶«ðïºƭ៉V¾ÒõëË ;‰¬á6ºÃÁ;]Í´q¤vÆ7ýáÏAWÐKý‘~'À�ø9Göyø-äù/á_€zF—"�ß[h¤¤ŽÄ¸b}Í|}ÿŽÿ‚7~ÈðU�Ú£öºÔÿjŸíÕ—Á?f‡Mþƾ[5Û}ªüÍÑK¿˜Sf1Žzæ¿güMð£âüEËáŠøgTo [ü9{fÖÊìøåþλQºÙåÉnüä�_ŽðN_ø(ǯø$í?ûQÂCû4üAøƒoñ#ÇW7¶w^ŸuQEc}¨`ïk7 EÊ(và{ÔÈëköýøà�Ùƒþiñköuøf.‡|ðŸUÑ´ï¶8š²Úi²C› @Ê/ÌÁ=ñ_ž_ðEOŠ ð3þ ˆ³øÏ4¾Kx_ž8ÕQ˜ã k{©ÉÕ÷çíiñsÅß¶WüËâoÅ­;Áz·‡µ¯ü1Ö® ð½ÔM©Á<Ö“¢Z¼)‘å' F '¥~xÃÿþÿÁ�÷ß l<#¯�êÖZŽŒ4dÓ®¿´vj^'’9I´òüð†ÙÝó³î” ?,üOð/LÓÿàÏÏxâˆZ‹âü&Æ!*yãÌÔgÑ‘ögv|½‡ýÞkôÏþ$ø¡ÆïÙÏþ óñ•?ü%ž!ÒuŒç½í¦�9çêõä¾+ÿƒ_?fm/þúß´î•kã)>9CðÞ'í[à:¿ØökA§ý—ÏÎwÆ!Îðüu¯™¿mý+ö‹ñ‡ü«þ ýâ>x§V×¾kwðêºD:M龆=t†$^W™–tØî C*ÛM�ýôþØÿ´ß†c/ÙwÆÿµ?�4ë½[Ið6™.©sgdP\ËD ‘&ÿ›�Ìôþ/?o¿Ø“à—ÄŸØwOÿƒ�¿à•óêŸ|iih|Ow¥Z4pÅu¾û,Ò,VçÉ·¸8/,i›{„$Iöf?¤·_ðP¯�Ÿð\/Ù/ö…ýм#û=øÃá^»{àû�&ïÄèðÛj¢HÒy-àD’V8 [€ í_„ÖŸðROÚJÿ‚0?üÿfoˆãâ§öl¾ûGödÿeÛ%û\<�+íg–völßóù›8©‹ê¯ø+/íMâ¿ÛGö7ÿ‚mþÔþ6Š+]{ž5³ºÔÜmˆÝÅ=¤ I,LèŸÂ+âÛWâ-ïì·£ÿÁNb7÷ž?ø‹ámCGµ^7ǯjRꄆ…xí�_u~ßß±íð?öÿ‚püÔ<)©j¾#ð/‹-'ñ e¬·ÃOyç·º™'{ttD€Èc/�Ÿ!Úp+›ÿ‚ÅÁ>~,|Tÿƒ“>ë^ð¶±࿈w~ ÔuÍFÎÎâ]>!¦Ý½½Ð¸ž41#¥½˜œŒ+ç½W2é?Ø—á�¯Á_ø:§Tø7b�"ð—Á-G�WŽ,´Mý’½/þ ÿ‘_ö¨ÿ²Ž?ô «Ô>|(ø¡üÇñâ½ß†µX¼-sðæxµ–³�tù&[ - itWÊ.Ú9Ò²?àÔO…?~øsö™‡âo†µ_ ¶©ãñqf5;9í Ä['ýä>r.ôä|Ë‘Y�ÇÿÁ)ÿåh¿ÛoþÀ©ÿ¥]|—ÿcý޾~ß¿ðtOÃ?ÙGã»_ x—áôMxtÉ…½Ø6PkqyrºÈ÷‘&ï�äqÆs_xÁ1þ|QðÏü¯ûc|Fñ/‡5]?Ú¾ŽÃS¹³ž++¦óôÓˆ.9Žž‡Ò©ü|øSñ?Qÿƒ¸þ |W²ðΫ?…ìü,Ìvs½„R�;[7¹T1#åÐ`¾rG¨¦�˜˜¶?ðM¯ÙÓþ uÿ4~ËŸ¿fVÕßCÕô‹�ràëIw?Ú¦·Ö-ÎÆH¢6@œ`àäçšÿBªþD?o¿…_uïø:oöVø�¡øoV¼ðÖ“áC òX[I�wä–éÅýâ|®ãï�Q_×}6îET€QEQEÆø†Òâko´Ù'úM¼‹,²ã¨Ï£¦PûZÖÓï"Ԭ⿷?»”½�>£ÔŸkw£1ïô®GD�iú”úCÜÉ›˜}²ß½_ÁŠ¿üŽ•§/4 ¹í+ý™µ™©ázïÄ?ü<ñ¦£uã�RßJK˜-DFáö(ÒçÛ#ó¯�> øÃà‰þ%é_´?éךn�wnRYIŽiø{ &AËI ΀äƒ!+Ï#î›Í.ÃP+öëxæ+к«có_þ�Ð>ßþý'øPãôß ¾A&�§é?´Øít{Û‹û9Øbá$Ô Š EvÆéúB$ïŸùépïÉû/ìݬ|/ø¾“Æšæ•-–�è¥t•O²ŽÓ0T¡òóËïÇËóWèÊøgÃ¸ÏØ-¿ïÒ…;þ�–ÿ÷é?—MJ¾–v±ÕôiÄÐI�ºëÁ ‘•e<H 'ÂÏ&Îcû‰^Î×µÕšk¬_’丹ŸçgÓè“›qVcG‹8Jic)¨§ òsr;ÂP–‰N;jÒ²ViÇ_ˆtŸø-Õü^Xµ¿Ç6²©ƒ$7Æ;f|}ï,Âì£ý�çë_’hŠ_µWijãOIö‹¹¶ÛÙÙÛ)A~HaNOSîÌO&¿W-?àˆ>$7¡/¾ [-°<²X;9î™”ûê¿G?foø'GÀÙ¯P‡ÅV0ɯø†cÔ5§Én™‚%#>Œw8ìØ¯Ò)x…áç sãr*|õšÑ%?ºóÒ+¿/Ü~Šð/Ço}ŽOÆuýŽ ]ÉÒéז޵$–ÜÖ^hü7øËÿàø‘ð‡öUÑþ7êPÊúÈ•æÖ´õ�•œÁ>ÎHæ2�ýß0ˆÆ¾Lýœ?h߈³Äx~"ü=‘ › V³a¹�ˆ-€z€A é_ÛeÍ­µí´–w‘¬°Ê¥7••† �x Ž¯È¯�ðG߃uYüEð£S—Á×3�Íj± › {ùqî�ãÐ9QÑT+Éà_¤N B¶_Å‘÷fÝŸ-ãÊþËK]>ËWÒÛZçÓxÍô ÍòŒf=ðÆv©F0¼”gÏoi;Fòµåʯ{]>Uóιÿº½—Ã_‡<Ã&7Ü_mѱ÷¶,1³ ÿõú×ã‡Ä_ˆß?iOŠx¯Å³M­kú¼«QÄ„žNØá†$(誣ó$×ì.…ÿCÖšýO‰|}Zƒó kweöÝ*?�~ þͰ—ÀÙ…—WðuƒêæÝ§T¿+-À¨ˆ©=>E Gšôéx•ÀXf-Ž7³H¾þ¢Šþ9â> Äæ¸ê™†-Þsw¢^Ih¼‘þ¯påü5“aò,ª<´hÇ–=üÛóníù±Ž2¸¦á‰Ô´W‡cëÈu¨J9~ÇvŠ`ŽƾðwÄ} _ øëH³Ö4ùÇÏmyOú«‚3éüëóâçüÃö_ñô“j^–ÿÁw’…±“Ͷϼ3ï ²Ž«í_®A†qš’»²üß…|ØzŽ$Nš{£ùzñ÷üOö–ЋËðëÅ:&¿ ôKÕšÊR¾ŠfOÍëäïÿÁ8ÿoÿ ³<ß¿´ã%°¿´aÿ|™|Ïüv¿²½¤¥ F+ü±_o�ñG5¢­týQÉS,¥#ønÕ?f_Û'E“˹øAâyý0³–Qù¢°®kþGí�/ÉmðSÆR{ÿfÌ¿Íví mÔŸ¡§yXäà~ýzô—‹øë[’?qÍý‘ørÐÿcOø(o‰�cðÿÁMR=ïî­m1ÿÝ+èÿÁ"¿à¤ž6emn x6#ÃËÇ»�G¢‹xæVÿ�_Ø8LŒ‘ùqKµ½+ާ‹yœ•¡hüŽŠy]$9ÿ à€ZÁ[ïÚC⎭âzÇFŠ=2Ø�î;3È¿O,×ë�ì÷û ~ÊŸ²Õº‚¾ Ó´«ÕM‡P(g¾qþÕÔŦÁêT8\ô¾¿+�p)ÇÜWÅæ\K�Åÿ£�Õ 0ŽÈ¯å6O`?ÏôúU�¸íOµârÜÔ(¢ŠÐŠ( ¿4¿à¯º»âŸø&¿Æ Ã7•ýׇ®#‚ÚÒ'šiXíÀHÐcì~–Õ~ íqœñê)ÅÙ�ü7ÿÁ°ÿþ.|=ý±üq«øûºƃk7„$Š9µ>âÒ7�ßZŠóF€œq׆¯îb¨GQ·îãÜtüêýi^¯;»ðkþ ¡ÿË�öëýž�~؇ø“àhä¹Ò0<Ëû^k;rwãt=q Þ5ùñÿê~Ö_ük7ì1ûEøOÄZn™’󯡦]à ¿ñOc$²FPÿ¬€“ÁÜ�Å]ÏùÍTŽÞÞ,@9Ïiªþç$€½_Ï¿ü³þ¹í%ñ*ÏöÀý‘5ˆüñ“I–+±9Ü–š„ÐsJÈ Å0éæ( Ž.? š+ såzù)û9þÞ?ôÁà/ø(€u�‡~3ÓÐEqªÛØË j œyð^Ù,éÿ¼Rm€vþí}i­~Ûß²¶ƒ§ N_Ù]ñ•†ÄIyrþÉon’LO°Jú²H£•6Ê¡—Њªºnž oÇ}£­6âõùÌý³ ý¼à¬pÃ7þÏ>Ô~|»•F¹âŸÆö7ú¤*~hmtìùâi8ݰdÕÿØ[ö øû|·øEðbÄ»HÂ]KSœµ_ÜcI� þ éï÷*‚¿ARVަ–«"¿ÊüñÓÔþ(à¥ßðHÏÚsögý³!ý¿amoi_Û1ëóé:p/{a|$KåÁ�ÒÁ+üäG¸‚OÉŠþÚ*¼`qštj¸; ?;?gø)WìãñÓÀö:Æ»}/ƒ<@`_·èZõ´ú}嬸ýäa'�ƒwÝ(NG?OmÖ~7ø�ÆèÚÀ &}Nî—û^þÞk].ÐùhL‚9.XvŽAþ9WÓN°/æ´—<ä¨ÎjÒ"¢ãQÇVm ?“Oø-·üwâ÷Ç­@øùû6‰|WâýÞ[}zÊR‘Ýj~cùŸjƒ8C"9 CÀò¢n­~…ÿÁ)ÿk�ø7ö7ðOÀ¿ÚGÖü âïÙG£]XjºMü^oÙþD–<†�ÑÇ£q_¹ULÛÅ!ÜñƒõÕºîPä�[ÜG{ ÝÀr’AÆ2?óý4jº¯qßÓÚ¬V`R1äçð¯ø¥ð#àׯ„·‡âÏ…´¯¥™f·]RÒ¯)ŸŒ~j°MÛT68í!‰0§Ý*'-$‹¡^tß57oMŽÓöýŠÕqÿ ¯ÂŸŽ�gÿÆiGì û–Âü*ðŸõ²ÿãUö È ïQÅeõxZÖG¥ý¹ŒÿŸ²ûÙó·Ã¯Ùwözø;®Ëâ…~м9©K�®tÝ>ÞÖfˆ�Æ3$1«l,Æq�?zH‚¯ÊŸ\cúV˜ÝÞ£aü@sùUÓŒ`­dpb1¬ùª¾oSçÏþ;!øŽOøóÁZ.±¨Ï´=ÕÝ„JáEÜïµ@'€è+°ñ¿‡¼5„¼s Øë:d+[»hç…Z1…dŽPPmþŽ;W«"í1L ÏLS…(«Ø×ëõýßyû»yz8ø[öVý�<­Ûø‹ÁÞÐt½B×&»]>Þ£.»c¢+.å%NÒ8ö&¬øWöeýžü®Áâ¯x#CÑõ;l˜nm,- š,©C¶Hâ »�•8?tšúœdœâ”¢…Å(Ñ‚èTó,D“No_3ƾ |øQñaíGÄ¿ éž {Äڰܘ·ã~Ï5ní«œuÚ+;Rýž>k>´ð«á&çCÓžÎÆK8ZÞܶ옣e(¤îl•¯ã^äcRyÿžÔ›z ÒQ‹w±”qÕãÉ«mfxT³ÇÀë/ \|?‡ÁúBh7’ ‰ì”?e’UÛ‡x¶ìgW Tœ(®/þ¿öLsÿ$çùÉë¦Zžÿõξ®T隈/÷}1Ò²ö4ßÙFñÍqIÞ5¾úž¡þÌ?³Ç…­om¼/à�Â=FÝ­oÞÂEÄ Ö)v"à9ÕÍAû~Ê8ñn<9‘Ûû.Ô~ž^+ê­ÃÒ‚ÇÒ§ØÆÖ²û‡ÛÚ£×Ížmà�†øk¦bü>Ñìô[0K, ŽÞ-Ää�‘Œg>ÝkÐB(�8úUÁžô‡·jÑE%dŽ*•e9sM‰vüÔú(­!ØÔŠŒkTôP}ºSvíûƒŸz³EÓœÿŸåSÑ@öœûw§.ïᩨ ~oëR|Û}éÔP\úŸÊ£*Y²Ò¬Ñ@qó|£ñÿ>Õ7ÏRQ@yCÓ§JhUݸ՚(�SQEQEQEQEVØ2§½p:ü2ÄöÑ7\Y·˜‰ú:�÷Бõ ö¯F'5ÎêÐày {Û õ³0Ä+«šV—�ßZ%í©Þ’(e#¸­óïÌֳͣç 6÷\üà¸ù?BjôÆ­>YÂWAEPPQEQEQEQEQEQEQEÿÐþþ(¦üÞÔ|ÞÔê)¿7µ7µ:ŠoÍíGÍí@¢›ó{Qó{P¬dSª°!—å ӱާ4ž€L1Ú–ªS¥8!#4Ð[BÍÌE4¶OR‹Ð U` ¯‚—nFš>oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€E7æö£æö QMù½¨ù½¨ÔS~oj>ojuß›Ú�›Ú€U®!Y¡0·z›æ”6îÔ¼Àó ß6Êu¾‹ïÛ9$˜•þ0¸Î=ñ^‚“G: b!‘†A ƒé\æ½ Ä~Ò:1ïIáË·Ãi�ǓʹÛò9•wÖ\ÐS9©5 r­Q\'HQEQEQEQEQEQEQEÿÙi18next-i18next-db698b1/assets/locize_sponsor_240.gif000066400000000000000000000050511527173754700224020ustar00rootroot00000000000000GIF89að‡ÄÐêýo¿øŸÔúK®öôúþèõþW´ö‡Éùc¹÷ÜïýÄäü·ßû{Äø“Ïù«Úû?©õÿÿÿ!ù,ð‡ÿ $Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,�ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡G ¥F ¬¬ C · 0® .¤¦ÇÈÉÉÄ%ÆÊϦ¨M¸¾AÔÕÜ > Üä¸Þ°* ÛÝ è)ëåñå&ðòå×Lðù=÷ä ,Ðá`ÀrîL$°P€ {ãÑ+1¢5'û|€Ë@Áx 40øÀ? -ÿr3�BɃ ¤ÕSyo"‰ŠO&ÉÈ#e®î pC m#I‡3¼¬†à@/S 0 Ù…š À‰U'W€:‘ðÔ€$jEØH‚À¸1c, 7@@ 0+Q`©Åª9pL±ZØ+cqÌ5÷–ðˆš¸zK²‹ÅÕȤñõÞá oØ<"±Ó5ø}áÖÈ•‰18àŽÀR›+Wðù¬ÕpÓàXmoa\½© ža›[©N}Í í€^¨-%œ‚€PsÆkü“‡`uµ»1tãBzb9bÃ9ÞâÒ ÙÛµ¤G?ú¢ âÈé`\Ò(Ïc5ôGßÿVðuá ”q.•`�?4°’ ÍáÂ� HTB„ܼ67áwKrS<øÂwtUÃ^ À‘«±u€¹äGÃoå€SŒÁÑ Þ-3¶× .¶€™< ÀÒŽ ôP D&i�äx5s ²Ðd‹KrvP/îx��Ípãã�ñèˆ�y¶ aqb–yšž1„x�¬¤8Âÿ šGBQcb <.¨C<79Z²À%’-Œ)…¦)LªÉ'txK�+DÀÖ\wÝ5¨JMÂÐØ•š@§¤pdàø»+zÑ:‘›½Œ�›á;꺀:6|�2ä+Ô8S�)ìì'É·¡|7Â#ð8¼î]Ëx}2àZF™¡hº�È>×öqãg$ðX5¶×3²Ž~+øGô\WRˆ2TóSGx"H±��®Á�ü€B$Is‹àP�~=àb4’Ðú„ÁÒL�…¤`ñÿðhT–"Ç·4²š"²l;:#äh‹°i>îkÀw|gÒÅŒ!qA³´È=*Æñ‹é!4’A5ì0)•AbÂÇXIã)¤b Vm)nä"’IÊû9†”È@â§±Œ F#I ƒðf.AWV^ Bª†º¬†)�S¯UêÒ�0�hNçÃÎÍ’CR£‰*÷Ø‚ÿs˜]™Æ1_à�Ž4@Ɔä“`ˆ& xæ J"È`–PEÄÔfÎ`p΃  ’¸¬¤Ѐ¨rà ôÜÉ1xfÓ³€_À¨óÀˆ†9EAÑŠZô¢ͨF7ÊÑŽzÿô£ …(ªðçjÈäf: Oîà7H‘IW 3üƒ_¥`Edâ1øa¡sC€©Æ�>÷‘À ÌÛÂ?ð) *àŸIª„J4–¢À¸A~£ÃŽ4Z¥¥ñ’Tc¦±;ŒTQ@¬ü�m›¡*7Ó66¬y5…ÅÂ?¨–�ް‰# øÎ-§0ªnM™¶�\[c“¾Š†MÔë5‹‹­5ˆÒš¤À(. *G|‡xqiiYƒ�uTz”ÍE^ F½¶à“ô�¨R-š´]m5¬”|᱉,VªÞ±#Ëlq�ÈJ϶! (wÙ•ÿ›½œ#_…Ч†ÖŸðRD{g¸Ä·à/Ë~Ë´97¹¸e®vÚ(AµÕ•ì¥4_íŠÀclíÓüK�|ŒÇ�ˆ€ç4%çö׋UY…+KVÒS"ïIþ �à²Î]0ÑøKBöØ ù(õöJÂ|hxÀHqp‹CëßrMÄÃ$`±Œl›W¥ ¿,^ç@ÊÖ¨E±þqxk,‚™µŒ½ kq<‹8ÂI ²„u‘+'ùs†…òŒlc.¯V¿ ìk·\`i7Å}ŪA�Œ 7qV(”AÌÚê ØË)ýÁ?~åç.ƒùË.&°˜Læ(ëwÇ\ÿ€P–_ÓØ!).OsYûb¢áh3šVËžqãÜBûÐNø�Ogêg¡zÆtµ~CN„­µL4ôÖÔ ­BY–†ˆ�ë6ƹ�‡&hÄ“šµÅ‘a}é'ü㊌[”z©MU�±)Ìh–’4ì—>mû×cjtwè뺚 /–¹³æ²êØ=ÀDº‰õŒ·=Áà{h†’²®bî::Ð@Ð�7X± ˆP*í~uˆêp?·¿€ªlòðq¬º9 ‡'&,àȲºè1æbèÊÿh¹`)¸{ëqú­Ÿ¼6d›ç‡ `Üñˆ< ç.¦’ö4Z|ÃfvY`/F €³ø¢SOæŒ�æq0ÀŸ �“H`F®Тg‹zÒÏÒŽÍ XßxmF ^Àb#üDR°~ ®c}^Ð@Þ‘¶C§Ï{ëN_×¥>Û�:þñ��¼ä'OùÊ[þò˜Ï¼æ7ÏùÎ{þó ½èGOúÒ›þô¨O½êWÏúÖ»þõ°�½ìgOûÚÛþö¸Ï½îwÏûÞûþ÷À?C;i18next-i18next-db698b1/eslint.config.mjs000066400000000000000000000012541527173754700202320ustar00rootroot00000000000000import neostandard from 'neostandard'; export default [ { ignores: ['dist/**', 'i18next.js', 'i18next.min.js', 'examples/**', 'jsr.json'], }, ...neostandard({ semi: true, ts: true, noStyle: true }), { rules: { 'no-var': 'error', 'no-void': 'off', curly: 'off', }, }, { files: ['src/**/*.js'], rules: { // allow for...in for deep extend etc. 'no-restricted-syntax': 'off', }, }, { files: ['test/**/*'], rules: { 'no-unused-expressions': 'off', 'n/no-callback-literal': 'off', 'n/handle-callback-err': 'off', 'n/no-path-concat': 'off', 'no-useless-call': 'off', }, }, ]; i18next-i18next-db698b1/examples/000077500000000000000000000000001527173754700165715ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript-selector/000077500000000000000000000000001527173754700226155ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript-selector/.gitignore000066400000000000000000000000431527173754700246020ustar00rootroot00000000000000dist node_modules package-lock.jsoni18next-i18next-db698b1/examples/typescript-selector/@types/000077500000000000000000000000001527173754700240615ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript-selector/@types/i18next.d.ts000066400000000000000000000003331527173754700261520ustar00rootroot00000000000000import { resources, defaultNS } from '../i18n/config.js'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: typeof defaultNS; resources: typeof resources.en; enableSelector: true; } } i18next-i18next-db698b1/examples/typescript-selector/i18n/000077500000000000000000000000001527173754700233745ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript-selector/i18n/config.ts000066400000000000000000000007351527173754700252160ustar00rootroot00000000000000import i18next from 'i18next'; // using json imports would work, but interpolation checks would not work // import ns1 from './en/ns1.json'; // import ns2 from './en/ns2.json'; import ns1 from './en/ns1.js'; import ns2 from './en/ns2.js'; export const defaultNS = 'ns1'; export const resources = { en: { ns1, ns2, }, }; i18next.init({ lng: 'en', // if you're using a language detector, do not define the lng option debug: true, resources, defaultNS, }); i18next-i18next-db698b1/examples/typescript-selector/i18n/en/000077500000000000000000000000001527173754700237765ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript-selector/i18n/en/ns1.json000066400000000000000000000004551527173754700253760ustar00rootroot00000000000000{ "title": "Welcome!", "description": { "part1": "This is just a basic example of how to use i18next with typescript", "part2": "😉" }, "inter": "interpolated {{val}}", "some": "ctx", "some_me": "ctx2", "some_1234": "ctx3", "pl_one": "sing", "pl_other": "{{count}} plur" } i18next-i18next-db698b1/examples/typescript-selector/i18n/en/ns1.ts000066400000000000000000000006521527173754700250520ustar00rootroot00000000000000const ns1 = { title: 'Welcome!', description: { part1: 'This is just a basic example of how to use i18next with typescript', part2: '😉', }, inter: 'interpolated {{val}}', interUnescaped: 'interpolated and unescaped {{- val}}', some: 'ctx', some_me: 'ctx2', some_1234: 'ctx3', pl_one: 'sing', pl_other: '{{count}} plur', lastChanged: 'Last changed {{- date}}', } as const; export default ns1; i18next-i18next-db698b1/examples/typescript-selector/i18n/en/ns2.json000066400000000000000000000003421527173754700253720ustar00rootroot00000000000000{ "description": { "part1": "In order to infer the appropriate type for t function, you should use type augmentation to override the Resources type.", "part2": "Check out the @types/i18next to see an example." } } i18next-i18next-db698b1/examples/typescript-selector/i18n/en/ns2.ts000066400000000000000000000004171527173754700250520ustar00rootroot00000000000000const ns2 = { description: { part1: 'In order to infer the appropriate type for t function, you should use type augmentation to override the Resources type.', part2: 'Check out the @types/i18next to see an example.', }, } as const; export default ns2; i18next-i18next-db698b1/examples/typescript-selector/index.ts000066400000000000000000000015241527173754700242760ustar00rootroot00000000000000import i18next from 'i18next'; import './i18n/config.js'; console.log(i18next.t(($) => $.title, { ns: 'ns1' })); console.log(i18next.t(($) => $.title)); console.log(i18next.t(($) => $.description.part1, { ns: 'ns1' })); console.log(i18next.t(($) => $.description.part2, { ns: 'ns1' })); console.log(i18next.t(($) => $.description.part2, { ns: 'ns2' })); console.log(i18next.t(($) => $.some)); console.log(i18next.t(($) => $.some, { context: 'me' })); console.log(i18next.t(($) => $.some, { context: '1234' })); console.log(i18next.t(($) => $.pl, { count: 1 })); console.log(i18next.t(($) => $.pl, { count: 2 })); // interpolation i18next.t(($) => $.inter, { val: 'xx' }); // interpolation and unescaped i18next.t(($) => $.interUnescaped, { val: 'xx' }); const tNs2 = i18next.getFixedT('en', 'ns2'); console.log(tNs2(($) => $.description.part2)); i18next-i18next-db698b1/examples/typescript-selector/package.json000066400000000000000000000005031527173754700251010ustar00rootroot00000000000000{ "name": "typescript-example", "version": "1.0.0", "main": "index.ts", "scripts": { "build": "tsc", "start": "npm run build && node dist/index.js" }, "license": "MIT", "devDependencies": { "@types/node": "22.20.5", "typescript": "5.9.3" }, "dependencies": { "i18next": "26.4.2" } } i18next-i18next-db698b1/examples/typescript-selector/tsconfig.json000066400000000000000000000006241527173754700253260ustar00rootroot00000000000000{ "compilerOptions": { "module": "CommonJS", // "module": "NodeNext", "esModuleInterop": true, "target": "es6", "lib": ["es2015"], "jsx": "react", "moduleResolution": "Node", // "moduleResolution": "NodeNext", "forceConsistentCasingInFileNames": true, "sourceMap": true, "outDir": "dist", // "resolveJsonModule": true, "strictNullChecks": true } } i18next-i18next-db698b1/examples/typescript/000077500000000000000000000000001527173754700207775ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript/.gitignore000066400000000000000000000000431527173754700227640ustar00rootroot00000000000000dist node_modules package-lock.jsoni18next-i18next-db698b1/examples/typescript/@types/000077500000000000000000000000001527173754700222435ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript/@types/i18next.d.ts000066400000000000000000000003601527173754700243340ustar00rootroot00000000000000import { resources, defaultNS, fallbackNS } from '../i18n/config.js'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: typeof defaultNS; fallbackNS: typeof fallbackNS; resources: typeof resources.en; } } i18next-i18next-db698b1/examples/typescript/i18n/000077500000000000000000000000001527173754700215565ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript/i18n/config.ts000066400000000000000000000012021527173754700233660ustar00rootroot00000000000000import i18next from 'i18next'; // using json imports would work, but interpolation checks would not work // import ns1 from './en/ns1.json'; // import ns2 from './en/ns2.json'; // import nsFallback from './en/nsFallback.json'; import ns1 from './en/ns1.js'; import ns2 from './en/ns2.js'; import nsFallback from './en/nsFallback.js'; export const defaultNS = 'ns1'; export const fallbackNS = 'nsFallback'; export const resources = { en: { ns1, ns2, nsFallback, }, }; i18next.init({ lng: 'en', // if you're using a language detector, do not define the lng option debug: true, resources, defaultNS, fallbackNS, }); i18next-i18next-db698b1/examples/typescript/i18n/en/000077500000000000000000000000001527173754700221605ustar00rootroot00000000000000i18next-i18next-db698b1/examples/typescript/i18n/en/ns1.json000066400000000000000000000004551527173754700235600ustar00rootroot00000000000000{ "title": "Welcome!", "description": { "part1": "This is just a basic example of how to use i18next with typescript", "part2": "😉" }, "inter": "interpolated {{val}}", "some": "ctx", "some_me": "ctx2", "some_1234": "ctx3", "pl_one": "sing", "pl_other": "{{count}} plur" } i18next-i18next-db698b1/examples/typescript/i18n/en/ns1.ts000066400000000000000000000006521527173754700232340ustar00rootroot00000000000000const ns1 = { title: 'Welcome!', description: { part1: 'This is just a basic example of how to use i18next with typescript', part2: '😉', }, inter: 'interpolated {{val}}', interUnescaped: 'interpolated and unescaped {{- val}}', some: 'ctx', some_me: 'ctx2', some_1234: 'ctx3', pl_one: 'sing', pl_other: '{{count}} plur', lastChanged: 'Last changed {{- date}}', } as const; export default ns1; i18next-i18next-db698b1/examples/typescript/i18n/en/ns2.json000066400000000000000000000003421527173754700235540ustar00rootroot00000000000000{ "description": { "part1": "In order to infer the appropriate type for t function, you should use type augmentation to override the Resources type.", "part2": "Check out the @types/i18next to see an example." } } i18next-i18next-db698b1/examples/typescript/i18n/en/ns2.ts000066400000000000000000000004171527173754700232340ustar00rootroot00000000000000const ns2 = { description: { part1: 'In order to infer the appropriate type for t function, you should use type augmentation to override the Resources type.', part2: 'Check out the @types/i18next to see an example.', }, } as const; export default ns2; i18next-i18next-db698b1/examples/typescript/i18n/en/nsFallback.json000066400000000000000000000000671527173754700251160ustar00rootroot00000000000000{ "some": { "fallback": "hi from fallback" } } i18next-i18next-db698b1/examples/typescript/i18n/en/nsFallback.ts000066400000000000000000000001401527173754700245630ustar00rootroot00000000000000const ns2 = { some: { fallback: 'hi from fallback', }, } as const; export default ns2; i18next-i18next-db698b1/examples/typescript/index.ts000066400000000000000000000020331527173754700224540ustar00rootroot00000000000000import i18next from 'i18next'; import './i18n/config.js'; console.log(i18next.t('ns1:title')); console.log(i18next.t('title')); console.log(i18next.t('ns1:description.part1')); console.log(i18next.t('ns1:description.part2')); console.log(i18next.t('ns2:description.part2')); console.log(i18next.t('description.part2', { ns: 'ns2' })); console.log(i18next.t('some')); console.log(i18next.t('some', { context: 'me' })); console.log(i18next.t('some', { context: '1234' })); console.log(i18next.t('pl', { count: 1 })); console.log(i18next.t('pl', { count: 2 })); // interpolation i18next.t('inter', { val: 'xx' }); // interpolation and unescaped i18next.t('interUnescaped', { val: 'xx' }); // this ts error occurs only if resources are imported: // 1) as const (ts file) // or // 2) as interface (d.ts file) // throws only with ts v5 // // @ts-expect-error // i18next.t('inter', { valWrong: 'xx' }); const tNs2 = i18next.getFixedT('en', 'ns2'); console.log(tNs2('description.part2')); const fk = i18next.t('some.fallback'); console.log(fk); i18next-i18next-db698b1/examples/typescript/package.json000066400000000000000000000005031527173754700232630ustar00rootroot00000000000000{ "name": "typescript-example", "version": "1.0.0", "main": "index.ts", "scripts": { "build": "tsc", "start": "npm run build && node dist/index.js" }, "license": "MIT", "devDependencies": { "@types/node": "22.20.5", "typescript": "5.9.3" }, "dependencies": { "i18next": "26.4.2" } } i18next-i18next-db698b1/examples/typescript/tsconfig.json000066400000000000000000000006241527173754700235100ustar00rootroot00000000000000{ "compilerOptions": { "module": "CommonJS", // "module": "NodeNext", "esModuleInterop": true, "target": "es6", "lib": ["es2015"], "jsx": "react", "moduleResolution": "Node", // "moduleResolution": "NodeNext", "forceConsistentCasingInFileNames": true, "sourceMap": true, "outDir": "dist", // "resolveJsonModule": true, "strictNullChecks": true } } i18next-i18next-db698b1/index.d.mts000066400000000000000000000062321527173754700170340ustar00rootroot00000000000000import * as i18nextMod from './index.js'; import type { $Dictionary } from './typescript/helpers.js'; import type { DefaultNamespace, Namespace } from './typescript/options.js'; import type { KeyFromSelectorFn } from './typescript/t.js'; export type WithT = i18nextMod.WithT; export type Interpolator = i18nextMod.Interpolator; export type ResourceStore = i18nextMod.ResourceStore; export type Formatter = i18nextMod.Formatter; export type Services = i18nextMod.Services; export type ModuleType = i18nextMod.ModuleType; export type Module = i18nextMod.Module; export type CallbackError = i18nextMod.CallbackError; export type ReadCallback = i18nextMod.ReadCallback; export type MultiReadCallback = i18nextMod.MultiReadCallback; export type BackendModule = i18nextMod.BackendModule; export type LanguageDetectorModule = i18nextMod.LanguageDetectorModule; export type LanguageDetectorAsyncModule = i18nextMod.LanguageDetectorAsyncModule; export type PostProcessorModule = i18nextMod.PostProcessorModule; export type LoggerModule = i18nextMod.LoggerModule; export type I18nFormatModule = i18nextMod.I18nFormatModule; export type FormatterModule = i18nextMod.FormatterModule; export type ThirdPartyModule = i18nextMod.ThirdPartyModule; export type Modules = i18nextMod.Modules; export type Newable = i18nextMod.Newable; export type NewableModule = i18nextMod.NewableModule; export type Callback = i18nextMod.Callback; export type ExistsFunction< TKeys extends string = string, TInterpolationMap extends object = $Dictionary, > = i18nextMod.ExistsFunction; export type CloneOptions = i18nextMod.CloneOptions; export type * from './typescript/options.js'; export type * from './typescript/t.js'; export interface CustomInstanceExtensions {} // eslint-disable-next-line @typescript-eslint/naming-convention export interface i18n extends i18nextMod.i18n, CustomInstanceExtensions {} declare const i18next: i18n; export default i18next; export const createInstance: i18n['createInstance']; export const dir: i18n['dir']; export const init: i18n['init']; export const loadResources: i18n['loadResources']; export const reloadResources: i18n['reloadResources']; export const use: i18n['use']; export const changeLanguage: i18n['changeLanguage']; export const getFixedT: i18n['getFixedT']; export const t: i18n['t']; export const exists: i18n['exists']; export const setDefaultNamespace: i18n['setDefaultNamespace']; export const hasLoadedNamespace: i18n['hasLoadedNamespace']; export const loadNamespaces: i18n['loadNamespaces']; export const loadLanguages: i18n['loadLanguages']; export declare const keyFromSelector: KeyFromSelectorFn; /** * Whether a language code has the shape i18next v27 accepts from outside (`changeLanguage()`, language * detectors) without it being configured: letters, digits, `-`, `_`, `@` and `.` (no `..`), at most * 128 characters, not a prototype key. Not a BCP 47 check: `'en_US'` and `'sr@latin'` pass. For plugins * that take a language from a request, a URL or storage. Since v26.7.0. */ export declare const isSafeLanguageCode: (code: unknown) => boolean; i18next-i18next-db698b1/index.d.ts000066400000000000000000000517721527173754700166700ustar00rootroot00000000000000// Internal Helpers import type { $Dictionary, $NormalizeIntoArray } from './typescript/helpers.js'; import type { DefaultNamespace, FlatNamespace, FormatFunction, InitOptions, InterpolationOptions, Namespace, Resource, ResourceKey, ResourceLanguage, TOptions, TypeOptions, } from './typescript/options.js'; import type { KeyPrefix, KeyPrefixSelector, TFunction, KeyFromSelectorFn, SelectorKey, } from './typescript/t.js'; export interface WithT { // Expose parameterized t in the i18next interface hierarchy t: TFunction; } export interface Interpolator { init(options: InterpolationOptions, reset: boolean): undefined; reset(): undefined; resetRegExp(): undefined; interpolate(str: string, data: object, lng: string, options: InterpolationOptions): string; nest(str: string, fc: (...args: any[]) => any, options: InterpolationOptions): string; } export class ResourceStore { constructor(data: Resource, options: InitOptions); public data: Resource; public options: InitOptions; /** * Gets fired when resources got added or removed */ on(event: 'added' | 'removed', callback: (lng: string, ns: string) => void): void; /** * Remove event listener * removes all callback when callback not specified */ off(event: 'added' | 'removed', callback?: (lng: string, ns: string) => void): void; /** * Subscribe to an event, but only once. The listener is removed after the first call. */ once(event: 'added' | 'removed', callback: (lng: string, ns: string) => void): this; } export interface Formatter { init(services: Services, i18nextOptions: InitOptions): void; add(name: string, fc: (value: any, lng: string | undefined, options: any) => string): void; addCached( name: string, fc: (lng: string | undefined, options: any) => (value: any) => string, ): void; format: FormatFunction; } export interface Services { backendConnector: any; i18nFormat: any; interpolator: Interpolator; languageDetector: any; languageUtils: any; logger: any; pluralResolver: any; resourceStore: ResourceStore; formatter?: Formatter; /** Calls bound to the i18next instance, for plugins */ utils?: { hasLoadedNamespace: i18n['hasLoadedNamespace']; /** Reloads resources through the backend, as `i18next.reloadResources()` (since v26.7.0) */ reloadResources: i18n['reloadResources']; }; } export type ModuleType = | 'backend' | 'logger' | 'languageDetector' | 'postProcessor' | 'i18nFormat' | 'formatter' | '3rdParty'; export interface Module { type: ModuleType; } export type CallbackError = Error | string | null | undefined; export type ReadCallback = ( err: CallbackError, data: ResourceKey | boolean | null | undefined, ) => void; export type MultiReadCallback = (err: CallbackError, data: Resource | null | undefined) => void; /** * Used to load data for i18next. * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). * For singleton set property `type` to `'backend'` For a prototype constructor set static property. */ export interface BackendModule extends Module { type: 'backend'; /** * Declares how i18next calls `read` and `create` (since v26.7.0; as an instance or static property): * - `true`: `read(language, namespace, callback)` and * `create(languages, namespace, key, fallbackValue, callback, options)` * - `false`: `read(language, namespace)` and `create(languages, namespace, key, fallbackValue, options)` * return a promise or a value * * Left out, i18next guesses it from the number of parameters, which is deprecated. */ callbackApi?: boolean; init(services: Services, backendOptions: Options, i18nextOptions: InitOptions): void; read(language: string, namespace: string, callback: ReadCallback): void; /** Save the missing translation */ create?( languages: readonly string[], namespace: string, key: string, fallbackValue: string, ): void; /** Load multiple languages and namespaces. For backends supporting multiple resources loading */ readMulti?( languages: readonly string[], namespaces: readonly string[], callback: MultiReadCallback, ): void; /** Store the translation. For backends acting as cache layer */ save?(language: string, namespace: string, data: ResourceLanguage): void; } /** * Used to detect language in user land. * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). * For singleton set property `type` to `'languageDetector'` For a prototype constructor set static property. */ export interface LanguageDetectorModule extends Module { type: 'languageDetector'; init?(services: Services, detectorOptions: object, i18nextOptions: InitOptions): void; /** Must return detected language */ detect(): string | readonly string[] | undefined; cacheUserLanguage?(lng: string): void; } /** * Used to detect language in user land. * Can be provided as a singleton or as a prototype constructor (preferred for supporting multiple instances of i18next). * For singleton set property `type` to `'languageDetector'` For a prototype constructor set static property. */ export interface LanguageDetectorAsyncModule extends Module { type: 'languageDetector'; /** Set to true to enable async detection */ async: true; /** * Declares how the async `detect` answers (since v26.7.0; as an instance or static property): * `true` for `detect(callback)`, `false` for `detect()` returning a promise. * Left out, i18next guesses it from the number of parameters, which is deprecated. */ callbackApi?: boolean; init?(services: Services, detectorOptions: object, i18nextOptions: InitOptions): void; /** Must call callback passing detected language or return a Promise */ detect( callback: (lng: string | readonly string[] | undefined) => void | undefined, ): void | Promise; cacheUserLanguage?(lng: string): void | Promise; } /** * Used to extend or manipulate the translated values before returning them in `t` function. * Need to be a singleton object. */ export interface PostProcessorModule extends Module { /** Unique name */ name: string; type: 'postProcessor'; process(value: string, key: string | string[], options: TOptions, translator: any): string; } /** * Override the built-in console logger. * Do not need to be a prototype function. */ export interface LoggerModule extends Module { type: 'logger'; log(...args: any[]): void; warn(...args: any[]): void; error(...args: any[]): void; } export interface I18nFormatModule extends Module { type: 'i18nFormat'; } export interface FormatterModule extends Module, Formatter { type: 'formatter'; } export interface ThirdPartyModule extends Module { type: '3rdParty'; init(i18next: i18n): void; } export interface Modules { backend?: BackendModule; logger?: LoggerModule; languageDetector?: LanguageDetectorModule | LanguageDetectorAsyncModule; i18nFormat?: I18nFormatModule; formatter?: FormatterModule; external: ThirdPartyModule[]; } // helper to identify class https://stackoverflow.com/a/45983481/2363935 export interface Newable { new (...args: any[]): T; } export interface NewableModule extends Newable { type: T['type']; } export type Callback = (error: any, t: TFunction) => void; /** * Uses similar args as the t function and returns true if a key exists. * * Note: this shape intentionally does not include a type-guard overload so it * remains easy to assign arrow functions to. The type guard narrowing to * {@link SelectorKey} is declared directly on `i18n.exists` instead. If you * need narrowing in your own code, call `i18next.exists` directly or forward * the function by reference (e.g. `const exists: typeof i18next.exists = * i18next.exists`). Wrapping it in an arrow function will lose the narrowing — * there is currently no way to keep type-guard narrowing through an * arrow-function wrapper, which is why `ExistsFunction` deliberately omits the * predicate overload. */ export interface ExistsFunction< TKeys extends string = string, TInterpolationMap extends object = $Dictionary, > { (key: TKeys | TKeys[], options?: TOptions): boolean; } export interface CloneOptions extends InitOptions { /** * Will create a new instance of the resource store and import the existing translation resources. * This way it will not shared the resource store instance. * @default false */ forkResourceStore?: boolean; } export interface CustomInstanceExtensions {} // Used just here to exclude `DefaultNamespace` which can be both string or array from `FlatNamespace` // in TFunction declaration below. // Due to this only very special usage I'm not moving this inside helpers. type InferArrayValuesElseReturnType = T extends (infer A)[] ? A : T; export interface i18n extends CustomInstanceExtensions { // Expose parameterized t in the i18next interface hierarchy t: TFunction< [ ...$NormalizeIntoArray, ...Exclude>[], ] >; /** * The default of the i18next module is an i18next instance ready to be initialized by calling init. * You can create additional instances using the createInstance function. * * @param options - Initial options. * @param callback - will be called after all translations were loaded or with an error when failed (in case of using a backend). */ init(callback?: Callback): Promise; init(options: InitOptions, callback?: Callback): Promise; loadResources(callback?: (err: any) => void): void; /** * The use function is there to load additional plugins to i18next. * For available module see the plugins page and don't forget to read the documentation of the plugin. * * @param module Accepts a class or object */ use(module: T | NewableModule | Newable): this; /** * List of modules used */ modules: Modules; /** * Internal container for all used plugins and implementation details like languageUtils, pluralResolvers, etc. */ services: Services; /** * Internal container for translation resources */ store: ResourceStore; /** * Uses similar args as the t function and returns true if a key exists. * Acts as a type guard on single-key calls, narrowing the key to * {@link SelectorKey} so it can be passed to `t()`. */ exists: { (key: K, options?: TOptions): key is K & SelectorKey; (key: string | string[], options?: TOptions): boolean; }; /** * Returns a resource data by language. */ getDataByLanguage(lng: string): { [key: string]: { [key: string]: string } } | undefined; /** * Returns a t function that defaults to given language or namespace. * Both params could be arrays of languages or namespaces and will be treated as fallbacks in that case. * On the returned function you can like in the t function override the languages or namespaces by passing them in options or by prepending namespace. * * Accepts optional keyPrefix that will be automatically applied to returned t function. */ getFixedT< Ns extends Namespace | null, const TKPrefixFn extends (TypeOptions['enableSelector'] extends true | 'optimize' | 'strict' ? KeyPrefixSelector : never), ActualNs extends Namespace = Ns extends null ? DefaultNamespace : Ns, >( lng: string | readonly string[] | null, ns: Ns, keyPrefix: TKPrefixFn, ): TFunction; getFixedT< Ns extends Namespace | null = DefaultNamespace, TKPrefix extends KeyPrefix = undefined, ActualNs extends Namespace = Ns extends null ? DefaultNamespace : Ns, >( ...args: | [lng: string | readonly string[], ns?: Ns, keyPrefix?: TKPrefix | (($: any) => any)] | [lng: null, ns: Ns, keyPrefix?: TKPrefix | (($: any) => any)] ): TFunction; /** * Changes the language. The callback will be called as soon translations were loaded or an error occurs while loading. * HINT: For easy testing - setting lng to 'cimode' will set t function to always return the key. */ changeLanguage(lng?: string, callback?: Callback): Promise; /** * Is set to the current detected or set language. * If you need the primary used language depending on your configuration (supportedLngs, load) you will prefer using i18next.languages[0]. */ language: string; /** * Is set to an array of language-codes that will be used it order to lookup the translation value. */ languages: readonly string[]; /** * Is set to the current resolved language. * It can be used as primary used language, for example in a language switcher. */ resolvedLanguage?: string; /** * Checks if namespace has loaded yet. * i.e. used by react-i18next */ hasLoadedNamespace( ns: string | readonly string[], options?: { lng?: string | readonly string[]; fallbackLng?: InitOptions['fallbackLng']; /** * if `undefined` is returned default checks are performed. */ precheck?: ( i18n: i18n, /** * Check if the language namespace provided are not in loading status: * returns `true` if load is completed successfully or with an error. */ loadNotPending: ( lng: string | readonly string[], ns: string | readonly string[], ) => boolean, ) => boolean | undefined; }, ): boolean; /** * Loads additional namespaces not defined in init options. */ loadNamespaces(ns: string | readonly string[], callback?: Callback): Promise; /** * Loads additional languages not defined in init options (preload). */ loadLanguages(lngs: string | readonly string[], callback?: Callback): Promise; /** * Reloads resources on given state. Optionally you can pass an array of languages and namespaces as params if you don't want to reload all. * Without languages it reloads the current languages and every language the backend loaded or tried to load, for this * instance and its clones (since v26.7.1), and it retries the bundles that failed. */ reloadResources( lngs?: string | readonly string[], ns?: string | readonly string[], callback?: () => void, ): Promise; reloadResources(lngs: null, ns: string | readonly string[], callback?: () => void): Promise; /** * Changes the default namespace. */ setDefaultNamespace(ns: string | readonly string[]): void; /** * Returns rtl or ltr depending on languages read direction. */ dir(lng?: string): 'ltr' | 'rtl'; /** * Puts resources rendered on the server into the store and changes to the server's language, each * only the first time (sets `initializedStoreOnce` and `initializedLanguageOnce`). For SSR * integrations like react-i18next's `useSSR`. Call it after `init()`. Since v26.7.0. */ hydrate(resources?: Resource, lng?: string): i18n; /** * Exposes interpolation.format function added on init. */ format: FormatFunction; /** * Will return a new i18next instance. * Please read the options page for details on configuration options. * Providing a callback will automatically call init. * The callback will be called after all translations were loaded or with an error when failed (in case of using a backend). */ createInstance(options?: InitOptions, callback?: Callback): i18n; /** * Creates a clone of the current instance. Shares store, plugins and initial configuration. * Can be used to create an instance sharing storage but being independent on set language or namespaces. */ cloneInstance(options?: CloneOptions, callback?: Callback): i18n; /** * Returns a JSON representation of the i18next instance for serialization. */ toJSON(): { options: InitOptions; store: ResourceStore; language: string; languages: readonly string[]; resolvedLanguage?: string; }; /** * Gets fired after initialization. */ on(event: 'initialized', callback: (options: InitOptions) => void): this; /** * Gets fired on loaded resources. */ on( event: 'loaded', callback: (loaded: { [language: string]: { [namespace: string]: boolean } }) => void, ): this; /** * Gets fired if loading resources failed. */ on(event: 'failedLoading', callback: (lng: string, ns: string, msg: string) => void): this; /** * Gets fired on accessing a key not existing. */ on( event: 'missingKey', callback: (lngs: readonly string[], namespace: string, key: string, res: string) => void, ): this; /** * Gets fired when changeLanguage got called. */ on(event: 'languageChanged', callback: (lng: string) => void): this; /** * Event listener */ on(event: string, listener: (...args: any[]) => void): this; /** * Remove event listener * removes all callback when callback not specified */ off(event: string, listener?: (...args: any[]) => void): void; /** * Subscribe to an event, but only once. The listener is removed after the first call. */ once(event: string, listener: (...args: any[]) => void): this; /** * Gets one value by given key. */ getResource( lng: string, ns: string, key: string, options?: Pick, ): any; /** * Adds one key/value. */ addResource( lng: string, ns: string, key: string, value: string, options?: { keySeparator?: string; silent?: boolean }, ): i18n; /** * Adds multiple key/values. */ addResources(lng: string, ns: string, resources: any): i18n; /** * Adds a complete bundle. * Setting deep param to true will extend existing translations in that file. * Setting overwrite to true it will overwrite existing translations in that file. */ addResourceBundle( lng: string, ns: string, resources: any, deep?: boolean, overwrite?: boolean, options?: { silent?: boolean; skipCopy?: boolean }, ): i18n; /** * Checks if a resource bundle exists. */ hasResourceBundle(lng: string, ns: string): boolean; /** * Returns a resource bundle. */ getResourceBundle(lng: string, ns: string): any; /** * Removes an existing bundle. */ removeResourceBundle(lng: string, ns: string): i18n; /** * Current options */ options: InitOptions; /** * Is initialized */ isInitialized: boolean; /** * Is initializing */ isInitializing: boolean; /** * Store was initialized. Set by `hydrate()`; SSR integrations should call that instead of setting it. */ initializedStoreOnce: boolean; /** * Language was initialized. Set by `hydrate()`; SSR integrations should call that instead of setting it. */ initializedLanguageOnce: boolean; /** * Emit event */ emit(eventName: string, ...args: any[]): void; } export type * from './typescript/options.js'; export type { // we need to explicitely export some types, to prevent some issues with next-i18next and interpolation variable validation, etc... FallbackLngObjList, FallbackLng, InitOptions, TypeOptions, CustomTypeOptions, ResourceNamespaceMap, CustomPluginOptions, PluginOptions, FormatFunction, InterpolationOptions, ReactOptions, ResourceKey, ResourceLanguage, Resource, TOptions, Namespace, DefaultNamespace, FlatNamespace, } from './typescript/options.js'; export type * from './typescript/t.js'; export type { TFunction, ParseKeys, TFunctionReturn, TFunctionDetailedResult, KeyPrefix, KeyPrefixSelector, NsResource, InterpolationMap, SelectorKey, ParseKeysWithoutVariables, // used by react-i18next SelectorFn, ApplyTarget, ConstrainTarget, GetSource, } from './typescript/t.js'; declare const i18next: i18n; export default i18next; export const createInstance: i18n['createInstance']; export const dir: i18n['dir']; export const init: i18n['init']; export const loadResources: i18n['loadResources']; export const reloadResources: i18n['reloadResources']; export const use: i18n['use']; export const changeLanguage: i18n['changeLanguage']; export const getFixedT: i18n['getFixedT']; export const t: i18n['t']; export const exists: i18n['exists']; export const setDefaultNamespace: i18n['setDefaultNamespace']; export const hasLoadedNamespace: i18n['hasLoadedNamespace']; export const loadNamespaces: i18n['loadNamespaces']; export const loadLanguages: i18n['loadLanguages']; export declare const keyFromSelector: KeyFromSelectorFn; /** * Whether a language code has the shape i18next v27 accepts from outside (`changeLanguage()`, language * detectors) without it being configured: letters, digits, `-`, `_`, `@` and `.` (no `..`), at most * 128 characters, not a prototype key. Not a BCP 47 check: `'en_US'` and `'sr@latin'` pass. For plugins * that take a language from a request, a URL or storage. Since v26.7.0. */ export declare const isSafeLanguageCode: (code: unknown) => boolean; i18next-i18next-db698b1/index.js000066400000000000000000000001731527173754700164210ustar00rootroot00000000000000/* eslint no-var: 0 */ var main = require('./dist/cjs/i18next.js'); module.exports = main; module.exports.default = main; i18next-i18next-db698b1/package-lock.json000066400000000000000000012515241527173754700202010ustar00rootroot00000000000000{ "name": "i18next", "version": "26.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "i18next", "version": "26.7.1", "funding": [ { "type": "individual", "url": "https://www.locize.com/i18next" }, { "type": "individual", "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" }, { "type": "individual", "url": "https://www.locize.com" } ], "license": "MIT", "devDependencies": { "@arktype/attest": "^0.56.3", "@babel/core": "^7.29.0", "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-modules-commonjs": "^7.29.0", "@babel/preset-env": "^7.29.0", "@babel/preset-react": "^7.29.0", "@babel/register": "^7.29.0", "@rollup/plugin-babel": "^7.1.0", "@rollup/plugin-commonjs": "^29.0.3", "@rollup/plugin-node-resolve": "^16.0.3", "@rollup/plugin-terser": "^1.0.0", "@types/node": "^26.2.0", "@typescript-eslint/eslint-plugin": "^8.67.0", "@typescript-eslint/parser": "^8.67.0", "@vitest/coverage-v8": "4.1.12", "babelify": "^10.0.0", "cpy-cli": "^7.0.0", "eslint": "9.39.4", "gh-release": "^8.1.0", "husky": "^9.1.7", "i18next-browser-languagedetector": "^8.2.1", "i18next-fs-backend": "^2.6.7", "i18next-http-backend": "^4.0.6", "i18next-localstorage-cache": "^1.1.1", "i18next-sprintf-postprocessor": "^0.2.2", "lint-staged": "^17.3.0", "neostandard": "^0.13.0", "nise": "6.1.5", "prettier": "^3.9.6", "rimraf": "^6.1.3", "rollup": "^4.62.4", "typescript": "^6.0.3", "typescript-eslint": "^8.67.0", "vitest": "4.1.12" }, "peerDependencies": { "typescript": "^5 || ^6 || ^7" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@ark/fs": { "version": "0.56.2", "resolved": "https://registry.npmjs.org/@ark/fs/-/fs-0.56.2.tgz", "integrity": "sha512-mnr9H4P5stD8AHacOUN5nyIiDe8wfCWJQ0l/JZtDGjrnbgIFb2NHRcKf2ym3ielRFgwsnTIZg4P1J6CqfbjM8g==", "dev": true, "license": "MIT" }, "node_modules/@ark/schema": { "version": "0.56.2", "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.2.tgz", "integrity": "sha512-Qx4D2JFbBWpntiHZaTv7bGG4H/M2rigiknezKg/WVyDSaLdE4YCcWAOoFB7pjjDqHbbV2OqRfntm1nnXvwMexg==", "dev": true, "license": "MIT", "dependencies": { "@ark/util": "0.56.2" } }, "node_modules/@ark/util": { "version": "0.56.2", "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.2.tgz", "integrity": "sha512-9kU2sUE38FZEGG7l3hamYMBieLYEJh2L1mrYD2eXpT+78EnQSV1bhjxJhnxGBMSTbtwpBSDNSK+K60WvaI/DTQ==", "dev": true, "license": "MIT" }, "node_modules/@arktype/attest": { "version": "0.56.3", "resolved": "https://registry.npmjs.org/@arktype/attest/-/attest-0.56.3.tgz", "integrity": "sha512-HRO69XDEqPaYJXOeKLkhtZbgDazCihVPrWkYkk6fA2CLkEN4PvLW7vEv6RkmWGt9v7Esb0VsNM2iWTXV2TvNXQ==", "dev": true, "license": "MIT", "dependencies": { "@ark/fs": "0.56.2", "@ark/schema": "0.56.2", "@ark/util": "0.56.2", "@prettier/sync": "0.6.1", "@typescript/analyze-trace": "0.10.1", "@typescript/vfs": "1.6.1", "arktype": "2.2.3", "prettier": "3.6.2" }, "bin": { "attest": "out/cli/cli.js" }, "peerDependencies": { "typescript": "*" } }, "node_modules/@arktype/attest/node_modules/prettier": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/@babel/code-frame": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/@babel/generator": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "debug": "^4.4.3", "lodash.debounce": "^4.0.8", "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-globals": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-wrap-function": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz", "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/plugin-transform-optional-chaining": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-remap-async-to-generator": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-remap-async-to-generator": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-transform-classes": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/template": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-explicit-resource-management": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/plugin-transform-destructuring": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.8" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/plugin-transform-destructuring": "^7.29.7", "@babel/plugin-transform-parameters": "^7.29.7", "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.29.7.tgz", "integrity": "sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz", "integrity": "sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-module-imports": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/plugin-syntax-jsx": "^7.29.7", "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz", "integrity": "sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==", "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.29.7.tgz", "integrity": "sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/preset-env": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.29.7", "@babel/plugin-syntax-import-attributes": "^7.29.7", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.29.7", "@babel/plugin-transform-async-generator-functions": "^7.29.7", "@babel/plugin-transform-async-to-generator": "^7.29.7", "@babel/plugin-transform-block-scoped-functions": "^7.29.7", "@babel/plugin-transform-block-scoping": "^7.29.7", "@babel/plugin-transform-class-properties": "^7.29.7", "@babel/plugin-transform-class-static-block": "^7.29.7", "@babel/plugin-transform-classes": "^7.29.7", "@babel/plugin-transform-computed-properties": "^7.29.7", "@babel/plugin-transform-destructuring": "^7.29.7", "@babel/plugin-transform-dotall-regex": "^7.29.7", "@babel/plugin-transform-duplicate-keys": "^7.29.7", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", "@babel/plugin-transform-dynamic-import": "^7.29.7", "@babel/plugin-transform-explicit-resource-management": "^7.29.7", "@babel/plugin-transform-exponentiation-operator": "^7.29.7", "@babel/plugin-transform-export-namespace-from": "^7.29.7", "@babel/plugin-transform-for-of": "^7.29.7", "@babel/plugin-transform-function-name": "^7.29.7", "@babel/plugin-transform-json-strings": "^7.29.7", "@babel/plugin-transform-literals": "^7.29.7", "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", "@babel/plugin-transform-member-expression-literals": "^7.29.7", "@babel/plugin-transform-modules-amd": "^7.29.7", "@babel/plugin-transform-modules-commonjs": "^7.29.7", "@babel/plugin-transform-modules-systemjs": "^7.29.7", "@babel/plugin-transform-modules-umd": "^7.29.7", "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", "@babel/plugin-transform-new-target": "^7.29.7", "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", "@babel/plugin-transform-numeric-separator": "^7.29.7", "@babel/plugin-transform-object-rest-spread": "^7.29.7", "@babel/plugin-transform-object-super": "^7.29.7", "@babel/plugin-transform-optional-catch-binding": "^7.29.7", "@babel/plugin-transform-optional-chaining": "^7.29.7", "@babel/plugin-transform-parameters": "^7.29.7", "@babel/plugin-transform-private-methods": "^7.29.7", "@babel/plugin-transform-private-property-in-object": "^7.29.7", "@babel/plugin-transform-property-literals": "^7.29.7", "@babel/plugin-transform-regenerator": "^7.29.7", "@babel/plugin-transform-regexp-modifiers": "^7.29.7", "@babel/plugin-transform-reserved-words": "^7.29.7", "@babel/plugin-transform-shorthand-properties": "^7.29.7", "@babel/plugin-transform-spread": "^7.29.7", "@babel/plugin-transform-sticky-regex": "^7.29.7", "@babel/plugin-transform-template-literals": "^7.29.7", "@babel/plugin-transform-typeof-symbol": "^7.29.7", "@babel/plugin-transform-unicode-escapes": "^7.29.7", "@babel/plugin-transform-unicode-property-regex": "^7.29.7", "@babel/plugin-transform-unicode-regex": "^7.29.7", "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.15", "babel-plugin-polyfill-corejs3": "^0.14.0", "babel-plugin-polyfill-regenerator": "^0.6.6", "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.29.7.tgz", "integrity": "sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "@babel/plugin-transform-react-display-name": "^7.29.7", "@babel/plugin-transform-react-jsx": "^7.29.7", "@babel/plugin-transform-react-jsx-development": "^7.29.7", "@babel/plugin-transform-react-pure-annotations": "^7.29.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/register": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.29.7.tgz", "integrity": "sha512-AMGJoWuES861riy6pcB0fphE1YXybtQnBYQMuIyPv6mKLiosfa79BKTnAOyx215c/3RJPJpdQwoHZ3earVH7AA==", "dev": true, "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", "pirates": "^4.0.6", "source-map-support": "^0.5.16" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/config-array": { "version": "0.21.2", "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.5" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/config-array/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/@eslint/config-array/node_modules/brace-expansion": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/@eslint/config-helpers": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@eslint/core": "^0.17.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/eslintrc": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.3.0", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/@eslint/js": { "version": "9.39.4", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/plugin-kit": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanfs/core": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/types": "^0.15.0" }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/types": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", "dev": true, "license": "Apache-2.0", "engines": { "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/gitignore-to-minimatch": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", "dev": true, "license": "Apache-2.0", "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.22" }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/retry": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { "node": ">=18.18" }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@napi-rs/lzma-linux-x64-gnu": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^22.20 || ^24.12 || >=25" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, "node_modules/@octokit/auth-token": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "dev": true, "license": "MIT", "engines": { "node": ">= 20" } }, "node_modules/@octokit/core": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.7.tgz", "integrity": "sha512-DcB0M3KFgr9ECI328lhBMVsyFT2DnmNucSBTqEN3exyNKUzkkpUSCHmTRcunF41Eou2TIQKW4seewri8ON9bSA==", "dev": true, "license": "MIT", "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.4", "@octokit/request": "^10.0.13", "@octokit/request-error": "^7.1.1", "@octokit/types": "^17.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 20" } }, "node_modules/@octokit/endpoint": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.4.tgz", "integrity": "sha512-f1cOWoHPmxryJFknxbtDdjODWfV8A9tc8Aae6ermXPNgHFZ/x91AtHIz4gicEjL8hkJiip+u21QHJORfBv/qiA==", "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^17.0.0", "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 20" } }, "node_modules/@octokit/graphql": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.4.tgz", "integrity": "sha512-5s15CCiY8XXQ+FG+b1YQcl6Z2FA++nwAz/tg2VUrTmnMncP+2nnGUEYANImdnxsA2Fnq+Mbl7hDjUTw7cFAwcg==", "dev": true, "license": "MIT", "dependencies": { "@octokit/request": "^10.0.13", "@octokit/types": "^17.0.0", "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 20" } }, "node_modules/@octokit/openapi-types": { "version": "28.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-28.0.0.tgz", "integrity": "sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^16.0.0" }, "engines": { "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { "version": "27.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "node_modules/@octokit/plugin-request-log": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", "dev": true, "license": "MIT", "engines": { "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-17.0.0.tgz", "integrity": "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==", "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^16.0.0" }, "engines": { "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { "version": "27.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "node_modules/@octokit/request": { "version": "10.0.14", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.14.tgz", "integrity": "sha512-bgWgiSfFS689/AxQDarU+b3Qu1FYewfVr5vI/jhV84s7GQ3C2OsdRxukGGYKB37MCgwcS50UrfBLlHzhiG13sw==", "dev": true, "license": "MIT", "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.1.1", "@octokit/types": "^17.0.0", "content-type": "^2.0.0", "json-with-bigint": "^3.5.12", "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 20" } }, "node_modules/@octokit/request-error": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.1.tgz", "integrity": "sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA==", "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^17.0.0" }, "engines": { "node": ">= 20" } }, "node_modules/@octokit/rest": { "version": "22.0.1", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.1.tgz", "integrity": "sha512-Jzbhzl3CEexhnivb1iQ0KJ7s5vvjMWcmRtq5aUsKmKDrRW6z3r84ngmiFKFvpZjpiU/9/S6ITPFRpn5s/3uQJw==", "dev": true, "license": "MIT", "dependencies": { "@octokit/core": "^7.0.6", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/plugin-request-log": "^6.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0" }, "engines": { "node": ">= 20" } }, "node_modules/@octokit/types": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-17.0.0.tgz", "integrity": "sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==", "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^28.0.0" } }, "node_modules/@oxc-project/types": { "version": "0.155.0", "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.155.0.tgz", "integrity": "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/oxc-project" } }, "node_modules/@prettier/sync": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.6.1.tgz", "integrity": "sha512-yF9G8vK/LYUTF3Cijd7VC9La3b20F20/J/fgoR4H0B8JGOWnZVZX6+I6+vODPosjmMcpdlUV+gUqJQZp3kLOcw==", "dev": true, "license": "MIT", "dependencies": { "make-synchronized": "^0.8.0" }, "funding": { "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" }, "peerDependencies": { "prettier": "*" } }, "node_modules/@rolldown/binding-android-arm-eabi": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz", "integrity": "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz", "integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-darwin-arm64": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz", "integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-darwin-x64": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz", "integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-freebsd-x64": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz", "integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz", "integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz", "integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==", "cpu": [ "arm64" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-arm64-musl": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz", "integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==", "cpu": [ "arm64" ], "dev": true, "libc": [ "musl" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz", "integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==", "cpu": [ "ppc64" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz", "integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==", "cpu": [ "s390x" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-x64-gnu": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz", "integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==", "cpu": [ "x64" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-linux-x64-musl": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz", "integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==", "cpu": [ "x64" ], "dev": true, "libc": [ "musl" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-openharmony-arm64": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz", "integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "openharmony" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz", "integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-win32-x64-msvc": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz", "integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/pluginutils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, "license": "MIT" }, "node_modules/@rollup/plugin-babel": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-7.1.0.tgz", "integrity": "sha512-h9Y+xYha6p4wKO+FwdiPIkE+eIYCm8MzZPpX1iARIoFBnmKP9CnpT1p9dDf/DTFm6fyN8PmuLyRI5qZgchnitw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@rollup/pluginutils": "^5.0.1", "workerpool": "^9.0.0" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "@types/babel__core": { "optional": true }, "rollup": { "optional": true } } }, "node_modules/@rollup/plugin-commonjs": { "version": "29.0.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.3.tgz", "integrity": "sha512-ZaOxZceP7SOUW7Lqw5IRVweSQYWaeIPnXIGLiB690EBA3FGJTO40EEr2L5yZplJWsgTCogILRSpcAe7+U0Otdg==", "dev": true, "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", "fdir": "^6.2.0", "is-reference": "1.2.1", "magic-string": "^0.30.3", "picomatch": "^4.0.2" }, "engines": { "node": ">=16.0.0 || 14 >= 14.17" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/plugin-node-resolve": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", "dev": true, "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/plugin-terser": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz", "integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==", "dev": true, "license": "MIT", "dependencies": { "serialize-javascript": "^7.0.3", "smob": "^1.0.0", "terser": "^5.17.4" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/pluginutils": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", "cpu": [ "loong64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", "cpu": [ "loong64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", "cpu": [ "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", "cpu": [ "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", "cpu": [ "riscv64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", "cpu": [ "riscv64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", "cpu": [ "s390x" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-openbsd-x64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "openbsd" ] }, "node_modules/@rollup/rollup-openharmony-arm64": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "openharmony" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", "cpu": [ "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@sindresorhus/merge-streams": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "15.4.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "node_modules/@standard-schema/spec": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, "license": "MIT" }, "node_modules/@stylistic/eslint-plugin": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.11.0.tgz", "integrity": "sha512-PNRHbydNG5EH8NK4c+izdJlxajIR6GxcUhzsYNRsn6Myep4dsZt0qFCz3rCPnkvgO5FYibDcMqgNHUT+zvjYZw==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/utils": "^8.13.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "estraverse": "^5.3.0", "picomatch": "^4.0.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { "eslint": ">=8.40.0" } }, "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@types/chai": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "node_modules/@types/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "26.2.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~8.3.0" } }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz", "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.67.0", "@typescript-eslint/type-utils": "8.67.0", "@typescript-eslint/utils": "8.67.0", "@typescript-eslint/visitor-keys": "8.67.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "@typescript-eslint/parser": "^8.67.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz", "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/scope-manager": "8.67.0", "@typescript-eslint/types": "8.67.0", "@typescript-eslint/typescript-estree": "8.67.0", "@typescript-eslint/visitor-keys": "8.67.0", "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz", "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.67.0", "@typescript-eslint/types": "^8.67.0", "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz", "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/types": "8.67.0", "@typescript-eslint/visitor-keys": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/tsconfig-utils": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz", "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz", "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/types": "8.67.0", "@typescript-eslint/typescript-estree": "8.67.0", "@typescript-eslint/utils": "8.67.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz", "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz", "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/project-service": "8.67.0", "@typescript-eslint/tsconfig-utils": "8.67.0", "@typescript-eslint/types": "8.67.0", "@typescript-eslint/visitor-keys": "8.67.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@typescript-eslint/utils": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz", "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.67.0", "@typescript-eslint/types": "8.67.0", "@typescript-eslint/typescript-estree": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz", "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/types": "8.67.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@typescript/analyze-trace": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@typescript/analyze-trace/-/analyze-trace-0.10.1.tgz", "integrity": "sha512-RnlSOPh14QbopGCApgkSx5UBgGda5MX1cHqp2fsqfiDyCwGL/m1jaeB9fzu7didVS81LQqGZZuxFBcg8YU8EVw==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "exit": "^0.1.2", "jsonparse": "^1.3.1", "jsonstream-next": "^3.0.0", "p-limit": "^3.1.0", "split2": "^3.2.2", "treeify": "^1.1.0", "yargs": "^16.2.0" }, "bin": { "analyze-trace": "bin/analyze-trace", "print-trace-types": "bin/print-trace-types", "simplify-trace-types": "bin/simplify-trace-types" } }, "node_modules/@typescript/vfs": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.1.tgz", "integrity": "sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1" }, "peerDependencies": { "typescript": "*" } }, "node_modules/@vitest/coverage-v8": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.12.tgz", "integrity": "sha512-6S7/iVknKglLAxMFxQGNppBI0iqJS2NgM6FBxavitj7KaDq/vywOWGf6dGu7F2L1Qy0G6S3uTp7aGshHrzK8JA==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.12", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", "magicast": "^0.5.2", "obug": "^2.1.1", "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@vitest/browser": "4.1.12", "vitest": "4.1.12" }, "peerDependenciesMeta": { "@vitest/browser": { "optional": true } } }, "node_modules/@vitest/expect": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.12.tgz", "integrity": "sha512-vFlTt+YEu9WBpNjdGayNmlMVzrWPi1+sv853/7t2FU7hpO5gAFBKHzQmkCq5Xjpr+evegF2994LQT3hF3mRlqQ==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.12", "@vitest/utils": "4.1.12", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/mocker": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.12.tgz", "integrity": "sha512-fKShNpKZzupWZuY0z7egydvL0sqW4INEZBEExMBMAa6izlENEVHwoXgdaTCaBZ5fwlr4xf2o1wXC83n9RpO+NA==", "dev": true, "license": "MIT", "dependencies": { "@vitest/spy": "4.1.12", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "msw": { "optional": true }, "vite": { "optional": true } } }, "node_modules/@vitest/mocker/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } }, "node_modules/@vitest/pretty-format": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.12.tgz", "integrity": "sha512-XW9O8+Mxx4VpCtkYdMJLZQQwsVryP9wk7cPKDxtXFfwSak6yRh5+2fep/Y0XF/ElBvJHq8bcYdi6aeuai0opZA==", "dev": true, "license": "MIT", "dependencies": { "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.12.tgz", "integrity": "sha512-NKlVKCr5QnCe8jijdMnmkpHHU+WTqiLFR6G0pHji9uRjXK9xJl1k1nTw6F3pOOj2PDcsDt2GKQMI7wIsaT491w==", "dev": true, "license": "MIT", "dependencies": { "@vitest/utils": "4.1.12", "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.12.tgz", "integrity": "sha512-ko1y1Qgb/slzQ9mr+b89Cuqud8WG1TKtsPD8r7ZUBdvVOGt85Af2HwCqHujrhwJq95hs/9RM7fcAPg57o1vlzw==", "dev": true, "license": "MIT", "dependencies": { "@vitest/pretty-format": "4.1.12", "@vitest/utils": "4.1.12", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.12.tgz", "integrity": "sha512-RGq9x4JNGNTZHEJxvN0oSiJjeSCExm0n2gZKKJZHY9cX5AVA6M7VJILBT3ZJ/tJ/0J9uWT7fETV9/btoi//vSg==", "dev": true, "license": "MIT", "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.12.tgz", "integrity": "sha512-Q3awXrwOfEV+qc3WmO5ONyE0yO7Q1gQ9/oyHxGLZ/pl7N3NO/ZztqQwKLuwMkV+CA1JYSIeO3gkHnRDIo4AVaA==", "dev": true, "license": "MIT", "dependencies": { "@vitest/pretty-format": "4.1.12", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/acorn": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/ajv": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/arkregex": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.8.tgz", "integrity": "sha512-PJcx6G1kQTgLKPUbeYlYecDRaKq15AMSGVajlKFYWlPeJRQL+j3dKE6tyMs40HZ99djS1l9Vhl3ezAHy9JBIqQ==", "dev": true, "license": "MIT", "dependencies": { "@ark/util": "0.56.2" } }, "node_modules/arktype": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.3.tgz", "integrity": "sha512-7W+0RLTUNJiBFIIZXwOQxSR8Z273IAd6IvqBeG9+gHnQKFsIx2C0iOtGTmMrPnlX4qLXyc5+ll7A0BIj9WrbTg==", "dev": true, "license": "MIT", "dependencies": { "@ark/schema": "0.56.2", "@ark/util": "0.56.2", "arkregex": "0.0.8" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flat": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/ast-v8-to-istanbul": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.5.tgz", "integrity": "sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", "js-tokens": "^10.0.0" } }, "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } }, "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", "dev": true, "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.8", "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babelify": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", "engines": { "node": "18 || 20 || >=22" } }, "node_modules/baseline-browser-mapping": { "version": "2.11.15", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.15.tgz", "integrity": "sha512-FwMjJJ7HnyZpWe+oWxegG0fezZyBZUagI5LZEoO3GCbtbKNwRfMH9Ue5d5v01PNePBy1QSfPSDTTeVL0Hb9EzA==", "dev": true, "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" }, "engines": { "node": ">=6.0.0" } }, "node_modules/before-after-hook": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/brace-expansion": { "version": "5.0.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { "node": "20 || >=22" } }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { "version": "4.28.8", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "license": "MIT", "dependencies": { "baseline-browser-mapping": "^2.11.12", "caniuse-lite": "^1.0.30001809", "electron-to-chromium": "^1.5.402", "node-releases": "^2.0.53", "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/call-bind": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/call-bound": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { "version": "1.0.30001809", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "license": "CC-BY-4.0" }, "node_modules/chai": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz", "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/changelog-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/changelog-parser/-/changelog-parser-4.1.0.tgz", "integrity": "sha512-FzpTTPllU+AhXrlR2R8kFjHeyz+c/htnK58GqpwBBtduFqjiRNA/fPg1rHKiJVGcMZDamWEuYMJZ93jyWVvd+A==", "dev": true, "license": "ISC", "dependencies": { "remove-markdown": "^0.6.4" }, "bin": { "changelog-parser": "dist/cli.js" }, "engines": { "node": ">=22.12.0" } }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true, "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/content-type": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/copy-file": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.1.0.tgz", "integrity": "sha512-X8XDzyvYaA6msMyAM575CUoygY5b44QzLcGRKsK3MFmXcOvQa518dNPLsKYwkYsn72g3EiW+LE0ytd/FlqWmyw==", "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.11", "p-event": "^6.0.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/core-js-compat": { "version": "3.50.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", "dev": true, "license": "MIT", "dependencies": { "browserslist": "^4.28.7" }, "engines": { "node": ">=6.4.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/cpy": { "version": "13.2.2", "resolved": "https://registry.npmjs.org/cpy/-/cpy-13.2.2.tgz", "integrity": "sha512-FEc7gmNSj4mDQCWNt3mByVn3qZX3EjMvggiqgCQPF1yJAFfyX6Ai/emN89w18TRp+QcFmdTLgX3hfNnIVgYHcw==", "dev": true, "license": "MIT", "dependencies": { "copy-file": "^11.1.0", "globby": "^16.1.0", "junk": "^4.0.1", "micromatch": "^4.0.8", "p-filter": "^4.1.0", "p-map": "^7.0.4" }, "engines": { "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cpy-cli": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-7.0.0.tgz", "integrity": "sha512-uGCdhIxGfZcPXidCuT8w1jBknVXFx0un7NLjzqBZcdnkIWtLUnWMPk5TC37ceoVjwASLSNsRtTXXNTuFIyE2ng==", "dev": true, "license": "MIT", "dependencies": { "cpy": "^13.2.0", "globby": "^16.1.0", "meow": "^14.0.0" }, "bin": { "cpy": "cli.js" }, "engines": { "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, "engines": { "node": ">= 8" } }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/data-view-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "engines": { "node": ">=8" } }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/electron-to-chromium": { "version": "1.5.411", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.411.tgz", "integrity": "sha512-gglkxzokjHfawpGxq75XdBV2/l3BAPzrsMs70qgaZdTW5rpV1tC4MdgJVP9fN126bODA4ZJQkn1wryEzJyQXIg==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/enhanced-resolve": { "version": "5.24.5", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/es-abstract": { "version": "1.24.2", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-abstract-get": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "es-object-atoms": "^1.1.2", "is-callable": "^1.2.7", "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-to-primitive": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", "dev": true, "license": "MIT", "dependencies": { "es-abstract-get": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "is-callable": "^1.2.7", "is-date-object": "^1.1.0", "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { "version": "9.39.4", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.5", "@eslint/js": "9.39.4", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://eslint.org/donate" }, "peerDependencies": { "jiti": "*" }, "peerDependenciesMeta": { "jiti": { "optional": true } } }, "node_modules/eslint-compat-utils": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.4" }, "engines": { "node": ">=12" }, "peerDependencies": { "eslint": ">=6.0.0" } }, "node_modules/eslint-compat-utils/node_modules/semver": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/eslint-plugin-es-x": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, "funding": [ "https://github.com/sponsors/ota-meshi", "https://opencollective.com/eslint" ], "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", "@eslint-community/regexpp": "^4.11.0", "eslint-compat-utils": "^0.5.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { "eslint": ">=8" } }, "node_modules/eslint-plugin-n": { "version": "17.24.0", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz", "integrity": "sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.5.0", "enhanced-resolve": "^5.17.1", "eslint-plugin-es-x": "^7.8.0", "get-tsconfig": "^4.8.1", "globals": "^15.11.0", "globrex": "^0.1.2", "ignore": "^5.3.2", "semver": "^7.6.3", "ts-declaration-location": "^1.0.6" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" }, "peerDependencies": { "eslint": ">=8.23.0" } }, "node_modules/eslint-plugin-n/node_modules/globals": { "version": "15.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-plugin-n/node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/eslint-plugin-n/node_modules/semver": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/eslint-plugin-promise": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.3.0.tgz", "integrity": "sha512-6uGiOR0INuujr6PEQmeSSP7GbIMJ/ebEXXiEzb/nOj68LknH5Pxzb/AbZivmr6VE6TkTE8rTjRK9zhKpK6HsRA==", "dev": true, "license": "ISC", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" } }, "node_modules/eslint-plugin-react": { "version": "7.37.5", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.2", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/eslint-scope": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, "engines": { "node": ">=0.10" } }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.0.0" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" } }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" }, "peerDependencies": { "picomatch": "^3 || ^4" }, "peerDependenciesMeta": { "picomatch": { "optional": true } } }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" }, "engines": { "node": ">=16" } }, "node_modules/flatted": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "dev": true, "license": "ISC" }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2", "hasown": "^2.0.4", "is-callable": "^1.2.7", "is-document.all": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/generator-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-tsconfig": { "version": "4.14.3", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz", "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==", "dev": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, "funding": { "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, "node_modules/gh-release": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/gh-release/-/gh-release-8.1.0.tgz", "integrity": "sha512-6NqBXXQXw7kNWETsf07ToafTvNrVkXOfEJmBihOaIygwQd+syULBvZgfdh+nJpeBTwCXAMDMA8skh4xO6r59ng==", "dev": true, "license": "ISC", "dependencies": { "@octokit/rest": "^22.0.1", "changelog-parser": "^4.1.0", "gh-release-assets": "^3.0.0" }, "bin": { "gh-release": "dist/bin.js" }, "engines": { "node": ">=22.12.0" } }, "node_modules/gh-release-assets": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/gh-release-assets/-/gh-release-assets-3.0.0.tgz", "integrity": "sha512-pEjMS3CpWe7QdIEYTrHNKfid0hL048/FiKiLzqlD8jRdIzo3YuVp3uiyN067U5rK/StoJTNqMuzxXlZeOJ75zw==", "dev": true, "license": "ISC", "dependencies": { "mime": "^4.1.0" }, "bin": { "gh-release-assets": "dist/cli.js" }, "engines": { "node": ">=22.12.0" } }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" }, "engines": { "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/globby": { "version": "16.2.4", "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.4.tgz", "integrity": "sha512-c8B/VNLmxRcmqqenRA9t+9IyOjf9+V6lTxPaUJLqOCONdQkWZ0ETYgX0qbtJqPsgCNusT9MZ5Jeidw8Eb9tn2g==", "dev": true, "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "fast-glob": "^3.3.3", "ignore": "^7.0.5", "is-path-inside": "^4.0.0", "micromatch": "^4.0.8", "slash": "^5.1.0", "unicorn-magic": "^0.4.0" }, "engines": { "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true, "license": "MIT" }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/hasown": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/husky": { "version": "9.1.7", "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", "bin": { "husky": "bin.js" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/typicode" } }, "node_modules/i18next-browser-languagedetector": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.1.tgz", "integrity": "sha512-bZg8+4bdmaOiApD7N7BPT9W8MLZG+nPTOFlLiJiT8uzKXFjhxw4v2ierCXOwB5sFDMtuA5G4kgYZ0AznZxQ/cw==", "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.2" } }, "node_modules/i18next-fs-backend": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.6.7.tgz", "integrity": "sha512-nN2TIycyR/d+OVuLm1ugPyOlMprqPRnQ7QktBgn44F3H8l7TeTH4ffHJ7nUsd4QVJfetWW7/VZ3s+4g7FoAZUA==", "dev": true, "license": "MIT" }, "node_modules/i18next-http-backend": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-4.0.6.tgz", "integrity": "sha512-k5OPDXAQH9CZ2Ju2DDw1ZC4WiYmjKUjOE4lcd51tNQyWjVDfpuwPcE9Y5VzDpz1tR1Z4wxkkj4H+ImxgwbfpeQ==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/i18next-localstorage-cache": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/i18next-localstorage-cache/-/i18next-localstorage-cache-1.1.1.tgz", "integrity": "sha512-6kgVSg48bhmYCHppMCMExKBiiGOrb85jQBQMPnAwxVumn/fkXJYEfxV0rdfL0EYcZT+ciOqw+7VIMWkTVuk6Ng==", "dev": true, "license": "MIT" }, "node_modules/i18next-sprintf-postprocessor": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/i18next-sprintf-postprocessor/-/i18next-sprintf-postprocessor-0.2.2.tgz", "integrity": "sha512-c/IT9xuMyTfJ/3Ds+DPtb0vYVuykbMyGChZ5OGZTzFDV7Kgst1nrNOwdbZ+PkcA5kLXEE3U0RKkNbabj07261w==", "dev": true, "license": "MIT" }, "node_modules/ignore": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-async-function": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-bigint": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { "version": "2.16.2", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-data-view": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-document.all": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.4", "generator-function": "^2.0.0", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true, "license": "MIT" }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-path-inside": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "*" } }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakref": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.3" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/istanbul-lib-report/node_modules/semver": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-reports": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/iterator.prototype": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/puzrin" }, { "type": "github", "url": "https://github.com/sponsors/nodeca" } ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { "node": ">=6" } }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/json-with-bigint": { "version": "3.5.12", "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.12.tgz", "integrity": "sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w==", "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" ], "license": "MIT" }, "node_modules/jsonstream-next": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonstream-next/-/jsonstream-next-3.0.0.tgz", "integrity": "sha512-aAi6oPhdt7BKyQn1SrIIGZBt0ukKuOUE1qV6kJ3GgioSOYzsRc8z9Hfr1BVmacA/jLe9nARfmgMGgn68BqIAgg==", "dev": true, "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through2": "^4.0.2" }, "bin": { "jsonstream-next": "bin.js" }, "engines": { "node": ">=10" } }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, "node_modules/junk": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "dev": true, "license": "MIT", "engines": { "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/just-extend": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", "dev": true, "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/lightningcss": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", "dev": true, "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" }, "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "node_modules/lightningcss-android-arm64": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", "cpu": [ "arm64" ], "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "android" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-darwin-arm64": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", "cpu": [ "arm64" ], "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-darwin-x64": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", "cpu": [ "x64" ], "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-freebsd-x64": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", "cpu": [ "x64" ], "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "freebsd" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-linux-arm-gnueabihf": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", "cpu": [ "arm" ], "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-linux-arm64-gnu": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", "cpu": [ "arm64" ], "dev": true, "libc": [ "glibc" ], "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-linux-arm64-musl": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", "cpu": [ "arm64" ], "dev": true, "libc": [ "musl" ], "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-linux-x64-gnu": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", "cpu": [ "x64" ], "dev": true, "libc": [ "glibc" ], "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-linux-x64-musl": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", "cpu": [ "x64" ], "dev": true, "libc": [ "musl" ], "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-win32-arm64-msvc": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", "cpu": [ "arm64" ], "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "win32" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-win32-x64-msvc": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", "cpu": [ "x64" ], "dev": true, "license": "MPL-2.0", "optional": true, "os": [ "win32" ], "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/lint-staged": { "version": "17.3.0", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.3.0.tgz", "integrity": "sha512-woZS3vNe3UKqBaLPvbLOtKRY4tLANpWQhom12MGWqC8Mh1lCOO+WgSwmX2amjJAqTY9BkXYW87fCUH5H9Ph6xw==", "dev": true, "license": "MIT", "dependencies": { "picomatch": "^4.0.5", "string-argv": "^0.3.2", "tinyexec": "^1.2.4" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { "node": ">=22.22.1" }, "funding": { "url": "https://opencollective.com/lint-staged" }, "optionalDependencies": { "yaml": "^2.9.0" } }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/magicast": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz", "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "source-map-js": "^1.2.1" } }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "license": "MIT", "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" }, "engines": { "node": ">=6" } }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/make-synchronized": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/make-synchronized/-/make-synchronized-0.8.0.tgz", "integrity": "sha512-DZu4lwc0ffoFz581BSQa/BJl+1ZqIkoRQ+VejMlH0VrP4E86StAODnZujZ4sepumQj8rcP7wUnUBGM8Gu+zKUA==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/fisker/make-synchronized?sponsor=1" } }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/meow": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/meow/-/meow-14.1.0.tgz", "integrity": "sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==", "dev": true, "license": "MIT", "engines": { "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/mime": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "dev": true, "funding": [ "https://github.com/sponsors/broofa" ], "license": "MIT", "bin": { "mime": "bin/cli.js" }, "engines": { "node": ">=16" } }, "node_modules/minimatch": { "version": "10.2.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.8" }, "engines": { "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.20", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/neostandard": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/neostandard/-/neostandard-0.13.0.tgz", "integrity": "sha512-R3iglFr+Dla/8qFBqsMxBvcYBOgP6rAGw7uRHKMpM3bUP0wLDRzUstxtEI9RfEwn7xszE/UUnh8H090Ru4Z52A==", "dev": true, "license": "MIT", "dependencies": { "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "@stylistic/eslint-plugin": "2.11.0", "eslint-plugin-n": "^17.23.2", "eslint-plugin-promise": "^7.2.1", "eslint-plugin-react": "^7.37.5", "find-up": "^8.0.0", "globals": "^17.3.0", "peowly": "^1.3.3", "typescript-eslint": "^8.56.0" }, "bin": { "neostandard": "cli.mjs" }, "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" }, "peerDependencies": { "eslint": "^9.0.0" } }, "node_modules/neostandard/node_modules/find-up": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-8.0.0.tgz", "integrity": "sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==", "dev": true, "license": "MIT", "dependencies": { "locate-path": "^8.0.0", "unicorn-magic": "^0.3.0" }, "engines": { "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/neostandard/node_modules/globals": { "version": "17.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-17.11.0.tgz", "integrity": "sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/neostandard/node_modules/locate-path": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", "integrity": "sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==", "dev": true, "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, "engines": { "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/neostandard/node_modules/p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/neostandard/node_modules/p-locate": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/neostandard/node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/neostandard/node_modules/yocto-queue": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nise": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.5.tgz", "integrity": "sha512-SnRDPDBjxZZoU2n0+gzzLtSvo1OZo7j6jnbXsoh3AFxEGhaFU7ZF0TmefuKERq79wxR2U+MPn7ArW+Tl+clC3A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", "@sinonjs/fake-timers": "^15.1.1", "just-extend": "^6.2.0", "path-to-regexp": "^8.3.0" } }, "node_modules/node-exports-info": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz", "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==", "dev": true, "license": "MIT", "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/node-releases": { "version": "2.0.53", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.entries": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/obug": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", "https://opencollective.com/debug" ], "license": "MIT", "engines": { "node": ">=12.20.0" } }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/own-keys": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/p-event": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", "dev": true, "license": "MIT", "dependencies": { "p-timeout": "^6.1.2" }, "engines": { "node": ">=16.17" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-filter": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, "license": "MIT", "dependencies": { "p-map": "^7.0.1" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-timeout": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", "dev": true, "license": "MIT", "engines": { "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "11.5.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/path-to-regexp": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "dev": true, "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/peowly": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/peowly/-/peowly-1.3.3.tgz", "integrity": "sha512-5UmUtvuCv3KzBX2NuQw2uF28o0t8Eq4KkPRZfUCzJs+DiNVKw7OaYn29vNDgrt/Pggs23CPlSTqgzlhHJfpT0A==", "dev": true, "license": "MIT", "engines": { "node": ">=18.6.0", "typescript": ">=5.8" } }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pirates": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "license": "MIT", "dependencies": { "find-up": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { "version": "8.5.32", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.32.tgz", "integrity": "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "license": "MIT", "dependencies": { "nanoid": "^3.3.20", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "3.9.6", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", "dev": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "license": "MIT" }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, "license": "MIT" }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true, "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, "engines": { "node": ">=4" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpu-core": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" } }, "node_modules/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "dev": true, "license": "MIT" }, "node_modules/regjsparser": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/remove-markdown": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.6.4.tgz", "integrity": "sha512-BompiLClzjfh46irZmzv+1Q61jZYlKN3iq/hzae9EOUwf7ctr/5wpD4qwgn/FWDAYE18RORO7z/yr+HXZJCY8Q==", "dev": true, "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.22.12", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rimraf": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "glob": "^13.0.3", "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rolldown": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz", "integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==", "dev": true, "license": "MIT", "dependencies": { "@oxc-project/types": "=0.155.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { "rolldown": "bin/cli.mjs" }, "engines": { "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.15", "@rolldown/binding-android-arm64": "1.2.15", "@rolldown/binding-darwin-arm64": "1.2.15", "@rolldown/binding-darwin-x64": "1.2.15", "@rolldown/binding-freebsd-x64": "1.2.15", "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", "@rolldown/binding-linux-arm64-gnu": "1.2.15", "@rolldown/binding-linux-arm64-musl": "1.2.15", "@rolldown/binding-linux-ppc64-gnu": "1.2.15", "@rolldown/binding-linux-s390x-gnu": "1.2.15", "@rolldown/binding-linux-x64-gnu": "1.2.15", "@rolldown/binding-linux-x64-musl": "1.2.15", "@rolldown/binding-openharmony-arm64": "1.2.15", "@rolldown/binding-win32-arm64-msvc": "1.2.15", "@rolldown/binding-win32-x64-msvc": "1.2.15" } }, "node_modules/rollup": { "version": "4.62.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.9" }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", "@rollup/rollup-android-arm-eabi": "4.62.4", "@rollup/rollup-android-arm64": "4.62.4", "@rollup/rollup-darwin-arm64": "4.62.4", "@rollup/rollup-darwin-x64": "4.62.4", "@rollup/rollup-freebsd-arm64": "4.62.4", "@rollup/rollup-freebsd-x64": "4.62.4", "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", "@rollup/rollup-linux-arm-musleabihf": "4.62.4", "@rollup/rollup-linux-arm64-gnu": "4.62.4", "@rollup/rollup-linux-arm64-musl": "4.62.4", "@rollup/rollup-linux-loong64-gnu": "4.62.4", "@rollup/rollup-linux-loong64-musl": "4.62.4", "@rollup/rollup-linux-ppc64-gnu": "4.62.4", "@rollup/rollup-linux-ppc64-musl": "4.62.4", "@rollup/rollup-linux-riscv64-gnu": "4.62.4", "@rollup/rollup-linux-riscv64-musl": "4.62.4", "@rollup/rollup-linux-s390x-gnu": "4.62.4", "@rollup/rollup-linux-x64-gnu": "4.62.4", "@rollup/rollup-linux-x64-musl": "4.62.4", "@rollup/rollup-openbsd-x64": "4.62.4", "@rollup/rollup-openharmony-arm64": "4.62.4", "@rollup/rollup-win32-arm64-msvc": "4.62.4", "@rollup/rollup-win32-ia32-msvc": "4.62.4", "@rollup/rollup-win32-x64-gnu": "4.62.4", "@rollup/rollup-win32-x64-msvc": "4.62.4", "fsevents": "~2.3.2" } }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-array-concat": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "license": "MIT" }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/serialize-javascript": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.4.tgz", "integrity": "sha512-FqlEuoTq/zRmA4Lg6aOqyH3lCHbUtCB0bmHCeFniX2GBdDqMJM3FwdvEhlE5Pim1dlt2FfBdVPmUNNiGhhKqpw==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=20.0.0" } }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "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" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-proto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, "engines": { "node": ">=8" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel-list": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel-map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel-weakmap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, "node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "license": "MIT", "engines": { "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/smob": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz", "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" } }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, "node_modules/std-env": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz", "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==", "dev": true, "license": "MIT" }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.6.19" } }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.repeat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "node_modules/string.prototype.trim": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "has-property-descriptors": "^1.0.2", "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/tapable": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "dev": true, "license": "MIT", "engines": { "node": ">=6" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/terser": { "version": "5.50.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.50.0.tgz", "integrity": "sha512-CN9BVxWhgS/hRxtUMjtC2uRWSTcSfQFHMDWma6sKKfIivCD91sM+FOPfvwoaRMqCSrUpe1nv3jDamd9eEQ4y+w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { "node": ">=10" } }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" }, "funding": { "url": "https://github.com/sponsors/SuperchupuDev" } }, "node_modules/tinyrainbow": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz", "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==", "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/treeify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "dev": true, "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/ts-api-utils": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { "node": ">=18.12" }, "peerDependencies": { "typescript": ">=4.8.4" } }, "node_modules/ts-declaration-location": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz", "integrity": "sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==", "dev": true, "funding": [ { "type": "ko-fi", "url": "https://ko-fi.com/rebeccastevens" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/ts-declaration-location" } ], "license": "BSD-3-Clause", "dependencies": { "picomatch": "^4.0.2" }, "peerDependencies": { "typescript": ">=4.0.0" } }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-length": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "possible-typed-array-names": "^1.1.0", "reflect.getprototypeof": "^1.0.10" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=14.17" } }, "node_modules/typescript-eslint": { "version": "8.67.0", "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.67.0.tgz", "integrity": "sha512-S2udFs8tCKEKffuJ4TB1idGUZiXdCPGi3IPBGWXarbLQ5UPXORV8QEVzJ4gCRduURMb5EkpNCdjbk0eDIuI8Yg==", "dev": true, "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "8.67.0", "@typescript-eslint/parser": "8.67.0", "@typescript-eslint/typescript-estree": "8.67.0", "@typescript-eslint/utils": "8.67.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/undici-types": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", "dev": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicorn-magic": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, "license": "MIT", "engines": { "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/universal-user-agent": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", "dev": true, "license": "ISC" }, "node_modules/update-browserslist-db": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" } }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/vite": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.7", "postcss": "^8.5.30", "rolldown": "~1.2.14", "tinyglobby": "^0.2.17" }, "bin": { "vite": "bin/vite.js" }, "engines": { "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.7.1 || ^0.8.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, "@vitejs/devtools": { "optional": true }, "esbuild": { "optional": true }, "jiti": { "optional": true }, "less": { "optional": true }, "sass": { "optional": true }, "sass-embedded": { "optional": true }, "stylus": { "optional": true }, "sugarss": { "optional": true }, "terser": { "optional": true }, "tsx": { "optional": true }, "yaml": { "optional": true } } }, "node_modules/vitest": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.12.tgz", "integrity": "sha512-5eWdz2yb3ajxWF3C8C4TjkXl7FGm3n2E/VlazALrQHzK7nYMSGFnCZto0bbPNl77AwkOZVLk0YnBAejUu0NiWA==", "dev": true, "license": "MIT", "dependencies": { "@vitest/expect": "4.1.12", "@vitest/mocker": "4.1.12", "@vitest/pretty-format": "4.1.12", "@vitest/runner": "4.1.12", "@vitest/snapshot": "4.1.12", "@vitest/spy": "4.1.12", "@vitest/utils": "4.1.12", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "vitest.mjs" }, "engines": { "node": "^20.0.0 || ^22.0.0 || >=24.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.12", "@vitest/browser-preview": "4.1.12", "@vitest/browser-webdriverio": "^4.1.11", "@vitest/coverage-istanbul": "4.1.12", "@vitest/coverage-v8": "4.1.12", "@vitest/ui": "4.1.12", "happy-dom": "*", "jsdom": "*", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, "@opentelemetry/api": { "optional": true }, "@types/node": { "optional": true }, "@vitest/browser-playwright": { "optional": true }, "@vitest/browser-preview": { "optional": true }, "@vitest/browser-webdriverio": { "optional": true }, "@vitest/coverage-istanbul": { "optional": true }, "@vitest/coverage-v8": { "optional": true }, "@vitest/ui": { "optional": true }, "happy-dom": { "optional": true }, "jsdom": { "optional": true }, "vite": { "optional": false } } }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/which-boxed-primitive": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { "version": "1.1.22", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" }, "engines": { "node": ">=8" } }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/workerpool": { "version": "9.3.4", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/yaml": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, "license": "ISC", "optional": true, "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" }, "funding": { "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { "version": "16.2.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.2.tgz", "integrity": "sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==", "dev": true, "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } } } } i18next-i18next-db698b1/package.json000066400000000000000000000075071527173754700172520ustar00rootroot00000000000000{ "name": "i18next", "version": "26.7.1", "description": "i18next internationalization framework", "main": "./dist/cjs/i18next.js", "module": "./dist/esm/i18next.js", "types": "./index.d.ts", "files": [ "dist", "index.js", "index.d.ts", "index.d.mts", "typescript", "i18next.js", "i18next.min.js" ], "exports": { "./package.json": "./package.json", ".": { "import": { "types": "./index.d.mts", "default": "./dist/esm/i18next.js" }, "require": { "types": "./index.d.ts", "default": "./dist/cjs/i18next.js" } } }, "keywords": [ "i18next", "internationalization", "i18n", "translation", "localization", "l10n", "globalization", "gettext" ], "homepage": "https://www.i18next.com", "bugs": "https://github.com/i18next/i18next/issues", "repository": { "type": "git", "url": "https://github.com/i18next/i18next.git" }, "funding": [ { "type": "individual", "url": "https://www.locize.com/i18next" }, { "type": "individual", "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" }, { "type": "individual", "url": "https://www.locize.com" } ], "peerDependencies": { "typescript": "^5 || ^6 || ^7" }, "peerDependenciesMeta": { "typescript": { "optional": true } }, "devDependencies": { "@arktype/attest": "^0.56.3", "@babel/core": "^7.29.0", "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-modules-commonjs": "^7.29.0", "@babel/preset-env": "^7.29.0", "@babel/preset-react": "^7.29.0", "@babel/register": "^7.29.0", "@rollup/plugin-babel": "^7.1.0", "@rollup/plugin-commonjs": "^29.0.3", "@rollup/plugin-node-resolve": "^16.0.3", "@rollup/plugin-terser": "^1.0.0", "@types/node": "^26.2.0", "@typescript-eslint/eslint-plugin": "^8.67.0", "@typescript-eslint/parser": "^8.67.0", "@vitest/coverage-v8": "4.1.12", "babelify": "^10.0.0", "cpy-cli": "^7.0.0", "eslint": "9.39.4", "gh-release": "^8.1.0", "husky": "^9.1.7", "i18next-browser-languagedetector": "^8.2.1", "i18next-fs-backend": "^2.6.7", "i18next-http-backend": "^4.0.6", "i18next-localstorage-cache": "^1.1.1", "i18next-sprintf-postprocessor": "^0.2.2", "lint-staged": "^17.3.0", "neostandard": "^0.13.0", "nise": "6.1.5", "prettier": "^3.9.6", "rimraf": "^6.1.3", "rollup": "^4.62.4", "typescript": "^6.0.3", "typescript-eslint": "^8.67.0", "vitest": "4.1.12" }, "scripts": { "lint": "eslint src typescript test \"./*.{ts,mts,mjs}\"", "format": "prettier \"{,**/}*.{ts,tsx,mts,js,mjs,json,md}\" --check", "format:fix": "prettier \"{,**/}*.{ts,tsx,mts,js,mjs,json,md}\" --write", "test": "vitest --run", "test:coverage": "vitest --coverage --run", "test:runtime": "vitest --project runtime", "test:compatibility": "vitest --project compatibility", "test:typescript": "vitest --config vitest.workspace.typescript.mts", "test:local": "vitest --config vitest.workspace.local.mts", "build": "rimraf dist && rollup -c && echo '{\"type\":\"module\"}' > dist/esm/package.json && cpy \"./dist/umd/*.js\" ./", "fix_dist_package": "node -e 'console.log(`{\"type\":\"module\",\"version\":\"${process.env.npm_package_version}\"}`)' > dist/esm/package.json", "preversion": "npm run test && npm run build && git push", "postversion": "npm run fix_dist_package && git push && git push --tags && npm run release", "prepare": "husky", "release": "gh-release" }, "author": "Jan Mühlemann (https://github.com/jamuhl)", "license": "MIT", "lint-staged": { "*": "prettier --write --ignore-unknown" } } i18next-i18next-db698b1/rollup.config.mjs000066400000000000000000000022311527173754700202450ustar00rootroot00000000000000import babel from '@rollup/plugin-babel'; import nodeResolve from '@rollup/plugin-node-resolve'; import terser from '@rollup/plugin-terser'; import { readFileSync } from 'fs'; const pkg = JSON.parse(readFileSync(new URL('./package.json', import.meta.url))); const babelOptions = { exclude: /node_modules/, babelHelpers: 'bundled', comments: false, }; const input = './src/index.js'; const inputCjs = './src/index.cjs'; const name = 'i18next'; // check relative and absolute paths for windows and unix const external = (id) => !id.startsWith('.') && !id.startsWith('/') && !id.includes(':'); export default [ { input: inputCjs, output: { format: 'cjs', file: pkg.main }, external, plugins: [babel(babelOptions)], }, { input, output: { format: 'esm', file: pkg.module }, external, plugins: [babel(babelOptions)], }, { input: inputCjs, output: { format: 'umd', name, file: `dist/umd/${name}.js` }, plugins: [babel(babelOptions), nodeResolve()], }, { input: inputCjs, output: { format: 'umd', name, file: `dist/umd/${name}.min.js` }, plugins: [babel(babelOptions), nodeResolve(), terser()], }, ]; i18next-i18next-db698b1/sample.html000066400000000000000000000030641527173754700171250ustar00rootroot00000000000000
open console
i18next-i18next-db698b1/src/000077500000000000000000000000001527173754700155425ustar00rootroot00000000000000i18next-i18next-db698b1/src/BackendConnector.js000066400000000000000000000237301527173754700213070ustar00rootroot00000000000000import { pushPath, isString, callbackApiOf } from './utils.js'; import baseLogger from './logger.js'; import EventEmitter from './EventEmitter.js'; const removePending = (q, name) => { if (q.pending[name] !== undefined) { delete q.pending[name]; q.pendingCount--; } }; class Connector extends EventEmitter { constructor(backend, store, services, options = {}) { super(); this.backend = backend; this.store = store; this.services = services; this.languageUtils = services.languageUtils; this.options = options; this.logger = baseLogger.create('backendConnector'); this.waitingReads = []; this.maxParallelReads = options.maxParallelReads || 10; this.readingCalls = 0; this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5; this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350; this.state = {}; this.queue = []; this.backend?.init?.(services, options.backend, options); this.callbackApi = callbackApiOf(this.backend); if ( this.backend && this.callbackApi === undefined && (this.backend.read || this.backend.create) ) { this.logger.deprecate( 'backend: set callbackApi to declare the calling convention (true: read(language, namespace, callback) and create(languages, namespace, key, fallbackValue, callback, options); false: both return a promise or a value); guessing it from the number of parameters is deprecated', ); } } queueLoad(languages, namespaces, options, callback) { // find what needs to be loaded const toLoad = {}; const pending = {}; const toLoadLanguages = {}; const toLoadNamespaces = {}; languages.forEach((lng) => { let hasAllNamespaces = true; namespaces.forEach((ns) => { const name = `${lng}|${ns}`; if (!options.reload && this.store.hasResourceBundle(lng, ns)) { this.state[name] = 2; // loaded } else if (!options.reload && this.state[name] < 0) { // nothing to do for err; a reload tries again } else if (this.state[name] === 1) { if (pending[name] === undefined) pending[name] = true; } else { this.state[name] = 1; // pending hasAllNamespaces = false; if (pending[name] === undefined) pending[name] = true; if (toLoad[name] === undefined) toLoad[name] = true; if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true; } }); if (!hasAllNamespaces) toLoadLanguages[lng] = true; }); if (Object.keys(toLoad).length || Object.keys(pending).length) { this.queue.push({ pending, pendingCount: Object.keys(pending).length, loaded: {}, errors: [], callback, }); } return { toLoad: Object.keys(toLoad), pending: Object.keys(pending), toLoadLanguages: Object.keys(toLoadLanguages), toLoadNamespaces: Object.keys(toLoadNamespaces), }; } loaded(name, err, data) { const s = name.split('|'); const lng = s[0]; const ns = s[1]; if (err) this.emit('failedLoading', lng, ns, err); if (!err && data) { this.store.addResourceBundle(lng, ns, data, undefined, undefined, { skipCopy: true }); } // set loaded this.state[name] = err ? -1 : 2; if (err && data) this.state[name] = 0; // consolidated loading done in this run - only emit once for a loaded namespace const loaded = {}; // callback if ready this.queue.forEach((q) => { pushPath(q.loaded, [lng], ns); removePending(q, name); if (err) q.errors.push(err); if (q.pendingCount === 0 && !q.done) { // only do once per loaded -> this.emit('loaded', q.loaded); Object.keys(q.loaded).forEach((l) => { if (!loaded[l]) loaded[l] = {}; const loadedKeys = q.loaded[l]; if (loadedKeys.length) { loadedKeys.forEach((n) => { if (loaded[l][n] === undefined) loaded[l][n] = true; }); } }); q.done = true; if (q.errors.length) { q.callback(q.errors); } else { q.callback(); } } }); // emit consolidated loaded event this.emit('loaded', loaded); // remove done load requests this.queue = this.queue.filter((q) => !q.done); } read(lng, ns, fcName, tried = 0, wait = this.retryTimeout, callback) { if (!lng.length) return callback(null, {}); // noting to load // Limit parallelism of calls to backend // This is needed to prevent trying to open thousands of // sockets or file descriptors, which can cause failures // and actually make the entire process take longer. if (this.readingCalls >= this.maxParallelReads) { this.waitingReads.push({ lng, ns, fcName, tried, wait, callback }); return; } this.readingCalls++; const resolver = (err, data) => { this.readingCalls--; if (this.waitingReads.length > 0) { const next = this.waitingReads.shift(); this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback); } if (err && data /* = retryFlag */ && tried < this.maxRetries) { setTimeout(() => { this.read(lng, ns, fcName, tried + 1, wait * 2, callback); }, wait); return; } callback(err, data); }; const fc = this.backend[fcName].bind(this.backend); if (this.callbackApi === false || (this.callbackApi === undefined && fc.length === 2)) { // no callback try { const r = fc(lng, ns); if (r && typeof r.then === 'function') { // promise r.then((data) => resolver(null, data)).catch(resolver); } else { // sync resolver(null, r); } } catch (err) { resolver(err); } return; } // normal with callback return fc(lng, ns, resolver); } prepareLoading(languages, namespaces, options = {}, callback) { if (!this.backend) { this.logger.warn('No backend was added via i18next.use. Will not load resources.'); return callback && callback(); } if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages); if (isString(namespaces)) namespaces = [namespaces]; const toLoad = this.queueLoad(languages, namespaces, options, callback); if (!toLoad.toLoad.length) { if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now return null; // pendings will trigger callback } toLoad.toLoad.forEach((name) => { this.loadOne(name); }); } load(languages, namespaces, callback) { this.prepareLoading(languages, namespaces, {}, callback); } reload(languages, namespaces, callback) { this.prepareLoading(languages, namespaces, { reload: true }, callback); } // v27 defaults to fallbackLng: false, so `dev` is no longer requested unless set noticeDevFallback(lng) { if (lng !== 'dev' || !this.devIsDefaultFallback) return; this.logger.once( 'dev', 'warn', "language 'dev' is requested because fallbackLng is not set (its default is ['dev']); i18next v27 defaults to fallbackLng: false and loads and saves missing keys in the requested language instead. Set fallbackLng to your source language, or to 'dev' to keep this behavior", ); } loadOne(name, prefix = '') { const s = name.split('|'); const lng = s[0]; const ns = s[1]; this.noticeDevFallback(lng); this.read(lng, ns, 'read', undefined, undefined, (err, data) => { if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err); if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data); this.loaded(name, err, data); }); } // hasLoadedNamespace: the check of the calling instance; the connector (and its services) is shared with all clones, // so a direct call without it checks the newest clone, or the instance that created the connector saveMissing( languages, namespace, key, fallbackValue, isUpdate, options = {}, clb = () => {}, hasLoadedNamespace = this.newestCloneHasLoadedNamespace || this.services?.utils?.hasLoadedNamespace, ) { if (hasLoadedNamespace && !hasLoadedNamespace(namespace)) { this.logger.warn( `did not save key "${key}" as the namespace "${namespace}" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!', ); return; } // ignore non valid keys if (key === undefined || key === null || key === '') return; if (this.backend?.create) { languages?.forEach?.((l) => this.noticeDevFallback(l)); const opts = { ...options, isUpdate, }; const fc = this.backend.create.bind(this.backend); if (this.callbackApi === false || (this.callbackApi === undefined && fc.length < 6)) { // no callback try { let r; if (this.callbackApi === false || fc.length === 5) { // future callback-less api for i18next-locize-backend r = fc(languages, namespace, key, fallbackValue, opts); } else { r = fc(languages, namespace, key, fallbackValue); } if (r && typeof r.then === 'function') { // promise r.then((data) => clb(null, data)).catch(clb); } else { // sync clb(null, r); } } catch (err) { clb(err); } } else { // normal with callback fc(languages, namespace, key, fallbackValue, clb /* unused callback */, opts); } } // write to store to avoid resending if (!languages || !languages[0]) return; this.store.addResource(languages[0], namespace, key, fallbackValue); } } export default Connector; i18next-i18next-db698b1/src/EventEmitter.js000066400000000000000000000036131527173754700205160ustar00rootroot00000000000000class EventEmitter { constructor() { // This is an Object containing Maps: // // { [event: string]: Map } // // We use a Map for O(1) insertion/deletion and because it can have functions as keys. // // We keep track of numTimesAdded (the number of times it was added) because if you attach the same listener twice, // we should actually call it twice for each emitted event. this.observers = {}; } on(events, listener) { events.split(' ').forEach((event) => { if (!this.observers[event]) this.observers[event] = new Map(); const numListeners = this.observers[event].get(listener) || 0; this.observers[event].set(listener, numListeners + 1); }); return this; } off(events, listener) { // like on(), a string lists events separated by spaces; anything else is looked up as it is (typeof events === 'string' ? events.split(' ') : [events]).forEach((event) => { if (!this.observers[event]) return; if (!listener) { delete this.observers[event]; return; } this.observers[event].delete(listener); }); } once(event, listener) { const wrapper = (...args) => { listener(...args); this.off(event, wrapper); }; this.on(event, wrapper); return this; } emit(event, ...args) { if (this.observers[event]) { const cloned = Array.from(this.observers[event].entries()); cloned.forEach(([observer, numTimesAdded]) => { for (let i = 0; i < numTimesAdded; i++) { observer(...args); } }); } if (this.observers['*']) { const cloned = Array.from(this.observers['*'].entries()); cloned.forEach(([observer, numTimesAdded]) => { for (let i = 0; i < numTimesAdded; i++) { observer(event, ...args); } }); } } } export default EventEmitter; i18next-i18next-db698b1/src/Formatter.js000066400000000000000000000116341527173754700200500ustar00rootroot00000000000000import baseLogger from './logger.js'; import { getCleanedCode } from './utils.js'; const parseFormatStr = (formatStr) => { let formatName = formatStr.toLowerCase().trim(); const formatOptions = {}; if (formatStr.includes('(')) { const p = formatStr.split('('); formatName = p[0].toLowerCase().trim(); const optStr = p[1].slice(0, -1); // extra for currency if (formatName === 'currency' && !optStr.includes(':')) { if (!formatOptions.currency) formatOptions.currency = optStr.trim(); } else if (formatName === 'relativetime' && !optStr.includes(':')) { if (!formatOptions.range) formatOptions.range = optStr.trim(); } else { const opts = optStr.split(';'); opts.forEach((opt) => { if (opt) { const [key, ...rest] = opt.split(':'); const val = rest .join(':') .trim() .replace(/^'+|'+$/g, ''); // trim and replace '' const trimmedKey = key.trim(); if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val; if (val === 'false') formatOptions[trimmedKey] = false; if (val === 'true') formatOptions[trimmedKey] = true; if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10); } }); } } return { formatName, formatOptions, }; }; const createCachedFormatter = (fn) => { const cache = {}; return (v, l, o) => { let optForCache = o; // this cache optimization will only work for keys having 1 interpolated value if ( o && o.interpolationkey && o.formatParams && o.formatParams[o.interpolationkey] && o[o.interpolationkey] ) { optForCache = { ...optForCache, [o.interpolationkey]: undefined, }; } let key; try { key = l + JSON.stringify(optForCache); } catch (e) { // options are not serializable (e.g. BigInt or circular values): format without the cache return fn(getCleanedCode(l), o)(v); } let frm = cache[key]; if (!frm) { frm = fn(getCleanedCode(l), o); cache[key] = frm; } return frm(v); }; }; const createNonCachedFormatter = (fn) => (v, l, o) => fn(getCleanedCode(l), o)(v); class Formatter { constructor(options = {}) { this.logger = baseLogger.create('formatter'); this.options = options; this.init(options); } init(services, options = { interpolation: {} }) { this.formatSeparator = options.interpolation.formatSeparator || ','; const cf = options.cacheInBuiltFormats ? createCachedFormatter : createNonCachedFormatter; this.formats = { number: cf((lng, opt) => { const formatter = new Intl.NumberFormat(lng, { ...opt }); return (val) => formatter.format(val); }), currency: cf((lng, opt) => { const formatter = new Intl.NumberFormat(lng, { ...opt, style: 'currency' }); return (val) => formatter.format(val); }), datetime: cf((lng, opt) => { const formatter = new Intl.DateTimeFormat(lng, { ...opt }); return (val) => formatter.format(val); }), relativetime: cf((lng, opt) => { const formatter = new Intl.RelativeTimeFormat(lng, { ...opt }); return (val) => formatter.format(val, opt.range || 'day'); }), list: cf((lng, opt) => { const formatter = new Intl.ListFormat(lng, { ...opt }); return (val) => formatter.format(val); }), }; } add(name, fc) { this.formats[name.toLowerCase().trim()] = fc; } addCached(name, fc) { this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc); } format(value, format, lng, options = {}) { if (!format) return value; if (value == null) return value; const rawFormats = format.split(this.formatSeparator); const formats = []; for (let i = 0; i < rawFormats.length; i++) { let f = rawFormats[i]; while (f.indexOf('(') > -1 && !f.includes(')') && i + 1 < rawFormats.length) { f = `${f}${this.formatSeparator}${rawFormats[++i]}`; } formats.push(f); } const result = formats.reduce((mem, f) => { const { formatName, formatOptions } = parseFormatStr(f); if (this.formats[formatName]) { let formatted = mem; try { // options passed explicit for that formatted value const valOptions = options?.formatParams?.[options.interpolationkey] || {}; // language const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng; formatted = this.formats[formatName](mem, l, { ...formatOptions, ...options, ...valOptions, }); } catch (error) { this.logger.warn(error); } return formatted; } else { this.logger.warn(`there was no format function for ${formatName}`); } return mem; }, value); return result; } } export default Formatter; i18next-i18next-db698b1/src/Interpolator.js000066400000000000000000000350311527173754700205640ustar00rootroot00000000000000import { getPathWithDefaults, deepFind, escape as utilsEscape, regexEscape, makeString, isString, } from './utils.js'; import baseLogger from './logger.js'; const deepFindWithDefaults = ( data, defaultData, key, keySeparator = '.', ignoreJSONStructure = true, ) => { let path = getPathWithDefaults(data, defaultData, key); // false, 0 and '' are values; null still falls back to a flat key if (path == null && ignoreJSONStructure && isString(key)) { path = deepFind(data, key, keySeparator); if (path === undefined) path = deepFind(defaultData, key, keySeparator); } return path; }; class Interpolator { constructor(options = {}) { this.logger = baseLogger.create('interpolator'); this.options = options; this.format = options?.interpolation?.format || ((value) => value); this.init(options); } init(options = {}) { if (!options.interpolation) options.interpolation = { escapeValue: true }; const { escape, escapeValue, useRawValueToEscape, prefix, prefixEscaped, suffix, suffixEscaped, formatSeparator, unescapeSuffix, unescapePrefix, nestingPrefix, nestingPrefixEscaped, nestingSuffix, nestingSuffixEscaped, nestingOptionsSeparator, maxReplaces, alwaysFormat, } = options.interpolation; // init() runs on every t() call with interpolation options, so the names are only built when needed if (prefixEscaped || suffixEscaped || nestingPrefixEscaped || nestingSuffixEscaped) { const names = Object.entries({ prefixEscaped, suffixEscaped, nestingPrefixEscaped, nestingSuffixEscaped, }) .filter(([, v]) => v) .map(([k]) => k); this.logger.once( names.join(), 'deprecate', `interpolation.${names.join(', interpolation.')}: the regex-escaped delimiter options are removed in v27; pass the literal delimiters as prefix, suffix, nestingPrefix and nestingSuffix`, ); } this.escape = escape !== undefined ? escape : utilsEscape; this.escapeValue = escapeValue !== undefined ? escapeValue : true; this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false; this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{'; this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}'; this.formatSeparator = formatSeparator || ','; this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix ? regexEscape(unescapePrefix) : '-'; this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix ? regexEscape(unescapeSuffix) : ''; this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t('); this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')'); this.nestingOptionsSeparator = nestingOptionsSeparator || ','; this.maxReplaces = maxReplaces || 1000; this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false; // the regexp this.resetRegExp(); } reset() { if (this.options) this.init(this.options); } resetRegExp() { const getOrResetRegExp = (existingRegExp, pattern) => { if (existingRegExp?.source === pattern) { existingRegExp.lastIndex = 0; return existingRegExp; } return new RegExp(pattern, 'g'); }; this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`); this.regexpUnescape = getOrResetRegExp( this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`, ); // Every alternative starts with a different char (plain / " / ' / "("), so there is // only one way to split the input. Overlapping alternatives (e.g. `[^()"']+` inside // `*?`) backtrack exponentially on an unclosed `$t(` (ReDoS). this.nestingRegexp = getOrResetRegExp( this.nestingRegexp, `${this.nestingPrefix}((?:[^()"']|"[^"]*"|'[^']*'|\\((?:[^()"']|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`, ); } interpolate(str, data, lng, options) { let match; let value; let replaces; const original = str; const defaultData = (this.options && this.options.interpolation && this.options.interpolation.defaultVariables) || {}; const handleFormat = (key) => { if (!key.includes(this.formatSeparator)) { const path = deepFindWithDefaults( data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure, ); return this.alwaysFormat ? this.format(path, undefined, lng, { ...options, ...data, interpolationkey: key }) : path; } const p = key.split(this.formatSeparator); const k = p.shift().trim(); const f = p.join(this.formatSeparator).trim(); return this.format( deepFindWithDefaults( data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure, ), f, lng, { ...options, ...data, interpolationkey: k, }, ); }; this.resetRegExp(); // Security warning: when escapeValue is false AND the translation embeds // interpolation placeholders inside a $t() nesting options block (i.e. // $t(key, { ... "{{var}}" ... })), attacker-controlled string values that // contain `"` can break out of the JSON string literal and inject extra // nesting options (e.g. redirect lng/ns). This is safe under the default // escapeValue: true, where HTML-escaping neutralises the quote before // JSON.parse. See CHANGELOG entry for 26.0.6 and the security docs. if (!this.escapeValue && typeof str === 'string' && /\$t\([^)]*\{[^}]*\{\{/.test(str)) { this.logger.warn( 'nesting options string contains interpolated variables with escapeValue: false — ' + 'if any of those values are attacker-controlled they can inject additional ' + 'nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing ' + 'it to t(), or keep escapeValue: true.', ); } const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler; const skipOnVariables = options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables; const todos = [ { // unescape if has unescapePrefix/Suffix regex: this.regexpUnescape, safeValue: (val) => val, }, { // regular escape on demand regex: this.regexp, safeValue: (val) => { if (!this.escapeValue) return val; // v27 no longer escapes '/', which only changes the default escape. An instance with // escapeValue: false escapes only on request (react-i18next Trans forces it for one t() // call and decodes the entities after) if ( this.escape === utilsEscape && this.options?.interpolation?.escapeValue !== false && isString(val) && val.includes('/') ) { this.logger.once( '/', 'deprecate', "escapeValue renders '/' in a value as '/' today; from v27 the default escape leaves '/' as it is", ); } return this.escape(val); }, }, ]; // skipOnVariables: the escape pass skips the unescaped values, offset by its own edits. const unescapedValues = []; let shift = 0; todos.forEach((todo) => { replaces = 0; while ((match = todo.regex.exec(str))) { const at = match.index - shift; const written = unescapedValues.find(([start, end]) => at >= start && at < end); if (written) { todo.regex.lastIndex = written[1] + shift; continue; } const matchedVar = match[1].trim(); value = handleFormat(matchedVar); if (value === undefined) { if (typeof missingInterpolationHandler === 'function') { const temp = missingInterpolationHandler(str, match, options); value = isString(temp) ? temp : ''; } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) { value = ''; // undefined becomes empty string } else if (skipOnVariables) { // keyed by the placeholder text: both passes see an unescaped `{{- var}}`. // Checked here too, so a call without debug does not build the strings. if (this.logger.debug) { this.logger.once( `${original}\u0000${match[0]}`, 'warn', `missed to pass in variable ${matchedVar} for interpolating ${original}`, ); } value = match[0]; continue; // this makes sure it continues to detect others } else { this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`); value = ''; } } else if (!isString(value) && !this.useRawValueToEscape) { value = makeString(value); } // makeString: with useRawValueToEscape, `{{- var}}` and escapeValue: false pass the raw value. const safeValue = makeString(todo.safeValue(value)); // Sliced in at match.index: String.replace may hit a copy inside an earlier value. str = str.slice(0, match.index) + safeValue + str.slice(match.index + match[0].length); if (skipOnVariables) { if (todo.regex === this.regexpUnescape) { unescapedValues.push([match.index, match.index + safeValue.length]); } else { shift += safeValue.length - match[0].length; } todo.regex.lastIndex += safeValue.length; todo.regex.lastIndex -= match[0].length; } else { todo.regex.lastIndex = 0; } replaces++; if (replaces >= this.maxReplaces) { break; } } }); return str; } nest(str, fc, options = {}) { let match; let value; let clonedOptions; // if value is something like "myKey": "lorem $(anotherKey, { "count": {{aValueInOptions}} })" const handleHasOptions = (key, inheritedOptions) => { const sep = this.nestingOptionsSeparator; if (!key.includes(sep)) return key; const c = key.split(new RegExp(`${regexEscape(sep)}[ ]*{`)); let optionsString = `{${c[1]}`; key = c[0]; optionsString = this.interpolate(optionsString, clonedOptions); const matchedSingleQuotes = optionsString.match(/'/g); const matchedDoubleQuotes = optionsString.match(/"/g); if ( ((matchedSingleQuotes?.length ?? 0) % 2 === 0 && !matchedDoubleQuotes) || (matchedDoubleQuotes?.length ?? 0) % 2 !== 0 ) { optionsString = optionsString.replace(/'/g, '"'); } try { clonedOptions = JSON.parse(optionsString); if (inheritedOptions) clonedOptions = { ...inheritedOptions, ...clonedOptions }; } catch (e) { this.logger.warn(`failed parsing options string in nesting for key ${key}`, e); return `${key}${sep}${optionsString}`; } // assert we do not get a endless loop on interpolating defaultValue again and again if (clonedOptions.defaultValue && clonedOptions.defaultValue.includes(this.prefix)) delete clonedOptions.defaultValue; return key; }; // One pass over the original str with an own copy of the regexp. The nested lookups // (fc) reset the shared nestingRegexp, so the loop used to rescan from 0 after every // match: quadratic, and it nested again any `$t(...)` inside a resolved value (e.g. a // variable the nested lookup kept literal under skipOnVariables). const nestingRegexp = new RegExp(this.nestingRegexp); let out = ''; let lastEnd = 0; while ((match = nestingRegexp.exec(str))) { let formatters = []; clonedOptions = { ...options }; clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions; clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup delete clonedOptions.defaultValue; // assert we do not get a endless loop on interpolating defaultValue again and again /** * If there is more than one parameter (contains the format separator). E.g.: * - t(a, b) * - t(a, b, c) * * And those parameters are not dynamic values (parameters do not include curly braces). E.g.: * - Not t(a, { "key": "{{variable}}" }) * - Not t(a, b, {"keyA": "valueA", "keyB": "valueB"}) * * Since v25.3.0 also this is possible: https://github.com/i18next/i18next/pull/2325 */ const keyEndIndex = /{.*}/s.test(match[1]) ? match[1].lastIndexOf('}') + 1 : match[1].indexOf(this.formatSeparator); if (keyEndIndex !== -1) { formatters = match[1] .slice(keyEndIndex) .split(this.formatSeparator) .map((elem) => elem.trim()) .filter(Boolean); match[1] = match[1].slice(0, keyEndIndex); } value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions); // is only the nesting key (key1 = '$(key2)') return the value without stringify if (value && match[0] === str && !isString(value)) return value; // no string to include or empty if (!isString(value)) value = makeString(value); if (!value) { this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`); value = ''; } if (formatters.length) { value = formatters.reduce( (v, f) => this.format(v, f, options.lng, { ...options, interpolationkey: match[1].trim() }), value.trim(), ); } // Nested keys should not be escaped by default #854 // Sliced in, not String.replace, so `$&`, `$'`, "$`" and `$$` in the value stay literal. // makeString: a formatter in the nesting chain may have returned a non-string. out += str.slice(lastEnd, match.index) + makeString(value); lastEnd = nestingRegexp.lastIndex; this.regexp.lastIndex = 0; } // no match: str untouched (it may be a non-string) return lastEnd ? out + str.slice(lastEnd) : str; } } export default Interpolator; i18next-i18next-db698b1/src/LanguageUtils.js000066400000000000000000000162061527173754700206510ustar00rootroot00000000000000import baseLogger from './logger.js'; import { getCleanedCode, isString } from './utils.js'; class LanguageUtil { constructor(options) { this.options = options; this.supportedLngs = this.options.supportedLngs || false; this.logger = baseLogger.create('languageUtils'); this.resolveHierarchyCache = {}; } clearCache() { this.resolveHierarchyCache = {}; } getScriptPartFromCode(code) { code = getCleanedCode(code); if (!code || !code.includes('-')) return null; const p = code.split('-'); if (p.length === 2) return null; p.pop(); if (p[p.length - 1].toLowerCase() === 'x') return null; return this.formatLanguageCode(p.join('-')); } getLanguagePartFromCode(code) { code = getCleanedCode(code); if (!code || !code.includes('-')) return code; const p = code.split('-'); return this.formatLanguageCode(p[0]); } formatLanguageCode(code) { // http://www.iana.org/assignments/language-tags/language-tags.xhtml if (isString(code) && code.includes('-')) { let formattedCode; try { formattedCode = Intl.getCanonicalLocales(code)[0]; } catch (e) { /* fall through */ } if (formattedCode && this.options.lowerCaseLng) { formattedCode = formattedCode.toLowerCase(); } if (formattedCode) return formattedCode; if (this.options.lowerCaseLng) { return code.toLowerCase(); } return code; } const formatted = this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code; if (this.logger.debug && isString(code)) this.deprecateBareCode(code, formatted); return formatted; } // v27 canonicalizes codes without a region as it already does with one ('EN' -> 'en', 'iw' -> 'he') deprecateBareCode(code, formatted) { let v27; try { v27 = Intl.getCanonicalLocales(code)[0]; } catch (e) { return; // not BCP 47: v27 keeps it as it is } if (this.options.lowerCaseLng) v27 = v27.toLowerCase(); if (v27 === formatted) return; this.logger.once( code, 'deprecate', `language code '${code}' is used as '${formatted}'; i18next v27 canonicalizes it to '${v27}', use '${v27}' in lng, fallbackLng, supportedLngs and the resources`, ); } isSupportedCode(code) { if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) { code = this.getLanguagePartFromCode(code); } return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.includes(code); } getBestMatchFromCodes(codes) { if (!codes) return null; let found; // pick first supported code or if no restriction pick the first one (highest prio) codes.forEach((code) => { if (found) return; const cleanedLng = this.formatLanguageCode(code); if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng; }); // if we got no match in supportedLngs yet - check for similar locales // first de-CH --> de // second de-CH --> de-DE if (!found && this.options.supportedLngs) { codes.forEach((code) => { if (found) return; const lngScOnly = this.getScriptPartFromCode(code); if (this.isSupportedCode(lngScOnly)) return (found = lngScOnly); const lngOnly = this.getLanguagePartFromCode(code); if (this.isSupportedCode(lngOnly)) return (found = lngOnly); found = this.options.supportedLngs.find((supportedLng) => { if (supportedLng === lngOnly) return true; if (!supportedLng.includes('-') && !lngOnly.includes('-')) return false; if ( supportedLng.includes('-') && !lngOnly.includes('-') && supportedLng.slice(0, supportedLng.indexOf('-')) === lngOnly ) return true; return false; }); }); } // if nothing found, use fallbackLng if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0]; return found; } getFallbackCodes(fallbacks, code) { if (!fallbacks) return []; if (typeof fallbacks === 'function') fallbacks = fallbacks(code); if (isString(fallbacks)) fallbacks = [fallbacks]; if (Array.isArray(fallbacks)) return fallbacks; if (!code) return fallbacks.default || []; // assume we have an object defining fallbacks let found = fallbacks[code]; if (!found) found = fallbacks[this.getScriptPartFromCode(code)]; if (!found) found = fallbacks[this.formatLanguageCode(code)]; if (!found) found = fallbacks[this.getLanguagePartFromCode(code)]; if (!found) found = fallbacks.default; return found || []; } toResolveHierarchy(code, fallbackCode) { const fallbackLng = this.options.fallbackLng; // join so in-place array mutation (fallbackLng.push(...)) also invalidates, not only reassignment const fallbackLngKey = Array.isArray(fallbackLng) ? fallbackLng.join('|') : fallbackLng; if (fallbackLngKey !== this._cachedFallbackLng) { this.resolveHierarchyCache = {}; this._cachedFallbackLng = fallbackLngKey; } const hasCacheableFallback = fallbackCode === undefined || fallbackCode === false || isString(fallbackCode); const usesUncacheableOptionsFallback = fallbackCode === undefined && typeof this.options.fallbackLng === 'function'; const cacheable = isString(code) && hasCacheableFallback && !usesUncacheableOptionsFallback; let cacheKey = null; if (cacheable) { let fallbackCacheKey; if (fallbackCode === undefined) fallbackCacheKey = 'undefined'; else if (fallbackCode === false) fallbackCacheKey = 'boolean:false'; else fallbackCacheKey = `string:${fallbackCode}`; cacheKey = `${code.length}:${code}|${fallbackCacheKey}`; } if (cacheKey !== null) { const cached = this.resolveHierarchyCache[cacheKey]; if (cached !== undefined) return cached.slice(); } const fallbackCodes = this.getFallbackCodes( (fallbackCode === false ? [] : fallbackCode) || this.options.fallbackLng || [], code, ); const codes = []; const addCode = (c) => { if (!c) return; if (this.isSupportedCode(c)) { codes.push(c); } else { this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`); } }; if (isString(code) && (code.includes('-') || code.includes('_'))) { if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code)); if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code)); if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code)); } else if (isString(code)) { addCode(this.formatLanguageCode(code)); } fallbackCodes.forEach((fc) => { // compare the formatted code, so a fallback like 'de-ch' doesn't repeat 'de-CH' const formattedFc = this.formatLanguageCode(fc); if (!codes.includes(formattedFc)) addCode(formattedFc); }); if (cacheKey !== null) { this.resolveHierarchyCache[cacheKey] = codes; return codes.slice(); } return codes; } } export default LanguageUtil; i18next-i18next-db698b1/src/PluralResolver.js000066400000000000000000000052741527173754700210710ustar00rootroot00000000000000import baseLogger from './logger.js'; import { getCleanedCode } from './utils.js' const suffixesOrder = { zero: 0, one: 1, two: 2, few: 3, many: 4, other: 5, }; const dummyRule = { select: (count) => count === 1 ? 'one' : 'other', resolvedOptions: () => ({ pluralCategories: ['one', 'other'] }) }; class PluralResolver { constructor(languageUtils, options = {}) { this.languageUtils = languageUtils; this.options = options; this.logger = baseLogger.create('pluralResolver'); // Cache calls to Intl.PluralRules, since repeated calls can be slow in runtimes like React Native // and the memory usage difference is negligible this.pluralRulesCache = {}; } clearCache() { this.pluralRulesCache = {}; } getRule(code, options = {}) { const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code); const type = options.ordinal ? 'ordinal' : 'cardinal'; const cacheKey = JSON.stringify({ cleanedCode, type }); if (cacheKey in this.pluralRulesCache) { return this.pluralRulesCache[cacheKey]; } let rule; try { rule = new Intl.PluralRules(cleanedCode, { type }); } catch (err) { if (typeof Intl === 'undefined') { this.logger.error('No Intl support, please use an Intl polyfill!'); return dummyRule; } if (!code.match(/-|_/)) return dummyRule; const lngPart = this.languageUtils.getLanguagePartFromCode(code); rule = this.getRule(lngPart, options); } this.pluralRulesCache[cacheKey] = rule; return rule; } needsPlural(code, options = {}) { let rule = this.getRule(code, options); if (!rule) rule = this.getRule('dev', options); return rule?.resolvedOptions().pluralCategories.length > 1; } getPluralFormsOfKey(code, key, options = {}) { return this.getSuffixes(code, options).map((suffix) => `${key}${suffix}`); } getSuffixes(code, options = {}) { let rule = this.getRule(code, options); if (!rule) rule = this.getRule('dev', options); if (!rule) return []; return rule.resolvedOptions().pluralCategories .sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]) .map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`); } getSuffix(code, count, options = {}) { const rule = this.getRule(code, options); if (rule) { return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`; } this.logger.warn(`no plural rule found for: ${code}`); return this.getSuffix('dev', count, options); } } export default PluralResolver; i18next-i18next-db698b1/src/ResourceStore.js000066400000000000000000000124241527173754700207070ustar00rootroot00000000000000import EventEmitter from './EventEmitter.js'; import baseLogger from './logger.js'; import { getPath, deepFind, setPath, deepExtend, isString } from './utils.js'; // Bundles already seen with keys, shared across instances so SSR setups reusing the same // resources skip enumerating large bundles on every init (#2449). Only "non-empty" is cached: // no API removes single keys from a bundle, so a non-empty bundle stays non-empty. // ponytail: a bundle emptied by hand with `delete` on every key keeps counting as non-empty const nonEmptyBundles = new WeakSet(); class ResourceStore extends EventEmitter { constructor(data, options = { ns: ['translation'], defaultNS: 'translation' }) { super(); this.data = data || {}; this.options = options; this.logger = baseLogger.create('resourceStore'); if (this.options.keySeparator === undefined) { this.options.keySeparator = '.'; } if (this.options.ignoreJSONStructure === undefined) { this.options.ignoreJSONStructure = true; } } addNamespaces(ns) { if (!this.options.ns.includes(ns)) { this.options.ns.push(ns); } } removeNamespaces(ns) { const index = this.options.ns.indexOf(ns); if (index > -1) { this.options.ns.splice(index, 1); } } // the dotted-language form, getResource('en.translation.a.b') and friends, is removed in v27 deprecateDottedLng(method) { this.logger.once( method, 'deprecate', `${method}: a dotted language ('en.translation.key') that carries the namespace and key is removed in v27; pass language, namespace and key as separate arguments`, ); } getResource(lng, ns, key, options = {}) { const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure; let path; if (lng.includes('.')) { this.deprecateDottedLng('getResource'); path = lng.split('.'); } else { path = [lng, ns]; if (key) { if (Array.isArray(key)) { path.push(...key); } else if (isString(key) && keySeparator) { path.push(...key.split(keySeparator)); } else { path.push(key); } } } const result = getPath(this.data, path); // false, 0 and '' are values; null (not a valid lookup by default) still falls back to a flat key if (result == null && !ns && !key && lng.includes('.')) { lng = path[0]; ns = path[1]; key = path.slice(2).join('.'); } if (result != null || !ignoreJSONStructure || !isString(key)) return result; return deepFind(this.data?.[lng]?.[ns], key, keySeparator); } addResource(lng, ns, key, value, options = { silent: false }) { const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; let path = [lng, ns]; if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key); if (lng.includes('.')) { this.deprecateDottedLng('addResource'); path = lng.split('.'); value = ns; ns = path[1]; } this.addNamespaces(ns); setPath(this.data, path, value); if (!options.silent) this.emit('added', lng, ns, key, value); } addResources(lng, ns, resources, options = { silent: false }) { for (const m in resources) { if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], { silent: true }); } if (!options.silent) this.emit('added', lng, ns, resources); } addResourceBundle( lng, ns, resources, deep, overwrite, options = { silent: false, skipCopy: false }, ) { let path = [lng, ns]; if (lng.includes('.')) { this.deprecateDottedLng('addResourceBundle'); path = lng.split('.'); deep = resources; resources = ns; ns = path[1]; } this.addNamespaces(ns); let pack = getPath(this.data, path) || {}; if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources)); // make a copy to fix #2081 if (deep) { deepExtend(pack, resources, overwrite); } else { pack = { ...pack, ...resources }; } setPath(this.data, path, pack); if (!options.silent) this.emit('added', lng, ns, resources); } removeResourceBundle(lng, ns) { if (this.hasResourceBundle(lng, ns)) { delete this.data[lng][ns]; } this.removeNamespaces(ns); this.emit('removed', lng, ns); } hasResourceBundle(lng, ns) { return this.getResource(lng, ns) !== undefined; } getResourceBundle(lng, ns) { if (!ns) ns = this.options.defaultNS; return this.getResource(lng, ns); } getDataByLanguage(lng) { return this.data[lng]; } hasLanguageSomeTranslations(lng) { const data = this.getDataByLanguage(lng); const n = (data && Object.keys(data)) || []; return !!n.find((v) => { const bundle = data[v]; if (nonEmptyBundles.has(bundle)) return true; if (!bundle || Object.keys(bundle).length === 0) return false; if (typeof bundle === 'object') nonEmptyBundles.add(bundle); return true; }); } toJSON() { return this.data; } } export default ResourceStore; i18next-i18next-db698b1/src/Translator.js000066400000000000000000000553231527173754700202410ustar00rootroot00000000000000import baseLogger from './logger.js'; import EventEmitter from './EventEmitter.js'; import postProcessor from './postProcessor.js'; import { copy as utilsCopy, looksLikeObjectPath, isString } from './utils.js'; import keysFromSelector from './selector.js'; const shouldHandleAsObject = (res) => !isString(res) && typeof res !== 'boolean' && typeof res !== 'number'; class Translator extends EventEmitter { constructor(services, options = {}) { super(); utilsCopy( [ 'resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils', 'ownPostProcessors', ], services, this, ); this.options = options; if (this.options.keySeparator === undefined) { this.options.keySeparator = '.'; } this.logger = baseLogger.create('translator'); this.checkedLoadedFor = {}; } changeLanguage(lng) { if (lng) this.language = lng; } exists(key, o = { interpolation: {} }) { const opt = { ...o }; if (key == null) return false; const resolved = this.resolve(key, opt); // If no resource found, return false if (resolved?.res === undefined) return false; // Check if the resolved resource is an object const isObject = shouldHandleAsObject(resolved.res); // If returnObjects is explicitly set to false and the resource is an object, return false if (opt.returnObjects === false && isObject) { return false; } // Otherwise return true (resource exists) return true; } extractFromKey(key, opt) { let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator; if (nsSeparator === undefined) nsSeparator = ':'; const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator; let namespaces = opt.ns || this.options.defaultNS || []; const wouldCheckForNsInKey = nsSeparator && key.includes(nsSeparator); const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !opt.keySeparator && !this.options.userDefinedNsSeparator && !opt.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator); if (wouldCheckForNsInKey && !seemsNaturalLanguage) { const m = key.match(this.interpolator.nestingRegexp); if (m && m.length > 0) { return { key, namespaces: isString(namespaces) ? [namespaces] : namespaces, }; } const parts = key.split(nsSeparator); if ( nsSeparator !== keySeparator || (nsSeparator === keySeparator && this.options.ns.includes(parts[0])) ) namespaces = parts.shift(); key = parts.join(keySeparator); } return { key, namespaces: isString(namespaces) ? [namespaces] : namespaces, }; } translate(keys, o, lastKey) { let opt = typeof o === 'object' ? { ...o } : o; if (typeof opt !== 'object' && this.options.overloadTranslationOptionHandler) { opt = this.options.overloadTranslationOptionHandler(arguments); } if (typeof opt === 'object') opt = { ...opt }; if (!opt) opt = {}; // non valid keys handling if (keys == null /* || keys === '' */) return ''; if (typeof keys === 'function') keys = keysFromSelector(keys, { ...this.options, ...opt }); if (!Array.isArray(keys)) keys = [String(keys)]; keys = keys.map((k) => typeof k === 'function' ? keysFromSelector(k, { ...this.options, ...opt }) : String(k), ); const returnDetails = opt.returnDetails !== undefined ? opt.returnDetails : this.options.returnDetails; // separators const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator; // get namespace(s) const { key, namespaces } = this.extractFromKey(keys[keys.length - 1], opt); const namespace = namespaces[namespaces.length - 1]; let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator; if (nsSeparator === undefined) nsSeparator = ':'; // return key on CIMode const lng = opt.lng || this.language; const appendNamespaceToCIMode = opt.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode; if (lng?.toLowerCase() === 'cimode') { if (appendNamespaceToCIMode) { if (returnDetails) { return { res: `${namespace}${nsSeparator}${key}`, usedKey: key, exactUsedKey: key, usedLng: lng, usedNS: namespace, usedParams: this.getUsedParamsDetails(opt), }; } return `${namespace}${nsSeparator}${key}`; } if (returnDetails) { return { res: key, usedKey: key, exactUsedKey: key, usedLng: lng, usedNS: namespace, usedParams: this.getUsedParamsDetails(opt), }; } return key; } // resolve from store const resolved = this.resolve(keys, opt); let res = resolved?.res; const resUsedKey = resolved?.usedKey || key; const resExactUsedKey = resolved?.exactUsedKey || key; const noObject = ['[object Number]', '[object Function]', '[object RegExp]']; const joinArrays = opt.joinArrays !== undefined ? opt.joinArrays : this.options.joinArrays; // object const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject; const needsPluralHandling = opt.count !== undefined && !isString(opt.count); const hasDefaultValue = Translator.hasDefaultValue(opt); const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, opt) : ''; const defaultValueSuffixOrdinalFallback = opt.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, { ordinal: false }) : ''; const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0; const defaultValue = (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`]) || opt[`defaultValue${defaultValueSuffix}`] || opt[`defaultValue${defaultValueSuffixOrdinalFallback}`] || opt.defaultValue; let resForObjHndl = res; if (handleAsObjectInI18nFormat && !res && hasDefaultValue) { resForObjHndl = defaultValue; } const handleAsObject = shouldHandleAsObject(resForObjHndl); const resType = Object.prototype.toString.apply(resForObjHndl); if ( handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && !noObject.includes(resType) && !(isString(joinArrays) && Array.isArray(resForObjHndl)) ) { if (!opt.returnObjects && !this.options.returnObjects) { if (!this.options.returnedObjectHandler) { this.logger.warn('accessing an object - but returnObjects options is not enabled!'); // v27 returns the key here this.logger.once( 'returnedObject', 'deprecate', "accessing an object without returnObjects returns a sentence about it today; from v27 t() returns the key, as for a missing key (returnedObjectHandler can keep today's text)", ); } const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, resForObjHndl, { ...opt, ns: namespaces, }) : `key '${key} (${this.language})' returned an object instead of string.`; if (returnDetails) { resolved.res = r; resolved.usedParams = this.getUsedParamsDetails(opt); return resolved; } return r; } // if we got a separator we loop over children - else we just return object as is // as having it set to false means no hierarchy so no lookup for nested values if (keySeparator) { const resTypeIsArray = Array.isArray(resForObjHndl); const copy = resTypeIsArray ? [] : {}; // apply child translation on a copy const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey; for (const m in resForObjHndl) { if (Object.prototype.hasOwnProperty.call(resForObjHndl, m)) { const deepKey = `${newKeyToUse}${keySeparator}${m}`; if (hasDefaultValue && !res) { copy[m] = this.translate(deepKey, { ...opt, defaultValue: shouldHandleAsObject(defaultValue) ? defaultValue[m] : undefined, ...{ joinArrays: false, ns: namespaces }, }); } else { copy[m] = this.translate(deepKey, { ...opt, ...{ joinArrays: false, ns: namespaces }, }); } if (copy[m] === deepKey) copy[m] = resForObjHndl[m]; // if nothing found use original value as fallback } } res = copy; } } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) { // array special treatment res = res.join(joinArrays); if (res) res = this.extendTranslation(res, keys, opt, resolved, lastKey); } else { // string, empty or null let usedDefault = false; let usedKey = false; // fallback value if (!this.isValidLookup(res) && hasDefaultValue) { usedDefault = true; res = defaultValue; } if (!this.isValidLookup(res)) { usedKey = true; res = key; } const missingKeyNoValueFallbackToKey = opt.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey; const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res; // save missing const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing; if (usedKey || usedDefault || updateMissing) { this.logger.log( updateMissing ? 'updateKey' : 'missingKey', lng, namespace, needsPluralHandling && !updateMissing ? `${key}${this.pluralResolver.getSuffix(lng, opt.count, opt)}` : key, updateMissing ? defaultValue : res, ); if (keySeparator) { const fk = this.resolve(key, { ...opt, keySeparator: false }); if (fk && fk.res) this.logger.warn( 'Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.', ); } let lngs = []; const fallbackLngs = this.languageUtils.getFallbackCodes( this.options.fallbackLng, opt.lng || this.language, ); if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) { for (let i = 0; i < fallbackLngs.length; i++) { lngs.push(fallbackLngs[i]); } } else if (this.options.saveMissingTo === 'all') { lngs = this.languageUtils.toResolveHierarchy(opt.lng || this.language); } else { lngs.push(opt.lng || this.language); } const send = (l, k, specificDefaultValue) => { const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing; if (this.options.missingKeyHandler) { this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, opt); } else if (this.backendConnector?.saveMissing) { this.backendConnector.saveMissing( l, namespace, k, defaultForMissing, updateMissing, opt, undefined, this.utils?.hasLoadedNamespace, ); } this.emit('missingKey', l, namespace, k, res); }; if (this.options.saveMissing) { if (this.options.saveMissingPlurals && needsPluralHandling) { lngs.forEach((language) => { const suffixes = this.pluralResolver.getSuffixes(language, opt); if ( needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && !suffixes.includes(`${this.options.pluralSeparator}zero`) ) { suffixes.push(`${this.options.pluralSeparator}zero`); } suffixes.forEach((suffix) => { send([language], key + suffix, opt[`defaultValue${suffix}`] || defaultValue); }); }); } else { send(lngs, key, defaultValue); } } } // extend res = this.extendTranslation(res, keys, opt, resolved, lastKey); // append namespace if still key if (usedKey && res === key && this.options.appendNamespaceToMissingKey) { res = `${namespace}${nsSeparator}${key}`; } // parseMissingKeyHandler if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) { res = this.options.parseMissingKeyHandler( this.options.appendNamespaceToMissingKey ? `${namespace}${nsSeparator}${key}` : key, usedDefault ? res : undefined, opt, ); } } // return if (returnDetails) { resolved.res = res; resolved.usedParams = this.getUsedParamsDetails(opt); return resolved; } return res; } extendTranslation(res, key, opt, resolved, lastKey) { if (this.i18nFormat?.parse) { res = this.i18nFormat.parse( res, { ...this.options.interpolation.defaultVariables, ...opt }, opt.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, { resolved }, ); } else if (!opt.skipInterpolation) { // i18next.parsing if (opt.interpolation) this.interpolator.init({ ...opt, ...{ interpolation: { ...this.options.interpolation, ...opt.interpolation } }, }); const skipOnVariables = isString(res) && (opt?.interpolation?.skipOnVariables !== undefined ? opt.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables); let nestBef; if (skipOnVariables) { const nb = res.match(this.interpolator.nestingRegexp); // has nesting aftbeforeer interpolation nestBef = nb && nb.length; } // interpolate let data = opt.replace && !isString(opt.replace) ? opt.replace : opt; if (this.options.interpolation.defaultVariables) data = { ...this.options.interpolation.defaultVariables, ...data }; res = this.interpolator.interpolate( res, data, opt.lng || this.language || resolved.usedLng, opt, ); // nesting if (skipOnVariables) { const na = res.match(this.interpolator.nestingRegexp); // has nesting after interpolation const nestAft = na && na.length; if (nestBef < nestAft) opt.nest = false; } if (!opt.lng && resolved && resolved.res) opt.lng = this.language || resolved.usedLng; if (opt.nest !== false) res = this.interpolator.nest( res, (...args) => { if (lastKey?.[0] === args[0] && !opt.context) { this.logger.warn( `It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`, ); return null; } return this.translate(...args, key); }, opt, ); if (opt.interpolation) this.interpolator.reset(); } // post process const postProcess = opt.postProcess || this.options.postProcess; const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess; if (res != null && postProcessorNames?.length && opt.applyPostProcessor !== false) { // v27 keeps post-processors per instance (clones keep their parent's) postProcessorNames.forEach((name) => { if ( this.logger.debug && postProcessor.processors[name] && this.ownPostProcessors && !this.ownPostProcessors.has(name) ) { this.logger.once( name, 'deprecate', `postProcess: '${name}' was registered with use() on another i18next instance; from v27 post-processors are per instance, so call use() with it on this instance too`, ); } }); res = postProcessor.handle( postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? { i18nResolved: { ...resolved, usedParams: this.getUsedParamsDetails(opt) }, ...opt, } : opt, this, ); } return res; } resolve(keys, opt = {}) { let found; let usedKey; // plain key let exactUsedKey; // key with context / plural let usedLng; let usedNS; if (isString(keys)) keys = [keys]; if (Array.isArray(keys)) keys = keys.map((k) => typeof k === 'function' ? keysFromSelector(k, { ...this.options, ...opt }) : k, ); // forEach possible key keys.forEach((k) => { if (this.isValidLookup(found)) return; const extracted = this.extractFromKey(k, opt); const key = extracted.key; usedKey = key; let namespaces = extracted.namespaces; if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS); const needsPluralHandling = opt.count !== undefined && !isString(opt.count); const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0; const needsContextHandling = opt.context !== undefined && (isString(opt.context) || typeof opt.context === 'number') && opt.context !== ''; const codes = opt.lngs ? opt.lngs : this.languageUtils.toResolveHierarchy(opt.lng || this.language, opt.fallbackLng); namespaces.forEach((ns) => { if (this.isValidLookup(found)) return; usedNS = ns; if ( !this.checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS) ) { this.checkedLoadedFor[`${codes[0]}-${ns}`] = true; this.logger.warn( `key "${usedKey}" for languages "${codes.join( ', ', )}" won't get resolved as namespace "${usedNS}" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!', ); } codes.forEach((code) => { if (this.isValidLookup(found)) return; usedLng = code; const finalKeys = [key]; if (this.i18nFormat?.addLookupKeys) { this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, opt); } else { let pluralSuffix; if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, opt.count, opt); const zeroSuffix = `${this.options.pluralSeparator}zero`; const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`; // get key for plural if needed if (needsPluralHandling) { if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) { finalKeys.push( key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator), ); } finalKeys.push(key + pluralSuffix); if (needsZeroSuffixLookup) { finalKeys.push(key + zeroSuffix); } } // get key for context if needed if (needsContextHandling) { const contextKey = `${key}${this.options.contextSeparator || '_'}${opt.context}`; finalKeys.push(contextKey); // get key for context + plural if needed if (needsPluralHandling) { if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) { finalKeys.push( contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator), ); } finalKeys.push(contextKey + pluralSuffix); if (needsZeroSuffixLookup) { finalKeys.push(contextKey + zeroSuffix); } } } } // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only let possibleKey; while ((possibleKey = finalKeys.pop())) { if (!this.isValidLookup(found)) { exactUsedKey = possibleKey; found = this.getResource(code, ns, possibleKey, opt); } } }); }); }); return { res: found, usedKey, exactUsedKey, usedLng, usedNS }; } isValidLookup(res) { return ( res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '') ); } getResource(code, ns, key, options = {}) { if (this.i18nFormat?.getResource) return this.i18nFormat.getResource(code, ns, key, options); return this.resourceStore.getResource(code, ns, key, options); } getUsedParamsDetails(options = {}) { // we need to remember to extend this array whenever new option properties are added const optionsKeys = [ 'defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation', ]; const useOptionsReplaceForData = options.replace && !isString(options.replace); let data = useOptionsReplaceForData ? options.replace : options; if (useOptionsReplaceForData && typeof options.count !== 'undefined') { data = { ...data, count: options.count }; } if (this.options.interpolation.defaultVariables) { data = { ...this.options.interpolation.defaultVariables, ...data }; } // avoid reporting options (execpt count) as usedParams if (!useOptionsReplaceForData) { data = { ...data }; for (const key of optionsKeys) { delete data[key]; } } return data; } static hasDefaultValue(options) { const prefix = 'defaultValue'; for (const option in options) { if ( Object.prototype.hasOwnProperty.call(options, option) && option.startsWith(prefix) && undefined !== options[option] ) { return true; } } return false; } } export default Translator; i18next-i18next-db698b1/src/defaults.js000066400000000000000000000076361527173754700177230ustar00rootroot00000000000000import { isString } from './utils.js'; export const get = () => ({ debug: false, initAsync: true, ns: ['translation'], defaultNS: ['translation'], fallbackLng: ['dev'], fallbackNS: false, // string or array of namespaces supportedLngs: false, // array with supported languages nonExplicitSupportedLngs: false, load: 'all', // | currentOnly | languageOnly preload: false, // array with preload languages keySeparator: '.', nsSeparator: ':', pluralSeparator: '_', contextSeparator: '_', // Selector API runtime mode. Mirrors the TypeOptions `enableSelector` flag. // - false / true / 'optimize': legacy rule — only a leading *secondary* namespace // in a multi-element ns array is rewritten as a namespace prefix (v25.8.19) // - 'strict': always treat path[0] as a namespace prefix when it matches the // scope's namespace list, including the primary and single-ns hooks. // Pairs with `NsResource` dropping its flattened-primary union at the type // level. Opt-in; default behavior is unchanged. enableSelector: false, partialBundledLanguages: false, // allow bundling certain languages that are not remotely fetched saveMissing: false, // enable to send missing values updateMissing: false, // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth) saveMissingTo: 'fallback', // 'current' || 'all' saveMissingPlurals: true, // will save all forms not only singular key missingKeyHandler: false, // function(lng, ns, key, fallbackValue) -> override if prefer on handling missingInterpolationHandler: false, // function(str, match) postProcess: false, // string or array of postProcessor names postProcessPassResolved: false, // pass resolved object into 'options.i18nResolved' for postprocessor returnNull: false, // allows null value as valid translation returnEmptyString: true, // allows empty string value as valid translation returnObjects: false, joinArrays: false, // or string to join array returnedObjectHandler: false, // function(key, value, options) triggered if key returns object but returnObjects is set to false parseMissingKeyHandler: false, // function(key) parsed a key that was not found in t() before returning appendNamespaceToMissingKey: false, appendNamespaceToCIMode: false, overloadTranslationOptionHandler: (args) => { let ret = {}; if (typeof args[1] === 'object') ret = args[1]; if (isString(args[1])) ret.defaultValue = args[1]; if (isString(args[2])) ret.tDescription = args[2]; if (typeof args[2] === 'object' || typeof args[3] === 'object') { const options = args[3] || args[2]; Object.keys(options).forEach((key) => { ret[key] = options[key]; }); } return ret; }, interpolation: { escapeValue: true, prefix: '{{', suffix: '}}', formatSeparator: ',', // prefixEscaped: '{{', // suffixEscaped: '}}', // unescapeSuffix: '', unescapePrefix: '-', nestingPrefix: '$t(', nestingSuffix: ')', nestingOptionsSeparator: ',', // nestingPrefixEscaped: '$t(', // nestingSuffixEscaped: ')', // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data maxReplaces: 1000, // max replaces to prevent endless loop skipOnVariables: true, }, cacheInBuiltFormats: true, }); export const transformOptions = (options) => { // create namespace object if namespace is passed in as string if (isString(options.ns)) options.ns = [options.ns]; if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng]; if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS]; // extend supportedLngs with cimode if (options.supportedLngs && !options.supportedLngs.includes('cimode')) { options.supportedLngs = options.supportedLngs.concat(['cimode']); } return options; }; i18next-i18next-db698b1/src/i18next.js000066400000000000000000000715451527173754700174140ustar00rootroot00000000000000import baseLogger from './logger.js'; import EventEmitter from './EventEmitter.js'; import ResourceStore from './ResourceStore.js'; import Translator from './Translator.js'; import LanguageUtils from './LanguageUtils.js'; import PluralResolver from './PluralResolver.js'; import Interpolator from './Interpolator.js'; import Formatter from './Formatter.js'; import BackendConnector from './BackendConnector.js'; import { get as getDefaults, transformOptions } from './defaults.js'; import postProcessor from './postProcessor.js'; import { defer, isString, callbackApiOf, isSafeLanguageCode } from './utils.js'; import keysFromSelector from './selector.js'; const noop = () => {} // the instance whose use() set the shared logger, to warn when another instance's init() replaces it let loggerOwner; // Binds the member functions of the given class instance so that they can be // destructured or used as callbacks. const bindMemberFunctions = (inst) => { const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst)) mems.forEach((mem) => { if (typeof inst[mem] === 'function') { inst[mem] = inst[mem].bind(inst) } }) } class I18n extends EventEmitter { constructor(options = {}, callback) { super(); this.options = transformOptions(options); // ownPostProcessors: names registered with this instance's use(), shared with its clones this.services = { ownPostProcessors: new Set() }; this.logger = baseLogger; this.modules = { external: [] }; bindMemberFunctions(this); if (callback && !this.isInitialized && !options.isClone) { // https://github.com/i18next/i18next/issues/879 if (!this.options.initAsync) { this.init(options, callback); return this; } setTimeout(() => { this.init(options, callback); }, 0); } } init(options = {}, callback) { this.isInitializing = true; if (typeof options === 'function') { callback = options; options = {}; } if (options.defaultNS == null && options.ns) { if (isString(options.ns)) { options.defaultNS = options.ns; } else if (!options.ns.includes('translation')) { options.defaultNS = options.ns[0]; } } const fallbackLngIsDefault = options.fallbackLng === undefined && this.options.fallbackLng === undefined; const defOpts = getDefaults(); this.options = { ...defOpts, ...this.options, ...transformOptions(options) }; this.options.interpolation = { ...defOpts.interpolation, ...this.options.interpolation }; // do not use reference if (options.keySeparator !== undefined) { this.options.userDefinedKeySeparator = options.keySeparator; } if (options.nsSeparator !== undefined) { this.options.userDefinedNsSeparator = options.nsSeparator; } if (typeof this.options.overloadTranslationOptionHandler !== 'function') { this.options.overloadTranslationOptionHandler = defOpts.overloadTranslationOptionHandler; } const createClassOnDemand = (ClassOrObject) => { if (!ClassOrObject) return null; if (typeof ClassOrObject === 'function') return new ClassOrObject(); return ClassOrObject; } // init services if (!this.options.isClone) { // v27 keeps a logger per instance; in v26 the last non-clone init() sets it for all if (loggerOwner && loggerOwner !== this && loggerOwner.modules.logger !== this.modules.logger) { baseLogger.deprecate( 'init: this init() replaces the logger another i18next instance set with use(), as the logger is shared in v26; from v27 each instance keeps its own logger', ); } loggerOwner = this.modules.logger ? this : undefined; if (this.modules.logger) { baseLogger.init(createClassOnDemand(this.modules.logger), this.options); } else { baseLogger.init(null, this.options); } this.pendingWarnings?.forEach((msg) => this.logger.warn(msg)); this.pendingWarnings = undefined; let formatter; if (this.modules.formatter) { formatter = this.modules.formatter; } else { formatter = Formatter; } const lu = new LanguageUtils(this.options); // if (this.options.resources) { // Object.keys(this.options.resources).forEach((lng) => { // const fLng = lu.formatLanguageCode(lng); // if (fLng !== lng) { // this.options.resources[fLng] = this.options.resources[lng]; // delete this.options.resources[lng]; // this.logger.warn(`init: lng in resource is not valid, mapping ${lng} to ${fLng}`); // } // }) // } this.store = new ResourceStore(this.options.resources, this.options); const s = this.services; s.logger = baseLogger; s.resourceStore = this.store; s.languageUtils = lu; s.pluralResolver = new PluralResolver(lu, { prepend: this.options.pluralSeparator, }); if (formatter) { s.formatter = createClassOnDemand(formatter); if (s.formatter.init) s.formatter.init(s, this.options); this.options.interpolation.format = s.formatter.format.bind(s.formatter); } s.interpolator = new Interpolator(this.options); s.utils = { hasLoadedNamespace: this.hasLoadedNamespace.bind(this), // lets a backend refresh its bundles (reloadInterval) without driving the backendConnector reloadResources: this.reloadResources.bind(this) }; s.backendConnector = new BackendConnector( createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options, ); s.backendConnector.devIsDefaultFallback = fallbackLngIsDefault; // pipe events from backendConnector s.backendConnector.on('*', (event, ...args) => { this.emit(event, ...args); }); if (this.modules.languageDetector) { s.languageDetector = createClassOnDemand(this.modules.languageDetector); if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options); if (s.languageDetector.async && callbackApiOf(s.languageDetector) === undefined) { this.logger.deprecate( 'languageDetector: set callbackApi to declare how the async detect() answers (true: detect(callback); false: detect() returns a promise); guessing it from the number of parameters is deprecated', ); } } if (this.modules.i18nFormat) { s.i18nFormat = createClassOnDemand(this.modules.i18nFormat); if (s.i18nFormat.init) s.i18nFormat.init(this); } this.translator = new Translator(this.services, this.options); // pipe events from translator this.translator.on('*', (event, ...args) => { this.emit(event, ...args); }); this.modules.external.forEach(m => { if (m.init) m.init(this); }); } this.format = this.options.interpolation.format; if (!callback) callback = noop; if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) { const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng) if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0] } if (!this.services.languageDetector && !this.options.lng) { this.logger.warn('init: no languageDetector is used and no lng is defined'); } // append api const storeApi = [ 'getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage', ]; storeApi.forEach(fcName => { this[fcName] = (...args) => this.store[fcName](...args); }); const storeApiChained = [ 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', ]; storeApiChained.forEach(fcName => { this[fcName] = (...args) => { this.store[fcName](...args); return this; }; }); const deferred = defer(); const load = () => { const finish = (err, t) => { this.isInitializing = false; if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!'); this.isInitialized = true; if (!this.options.isClone) this.logger.log('initialized', this.options); this.emit('initialized', this.options); deferred.resolve(t); // not rejecting on err (as err is only a loading translation failed warning) callback(err, t); }; // fix for use cases when calling changeLanguage before finished to initialized (i.e. https://github.com/i18next/i18next/issues/1552) // also covers cloneInstance race where deferred load() would overwrite a pending changeLanguage (https://github.com/i18next/i18next/issues/2422) if ((this.languages || this.isLanguageChangingTo) && !this.isInitialized) return finish(null, this.t.bind(this)); this.changeLanguage(this.options.lng, finish); }; if (this.options.resources || !this.options.initAsync) { load(); } else { setTimeout(load, 0); } return deferred; } loadResources(language, callback = noop) { let usedCallback = callback; const usedLng = isString(language) ? language : this.language; if (typeof language === 'function') usedCallback = language; if (!this.options.resources || this.options.partialBundledLanguages) { if (usedLng?.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback(); // avoid loading resources for cimode const toLoad = []; const append = lng => { if (!lng) return; if (lng === 'cimode') return; const lngs = this.services.languageUtils.toResolveHierarchy(lng); lngs.forEach(l => { if (l === 'cimode') return; if (!toLoad.includes(l)) toLoad.push(l); }); }; if (!usedLng) { // at least load fallbacks in this case const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng); fallbacks.forEach(l => append(l)); } else { append(usedLng); } this.options.preload?.forEach?.(l => append(l)); this.services.backendConnector.load(toLoad, this.options.ns, (e) => { if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language); usedCallback(e); }); } else { usedCallback(null); } } reloadResources(lngs, ns, callback) { const deferred = defer(); if (typeof lngs === 'function') { callback = lngs; lngs = undefined; } if (typeof ns === 'function') { callback = ns; ns = undefined; } // without languages: the current ones and every language the backend loaded or tried to load for this // instance and its clones (they share the connector), so a periodic reload of a backend also covers the // languages a clone loaded on demand if (!lngs) { const requested = Object.keys(this.services.backendConnector.state).map((name) => name.split('|')[0]); lngs = [...new Set([...(this.languages || []), ...requested])].filter((l) => l !== 'cimode'); } if (!ns) ns = this.options.ns; if (!callback) callback = noop; this.services.backendConnector.reload(lngs, ns, err => { deferred.resolve(); // not rejecting on err (as err is only a loading translation failed warning) callback(err); }); return deferred; } use(module) { if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()') if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()') // a second backend, detector, i18nFormat or formatter replaces the first one const setModule = (type) => { if (this.modules[type] && this.modules[type] !== module) { const msg = `use: this ${type} replaces the ${type} passed to an earlier use() call; only one ${type} is used per instance`; // use() mostly runs before init() has set up the logger (and debug), so the warning waits for init() if (this.isInitializing || this.isInitialized) this.logger.warn(msg); else (this.pendingWarnings = this.pendingWarnings || []).push(msg); } this.modules[type] = module; }; if (module.type === 'backend') { setModule('backend'); } if (module.type === 'logger' || (module.log && module.warn && module.error)) { this.modules.logger = module; } if (module.type === 'languageDetector') { setModule('languageDetector'); } if (module.type === 'i18nFormat') { setModule('i18nFormat'); } if (module.type === 'postProcessor') { postProcessor.addPostProcessor(module); this.services.ownPostProcessors?.add(module.name); } if (module.type === 'formatter') { setModule('formatter'); } if (module.type === '3rdParty') { this.modules.external.push(module); } return this; } // puts server-rendered resources into the store and switches to the server's language, each once // (react-i18next useSSR, next-i18next). Sets the same flags those wrote directly before. hydrate(resources, lng) { // a clone shares its parent's store (one clone per request on a server): like useSSR, leave it alone if (this.options.isClone) return this; if (!this.services.resourceStore) { this.logger.warn('hydrate: call init() first, the instance has no resource store yet'); return this; } if (resources && !this.initializedStoreOnce) { this.services.resourceStore.data = resources; // add the namespaces, so a language change loads all of them Object.values(resources).forEach((lngResources) => { Object.keys(lngResources).forEach((ns) => { if (!this.options.ns.includes(ns)) this.options.ns.push(ns); }); }); this.initializedStoreOnce = true; this.isInitialized = true; } if (lng && !this.initializedLanguageOnce) { this.changeLanguage(lng); this.initializedLanguageOnce = true; } return this; } setResolvedLanguage(l) { if (!l || !this.languages) return; if (['cimode', 'dev'].includes(l)) return; for (let li = 0; li < this.languages.length; li++) { const lngInLngs = this.languages[li]; if (['cimode', 'dev'].includes(lngInLngs)) continue; if (this.store.hasLanguageSomeTranslations(lngInLngs)) { this.resolvedLanguage = lngInLngs; break; } } if (!this.resolvedLanguage && !this.languages.includes(l) && this.store.hasLanguageSomeTranslations(l)) { this.resolvedLanguage = l; this.languages.unshift(l); } } changeLanguage(lng, callback) { this.isLanguageChangingTo = lng; const deferred = defer(); this.emit('languageChanging', lng); const setLngProps = (l) => { this.language = l; this.languages = this.services.languageUtils.toResolveHierarchy(l); // find the first language resolved language this.resolvedLanguage = undefined; this.setResolvedLanguage(l); }; const done = (err, l) => { if (l) { if (this.isLanguageChangingTo === lng) { setLngProps(l); this.translator.changeLanguage(l); this.isLanguageChangingTo = undefined; this.emit('languageChanged', l); this.logger.log('languageChanged', l); } } else { this.isLanguageChangingTo = undefined; } deferred.resolve((...args) => this.t(...args)); if (callback) callback(err, (...args) => this.t(...args)); }; const setLng = lngs => { // if detected lng is falsy, set it to empty array, to make sure at least the fallbackLng will be used if (!lng && !lngs && this.services.languageDetector) lngs = []; // depending on API in detector lng can be a string (old) or an array of languages ordered in priority const fl = isString(lngs) ? lngs : lngs && lngs[0]; const l = this.store.hasLanguageSomeTranslations(fl) ? fl : this.services.languageUtils.getBestMatchFromCodes(isString(lngs) ? [lngs] : lngs); // v27 refuses a language code of another shape unless it is configured; 26.7 warns in debug mode // only (the check runs a fallbackLng function, which may expect a code) if (l && this.logger.debug && !isSafeLanguageCode(l)) { const configured = [].concat( this.options.supportedLngs || [], this.services.languageUtils.getFallbackCodes(this.options.fallbackLng, l), this.options.preload || [], ); if (!configured.includes(l) && !Object.prototype.hasOwnProperty.call(this.store.data, l)) { this.logger.once( `lng:${l}`, 'deprecate', `changeLanguage: the language code '${l.slice(0, 64)}' comes from lng, changeLanguage() or the language detector and is not configured; from v27 such a code is refused unless it has only letters, digits, '-', '_', '@' and '.' (no '..'), at most 128 characters. Set supportedLngs, or check the code before passing it on`, ); } } if (l) { if (!this.language) { setLngProps(l); } if (!this.translator.language) this.translator.changeLanguage(l); this.services.languageDetector?.cacheUserLanguage?.(l); } this.loadResources(l, err => { done(err, l); }); }; if (!lng && this.services.languageDetector && !this.services.languageDetector.async) { setLng(this.services.languageDetector.detect()); } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) { const callbackApi = callbackApiOf(this.services.languageDetector); if (callbackApi === false || (callbackApi === undefined && this.services.languageDetector.detect.length === 0)) { this.services.languageDetector.detect().then(setLng); } else { this.services.languageDetector.detect(setLng); } } else { setLng(lng); } return deferred; } // `fixedOpts` (optional 4th arg) carries options that are tied to the // bound t function rather than to the resolution of any single call: // // - `scopeNs?: string[]` // Full namespace list the bound t was created for (e.g. the array // passed to `useTranslation(['nsA','nsB'])`). Used *only* by the // selector path to decide whether `path[0]` should be rewritten as // a namespace prefix. Resolution semantics are unchanged: the bound // `ns` (a single primary string) still drives `Translator.translate`. // This decouples selector ns-detection from resolution scope so a // react-i18next hook called with multiple namespaces can route // `t($ => $.secondary.foo)` correctly *without* turning every // `t('foo')` lookup into a multi-ns fallback chain. // See the v25.8.19 selector rule in `src/selector.js`. getFixedT(lng, ns, keyPrefix, fixedOpts) { const scopeNs = fixedOpts?.scopeNs; const fixedT = (key, opts, ...rest) => { let o; if (typeof opts !== 'object') { o = this.options.overloadTranslationOptionHandler([key, opts].concat(rest)); } else { o = { ...opts }; } o.lng = o.lng || fixedT.lng; o.lngs = o.lngs || fixedT.lngs; // Detect per-call explicit `ns` BEFORE auto-filling from fixedT.ns, so the // selector can prefer call-level ns over the bound scopeNs. const explicitCallNs = o.ns !== undefined && o.ns !== null; o.ns = o.ns || fixedT.ns; if (o.keyPrefix !== '') o.keyPrefix = o.keyPrefix || keyPrefix || fixedT.keyPrefix; // keysFromSelector must be called after o.ns is resolved above, so that namespace // rewriting uses the effective namespace (e.g. the one fixed by getFixedT) rather // than the raw global ns array from this.options. Precedence for selector // ns-detection (highest first): // 1. `o.ns` if the caller passed it explicitly on this call // 2. `scopeNs` if the bound t carries it (the hook's full ns list) // 3. `o.ns` populated from fixedT.ns / this.options // This decouples selector path[0] matching from resolution scope. `o.ns` // continues to drive `Translator.translate` resolution unchanged. const selectorOpts = { ...this.options, ...o }; if (Array.isArray(scopeNs) && !explicitCallNs) selectorOpts.ns = scopeNs; if (typeof o.keyPrefix === 'function') o.keyPrefix = keysFromSelector(o.keyPrefix, selectorOpts); const keySeparator = this.options.keySeparator || '.'; let resultKey if (o.keyPrefix && Array.isArray(key)) { resultKey = key.map(k => { if (typeof k === 'function') k = keysFromSelector(k, selectorOpts); return `${o.keyPrefix}${keySeparator}${k}` }); } else { if (typeof key === 'function') key = keysFromSelector(key, selectorOpts); resultKey = o.keyPrefix ? `${o.keyPrefix}${keySeparator}${key}` : key; } return this.t(resultKey, o); }; if (isString(lng)) { fixedT.lng = lng; } else { fixedT.lngs = lng; } fixedT.ns = ns; fixedT.keyPrefix = keyPrefix; return fixedT; } t(...args) { if (!this.translator) { this.logger.warn('t: called before init(); returning an empty string'); return ''; } return this.translator.translate(...args); } exists(...args) { return this.translator?.exists(...args); } setDefaultNamespace(ns) { this.options.defaultNS = ns; } hasLoadedNamespace(ns, options = {}) { if (!this.isInitialized) { this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages); return false; } if (!this.languages || !this.languages.length) { this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages); return false; } const lng = options.lng || this.resolvedLanguage || this.languages[0]; const fallbackLng = this.options ? this.options.fallbackLng : false; const lastLng = this.languages[this.languages.length - 1]; // we're in cimode so this shall pass if (lng.toLowerCase() === 'cimode') return true; const loadNotPending = (l, n) => { const loadState = this.services.backendConnector.state[`${l}|${n}`]; return loadState === -1 || loadState === 0 || loadState === 2; }; // optional injected check if (options.precheck) { const preResult = options.precheck(this, loadNotPending); if (preResult !== undefined) return preResult; } // loaded -> SUCCESS if (this.hasResourceBundle(lng, ns)) return true; // were not loading at all -> SEMI SUCCESS if (!this.services.backendConnector.backend || (this.options.resources && !this.options.partialBundledLanguages)) return true; // a passed in lng is a raw code: loadLanguages() stores it under its resolved code (formatted, reduced // per `load`), or skips it entirely outside supportedLngs - checking the raw code would wait forever const { languageUtils } = this.services; const loadLng = !options.lng ? lng : languageUtils.isSupportedCode(lng) && languageUtils.toResolveHierarchy(lng, false)[0]; // failed loading ns - but at least fallback is not pending -> SEMI SUCCESS if ((!loadLng || loadNotPending(loadLng, ns)) && (!fallbackLng || loadNotPending(lastLng, ns))) return true; return false; } loadNamespaces(ns, callback) { const deferred = defer(); if (!this.options.ns) { if (callback) callback(); return Promise.resolve(); } if (isString(ns)) ns = [ns]; ns.forEach(n => { if (!this.options.ns.includes(n)) this.options.ns.push(n); }); this.loadResources(err => { deferred.resolve(); if (callback) callback(err); }); return deferred; } loadLanguages(lngs, callback) { const deferred = defer(); if (isString(lngs)) lngs = [lngs]; const preloaded = this.options.preload || []; const newLngs = lngs.filter(lng => !preloaded.includes(lng) && this.services.languageUtils.isSupportedCode(lng)); // Exit early if all given languages are already preloaded if (!newLngs.length) { if (callback) callback(); return Promise.resolve(); } this.options.preload = preloaded.concat(newLngs); this.loadResources(err => { deferred.resolve(); if (callback) callback(err); }); return deferred; } dir(lng) { if (!lng) lng = this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language); if (!lng) return 'ltr'; try { const l = new Intl.Locale(lng) if (l && l.getTextInfo) { const ti = l.getTextInfo() if (ti && ti.direction) return ti.direction } } catch (e) {/* fall through */} const rtlLngs = [ 'ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb' ]; const languageUtils = this.services?.languageUtils || new LanguageUtils(getDefaults()) // for uninitialized usage if (lng.toLowerCase().indexOf('-latn') > 1) return 'ltr'; return rtlLngs.includes(languageUtils.getLanguagePartFromCode(lng)) || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr'; } static createInstance(options = {}, callback) { const instance = new I18n(options, callback) instance.createInstance = I18n.createInstance; return instance; } cloneInstance(options = {}, callback = noop) { const forkResourceStore = options.forkResourceStore; if (forkResourceStore) { options = { ...options }; delete options.forkResourceStore; } // preload is not inherited: the parent already loaded it into the shared store, and re-queueing it on every clone's // changeLanguage costs languages × namespaces per call (https://github.com/i18next/i18next/issues/2451) const mergedOptions = { ...this.options, preload: false, ...options, ...{ isClone: true } }; const clone = new I18n(mergedOptions); if ((options.debug !== undefined || options.prefix !== undefined)) { clone.logger = clone.logger.clone(options); } const membersToCopy = ['store', 'services', 'language']; membersToCopy.forEach(m => { clone[m] = this[m]; }); clone.services = { ...this.services }; clone.services.utils = { ...clone.services.utils, hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone), reloadResources: clone.reloadResources.bind(clone) }; if (forkResourceStore) { // faster than const clonedData = JSON.parse(JSON.stringify(this.store.data)) const copyData = obj => { const copied = Array.isArray(obj) ? [...obj] : { ...obj }; Object.keys(copied).forEach(k => { if (copied[k] && typeof copied[k] === 'object') copied[k] = copyData(copied[k]); }); return copied; }; const clonedData = copyData(this.store.data); clone.store = new ResourceStore(clonedData, mergedOptions); clone.services.resourceStore = clone.store; } // Ensure interpolation options are always merged with defaults when cloning if (options.interpolation) { const defOpts = getDefaults(); const mergedInterpolation = { ...defOpts.interpolation, ...this.options.interpolation, ...options.interpolation }; const mergedForInterpolator = { ...mergedOptions, interpolation: mergedInterpolation }; clone.services.interpolator = new Interpolator(mergedForInterpolator); } clone.translator = new Translator(clone.services, mergedOptions); clone.translator.on('*', (event, ...args) => { clone.emit(event, ...args); }); clone.init(mergedOptions, callback); clone.translator.options = mergedOptions; // sync options // direct callers of the shared connector's saveMissing() (i18next-http-middleware's missing keys route) // keep checking the newest clone, as before; the translators pass the check of their own instance clone.translator.backendConnector.newestCloneHasLoadedNamespace = clone.hasLoadedNamespace.bind(clone); return clone; } toJSON() { return { options: this.options, store: this.store, language: this.language, languages: this.languages, resolvedLanguage: this.resolvedLanguage }; } } const instance = I18n.createInstance(); export default instance; i18next-i18next-db698b1/src/index.cjs000066400000000000000000000004641527173754700173560ustar00rootroot00000000000000import i18next from './i18next.js'; import keyFromSelector from './selector.js'; import { isSafeLanguageCode } from './utils.js'; i18next.keyFromSelector = keyFromSelector; i18next.isSafeLanguageCode = isSafeLanguageCode; // for cjs there is just 1 default export, no named exports export default i18next; i18next-i18next-db698b1/src/index.js000066400000000000000000000014751527173754700172160ustar00rootroot00000000000000import i18next from './i18next.js'; export { default as keyFromSelector } from './selector.js'; export { isSafeLanguageCode } from './utils.js'; export default i18next; export const createInstance = i18next.createInstance; export const dir = i18next.dir; export const init = i18next.init; export const loadResources = i18next.loadResources; export const reloadResources = i18next.reloadResources; export const use = i18next.use; export const changeLanguage = i18next.changeLanguage; export const getFixedT = i18next.getFixedT; export const t = i18next.t; export const exists = i18next.exists; export const setDefaultNamespace = i18next.setDefaultNamespace; export const hasLoadedNamespace = i18next.hasLoadedNamespace; export const loadNamespaces = i18next.loadNamespaces; export const loadLanguages = i18next.loadLanguages; i18next-i18next-db698b1/src/logger.js000066400000000000000000000041251527173754700173610ustar00rootroot00000000000000import { isString } from './utils.js'; const consoleLogger = { type: 'logger', log(args) { this.output('log', args); }, warn(args) { this.output('warn', args); }, error(args) { this.output('error', args); }, output(type, args) { /* eslint no-console: 0 */ console?.[type]?.apply?.(console, args); }, }; class Logger { constructor(concreteLogger, options = {}) { this.init(concreteLogger, options); } init(concreteLogger, options = {}) { this.prefix = options.prefix || 'i18next:'; this.logger = concreteLogger || consoleLogger; this.options = options; this.debug = options.debug; this.seen = new Set(); } log(...args) { return this.forward(args, 'log', '', true); } warn(...args) { return this.forward(args, 'warn', '', true); } error(...args) { return this.forward(args, 'error', ''); } deprecate(...args) { return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true); } // A debug message logged once per key. ponytail: remembers 1000 keys per logger, then stays quiet once(key, lvl, ...args) { if (!this.debug || this.seen.has(key) || this.seen.size >= 1000) return null; this.seen.add(key); return this[lvl](...args); } forward(args, lvl, prefix, debugOnly) { if (debugOnly && !this.debug) return null; // Strip control characters from string args to prevent log forging via // user-controlled translation keys, languages, namespaces, or interpolation // variable names (CWE-117). // eslint-disable-next-line no-control-regex args = args.map((a) => (isString(a) ? a.replace(/[\r\n\x00-\x1F\x7F]/g, ' ') : a)); if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`; return this.logger[lvl](args); } create(moduleName) { return new Logger(this.logger, { ...{ prefix: `${this.prefix}:${moduleName}:` }, ...this.options, }); } clone(options) { options = options || this.options; options.prefix = options.prefix || this.prefix; return new Logger(this.logger, options); } } export default new Logger(); i18next-i18next-db698b1/src/postProcessor.js000066400000000000000000000005221527173754700207640ustar00rootroot00000000000000export default { processors: {}, addPostProcessor(module) { this.processors[module.name] = module; }, handle(processors, value, key, options, translator) { processors.forEach((processor) => { value = this.processors[processor]?.process(value, key, options, translator) ?? value; }); return value; }, }; i18next-i18next-db698b1/src/selector.js000066400000000000000000000037141527173754700177250ustar00rootroot00000000000000const PATH_KEY = Symbol('i18next/PATH_KEY'); function createProxy() { const state = []; // `Object.create(null)` to prevent prototype pollution const handler = Object.create(null); let proxy; handler.get = (target, key) => { proxy?.revoke?.(); if (key === PATH_KEY) return state; state.push(key); proxy = Proxy.revocable(target, handler); return proxy.proxy; }; return Proxy.revocable(Object.create(null), handler).proxy; } export default function keysFromSelector(selector, opts) { const { [PATH_KEY]: path } = selector(createProxy()); const keySeparator = opts?.keySeparator ?? '.'; const nsSeparator = opts?.nsSeparator ?? ':'; const strict = opts?.enableSelector === 'strict'; // Default mode (v25.8.19): when `ns` is an array of two or more namespaces, // GetSource exposes the primary namespace's keys flat on `$`, while secondary // namespaces are hung off `$` under their own name (e.g. `$.ns3.fromNs3`). // Only a leading segment equal to a *secondary* namespace is rewritten. // Single-string ns and primary-prefixed paths stay flat (preserves #2405). // // Strict mode: `NsResource` drops its flattened-primary form at the type // level — `$` exposes namespaces uniformly, primary included. So `path[0]` // is *always* a namespace identifier when it matches the scope's ns list, // and we rewrite to `nsrest` regardless of single/multi-ns scope and // regardless of primary vs secondary. See #2429. if (path.length > 1 && nsSeparator) { const ns = opts?.ns; const nsList = strict ? Array.isArray(ns) ? ns : ns ? [ns] : null : Array.isArray(ns) ? ns : null; if (nsList) { const candidates = strict ? nsList : nsList.length > 1 ? nsList.slice(1) : []; if (candidates.includes(path[0])) { return `${path[0]}${nsSeparator}${path.slice(1).join(keySeparator)}`; } } } return path.join(keySeparator); } i18next-i18next-db698b1/src/utils.js000066400000000000000000000206471527173754700172510ustar00rootroot00000000000000export const isString = (obj) => typeof obj === 'string'; // http://lea.verou.me/2016/12/resolve-promises-externally-with-this-one-weird-trick/ export const defer = () => { let res; let rej; const promise = new Promise((resolve, reject) => { res = resolve; rej = reject; }); promise.resolve = res; promise.reject = rej; return promise; }; export const makeString = (object) => { if (object == null) return ''; return String(object); }; // The shape of a language code that i18next v27 accepts from outside (changeLanguage, detectors) unless it is // configured. Not a BCP 47 check: 'en_US', 'zh_Hant_TW', 'sr@latin' and 'de_DE.UTF-8' pass; markup, slashes, spaces, // '..', prototype keys and codes over 128 characters do not. Exported for plugins (detectors, backends, middleware). export const isSafeLanguageCode = (code) => isString(code) && /^[A-Za-z0-9_@.-]{1,128}$/.test(code) && !code.includes('..') && !['__proto__', 'constructor', 'prototype'].includes(code); // A plugin declares its calling convention with `callbackApi` (instance or static property): // true for callbacks, false for promises (or sync values), undefined to have it guessed from Function.length export const callbackApiOf = (plugin) => plugin?.callbackApi ?? plugin?.constructor?.callbackApi; export const copy = (a, s, t) => { a.forEach((m) => { if (s[m]) t[m] = s[m]; }); }; // We extract out the RegExp definition to improve performance with React Native Android, which has poor RegExp // initialization performance const lastOfPathSeparatorRegExp = /###/g; const cleanKey = (key) => key && key.includes('###') ? key.replace(lastOfPathSeparatorRegExp, '.') : key; const canNotTraverseDeeper = (object) => !object || isString(object); const getLastOfPath = (object, path, Empty) => { const stack = !isString(path) ? path : path.split('.'); let stackIndex = 0; // iterate through the stack, but leave the last item while (stackIndex < stack.length - 1) { if (canNotTraverseDeeper(object)) return {}; const key = cleanKey(stack[stackIndex]); if (!object[key] && Empty) object[key] = new Empty(); // prevent prototype pollution if (Object.prototype.hasOwnProperty.call(object, key)) { object = object[key]; } else { object = {}; } ++stackIndex; } if (canNotTraverseDeeper(object)) return {}; return { obj: object, k: cleanKey(stack[stackIndex]), }; }; export const setPath = (object, path, newValue) => { const { obj, k } = getLastOfPath(object, path, Object); if (obj !== undefined || path.length === 1) { obj[k] = newValue; return; } let e = path[path.length - 1]; let p = path.slice(0, path.length - 1); let last = getLastOfPath(object, p, Object); while (last.obj === undefined && p.length) { e = `${p[p.length - 1]}.${e}`; p = p.slice(0, p.length - 1); last = getLastOfPath(object, p, Object); if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') { last.obj = undefined; } } last.obj[`${last.k}.${e}`] = newValue; }; export const pushPath = (object, path, newValue, concat) => { const { obj, k } = getLastOfPath(object, path, Object); obj[k] = obj[k] || []; if (concat) obj[k] = obj[k].concat(newValue); if (!concat) obj[k].push(newValue); }; export const getPath = (object, path) => { const { obj, k } = getLastOfPath(object, path); if (!obj) return undefined; if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined; return obj[k]; }; export const getPathWithDefaults = (data, defaultData, key) => { const value = getPath(data, key); if (value !== undefined) { return value; } // Fallback to default values return getPath(defaultData, key); }; export const deepExtend = (target, source, overwrite) => { for (const prop in source) { if (prop !== '__proto__' && prop !== 'constructor') { if (Object.prototype.hasOwnProperty.call(target, prop)) { // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch if ( isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String ) { if (overwrite) target[prop] = source[prop]; } else { deepExtend(target[prop], source[prop], overwrite); } } else { target[prop] = source[prop]; } } } return target; }; export const regexEscape = (str) => /* eslint no-useless-escape: 0 */ str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); const _entityMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/', }; export const escape = (data) => { if (isString(data)) { return data.replace(/[&<>"'\/]/g, (s) => _entityMap[s]); } return data; }; /** * This is a reusable regular expression cache class. Given a certain maximum number of regular expressions we're * allowed to store in the cache, it provides a way to avoid recreating regular expression objects over and over. * When it needs to evict something, it evicts the oldest one. */ class RegExpCache { constructor(capacity) { this.capacity = capacity; this.regExpMap = new Map(); // Since our capacity tends to be fairly small, `.shift()` will be fairly quick despite being O(n). We just use a // normal array to keep it simple. this.regExpQueue = []; } getRegExp(pattern) { const regExpFromCache = this.regExpMap.get(pattern); if (regExpFromCache !== undefined) { return regExpFromCache; } const regExpNew = new RegExp(pattern); if (this.regExpQueue.length === this.capacity) { this.regExpMap.delete(this.regExpQueue.shift()); } this.regExpMap.set(pattern, regExpNew); this.regExpQueue.push(pattern); return regExpNew; } } const chars = [' ', ',', '?', '!', ';']; // We cache RegExps to improve performance with React Native Android, which has poor RegExp initialization performance. // Capacity of 20 should be plenty, as nsSeparator/keySeparator don't tend to vary much across calls. const looksLikeObjectPathRegExpCache = new RegExpCache(20); export const looksLikeObjectPath = (key, nsSeparator, keySeparator) => { nsSeparator = nsSeparator || ''; keySeparator = keySeparator || ''; const possibleChars = chars.filter((c) => !nsSeparator.includes(c) && !keySeparator.includes(c)); if (possibleChars.length === 0) return true; const r = looksLikeObjectPathRegExpCache.getRegExp( `(${possibleChars.map((c) => (c === '?' ? '\\?' : c)).join('|')})`, ); let matched = !r.test(key); if (!matched) { const ki = key.indexOf(keySeparator); if (ki > 0 && !r.test(key.substring(0, ki))) { matched = true; } } return matched; }; /** * Given * * 1. a top level object obj, and * 2. a path to a deeply nested string or object within it * * Find and return that deeply nested string or object. The caveat is that the keys of objects within the nesting chain * may contain period characters. Therefore, we need to DFS and explore all possible keys at each step until we find the * deeply nested string or object. */ export const deepFind = (obj, path, keySeparator = '.') => { if (!obj) return undefined; if (obj[path]) { if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined; return obj[path]; } const tokens = path.split(keySeparator); let current = obj; for (let i = 0; i < tokens.length;) { if (!current || typeof current !== 'object') { return undefined; } let next; let nextPath = ''; for (let j = i; j < tokens.length; ++j) { if (j !== i) { nextPath += keySeparator; } nextPath += tokens[j]; next = current[nextPath]; // like the top-level lookup above, don't resolve to built-in methods such as // `constructor` or `toString`, which would be printed as function source, // and don't walk into the prototype via `__proto__` if ( (typeof next === 'function' || nextPath === '__proto__') && !Object.prototype.hasOwnProperty.call(current, nextPath) ) { next = undefined; } if (next !== undefined) { if (['string', 'number', 'boolean'].includes(typeof next) && j < tokens.length - 1) { continue; } i += j - i + 1; break; } } current = next; } return current; }; export const getCleanedCode = (code) => code?.replace(/_/g, '-'); i18next-i18next-db698b1/test/000077500000000000000000000000001527173754700157325ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/000077500000000000000000000000001527173754700206035ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v1/000077500000000000000000000000001527173754700211315ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v1/locales/000077500000000000000000000000001527173754700225535ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v1/locales/de/000077500000000000000000000000001527173754700231435ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v1/locales/de/translation.json000066400000000000000000000002631527173754700263750ustar00rootroot00000000000000{ "simple_de": "ok_from_de", "xhr_simple_de": "xhr_ok_from_de", "test": { "simple_de": "ok_from_de" }, "route": { "key1": "key1_de", "key2": "key2_de" } } i18next-i18next-db698b1/test/compatibility/v1/locales/dev/000077500000000000000000000000001527173754700233315ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v1/locales/dev/ns.common.json000066400000000000000000000002241527173754700261310ustar00rootroot00000000000000{ "simple_dev": "ok_from_common_dev", "test": { "simple_dev": "ok_from_common_dev", "fallback_dev": "ok_from_common_dev-fallback" } } i18next-i18next-db698b1/test/compatibility/v1/locales/dev/ns.special.json000066400000000000000000000001431527173754700262610ustar00rootroot00000000000000{ "simple_dev": "ok_from_special_dev", "test": { "simple_dev": "ok_from_special_dev" } } i18next-i18next-db698b1/test/compatibility/v1/locales/dev/translation.json000066400000000000000000000001721527173754700265620ustar00rootroot00000000000000{ "simple_dev": "ok_from_dev", "xhr_simple_dev": "xhr_ok_from_dev", "test": { "simple_dev": "ok_from_dev" } } i18next-i18next-db698b1/test/compatibility/v1/locales/en-US/000077500000000000000000000000001527173754700235025ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v1/locales/en-US/ns.common.json000066400000000000000000000001511527173754700263010ustar00rootroot00000000000000{ "simple_en-US": "ok_from_common_en-US", "test": { "simple_en-US": "ok_from_common_en-US" } } i18next-i18next-db698b1/test/compatibility/v1/locales/en-US/ns.special.json000066400000000000000000000001531527173754700264330ustar00rootroot00000000000000{ "simple_en-US": "ok_from_special_en-US", "test": { "simple_en-US": "ok_from_special_en-US" } } i18next-i18next-db698b1/test/compatibility/v1/locales/en-US/translation.json000066400000000000000000000002061527173754700267310ustar00rootroot00000000000000{ "simple_en-US": "ok_from_en-US", "xhr_simple_en-US": "xhr_ok_from_en-US", "test": { "simple_en-US": "ok_from_en-US" } } i18next-i18next-db698b1/test/compatibility/v1/locales/en/000077500000000000000000000000001527173754700231555ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v1/locales/en/ns.common.json000066400000000000000000000002161527173754700257560ustar00rootroot00000000000000{ "simple_en": "ok_from_common_en", "test": { "simple_en": "ok_from_common_en", "fallback_en": "ok_from_common_en-fallback" } } i18next-i18next-db698b1/test/compatibility/v1/locales/en/ns.special.json000066400000000000000000000001371527173754700261100ustar00rootroot00000000000000{ "simple_en": "ok_from_special_en", "test": { "simple_en": "ok_from_special_en" } } i18next-i18next-db698b1/test/compatibility/v1/locales/en/translation.json000066400000000000000000000002631527173754700264070ustar00rootroot00000000000000{ "simple_en": "ok_from_en", "xhr_simple_en": "xhr_ok_from_en", "test": { "simple_en": "ok_from_en" }, "route": { "key1": "key1_en", "key2": "key2_en" } } i18next-i18next-db698b1/test/compatibility/v1/locales/fr/000077500000000000000000000000001527173754700231625ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v1/locales/fr/translation.json000066400000000000000000000001171527173754700264120ustar00rootroot00000000000000{ "simple_fr": "ok_from_fr", "test": { "simple_fr": "ok_from_fr" } } i18next-i18next-db698b1/test/compatibility/v1/pluralResolver.test.js000066400000000000000000000241671527173754700255000ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import { createInstance } from '../../../src/index'; import compatibilityLayer from '../v4/v4Compatibility'; describe('PluralResolver', () => { describe('getRule()', () => { let pr; beforeAll(() => { const i18next = createInstance(); i18next .use(compatibilityLayer) .use({ type: 'formatter', init: () => {}, format: (v) => v }) .init({ fallbackLng: 'en', compatibilityJSON: 'v3', }); pr = i18next.services.pluralResolver; }); it('correctly returns getRule for a supported locale', () => { const rule = pr.getRule('en'); expect(rule.numbers).to.deep.equal([1, 2]); expect(rule.plurals).to.be.a('function'); }); it('correctly returns getRule for an unsupported locale', () => { expect(pr.getRule('non-existent')).toBeUndefined(); }); }); describe('needsPlural()', () => { let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en', compatibilityJSON: 'v3', }); pr = i18next.services.pluralResolver; }); const tests = [ { args: ['en'], expected: true }, { args: ['fr'], expected: true }, { args: ['ar'], expected: true }, { args: ['ru'], expected: true }, { args: ['ms'], expected: false }, { args: ['lo'], expected: false }, { args: ['su'], expected: false }, { args: ['ach'], expected: true }, { args: ['af'], expected: true }, { args: ['ay'], expected: false }, { args: ['be'], expected: true }, { args: ['cs'], expected: true }, { args: ['csb'], expected: true }, { args: ['cy'], expected: true }, { args: ['ga'], expected: true }, { args: ['gd'], expected: true }, { args: ['is'], expected: true }, { args: ['jv'], expected: true }, { args: ['kw'], expected: true }, { args: ['lt'], expected: true }, { args: ['lv'], expected: true }, { args: ['mk'], expected: true }, { args: ['mnk'], expected: true }, { args: ['mt'], expected: true }, { args: ['or'], expected: true }, { args: ['ro'], expected: true }, { args: ['sl'], expected: true }, { args: ['he'], expected: true }, ]; tests.forEach((test) => { it(`correctly returns needsPlural for ${JSON.stringify(test.args)} args`, () => { expect(pr.needsPlural.apply(pr, test.args)).to.eql(test.expected); }); }); }); describe('getSuffix()', () => { let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en', compatibilityJSON: 'v3', pluralSeparator: '', }); pr = i18next.services.pluralResolver; }); const tests = [ { args: ['en', 0], expected: 'plural' }, { args: ['en', 1], expected: '' }, { args: ['en', 10], expected: 'plural' }, { args: ['en', 10.5], expected: 'plural' }, { args: ['fr', 0], expected: '' }, { args: ['fr', 1], expected: '' }, { args: ['fr', 10], expected: 'plural' }, { args: ['fr', 10.5], expected: 'plural' }, { args: ['pt', 0], expected: '' }, { args: ['pt', 1], expected: '' }, { args: ['pt', 10], expected: 'plural' }, { args: ['pt', 10.5], expected: 'plural' }, { args: ['pt-PT', 0], expected: 'plural' }, { args: ['pt-PT', 1], expected: '' }, { args: ['pt-PT', 10], expected: 'plural' }, { args: ['pt-PT', 10.5], expected: 'plural' }, { args: ['pt-BR', 0], expected: '' }, { args: ['pt-BR', 1], expected: '' }, { args: ['pt-BR', 10], expected: 'plural' }, { args: ['pt-BR', 10.5], expected: 'plural' }, { args: ['ach', 0], expected: '' }, { args: ['ach', 1], expected: '' }, { args: ['ach', 10], expected: 'plural' }, { args: ['ach', 10.5], expected: 'plural' }, // only singular { args: ['su', 0], expected: '0' }, { args: ['su', 1], expected: '0' }, { args: ['su', 10], expected: '0' }, // ar { args: ['ar', 0], expected: '0' }, { args: ['ar', 1], expected: '1' }, { args: ['ar', 2], expected: '2' }, { args: ['ar', 3], expected: '3' }, { args: ['ar', 4], expected: '3' }, { args: ['ar', 104], expected: '3' }, { args: ['ar', 11], expected: '4' }, { args: ['ar', 99], expected: '4' }, { args: ['ar', 199], expected: '4' }, { args: ['ar', 100], expected: '5' }, // be { args: ['be', 0], expected: '2' }, { args: ['be', 1], expected: '0' }, { args: ['be', 5], expected: '2' }, // sk { args: ['sk', 0], expected: '2' }, { args: ['sk', 1], expected: '0' }, { args: ['sk', 5], expected: '2' }, // pl { args: ['pl', 0], expected: '2' }, { args: ['pl', 1], expected: '0' }, { args: ['pl', 5], expected: '2' }, // cy { args: ['cy', 0], expected: '2' }, { args: ['cy', 1], expected: '0' }, { args: ['cy', 3], expected: '2' }, { args: ['cy', 8], expected: '3' }, // ga { args: ['ga', 1], expected: '0' }, { args: ['ga', 2], expected: '1' }, { args: ['ga', 3], expected: '2' }, { args: ['ga', 7], expected: '3' }, { args: ['ga', 11], expected: '4' }, // gd { args: ['gd', 1], expected: '0' }, { args: ['gd', 2], expected: '1' }, { args: ['gd', 3], expected: '2' }, { args: ['gd', 20], expected: '3' }, // is { args: ['is', 1], expected: '' }, { args: ['is', 2], expected: 'plural' }, // jv { args: ['jv', 0], expected: '0' }, { args: ['jv', 1], expected: '1' }, // kw { args: ['kw', 1], expected: '0' }, { args: ['kw', 2], expected: '1' }, { args: ['kw', 3], expected: '2' }, { args: ['kw', 4], expected: '3' }, // lt { args: ['lt', 1], expected: '0' }, { args: ['lt', 2], expected: '1' }, { args: ['lt', 10], expected: '2' }, // lv { args: ['lv', 1], expected: '0' }, { args: ['lv', 2], expected: '1' }, { args: ['lv', 0], expected: '2' }, // mk { args: ['mk', 1], expected: '' }, { args: ['mk', 2], expected: 'plural' }, { args: ['mk', 0], expected: 'plural' }, { args: ['mk', 11], expected: 'plural' }, { args: ['mk', 21], expected: '' }, { args: ['mk', 31], expected: '' }, { args: ['mk', 311], expected: 'plural' }, // mnk { args: ['mnk', 0], expected: '0' }, { args: ['mnk', 1], expected: '1' }, { args: ['mnk', 2], expected: '2' }, // mt { args: ['mt', 1], expected: '0' }, { args: ['mt', 2], expected: '1' }, { args: ['mt', 11], expected: '2' }, { args: ['mt', 20], expected: '3' }, // or { args: ['or', 2], expected: '1' }, { args: ['or', 1], expected: '0' }, // ro { args: ['ro', 0], expected: '1' }, { args: ['ro', 1], expected: '0' }, { args: ['ro', 20], expected: '2' }, // sl { args: ['sl', 5], expected: '0' }, { args: ['sl', 1], expected: '1' }, { args: ['sl', 2], expected: '2' }, { args: ['sl', 3], expected: '3' }, // he { args: ['he', 0], expected: '3' }, { args: ['he', 0.5], expected: '3' }, { args: ['he', 1], expected: '0' }, { args: ['he', 2], expected: '1' }, { args: ['he', 3], expected: '3' }, { args: ['he', 20], expected: '2' }, { args: ['he', 21], expected: '3' }, { args: ['he', 30], expected: '2' }, { args: ['he', 100], expected: '2' }, { args: ['he', 101], expected: '3' }, ]; tests.forEach((test) => { it(`correctly returns suffix for ${JSON.stringify(test.args)} args`, () => { expect(pr.getSuffix.apply(pr, test.args)).to.eql(test.expected); }); }); }); describe('getPluralFormsOfKey()', () => { let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en', pluralSeparator: '_', compatibilityJSON: 'v3', }); pr = i18next.services.pluralResolver; }); const tests = [ { args: ['en', 'key'], expected: ['key', 'key_plural'] }, { args: ['ar', 'key'], expected: ['key_0', 'key_1', 'key_2', 'key_3', 'key_4', 'key_5'] }, ]; tests.forEach((test) => { it(`correctly returns pluralforms of a given key for ${JSON.stringify( test.args, )} args`, () => { expect(pr.getPluralFormsOfKey.apply(pr, test.args)).to.eql(test.expected); }); }); }); describe('getPluralFormsOfKey() with nonSimplifiedPluralSuffix', () => { let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en', simplifyPluralSuffix: false, pluralSeparator: '_', compatibilityJSON: 'v3', }); pr = i18next.services.pluralResolver; }); const tests = [ { args: ['en', 'key'], expected: ['key_0', 'key_1'] }, { args: ['ar', 'key'], expected: ['key_0', 'key_1', 'key_2', 'key_3', 'key_4', 'key_5'] }, ]; tests.forEach((test) => { it(`correctly returns pluralforms of a given key for ${JSON.stringify( test.args, )} args`, () => { expect(pr.getPluralFormsOfKey.apply(pr, test.args)).to.eql(test.expected); }); }); }); describe('getSuffixes()', () => { let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en', pluralSeparator: '_', compatibilityJSON: 'v3', }); pr = i18next.services.pluralResolver; }); const tests = [ { args: [], expected: [] }, { args: ['en'], expected: ['', '_plural'] }, { args: ['ar'], expected: ['_0', '_1', '_2', '_3', '_4', '_5'] }, ]; tests.forEach((test) => { it(`correctly returns pluralforms of a given key for ${JSON.stringify( test.args, )} args`, () => { expect(pr.getSuffixes.apply(pr, test.args)).to.eql(test.expected); }); }); }); }); i18next-i18next-db698b1/test/compatibility/v1/v1.11.1.basic.test.js000066400000000000000000000274611527173754700244440ustar00rootroot00000000000000import { describe, it, expect, vitest, beforeEach, afterEach, beforeAll } from 'vitest'; import nise from 'nise'; import { i18nCompatibilityV1 as i18n, getI18nCompatibilityV1InitOptions, httpApiCompatibilityV1 as httpApi, httpApiReadMockImplementation, } from './v1.i18nInstance.js'; import * as compat from './v1.js'; describe('v1.11.1 basic usage', () => { let opts; beforeEach(() => { opts = compat.convertAPIOptions(getI18nCompatibilityV1InitOptions()); }); describe('CI mode', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore: { 'en-US': { translation: { simpleTest: 'ok_from_en-US' } }, 'de-DE': { translation: { simpleTest: 'ok_from_de-DE' } }, }, }), ); }); it('it should provide resources for set language', async () => { expect.assertions(2); expect(i18n.t('simpleTest')).to.equal('ok_from_en-US'); await i18n.setLng('CIMode', (err, t) => { expect(t('simpleTest')).to.equal('simpleTest'); }); }); }); describe('setting language', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore: { 'en-US': { translation: { simpleTest: 'ok_from_en-US' } }, 'de-DE': { translation: { simpleTest: 'ok_from_de-DE' } }, }, }), ); }); it('it should provide resources for set language', async () => { expect.assertions(2); expect(i18n.t('simpleTest')).to.equal('ok_from_en-US'); await i18n.setLng('de-DE', (err, t) => { expect(t('simpleTest')).to.equal('ok_from_de-DE'); }); }); it('should be possible to call setLng multiple times to get specialized callbacks', () => { expect.assertions(5); i18n.setLng('de-DE', { fixLng: true }, (deError, deDE) => { expect(deDE.lng).to.equal('de-DE'); i18n.setLng('en-US', { fixLng: true }, (enError, enUS) => { expect(deDE.lng).to.equal('de-DE'); expect(enUS.lng).to.equal('en-US'); expect(deDE('simpleTest')).to.equal('ok_from_de-DE'); expect(enUS('simpleTest')).to.equal('ok_from_en-US'); }); }); }); }); describe('preloading multiple languages', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(async () => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); return () => { spy.mockReset(); }; }); beforeEach(async () => { await i18n.init(opts); }); it('it should preload resources for languages', () => { expect.assertions(1); spy.mockClear(); // if (i18n.sync.resStore) i18n.sync.resStore = {}; // to reset for test on server! i18n.preload('de-DE', () => { expect(spy).toHaveBeenCalledTimes(2); // de-DE, de }); }); }); describe('postprocessing tranlation', () => { describe('having a postprocessor', () => { beforeAll(() => { i18n.addPostProcessor('myProcessor', () => 'ok_from_postprocessor'); i18n.addPostProcessor('myProcessor2', (val) => `${val} ok`); }); beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore: { 'en-US': { translation: { simpleTest: 'ok_from_en-US' } }, 'de-DE': { translation: { simpleTest: 'ok_from_de-DE' } }, }, }), ); }); it('it should postprocess the translation by passing in postProcess name to t function', () => { expect(i18n.t('simpleTest', { postProcess: 'myProcessor' })).to.equal( 'ok_from_postprocessor', ); }); it('it should postprocess on default value', () => { expect( i18n.t('notFound1', { defaultValue: 'defaultValue', postProcess: 'myProcessor2' }), ).to.equal('defaultValue ok'); }); it('it should postprocess on missing value', () => { expect(i18n.t('notFound2', { postProcess: 'myProcessor2' })).to.equal('notFound2 ok'); }); it('it should postprocess with multiple post processors', () => { expect(i18n.t('simpleTest', { postProcess: ['myProcessor', 'myProcessor2'] })).to.equal( 'ok_from_postprocessor ok', ); }); it('it should postprocess on missing value with multiple post processes', () => { expect(i18n.t('notFound2', { postProcess: ['myProcessor', 'myProcessor2'] })).to.equal( 'ok_from_postprocessor ok', ); }); describe('or setting it as default on init', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore: { 'en-US': { translation: { simpleTest: 'ok_from_en-US' } }, 'de-DE': { translation: { simpleTest: 'ok_from_de-DE' } }, }, postProcess: 'myProcessor', shortcutFunction: 'defaultValue', }), ); }); it('it should postprocess the translation by default', () => { expect(i18n.t('simpleTest')).to.equal('ok_from_postprocessor'); }); }); }); }); describe('post missing resources', () => { describe('to fallback', () => { /** @type {ReturnType} */ let server; /** @type {import('vitest').MockInstance} */ let spy; beforeEach(async () => { server = nise.fakeServer.create(); spy = vitest.spyOn(httpApi, 'create'); // spy = sinon.spy(i18n.services.backendConnector, 'saveMissing'); server.respondWith([200, { 'Content-Type': 'text/html', 'Content-Length': 2 }, 'OK']); await i18n.init( i18n.functions.extend(opts, { sendMissing: true, resStore: { 'en-US': { translation: {} }, en: { translation: {} }, dev: { translation: {} }, }, }), ); }); afterEach(() => { server.restore(); // stub.restore(); spy.mockClear(); }); it('it should post missing resource to server', () => { i18n.t('missing'); server.respond(); expect(spy).toHaveBeenCalledOnce(); }); it('it should post missing resource to server when language is passed in', () => { i18n.t('missing_en', { lng: 'en' }); server.respond(); expect(spy).toHaveBeenCalledOnce(); }); it('it should call with right arguments', () => { i18n.t('missing'); expect(spy).toHaveBeenCalledOnce(); expect(spy).toHaveBeenCalledWith( ['en-US'], 'translation', 'missing', 'missing', expect.objectContaining({ isUpdate: expect.any(Boolean), postProcess: expect.any(String), }), ); }); describe('with fallbackLng set to false', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { lng: 'de', sendMissing: true, fallbackLng: false, sendMissingTo: 'fallback', resStore: { 'en-US': { translation: {} }, en: { translation: {} }, dev: { translation: {} }, }, }), ); }); it('it should post missing resource to server', () => { i18n.t('missing'); server.respond(); expect(spy).toHaveBeenCalledOnce(); }); it('it should call post missing with right arguments', () => { i18n.t('missing'); expect(spy).toHaveBeenCalledWith( ['de'], 'translation', 'missing', 'missing', expect.objectContaining({ isUpdate: expect.any(Boolean), postProcess: expect.any(String), }), ); }); }); }); describe('to current', () => { /** @type {ReturnType} */ let server; /** @type {import('vitest').MockInstance} */ let spy; beforeEach(() => { server = nise.fakeServer.create(); spy = vitest.spyOn(httpApi, 'create'); server.respondWith([200, { 'Content-Type': 'text/html', 'Content-Length': 2 }, 'OK']); return () => { server.restore(); spy.mockClear(); }; }); beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { sendMissing: true, sendMissingTo: 'current', // fallbackLng: false, resStore: { 'en-US': { translation: {} }, en: { translation: {} }, dev: { translation: {} }, }, }), ); }); it('it should post missing resource for all lng to server', () => { i18n.t('missing'); server.respond(); expect(spy).toHaveBeenCalledOnce(); }); it('it should call post missing with right arguments', () => { i18n.t('missing2'); expect(spy).toHaveBeenCalledWith( ['en-US'], 'translation', 'missing2', 'missing2', expect.objectContaining({ isUpdate: expect.any(Boolean), postProcess: expect.any(String), }), ); }); }); describe('to all', () => { /** @type {ReturnType} */ let server; /** @type {import('vitest').MockInstance} */ let spy; beforeEach(() => { server = nise.fakeServer.create(); spy = vitest.spyOn(httpApi, 'create'); server.respondWith([200, { 'Content-Type': 'text/html', 'Content-Length': 2 }, 'OK']); return () => { server.restore(); spy.mockRestore(); }; }); afterEach(async () => { await i18n.init( i18n.functions.extend(opts, { sendMissing: true, sendMissingTo: 'all', resStore: { 'en-US': { translation: {} }, en: { translation: {} }, dev: { translation: {} }, }, }), ); }); it('it should post missing resource for all lng to server', () => { i18n.t('missing'); server.respond(); expect(spy).toHaveBeenCalledOnce(); }); it('it should call post missing with right arguments', () => { i18n.t('missing2'); expect(spy.mock.calls[0][0]).to.eql(['en-US', 'en', 'dev']); expect(spy.mock.calls[0][1]).to.equal('translation'); expect(spy.mock.calls[0][2]).to.equal('missing2'); expect(spy.mock.calls[0][3]).to.equal('missing2'); }); }); }); describe('using objectTreeKeyHandler', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { objectTreeKeyHandler(key) { return i18n.t(`${key}.a`); }, resStore: { 'en-US': { translation: { simpleTest: { a: 'a value', b: 'b value' } } }, }, returnObjectTrees: false, }), ); }); it('it should apply objectTreeKeyHandler', () => { expect(i18n.t('simpleTest')).to.equal('a value'); }); }); describe.skip('[WONT BE EXPOSED AS I18N]Global variable conflict', () => { it( 'it should rename global "window.i18n" to "window.i18next"' + ' and restore window.i18n conflicting reference', () => { window.i18n.noConflict(); expect(window.i18n.isFakeConflictingLib).to.equal(true); expect(window.i18next).to.be.an(Object); expect(window.i18next.t).to.be.a(Function); }, ); }); }); i18next-i18next-db698b1/test/compatibility/v1/v1.11.1.initialisation.test.js000066400000000000000000001015001527173754700263660ustar00rootroot00000000000000import { describe, it, expect, vitest, beforeEach, afterEach } from 'vitest'; import { i18nCompatibilityV1 as i18n, getI18nCompatibilityV1InitOptions, httpApiCompatibilityV1 as httpApi, httpApiReadMockImplementation, } from './v1.i18nInstance.js'; import * as compat from './v1.js'; describe('v1.11.1 initialisation', () => { let opts; beforeEach(() => { opts = compat.convertAPIOptions(getI18nCompatibilityV1InitOptions()); }); describe('determining language directionality', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(async () => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); await i18n.init(); return () => { spy.mockReset(); }; }); it('returns ltr for en-US', () => { i18n.setLng('en-US'); expect(i18n.dir()).to.equal('ltr'); }); it('returns ltr for unknown language', () => { i18n.setLng('unknown'); expect(i18n.dir()).to.equal('ltr'); }); it('returns rtl for ar', async () => { await i18n.setLng('ar'); expect(i18n.dir()).to.equal('rtl'); }); it('returns rtl for ar-IR', async () => { await i18n.setLng('ar-Ir'); expect(i18n.dir()).to.equal('rtl'); }); it('returns rtl for fa-AF', async () => { await i18n.setLng('fa-AF'); expect(i18n.dir()).to.equal('rtl'); }); it('returns ltr for fa-Latn-AF', async () => { await i18n.setLng('fa-Latn-AF'); expect(i18n.dir()).to.equal('ltr'); }); }); describe('with passed in resource set', () => { const resStore = { dev: { translation: { simple_dev: 'ok_from_dev' } }, en: { translation: { simple_en: 'ok_from_en' } }, 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should provide passed in resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); }); describe('loading from server with static route', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(() => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); return () => { spy.mockClear(); }; }); beforeEach(async () => { await i18n.init(opts); }); it('it should provide loaded resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); expect(i18n.t('xhr_simple_en-US')).to.equal('xhr_ok_from_en-US'); expect(i18n.t('xhr_simple_en')).to.equal('xhr_ok_from_en'); expect(i18n.t('xhr_simple_dev')).to.equal('xhr_ok_from_dev'); }); }); describe('advanced initialisation options', () => { describe('setting fallbackLng', () => { const resStore = { dev1: { translation: { simple_dev1: 'ok_from_dev1' } }, en: { translation: { simple_en: 'ok_from_en' } }, 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore, fallbackLng: 'dev1' })); }); it('it should provide passed in resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev1')).to.equal('ok_from_dev1'); }); }); describe('multiple fallbackLng', () => { const resStore = { dev1: { translation: { simple_dev1: 'ok_from_dev1', simple_dev: 'ok_from_dev1' } }, dev2: { translation: { simple_dev2: 'ok_from_dev2', simple_dev: 'ok_from_dev2' } }, en: { translation: { simple_en: 'ok_from_en' } }, 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(async () => { i18n.init(i18n.functions.extend(opts, { resStore, fallbackLng: ['dev1', 'dev2'] })); }); it('it should provide passed in resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); // in one expect(i18n.t('simple_dev1')).to.equal('ok_from_dev1'); expect(i18n.t('simple_dev2')).to.equal('ok_from_dev2'); // in both expect(i18n.t('simple_dev')).to.equal('ok_from_dev1'); }); }); describe('adding resources after init', () => { const resStore = { dev: { translation: { simple_dev: 'ok_from_dev' } }, en: { translation: { simple_en: 'ok_from_en' } }, // , // 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } } }; describe('resources', () => { beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); i18n.addResource('en-US', 'translation', 'some.deep.thing', 'ok_from_en-US'); }); it('it should provide passed in resources for translation', () => { expect(i18n.t('some.deep.thing')).to.equal('ok_from_en-US'); }); describe('multiple resources', () => { beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); i18n.addResources('en-US', 'translation', { 'some.other.deep.thing': 'ok_from_en-US_1', 'some.other.deep.deeper.thing': 'ok_from_en-US_2', }); }); it('it should add the new namespace to the namespace array', () => { expect(i18n.t('some.other.deep.thing')).to.equal('ok_from_en-US_1'); expect(i18n.t('some.other.deep.deeper.thing')).to.equal('ok_from_en-US_2'); }); }); }); describe('bundles', () => { beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); i18n.addResourceBundle('en-US', 'translation', { 'simple_en-US': 'ok_from_en-US' }); }); it('it should provide passed in resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); describe('with a additional namespace', () => { beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); i18n.addResourceBundle('en-US', 'newNamespace', { 'simple_en-US': 'ok_from_en-US', }); }); it('it should add the new namespace to the namespace array', () => { expect(i18n.options.ns).to.contain('newNamespace'); }); }); describe('with using deep switch', () => { beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); i18n.addResourceBundle('en-US', 'translation', { deep: { 'simple_en-US_1': 'ok_from_en-US_1' }, }); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_2': 'ok_from_en-US_2' } }, true, ); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_3': 'ok_from_en-US_3' } }, true, ); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_3': 'ok_from_en-US_3-overwrite' } }, true, ); }); it('it should add the new namespace to the namespace array', () => { expect(i18n.t('deep.simple_en-US_1')).to.equal('ok_from_en-US_1'); expect(i18n.t('deep.simple_en-US_2')).to.equal('ok_from_en-US_2'); }); it('it should not overwrite any existing entries if the overwrite switch is off', () => { expect(i18n.t('deep.simple_en-US_3')).to.equal('ok_from_en-US_3'); }); }); describe('with using deep switch and overwrite switch', () => { beforeEach(async () => { i18n.init(i18n.functions.extend(opts, { resStore })); i18n.addResourceBundle('en-US', 'translation', { deep: { 'simple_en-US_1': 'ok_from_en-US_1' }, }); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_2': 'ok_from_en-US_2' } }, true, ); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_3': 'ok_from_en-US_3' } }, true, ); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_3': 'ok_from_en-US_3-overwrite' } }, true, true, ); }); it('it should add the new namespace to the namespace array', () => { expect(i18n.t('deep.simple_en-US_1')).to.equal('ok_from_en-US_1'); expect(i18n.t('deep.simple_en-US_2')).to.equal('ok_from_en-US_2'); }); it('it should overwrite any existing entries if the overwrite switch is on', () => { expect(i18n.t('deep.simple_en-US_3')).to.equal('ok_from_en-US_3-overwrite'); }); }); describe('check if exists', () => { beforeEach(() => { i18n.init(i18n.functions.extend(opts, { resStore })); i18n.addResourceBundle('en-US', 'translation', { deep: { 'simple_en-US_1': 'ok_from_en-US_1' }, }); i18n.addResourceBundle( 'en-US', 'translation', { deep: { 'simple_en-US_2': 'ok_from_en-US_2' } }, true, ); }); it('it should return true for existing bundle', () => { expect(i18n.hasResourceBundle('en-US', 'translation')).toBe(true); }); it('it should return false for non-existing bundle', () => { expect(i18n.hasResourceBundle('de-CH', 'translation')).not.toBe(true); }); }); }); }); describe('getting resources after init', () => { const resStore = { dev: { translation: { test: 'ok_from_dev' } }, en: { translation: { test: 'ok_from_en' } }, 'en-US': { translation: { test: 'ok_from_en-US' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should return resources for existing bundle', () => { const devTranslation = i18n.getResourceBundle('dev', 'translation'); const enTranslation = i18n.getResourceBundle('en', 'translation'); const enUSTranslation = i18n.getResourceBundle('en-US', 'translation'); expect(devTranslation.test).to.equal('ok_from_dev'); expect(enTranslation.test).to.equal('ok_from_en'); expect(enUSTranslation.test).to.equal('ok_from_en-US'); }); it('it should return empty object for non-existing bundle', () => { const nonExisting = i18n.getResourceBundle('en-GB', 'translation'); expect(Object.keys(nonExisting).length).to.equal(0); }); it('it should use default namespace when namespace argument is left out', () => { const enTranslation = i18n.getResourceBundle('en'); expect(enTranslation.test).to.equal('ok_from_en'); }); it('it should return a clone of the resources', () => { const enTranslation = i18n.getResourceBundle('en'); enTranslation.test = 'ok_from_en_changed'; expect(enTranslation.test).to.equal('ok_from_en_changed'); expect(resStore.en.translation.test).to.equal('ok_from_en'); }); }); describe('removing resources after init', () => { const resStore = { dev: { translation: { test: 'ok_from_dev' } }, en: { translation: { test: 'ok_from_en' } }, 'en-US': { translation: { test: 'ok_from_en-US' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); i18n.removeResourceBundle('en-US', 'translation'); }); it('it should remove resources', () => { expect(i18n.t('test')).to.equal('ok_from_en'); }); }); describe('setting load', () => { describe('to current', () => { let spy; beforeEach(() => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); return () => { spy.mockClear(); }; }); beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { load: 'current' })); }); it('it should load only current and fallback language', () => { expect(spy).toHaveBeenCalledTimes(2); // en-US, en }); it('it should provide loaded resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).not.to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); }); describe('to unspecific', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(() => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); return () => { spy.mockClear(); }; }); beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { load: 'unspecific' })); }); it('it should load only unspecific and fallback language', () => { expect(spy).toHaveBeenCalledTimes(2); // en, dev }); it('it should provide loaded resources for translation', () => { expect(i18n.t('simple_en-US')).not.to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); it('it should return unspecific language', () => { expect(i18n.lng()).to.equal('en'); }); }); }); describe('with fallback language set to false', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(() => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); return () => { spy.mockClear(); }; }); beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { fallbackLng: false })); }); it('it should load only specific and unspecific languages', () => { expect(spy).toHaveBeenCalledTimes(2); // en-US, en }); it('it should provide loaded resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).not.to.equal('ok_from_dev'); }); }); describe('preloading multiple languages', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(() => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); return () => { spy.mockClear(); }; }); beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { preload: ['fr', 'de-DE'] })); }); it('it should load additional languages', () => { expect(spy).toHaveBeenCalledTimes(6); // en-US, en, de-DE, de, fr, dev }); describe('changing the language', () => { beforeEach(async () => { spy.mockClear(); // if (i18n.sync.resStore) i18n.sync.resStore = {}; // to reset for test on server! await i18n.setLng('de-DE'); }); it('it should not reload the preloaded languages', () => { expect(spy).not.toHaveBeenCalled(); // de-DE the missing one }); }); }); describe('[WONT FIX - HARD DEPRECATION]with synchronous flag', () => { beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { getAsync: false })); }); it('it should provide loaded resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_dev'); }); }); describe('with namespace', () => { describe('with one namespace set', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(() => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); return () => { spy.mockClear(); }; }); beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { ns: 'ns.special' })); }); it('it should provide loaded resources for translation', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_special_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_special_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_special_dev'); }); }); describe('with more than one namespace set', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { ns: { namespaces: ['ns.common', 'ns.special'], defaultNs: 'ns.special' }, }), ); }); it('it should provide loaded resources for translation', () => { // default ns expect(i18n.t('simple_en-US')).to.equal('ok_from_special_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_special_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_special_dev'); // ns prefix expect(i18n.t('ns.common:simple_en-US')).to.equal('ok_from_common_en-US'); expect(i18n.t('ns.common:simple_en')).to.equal('ok_from_common_en'); expect(i18n.t('ns.common:simple_dev')).to.equal('ok_from_common_dev'); // ns in options expect(i18n.t('simple_en-US', { ns: 'ns.common' })).to.equal('ok_from_common_en-US'); expect(i18n.t('simple_en', { ns: 'ns.common' })).to.equal('ok_from_common_en'); expect(i18n.t('simple_dev', { ns: 'ns.common' })).to.equal('ok_from_common_dev'); }); describe('and fallbacking to default namespace', () => { const resStore = { dev: { 'ns.special': { simple_dev: 'ok_from_dev' } }, en: { 'ns.special': { simple_en: 'ok_from_en' } }, 'en-US': { 'ns.special': { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { fallbackToDefaultNS: true, resStore, ns: { namespaces: ['ns.common', 'ns.special'], defaultNs: 'ns.special' }, }), ); }); it('it should fallback to default ns', () => { // default ns fallback lookup expect(i18n.t('ns.common:simple_en-US')).to.equal('ok_from_en-US'); expect(i18n.t('ns.common:simple_en')).to.equal('ok_from_en'); expect(i18n.t('ns.common:simple_dev')).to.equal('ok_from_dev'); // ns in options expect(i18n.t('simple_en-US', { ns: 'ns.common' })).to.equal('ok_from_en-US'); expect(i18n.t('simple_en', { ns: 'ns.common' })).to.equal('ok_from_en'); expect(i18n.t('simple_dev', { ns: 'ns.common' })).to.equal('ok_from_dev'); }); }); describe('and fallbacking to set namespace', () => { const resStore = { dev: { 'ns.special': { simple_dev: 'ok_from_dev' }, 'ns.fallback': { simple_fallback: 'ok_from_fallback' }, }, en: { 'ns.special': { simple_en: 'ok_from_en' } }, 'en-US': { 'ns.special': { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { fallbackNS: 'ns.fallback', resStore, ns: { namespaces: ['ns.common', 'ns.special', 'ns.fallback'], defaultNs: 'ns.special', }, }), ); }); it('it should fallback to set fallback namespace', () => { expect(i18n.t('ns.common:simple_fallback')).to.equal('ok_from_fallback'); }); }); describe('and fallbacking to multiple set namespace', () => { const resStore = { dev: { 'ns.common': {}, 'ns.special': { simple_dev: 'ok_from_dev' }, 'ns.fallback1': { simple_fallback: 'ok_from_fallback1', simple_fallback1: 'ok_from_fallback1', }, }, en: { 'ns.special': { simple_en: 'ok_from_en' }, 'ns.fallback2': { simple_fallback: 'ok_from_fallback2', simple_fallback2: 'ok_from_fallback2', }, }, 'en-US': { 'ns.special': { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { fallbackNS: ['ns.fallback1', 'ns.fallback2'], resStore, ns: { namespaces: ['ns.common', 'ns.special', 'ns.fallback'], defaultNs: 'ns.special', }, }), ); }); it('it should fallback to set fallback namespace', () => { expect(i18n.t('ns.common:simple_fallback')).to.equal( 'ok_from_fallback1', ); /* first wins */ expect(i18n.t('ns.common:simple_fallback1')).to.equal('ok_from_fallback1'); expect(i18n.t('ns.common:simple_fallback2')).to.equal('ok_from_fallback2'); }); describe('and post missing', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { fallbackNS: ['ns.fallback1', 'ns.fallback2'], resStore, sendMissing: true /* must be changed to saveMissing */, ns: { namespaces: ['ns.common', 'ns.special', 'ns.fallback'], defaultNs: 'ns.special', }, }), (_, t) => { spy = vitest.spyOn(httpApi, 'create'); t('ns.common:notExisting'); }, ); }); afterEach(() => { spy.mockClear(); }); it('it should post only to origin namespace', () => { expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledWith( ['en-US'], 'ns.common', 'notExisting', 'notExisting', expect.objectContaining({ isUpdate: expect.any(Boolean), postProcess: expect.any(String), }), ); }); }); }); }); describe('with reloading additional namespace', () => { describe('without using localStorage', () => { beforeEach(async () => { await i18n.init(opts); i18n.setDefaultNamespace('ns.special'); await i18n.loadNamespaces(['ns.common', 'ns.special']); }); it('it should provide loaded resources for translation', () => { // default ns expect(i18n.t('simple_en-US')).to.equal('ok_from_special_en-US'); expect(i18n.t('simple_en')).to.equal('ok_from_special_en'); expect(i18n.t('simple_dev')).to.equal('ok_from_special_dev'); // ns prefix expect(i18n.t('ns.common:simple_en-US')).to.equal('ok_from_common_en-US'); expect(i18n.t('ns.common:simple_en')).to.equal('ok_from_common_en'); expect(i18n.t('ns.common:simple_dev')).to.equal('ok_from_common_dev'); // ns in options expect(i18n.t('simple_en-US', { ns: 'ns.common' })).to.equal('ok_from_common_en-US'); expect(i18n.t('simple_en', { ns: 'ns.common' })).to.equal('ok_from_common_en'); expect(i18n.t('simple_dev', { ns: 'ns.common' })).to.equal('ok_from_common_dev'); }); it('it should add the new namespaces to the namespace array', () => { expect(i18n.options.ns).to.contain('ns.common'); expect(i18n.options.ns).to.contain('ns.special'); }); describe('and fallbackToDefaultNS turned on', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { ns: 'ns.common', fallbackToDefaultNS: true, }), ); await i18n.loadNamespaces(['ns.special']); }); it('it should fallback to default namespace', () => { expect(i18n.t('ns.special:test.fallback_en')).to.equal('ok_from_common_en-fallback'); expect(i18n.t('ns.special:test.fallback_dev')).to.equal( 'ok_from_common_dev-fallback', ); }); }); }); // cache was removed // describe('with using localStorage', function() { // // var spy; // // before(function() { // if (typeof window !== 'undefined') { // safe use on server // window.localStorage.removeItem('res_en-US'); // window.localStorage.removeItem('res_en'); // window.localStorage.removeItem('res_dev'); // } // }); // // beforeEach(function(done) { // spy = sinon.spy(httpApi, 'read'); // i18n.init(i18n.functions.extend(opts, { // useLocalStorage: true // }), function(t) { // i18n.setDefaultNamespace('ns.special'); // i18n.loadNamespaces(['ns.common', 'ns.special'], done); // }); // }); // // afterEach(function() { // spy.restore(); // }); // // it('it should load language', function() { // expect(spy.callCount).to.equal(9); // en-US, en, de-DE, de, fr, dev * 3 namespaces (translate, common, special) // }); // // describe('on later reload of namespaces', function() { // // beforeEach(function(done) { // spy.reset(); // i18n.init(i18n.functions.extend(opts, { // useLocalStorage: true, // ns: 'translation' // }), function(t) { // i18n.setDefaultNamespace('ns.special'); // i18n.loadNamespaces(['ns.common', 'ns.special'], done); // }); // }); // // it('it should not reload language', function() { // expect(spy.callCount).to.equal(0); // }); // // }); // // }); // }); }); // describe('using localStorage', function() { // // var spy; // // before(function() { // window.localStorage.removeItem('res_en-US'); // window.localStorage.removeItem('res_en'); // window.localStorage.removeItem('res_dev'); // }); // // beforeEach(function(done) { // spy = sinon.spy(httpApi, 'read'); // i18n.init(i18n.functions.extend(opts, { // useLocalStorage: true // }), function(t) { done(); }); // }); // // afterEach(function() { // spy.restore(); // }); // // it('it should load language', function() { // expect(spy.callCount).to.equal(3); // en-US, en, de-DE, de, fr, dev // }); // // describe('on later init', function() { // // beforeEach(function(done) { // spy.reset(); // i18n.init(function(t) { done(); }); // }); // // it('it should not reload language', function() { // expect(spy.callCount).to.equal(0); // de-DE, de, fr, dev // }); // // describe('on later init - after caching duration', function() { // // beforeEach(function(done) { // spy.reset(); // // // expired // var local = window.localStorage.getItem('res_en-US'); // local = JSON.parse(local); // local.i18nStamp = 0; // window.localStorage.setItem('res_en-US', JSON.stringify(local)); // // i18n.init(function(t) { done(); }); // }); // // it('it should reload language', function() { // expect(spy.callCount).to.equal(1); // de-DE, de, fr, dev // }); // // }); // // }); // // }); describe("using function provided in callback's argument", () => { /** @type {import('i18next').TFunction} */ let tCallback; const resStore = { dev: { translation: { simple_dev: 'ok_from_dev' } }, en: { translation: { simple_en: 'ok_from_en' } }, 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore }), (_, t) => { tCallback = t; }); }); it('it should provide loaded resources for translation', () => { expect(tCallback('simple_en-US')).to.equal('ok_from_en-US'); expect(tCallback('simple_en')).to.equal('ok_from_en'); expect(tCallback('simple_dev')).to.equal('ok_from_dev'); }); }); describe('with lowercase flag', () => { describe('default behaviour will uppercase specific country part.', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { lng: 'en-us', resStore: { 'en-US': { translation: { 'simple_en-US': 'ok_from_en-US' } }, }, }), ); }); it('it should translate the uppercased lng value', () => { expect(i18n.t('simple_en-US')).to.equal('ok_from_en-US'); }); it('it should get uppercased set language', () => { expect(i18n.lng()).to.equal('en-US'); }); }); describe('overridden behavior will accept lowercased country part.', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { lng: 'en-us', lowerCaseLng: true, resStore: { 'en-us': { translation: { 'simple_en-us': 'ok_from_en-us' } }, }, }), ); }); it('it should translate the lowercase lng value', () => { expect(i18n.t('simple_en-us')).to.equal('ok_from_en-us'); }); it('it should get lowercased set language', () => { expect(i18n.lng()).to.equal('en-us'); }); }); }); describe('with language whitelist', () => { const resStore = { 'zh-CN': { translation: { string_one: 'good_zh-CN' } }, en: { translation: { string_one: 'good_en' } }, zh: { translation: { string_one: 'BAD_zh' } }, 'en-US': { translation: { string_one: 'BAD_en-ZH' } }, }; it('should degrade UNwhitelisted 2-part lang code (en-US) to WHITELISTED 1-part (en)', async () => { await i18n.init( i18n.functions.extend(opts, { resStore, lngWhitelist: ['en', 'zh-CN'], lng: 'en-US', }), () => { expect(i18n.lng()).to.equal('en'); expect(i18n.t('string_one')).to.equal('good_en'); }, ); }); it('should NOT degrade WHITELISTED 2-part lang code (zh-CN) to UNwhitelisted 1-part (en)', async () => { expect.assertions(2); await i18n.init( i18n.functions.extend(opts, { resStore, lngWhitelist: ['en', 'zh-CN'], lng: 'zh-CN', }), () => { expect(i18n.lng()).to.equal('zh-CN'); expect(i18n.t('string_one')).to.equal('good_zh-CN'); }, ); }); }); }); }); i18next-i18next-db698b1/test/compatibility/v1/v1.11.1.translation.test.js000066400000000000000000001342251527173754700257160ustar00rootroot00000000000000import { describe, it, expect, vitest, beforeEach } from 'vitest'; import { i18nCompatibilityV1 as i18n, getI18nCompatibilityV1InitOptions, httpApiCompatibilityV1 as httpApi, httpApiReadMockImplementation, } from './v1.i18nInstance.js'; import * as compat from './v1.js'; describe('v1.11.1 translation', () => { let opts; beforeEach(() => { opts = compat.convertAPIOptions(getI18nCompatibilityV1InitOptions()); }); describe('keys with non supported values', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { test: 'hi', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should not break on null key', () => { expect(i18n.t(null)).to.equal(''); }); it('it should not break on undefined key', () => { expect(i18n.t(undefined)).to.equal(''); }); it('it should stringify first on number key', () => { expect(i18n.t(1)).to.equal(i18n.t('1')); expect(i18n.t(1.1)).to.equal(i18n.t('1.1')); }); }); describe('resource is missing', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should return key', () => { expect(i18n.t('missing')).to.equal('translation:missing'); }); it('it should return default value if set', () => { expect(i18n.t('missing', { defaultValue: 'defaultOfMissing' })).to.equal('defaultOfMissing'); }); describe('with namespaces', () => { it('it should return key', () => { expect(i18n.t('translate:missing')).to.equal('translate:missing'); }); it('it should return default value if set', () => { expect(i18n.t('translate:missing', { defaultValue: 'defaultOfMissing' })).to.equal( 'defaultOfMissing', ); }); describe('and function parseMissingKey set', () => { beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { parseMissingKey(key) { let ret = key; if (ret.indexOf(':')) { ret = ret.substring(ret.lastIndexOf(':') + 1, ret.length); } if (ret.indexOf('.')) { ret = ret.substring(ret.lastIndexOf('.') + 1, ret.length); } return ret; }, }), ); }); it('it should parse key', () => { expect(i18n.t('translate:missing')).to.equal('missing'); expect(i18n.t('translate:somenesting.missing')).to.equal('missing'); }); it('it should return default value if set', () => { expect(i18n.t('translate:missing', { defaultValue: 'defaultOfMissing' })).to.equal( 'defaultOfMissing', ); }); }); }); }); describe('Check for existence of keys', () => { const resStore = { dev: { translation: { iExist: '' } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(async () => { i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should exist', () => { expect(i18n.exists('iExist')).to.equal(true); }); it('it should not exist', () => { expect(i18n.exists('iDontExist')).to.equal(false); }); describe('missing on unspecific', () => { beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore, lng: 'en' })); }); it('it should exist', () => { expect(i18n.exists('iExist')).to.equal(true); }); it('it should not exist', () => { expect(i18n.exists('iDontExist')).to.equal(false); }); }); }); describe('resource string is null', () => { const resStore = { dev: { translation: { key1: null, key2: { key3: null } } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, returnObjectTrees: true, fallbackOnNull: false, }), ); }); it('it should translate value', () => { expect(i18n.t('key1')).to.equal(null); expect(i18n.t('key2')).to.eql({ key3: null }); }); }); describe('with option fallbackOnNull = true', () => { const resStore = { dev: { translation: { key1: 'fallbackKey1', key2: { key3: 'fallbackKey3' } } }, en: { translation: {} }, 'en-US': { translation: { key1: null, key2: { key3: null } } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore, fallbackOnNull: true })); }); it('it should translate to fallback value', () => { expect(i18n.t('key1')).to.equal('fallbackKey1'); expect(i18n.t('key2.key3')).to.eql('fallbackKey3'); }); }); describe('key with empty string value as valid option', () => { describe('it should translate correctly with default language', () => { const resStore = { dev: { translation: { empty: '' } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should translate correctly', () => { expect(i18n.t('empty')).to.equal(''); }); }); describe('missing on unspecific', () => { const resStore = { dev: { translation: { empty: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore, lng: 'en' })); }); it('it should translate correctly', () => { expect(i18n.t('empty')).to.equal('text'); }); }); describe('on specific language', () => { const resStore = { dev: { translation: { empty: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should translate correctly', () => { expect(i18n.t('empty')).to.equal(''); }); }); }); describe('key with empty string set to fallback if empty', () => { describe('missing on unspecific', () => { const resStore = { dev: { translation: { empty: '' } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore, fallbackOnEmpty: true })); }); it('it should translate correctly', () => { expect(i18n.t('empty')).to.equal('translation:empty'); }); }); describe('missing on unspecific', () => { const resStore = { dev: { translation: { empty: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, lng: 'en', fallbackOnEmpty: true }), ); }); it('it should translate correctly', () => { expect(i18n.t('empty')).to.equal('text'); }); }); describe('on specific language', () => { const resStore = { dev: { translation: { empty: 'text' } }, en: { translation: {} }, 'en-US': { translation: { empty: '' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore, fallbackOnEmpty: true })); }); it('it should translate correctly', () => { expect(i18n.t('empty')).to.equal('text'); }); }); }); describe('resource key as array', () => { const resStore = { dev: { translation: { existing1: 'hello _name_', existing2: 'howdy __name__' } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); describe('when none of the keys exist', () => { it('return the same value as translating the last non-existent key', () => { expect(i18n.t(['nonexistent1', 'nonexistent2'], { name: 'Joe' })).to.equal( i18n.t('nonexistent2', { name: 'Joe' }), ); }); }); describe('when one of the keys exist', () => { it('return the same value as translating the one existing key', () => { expect(i18n.t(['nonexistent1', 'existing2'], { name: 'Joe' })).to.equal( i18n.t('existing2', { name: 'Joe' }), ); }); }); describe('when two or more of the keys exist', () => { it('return the same value as translating the first existing key', () => { expect(i18n.t(['nonexistent1', 'existing2', 'existing1'], { name: 'Joe' })).to.equal( i18n.t('existing2', { name: 'Joe' }), ); }); }); }); describe('resource string as array', () => { const resStore = { dev: { translation: { testarray: ['title', 'text'] } }, en: { translation: {} }, 'en-US': { translation: {} }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should translate nested value', () => { expect(i18n.t('testarray')).to.equal('title\ntext'); }); }); describe('accessing tree values', () => { describe('basic usage', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { test: { 'simple_en-US': 'ok_from_en-US' }, }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should return nested string as usual', () => { expect(i18n.t('test.simple_en-US')).to.equal('ok_from_en-US'); }); it('it should not fail silently on accessing an objectTree', () => { expect(i18n.t('test')).to.equal("key 'test (en-US)' returned an object instead of string."); }); }); describe('optional return an objectTree for UI components,...', () => { describe('with init flag', () => { const resStore = { dev: { translation: { test_dev: { res_dev: 'added __replace__' }, }, }, en: { translation: {} }, 'en-US': { translation: { test_en_US: { res_en_US: 'added __replace__' }, }, }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { returnObjectTrees: true, resStore, }), ); }); it('it should return objectTree applying options', () => { expect(i18n.t('test_en_US', { replace: 'two' })).to.eql({ res_en_US: 'added two' }); expect(i18n.t('test_en_US', { replace: 'three' })).to.eql({ res_en_US: 'added three' }); expect(i18n.t('test_en_US', { replace: 'four' })).to.eql({ res_en_US: 'added four' }); // from fallback expect(i18n.t('test_dev', { replace: 'two' })).to.eql({ res_dev: 'added two' }); }); }); describe('with flag in options', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { test: { res: 'added __replace__', id: 0, regex: /test/, func() {}, template: '4', title: 'About...', text: 'Site description', media: ['test'], }, }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { returnObjectTrees: false, resStore })); }); it('it should return objectTree', () => { expect(i18n.t('test', { returnObjectTrees: true, replace: 'two' })).to.eql({ res: 'added two', id: 0, regex: resStore['en-US'].translation.test.regex, func: resStore['en-US'].translation.test.func, template: '4', title: 'About...', text: 'Site description', media: ['test'], }); // expect(i18n.t('test', { returnObjectTrees: true, replace: 'three' })).to.eql({ 'res': 'added three' }); // expect(i18n.t('test', { returnObjectTrees: true, replace: 'four' })).to.eql({ 'res': 'added four' }); }); }); }); }); describe('resource nesting', () => { describe('basic usage', () => { const resStore = { dev: { translation: { nesting1: '1 $t(nesting2)' } }, en: { translation: { nesting2: '2 $t(nesting3)' } }, 'en-US': { translation: { nesting3: '3' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should translate nested value', () => { expect(i18n.t('nesting1')).to.equal('1 2 3'); }); it('it should apply nested value on defaultValue', () => { expect(i18n.t('nesting_default', { defaultValue: '0 $t(nesting1)' })).to.equal('0 1 2 3'); }); }); describe('resource nesting syntax error', () => { const resStore = { dev: { translation: { nesting1: '1 $t(nesting2' } }, en: { translation: { nesting2: '2 $t(nesting3)' } }, 'en-US': { translation: { nesting3: '3' } }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it.skip('[WONT FIX - FIX YOUR APPLICATION]it should translate nested value', () => { expect(i18n.t('nesting1')).to.equal(''); }); }); describe('with setting new options', () => { const resStore = { dev: { translation: { nesting1: '$t(nesting2, {"count": __girls__}) and __count__ boy', nesting1_plural: '$t(nesting2, {"count": __girls__}) and __count__ boys', }, }, en: { translation: { nesting2: '__count__ girl', nesting2_plural: '__count__ girls', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should translate nested value and set new options', () => { expect(i18n.t('nesting1', { count: 2, girls: 3 })).to.equal('3 girls and 2 boys'); expect(i18n.t('nesting1', { count: 1, girls: 3 })).to.equal('3 girls and 1 boy'); }); }); }); describe('resource nesting with multiple namespaces and fallbackNS', () => { const resStore = { dev: { translation1: { nesting1: '1 $t(nesting2)' } }, en: { translation: { nesting2: '2 $t(nesting3)' } }, 'en-US': { translation: { nesting3: '3' } }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, ns: { namespaces: ['translation1', 'translation'], defaultNs: 'translation1' }, fallbackNS: ['translation'], }), ); }); it('it should translate nested value', () => { expect(i18n.t('translation1:nesting1')).to.equal('1 2 3'); }); }); describe('interpolation - replacing values inside a string', () => { describe('default i18next way', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added __toAdd__', interpolationTest2: 'added __toAdd__ __toAdd__ twice', interpolationTest3: 'added __child.one__ __child.two__', interpolationTest4: 'added __child.grandChild.three__', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should replace passed in key/values', () => { expect(i18n.t('interpolationTest1', { toAdd: 'something' })).to.equal('added something'); expect(i18n.t('interpolationTest1', { toAdd: null })).to.equal('added '); // expect(i18n.t('interpolationTest1', {})).to.equal('added '); // does not work anymore since removal of compatibilityAPI === v1 expect(i18n.t('interpolationTest2', { toAdd: 'something' })).to.equal( 'added something something twice', ); expect(i18n.t('interpolationTest3', { child: { one: '1', two: '2' } })).to.equal( 'added 1 2', ); expect(i18n.t('interpolationTest4', { child: { grandChild: { three: '3' } } })).to.equal( 'added 3', ); }); it('it should replace passed in key/values in replace member', () => { expect(i18n.t('interpolationTest1', { replace: { toAdd: 'something' } })).to.equal( 'added something', ); expect(i18n.t('interpolationTest2', { replace: { toAdd: 'something' } })).to.equal( 'added something something twice', ); expect( i18n.t('interpolationTest3', { replace: { child: { one: '1', two: '2' } } }), ).to.equal('added 1 2'); expect( i18n.t('interpolationTest4', { replace: { child: { grandChild: { three: '3' } } } }), ).to.equal('added 3'); }); it('it should not escape HTML', () => { expect(i18n.t('interpolationTest1', { toAdd: '' })).to.equal('added '); }); it('it should replace passed in key/values on defaultValue', () => { expect( i18n.t('interpolationTest5', { defaultValue: 'added __toAdd__', toAdd: 'something' }), ).to.equal('added something'); }); it('it should escape dollar signs in replacement values', () => { expect(i18n.t('interpolationTest1', { toAdd: '$&' })).to.equal('added $&'); }); }); describe('default i18next way - different prefix/suffix', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added *toAdd*', interpolationTest2: 'added *toAdd* *toAdd* twice', interpolationTest3: 'added *child.one* *child.two*', interpolationTest4: 'added *child.grandChild.three*', }, }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, interpolationPrefix: '*', interpolationSuffix: '*', }), ); }); it('it should replace passed in key/values', () => { expect(i18n.t('interpolationTest1', { toAdd: 'something' })).to.equal('added something'); expect(i18n.t('interpolationTest2', { toAdd: 'something' })).to.equal( 'added something something twice', ); expect(i18n.t('interpolationTest3', { child: { one: '1', two: '2' } })).to.equal( 'added 1 2', ); expect(i18n.t('interpolationTest4', { child: { grandChild: { three: '3' } } })).to.equal( 'added 3', ); }); it('it should replace passed in key/values on defaultValue', () => { expect( i18n.t('interpolationTest5', { defaultValue: 'added *toAdd*', toAdd: 'something' }), ).to.equal('added something'); }); }); describe('default i18next way - different prefix/suffix via options', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added *toAdd*', interpolationTest2: 'added *toAdd* *toAdd* twice', interpolationTest3: 'added *child.one* *child.two*', interpolationTest4: 'added *child.grandChild.three*', interpolationTest5: 'added *count*', interpolationTest5_plural: 'added *count*', }, }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, }), ); }); it('it should replace passed in key/values', () => { expect( i18n.t('interpolationTest1', { toAdd: 'something', interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added something'); expect( i18n.t('interpolationTest2', { toAdd: 'something', interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added something something twice'); expect( i18n.t('interpolationTest3', { child: { one: '1', two: '2' }, interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added 1 2'); expect( i18n.t('interpolationTest4', { child: { grandChild: { three: '3' } }, interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added 3'); expect( i18n.t('interpolationTest5', { count: 3, interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added 3'); }); it('it should replace passed in key/values on defaultValue', () => { expect( i18n.t('interpolationTest6', { defaultValue: 'added *toAdd*', toAdd: 'something', interpolationPrefix: '*', interpolationSuffix: '*', }), ).to.equal('added something'); }); }); describe('default i18next way - with escaping interpolated arguments per default', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added __toAdd__', interpolationTest5: 'added __toAddHTML__', interpolationTest6: 'added __child.oneHTML__', interpolationTest7: 'added __toAddHTML__ __toAdd__', interpolationTest8: 'added __toAdd1__ __toAdd2__', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore, escapeInterpolation: true })); }); it('it should escape HTML', () => { expect(i18n.t('interpolationTest1', { toAdd: '' })).to.equal('added <html>'); }); it('it should not escape when HTML is suffixed', () => { expect(i18n.t('interpolationTest5', { toAdd: '' })).to.equal('added '); expect(i18n.t('interpolationTest6', { child: { one: '<1>' } })).to.equal('added <1>'); }); it('it should support both escaping and not escaping HTML', () => { expect( i18n.t('interpolationTest7', { toAdd: '', escapeInterpolation: true }), ).to.equal('added <html>'); }); // it('should not accept interpolations from inside interpolations', () => { // does not work anymore since removal of compatibilityAPI === v1 // expect( // i18n.t('interpolationTest8', { toAdd1: '__toAdd2HTML__', toAdd2: '' }), // ).to.equal('added <html>'); // }); it('it should escape dollar signs in replacement values', () => { expect(i18n.t('interpolationTest1', { toAdd: '$&' })).to.equal('added $&'); }); }); describe('default i18next way - with escaping interpolated arguments per default via options', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'added __toAdd__', interpolationTest5: 'added __toAddHTML__', interpolationTest6: 'added __child.oneHTML__', interpolationTest7: 'added __toAddHTML__ __toAdd__', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should escape HTML', () => { expect( i18n.t('interpolationTest1', { toAdd: '', escapeInterpolation: true }), ).to.equal('added <html>'); }); it('it should not escape when HTML is suffixed', () => { expect( i18n.t('interpolationTest5', { toAdd: '', escapeInterpolation: true }), ).to.equal('added '); expect( i18n.t('interpolationTest6', { child: { one: '<1>', escapeInterpolation: true } }), ).to.equal('added <1>'); }); it('it should support both escaping and not escaping HTML', () => { expect( i18n.t('interpolationTest7', { toAdd: '', escapeInterpolation: true }), ).to.equal('added <html>'); }); it('it should escape dollar signs in replacement values', () => { expect(i18n.t('interpolationTest1', { toAdd: '$&', escapeInterpolation: true })).to.equal( 'added $&', ); }); }); describe('using sprintf', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { interpolationTest1: 'The first 4 letters of the english alphabet are: %s, %s, %s and %s', interpolationTest2: 'Hello %(users[0].name)s, %(users[1].name)s and %(users[2].name)s', interpolationTest3: 'The last letter of the english alphabet is %s', interpolationTest4: 'Water freezes at %d degrees', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should replace passed in key/values', () => { expect( i18n.t('interpolationTest1', { postProcess: 'sprintf', sprintf: ['a', 'b', 'c', 'd'] }), ).to.equal('The first 4 letters of the english alphabet are: a, b, c and d'); expect( i18n.t('interpolationTest2', { postProcess: 'sprintf', sprintf: { users: [{ name: 'Dolly' }, { name: 'Molly' }, { name: 'Polly' }] }, }), ).to.equal('Hello Dolly, Molly and Polly'); }); it('it should recognize the sprintf syntax and automatically add the sprintf processor', () => { expect(i18n.t('interpolationTest1', 'a', 'b', 'c', 'd')).to.equal( 'The first 4 letters of the english alphabet are: a, b, c and d', ); expect(i18n.t('interpolationTest3', 'z')).to.equal( 'The last letter of the english alphabet is z', ); expect(i18n.t('interpolationTest4', 0)).to.equal('Water freezes at 0 degrees'); }); }); describe('with default variables', () => { const defaultVariables = { name: 'John', }; /** @type {import('vitest').MockInstance} */ let spy; beforeEach(async () => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); await i18n.init(i18n.functions.extend(opts, { defaultVariables })); return () => { spy.mockReset(); }; }); it('it should use default variable', () => { expect(i18n.t('Hello __name__')).to.equal('Hello John'); }); it('it should replace default variable', () => { expect(i18n.t('Hello __name__', { name: 'Ben' })).to.equal('Hello Ben'); }); }); }); describe('plural usage', () => { describe('basic usage - singular and plural form', () => { const resStore = { dev: { 'ns.2': { pluralTest: 'singular from ns.2', pluralTest_plural: 'plural from ns.2', pluralTestWithCount: '__count__ item from ns.2', pluralTestWithCount_plural: '__count__ items from ns.2', }, }, en: {}, 'en-US': { 'ns.1': { pluralTest: 'singular', pluralTest_plural: 'plural', pluralTestWithCount: '__count__ item', pluralTestWithCount_plural: '__count__ items', }, }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, ns: { namespaces: ['ns.1', 'ns.2'], defaultNs: 'ns.1' }, }), ); }); it('it should provide correct plural or singular form', () => { expect(i18n.t('pluralTest', { count: 0 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 1 })).to.equal('singular'); expect(i18n.t('pluralTest', { count: 2 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 7 })).to.equal('plural'); }); it('it should provide correct plural or singular form with interpolation', () => { expect(i18n.t('pluralTestWithCount', { count: 0 })).to.equal('0 items'); expect(i18n.t('pluralTestWithCount', { count: 1 })).to.equal('1 item'); expect(i18n.t('pluralTestWithCount', { count: 7 })).to.equal('7 items'); }); it('it should provide correct plural or singular form for second namespace', () => { expect(i18n.t('ns.2:pluralTest', { count: 0 })).to.equal('plural from ns.2'); expect(i18n.t('ns.2:pluralTest', { count: 1 })).to.equal('singular from ns.2'); expect(i18n.t('ns.2:pluralTest', { count: 2 })).to.equal('plural from ns.2'); expect(i18n.t('ns.2:pluralTest', { count: 7 })).to.equal('plural from ns.2'); }); it('it should provide correct plural or singular form for second namespace with interpolation', () => { expect(i18n.t('ns.2:pluralTestWithCount', { count: 1 })).to.equal('1 item from ns.2'); expect(i18n.t('ns.2:pluralTestWithCount', { count: 7 })).to.equal('7 items from ns.2'); }); }); describe('fallback on count with non-plurals', () => { const resStore = { dev: { 'ns.2': { pluralTestWithCount: '__count__ item from ns.2', }, }, en: {}, 'en-US': { 'ns.1': { pluralTestWithCount: '__count__ item', }, }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, ns: { namespaces: ['ns.1', 'ns.2'], defaultNs: 'ns.1' }, }), ); }); it('it should provide correct singular form', () => { expect(i18n.t('pluralTestWithCount', { count: 0 })).to.equal('0 item'); expect(i18n.t('pluralTestWithCount', { count: 1 })).to.equal('1 item'); expect(i18n.t('pluralTestWithCount', { count: 7 })).to.equal('7 item'); }); it('it should provide correct singular form for second namespace', () => { expect(i18n.t('ns.2:pluralTestWithCount', { count: 1 })).to.equal('1 item from ns.2'); expect(i18n.t('ns.2:pluralTestWithCount', { count: 7 })).to.equal('7 item from ns.2'); }); }); describe('Plurals with passing lng to translation function', () => { const resStore = { nl: { translation: { pluralTest: 'item', pluralTest_plural: 'items', pluralTestWithCount: '__count__ item', pluralTestWithCount_plural: '__count__ items', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('should return the correct string for key', () => { expect(i18n.t('pluralTest', { count: 12, lng: 'nl' })).to.equal('items'); expect(i18n.t('pluralTest', { count: 0, lng: 'nl' })).to.equal('items'); }); it('should return the correct string for key with count interpoation', () => { expect(i18n.t('pluralTestWithCount', { count: 12, lng: 'nl' })).to.equal('12 items'); expect(i18n.t('pluralTestWithCount', { count: 0, lng: 'nl' })).to.equal('0 items'); }); }); describe('basic usage - singular and plural form on fallbacks', () => { const resStore = { fr: { translation: {}, }, en: { translation: { pluralTest: 'singular', pluralTest_plural: 'plural', pluralTestWithCount: '__count__ item', pluralTestWithCount_plural: '__count__ items', }, }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, lng: 'fr', fallbackLng: 'en', }), ); }); it('it should provide correct plural or singular form', () => { expect(i18n.t('pluralTest', { count: 0 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 1 })).to.equal('singular'); expect(i18n.t('pluralTest', { count: 2 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 7 })).to.equal('plural'); }); it('it should provide correct plural or singular form with count', () => { expect(i18n.t('pluralTestWithCount', { count: 0 })).to.equal('0 items'); expect(i18n.t('pluralTestWithCount', { count: 1 })).to.equal('1 item'); expect(i18n.t('pluralTestWithCount', { count: 7 })).to.equal('7 items'); }); }); describe('basic usage 2 - singular and plural form in french', () => { const resStore = { dev: { 'ns.2': { pluralTest: 'singular from ns.2', pluralTest_plural: 'plural from ns.2', pluralTestWithCount: '__count__ item from ns.2', pluralTestWithCount_plural: '__count__ items from ns.2', }, }, en: {}, fr: { 'ns.1': { pluralTest: 'singular', pluralTest_plural: 'plural', pluralTestWithCount: '__count__ item', pluralTestWithCount_plural: '__count__ items', }, }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { lng: 'fr', resStore, ns: { namespaces: ['ns.1', 'ns.2'], defaultNs: 'ns.1' }, }), ); }); it('it should provide correct plural or singular form', () => { expect(i18n.t('pluralTest', { count: 0 })).to.equal('singular'); expect(i18n.t('pluralTest', { count: 1 })).to.equal('singular'); expect(i18n.t('pluralTest', { count: 2 })).to.equal('plural'); expect(i18n.t('pluralTest', { count: 7 })).to.equal('plural'); }); it('it should provide correct plural or singular form with count', () => { expect(i18n.t('pluralTestWithCount', { count: 0 })).to.equal('0 item'); expect(i18n.t('pluralTestWithCount', { count: 1 })).to.equal('1 item'); expect(i18n.t('pluralTestWithCount', { count: 7 })).to.equal('7 items'); }); }); describe('extended usage - multiple plural forms - ar', () => { const resStore = { dev: { translation: {} }, ar: { translation: { key: 'singular', key_plural_0: 'zero', key_plural_2: 'two', key_plural_3: 'few', key_plural_11: 'many', key_plural_100: 'plural', }, }, 'ar-??': { translation: {} }, }; beforeEach(async () => { i18n.init(i18n.functions.extend(opts, { lng: 'ar', resStore })); }); it('it should provide correct plural forms', () => { expect(i18n.t('key', { count: 0 })).to.equal('zero'); expect(i18n.t('key', { count: 1 })).to.equal('singular'); expect(i18n.t('key', { count: 2 })).to.equal('two'); expect(i18n.t('key', { count: 3 })).to.equal('few'); expect(i18n.t('key', { count: 4 })).to.equal('few'); expect(i18n.t('key', { count: 104 })).to.equal('few'); expect(i18n.t('key', { count: 11 })).to.equal('many'); expect(i18n.t('key', { count: 99 })).to.equal('many'); expect(i18n.t('key', { count: 199 })).to.equal('many'); expect(i18n.t('key', { count: 100 })).to.equal('plural'); }); }); describe('extended usage - multiple plural forms - ru', () => { const resStore = { dev: { translation: {} }, ru: { translation: { key: '1,21,31', key_plural_2: '2,3,4', key_plural_5: '0,5,6', }, }, 'ru-??': { translation: {} }, }; beforeEach(async () => { i18n.init(i18n.functions.extend(opts, { lng: 'ru', resStore })); }); it('it should provide correct plural forms', () => { expect(i18n.t('key', { count: 0 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 1 })).to.equal('1,21,31'); expect(i18n.t('key', { count: 2 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 3 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 4 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 104 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 11 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 24 })).to.equal('2,3,4'); expect(i18n.t('key', { count: 25 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 99 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 199 })).to.equal('0,5,6'); expect(i18n.t('key', { count: 100 })).to.equal('0,5,6'); }); }); describe('extended usage - ask for a key in a language with a different plural form', () => { const resStore = { en: { translation: { key: 'singular_en', key_plural: 'plural_en', }, }, zh: { translation: { key: 'singular_zh', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { lng: 'zh', resStore })); }); it('it should provide translation for passed in language with 1 item', () => { expect(i18n.t('key', { lng: 'en', count: 1 })).to.equal('singular_en'); }); it('it should provide translation for passed in language with 2 items', () => { expect(i18n.t('key', { lng: 'en', count: 2 })).to.equal('plural_en'); }); }); }); describe.skip('[WONT FIX - FIND A BETTER SOLUTION]indefinite article usage', () => { describe('basic usage - singular, plural and indefinite', () => { const resStore = { dev: { 'ns.2': { thing: '__count__ thing from ns.2', thing_plural: '__count__ things from ns.2', thing_indefinite: 'A thing from ns.2', thing_plural_indefinite: 'Some things from ns.2', }, 'ns.3': { thing: '__count__ things', thing_indefinite: 'A thing', thing_plural_indefinite: 'Some things', }, }, en: {}, 'en-US': { 'ns.1': { thing: '__count__ thing', thing_plural: '__count__ things', thing_indefinite: 'A thing', }, }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, ns: { namespaces: ['ns.1', 'ns.2', 'ns.3'], defaultNs: 'ns.1' }, }), ); }); it('it should provide the indefinite article when requested for singular forms', () => { expect(i18n.t('thing')).to.equal('__count__ thing'); expect(i18n.t('thing', { indefinite_article: true })).to.equal('A thing'); expect(i18n.t('thing', { count: 1 })).to.equal('1 thing'); expect(i18n.t('thing', { count: 5 })).to.equal('5 things'); expect(i18n.t('thing', { count: 1, indefinite_article: true })).to.equal('A thing'); expect(i18n.t('thing', { count: 5, indefinite_article: true })).to.equal('5 things'); }); it('it should provide the indefinite article when requested for singular forms for second namespace', () => { expect(i18n.t('ns.2:thing', { count: 1 })).to.equal('1 thing from ns.2'); expect(i18n.t('ns.2:thing', { count: 5 })).to.equal('5 things from ns.2'); expect(i18n.t('ns.2:thing', { count: 1, indefinite_article: true })).to.equal( 'A thing from ns.2', ); expect(i18n.t('ns.2:thing', { count: 5, indefinite_article: true })).to.equal( 'Some things from ns.2', ); }); it('it should provide the right indefinite translations from the third namespace', () => { expect(i18n.t('ns.3:thing', { count: 5 })).to.equal('5 things'); expect(i18n.t('ns.3:thing', { count: 1, indefinite_article: true })).to.equal('A thing'); expect(i18n.t('ns.3:thing', { count: 5, indefinite_article: true })).to.equal( 'Some things', ); }); }); describe('extended usage - indefinite articles in languages with different plural forms', () => { const resStore = { dev: { translation: {}, }, zh: { translation: { key: '__count__ thing', key_indefinite: 'a thing', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { lng: 'zh', resStore })); }); it('it should provide the correct indefinite articles', () => { expect(i18n.t('key', { count: 1 })).to.equal('1 thing'); expect(i18n.t('key', { count: 5 })).to.equal('5 thing'); expect(i18n.t('key', { count: 1, indefinite_article: true })).to.equal('a thing'); expect(i18n.t('key', { count: 5, indefinite_article: true })).to.equal('a thing'); }); }); }); describe('context usage', () => { describe('basic usage', () => { const resStore = { dev: { 'ns.2': { friend_context: 'A friend from ns2', friend_context_male: 'A boyfriend from ns2', friend_context_female: 'A girlfriend from ns2', }, }, en: { 'ns.1': { friend_context: 'A friend', friend_context_male: 'A boyfriend', friend_context_female: 'A girlfriend', }, }, 'en-US': { translation: {} }, }; beforeEach(async () => { await i18n.init( i18n.functions.extend(opts, { resStore, ns: { namespaces: ['ns.1', 'ns.2'], defaultNs: 'ns.1' }, }), ); }); it('it should provide correct context form', () => { expect(i18n.t('friend_context')).to.equal('A friend'); expect(i18n.t('friend_context', { context: '' })).to.equal('A friend'); expect(i18n.t('friend_context', { context: 'male' })).to.equal('A boyfriend'); expect(i18n.t('friend_context', { context: 'female' })).to.equal('A girlfriend'); }); it('it should provide correct context form for second namespace', () => { expect(i18n.t('ns.2:friend_context')).to.equal('A friend from ns2'); expect(i18n.t('ns.2:friend_context', { context: '' })).to.equal('A friend from ns2'); expect(i18n.t('ns.2:friend_context', { context: 'male' })).to.equal('A boyfriend from ns2'); expect(i18n.t('ns.2:friend_context', { context: 'female' })).to.equal( 'A girlfriend from ns2', ); }); }); describe('extended usage - in combination with plurals', () => { const resStore = { dev: { translation: {} }, en: { translation: { friend_context: '__count__ friend', friend_context_male: '__count__ boyfriend', friend_context_female: '__count__ girlfriend', friend_context_plural: '__count__ friends', friend_context_male_plural: '__count__ boyfriends', friend_context_female_plural: '__count__ girlfriends', }, }, 'en-US': { translation: {} }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore })); }); it('it should provide correct context with plural forms', () => { expect(i18n.t('friend_context', { count: 1 })).to.equal('1 friend'); expect(i18n.t('friend_context', { context: '', count: 1 })).to.equal('1 friend'); expect(i18n.t('friend_context', { context: 'male', count: 1 })).to.equal('1 boyfriend'); expect(i18n.t('friend_context', { context: 'female', count: 1 })).to.equal('1 girlfriend'); expect(i18n.t('friend_context', { count: 10 })).to.equal('10 friends'); expect(i18n.t('friend_context', { context: '', count: 10 })).to.equal('10 friends'); expect(i18n.t('friend_context', { context: 'male', count: 10 })).to.equal('10 boyfriends'); expect(i18n.t('friend_context', { context: 'female', count: 10 })).to.equal( '10 girlfriends', ); }); }); }); describe('with passed in languages different from set one', () => { /** @type {import('vitest').MockInstance} */ let spy; beforeEach(() => { spy = vitest.spyOn(httpApi, 'read').mockImplementation(httpApiReadMockImplementation); return () => { spy.mockClear(); }; }); beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { preload: ['de-DE'] })); }); it('it should provide translation for passed in language', () => { expect(i18n.t('simple_de', { lng: 'de-DE' })).to.equal('ok_from_de'); }); describe.skip('[WONT FIX - HARD DEPRECATION OF SYNC LOADING]with language not preloaded', () => { it('it should provide translation for passed in language after loading file sync', () => { const expectedValue = i18n.clientVersion ? 'simple_fr' : 'ok_from_fr'; expect(i18n.t('simple_fr', { lng: 'fr' })).to.equal(expectedValue); }); }); }); describe('using sprintf', () => { const resStore = { dev: { translation: {} }, en: { translation: {} }, 'en-US': { translation: { test: 'hi', }, }, }; beforeEach(async () => { await i18n.init(i18n.functions.extend(opts, { resStore, shortcutFunction: 'defaultValue' })); }); it('it should recognize the defaultValue syntax set as shortcutFunction', () => { expect(i18n.t('notFound', 'second param defaultValue')).to.equal('second param defaultValue'); }); }); }); i18next-i18next-db698b1/test/compatibility/v1/v1.i18nInstance.js000066400000000000000000000054771527173754700242750ustar00rootroot00000000000000import fs from 'node:fs'; import HttpApi from 'i18next-http-backend'; import Cache from 'i18next-localstorage-cache'; import sprintf from 'i18next-sprintf-postprocessor'; import LanguageDetector from 'i18next-browser-languagedetector'; import i18n from '../../../src/i18next.js'; import compatibilityLayer from '../v4/v4Compatibility'; import * as compat from './v1.js'; export function extend(obj, ...rest) { Array.prototype.forEach.call(Array.prototype.slice.call([obj, ...rest], 1), (source) => { if (source) { for (const prop in source) { obj[prop] = source[prop]; } } }); return compat.convertAPIOptions(obj); // return obj; } i18n.functions = { extend, }; const httpApi = new HttpApi(); const cache = new Cache(); cache.debouncedStore = cache.store; // store without debounce i18n .use({ type: 'formatter', init: () => {}, format: (v) => v }) .use(compatibilityLayer) .use(httpApi) .use(cache) .use(new LanguageDetector()) .use(sprintf); compat.appendBackwardsAPI(i18n); const originalT = i18n.t; i18n.t = function t(key, opts, ...rest) { if (arguments.length > 2) return originalT.apply(i18n, [key, opts, ...rest]); if (typeof opts === 'object') opts = compat.convertTOptions(opts); return originalT.call(i18n, key, opts); }; /** * * @param {string} language * @param {string} namespace * @param {import('i18next').ReadCallback} callback * * @returns {void} */ const httpApiReadMockImplementation = (language, namespace, callback) => { const namespacePath = `${__dirname}/locales/${language}/${namespace}.json`; // console.info('httpApiReadMockImplementation', namespacePath); if (fs.existsSync(namespacePath)) { const data = JSON.parse(fs.readFileSync(namespacePath, 'utf-8')); callback(null, data); } else { callback('File is not available in `locales` folder', null); } }; /** using a function to have always a new object */ const getI18nCompatibilityV1InitOptions = () => ({ compatibilityAPI: 'v1', compatibilityJSON: 'v1', lng: 'en-US', load: 'all', fallbackLng: 'dev', fallbackNS: [], fallbackOnNull: true, fallbackOnEmpty: false, preload: [], lowerCaseLng: false, ns: 'translation', fallbackToDefaultNS: false, resGetPath: 'http://localhost:9877/locales/__lng__/__ns__.json', dynamicLoad: false, useLocalStorage: false, sendMissing: false, resStore: false, getAsync: true, returnObjectTrees: false, debug: false, selectorAttr: 'data-i18n', postProcess: '', parseMissingKey: '', interpolationPrefix: '__', interpolationSuffix: '__', defaultVariables: false, shortcutFunction: 'sprintf', objectTreeKeyHandler: null, lngWhitelist: null, resources: null, }); export { i18n as i18nCompatibilityV1, getI18nCompatibilityV1InitOptions, httpApi as httpApiCompatibilityV1, httpApiReadMockImplementation, }; i18next-i18next-db698b1/test/compatibility/v1/v1.js000066400000000000000000000112731527173754700220210ustar00rootroot00000000000000/* eslint no-param-reassign: 0 */ // import logger from '../logger'; function convertInterpolation(options) { options.interpolation = { unescapeSuffix: 'HTML', }; options.interpolation.prefix = options.interpolationPrefix || '__'; options.interpolation.suffix = options.interpolationSuffix || '__'; options.interpolation.escapeValue = options.escapeInterpolation || false; options.interpolation.nestingPrefix = options.reusePrefix || '$t('; options.interpolation.nestingSuffix = options.reuseSuffix || ')'; return options; } export function convertAPIOptions(options) { if (options.resStore) options.resources = options.resStore; if (options.ns && options.ns.defaultNs) { options.defaultNS = options.ns.defaultNs; options.ns = options.ns.namespaces; } else { options.defaultNS = options.ns || 'translation'; } if (options.fallbackToDefaultNS && options.defaultNS) options.fallbackNS = options.defaultNS; options.saveMissing = options.sendMissing; options.saveMissingTo = options.sendMissingTo || 'current'; options.returnNull = !options.fallbackOnNull; options.returnEmptyString = !options.fallbackOnEmpty; options.returnObjects = options.returnObjectTrees; options.joinArrays = '\n'; options.returnedObjectHandler = options.objectTreeKeyHandler; options.parseMissingKeyHandler = options.parseMissingKey; options.appendNamespaceToMissingKey = true; options.nsSeparator = options.nsseparator || ':'; options.keySeparator = options.keyseparator || '.'; if (options.shortcutFunction === 'sprintf') { options.overloadTranslationOptionHandler = function handle(args) { const values = []; for (let i = 1; i < args.length; i++) { values.push(args[i]); } return { postProcess: 'sprintf', sprintf: values, }; }; } if (options.shortcutFunction === 'defaultValue') { options.overloadTranslationOptionHandler = function handle(args) { return { defaultValue: args[1] }; }; } options.supportedLngs = options.lngWhitelist; // options.preload = options.preload; if (options.load === 'current') options.load = 'currentOnly'; if (options.load === 'unspecific') options.load = 'languageOnly'; // backend options.backend = options.backend || {}; options.backend.loadPath = options.resGetPath || 'locales/__lng__/__ns__.json'; options.backend.addPath = options.resPostPath || 'locales/add/__lng__/__ns__'; options.backend.allowMultiLoading = options.dynamicLoad; // cache options.cache = options.cache || {}; options.cache.prefix = 'res_'; options.cache.expirationTime = 7 * 24 * 60 * 60 * 1000; options.cache.enabled = options.useLocalStorage; options = convertInterpolation(options); if (options.defaultVariables) options.interpolation.defaultVariables = options.defaultVariables; // COMPATIBILITY: deprecation // if (options.getAsync === false) throw deprecation error return options; } export function convertJSONOptions(options) { options = convertInterpolation(options); options.joinArrays = '\n'; return options; } export function convertTOptions(options) { if ( options.interpolationPrefix || options.interpolationSuffix || options.escapeInterpolation !== undefined ) { options = convertInterpolation(options); } options.nsSeparator = options.nsseparator; options.keySeparator = options.keyseparator; options.returnObjects = options.returnObjectTrees; return options; } export function appendBackwardsAPI(i18n) { i18n.lng = () => // logger.deprecate('i18next.lng() can be replaced by i18next.language for detected language or i18next.languages for languages ordered by translation lookup.'); i18n.services.languageUtils.toResolveHierarchy(i18n.language)[0]; i18n.hasLoadedNamespace = () => true; i18n.preload = (lngs, cb) => { // logger.deprecate('i18next.preload() can be replaced with i18next.loadLanguages()'); i18n.loadLanguages(lngs, cb); }; i18n.setLng = (lng, options, callback) => { // logger.deprecate('i18next.setLng() can be replaced with i18next.changeLanguage() or i18next.getFixedT() to get a translation function with fixed language or namespace.'); if (typeof options === 'function') { callback = options; options = {}; } if (!options) options = {}; if (options.fixLng === true) { if (callback) return callback(null, i18n.getFixedT(lng)); } return i18n.changeLanguage(lng, callback); }; i18n.addPostProcessor = (name, fc) => { // logger.deprecate('i18next.addPostProcessor() can be replaced by i18next.use({ type: \'postProcessor\', name: \'name\', process: fc })'); i18n.use({ type: 'postProcessor', name, process: fc, }); }; } i18next-i18next-db698b1/test/compatibility/v4/000077500000000000000000000000001527173754700211345ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v4/lib/000077500000000000000000000000001527173754700217025ustar00rootroot00000000000000i18next-i18next-db698b1/test/compatibility/v4/lib/PluralResolver.js000066400000000000000000000224341527173754700252260ustar00rootroot00000000000000import { getCleanedCode } from './utils.js'; // definition http://translate.sourceforge.net/wiki/l10n/pluralforms /* eslint-disable */ let sets = [ { lngs: [ 'ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa', ], nr: [1, 2], fc: 1, }, { lngs: [ 'af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo', ], nr: [1, 2], fc: 2, }, { lngs: [ 'ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh', ], nr: [1], fc: 3, }, { lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 }, { lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 }, { lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 }, { lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 }, { lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 }, { lngs: ['fr'], nr: [1, 2], fc: 9 }, { lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 }, { lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 }, { lngs: ['is'], nr: [1, 2], fc: 12 }, { lngs: ['jv'], nr: [0, 1], fc: 13 }, { lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 }, { lngs: ['lt'], nr: [1, 2, 10], fc: 15 }, { lngs: ['lv'], nr: [1, 2, 0], fc: 16 }, { lngs: ['mk'], nr: [1, 2], fc: 17 }, { lngs: ['mnk'], nr: [0, 1, 2], fc: 18 }, { lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 }, { lngs: ['or'], nr: [2, 1], fc: 2 }, { lngs: ['ro'], nr: [1, 2, 20], fc: 20 }, { lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 }, { lngs: ['he', 'iw'], nr: [1, 2, 20, 21], fc: 22 }, ]; let _rulesPluralsTypes = { 1: (n) => Number(n > 1), 2: (n) => Number(n != 1), 3: (n) => 0, 4: (n) => Number( n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2, ), 5: (n) => Number( n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5, ), 6: (n) => Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2), 7: (n) => Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2), 8: (n) => Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3), 9: (n) => Number(n >= 2), 10: (n) => Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4), 11: (n) => Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3), 12: (n) => Number(n % 10 != 1 || n % 100 == 11), 13: (n) => Number(n !== 0), 14: (n) => Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3), 15: (n) => Number( n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2, ), 16: (n) => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2), 17: (n) => Number(n == 1 || (n % 10 == 1 && n % 100 != 11) ? 0 : 1), 18: (n) => Number(n == 0 ? 0 : n == 1 ? 1 : 2), 19: (n) => Number( n == 1 ? 0 : n == 0 || (n % 100 > 1 && n % 100 < 11) ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3, ), 20: (n) => Number(n == 1 ? 0 : n == 0 || (n % 100 > 0 && n % 100 < 20) ? 1 : 2), 21: (n) => Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0), 22: (n) => Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3), }; /* eslint-enable */ const nonIntlVersions = ['v1', 'v2', 'v3']; const intlVersions = ['v4']; const suffixesOrder = { zero: 0, one: 1, two: 2, few: 3, many: 4, other: 5, }; const createRules = () => { const rules = {}; sets.forEach((set) => { set.lngs.forEach((l) => { rules[l] = { numbers: set.nr, plurals: _rulesPluralsTypes[set.fc], }; }); }); return rules; }; class PluralResolver { constructor(languageUtils, options = {}, baseLogger) { this.languageUtils = languageUtils; this.options = options; this.logger = baseLogger.create('pluralResolver'); if ( (!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules) ) { this.options.compatibilityJSON = 'v3'; this.logger.error( 'Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.', ); } this.rules = createRules(); // Cache calls to Intl.PluralRules, since repeated calls can be slow in runtimes like React Native // and the memory usage difference is negligible this.pluralRulesCache = {}; } addRule(lng, obj) { this.rules[lng] = obj; } clearCache() { this.pluralRulesCache = {}; } getRule(code, options = {}) { if (this.shouldUseIntlApi()) { const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code); const type = options.ordinal ? 'ordinal' : 'cardinal'; const cacheKey = JSON.stringify({ cleanedCode, type }); if (cacheKey in this.pluralRulesCache) { return this.pluralRulesCache[cacheKey]; } let rule; try { rule = new Intl.PluralRules(cleanedCode, { type }); } catch (err) { if (!code.match(/-|_/)) return; const lngPart = this.languageUtils.getLanguagePartFromCode(code); rule = this.getRule(lngPart, options); } this.pluralRulesCache[cacheKey] = rule; return rule; } return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)]; } needsPlural(code, options = {}) { const rule = this.getRule(code, options); if (this.shouldUseIntlApi()) { return rule && rule.resolvedOptions().pluralCategories.length > 1; } return rule && rule.numbers.length > 1; } getPluralFormsOfKey(code, key, options = {}) { return this.getSuffixes(code, options).map((suffix) => `${key}${suffix}`); } getSuffixes(code, options = {}) { const rule = this.getRule(code, options); if (!rule) { return []; } if (this.shouldUseIntlApi()) { return rule .resolvedOptions() .pluralCategories.sort( (pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2], ) .map( (pluralCategory) => `${this.options.prepend}${ options.ordinal ? `ordinal${this.options.prepend}` : '' }${pluralCategory}`, ); } return rule.numbers.map((number) => this.getSuffix(code, number, options)); } getSuffix(code, count, options = {}) { const rule = this.getRule(code, options); if (rule) { if (this.shouldUseIntlApi()) { return `${this.options.prepend}${ options.ordinal ? `ordinal${this.options.prepend}` : '' }${rule.select(count)}`; } return this.getSuffixRetroCompatible(rule, count); } this.logger.warn(`no plural rule found for: ${code}`); return ''; } getSuffixRetroCompatible(rule, count) { const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count)); let suffix = rule.numbers[idx]; // special treatment for lngs only having singular and plural if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) { if (suffix === 2) { suffix = 'plural'; } else if (suffix === 1) { suffix = ''; } } const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString(); // COMPATIBILITY JSON // v1 if (this.options.compatibilityJSON === 'v1') { if (suffix === 1) return ''; if (typeof suffix === 'number') return `_plural_${suffix.toString()}`; return returnSuffix(); } else if (/* v2 */ this.options.compatibilityJSON === 'v2') { return returnSuffix(); } else if ( /* v3 - gettext index */ this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1 ) { return returnSuffix(); } return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString(); } shouldUseIntlApi() { return !nonIntlVersions.includes(this.options.compatibilityJSON); } } export default PluralResolver; i18next-i18next-db698b1/test/compatibility/v4/lib/languageUtils.js000066400000000000000000000032171527173754700250470ustar00rootroot00000000000000import { isString } from './utils.js'; const capitalize = (string) => string.charAt(0).toUpperCase() + string.slice(1); export function formatLanguageCode(code) { // http://www.iana.org/assignments/language-tags/language-tags.xhtml if (isString(code) && code.indexOf('-') > -1) { if (typeof Intl !== 'undefined' && typeof Intl.getCanonicalLocales !== 'undefined') { try { let formattedCode = Intl.getCanonicalLocales(code)[0]; if (formattedCode && this.options.lowerCaseLng) { formattedCode = formattedCode.toLowerCase(); } if (formattedCode) return formattedCode; } catch (e) { /* fall through */ } } // fallback for non-Intl environments const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab']; let p = code.split('-'); if (this.options.lowerCaseLng) { p = p.map((part) => part.toLowerCase()); } else if (p.length === 2) { p[0] = p[0].toLowerCase(); p[1] = p[1].toUpperCase(); if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase()); } else if (p.length === 3) { p[0] = p[0].toLowerCase(); // if length 2 guess it's a country if (p[1].length === 2) p[1] = p[1].toUpperCase(); if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase(); if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase()); if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase()); } return p.join('-'); } return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code; } i18next-i18next-db698b1/test/compatibility/v4/lib/resourceStore.js000066400000000000000000000004071527173754700251050ustar00rootroot00000000000000export function getResourceBundle(lng, ns) { if (!ns) ns = this.options.defaultNS; // COMPATIBILITY: remove extend in v2.1.0 if (this.options.compatibilityAPI === 'v1') return { ...{}, ...this.getResource(lng, ns) }; return this.getResource(lng, ns); } i18next-i18next-db698b1/test/compatibility/v4/lib/utils.js000066400000000000000000000002031527173754700233730ustar00rootroot00000000000000export const isString = (obj) => typeof obj === 'string'; export const getCleanedCode = (code) => code && code.replace('_', '-'); i18next-i18next-db698b1/test/compatibility/v4/pluralResolver.test.js000066400000000000000000000171261527173754700255000ustar00rootroot00000000000000import { describe, it, expect, beforeAll, beforeEach, afterEach, vitest } from 'vitest'; import PluralResolver from './lib/PluralResolver'; import { createInstance } from '../../../src/index'; import compatibilityLayer from './v4Compatibility'; describe('PluralResolver', () => { describe('getRule()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const i18next = createInstance(); i18next .use({ type: 'formatter', init: () => {}, format: (v) => v }) .use(compatibilityLayer) .init({ fallbackLng: 'en' }); pr = i18next.services.pluralResolver; }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns getRule for a supported locale', () => { const expected = { resolvedOptions: () => {}, select: () => {}, }; vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return expected; }); const locale = 'en'; expect(pr.getRule(locale)).toEqual(expected); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); it('correctly returns getRule for an unsupported locale', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { throw Error('mock error'); }); const locale = 'en'; expect(pr.getRule(locale)).toBeUndefined(); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('needsPlural()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en' }); pr = i18next.services.pluralResolver; }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns needsPlural for locale with more than one plural form', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { resolvedOptions: () => ({ pluralCategories: ['one', 'other'] }) }; }); const locale = 'en'; expect(pr.needsPlural(locale)).toBeTruthy(); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); it('correctly returns needsPlural for locale with just one plural form', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { resolvedOptions: () => ({ pluralCategories: ['other'] }) }; }); const locale = 'ja'; expect(pr.needsPlural(locale)).toBeFalsy(); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('getSuffix()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en', prepend: '_' }); pr = i18next.services.pluralResolver; }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns suffix for a supported locale', () => { const locale = 'en'; const count = 10.5; const expected = 'other'; const selectStub = vitest.fn().mockReturnValue(expected); vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { select: selectStub }; }); expect(pr.getSuffix(locale, count)).to.equal(`_${expected}`); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); expect(selectStub).toHaveBeenCalledOnce(); expect(selectStub).toHaveBeenCalledWith(count); }); it('correctly returns suffix for an unsupported locale', () => { const locale = 'nonexistent'; vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { throw Error('mock error'); }); expect(pr.getSuffix(locale, 10.5)).toEqual(''); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('getPluralFormsOfKey()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en', prepend: '_' }); pr = i18next.services.pluralResolver; }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns plural forms for a given key', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { resolvedOptions: () => ({ pluralCategories: ['one', 'other'] }) }; }); const locale = 'en'; expect(pr.getPluralFormsOfKey(locale, 'key')).toStrictEqual(['key_one', 'key_other']); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('getSuffixes()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en', prepend: '_' }); pr = i18next.services.pluralResolver; }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns plural suffixes for a given key', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { resolvedOptions: () => ({ pluralCategories: ['zero', 'one', 'two', 'few', 'many', 'other'], }), }; }); const locale = 'en'; expect(pr.getSuffixes(locale)).toStrictEqual([ '_zero', '_one', '_two', '_few', '_many', '_other', ]); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('shouldUseIntlApi()', () => { /** @type {LanguageUtils} */ let lu; let logger; beforeAll(() => { const i18next = createInstance(); i18next.use(compatibilityLayer).init({ fallbackLng: 'en' }); lu = i18next.services.languageUtils; logger = i18next.services.logger; }); const tests = [ { compatibilityJSON: 'v1', expected: false }, { compatibilityJSON: 'v2', expected: false }, { compatibilityJSON: 'v3', expected: false }, { compatibilityJSON: 'v4', expected: true }, { expected: true }, ]; tests.forEach(({ compatibilityJSON, expected }) => { it(`correctly returns shouldUseIntlApi for compatibilityJSON set to ${compatibilityJSON}`, () => { const pr = new PluralResolver(lu, { compatibilityJSON }, logger); expect(pr.shouldUseIntlApi()).to.equal(expected); }); }); }); }); i18next-i18next-db698b1/test/compatibility/v4/v4Compatibility.js000066400000000000000000000024741527173754700245640ustar00rootroot00000000000000import { formatLanguageCode } from './lib/languageUtils.js'; import PluralResolver from './lib/PluralResolver.js'; import { getResourceBundle } from './lib/resourceStore.js'; // pass this module to the use function of i18next // and also a dummy furmatter, if there is no Intl support // .use({ type: 'formatter', init: () => {}, format: (v) => v }) export default { type: '3rdParty', init(instance) { instance.services.languageUtils.formatLanguageCode = formatLanguageCode.bind( instance.services.languageUtils, ); instance.services.pluralResolver = new PluralResolver( instance.services.languageUtils, { prepend: instance.options.pluralSeparator, compatibilityJSON: instance.options.compatibilityJSON, simplifyPluralSuffix: instance.options.simplifyPluralSuffix ?? true, }, instance.services.logger, ); instance.translator.pluralResolver = instance.services.pluralResolver; instance.store.getResourceBundle = getResourceBundle.bind(instance.store); instance.services.resourceStore = instance.store; if (instance.options.parseMissingKeyHandler) { const orgParseMissingKeyHandler = instance.options.parseMissingKeyHandler; instance.options.parseMissingKeyHandler = (key, res) => orgParseMissingKeyHandler(res || key); } }, }; i18next-i18next-db698b1/test/local/000077500000000000000000000000001527173754700170245ustar00rootroot00000000000000i18next-i18next-db698b1/test/local/backend/000077500000000000000000000000001527173754700204135ustar00rootroot00000000000000i18next-i18next-db698b1/test/local/backend/backendConnector.load.retry.test.js000066400000000000000000000341271527173754700272620ustar00rootroot00000000000000import { describe, it, expect, beforeAll, vitest } from 'vitest'; import BackendConnector from '../../../src/BackendConnector.js'; import Interpolator from '../../../src/Interpolator.js'; import ResourceStore from '../../../src/ResourceStore.js'; import BackendMock from '../../runtime/backend/backendMock.js'; /** Those are just skipped for ci/cd, but occasionally we run them locally */ describe('BackendConnector load retry', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should load data', () => { expect.assertions(2); return new Promise((resolve) => { connector.load(['en'], ['retry2'], (err) => { expect(err).toBeFalsy(); expect(connector.store.getResourceBundle('en', 'retry2')).toEqual({ status: 'nok', retries: 2, }); resolve(); }); }); }); }); }); describe('BackendConnector load all fail - 1 namespace', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should call callback on complete failure', { timeout: 12000 }, () => { expect.assertions(2); return new Promise((resolve) => { connector.load(['en'], ['fail'], (err) => { expect(err).toEqual(['failed loading']); // expect(connector.store.getResourceBundle('en', 'fail')).toEqual({}); expect(connector.store.getResourceBundle('en', 'fail')).toEqual(undefined); resolve(); }); }); }); }); }); describe('BackendConnector load all fail - 10 namespaces', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it( 'should call callback on complete failure - taking no longer than 1 namespace', { timeout: 12000 }, () => { expect.assertions(2); return new Promise((resolve) => { connector.load( ['en'], [ 'fail1', 'fail2', 'fail3', 'fail4', 'fail5', 'fail6', 'fail7', 'fail8', 'fail9', 'fail10', ], (err) => { expect(err).toEqual([ 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', 'failed loading', ]); // expect(connector.store.getResourceBundle('en', 'fail1')).toEqual({}); expect(connector.store.getResourceBundle('en', 'fail1')).toEqual(undefined); resolve(); }, ); }); }, ); }); }); describe('BackendConnector load only one succeeds', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should call callback', { timeout: 12000 }, () => { expect.assertions(4); return new Promise((resolve) => { connector.load(['en'], ['fail', 'fail2', 'concurrently'], (err) => { expect(err).toEqual(['failed loading', 'failed loading']); // expect(connector.store.getResourceBundle('en', 'fail')).toEqual({}); expect(connector.store.getResourceBundle('en', 'fail')).toEqual(undefined); // expect(connector.store.getResourceBundle('en', 'fail2')).toEqual({}); expect(connector.store.getResourceBundle('en', 'fail2')).toEqual(undefined); expect(connector.store.getResourceBundle('en', 'concurrently')).toEqual({ status: 'ok', namespace: 'concurrently', }); resolve(); }); }); }); }); }); describe('BackendConnector load only one succeeds with retries', () => { let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should call callback', { timeout: 12000 }, () => { expect.assertions(5); return new Promise((resolve) => { connector.load(['en'], ['fail', 'fail2', 'concurrently', 'retry2'], (err) => { expect(err).toEqual(['failed loading', 'failed loading']); // expect(connector.store.getResourceBundle('en', 'fail')).toEqual({}); expect(connector.store.getResourceBundle('en', 'fail')).toEqual(undefined); // expect(connector.store.getResourceBundle('en', 'fail2')).toEqual({}); expect(connector.store.getResourceBundle('en', 'fail2')).toEqual(undefined); expect(connector.store.getResourceBundle('en', 'concurrently')).toEqual({ status: 'ok', namespace: 'concurrently', }); expect(connector.store.getResourceBundle('en', 'retry2')).toEqual({ status: 'nok', retries: 2, }); resolve(); }); }); }); }); }); describe('BackendConnector reload retry', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#reload', () => { it('should reload data', () => { connector.reload(['es'], ['noretry'], () => {}); expect(connector.store.getResourceBundle('es', 'noretry')).toEqual({ status: 'nok', retries: 0, }); }); }); }); describe('BackendConnector retry with default maxRetries=5', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { // retryTimeout: 350, // This is the default value // maxRetries: 5, // This is the default value backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('retry 1 time', { timeout: 10850 }, () => { expect.assertions(1); return new Promise((resolve) => { connector.load(['en'], ['retry1'], () => { expect(connector.store.getResourceBundle('en', 'retry1')).toEqual({ status: 'nok', retries: 1, }); resolve(); }); }); }); it( 'retry 5 times', { // ((2^5) - 1) * 350 = 10850 timeout: 10850 + 250, }, () => { expect.assertions(1); return new Promise((resolve) => { connector.load(['en'], ['retry5'], () => { expect(connector.store.getResourceBundle('en', 'retry5')).toEqual({ status: 'nok', retries: 5, }); resolve(); }); }); }, ); it( 'fail after retrying 5 times', { // ((2^5) - 1) * 350 = 10850 timeout: 10850 + 250, }, () => { expect.assertions(2); return new Promise((resolve) => { connector.load(['en'], ['retry6'], (err) => { expect(err).toEqual(['failed loading']); // expect(connector.store.getResourceBundle('en', 'retry6')).toEqual({}); expect(connector.store.getResourceBundle('en', 'retry6')).toEqual(undefined); resolve(); }); }); }, ); }); }); describe('BackendConnector retry with maxRetries=6', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { // retryTimeout: 350, // This is the default value maxRetries: 6, backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('retry 1 time', { timeout: 10850 }, () => { expect.assertions(1); return new Promise((resolve) => { connector.load(['en'], ['retry1'], () => { expect(connector.store.getResourceBundle('en', 'retry1')).toEqual({ status: 'nok', retries: 1, }); resolve(); }); }); }); it( 'retry 5 times', { // ((2^5) - 1) * 350 = 10850 timeout: 10850 + 250, }, () => { expect.assertions(1); return new Promise((resolve) => { connector.load(['en'], ['retry5'], () => { expect(connector.store.getResourceBundle('en', 'retry5')).toEqual({ status: 'nok', retries: 5, }); resolve(); }); }); }, ); it( 'retry 6 times', { // ((2^6) - 1) * 350 = 22050 timeout: 22050 + 250, }, () => { expect.assertions(1); return new Promise((resolve) => { connector.load(['en'], ['retry6'], () => { expect(connector.store.getResourceBundle('en', 'retry6')).toEqual({ status: 'nok', retries: 6, }); resolve(); }); }); }, ); it( 'fail after retrying 6 times', { // ((2^6) - 1) * 350 = 22050 timeout: 22050 + 250, }, () => { expect.assertions(2); return new Promise((resolve) => { connector.load(['en'], ['retry7'], (err) => { expect(err).toEqual(['failed loading']); // expect(connector.store.getResourceBundle('en', 'retry7')).toEqual({}); expect(connector.store.getResourceBundle('en', 'retry7')).toEqual(undefined); resolve(); }); }); }, ); }); }); // All tests have 250ms of code-execution buffer time built in. // To ensure test correctness, the tests should never time out. describe('BackendConnector retry with shorter intervals', () => { let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { retryTimeout: 100, backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it( 'retry 1 time', { timeout: 100 + 250, }, () => { expect.assertions(1); return new Promise((resolve) => { connector.load(['en'], ['retry1'], () => { expect(connector.store.getResourceBundle('en', 'retry1')).toEqual({ status: 'nok', retries: 1, }); resolve(); }); }); }, ); it( 'retry 5 times', { // ((2^5) - 1) * 100 = 3100 timeout: 3100 + 250, }, () => { expect.assertions(1); return new Promise((resolve) => { connector.load(['en'], ['retry5'], () => { expect(connector.store.getResourceBundle('en', 'retry5')).toEqual({ status: 'nok', retries: 5, }); resolve(); }); }); }, ); }); }); describe('BackendConnector retry with default maxRetries=0', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { // retryTimeout: 350, // This is the default value maxRetries: 0, // This is the default value backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it( 'succeeds', { timeout: 10850, }, async () => { const callback = vitest.fn(); connector.load(['en'], ['concurrently'], callback); await vitest.waitFor(() => expect(callback).toHaveBeenCalledWith()); await vitest.waitFor(() => expect(connector.store.getResourceBundle('en', 'concurrently')).toEqual({ status: 'ok', namespace: 'concurrently', }), ); }, ); it( 'does not retry', { timeout: 10850, }, async () => { const callback = vitest.fn(); connector.load(['en'], ['retry0'], callback); await vitest.waitFor(() => expect(callback).toHaveBeenCalled()); expect(callback).toHaveBeenCalledWith(['failed loading']); // expect(connector.store.getResourceBundle('en', 'retry0')).toEqual({}); expect(connector.store.getResourceBundle('en', 'retry0')).toEqual(undefined); }, ); }); }); i18next-i18next-db698b1/test/local/backend/backendConnector.perfErrorRetries.test.js000066400000000000000000000032111527173754700304710ustar00rootroot00000000000000import { describe, it, expect, vitest, beforeAll } from 'vitest'; import BackendConnector from '../../../src/BackendConnector.js'; import Interpolator from '../../../src/Interpolator.js'; import ResourceStore from '../../../src/ResourceStore.js'; import BackendMock from '../../runtime/backend/backendMock.js'; /** Those are just skipped for ci/cd, but occasionally we run them locally */ describe('BackendConnector performance (retry) test', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it( 'should load retry (failed) items mixed with concurrent longer items in under the 12 seconds timeout', { timeout: 12000 }, async () => { const namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`concurrentlyLonger${i}`); } for (let i = 0; i < 3; i++) { namespaces.push(`fail${i}`); } for (let i = 0; i < 20; i++) { namespaces.push(`concurrently${i}`); } const callback = vitest.fn(); connector.load(['en'], namespaces, callback); await vitest.waitFor(() => expect(callback).toHaveBeenCalled(), { timeout: 12000, }); expect(callback).toHaveBeenCalledWith([ 'failed loading', 'failed loading', 'failed loading', ]); }, ); }); }); i18next-i18next-db698b1/test/runtime/000077500000000000000000000000001527173754700174155ustar00rootroot00000000000000i18next-i18next-db698b1/test/runtime/backend/000077500000000000000000000000001527173754700210045ustar00rootroot00000000000000i18next-i18next-db698b1/test/runtime/backend/backendConnector.parallel.test.js000066400000000000000000000117231527173754700273610ustar00rootroot00000000000000import { describe, it, expect, beforeEach, vitest } from 'vitest'; import BackendConnector from '../../../src/BackendConnector.js'; import Interpolator from '../../../src/Interpolator.js'; import ResourceStore from '../../../src/ResourceStore.js'; import BackendMock from './backendMockSleepy.js'; describe('BackendConnector with sleepy backend', () => { describe('#load', () => { describe('10 max parallel', () => { let connector; beforeEach(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { maxParallelReads: 10, backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); it('backend should not be called 20 times before any have returned', async () => { const namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`namespace${i}`); } const callback = vitest.fn(); connector.load(['en'], namespaces, callback); await vitest.waitFor(() => expect(callback).toHaveBeenCalled()); expect(connector.store.getResourceBundle('en', 'namespace1')).toEqual({ status: 'ok', }); expect(connector.backend.parallelCallsHighWaterMark).toBeLessThan(20); expect(connector.backend.parallelCallsHighWaterMark).toEqual(10); }); }); describe('100 max parallel', () => { /** @type {BackendConnector} */ let connector; beforeEach(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { maxParallelReads: 100, backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); it('backend should be called 20 times before any have returned', async () => { const namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`namespace${i}`); } const callback = vitest.fn(); connector.load(['en'], namespaces, callback); await vitest.waitFor(() => expect(connector.backend.parallelCallsHighWaterMark).toEqual(20), ); await vitest.waitFor(() => expect(connector.store.getResourceBundle('en', 'namespace1')).toEqual({ status: 'ok', }), ); }); it('backend should get more calls 2nd time around', async () => { let namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`namespace${i}`); } const callback = vitest.fn(); connector.load(['en'], namespaces, callback); await vitest.waitFor(() => expect(connector.backend.parallelCallsHighWaterMark).toEqual(20), ); await vitest.waitFor(() => expect( expect(connector.store.getResourceBundle('en', 'namespace1')).toEqual({ status: 'ok', }), ), ); expect(callback).toHaveBeenCalledWith(); callback.mockClear(); // Run again with higher call count - different namespace names namespaces = []; for (let i = 0; i < 30; i++) { namespaces.push(`namespace-run2${i}`); } connector.load(['en'], namespaces, callback); await vitest.waitFor(() => expect(connector.backend.parallelCallsHighWaterMark).toEqual(30), ); await vitest.waitFor(() => expect( expect(connector.store.getResourceBundle('en', 'namespace-run20')).toEqual({ status: 'ok', }), ), ); expect(callback).toHaveBeenCalled(); }); it('reloading already loaded should not increase high watermark', async () => { let namespaces = []; for (let i = 0; i < 20; i++) { namespaces.push(`namespace${i}`); } const callback = vitest.fn(); connector.load(['en'], namespaces, callback); await vitest.waitFor(() => expect(connector.backend.parallelCallsHighWaterMark).toEqual(20), ); await vitest.waitFor(() => expect(connector.store.getResourceBundle('en', 'namespace1')).toEqual({ status: 'ok', }), ); callback.mockClear(); // Run again with higher call count - same namespace names namespaces = []; for (let i = 0; i < 30; i++) { namespaces.push(`namespace${i}`); } connector.load(['en'], namespaces, callback); await vitest.waitFor(() => expect(connector.backend.parallelCallsHighWaterMark).toEqual(20), ); await vitest.waitFor(() => expect(connector.store.getResourceBundle('en', 'namespace1')).toEqual({ status: 'ok', }), ); }); }); }); }); i18next-i18next-db698b1/test/runtime/backend/backendConnector.perf.test.js000066400000000000000000000022271527173754700265200ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import BackendConnector from '../../../src/BackendConnector.js'; import Interpolator from '../../../src/Interpolator.js'; import ResourceStore from '../../../src/ResourceStore.js'; import BackendMock from './backendMock.js'; describe('BackendConnector performance test', () => { /** @type {BackendConnector} */ let connector; beforeAll(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, { backend: { loadPath: 'http://localhost:9876/locales/{{lng}}/{{ns}}.json' }, }, ); }); describe('#load', () => { it('should load 10,000 items in under the 2 second timeout', () => { expect.assertions(2); const namespaces = []; for (let i = 0; i < 10000; i++) { namespaces.push(`namespace${i}`); } connector.load(['en'], namespaces, (err) => { expect(err).toBeFalsy(); expect(connector.store.getResourceBundle('en', 'namespace1')).toEqual({ status: 'nok', retries: 0, }); }); }); }); }); i18next-i18next-db698b1/test/runtime/backend/backendConnector.signatures.test.js000066400000000000000000000123741527173754700277540ustar00rootroot00000000000000import { describe, it, expect, beforeEach, vitest } from 'vitest'; import BackendConnector from '../../../src/BackendConnector.js'; import Interpolator from '../../../src/Interpolator.js'; import ResourceStore from '../../../src/ResourceStore.js'; import BackendMock from './backendMock.js'; import BackendMockPromise from './backendMockPromise.js'; import BackendMockSync from './backendMockSync.js'; describe('BackendConnector with different signatures', () => { describe('BackendConnector with callback signature', () => { let connector; beforeEach(() => { connector = new BackendConnector( new BackendMock(), new ResourceStore(), { interpolator: new Interpolator(), }, {}, ); }); describe('#load', () => { it('should work as usual', () => { expect.assertions(2); connector.load(['en'], ['normal'], (err) => { expect(err).toEqual(undefined); expect(connector.store.getResourceBundle('en', 'normal')).toEqual({ status: 'ok', language: 'en', namespace: 'normal', }); }); }); }); describe('#saveMissing', () => { it('should work as usual', () => { expect.assertions(2); connector.saveMissing( ['en'], 'normal', 'missing.key', 'some fallback', false, { tDescription: 'some descr' }, (err) => { expect(err).to.be.oneOf([null, undefined]); expect(connector.backend.created).toEqual({ en: { normal: { 'missing.key': { fallbackValue: 'some fallback', options: { tDescription: 'some descr', isUpdate: false, }, }, }, }, }); }, ); }); }); }); describe('BackendConnector with promise signature', () => { /** @type {BackendConnector} */ let connector; beforeEach(() => { connector = new BackendConnector( new BackendMockPromise(), new ResourceStore(), { interpolator: new Interpolator(), }, {}, ); }); describe('#load', () => { it('should work as usual', async () => { const callback = vitest.fn(); connector.load(['en'], ['namespace2'], callback); await vitest.waitFor(() => expect(callback).toHaveBeenCalled()); expect(callback).toHaveBeenCalledWith(); expect(connector.store.getResourceBundle('en', 'namespace2')).toEqual({ status: 'ok', language: 'en', namespace: 'namespace2', }); }); }); describe('#saveMissing', () => { it('should work as usual', async () => { const callback = vitest.fn(); connector.saveMissing( ['en'], 'namespace2', 'missing.key', 'some fallback', false, { tDescription: 'some descr' }, callback, ); await vitest.waitFor(() => expect(callback).toHaveBeenCalled()); expect(callback).toHaveBeenCalledWith(null, undefined); expect(connector.backend.created).toEqual({ en: { namespace2: { 'missing.key': { fallbackValue: 'some fallback', options: { tDescription: 'some descr', isUpdate: false, }, }, }, }, }); }); }); }); describe('BackendConnector with sync signature', () => { /** @type {BackendConnector} */ let connector; beforeEach(() => { connector = new BackendConnector( new BackendMockSync(), new ResourceStore(), { interpolator: new Interpolator(), }, {}, ); }); describe('#load', () => { it('should work as usual', async () => { const callback = vitest.fn(); connector.load(['en'], ['namespace3'], callback); await vitest.waitFor(() => expect(callback).toHaveBeenCalled()); expect(callback).toHaveBeenCalledWith(); expect(connector.store.getResourceBundle('en', 'namespace3')).toEqual({ status: 'ok', language: 'en', namespace: 'namespace3', }); }); }); describe('#saveMissing', () => { it('should work as usual', async () => { const callback = vitest.fn(); connector.saveMissing( ['en'], 'namespace3', 'missing.key', 'some fallback', false, { tDescription: 'some descr' }, callback, ); await vitest.waitFor(() => expect(callback).toHaveBeenCalled()); expect(callback).toHaveBeenCalledWith(null, undefined); expect(connector.backend.created).toEqual({ en: { namespace3: { 'missing.key': { fallbackValue: 'some fallback', options: { tDescription: 'some descr', isUpdate: false, }, }, }, }, }); }); }); }); }); i18next-i18next-db698b1/test/runtime/backend/backendMock.js000066400000000000000000000054641527173754700235540ustar00rootroot00000000000000class BackendMock { constructor(services, options = {}) { this.init(services, options); } init(services, options) { this.services = services; this.options = options; this.retries = {}; this.created = {}; } read(language, namespace, callback) { if (!this.retries[language]) this.retries[language] = 0; if (namespace.indexOf('fail') === 0) { return callback('failed loading', true); } if (namespace === 'retry0') { this.retries[language]++; return callback('failed loading', true); } if (namespace === 'retry1' && this.retries[language] < 1) { this.retries[language]++; return callback('failed loading', true); } if (namespace === 'retry2' && this.retries[language] < 2) { this.retries[language]++; return callback('failed loading', true); } if (namespace === 'retry5' && this.retries[language] < 5) { this.retries[language]++; return callback('failed loading', true); } if (namespace === 'retry6' && this.retries[language] < 6) { this.retries[language]++; return callback('failed loading', true); } if (namespace === 'retry7' && this.retries[language] < 7) { this.retries[language]++; return callback('failed loading', true); // // Is a retry, but not set to fail after a specific // } else if (namespace.indexOf('retry') === 0) { // } } if (namespace.indexOf('concurrentlyLonger') === 0) { setTimeout(() => { callback(null, { status: 'ok', namespace }); }, 400); } else if (namespace.indexOf('concurrently') === 0) { setTimeout(() => { callback(null, { status: 'ok', namespace }); }, 200); } else if (namespace.indexOf('normal') === 0) { callback(null, { status: 'ok', namespace, language }); } else { callback(null, { status: 'nok', retries: this.retries[language] }); delete this.retries[language]; } } readMulti(languages, namespaces, callback) { const language = languages[0]; const namespace = namespaces[0]; if (!this.retries[language]) this.retries[language] = 0; if (namespace === 'retry2' && this.retries[language] < 2) { this.retries[language]++; return callback('failed loading', true); } callback(null, { [language]: { [namespace]: { status: 'nok', retries: this.retries[language] } }, }); delete this.retries[language]; } create(languages, namespace, key, fallbackValue, callback, options) { languages.forEach((l) => { this.created[l] = this.created[l] || {}; this.created[l][namespace] = this.created[l][namespace] || {}; this.created[l][namespace][key] = { fallbackValue, options, }; }); callback(null); } } BackendMock.type = 'backend'; export default BackendMock; i18next-i18next-db698b1/test/runtime/backend/backendMockPromise.js000066400000000000000000000020411527173754700250770ustar00rootroot00000000000000class BackendMockPromise { constructor(services, options = {}) { this.init(services, options); } init(services, options) { this.services = services; this.options = options; this.created = {}; } read(language, namespace) { return new Promise((resolve) => { setTimeout(() => { resolve({ status: 'ok', language, namespace }); }, 15); }); } // async read(language, namespace) { // const r = await new Promise((resolve) => { // setTimeout(() => { // resolve({ status: 'ok', language, namespace }); // }, 15); // }) // return r // } create(languages, namespace, key, fallbackValue, options) { languages.forEach((l) => { this.created[l] = this.created[l] || {}; this.created[l][namespace] = this.created[l][namespace] || {}; this.created[l][namespace][key] = { fallbackValue, options, }; }); return new Promise((resolve) => { setTimeout(() => resolve(), 15); }); } } export default BackendMockPromise; i18next-i18next-db698b1/test/runtime/backend/backendMockSleepy.js000066400000000000000000000011731527173754700247270ustar00rootroot00000000000000class BackendMockSleepy { constructor(services, options = {}) { this.init(services, options); } init(services, options) { this.services = services; this.options = options; this.retries = {}; this.parallelCalls = 0; this.parallelCallsHighWaterMark = 0; } read(language, namespace, callback) { this.parallelCalls++; if (this.parallelCalls > this.parallelCallsHighWaterMark) { this.parallelCallsHighWaterMark = this.parallelCalls; } setTimeout(() => { this.parallelCalls--; return callback(null, { status: 'ok' }); }, 15); } } export default BackendMockSleepy; i18next-i18next-db698b1/test/runtime/backend/backendMockSync.js000066400000000000000000000012111527173754700243730ustar00rootroot00000000000000class BackendMockSync { constructor(services, options = {}) { this.init(services, options); } init(services, options) { this.services = services; this.options = options; this.created = {}; } read(language, namespace) { return { status: 'ok', language, namespace }; } create(languages, namespace, key, fallbackValue, options) { languages.forEach((l) => { this.created[l] = this.created[l] || {}; this.created[l][namespace] = this.created[l][namespace] || {}; this.created[l][namespace][key] = { fallbackValue, options, }; }); } } export default BackendMockSync; i18next-i18next-db698b1/test/runtime/deprecations.test.js000066400000000000000000000427311527173754700234200ustar00rootroot00000000000000import { describe, it, expect, vi } from 'vitest'; import i18next from '../../src/i18next.js'; import { isSafeLanguageCode } from '../../src/index.js'; // a debug-mode instance whose warnings are collected const setup = () => { const warn = vi.fn(); const instance = i18next .createInstance() .use({ type: 'logger', log: () => {}, warn, error: () => {} }); const warnings = (text) => warn.mock.calls.map((args) => args[0][0]).filter((m) => m.includes(text)); return { instance, warnings }; }; const backend = (read = (lng, ns, cb) => cb(null, { key: lng })) => ({ type: 'backend', read, create: () => {}, }); describe('26.7 deprecations', () => { describe('dotted language in the resource store', () => { it('warns once per method and keeps working', async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', resources: { en: { translation: {} } } }); instance.addResource('en.translation.a', 'A'); instance.addResource('en.translation.b', 'B'); expect(instance.getResource('en.translation.a')).to.equal('A'); expect(instance.getResource('en', 'translation', 'b')).to.equal('B'); const msgs = warnings('dotted language'); expect(msgs).toHaveLength(2); expect(msgs[0]).to.match(/^WARNING DEPRECATED: .*addResource:/); expect(msgs[1]).to.match(/getResource:/); }); }); describe('regex-escaped interpolation delimiters', () => { it('warns once and keeps working', async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', // the escaped forms only apply when prefix and suffix are not set interpolation: { prefix: null, suffix: null, prefixEscaped: '\\[\\[', suffixEscaped: '\\]\\]', }, resources: { en: { translation: { key: 'Hi [[name]]' } } }, }); expect(instance.t('key', { name: 'Ann' })).to.equal('Hi Ann'); instance.t('key', { name: 'Bob', interpolation: { escapeValue: true } }); const msgs = warnings('interpolation.prefixEscaped, interpolation.suffixEscaped'); expect(msgs).toHaveLength(1); }); }); describe('bare language codes', () => { it('warns for a code v27 canonicalizes differently', async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'EN', fallbackLng: 'iw', resources: { en: { translation: { hi: 'hi' } }, iw: { translation: { hi: 'shalom' } } }, }); expect(instance.language).to.equal('EN'); const msgs = warnings('canonicalizes'); expect( msgs.some((m) => m.includes("'EN' is used as 'EN'") && m.includes("to 'en'")), ).to.equal(true); expect( msgs.some((m) => m.includes("'iw' is used as 'iw'") && m.includes("to 'he'")), ).to.equal(true); }); it('does not warn for canonical or custom codes', async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', fallbackLng: 'my_custom', resources: { en: { translation: { hi: 'hi' } } }, }); instance.changeLanguage('EN'); expect(warnings('canonicalizes')).toHaveLength(1); const cleaned = setup(); await cleaned.instance.init({ debug: true, lng: 'EN', cleanCode: true, fallbackLng: 'en' }); expect(cleaned.warnings('canonicalizes')).toHaveLength(0); }); }); describe("implicit fallbackLng 'dev'", () => { it('notices once when dev is requested because fallbackLng is not set', async () => { const { instance, warnings } = setup(); await instance.use(backend()).init({ debug: true, lng: 'de', saveMissing: true }); instance.t('missing'); expect(warnings("language 'dev' is requested")).toHaveLength(1); }); it('does not notice with an explicit fallbackLng, also with dev', async () => { const explicitDev = setup(); await explicitDev.instance .use(backend()) .init({ debug: true, lng: 'de', fallbackLng: 'dev' }); expect(explicitDev.warnings("language 'dev'")).toHaveLength(0); const viaConstructor = setup(); viaConstructor.instance.options.fallbackLng = ['en']; await viaConstructor.instance.use(backend()).init({ debug: true, lng: 'de' }); expect(viaConstructor.warnings("language 'dev'")).toHaveLength(0); }); }); describe('post-processors shared across instances', () => { const pp = (name) => ({ type: 'postProcessor', name, process: (value) => `${value}!` }); const resources = { en: { translation: { key: 'hi' } } }; it('warns once when an instance runs a post-processor only another instance registered', async () => { const owner = i18next.createInstance().use(pp('r1-shared')); await owner.init({ lng: 'en', resources }); const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', resources, postProcess: 'r1-shared' }); expect(instance.t('key')).to.equal('hi!'); instance.t('key'); expect(warnings("'r1-shared' was registered with use() on another")).toHaveLength(1); }); it("does not warn for its own, its parent's or a plugin-registered post-processor", async () => { const { instance, warnings } = setup(); const plugin = { type: '3rdParty', init: (i18n) => i18n.use(pp('r1-plugin')) }; await instance .use(pp('r1-own')) .use(plugin) .init({ debug: true, lng: 'en', resources, postProcess: ['r1-own', 'r1-plugin'], }); expect(instance.t('key')).to.equal('hi!!'); const clone = instance.cloneInstance(); expect(clone.t('key')).to.equal('hi!!'); expect(warnings('was registered with use() on another')).toHaveLength(0); }); }); describe('logger shared across instances', () => { it("warns through the replaced logger when another instance's init() replaces it", async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', fallbackLng: 'en' }); await i18next.createInstance().init({ lng: 'en', fallbackLng: 'en' }); expect(warnings('replaces the logger another i18next instance set')).toHaveLength(1); }); it('does not warn for the same logger, a re-init or a clone', async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', fallbackLng: 'en' }); await instance.init({ debug: true, lng: 'en', fallbackLng: 'en' }); instance.cloneInstance({ lng: 'de' }); const logger = instance.modules.logger; await i18next .createInstance() .use(logger) .init({ debug: true, lng: 'en', fallbackLng: 'en' }); expect(warnings('replaces the logger')).toHaveLength(0); }); }); describe('plugin calling convention', () => { it('warns for a backend without callbackApi, not for a marked one', async () => { const unmarked = setup(); await unmarked.instance.use(backend()).init({ debug: true, lng: 'en', fallbackLng: 'en' }); expect(unmarked.warnings('backend: set callbackApi')).toHaveLength(1); const marked = setup(); await marked.instance .use({ ...backend(), callbackApi: true }) .init({ debug: true, lng: 'en', fallbackLng: 'en' }); expect(marked.warnings('backend: set callbackApi')).toHaveLength(0); }); it('callbackApi: true passes the callback and the options whatever the parameter count', async () => { const created = []; class Backend { // defaults make Function.length 4, which v26 guessing calls without options create(languages, ns, key, fallbackValue, callback = () => {}, options = {}) { created.push([key, options.isUpdate, typeof callback]); } read(lng, ns, callback) { callback(null, { key: 'value' }); } } Backend.type = 'backend'; Backend.callbackApi = true; const instance = i18next.createInstance().use(Backend); await instance.init({ lng: 'en', fallbackLng: 'en', saveMissing: true }); instance.t('missing'); expect(created).to.eql([['missing', false, 'function']]); }); it('callbackApi: false expects promises whatever the parameter count', async () => { const created = []; const instance = i18next.createInstance().use({ type: 'backend', callbackApi: false, read: (lng, ns, unused) => Promise.resolve({ key: `${lng} value` }), create: (languages, ns, key, fallbackValue, options) => { created.push([key, options.isUpdate]); return Promise.resolve(); }, }); await instance.init({ lng: 'de', fallbackLng: 'en', saveMissing: true }); expect(instance.t('key')).to.equal('de value'); instance.t('missing'); expect(created).to.eql([['missing', false]]); }); it('async languageDetector: callbackApi decides between detect(callback) and a promise', async () => { const promiseDetector = { type: 'languageDetector', async: true, callbackApi: false, detect: (unused) => Promise.resolve('de'), }; const { instance, warnings } = setup(); await instance.use(promiseDetector).init({ debug: true, fallbackLng: 'en', resources: {} }); expect(instance.language).to.equal('de'); expect(warnings('languageDetector: set callbackApi')).toHaveLength(0); const unmarked = setup(); await unmarked.instance .use({ type: 'languageDetector', async: true, detect: (callback) => callback('fr') }) .init({ debug: true, fallbackLng: 'en', resources: {} }); expect(unmarked.instance.language).to.equal('fr'); expect(unmarked.warnings('languageDetector: set callbackApi')).toHaveLength(1); }); }); describe('public reload and hydration', () => { it('services.utils.reloadResources lets a backend refresh its bundles, also after cloning', async () => { let version = 1; const refreshing = { type: 'backend', callbackApi: true, init(services) { this.services = services; }, read: (lng, ns, callback) => callback(null, { key: `v${version}` }), }; const instance = i18next.createInstance().use(refreshing); await instance.init({ lng: 'en', fallbackLng: 'en' }); instance.cloneInstance(); version = 2; await refreshing.services.utils.reloadResources(); expect(instance.t('key')).to.equal('v2'); }); it('hydrate() fills the store and changes the language once', async () => { const instance = i18next.createInstance(); await instance.init({ fallbackLng: 'en', ns: ['common'], defaultNS: 'common' }); instance.hydrate({ de: { common: { key: 'Hallo' }, extra: { key: 'Extra' } } }, 'de'); expect(instance.initializedStoreOnce).to.equal(true); expect(instance.initializedLanguageOnce).to.equal(true); expect(instance.isInitialized).to.equal(true); expect(instance.options.ns).to.eql(['common', 'extra']); expect(instance.language).to.equal('de'); expect(instance.t('key')).to.equal('Hallo'); instance.hydrate({ fr: { common: { key: 'Salut' } } }, 'fr'); expect(instance.language).to.equal('de'); expect(instance.getResourceBundle('fr', 'common')).to.equal(undefined); }); it('hydrate() before init() warns and changes nothing, also with only a language', () => { const instance = i18next.createInstance(); expect(instance.hydrate({ de: { translation: {} } }, 'de')).to.equal(instance); expect(instance.hydrate(undefined, 'de')).to.equal(instance); expect(instance.initializedStoreOnce).to.equal(undefined); expect(instance.initializedLanguageOnce).to.equal(undefined); expect(instance.language).to.equal(undefined); }); it('hydrate() on a clone leaves the store it shares with its parent alone', async () => { const parent = i18next.createInstance(); await parent.init({ lng: 'en', fallbackLng: 'en', resources: { en: { translation: { a: 'A' } } }, }); parent.cloneInstance().hydrate({ fr: { translation: { a: 'FR' } } }, 'fr'); expect(Object.keys(parent.store.data)).to.eql(['en']); expect(parent.t('a')).to.equal('A'); }); it('reloadResources() without languages and with nothing loaded reloads nothing instead of throwing', async () => { const read = vi.fn((lng, ns, callback) => callback(null, {})); const instance = i18next.createInstance().use({ type: 'backend', callbackApi: true, read }); await instance.init({ fallbackLng: false }); expect(instance.languages).to.equal(undefined); read.mockClear(); await instance.services.utils.reloadResources(); expect(read).not.toHaveBeenCalled(); }); }); describe('output that changes in v27', () => { it("warns once for a value with '/' under the default escape, and for an object hit", async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', resources: { en: { translation: { price: 'Costs {{v}}', obj: { a: 'b' } } } }, }); expect(instance.t('price', { v: '$10/month' })).to.equal('Costs $10/month'); instance.t('price', { v: '1/2' }); expect(instance.t('obj')).to.contain('returned an object instead of string'); expect(warnings("from v27 the default escape leaves '/'")).toHaveLength(1); expect(warnings('from v27 t() returns the key')).toHaveLength(1); }); it("does not warn about '/' when escaping is forced per call over escapeValue: false", async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', interpolation: { escapeValue: false }, resources: { en: { translation: { price: 'Costs {{v}}' } } }, }); // react-i18next Trans does this and decodes the entities after parsing instance.t('price', { v: '$10/month', interpolation: { escapeValue: true } }); expect(warnings("leaves '/'")).toHaveLength(0); }); it("does not warn about '/' with a custom escape or escapeValue: false", async () => { const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', interpolation: { escape: (v) => v }, resources: { en: { translation: { price: 'Costs {{v}}' } } }, }); instance.t('price', { v: '$10/month' }); instance.t('price', { v: '$10/month', interpolation: { escapeValue: false } }); expect(warnings("leaves '/'")).toHaveLength(0); }); }); describe('language codes from outside', () => { it('isSafeLanguageCode accepts codes in any common format, not markup or paths', () => { [ 'en', 'en-US', 'en_US', 'zh_Hant_TW', 'sr@latin', 'de_DE.UTF-8', 'cimode', 'x'.repeat(128), ].forEach((code) => expect(isSafeLanguageCode(code), code).to.equal(true)); [ '">', '../de', 'a/b', 'a\\b', 'en US', '__proto__', 'constructor', '', 'x'.repeat(129), undefined, 42, ].forEach((code) => expect(isSafeLanguageCode(code), String(code)).to.equal(false)); }); const markup = '">'; const detector = (code) => ({ type: 'languageDetector', detect: () => code }); it('warns once when such a code from a detector or changeLanguage() is used, and still uses it', async () => { const { instance, warnings } = setup(); await instance.use(detector(markup)).init({ debug: true, fallbackLng: 'en', resources: {} }); expect(instance.language).to.equal(markup); await instance.changeLanguage('a/b'); await instance.changeLanguage('a/b'); expect(instance.language).to.equal('a/b'); const msgs = warnings('from v27 such a code is refused'); expect(msgs).toHaveLength(2); expect(msgs[0]).to.contain(markup); }); it('never runs without debug, and passes the code to a fallbackLng function', async () => { const fallbackLng = vi.fn((code) => (code.startsWith('de') ? ['de'] : ['en'])); const quiet = i18next.createInstance(); await quiet.init({ lng: 'en', fallbackLng, resources: {} }); fallbackLng.mockClear(); await quiet.changeLanguage('en US'); expect(quiet.language).to.equal('en US'); const { instance, warnings } = setup(); await instance.init({ debug: true, lng: 'en', fallbackLng, resources: {} }); await instance.changeLanguage('de AT'); expect(warnings('such a code is refused')).toHaveLength(1); }); it('does not warn with supportedLngs, for configured codes or for codes of a safe shape', async () => { const supported = setup(); await supported.instance .use(detector(markup)) .init({ debug: true, supportedLngs: ['en'], fallbackLng: 'en', resources: {} }); expect(supported.instance.language).to.equal('en'); const configured = setup(); await configured.instance.init({ debug: true, lng: 'my lang', fallbackLng: 'en', resources: { 'my lang': { translation: { key: 'value' } } }, }); await configured.instance.changeLanguage('en_US'); await configured.instance.changeLanguage('sr@latin'); expect(supported.warnings('such a code is refused')).toHaveLength(0); expect(configured.warnings('such a code is refused')).toHaveLength(0); }); }); }); i18next-i18next-db698b1/test/runtime/eventEmitter.test.js000066400000000000000000000075471527173754700234210ustar00rootroot00000000000000import { describe, it, expect, beforeEach, vitest } from 'vitest'; import EventEmitter from '../../src/EventEmitter'; describe('i18next', () => { describe('published', () => { /** @type {EventEmitter} */ let emitter; beforeEach(() => { emitter = new EventEmitter(); }); it('it should emit', () => { const activeHandler = vitest.fn(); const disabledHandler = vitest.fn(); expect(activeHandler).not.toHaveBeenCalled(); expect(disabledHandler).not.toHaveBeenCalled(); emitter.on('ok', activeHandler); emitter.off('nok', disabledHandler); emitter.emit('ok', 'data ok'); emitter.emit('nok', 'there should be no listener'); expect(activeHandler).toHaveBeenCalled(); expect(activeHandler).toHaveBeenCalledWith('data ok'); expect(disabledHandler).not.toHaveBeenCalled(); }); it('should emit twice if a handler was attached twice', () => { const calls = []; const listener = (payload) => { calls.push(payload); }; emitter.on('events', listener); emitter.on('events', listener); emitter.emit('events', 1); expect(calls).toEqual([1, 1]); }); it('it should emit wildcard', () => { expect.assertions(2); emitter.on('*', (name, payload) => { expect(name).to.equal('ok'); expect(payload).to.equal('data ok'); }); emitter.emit('ok', 'data ok'); }); it('it should emit with array params', () => { expect.assertions(2); emitter.on('array-event', (array, data) => { expect(array).to.eql(['array ok 1', 'array ok 2']); expect(data).to.equal('data ok'); }); emitter.emit('array-event', ['array ok 1', 'array ok 2'], 'data ok'); }); it('it should emit wildcard with array params', () => { expect.assertions(3); // test on emitter.on('*', (ev, array, data) => { expect(ev).to.equal('array-event'); expect(array).to.eql(['array ok 1', 'array ok 2']); expect(data).to.equal('data ok'); }); emitter.emit('array-event', ['array ok 1', 'array ok 2'], 'data ok'); }); it('it should return itself', () => { // test on const returned = emitter.on('*'); expect(returned).to.equal(emitter); }); it('it should correctly unbind observers', () => { const calls1 = []; const listener1 = (payload) => { calls1.push(payload); }; const calls2 = []; const listener2 = (payload) => { calls2.push(payload); }; const calls3 = []; const listener3 = (payload) => { calls3.push(payload); }; emitter.on('events', listener1); emitter.on('events', listener2); emitter.on('events', listener3); emitter.on('events', listener1); emitter.emit('events', 1); emitter.off('events', listener1); emitter.emit('events', 2); emitter.off('events', listener2); emitter.emit('events', 3); emitter.off('events', listener2); emitter.off('events'); emitter.emit('events', 4); expect(calls1).to.eql([1, 1]); expect(calls2).to.eql([1, 2]); expect(calls3).to.eql([1, 2, 3]); }); it('unbinds a space-separated list of events, as on() binds it', () => { const calls = []; const listener = (payload) => calls.push(payload); emitter.on('a b', listener); emitter.off('a b', listener); emitter.emit('a', 1); emitter.emit('b', 2); const onceCalls = []; emitter.once('c d', (payload) => onceCalls.push(payload)); emitter.emit('c', 3); emitter.emit('d', 4); expect(calls).to.eql([]); expect(onceCalls).to.eql([3]); // a non-string event is a no-op, as before expect(() => emitter.off(undefined, listener)).not.toThrow(); expect(() => emitter.off()).not.toThrow(); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.backend.concurrentLoad.test.js000066400000000000000000000024501527173754700266010ustar00rootroot00000000000000import { describe, it, beforeAll, vitest, expect } from 'vitest'; import i18next from '../../src/i18next.js'; import BackendMock from './backend/backendMock.js'; describe('i18next backend', () => { const i18n = i18next.createInstance(); beforeAll(() => { i18n.use(BackendMock).init({ fallbackLng: 'en', fallbackNS: 'concurrently', ns: [], defaultNS: '', }); }); describe('loadNamespaces concurrently', () => { it('should load data correctly', async () => { let finished = 0; const loadedClb = (index) => { const cb = () => { const handlingNS = index === 1 ? 'concurrentlyLonger' : 'concurrently'; finished += index; if (i18n.t('status') !== 'ok') throw Error(`Expected "${i18n.t('status')}" to equal "ok"`); if (i18n.t('namespace', { ns: handlingNS }) !== handlingNS) throw Error( `Expected "${i18n.t('namespace', { ns: handlingNS })}" to equal "${handlingNS}"`, ); }; return cb; }; setTimeout(() => { i18n.loadNamespaces(['concurrentlyLonger']).then(loadedClb(1)); i18n.loadNamespaces(['concurrently']).then(loadedClb(2)); }, 0); await vitest.waitFor(() => expect(finished).toBe(3)); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.defaults.test.js000066400000000000000000000053311527173754700240410ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import * as defaultFc from '../../src/defaults'; const defaults = defaultFc.get(); describe('defaults', () => { it('it should have default shortcut', () => { expect(defaults.overloadTranslationOptionHandler(['key', 'my default value'])).to.eql({ defaultValue: 'my default value', }); }); it('defaultValue as option', () => { expect( defaults.overloadTranslationOptionHandler(['key', { defaultValue: 'option default value' }]), ).to.eql({ defaultValue: 'option default value' }); }); it('description', () => { expect( defaults.overloadTranslationOptionHandler(['key', 'my default value', 'the description']), ).to.eql({ defaultValue: 'my default value', tDescription: 'the description' }); }); it('description with options defaultValue', () => { // Options overwrites params default value expect( defaults.overloadTranslationOptionHandler(['key', 'my default value', 'the description']), ).to.eql({ defaultValue: 'my default value', tDescription: 'the description' }); }); it('interpolation', () => { expect( defaults.overloadTranslationOptionHandler([ 'key', 'my default value {{params}}', { params: 'the value' }, ]), ).to.eql({ defaultValue: 'my default value {{params}}', params: 'the value' }); }); it('interpolation with options defaultValue', () => { // Options overwrites params default value expect( defaults.overloadTranslationOptionHandler([ 'key', 'my default value {{params}}', { defaultValue: 'options default value', params: 'the value' }, ]), ).to.eql({ defaultValue: 'options default value', params: 'the value' }); }); it('interpolation description', () => { expect( defaults.overloadTranslationOptionHandler([ 'key', 'my default value {{params}}', 'the description', { params: 'the value' }, ]), ).to.eql({ defaultValue: 'my default value {{params}}', params: 'the value', tDescription: 'the description', }); }); it('interpolation description with options defaultValue', () => { // Options overwrites params default value expect( defaults.overloadTranslationOptionHandler([ 'key', 'my default value {{params}}', 'the description', { defaultValue: 'options default value', params: 'the value' }, ]), ).to.eql({ defaultValue: 'options default value', params: 'the value', tDescription: 'the description', }); }); it('it should not have a default format function (legacy format removed)', () => { expect(defaults.interpolation.format).to.be.undefined; }); }); i18next-i18next-db698b1/test/runtime/i18next.extendTranslation.test.js000066400000000000000000000036031527173754700257400ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import i18next from '../../src/i18next.js'; const instance = i18next.createInstance(); describe('extendTranslation', () => { describe('parse function should access globals defaultVariables', () => { const tests = [ { name: 'should have no impact when no options and no defaultVariables', options: {}, defaultVariables: {}, expected: {}, }, { name: 'should have no impact when no defaultVariables is given', options: { foo: 'bar' }, defaultVariables: {}, expected: { foo: 'bar' }, }, { name: 'should work when no options are provided', options: {}, defaultVariables: { foo: 'baz' }, expected: { foo: 'baz' }, }, { name: 'should be merged with provided options', options: { foo: 'bar' }, defaultVariables: { foo2: 'baz' }, expected: { foo: 'bar', foo2: 'baz' }, }, { name: 'should not override provided options', options: { foo: 'bar' }, defaultVariables: { foo: 'baz' }, expected: { foo: 'bar' }, }, ]; tests.forEach((test) => { it(`it ${test.name}`, () => { instance .use({ type: 'i18nFormat', parse: (_res, options) => { expect(options).to.deep.equals(test.expected); }, }) .init( { lng: 'en', interpolation: { defaultVariables: test.defaultVariables, }, resources: { en: { translation: { test1: '', }, }, }, }, (err, t) => { t('translation:test1', test.options); }, ); }); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.hasLoadedNamespace.test.js000066400000000000000000000210371527173754700257340ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import i18next from '../../src/i18next.js'; const Logger = { type: 'logger', entries: { log: [], warn: [], error: [], }, log(args) { this.entries.log.push(args[0]); }, warn(args) { this.entries.warn.push(args[0]); }, error(args) { this.entries.error.push(args[0]); }, reset() { this.entries = { log: [], warn: [], error: [], }; }, }; const Backend = { type: 'backend', callbackApi: true, init(services, options) { this.services = services; this.options = options; }, read(language, namespace, callback) { if (namespace.indexOf('fail') === 0) return callback('failed', false); callback(null, { status: 'ok', key: `${language}-${namespace}` }); }, created: [], create(languages, namespace, key) { this.created.push(`${languages.join('-')}-${namespace}-${key}`); }, reset() { this.created = []; }, }; /** @type {import('i18next').i18n} */ let i18n = i18next.createInstance(); i18n.use(Backend); i18n.use(Logger); describe('i18next', () => { describe('hasLoadedNamespace', () => { describe('not called init()', () => { it('it should nok', () => { expect(i18n.isInitialized).toBeFalsy(); expect(i18n.hasLoadedNamespace('ns1')).toBeFalsy(); }); }); describe('called init() not detecting lng', () => { it('it should ok - but warn about issue', async () => { expect(i18n.isInitialized).toBeFalsy(); expect(i18n.isInitializing).toBeFalsy(); const prom = i18n.init({ debug: true, saveMissing: true }); expect(i18n.isInitializing).toBeTruthy(); expect(i18n.isInitialized).toBeFalsy(); await prom; expect(i18n.isInitializing).toBeFalsy(); expect(i18n.isInitialized).toBeTruthy(); expect(i18n.hasLoadedNamespace('translation')).to.equal(false); expect(Logger.entries.warn[0]).to.equal( 'i18next: init: no languageDetector is used and no lng is defined', ); // no fallbackLng set: the default ['dev'] is loaded, with the 26.7 notice about v27 expect(Logger.entries.warn[1]).to.contain("language 'dev' is requested"); expect(Logger.entries.warn[2]).to.equal( 'i18next: hasLoadedNamespace: i18n.languages were undefined or empty', ); Logger.reset(); }); }); describe('called init() properly', () => { beforeAll( () => new Promise((resolve) => { i18n = i18n.cloneInstance({ debug: true, saveMissing: true, lng: 'en-US' }, () => { resolve(); }); }), ); it('it should ok for loaded ns', () => { expect(i18n.hasLoadedNamespace('translation')).toBeTruthy(); }); it('it should nok for not loaded ns', () => { expect(i18n.hasLoadedNamespace('ns1')).toBeFalsy(); }); describe('translator - calling t', () => { it('it should not log anything if loaded ns', () => { i18n.t('keyNotFound'); expect(Logger.entries.warn.length).to.equal(0); Logger.reset(); }); it('it should not call saveMissing create on backend if not loaded ns', () => { i18n.t('ns1:keyNotFound'); expect(Logger.entries.warn.length).to.equal(3); expect(Logger.entries.warn[0]).to.equal( 'i18next::translator: key "keyNotFound" for languages "en-US, en, dev" won\'t get resolved as namespace "ns1" was not yet loaded', ); Logger.reset(); }); }); describe('backendConnector - saveMissing', () => { it('it should call saveMissing create on backend if loaded ns', () => { i18n.t('keyNotFound'); expect(Backend.created.length).to.equal(1); expect(Backend.created[0]).to.equal('dev-translation-keyNotFound'); Backend.reset(); }); it('it should not call saveMissing create on backend if not loaded ns', () => { i18n.t('ns1:keyNotFound'); expect(Backend.created.length).to.equal(0); Backend.reset(); expect(Logger.entries.warn.length).to.equal(2); expect(Logger.entries.warn[1]).to.equal( 'i18next::backendConnector: did not save key "keyNotFound" as the namespace "ns1" was not yet loaded', ); Logger.reset(); }); }); }); describe('for a namespace failed loading', () => { beforeAll(async () => { await i18n.loadNamespaces('fail-ns'); }); it('it should ok for loaded ns', () => { expect(i18n.hasLoadedNamespace('fail-ns')).to.equal(true); }); }); }); describe('for lng = cimode', () => { beforeAll(async () => { i18n.changeLanguage('cimode'); }); it('it should ok for loaded ns', () => { expect(i18n.hasLoadedNamespace('translation')).to.equal(true); }); it('it should ok for not loaded ns', () => { expect(i18n.hasLoadedNamespace('ns1')).to.equal(true); }); }); // https://github.com/i18next/react-i18next/issues/1934 describe('for a passed in lng loaded under another code (or not at all)', () => { const create = async (options, lng) => { const inst = i18next.createInstance(); inst.use(Backend); await inst.init({ fallbackLng: 'en', lng: 'en', ...options }); if (lng) await inst.loadLanguages(lng); return inst; }; it('it should ok for a lng outside supportedLngs - only the fallback gets loaded', async () => { const inst = await create({ supportedLngs: ['en'] }, 'xx'); expect(inst.hasLoadedNamespace('translation', { lng: 'xx' })).to.equal(true); }); it('it should ok for a lng stored under its formatted code', async () => { const inst = await create({}, 'de-ch'); expect(inst.hasResourceBundle('de-CH', 'translation')).to.equal(true); expect(inst.hasLoadedNamespace('translation', { lng: 'de-ch' })).to.equal(true); }); it('it should ok for a lng reduced by load: languageOnly', async () => { const inst = await create({ load: 'languageOnly' }, 'de-CH'); expect(inst.hasLoadedNamespace('translation', { lng: 'de-CH' })).to.equal(true); }); it('it should still nok before that lng was loaded', async () => { const inst = await create({}); expect(inst.hasLoadedNamespace('translation', { lng: 'de-ch' })).to.equal(false); }); it('it should keep waiting while changing to a lng resolved from outside supportedLngs', async () => { const inst = i18next.createInstance(); inst.use({ ...Backend, read: (l, n, cb) => setTimeout(() => cb(null, { key: l }), 10) }); await inst.init({ supportedLngs: ['en', 'de'], fallbackLng: 'en', lng: 'en' }); // the precheck react-i18next passes with bindI18n: 'languageChanging' const precheck = (i, loadNotPending) => i.isLanguageChangingTo && !loadNotPending(i.isLanguageChangingTo, 'translation') ? false : undefined; const changing = inst.changeLanguage('de-CH'); expect(inst.hasLoadedNamespace('translation', { precheck })).to.equal(false); await changing; expect(inst.hasLoadedNamespace('translation', { precheck })).to.equal(true); }); }); describe('not having a backend', () => { /** @type {import('i18next').i18n} */ const i18n2 = i18next.createInstance(); i18n2.use(Logger); beforeAll(async () => { await i18n2.init({ debug: true, lng: 'en-US', resources: { 'en-US': { translation: {} }, dev: { translation: {} } }, }); }); it('it should ok for passed in ns', () => { expect(i18n2.hasLoadedNamespace('translation')).to.equal(true); }); it('it should ok for not passed in ns - as there is no loading done', () => { expect(i18n2.hasLoadedNamespace('ns1')).to.equal(true); }); }); describe('having a backend and having resources but without partialBundledLanguages flag', () => { /** @type {import('i18next').i18n} */ const i18n2 = i18next.createInstance(); i18n2.use(Backend); i18n2.use(Logger); beforeAll(async () => { await i18n2.init({ debug: true, lng: 'en-US', resources: { 'en-US': { translation: {} }, dev: { translation: {} } }, }); }); it('it should ok for passed in ns', () => { expect(i18n2.hasLoadedNamespace('translation')).to.equal(true); }); it('it should ok for not passed in ns - as there is no loading done', () => { expect(i18n2.hasLoadedNamespace('notLoaded')).to.equal(true); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.interpolation.nesting.test.js000066400000000000000000000140211527173754700265630ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import i18next from '../../src/i18next.js'; /** @type {import('i18next').i18n} */ const instance = i18next.createInstance(); describe('i18next.interpolation.nesting', () => { beforeAll(async () => { await instance.init({ lng: 'en', resources: { en: { translation: { test1: 'test $t(nest1) {{a}}', nest1: 'nest value', // options test2: 'test $t(nest2, { "b": "{{a}}" })', nest2: 'nest {{b}}', // 2 options test3: 'test $t(nest3, { "b": "{{a}}", "c": "{{b}}" })', nest3: 'nest {{b}} {{c}}', // , in key test102: '$t(test102, is, {"key": "success"})', 'test102, is': 'this test is {{key}}', // , in key and two options , separated test103: '$t(test103, is, {"key": "success", "key2": "full"})', 'test103, is': 'this test is {{key2}} {{key}}', keyA1: '{{text}} interpolated', keyB1: 'Text to interpolate => $t(keyA1, { "text": "foo" })', keyA1rec: '{{text}} interpolated | $t(keyB1rec)', keyB1rec: 'Text to interpolate => $t(keyA1rec, { "text": "foo" })', test_foo: "foo $t(test, { 'context': 'bar' })", test_bar: "bar $t(test, { 'context': 'baz' })", test_baz: 'baz', foo: '$t(bar, {"firstName": "{{firstName}}", "lastName": "{{lastName}}" })', fooSingle: `$t(bar, {'firstName': '{{firstName}}', 'lastName': '{{lastName}}' })`, fooMultiline: '$t(bar, {\n "firstName": "Marc",\n "lastName": "Weber"\n})', bar: '{{firstName}} {{lastName}}', item_one: 'item', item_other: 'items', thing_one: 'thing', thing_other: 'things', phrase: 'A: $t(thing, { "count": 1 }) B: $t(item)', phrase2: 'A: $t(thing, { "count": 2 }) B: $t(item)', date_MMDD: 'DD/MM/YY', dateTest: '$t({{format}}, customdDateFormatter)', nestingWithBracketsFirst: '$t(nestingWithBracketsSecond, {"name": "foo (bar)"})', nestingWithBracketsSecond: 'Hello {{name}}!', // $& $` $' $$ are String.replace patterns and must stay literal in nested values replacementPattern: 'Band: $t(replacementPatternValue)', replacementPatternValue: 'Rock $& Roll', replacementPatternOption: 'Hi $t(replacementPatternInner, { "n": "{{n}}" })', replacementPatternInner: 'name={{n}}', nestedFormatterNumber: 'Count: $t(nestedFormatterWord, len)', nestedFormatterWord: 'abc', }, }, }, }); instance.services.formatter.add('customdDateFormatter', (value, lng) => `${value} | ${lng}`); instance.services.formatter.add('len', (value) => value.length); }); describe('nesting', () => { const tests = [ { args: ['test1', { a: 'foo' }], expected: 'test nest value foo', }, { args: ['test2', { a: 'foo' }], expected: 'test nest foo', }, { args: ['test3', { a: 'foo', b: 'bar' }], expected: 'test nest foo bar', }, { args: ['test102'], expected: 'this test is success', }, { args: ['test103'], expected: 'this test is full success', }, { args: ['$t(test1)', { a: 'foo' }], expected: 'test nest value foo', }, { args: ['$t(translation:test1)', { a: 'foo' }], expected: 'test nest value foo', }, { args: ['something $t(test1)', { a: 'foo' }], expected: 'something test nest value foo', }, { args: ['something $t(translation:test1)', { a: 'foo' }], expected: 'something test nest value foo', }, { args: ['keyB1'], expected: 'Text to interpolate => foo interpolated', }, { args: ['keyB1rec'], expected: 'Text to interpolate => foo interpolated | ', }, { args: ['test', { context: 'foo' }], expected: 'foo bar baz', }, { args: [ 'foo', { firstName: `Cool`, lastName: `O'Dood`, interpolation: { escapeValue: false } }, ], expected: `Cool O'Dood`, }, { args: [ 'foo', { firstName: `C'ool`, lastName: `O'Dood`, interpolation: { escapeValue: false } }, ], expected: `C'ool O'Dood`, }, { args: [ 'fooSingle', { firstName: `Cool`, lastName: `Dood`, interpolation: { escapeValue: false } }, ], expected: `Cool Dood`, }, { args: ['fooMultiline'], expected: `Marc Weber`, }, { args: [ 'bar', { firstName: `Cool`, lastName: `O'Dood`, interpolation: { escapeValue: false } }, ], expected: `Cool O'Dood`, }, { args: [ 'bar', { firstName: `C'ool`, lastName: `O'Dood`, interpolation: { escapeValue: false } }, ], expected: `C'ool O'Dood`, }, { args: ['phrase'], expected: 'A: thing B: item', }, { args: ['phrase2'], expected: 'A: things B: item', }, { args: ['dateTest', { format: 'date_MMDD' }], expected: 'DD/MM/YY | en', }, { args: ['nestingWithBracketsFirst'], expected: 'Hello foo (bar)!', }, { args: ['replacementPattern'], expected: 'Band: Rock $& Roll', }, { args: ['replacementPatternOption', { n: 'X$&Y', interpolation: { escapeValue: false } }], expected: 'Hi name=X$&Y', }, { args: ['nestedFormatterNumber'], expected: 'Count: 3', }, ]; tests.forEach((test) => { it(`correctly nests for ${JSON.stringify(test.args)} args`, () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.interpolation.notSkipOnVariables.test.js000066400000000000000000000041201527173754700306700ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import i18next from '../../src/i18next.js'; /** @type {import('i18next').i18n} */ const instance = i18next.createInstance(); describe('i18next.interpolation.nesting (skipOnVariables: false)', () => { beforeAll(async () => { await instance.init({ lng: 'en', interpolation: { skipOnVariables: false, }, resources: { en: { translation: { key: 'value {{a}}', key2: 'value {{a}} {{b}}', keyWithoutVar: 'value', nested: 'nested stuff', keyWithNest: '$t(nested2) value', keyWithNestAndVar: '$t(nested2) value {{a}}', nested2: 'HI', }, }, }, }); }); describe('nesting', () => { const tests = [ { args: ['keyWithoutVar'], expected: 'value', }, { args: ['key', { a: 'hahaha' }], expected: 'value hahaha', }, { args: ['keyWithNest'], expected: 'HI value', }, { args: ['keyWithNestAndVar', { a: 'normal value' }], expected: 'HI value normal value', }, { args: ['keyWithNestAndVar', { a: '$t(nested)' }], expected: 'HI value nested stuff', }, { args: ['key', { a: '{{nested}}' }], expected: 'value ', }, { args: ['key2', { a: '{{nested}}', b: 'something' }], expected: 'value something', }, { args: [ '{{a}} {{w}} {{a}} {{other}}', { a: '{{b}}', b: 'c', w: 'normal', other: 'whatever' }, ], expected: 'c normal c whatever', }, { args: [ '{{a}} {{w}} {{a}} {{other}}', { a: ' {{b}}', b: 'c', w: 'normal', other: 'whatever' }, ], expected: ' c normal c whatever', }, ]; tests.forEach((test) => { it(`correctly nests for ${JSON.stringify(test.args)} args`, () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.interpolation.skipOnVariables.test.js000066400000000000000000000113771527173754700302230ustar00rootroot00000000000000import { describe, it, expect, beforeAll, vi } from 'vitest'; import i18next from '../../src/i18next.js'; /** @type {import('i18next').i18n} */ const instance = i18next.createInstance(); describe('i18next.interpolation.nesting', () => { beforeAll(async () => { await instance.init({ lng: 'en', interpolation: { // skipOnVariables: true, // true by default }, resources: { en: { translation: { key: 'value {{a}}', key2: 'value {{a}} {{b}}', keyWithoutVar: 'value', nested: 'nested stuff', keyWithNest: '$t(nested2) value', keyWithNestAndVar: '$t(nested2) value {{a}}', nested2: 'HI', cur: 'Save {{CURRENCY}}{{AMOUNT}}', }, }, }, }); }); describe('nesting', () => { const tests = [ { args: ['keyWithoutVar'], expected: 'value', }, { args: ['key', { a: 'hahaha' }], expected: 'value hahaha', }, { args: ['keyWithNest'], expected: 'HI value', }, { args: ['keyWithNestAndVar', { a: 'normal value' }], expected: 'HI value normal value', }, { args: ['keyWithNestAndVar', { a: '$t(nested)' }], expected: '$t(nested2) value $t(nested)', }, { args: ['key', { a: '{{nested}}' }], expected: 'value {{nested}}', }, { args: ['key2', { a: '{{nested}}', b: 'something' }], expected: 'value {{nested}} something', }, { args: [ '{{a}} {{w}} {{a}} {{other}}', { a: '{{b}}', b: 'c', w: 'normal', other: 'whatever' }, ], expected: '{{b}} normal {{b}} whatever', }, { args: [ '{{a}} {{w}} {{a}} {{other}}', { a: ' {{b}}', b: 'c', w: 'normal', other: 'whatever' }, ], expected: ' {{b}} normal {{b}} whatever', }, { args: ['cur', { CURRENCY: '$', AMOUNT: 23 }], expected: 'Save $23', }, { args: ['key', { a: '&&&{{b}}', b: 'leaked' }], expected: 'value &&&{{b}}', }, { args: ['key2', { a: '{{b}}', b: 'something' }], expected: 'value {{b}} something', }, { args: ['key2', { a: '<{{b}}>', b: 'something' }], expected: 'value <{{b}}> something', }, { args: [ 'key2', { a: '{{c}}', b: 5, c: 'leaked', interpolation: { useRawValueToEscape: true, escapeValue: false }, }, ], expected: 'value {{c}} 5', }, { args: ['{{- a}}', { a: '{{b}}', b: 'c' }], expected: '{{b}}', }, { args: ['{{- a}} {{b}}', { a: '{{b}}', b: '' }], expected: '{{b}} <b>', }, { args: ['{{b}} at {{- a}}', { a: '{{b}}', b: 'c' }], expected: 'c at {{b}}', }, ]; tests.forEach((test) => { it(`correctly nests for ${JSON.stringify(test.args)} args`, () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); describe('missing variables with skipOnVariables', () => { const setup = async (debug) => { const warn = vi.fn(); const inst = i18next.createInstance(); await inst.use({ type: 'logger', log: () => {}, warn, error: () => {} }).init({ debug, lng: 'en', resources: { en: { translation: { greet: 'Hello {{name}} from {{- place}}', other: 'Bye {{name}}' } }, }, }); const missing = () => warn.mock.calls .map((args) => args[0][0]) .filter((m) => m.includes('missed to pass in variable')); return { inst, missing }; }; it('warns once per string and variable in debug mode', async () => { const { inst, missing } = await setup(true); expect(inst.t('greet')).to.equal('Hello {{name}} from {{- place}}'); inst.t('greet'); inst.t('greet', { name: 'Ann' }); inst.t('other'); expect(missing()).to.eql([ 'i18next::interpolator: missed to pass in variable place for interpolating Hello {{name}} from {{- place}}', 'i18next::interpolator: missed to pass in variable name for interpolating Hello {{name}} from {{- place}}', 'i18next::interpolator: missed to pass in variable name for interpolating Bye {{name}}', ]); }); it('does not warn for a variable passed as undefined, or without debug', async () => { const { inst, missing } = await setup(true); inst.t('other', { name: undefined }); expect(missing()).to.eql([]); const quiet = await setup(false); quiet.inst.t('other'); expect(quiet.missing()).to.eql([]); }); }); i18next-i18next-db698b1/test/runtime/i18next.promises.test.js000066400000000000000000000022761527173754700241000ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import i18next from '../../src/i18next.js'; describe('i18next', () => { describe('promise based api', () => { describe('init()', () => { it('it should return a promise with t', async () => { await expect(i18next.init()).resolves.toBeTypeOf('function'); }); }); describe('changeLanguage()', () => { it('it should return a promise with t', async () => { i18next.init(); await expect(i18next.changeLanguage()).resolves.toBeTypeOf('function'); }); }); describe('loadLanguages()', () => { it('it should return a promise', async () => { i18next.init(); await expect(i18next.loadLanguages('en')).resolves.toBeUndefined(); }); }); describe('loadNamespaces()', () => { it('it should return a promise', async () => { i18next.init(); await expect(i18next.loadLanguages('common')).resolves.toBeUndefined(); }); }); describe('reloadResources()', () => { it('it should return a promise', async () => { i18next.init(); await expect(i18next.reloadResources()).resolves.toBeUndefined(); }); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.reloadResources.test.js000066400000000000000000000047231527173754700253770ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import i18next from '../../src/i18next.js'; // a backend that records what it reads; `down` lists languages that fail const backend = (down = []) => ({ type: 'backend', callbackApi: true, reads: [], read(lng, ns, callback) { this.reads.push(`${lng}|${ns}`); if (down.includes(lng)) return callback(new Error('down'), false); callback(null, { key: `${lng} ${this.reads.length}` }); }, }); describe('reloadResources()', () => { it('retries a bundle that failed to load', async () => { const down = ['de']; const b = backend(down); const instance = i18next.createInstance().use(b); await instance.init({ lng: 'en', fallbackLng: 'en', preload: ['en', 'de'] }); expect(instance.getResource('de', 'translation', 'key')).to.equal(undefined); down.length = 0; // the outage is over await instance.reloadResources(); expect(instance.getResource('de', 'translation', 'key')).to.match(/^de /); }); it('without languages also reloads the languages a clone loaded on demand', async () => { const b = backend(); const parent = i18next.createInstance().use(b); await parent.init({ lng: 'en', fallbackLng: 'en' }); const clone = parent.cloneInstance(); await clone.changeLanguage('fr'); b.reads.length = 0; await parent.services.utils.reloadResources(); expect(b.reads.sort()).to.eql(['en|translation', 'fr|translation']); }); it('without languages still reloads the current language when it came from bundled resources', async () => { const b = backend(); const instance = i18next.createInstance().use(b); await instance.init({ lng: 'en', fallbackLng: 'en', resources: { en: { translation: {} } } }); expect(b.reads).to.eql([]); await instance.reloadResources(); expect(b.reads).to.eql(['en|translation']); }); it('with languages reloads only those', async () => { const b = backend(); const instance = i18next.createInstance().use(b); await instance.init({ lng: 'en', fallbackLng: 'en', preload: ['de'] }); b.reads.length = 0; await instance.reloadResources(['de']); expect(b.reads).to.eql(['de|translation']); }); it('never requests cimode', async () => { const b = backend(); const instance = i18next.createInstance().use(b); await instance.init({ lng: 'cimode', fallbackLng: 'en' }); b.reads.length = 0; await instance.reloadResources(); expect(b.reads).to.eql(['en|translation']); }); }); i18next-i18next-db698b1/test/runtime/i18next.test.js000066400000000000000000000711241527173754700222360ustar00rootroot00000000000000import { describe, it, expect, beforeAll, vi, beforeEach, afterEach } from 'vitest'; import i18next from '../../src/i18next.js'; import { get as getDefaults } from '../../src/defaults.js'; describe('i18next', () => { beforeAll(() => { i18next.init({ foo: 'bar', debug: false, }); i18next.changeLanguage('en'); }); describe('instance creation', () => { describe('createInstance()', () => { let newInstance; beforeAll(() => { newInstance = i18next.createInstance({ bar: 'foo' }); }); it('it should not inherit options from initial i18next', () => { expect(newInstance.options.bar).to.equal('foo'); }); it('it has own instance of resource store', () => { expect(newInstance.store).to.not.equal(i18next.store); }); }); describe('cloneInstance() and services.utils', () => { // a backend whose 'de' never finishes loading const backend = () => ({ type: 'backend', callbackApi: true, created: [], read(lng, ns, callback) { if (lng !== 'de') callback(null, { key: lng }); }, create(languages, ns, key) { this.created.push(`${languages.join()}|${key}`); }, }); it("keeps the parent's own checks after cloning", async () => { const parent = i18next.createInstance().use(backend()); await parent.init({ lng: 'en', fallbackLng: 'en' }); const clone = parent.cloneInstance({ lng: 'de', initAsync: false }); expect(clone.hasLoadedNamespace('translation')).to.equal(false); expect(parent.services.utils.hasLoadedNamespace('translation')).to.equal(true); expect(clone.services.utils.hasLoadedNamespace('translation')).to.equal(false); }); it('saves a missing key of a clone by its own check, not by the newest clone', async () => { const b = backend(); const parent = i18next.createInstance().use(b); await parent.init({ lng: 'en', fallbackLng: 'en', saveMissing: true }); let ready; await new Promise((resolve) => { ready = parent.cloneInstance({ lng: 'en' }, resolve); }); parent.cloneInstance({ lng: 'de' }); // created last, its namespace never loads ready.t('missing'); expect(b.created).to.eql(['en|missing']); }); it('a direct saveMissing() call keeps checking the newest clone, as before', async () => { // i18next-http-middleware's missing keys route: a parent without languages, one clone per request const b = backend(); const parent = i18next.createInstance().use(b); await parent.init({ fallbackLng: false, saveMissing: true }); expect(parent.hasLoadedNamespace('translation')).to.equal(false); await new Promise((resolve) => { parent.cloneInstance({ lng: 'en' }, resolve); }); parent.services.backendConnector.saveMissing(['en'], 'translation', 'newKey', 'value'); expect(b.created).to.eql(['en|newKey']); }); }); describe('cloneInstance()', () => { /** @type {import('i18next').i18n} */ let newInstance; beforeAll(() => { newInstance = i18next.cloneInstance({ bar: 'foo' }); }); it('it should inherit options from initial i18next', () => { expect(newInstance.options.foo).to.equal('bar'); expect(newInstance.options.bar).to.equal('foo'); }); it('it has shared instance of resource store', () => { expect(newInstance.store).to.equal(i18next.store); }); it('it is set to same language', () => { expect(newInstance.language).to.equal(i18next.language); }); it('it can change language independent to original', () => { newInstance.changeLanguage('de'); expect(newInstance.language).to.equal('de'); expect(i18next.language).to.equal('en'); }); it('changeLanguage on clone should not be overridden by deferred init load', () => { vi.useFakeTimers(); const instance = i18next.createInstance(); instance.use({ type: 'backend', read: (language, namespace, callback) => { const delay = language === 'en' ? 50 : 200; setTimeout(() => { callback(null, { key: `value_${language}` }); }, delay); }, }); const task = new Promise((resolve) => { instance.init({ fallbackLng: 'en' }, () => { const clone = instance.cloneInstance(); resolve( clone.changeLanguage('de').then(() => { expect(clone.language).to.equal('de'); expect(clone.resolvedLanguage).to.equal('de'); }), ); }); }); vi.advanceTimersByTime(1000); return task.finally(() => { vi.useRealTimers(); }); }); it('should not re-queue the parent preload on clone changeLanguage (#2451)', async () => { const instance = i18next.createInstance(); instance.use({ type: 'backend', read: (language, namespace, callback) => callback(null, { key: `value_${language}` }), }); await instance.init({ fallbackLng: 'en', preload: ['en', 'de', 'fr', 'it'] }); const queueLoad = vi.spyOn(instance.services.backendConnector, 'queueLoad'); const clone = instance.cloneInstance({ initAsync: false }); await clone.changeLanguage('de'); const queued = queueLoad.mock.calls.flatMap(([lngs]) => lngs); expect(queued).not.to.include('fr'); expect(queued).not.to.include('it'); expect(clone.t('key')).to.equal('value_de'); expect(instance.options.preload).to.eql(['en', 'de', 'fr', 'it']); expect(instance.cloneInstance({ preload: ['fr'] }).options.preload).to.eql(['fr']); }); it('should interpolate list for cloned instance with empty interpolation config', async () => { const config = { lng: 'en', resources: { en: { translation: { test: 'My list: {{items, list(type: conjunction; style: long;)}}', }, }, }, interpolation: {}, }; const instance = i18next.createInstance(config); await instance.init(config); const clone = instance.cloneInstance(config); await clone.init(config); expect(clone.t('test', { items: ['foo', 'bar'] })).to.equal('My list: foo and bar'); }); }); describe('create/cloneInstance()', () => { /** @type {import('i18next').i18n} */ let instance1; /** @type {import('i18next').i18n} */ let instance2; beforeAll( () => new Promise((resolve) => { instance1 = i18next.cloneInstance({ lng: 'en' }, () => { instance2 = instance1.cloneInstance({ lng: 'de' }, () => resolve()); }); }), ); it('it should have correct lngs', () => { expect(instance1.language).to.equal('en'); expect(instance1.languages).to.eql(['en', 'dev']); expect(instance2.language).to.equal('de'); expect(instance2.languages).to.eql(['de', 'dev']); expect(instance1.translator.language).to.equal('en'); expect(instance2.translator.language).to.equal('de'); }); }); describe('cloneInstance({ forkResourceStore: true })', () => { /** @type {import('i18next').i18n} */ let orgInstance; /** @type {import('i18next').i18n} */ let newInstance; beforeAll(() => { orgInstance = i18next.createInstance(); orgInstance.init({ lng: 'en', resources: { en: { translation: { deeper: { key: 'value here', }, }, }, }, }); orgInstance.addResourceBundle( 'en', 'translation', { some: { key: 'another value here' }, }, true, false, ); newInstance = orgInstance.cloneInstance({ forkResourceStore: true, keySeparator: '__' }); newInstance.addResourceBundle('en', 'translation', { deeper: { key: 'value here cloned' }, }); }); it('it not has shared instance of resource store', () => { expect(newInstance.store).not.to.equal(orgInstance.store); expect(orgInstance.t('deeper.key')).to.equal('value here'); expect(orgInstance.t('some.key')).to.equal('another value here'); expect(orgInstance.t('deeper.key')).not.to.equal(newInstance.t('deeper.key')); expect(newInstance.t('deeper__key')).to.equal('value here cloned'); expect(newInstance.t('some__key')).to.equal('another value here'); }); it('it does not change nested resources of the original instance', () => { const org = i18next.createInstance(); org.init({ lng: 'en', resources: { en: { translation: { deeper: { key: 'value here', list: ['a', 'b'] } } } }, }); const forked = org.cloneInstance({ forkResourceStore: true }); forked.addResource('en', 'translation', 'deeper.key', 'value here cloned'); forked.addResourceBundle( 'en', 'translation', { deeper: { other: 'other cloned', list: ['c'] } }, true, true, ); expect(forked.t('deeper.key')).to.equal('value here cloned'); expect(forked.t('deeper.other')).to.equal('other cloned'); expect(org.t('deeper.key')).to.equal('value here'); expect(org.exists('deeper.other')).to.equal(false); expect(org.t('deeper.list', { returnObjects: true })).to.deep.equal(['a', 'b']); }); it('keeps reused fork options and every cloned store independent', () => { const org = i18next.createInstance(); org.init({ initAsync: false, lng: 'en', resources: { en: { translation: { key: 'original' } } }, }); const options = { forkResourceStore: true, initAsync: false }; const first = org.cloneInstance(options); const second = org.cloneInstance(options); first.addResource('en', 'translation', 'key', 'first'); second.addResource('en', 'translation', 'key', 'second'); expect(org.t('key')).to.equal('original'); expect(first.t('key')).to.equal('first'); expect(second.t('key')).to.equal('second'); expect(first.store).not.to.equal(org.store); expect(second.store).not.to.equal(org.store); expect(second.store).not.to.equal(first.store); expect(options).to.deep.equal({ forkResourceStore: true, initAsync: false }); expect(first.options).not.to.have.property('forkResourceStore'); expect(second.options).not.to.have.property('forkResourceStore'); }); it('accepts frozen options when forking the resource store', () => { const options = Object.freeze({ forkResourceStore: true, initAsync: false }); const forked = orgInstance.cloneInstance(options); expect(forked.store).not.to.equal(orgInstance.store); expect(forked.t('deeper.key')).to.equal(orgInstance.t('deeper.key')); expect(options.forkResourceStore).to.equal(true); expect(forked.options).not.to.have.property('forkResourceStore'); }); it.each([undefined, false])( 'keeps the shared store when forking is %s', (forkResourceStore) => { const options = Object.freeze({ forkResourceStore, initAsync: false }); const cloned = orgInstance.cloneInstance(options); expect(cloned.store).to.equal(orgInstance.store); expect(cloned.options.forkResourceStore).to.equal(forkResourceStore); expect(options).to.deep.equal({ forkResourceStore, initAsync: false }); }, ); }); }); describe('i18next - functions', () => { describe('t', () => { it('returns an empty string before init()', () => { const instance = i18next.createInstance(); expect(instance.t('key')).to.equal(''); }); it('is usable as a free function', () => { const { t } = i18next; expect(t('key')).to.equal('key'); }); describe('t with interpolated key', () => { let i18nInst; beforeAll(() => { const { createInstance } = i18next; i18nInst = createInstance(); i18nInst.init({ fallbackLng: 'en', resources: { en: { translation: { interKey: 'hi {{name}}', }, }, }, }); }); it('does not manipulate passed options', () => { const { t } = i18nInst; const o = { name: 'Fritz' }; expect(t('interKey', o)).to.equal('hi Fritz'); expect(o).to.not.have.property('lng'); }); }); }); describe('getFixedT', () => { it('it should have lng, ns on t', () => { const t = i18next.getFixedT('de', 'common'); expect(t.lng).to.equal('de'); expect(t.ns).to.equal('common'); }); it('should handle default value', () => { const t = i18next.getFixedT(null, null); const translatedKey = t('key', 'default'); const translatedSecondKey = t('key', { defaultValue: 'default' }); expect(translatedKey).to.equal('default'); expect(translatedSecondKey).to.equal('default'); }); it('should apply keyPrefix', () => { i18next.addResource('fr', 'translation', 'deeply.nested.key', 'ici!'); const t = i18next.getFixedT('fr', null, 'deeply.nested'); expect(t('key')).to.equal('ici!'); expect(t(($) => $.key)).to.equal('ici!'); expect(t.keyPrefix).to.equal('deeply.nested'); }); it('should apply keyPrefix using a selector function', () => { i18next.addResource('fr', 'translation', 'deeply.nested.key', 'ici!'); const t = i18next.getFixedT('fr', null, ($) => $.deeply.nested); expect(t('key')).to.equal('ici!'); expect(t(($) => $.key)).to.equal('ici!'); }); it('should apply keyPrefix and also be able to overwrite it', () => { i18next.addResource('it', 'translation', 'deeply.nested.key', 'quì!'); const t = i18next.getFixedT('it', null, 'deeply.nested'); expect(t('nested.key', { keyPrefix: 'deeply' })).to.equal('quì!'); expect(t.keyPrefix).to.equal('deeply.nested'); }); it('should apply keyPrefix and also be able to overwrite it with a selector function', () => { i18next.addResource('it', 'translation', 'deeply.nested.key', 'quì!'); const t = i18next.getFixedT('it', null, 'deeply.nested'); expect(t('nested.key', { keyPrefix: ($) => $.deeply })).to.equal('quì!'); }); it('should apply keyPrefix and also be able to "reset" it', () => { i18next.addResource('pt', 'translation', 'deeply.nested.key', 'quì!'); const t = i18next.getFixedT('pt', null, 'deeply.nested'); expect(t('nested.key', { keyPrefix: 'deeply' })).to.equal('quì!'); expect(t.keyPrefix).to.equal('deeply.nested'); expect(t('deeply.nested.key', { keyPrefix: 'deeply' })).to.equal( 'deeply.deeply.nested.key', ); expect(t('deeply.nested.key', { keyPrefix: '' })).to.equal('quì!'); expect(t.keyPrefix).to.equal('deeply.nested'); }); it('should apply keyPrefix also for fallback keys', () => { i18next.addResource('fr', 'translation', 'group.key1', 'Translation 1'); i18next.addResource('fr', 'translation', 'group.key2', 'Translation 2'); const t = i18next.getFixedT('fr', null, 'group'); expect(t('key1')).to.equal('Translation 1'); expect(t.keyPrefix).to.equal('group'); expect(t('key2')).to.equal('Translation 2'); expect(t.keyPrefix).to.equal('group'); expect(i18next.t(['group.key1', 'group.key2'], { lng: 'fr' })).to.equal('Translation 1'); expect(t(['key1', 'key2'])).to.equal('Translation 1'); }); // `scopeNs` decouples selector path[0] matching from resolution scope. // The bound `ns` (a single primary string) still drives Translator.resolve, // so non-selector lookups stay isolated to the primary namespace; but the // selector now sees the full hook namespace list and can route a leading // secondary-ns segment to the right namespace. describe('scopeNs (4th opts arg)', () => { beforeAll(async () => { i18next.addResource('en', 'authNs', 'login.welcome', 'WelcomeFromAuth'); i18next.addResource('en', 'authNs', 'shared', 'auth-shared'); i18next.addResource('en', 'validationNs', 'email.required', 'EmailRequired'); i18next.addResource('en', 'validationNs', 'shared', 'validation-shared'); await i18next.loadNamespaces(['authNs', 'validationNs']); }); it('routes selector path with secondary-ns prefix to that namespace', () => { const t = i18next.getFixedT('en', 'authNs', undefined, { scopeNs: ['authNs', 'validationNs'], }); expect(t(($) => $.validationNs.email.required)).to.equal('EmailRequired'); }); it('does NOT rewrite a primary-ns prefixed selector path', () => { // path[0] === primary ('authNs') means a literal sub-key, not a ns switch. const t = i18next.getFixedT('en', 'authNs', undefined, { scopeNs: ['authNs', 'validationNs'], }); // No `authNs.login.welcome` key exists under primary; the rewrite is intentionally not applied. expect(t(($) => $.authNs.login.welcome)).to.equal('authNs.login.welcome'); }); it('still routes a non-prefixed selector to the primary ns', () => { const t = i18next.getFixedT('en', 'authNs', undefined, { scopeNs: ['authNs', 'validationNs'], }); expect(t(($) => $.login.welcome)).to.equal('WelcomeFromAuth'); }); it('keeps non-selector resolution isolated to the primary ns (no fallback)', () => { // `shared` exists in BOTH namespaces. Without scopeNs it would resolve to // the primary's value; with scopeNs it must STILL resolve to the primary, // because scopeNs is selector-only and does not change resolution scope. const t = i18next.getFixedT('en', 'authNs', undefined, { scopeNs: ['authNs', 'validationNs'], }); expect(t('shared')).to.equal('auth-shared'); }); it('lets per-call ns override scopeNs for selector path detection', () => { const t = i18next.getFixedT('en', 'authNs', undefined, { scopeNs: ['authNs', 'validationNs'], }); // Caller explicitly passed `ns: 'validationNs'` → selector $ proxies the // validationNs root; path[0] is a real key, no rewriting kicks in. expect(t(($) => $.email.required, { ns: 'validationNs' })).to.equal('EmailRequired'); }); }); }); }); describe('chained resource manipulation', () => { describe('can add resources', () => { it('it adds resources by addResource', () => { i18next .addResource('de', 'translation', 'test', 'test') .addResource('de', 'translation', 'nest.test', 'test_nest'); expect(i18next.getResource('de', 'translation', 'test')).to.equal('test'); expect(i18next.getResource('de', 'translation', 'nest.test')).to.equal('test_nest'); }); it('it adds resources by addResources', () => { i18next .addResources('fr', 'translation', { hi: 'salut', }) .addResources('fr', 'translation', { hi: 'salut', hello: 'bonjour', }); expect(i18next.getResource('fr', 'translation', 'hi')).to.equal('salut'); expect(i18next.getResource('fr', 'translation', 'hello')).to.equal('bonjour'); }); it('it adds resources by addResourceBundle', () => { i18next .addResourceBundle('en.translation', { something1: 'deeper1' }) .addResourceBundle('en.translation', { something2: 'deeper2' }); expect(i18next.getResource('en.translation')).to.eql({ something1: 'deeper1', something2: 'deeper2', }); }); it('it adds resources by addResourceBundle without mutating the input resources', () => { const base = { k1: { k2: 'v' } }; i18next.addResourceBundle('en', 'ns1', base); expect(base.k1.k2).to.eql('v'); i18next.addResourceBundle('en', 'ns1', { k1: { k2: 'v for ns1' } }, true, true); expect(base.k1.k2).to.eql('v'); i18next.addResourceBundle('en', 'ns2', base); expect(base.k1.k2).to.eql('v'); i18next.addResourceBundle('en', 'ns2', { k1: { k2: 'v for ns2' } }, true, true); expect(base.k1.k2).to.eql('v'); expect(i18next.t('ns1:k1.k2')).to.eql('v for ns1'); }); describe('can remove resources bundle', () => { it('it removes resources by removeResourceBundle', () => { i18next.removeResourceBundle('en', 'translation'); expect(i18next.getResourceBundle('en', 'translation')).toBeFalsy(); }); }); }); }); describe.skip('#JSON.stringify', () => { /** @type {import('i18next').i18n} */ let newInstance; beforeAll(() => { newInstance = i18next.createInstance({ some: 'options' }); }); it('it should JSON.stringify non-initialized without errors', () => { expect(JSON.stringify(newInstance)).to.equal( JSON.stringify({ options: { some: 'options' }, }), ); }); it('it should JSON.stringify initialized without errors', () => { expect.assertions(1); newInstance.init({ other: 'opts' }, (err) => { if (err) throw err; newInstance.addResourceBundle('en', 'translation', { key: 'value' }); newInstance.changeLanguage('en'); expect(JSON.stringify(newInstance)).to.equal( JSON.stringify({ options: { ...getDefaults(), some: 'options', other: 'opts', ignoreJSONStructure: true, }, store: { en: { translation: { key: 'value', }, }, }, language: 'en', languages: ['en', 'dev'], resolvedLanguage: 'en', }), ); }); }); }); describe('language properties', () => { /** @type {import('i18next').i18n} */ let newInstance; beforeAll(async () => { newInstance = i18next.createInstance({ fallbackLng: 'en', resources: { en: { translation: { key: 'value in en', }, }, de: { translation: { key: 'value in de', }, }, fr: { translation: {}, }, }, }); await newInstance.init(); }); describe('after init', () => { it('it should have the appq', () => { expect(newInstance).to.have.property('language', 'en'); expect(newInstance).to.have.property('languages'); expect(newInstance.languages).to.have.lengthOf(1); expect(newInstance.languages[0]).to.equal('en'); expect(newInstance).to.have.property('resolvedLanguage', 'en'); }); }); describe('after changeLanguage with a non available language', () => { beforeAll(() => { newInstance.changeLanguage('it'); }); it('it should have the appropriate language properties', () => { expect(newInstance).to.have.property('language', 'it'); expect(newInstance).to.have.property('languages'); expect(newInstance.languages).to.have.lengthOf(2); expect(newInstance.languages[0]).to.equal('it'); expect(newInstance.languages[1]).to.equal('en'); expect(newInstance).to.have.property('resolvedLanguage', 'en'); }); }); describe('after changeLanguage with a region specific language', () => { beforeAll(() => { newInstance.changeLanguage('de-CH'); }); it('it should have the appropriate language properties', () => { expect(newInstance).to.have.property('language', 'de-CH'); expect(newInstance).to.have.property('languages'); expect(newInstance.languages).to.have.lengthOf(3); expect(newInstance.languages[0]).to.equal('de-CH'); expect(newInstance.languages[1]).to.equal('de'); expect(newInstance.languages[2]).to.equal('en'); expect(newInstance).to.have.property('resolvedLanguage', 'de'); }); }); describe('after changeLanguage with an empty loaded language', () => { beforeAll(() => { newInstance.changeLanguage('fr'); }); it('it should have the appropriate language properties', () => { expect(newInstance).to.have.property('language', 'fr'); expect(newInstance).to.have.property('languages'); expect(newInstance.languages).to.have.lengthOf(2); expect(newInstance.languages[0]).to.equal('fr'); expect(newInstance.languages[1]).to.equal('en'); expect(newInstance).to.have.property('resolvedLanguage', 'en'); }); }); }); describe('#loadLanguages()', () => { describe('with supportedLngs', () => { /** @type {import('i18next').i18n} */ let newInstance; beforeAll(async () => { newInstance = i18next.createInstance({ fallbackLng: 'en', supportedLngs: ['en', 'de', 'it'], preload: ['en', 'de'], }); await newInstance.init(); }); describe('passing a supported lng', () => { it('it should extend preload', () => { newInstance.loadLanguages('it'); expect(newInstance.options.preload).to.include('it'); }); }); describe('passing a non supported lng', () => { it('it should extend preload', () => { newInstance.loadLanguages('es'); expect(newInstance.options.preload).not.to.include('es'); }); }); }); describe('without supportedLngs', () => { /** @type {import('i18next').i18n} */ let newInstance; beforeAll(async () => { newInstance = i18next.createInstance({ fallbackLng: 'en', preload: ['en', 'de'], }); await newInstance.init(); }); describe('passing a supported lng', () => { it('it should extend preload', () => { newInstance.loadLanguages('it'); expect(newInstance.options.preload).to.include('it'); }); }); describe('passing a non supported lng', () => { it('it should extend preload', () => { newInstance.loadLanguages('es'); expect(newInstance.options.preload).to.include('es'); }); }); describe('calling order of the changeLanguage function', () => { beforeEach(() => { vi.useFakeTimers(); }); afterEach(() => { vi.restoreAllMocks(); }); const mockLanguageResource = (lan, delay, value = `${lan}`) => ({ delay, value: { foo: value, }, }); it('it should make sure the resolved language matches the order of changeLanguage calls', () => { const instance = i18next.createInstance(); const langMap = { en: mockLanguageResource('en', 100), zh: mockLanguageResource('zh', 500), es: mockLanguageResource('es', 300), jp: mockLanguageResource('jp', 200), }; const task = new Promise((resolve) => { instance .use({ type: 'backend', read: (language, namespace, callback) => { const lang = langMap[language]; setTimeout(() => { callback(null, lang.value); }, lang.delay); }, }) .init( { fallbackLng: 'en', }, (err, t) => { resolve( Promise.all([ instance.changeLanguage('en'), instance.changeLanguage('zh'), instance.changeLanguage('jp'), instance.changeLanguage('es'), ]).then(() => { expect(t('foo')).to.equal('es'); }), ); }, ); }); vi.advanceTimersByTime(1000); return task; }); }); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.translation.formatting.noEscape.test.js000066400000000000000000000016341527173754700304770ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import i18next from '../../src/i18next.js'; const instance = i18next.createInstance(); describe('i18next.translation.formatting without escaping', () => { beforeAll(async () => { await instance.init({ lng: 'en', interpolation: { escapeValue: false, }, resources: { en: { translation: { intlDateTime: 'On the {{val, datetime}}', }, }, }, }); }); describe('formatting', () => { const tests = [ { args: ['intlDateTime', { val: new Date(Date.UTC(2012, 11, 20, 3, 0, 0)) }], expected: 'On the 12/20/2012', }, ]; tests.forEach((test) => { it(`correctly formats translations for ${JSON.stringify(test.args)}`, () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.translation.formatting.test.js000066400000000000000000000304031527173754700267370ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import i18next from '../../src/i18next.js'; const instance = i18next.createInstance(); describe('i18next.translation.formatting', () => { beforeAll( () => new Promise((resolve) => { instance.init( { lng: 'en', resources: { en: { translation: { oneFormatterTest: 'The following text is uppercased: $t(key5, uppercase)', anotherOneFormatterTest: 'The following text is underscored: $t(key6, underscore)', twoFormattersTest: 'The following text is uppercased: $t(key5, uppercase). The following text is underscored: $t(key5, underscore)', twoFormattersTogetherTest: 'The following text is uppercased, underscored, then uri component encoded: $t(key7, uppercase, underscore, encodeuricomponent)', oneFormatterUsingAnotherFormatterTest: 'The following text is lowercased: $t(twoFormattersTogetherTest, lowercase)', twoFormattersTogetherInterpolationTest: 'pre format {{value, uppercase, underscore}} after format', oneFormatterUsingCurrencyTest: 'The following text is an amount: $t(key8, currency)', missingTranslationTest: 'No text will be shown when the translation key is missing: $t(, uppercase)', key5: 'Here is some text', key6: 'Here is some text with numb3r5', key7: 'Here is some: text? with, (punctuation)', key8: '10000', withSpace: ' there', keyWithNesting: 'hi$t(withSpace)', intlNumber: 'Some {{val, number}}', intlNumberWithOptions: 'Some {{val, number(minimumFractionDigits: 2)}}', intlNumberWithOptions2: '{{val,number(useGrouping:false)}}', intlCurrencyWithOptions: 'The value is {{val, currency(currency: USD)}}', intlCurrencyWithOptionsSimplified: 'The value is {{val, currency(USD)}}', twoIntlCurrencyWithUniqueFormatOptions: 'The value is {{localValue, currency}} or {{altValue, currency}}', intlDateTime: 'On the {{val, datetime}}', intlRelativeTime: 'Lorem {{val, relativetime}}', intlRelativeTimeWithOptions: 'Lorem {{val, relativetime(quarter)}}', intlRelativeTimeWithOptionsExplicit: 'Lorem {{val, relativetime(range: quarter; style: short;)}}', intlList: 'A list of {{val, list}}', keyCustomFormatWithColon: 'Before {{date, customDate(format: EEEE d MMMM yyyy HH:mm; otherParam: 0)}}', keyCustomCachedFormatWithColon: 'Before {{date, customDateCached(format: EEEE d MMMM yyyy HH:mm; otherParam: 0)}}', customFormatWithSeparator: "Hello {{myVar, join(separator: ' | ')}}", customFormatWithSeparatorComma: "Hello {{myVar, join(separator: ', ')}}", customFormatWithSeparatorCommaNotFirst: "Hello {{myVar, upper, join(separator: ', ')}}", boy: 'Boy', boy_other: 'Boys', girl: 'Girl', girl_other: 'Girls', park: 'a {{name}} park', park_other: '{{count}} {{name}} parks', be: 'is', be_other: 'are', girlsAndBoysWithoutFormatTest: 'They have {{girls}} $t(girl, { "count": {{girls}} }) and {{boys}} $t(boy, { "count": {{boys}} })', girlsAndBoysWithoutPluralTest: 'They have {{girls}} $t(girl, lowercase) and {{boys}} $t(boy, lowercase)', girlsAndBoysFormatTest: 'They have {{girls}} $t(girl, { "count": {{girls}} }, lowercase) and {{boys}} $t(boy, { "count": {{boys}} }, lowercase)', girlsAndBoysInTheParkFormatTest: 'There $t(be, { "count": {{girls}} }) {{girls}} $t(girl, { "count": {{girls}} }, lowercase) and {{boys}} $t(boy, { "count": {{boys}} }, lowercase) in $t(park, { "count": {{parkCount}}, "name": "{{parkName}}" }, title case, underscore)', }, }, }, }, () => { // add some custom formats used by legacy instance.services.formatter.add('uppercase', (value) => value.toUpperCase()); instance.services.formatter.add('lowercase', (value) => value.toLowerCase()); instance.services.formatter.add('title case', (value) => value .split(' ') .map((word) => word[0].toUpperCase() + word.slice(1)) .join(' '), ); instance.services.formatter.add('underscore', (value) => value.replace(/\s+/g, '_')); instance.services.formatter.add('encodeuricomponent', (value) => encodeURIComponent(value), ); instance.services.formatter.add( 'customDate', (_value, _lng, options) => `customized date in format ${options.format} (and other param ${options.otherParam})`, ); instance.services.formatter.addCached( 'customDateCached', (lng, options) => (val) => `customized cached ${lng} date in format ${options.format} (and other param ${ options.otherParam }) for ${val.getTime()}`, ); instance.services.formatter.add('join', (value, lng, options) => value.join(options.separator), ); instance.services.formatter.add('upper', (value) => value.map((item) => item.toUpperCase()), ); resolve(); }, ); }), ); describe('formatting', () => { // some legacy tests let tests = [ { args: ['oneFormatterTest'], expected: 'The following text is uppercased: HERE IS SOME TEXT', }, { args: ['anotherOneFormatterTest'], expected: 'The following text is underscored: Here_is_some_text_with_numb3r5', }, { args: ['twoFormattersTest'], expected: 'The following text is uppercased: HERE IS SOME TEXT. The following text is underscored: Here_is_some_text', }, { args: ['twoFormattersTogetherTest'], expected: 'The following text is uppercased, underscored, then uri component encoded: HERE_IS_SOME%3A_TEXT%3F_WITH%2C_(PUNCTUATION)', }, { args: ['oneFormatterUsingAnotherFormatterTest'], expected: 'The following text is lowercased: the following text is uppercased, underscored, then uri component encoded: here_is_some%3a_text%3f_with%2c_(punctuation)', }, { args: ['twoFormattersTogetherInterpolationTest', { value: 'my interpolated value' }], expected: 'pre format MY_INTERPOLATED_VALUE after format', }, { args: ['missingTranslationTest'], expected: 'No text will be shown when the translation key is missing: ', }, { args: ['keyWithNesting'], expected: 'hi there', }, // number formatting { args: ['intlNumber', { val: 1000 }], expected: 'Some 1,000', }, { args: ['intlNumber', { val: 1000.1, minimumFractionDigits: 3 }], expected: 'Some 1,000.100', }, { args: ['intlNumberWithOptions', { val: 2000 }], expected: 'Some 2,000.00', }, { args: ['intlNumberWithOptions', { val: 2000, minimumFractionDigits: 3 }], expected: 'Some 2,000.000', }, { args: [ 'intlNumberWithOptions', { val: 2000, formatParams: { val: { minimumFractionDigits: 3 } } }, ], expected: 'Some 2,000.000', }, { args: ['intlNumberWithOptions2', { val: 123456 }], expected: '123456', }, // currency { args: ['intlCurrencyWithOptions', { val: 2000 }], expected: 'The value is $2,000.00', }, { args: ['intlCurrencyWithOptionsSimplified', { val: 2000 }], expected: 'The value is $2,000.00', }, { args: [ 'twoIntlCurrencyWithUniqueFormatOptions', { localValue: 12345.67, altValue: 16543.21, formatParams: { localValue: { currency: 'USD', locale: 'en-US' }, altValue: { currency: 'DKK', locale: 'da' }, }, }, ], expected: 'The value is $12,345.67 or 16.543,21 kr.', }, // datetime { args: ['intlDateTime', { val: new Date(Date.UTC(2012, 11, 20, 3, 0, 0)) }], expected: 'On the 12/20/2012', // / = / }, { args: [ 'intlDateTime', { val: new Date(Date.UTC(2012, 11, 20, 3, 0, 0)), formatParams: { val: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }, }, }, ], expected: 'On the Thursday, December 20, 2012', }, // relativetime { args: ['intlRelativeTime', { val: 3 }], expected: 'Lorem in 3 days', }, { args: ['intlRelativeTime', { val: -3 }], expected: 'Lorem 3 days ago', }, { args: ['intlRelativeTimeWithOptions', { val: -3 }], expected: 'Lorem 3 quarters ago', }, { args: ['intlRelativeTimeWithOptionsExplicit', { val: -3 }], expected: 'Lorem 3 qtrs. ago', }, { args: ['intlRelativeTimeWithOptionsExplicit', { val: -3, style: 'long' }], expected: 'Lorem 3 quarters ago', }, // list { args: ['intlList', { val: ['locize', 'i18next', 'awesome'] }], expected: 'A list of locize, i18next, and awesome', }, // formatting + plural + interpolation { args: ['girlsAndBoysWithoutFormatTest', { girls: 1, boys: 2 }], expected: 'They have 1 Girl and 2 Boys', }, { args: ['girlsAndBoysWithoutPluralTest', { girls: 1, boys: 2 }], expected: 'They have 1 girl and 2 boy', }, { args: ['girlsAndBoysFormatTest', { girls: 1, boys: 2 }], expected: 'They have 1 girl and 2 boys', }, { args: [ 'girlsAndBoysInTheParkFormatTest', { girls: 1, boys: 2, parkCount: 3, parkName: 'national' }, ], expected: 'There is 1 girl and 2 boys in 3_National_Parks', }, ]; // custom tests = tests.concat([ { args: ['keyCustomFormatWithColon', { date: new Date(Date.UTC(2022, 0, 4, 14, 33, 10)) }], expected: 'Before customized date in format EEEE d MMMM yyyy HH:mm (and other param 0)', }, { args: [ 'keyCustomCachedFormatWithColon', { date: new Date(Date.UTC(2022, 0, 4, 14, 33, 10)) }, ], expected: 'Before customized cached en date in format EEEE d MMMM yyyy HH:mm (and other param 0) for 1641306790000', }, { args: ['customFormatWithSeparator', { myVar: ['here', 'there'] }], expected: 'Hello here | there', }, { args: ['customFormatWithSeparatorComma', { myVar: ['here', 'there'] }], expected: 'Hello here, there', }, { args: ['customFormatWithSeparatorCommaNotFirst', { myVar: ['a', 'b'] }], expected: 'Hello A, B', }, ]); tests.forEach((test) => { it(`correctly formats translations for ${JSON.stringify(test.args)}`, () => { expect(instance.t.apply(instance, test.args)).to.eql(test.expected); }); }); it('formats values when the options cannot be serialized to JSON', () => { expect(instance.t('intlNumber', { val: 12345678901234567890n })).to.eql( 'Some 12,345,678,901,234,567,890', ); const user = { name: 'Ann' }; user.self = user; expect(instance.t('intlNumber', { val: 1000, user })).to.eql('Some 1,000'); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.translation.t.test.js000066400000000000000000000111501527173754700250260ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import i18next from '../../src/i18next.js'; describe('i18next t default returns', () => { /** @type {import('i18next').i18n} */ let i18n; beforeAll(() => { i18n = i18next.createInstance(); i18n.init({ fallbackLng: 'en', resources: { en: { translation: { key: 'normal', keyNull: null, keyEmpty: '', }, }, }, }); }); it('it should not return null values by default', () => { expect(i18n.t('key')).to.equal('normal'); expect(i18n.t('keyNull')).to.equal('keyNull'); expect(i18n.t('keyEmpty')).to.equal(''); }); it('it should not return Object prototype stuff', () => { expect(i18n.t('constructor')).to.equal('constructor'); expect(i18n.t('constructor_test')).to.equal('constructor_test'); expect(i18n.t('hasOwnProperty')).to.equal('hasOwnProperty'); expect(i18n.t('__defineGetter__')).to.equal('__defineGetter__'); expect(i18n.t('__defineSetter__')).to.equal('__defineSetter__'); expect(i18n.t('__lookupGetter__')).to.equal('__lookupGetter__'); expect(i18n.t('__lookupSetter__')).to.equal('__lookupSetter__'); expect(i18n.t('__proto__')).to.equal('__proto__'); }); it('it should not crash for undefined or null keys', () => { expect(i18n.t(null)).to.equal(''); expect(i18n.t(undefined)).to.equal(''); expect(i18n.t()).to.equal(''); }); describe('with selector fallback arrays', () => { /** @type {import('i18next').i18n} */ let i18nSel; beforeAll(() => { i18nSel = i18next.createInstance(); i18nSel.init({ enableSelector: true, fallbackLng: 'en', resources: { en: { ns1: { greeting: 'hello', farewell: 'goodbye', deep: { nested: 'deep value' }, }, ns2: { fromNs2: 'from ns2', }, }, }, }); }); it('resolves with the first selector when its key exists', () => { expect(i18nSel.t([($) => $.greeting, ($) => $.farewell], { ns: 'ns1' })).toEqual('hello'); }); it('falls back to the second selector when the first key is missing', () => { expect(i18nSel.t([($) => $.missing, ($) => $.farewell], { ns: 'ns1' })).toEqual('goodbye'); }); it('falls back through multiple missing keys to the last resolvable one', () => { expect( i18nSel.t([($) => $.missing1, ($) => $.missing2, ($) => $.greeting], { ns: 'ns1' }), ).toEqual('hello'); }); it('works with deeply nested selector keys', () => { expect(i18nSel.t([($) => $.missing, ($) => $.deep.nested], { ns: 'ns1' })).toEqual( 'deep value', ); }); it('returns the key string when all selectors miss', () => { const result = i18nSel.t([($) => $.missing1, ($) => $.missing2], { ns: 'ns1' }); // i18next returns the last key string when nothing resolves expect(result).toEqual('missing2'); }); it('works across namespaces when ns option is provided', () => { expect(i18nSel.t([($) => $.missing, ($) => $.fromNs2], { ns: 'ns2' })).toEqual('from ns2'); }); it('a single-element selector array behaves identically to the bare selector', () => { expect(i18nSel.t([($) => $.greeting], { ns: 'ns1' })).toEqual( i18nSel.t(($) => $.greeting, { ns: 'ns1' }), ); }); }); describe('with custome separators', () => { /** @type {import('i18next').i18n} */ let i18nSep; beforeAll(() => { i18nSep = i18next.createInstance(); i18nSep.init({ keySeparator: '::', nsSeparator: ':::', fallbackLng: 'en', resources: { en: { root: { foo: { bar: 'foobar', }, }, }, }, }); }); const tests = [ { args: ['root:::foo::bar'], expected: 'foobar' }, { args: ['foo::bar', { ns: 'root' }], expected: 'foobar' }, { args: [($) => $.foo.bar, { ns: 'root' }], expected: 'foobar' }, // Array of selectors: first key resolves, fallback never reached. { args: [[($) => $.foo.bar, ($) => $.foo.missing], { ns: 'root' }], expected: 'foobar' }, // Array of selectors: first key missing, fallback resolves. { args: [[($) => $.foo.missing, ($) => $.foo.bar], { ns: 'root' }], expected: 'foobar' }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(i18nSep.t.apply(i18nSep, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/i18next.use.test.js000066400000000000000000000053671527173754700230370ustar00rootroot00000000000000import { describe, it, expect, vi } from 'vitest'; import i18next from '../../src/i18next.js'; describe('i18next.use()', () => { describe('passing an undefined module', () => { it('it should throw accordingly', () => { const badFn = () => i18next.use(undefined); expect(badFn).to.throw(/undefined module/); }); }); describe('passing a module with wrong interface', () => { it('it should throw accordingly', () => { const badFn = () => i18next.use({}); expect(badFn).to.throw(/wrong module/); }); }); describe('replacing a module', () => { const backendA = { type: 'backend', read: (lng, ns, cb) => cb(null, {}) }; const backendB = { type: 'backend', read: (lng, ns, cb) => cb(null, {}) }; const logger = () => { const warn = vi.fn(); return { warn, module: { type: 'logger', log: () => {}, warn, error: () => {} } }; }; it('warns in debug mode once init() has set up the logger', async () => { const { warn, module } = logger(); const instance = i18next.createInstance().use(module).use(backendA).use(backendB); expect(instance.modules.backend).to.equal(backendB); await instance.init({ debug: true, lng: 'en', fallbackLng: 'en' }); const msgs = warn.mock.calls.map((args) => args[0][0]); expect(msgs.filter((m) => m.includes('replaces the backend'))).toHaveLength(1); }); it('warns right away after init()', async () => { const { warn, module } = logger(); const instance = i18next.createInstance().use(module); await instance.init({ debug: true, lng: 'en', fallbackLng: 'en' }); instance.use({ type: 'formatter', init: () => {}, format: (v) => v, add: () => {} }); instance.use({ type: 'formatter', init: () => {}, format: (v) => v, add: () => {} }); const msgs = warn.mock.calls.map((args) => args[0][0]); expect(msgs.filter((m) => m.includes('replaces the formatter'))).toHaveLength(1); }); it('does not warn for the same module twice or without debug', async () => { const { warn, module } = logger(); const instance = i18next.createInstance().use(module).use(backendA).use(backendA); await instance.init({ debug: true, lng: 'en', fallbackLng: 'en' }); const quiet = logger(); await i18next .createInstance() .use(quiet.module) .use(backendA) .use(backendB) .init({ lng: 'en', fallbackLng: 'en' }); const msgs = [...warn.mock.calls, ...quiet.warn.mock.calls].map((args) => args[0][0]); expect(msgs.filter((m) => m.includes('replaces the backend'))).toHaveLength(0); }); }); describe('dir()', () => { it('returns ltr without a language', () => { expect(i18next.createInstance().dir()).to.equal('ltr'); }); }); }); i18next-i18next-db698b1/test/runtime/interpolation.test.js000066400000000000000000000450121527173754700236220ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Interpolator from '../../src/Interpolator'; describe('Interpolator', () => { describe('interpolate()', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { escapeValue: false } }); }); const tests = [ { args: ['test', { test: '123' }], expected: 'test' }, { args: ['test {{test}}', { test: '123' }], expected: 'test 123' }, { args: ['test {{test}} a {{bit.more}}', { test: '123', bit: { more: '456' } }], expected: 'test 123 a 456', }, { args: ['test {{ test }}', { test: '123' }], expected: 'test 123' }, { args: ['test {{ test }}', { test: null }], expected: 'test ' }, { args: ['test {{ test }}', { test: undefined }], expected: 'test ' }, { args: ['test {{ test }}', {}], expected: 'test ' }, { args: ['test {{test.deep}}', { test: { deep: '123' } }], expected: 'test 123' }, { args: ['test {{test.constructor}}', { test: { deep: '123' } }], expected: 'test ' }, { args: ['test {{test.toString}}', { test: {} }], expected: 'test ' }, ]; tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - defaultVariables', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { escapeValue: false, defaultVariables: { test: '123', bit: { more: '456' } }, }, }); }); const tests = [ { args: ['test'], expected: 'test' }, { args: ['test {{test}}'], expected: 'test 123' }, { args: ['test {{test}} a {{bit.more}}'], expected: 'test 123 a 456', }, // prio has passed in variables { args: ['test {{ test }}', { test: '124' }], expected: 'test 124' }, { args: ['test {{ test }}', { test: null }], expected: 'test ' }, // Override default variable only with null, not with undefined. { args: ['test {{ test }}', { test: undefined }], expected: 'test 123' }, ]; tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - with a custom keySeparator', () => { it.each([false, '::'])('keeps nested 0, false and empty values with %s', (keySeparator) => { const ip = new Interpolator({ keySeparator, interpolation: { escapeValue: false, skipOnVariables: true }, }); const data = { stats: { unread: 0, muted: false, label: '', total: 3 }, 'flat.key': 'flat' }; expect( ip.interpolate( '{{stats.unread}}|{{stats.muted}}|{{stats.label}}|{{stats.total}}|{{flat.key}}', data, ), ).toBe('0|false||3|flat'); }); it.each(['.', false, '::'])( 'prefers a nested falsy value over a flat key, but not a nested null, with %s', (keySeparator) => { const ip = new Interpolator({ keySeparator, interpolation: { escapeValue: false, skipOnVariables: true }, }); const data = { a: { zero: 0, nil: null }, 'a.zero': 'flat zero', 'a.nil': 'flat nil' }; expect(ip.interpolate('{{a.zero}}|{{a.nil}}', data)).toBe('0|flat nil'); }, ); }); describe('interpolate() - options', () => { const tests = [ { options: { interpolation: {} }, expected: { escapeValue: true, prefix: '{{', suffix: '}}', formatSeparator: ',', unescapePrefix: '-', unescapeSuffix: '', nestingPrefix: '\\$t\\(', nestingSuffix: '\\)', }, }, { options: {}, expected: { escapeValue: true, prefix: '{{', suffix: '}}', formatSeparator: ',', unescapePrefix: '-', unescapeSuffix: '', nestingPrefix: '\\$t\\(', nestingSuffix: '\\)', }, }, { description: 'uses and regex escapes prefix and suffix', options: { interpolation: { prefix: '(*(', suffix: ')*)', prefixEscaped: '\\(\\^\\(', suffixEscaped: ')\\^\\)', }, }, expected: { prefix: '\\(\\*\\(', suffix: '\\)\\*\\)' }, }, { description: 'uses prefixEscaped and suffixEscaped if prefix and suffix not provided', options: { interpolation: { prefixEscaped: '<<', suffixEscaped: '>>' } }, expected: { prefix: '<<', suffix: '>>' }, }, { description: 'uses unescapePrefix if provided', options: { interpolation: { unescapePrefix: '=>' } }, expected: { unescapePrefix: '=>', unescapeSuffix: '' }, }, { description: 'uses unescapeSuffix if provided', options: { interpolation: { unescapeSuffix: '<=' } }, expected: { unescapePrefix: '', unescapeSuffix: '<=' }, }, { description: 'uses unescapeSuffix if both unescapePrefix and unescapeSuffix are provided', options: { interpolation: { unescapePrefix: '=>', unescapeSuffix: '<=' } }, expected: { unescapePrefix: '', unescapeSuffix: '<=' }, }, { description: 'uses and regex escapes nestingPrefix and nestingSuffix', options: { interpolation: { nestingPrefix: 'nest(', nestingSuffix: ')nest', nestingPrefixEscaped: 'neste\\(', nestingSuffixEscaped: '\\)neste', }, }, expected: { nestingPrefix: 'nest\\(', nestingSuffix: '\\)nest' }, }, { description: 'uses nestingPrefixEscaped and nestingSuffixEscaped if nestingPrefix and nestingSuffix not provided', options: { interpolation: { nestingPrefixEscaped: 'neste\\(', nestingSuffixEscaped: '\\)neste' }, }, expected: { nestingPrefix: 'neste\\(', nestingSuffix: '\\)neste' }, }, { description: 'uses maxReplaces if provided', options: { interpolation: { maxReplaces: 100 } }, expected: { maxReplaces: 100 }, }, ]; tests.forEach((test) => { describe(test.description || `when called with ${JSON.stringify(test.options)}`, () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator(test.options); }); Object.keys(test.expected).forEach((key) => { it(`${key} is set correctly`, () => { expect(ip[key]).to.eql(test.expected[key]); }); }); }); }); }); describe('interpolate() - with formatter', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { escapeValue: false, format(value, format, lng, options) { if (format === 'uppercase') return value.toUpperCase(); if (format === 'lowercase') return value.toLowerCase(); if (format === 'throw') throw new Error('Formatter error'); if (format === 'currency') return Intl.NumberFormat(options.parmOptions[options.interpolationkey].locale, { style: 'currency', currency: options.parmOptions[options.interpolationkey].currency, }).format(value); return value; }, }, }); }); const tests = [ { args: ['test {{test, uppercase}}', { test: 'up' }], expected: 'test UP' }, { args: ['test {{test, lowercase}}', { test: 'DOWN' }], expected: 'test down' }, { args: [ 'test {{localValue, currency}} {{altValue, currency}}', { localValue: 12345.67, altValue: 16543.21, parmOptions: { localValue: { currency: 'USD', locale: 'en-US' }, altValue: { currency: 'EUR', locale: 'fr-FR' }, }, }, ], expected: 'test $12,345.67 16 543,21 €', }, ]; tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); it('correctly manage exception in formatter', () => { expect(() => { ip.interpolate.apply(ip, ['test {{test, throw}}', { test: 'up' }]); }).to.throw(Error, 'Formatter error'); const test = tests[0]; expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); describe('interpolate() - with formatter using a special formatSeparator', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { formatSeparator: '|', format(value, format) { if (format === 'uppercase') return value.toUpperCase(); return value; }, }, }); }); const tests = [{ args: ['test {{test | uppercase}}', { test: 'up' }], expected: 'test UP' }]; tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - with formatter always', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { alwaysFormat: true, format(value, format) { if (format === 'uppercase') return value.toUpperCase(); return value.toLowerCase(); }, }, }); }); const tests = [ { args: ['test {{test, uppercase}}', { test: 'up' }], expected: 'test UP' }, { args: ['test {{test}}', { test: 'DOWN' }], expected: 'test down' }, ]; tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - unescape', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({}); }); const tests = [ { args: ['test {{test}}', { test: 'foo' }], expected: 'test <a>foo</a>', }, { args: ['test {{test.deep}}', { test: { deep: 'foo' } }], expected: 'test <a>foo</a>', }, { args: ['test {{- test.deep}}', { test: { deep: 'foo' } }], expected: 'test foo', }, { args: [ 'test {{- test}} {{- test2}} {{- test3}}', { test: ' ', test2: 'test2', test3: 'test3' }, ], expected: 'test test2 test3', }, { args: ['test {{- test}}', {}], expected: 'test ', }, { args: ['test {{- test}}', { test: null }], expected: 'test ', }, ]; tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - nesting', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({}); }); const tests = [ { args: ['test $t(test)', () => 'success'], expected: 'test success', }, { args: ['$t(test, {"key": "success"})', (key, opts) => `test ${opts.key}`], expected: 'test success', }, { args: ["$t(test, {'key': 'success'})", (key, opts) => `test ${opts.key}`], expected: 'test success', }, { args: ['$t(test, is, {"key": "success"})', (key, opts) => `test, is ${opts.key}`], expected: 'test, is success', }, { args: ['$t(test, is, ok)', () => 'test, is, ok'], expected: 'test, is, ok', }, { args: ['$t(ns:test)', () => 'test from ns'], expected: 'test from ns', }, ]; tests.forEach((test) => { it(`correctly nests for ${JSON.stringify(test.args)} args`, () => { expect(ip.nest.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - nesting with null matchedDoubleQuotes', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { escapeValue: false } }); }); it('should not crash when optionsString has no double quotes', () => { const result = ip.nest("$t(test, {'key': '{{val}}'})", () => 'ok', { val: "it's" }); expect(result).to.eql('ok'); }); }); describe('interpolate() - nesting with regex meta char nestingOptionsSeparator', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { nestingOptionsSeparator: '+', }, }); }); it('correctly parses nesting options when separator is a regex meta character', () => { const result = ip.nest('$t(test+ {"key":"success"})', (key, opts) => `${key} ${opts.key}`); expect(result).to.eql('test success'); }); }); describe('nest() - replacement patterns in the nested value', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { escapeValue: false } }); }); const tests = [ { value: 'Rock $& Roll', expected: 'Band: Rock $& Roll' }, { value: 'a$`b', expected: 'Band: a$`b' }, { value: "a$'b", expected: "Band: a$'b" }, { value: 'US$$5', expected: 'Band: US$$5' }, ]; tests.forEach((test) => { it(`keeps ${JSON.stringify(test.value)} literal`, () => { expect(ip.nest('Band: $t(key)', () => test.value)).to.eql(test.expected); }); }); it('stringifies a non-string value returned by a formatter', () => { const ipFormat = new Interpolator({ interpolation: { escapeValue: false, format: (v, f) => (f === 'len' ? v.length : v) }, }); expect(ipFormat.nest('Count: $t(key, len)', () => 'abc')).to.eql('Count: 3'); }); }); describe('interpolate() - backwards compatible', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { escapeValue: true, prefix: '__', suffix: '__', unescapeSuffix: 'HTML', }, }); }); const tests = [ { args: ['test __test__', { test: '123' }], expected: 'test 123' }, { args: ['test __test__ a __bit.more__', { test: '123', bit: { more: '456' } }], expected: 'test 123 a 456', }, { args: ['test __ test __', { test: '123' }], expected: 'test 123' }, { args: ['test __test.deep__', { test: { deep: '123' } }], expected: 'test 123' }, { args: ['test __test__', { test: 'foo' }], expected: 'test <a>foo</a>', }, { args: ['test __test.deep__', { test: { deep: 'foo' } }], expected: 'test <a>foo</a>', }, { args: ['test __test.deepHTML__', { test: { deep: 'foo' } }], expected: 'test foo', }, ]; tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - max replaced to prevent endless loop', () => { /** @type {Interpolator} */ let ip; beforeAll(() => { ip = new Interpolator({ interpolation: { maxReplaces: 10, }, }); }); const tests = [ { args: ['test {{test}}', { test: 'tested {{test}}' }], expected: 'test tested tested tested tested tested tested tested tested tested tested {{test}}', }, ]; tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - with undefined interpolation value', () => { /** @type {Interpolator} */ let ip; const tests = [{ args: ['{{test}}'], expected: '' }]; beforeAll(() => { ip = new Interpolator({ missingInterpolationHandler: (str, match) => { expect(str).to.eql('{{test}}'); expect(match[0]).to.eql('{{test}}'); expect(match[1]).to.eql('test'); }, }); }); tests.forEach((test) => { it(`correctly calls missingInterpolationHandler for ${JSON.stringify( test.args, )} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); describe('interpolate() - with undefined interpolation value - filled by missingInterpolationHandler', () => { /** @type {Interpolator} */ let ip; const tests = [{ args: ['{{test}}'], expected: 'test' }]; beforeAll(() => { ip = new Interpolator({ missingInterpolationHandler: (str, match) => { expect(str).to.eql('{{test}}'); expect(match[0]).to.eql('{{test}}'); expect(match[1]).to.eql('test'); return 'test'; }, }); }); tests.forEach((test) => { it(`correctly calls missingInterpolationHandler for ${JSON.stringify( test.args, )} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); it('correctly calls handler provided via options', () => { expect( ip.interpolate('{{custom}}', {}, null, { missingInterpolationHandler: () => 'overridden', }), ).to.eql('overridden'); }); }); describe('interpolate() - with null interpolation value - not filled by missingInterpolationHandler', () => { /** @type {Interpolator} */ let ip; const tests = [{ args: ['{{test}}', { test: null }], expected: '' }]; beforeAll(() => { ip = new Interpolator({ missingInterpolationHandler: () => 'test', }); }); tests.forEach((test) => { it(`correctly interpolates for ${JSON.stringify(test.args)} args`, () => { expect(ip.interpolate.apply(ip, test.args)).to.eql(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/languageDetector.test.js000066400000000000000000000062751527173754700242200ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import { createInstance } from '../../src/index.js'; describe('LanguageDetector with different signatures', () => { describe('LanguageDetector with minimal sync signature', () => { let detectingLanguage = 'de-CH'; const i18n = createInstance(); i18n.use({ type: 'languageDetector', detect: () => detectingLanguage, }); describe('#init', () => { it('should work as usual', () => { i18n.init({ initAsync: false }); expect(i18n.language).to.eql('de-CH'); }); }); describe('#changeLanguage', () => { it('should detect the language accordingly', () => { detectingLanguage = 'it'; i18n.changeLanguage(); expect(i18n.language).to.eql('it'); }); }); }); describe('LanguageDetector with full sync signature', () => { let detectingLanguage = 'de-CH'; let cachedLng; const i18n = createInstance(); i18n.use({ type: 'languageDetector', init: () => {}, detect: () => detectingLanguage, cacheUserLanguage: (l) => { cachedLng = l; return l; }, }); describe('#init', () => { it('should work as usual', () => { i18n.init({ initAsync: false }); expect(i18n.language).to.eql('de-CH'); expect(cachedLng).to.eql('de-CH'); }); }); describe('#changeLanguage', () => { it('should detect the language accordingly', () => { detectingLanguage = 'it'; i18n.changeLanguage(); expect(i18n.language).to.eql('it'); expect(cachedLng).to.eql('it'); }); }); }); describe('LanguageDetector with async callback signature', () => { let detectingLanguage = 'de-CH'; const i18n = createInstance(); i18n.use({ type: 'languageDetector', async: true, detect: (clb) => clb(detectingLanguage), }); describe('#init', () => { it('should work as usual', async () => { await i18n.init(); expect(i18n.language).to.eql('de-CH'); }); }); describe('#changeLanguage', () => { it('should detect the language accordingly', async () => { detectingLanguage = 'it'; await i18n.changeLanguage(undefined); expect(i18n.language).to.eql('it'); }); }); }); describe('LanguageDetector with async promise signature', () => { let detectingLanguage = 'de-CH'; let cachedLng; const i18n = createInstance(); i18n.use({ type: 'languageDetector', async: true, detect: async () => Promise.resolve(detectingLanguage), cacheUserLanguage: async (l) => { cachedLng = l; return Promise.resolve(l); }, }); describe('#init', () => { it('should work as usual', async () => { await i18n.init(); expect(i18n.language).to.eql('de-CH'); expect(cachedLng).to.eql('de-CH'); }); }); describe('#changeLanguage', () => { it('should detect the language accordingly', async () => { detectingLanguage = 'it'; await i18n.changeLanguage(undefined); expect(i18n.language).to.eql('it'); expect(cachedLng).to.eql('it'); }); }); }); }); i18next-i18next-db698b1/test/runtime/languageUtils.test.js000066400000000000000000000435161527173754700235460ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import LanguageUtils from '../../src/LanguageUtils'; describe('LanguageUtils', () => { describe('toResolveHierarchy()', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: 'en' }); }); const tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['de-CH'], expected: ['de-CH', 'de', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'nb', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'en'] }, { args: ['de-x-custom1'], expected: ['de-x-custom1', 'de', 'en'] }, { args: ['de-DE-x-custom1'], expected: ['de-DE-x-custom1', 'de', 'en'] }, { args: ['de-CH', 'de-ch'], expected: ['de-CH', 'de'] }, { args: ['zh-Hant-MO', ['zh-hant-mo', 'en']], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'en'], }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() cache', () => { it('returns a copy of a cached hierarchy', () => { const cu = new LanguageUtils({ fallbackLng: 'en' }); const first = cu.toResolveHierarchy('de', 'fr'); const second = cu.toResolveHierarchy('de', 'fr'); expect(second).to.eql(first); expect(second).not.toBe(first); }); it('does not allow returned arrays to modify the cached hierarchy', () => { const cu = new LanguageUtils({ fallbackLng: 'en' }); const first = cu.toResolveHierarchy('de'); first.push('fr'); expect(cu.toResolveHierarchy('de')).to.eql(['de', 'en']); }); it('caches a hierarchy when fallbackLng is an array', () => { const cu = new LanguageUtils({ fallbackLng: ['en'] }); const first = cu.toResolveHierarchy('de'); expect(Object.keys(cu.resolveHierarchyCache)).toHaveLength(1); const second = cu.toResolveHierarchy('de'); expect(second).to.eql(first); }); it('does not cache array or object fallbackCode values', () => { const cu = new LanguageUtils({ fallbackLng: 'en' }); expect(cu.toResolveHierarchy('de', ['fr', 'en'])).to.eql(['de', 'fr', 'en']); expect(cu.toResolveHierarchy('de-CH', { 'de-CH': ['fr'], default: ['en'] })).to.eql([ 'de-CH', 'de', 'fr', ]); expect(cu.resolveHierarchyCache).to.eql({}); }); it('invalidates the cache when the fallbackLng array is mutated in place', () => { const options = { fallbackLng: ['en'] }; const cu = new LanguageUtils(options); expect(cu.toResolveHierarchy('de')).to.eql(['de', 'en']); options.fallbackLng.push('fr'); expect(cu.toResolveHierarchy('de')).to.eql(['de', 'en', 'fr']); }); it('invalidates the cache when fallbackLng changes', () => { const options = { fallbackLng: 'en' }; const cu = new LanguageUtils(options); expect(cu.toResolveHierarchy('de')).to.eql(['de', 'en']); options.fallbackLng = 'fr'; expect(cu.toResolveHierarchy('de')).to.eql(['de', 'fr']); }); it('clears the cache', () => { const cu = new LanguageUtils({ fallbackLng: 'en' }); cu.toResolveHierarchy('de'); expect(Object.keys(cu.resolveHierarchyCache)).toHaveLength(1); cu.clearCache(); expect(cu.resolveHierarchyCache).to.eql({}); }); it('recalculates after another option changes and the cache is cleared', () => { const options = { fallbackLng: 'en', load: 'all' }; const cu = new LanguageUtils(options); expect(cu.toResolveHierarchy('de-CH')).to.eql(['de-CH', 'de', 'en']); options.load = 'languageOnly'; cu.clearCache(); expect(cu.toResolveHierarchy('de-CH')).to.eql(['de', 'en']); }); it('does not cache a function-valued fallbackLng', () => { let fallbackLng = 'en'; const cu = new LanguageUtils({ fallbackLng: () => fallbackLng }); expect(cu.toResolveHierarchy('de')).to.eql(['de', 'en']); fallbackLng = 'fr'; expect(cu.toResolveHierarchy('de')).to.eql(['de', 'fr']); expect(cu.resolveHierarchyCache).to.eql({}); }); it('distinguishes fallbackCode types in cache keys', () => { const cu = new LanguageUtils({ fallbackLng: 'en' }); expect(cu.toResolveHierarchy('de')).to.eql(['de', 'en']); expect(cu.toResolveHierarchy('de', 'undefined')).to.eql(['de', 'undefined']); expect(cu.toResolveHierarchy('de', false)).to.eql(['de']); expect(cu.toResolveHierarchy('de', 'false')).to.eql(['de', 'false']); }); }); describe('toResolveHierarchy() - extended fallback object', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: { de: ['de-CH', 'en'], 'de-CH': ['fr', 'it', 'en'], 'zh-Hans': ['zh-Hant', 'zh', 'en'], 'zh-Hant': ['zh-Hans', 'zh', 'en'], ja: ['ja'], nb: ['no'], nn: ['no'], default: ['en'], }, }); }); const tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'de-CH', 'en'] }, { args: ['de-CH'], expected: ['de-CH', 'de', 'fr', 'it', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'nb', 'no'] }, { args: ['nn'], expected: ['nn', 'no'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'zh-Hans', 'en'] }, { args: ['fr'], expected: ['fr', 'en'] }, { args: ['ja'], expected: ['ja'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - fallback function returns object', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: () => ({ de: ['de-CH', 'en'], 'de-CH': ['fr', 'it', 'en'], 'zh-Hans': ['zh-Hant', 'zh', 'en'], 'zh-Hant': ['zh-Hans', 'zh', 'en'], nb: ['no'], nn: ['no'], default: ['en'], }), }); }); const tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'de-CH', 'en'] }, { args: ['de-CH'], expected: ['de-CH', 'de', 'fr', 'it', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'nb', 'no'] }, { args: ['nn'], expected: ['nn', 'no'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'zh-Hans', 'en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - fallback function returns string', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: () => 'en', }); }); const tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['de-CH'], expected: ['de-CH', 'de', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'nb', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'en'] }, { args: ['de-x-custom1'], expected: ['de-x-custom1', 'de', 'en'] }, { args: ['de-DE-x-custom1'], expected: ['de-DE-x-custom1', 'de', 'en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - fallback function returns array', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: () => ['de', 'en', 'zh'], }); }); const tests = [ { args: ['en'], expected: ['en', 'de', 'zh'] }, { args: ['de'], expected: ['de', 'en', 'zh'] }, { args: ['de-AT'], expected: ['de-AT', 'de', 'en', 'zh'] }, { args: ['zh-HK'], expected: ['zh-HK', 'zh', 'de', 'en'] }, { args: ['zh-CN'], expected: ['zh-CN', 'zh', 'de', 'en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - cleanCode Option', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: 'en', cleanCode: true }); }); const tests = [ { args: ['EN'], expected: ['en'] }, { args: ['DE'], expected: ['de', 'en'] }, { args: ['DE', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['FR', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['DE-CH'], expected: ['de-CH', 'de', 'en'] }, { args: ['NB-NO'], expected: ['nb-NO', 'nb', 'en'] }, { args: ['ZH-HANT-MO'], expected: ['zh-Hant-MO', 'zh-Hant', 'zh', 'en'] }, { args: ['en', 'EN'], expected: ['en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - lowerCaseLng Option', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: 'en', lowerCaseLng: true }); }); const tests = [ { args: ['EN'], expected: ['en'] }, { args: ['DE'], expected: ['de', 'en'] }, { args: ['DE', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['FR', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['DE-CH'], expected: ['de-ch', 'de', 'en'] }, { args: ['nb-NO'], expected: ['nb-no', 'nb', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh-hant-mo', 'zh-hant', 'zh', 'en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - load Option: lngOnly', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: 'en', load: 'languageOnly' }); }); const tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['de-CH'], expected: ['de', 'en'] }, { args: ['nb-NO'], expected: ['nb', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh', 'en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - load Option: currentOnly', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: 'en', load: 'currentOnly' }); }); const tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de', 'fr'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'fr', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de', 'fr'] }, { args: ['de-CH'], expected: ['de-CH', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'en'] }, { args: ['zh-Hant-MO'], expected: ['zh-Hant-MO', 'en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - supportedLngs', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: 'en', supportedLngs: ['nb-NO', 'de', 'en'] }); cu.logger.debug = false; // silence }); const tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de', 'fr'], expected: ['de'] }, { args: ['de', ['fr', 'en']], expected: ['de', 'en'] }, { args: ['de', ['fr', 'de']], expected: ['de'] }, { args: ['de-CH'], expected: ['de', 'en'] }, { args: ['nb-NO'], expected: ['nb-NO', 'en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('toResolveHierarchy() - non explicit supportedLngs ', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: ['en'], supportedLngs: ['de', 'en', 'zh'], nonExplicitSupportedLngs: true, }); }); const tests = [ { args: ['en'], expected: ['en'] }, { args: ['de'], expected: ['de', 'en'] }, { args: ['de-AT'], expected: ['de-AT', 'de', 'en'] }, { args: ['zh-HK'], expected: ['zh-HK', 'zh', 'en'] }, { args: ['zh-CN'], expected: ['zh-CN', 'zh', 'en'] }, ]; tests.forEach((test) => { it(`correctly prepares resolver for ${JSON.stringify(test.args)} args`, () => { expect(cu.toResolveHierarchy.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('getBestMatchFromCodes()', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: ['en'], supportedLngs: ['en-US', 'en', 'de-DE', 'zh-Hans', 'zh-Hant'], }); }); const tests = [ { args: [['en']], expected: 'en' }, { args: [['ru', 'en']], expected: 'en' }, { args: [['en-GB']], expected: 'en' }, { args: [['ru', 'en-GB']], expected: 'en' }, { args: [['de-CH']], expected: 'de-DE' }, { args: [['ru']], expected: 'en' }, { args: [['c']], expected: 'en' }, { args: [['e']], expected: 'en' }, { args: [['user-id']], expected: 'en' }, { args: [['en-AU-SA']], expected: 'en' }, { args: [[]], expected: 'en' }, { args: [['zh-Hant-TW']], expected: 'zh-Hant' }, { args: [['zh-Hans-TW']], expected: 'zh-Hans' }, ]; tests.forEach((test) => { it(`correctly get best match for ${JSON.stringify(test.args)} args`, () => { expect(cu.getBestMatchFromCodes.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('getBestMatchFromCodes() does not match a longer language code', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: ['en'], supportedLngs: ['en', 'fil-PH', 'haw-US', 'pt-BR'], }); }); const tests = [ // Finnish is not Filipino, Hausa is not Hawaiian { args: [['fi-FI']], expected: 'en' }, { args: [['ha']], expected: 'en' }, // a region of the same language still matches { args: [['fil']], expected: 'fil-PH' }, { args: [['pt-PT']], expected: 'pt-BR' }, ]; tests.forEach((test) => { it(`correctly get best match for ${JSON.stringify(test.args)} args`, () => { expect(cu.getBestMatchFromCodes.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('getBestMatchFromCodes() with dev', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: ['fr'], supportedLngs: ['dev', 'en', 'fr'], }); }); const tests = [ { args: [['de']], expected: 'fr' }, { args: [['ru', 'en']], expected: 'en' }, { args: [['en-GB']], expected: 'en' }, { args: [['ru', 'en-GB']], expected: 'en' }, { args: [['de-CH']], expected: 'fr' }, { args: [['ru']], expected: 'fr' }, { args: [[]], expected: 'fr' }, ]; tests.forEach((test) => { it(`correctly get best match for ${JSON.stringify(test.args)} args`, () => { expect(cu.getBestMatchFromCodes.apply(cu, test.args)).to.eql(test.expected); }); }); }); describe('getBestMatchFromCodes() with dev and nonExplicitSupportedLngs: true', () => { /** @type {LanguageUtils} */ let cu; beforeAll(() => { cu = new LanguageUtils({ fallbackLng: ['fr'], supportedLngs: ['dev', 'en', 'fr'], nonExplicitSupportedLngs: true, }); }); const tests = [ { args: [['de']], expected: 'fr' }, { args: [['ru', 'en']], expected: 'en' }, { args: [['en-GB']], expected: 'en-GB' }, { args: [['ru', 'en-GB']], expected: 'en-GB' }, { args: [['de-CH']], expected: 'fr' }, { args: [['ru']], expected: 'fr' }, { args: [[]], expected: 'fr' }, ]; tests.forEach((test) => { it(`correctly get best match for ${JSON.stringify(test.args)} args`, () => { expect(cu.getBestMatchFromCodes.apply(cu, test.args)).to.eql(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/locales/000077500000000000000000000000001527173754700210375ustar00rootroot00000000000000i18next-i18next-db698b1/test/runtime/locales/en/000077500000000000000000000000001527173754700214415ustar00rootroot00000000000000i18next-i18next-db698b1/test/runtime/locales/en/nonjson.json000066400000000000000000000000361527173754700240170ustar00rootroot00000000000000
sorry no json file
i18next-i18next-db698b1/test/runtime/locales/en/test.json000066400000000000000000000000271527173754700233120ustar00rootroot00000000000000{ "key": "passing" } i18next-i18next-db698b1/test/runtime/logger.test.js000066400000000000000000000023531527173754700222130ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import logger from '../../src/logger'; const mockLogger = { type: 'logger', log(args) { return this.output('log', args); }, warn(args) { return this.output('warn', args); }, error(args) { return this.output('error', args); }, output(type, args) { return { type, args, }; }, }; describe('logger', () => { beforeAll(() => { logger.init(mockLogger, { debug: true }); }); describe('converting', () => { it('it should log', () => { expect(logger.log('hello').type).to.equal('log'); expect(logger.log('hello').args[0]).to.equal('i18next: hello'); }); it('it should warn', () => { expect(logger.warn('hello').type).to.equal('warn'); expect(logger.warn('hello').args[0]).to.equal('i18next: hello'); }); it('it should error', () => { expect(logger.error('hello').type).to.equal('error'); expect(logger.error('hello').args[0]).to.equal('i18next: hello'); }); it('it should warn deprecation', () => { expect(logger.deprecate('hello').type).to.equal('warn'); expect(logger.deprecate('hello').args[0]).to.equal('WARNING DEPRECATED: i18next: hello'); }); }); }); i18next-i18next-db698b1/test/runtime/pluralResolver.test.js000066400000000000000000000145251527173754700237610ustar00rootroot00000000000000import { describe, it, expect, beforeAll, beforeEach, afterEach, vitest } from 'vitest'; import PluralResolver from '../../src/PluralResolver'; import LanguageUtils from '../../src/LanguageUtils'; describe('PluralResolver', () => { describe('getRule()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, {}); }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns getRule for a supported locale', () => { const expected = { resolvedOptions() {}, select() {}, }; vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return expected; }); const locale = 'en'; expect(pr.getRule(locale)).toEqual(expected); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); it('correctly returns getRule for an unsupported locale', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { throw Error('mock error'); }); const locale = 'en'; expect(pr.getRule(locale)).not.toBeUndefined(); // we return dummy rule expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('needsPlural()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, {}); }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns needsPlural for locale with more than one plural form', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { resolvedOptions: () => ({ pluralCategories: ['one', 'other'] }) }; }); const locale = 'en'; expect(pr.needsPlural(locale)).toBeTruthy(); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); it('correctly returns needsPlural for locale with just one plural form', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { resolvedOptions: () => ({ pluralCategories: ['other'] }) }; }); const locale = 'ja'; expect(pr.needsPlural(locale)).toBeFalsy(); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('getSuffix()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { prepend: '_' }); }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns suffix for a supported locale', () => { const locale = 'en'; const count = 10.5; const expected = 'other'; const selectStub = vitest.fn().mockReturnValue(expected); vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { select: selectStub }; }); expect(pr.getSuffix(locale, count)).to.equal(`_${expected}`); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); expect(selectStub).toHaveBeenCalledOnce(); expect(selectStub).toHaveBeenCalledWith(count); }); it('correctly returns suffix for an unsupported locale', () => { const locale = 'nonexistent'; vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { throw Error('mock error'); }); expect(pr.getSuffix(locale, 10.5)).toEqual('_other'); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('getPluralFormsOfKey()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { prepend: '_' }); }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns plural forms for a given key', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { resolvedOptions: () => ({ pluralCategories: ['one', 'other'] }) }; }); const locale = 'en'; expect(pr.getPluralFormsOfKey(locale, 'key')).toStrictEqual(['key_one', 'key_other']); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); describe('getSuffixes()', () => { /** @type {PluralResolver} */ let pr; beforeAll(() => { const lu = new LanguageUtils({ fallbackLng: 'en' }); pr = new PluralResolver(lu, { prepend: '_' }); }); beforeEach(() => { pr.clearCache(); }); afterEach(() => { vitest.restoreAllMocks(); }); it('correctly returns plural suffixes for a given key', () => { vitest.spyOn(Intl, 'PluralRules').mockImplementation(function () { return { resolvedOptions: () => ({ pluralCategories: ['zero', 'one', 'two', 'few', 'many', 'other'], }), }; }); const locale = 'en'; expect(pr.getSuffixes(locale)).toStrictEqual([ '_zero', '_one', '_two', '_few', '_many', '_other', ]); expect(Intl.PluralRules).toHaveBeenCalledOnce(); expect(Intl.PluralRules).toHaveBeenCalledWith( locale, expect.objectContaining({ type: expect.any(String) }), ); }); }); }); i18next-i18next-db698b1/test/runtime/postProcessor.test.js000066400000000000000000000012161527173754700236160ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import postProcessor from '../../src/postProcessor'; describe('postProcessor', () => { describe('add and handle()', () => { beforeAll(() => { postProcessor.addPostProcessor({ name: 'dummy', process: (value) => value.toUpperCase(), }); }); const tests = [{ args: [['dummy'], 'test', 'key', {}, () => {}], expected: 'TEST' }]; tests.forEach((test) => { it(`correctly process for ${JSON.stringify(test.args)} args`, () => { expect(postProcessor.handle.apply(postProcessor, test.args)).to.eql(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/resourceStore.fallback.test.js000066400000000000000000000065671527173754700253510ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import ResourceStore from '../../src/ResourceStore.js'; describe('ResourceStore', () => { describe('nestedFlatFallback', () => { it.each([false, 0, ''])('prefers a nested %s value over a flat key', (value) => { const rs = new ResourceStore({ en: { translation: { a: { b: value }, 'a.b': 'flat' } } }); expect(rs.getResource('en', 'translation', 'a.b')).toBe(value); expect(rs.getResource('en.translation.a.b')).toBe(value); }); it('falls back to a flat key when the nested value is null', () => { const rs = new ResourceStore({ en: { translation: { a: { b: null }, 'a.b': 'flat' } } }); expect(rs.getResource('en', 'translation', 'a.b')).toBe('flat'); expect(rs.getResource('en.translation.a.b')).toBe('flat'); }); it('returns a nested null value when there is no flat key', () => { const rs = new ResourceStore({ en: { translation: { a: { b: null } } } }); expect(rs.getResource('en', 'translation', 'a.b')).toBe(null); }); it('it should find the resource in various flat/nested combinations', () => { const data = { en: { translation: { a: { nested: 'a nested value', 'more.of': { nested: { here: { wow: 'cool', }, 'and.even.more': { gaga: 'strange', }, }, }, }, 'a.flat': 'a flat value', 'b.flat': { nested: 'mix value', more: { nesting: 'deep', 'flat.again': 'deep flat', }, more2: { 'flat.again': 'deep flat', deeper: { key: 'very deep', }, }, }, str: 'whatever', 'x.y': 'please no', }, }, }; const rs = new ResourceStore(data); expect(rs.toJSON()).to.equal(data); let ret = rs.getResource('en', 'translation', 'a.nested'); expect(ret).to.equal('a nested value'); ret = rs.getResource('en', 'translation', 'a.flat'); expect(ret).to.equal('a flat value'); ret = rs.getResource('en', 'translation', 'b.flat.nested'); expect(ret).to.equal('mix value'); ret = rs.getResource('en', 'translation', 'b.flat.more.nesting'); expect(ret).to.equal('deep'); ret = rs.getResource('en', 'translation', 'b.flat.more.flat.again'); expect(ret).to.equal('deep flat'); ret = rs.getResource('en', 'translation', 'b.flat.more2.flat.again'); expect(ret).to.equal('deep flat'); ret = rs.getResource('en', 'translation', 'b.flat.more2.deeper.key'); expect(ret).to.equal('very deep'); ret = rs.getResource('en', 'translation', 'a.more.of.nested.here.wow'); expect(ret).to.equal('cool'); ret = rs.getResource('en', 'translation', 'a.more.of.nested.and.even.more.gaga'); expect(ret).to.equal('strange'); ret = rs.getResource('en', 'translation', 'a.wrong'); expect(ret).to.equal(undefined); ret = rs.getResource('en', 'translation', 'str.wrong'); expect(ret).to.equal(undefined); ret = rs.getResource('en', 'translation', 'x.y.z'); expect(ret).to.equal(undefined); }); }); }); i18next-i18next-db698b1/test/runtime/resourceStore.test.js000066400000000000000000000207511527173754700236020ustar00rootroot00000000000000import { describe, it, expect, beforeEach, vitest } from 'vitest'; import ResourceStore from '../../src/ResourceStore.js'; describe('ResourceStore', () => { describe('constructor', () => { it('it should set empty data if not passing them in', () => { const rs = new ResourceStore(); expect(rs.toJSON()).to.eql({}); }); it('it should set data if passing them in', () => { const data = { en: { translation: { test: 'test', }, }, }; const rs = new ResourceStore(data); expect(rs.toJSON()).to.equal(data); }); }); describe('resource manipulation', () => { /** @type {ResourceStore} */ let rs; describe('can add resources', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it adds resources by addResource', () => { // basic key rs.addResource('de', 'translation', 'test', 'test'); expect(rs.getResource('de', 'translation', 'test')).to.equal('test'); // dotted key rs.addResource('de', 'translation', 'nest.test', 'test_nest'); expect(rs.getResource('de', 'translation', 'nest.test')).to.equal('test_nest'); // using first param fullDot rs.addResource('de.translation.nest.fullDot', 'test_fullDot'); expect(rs.getResource('de.translation.nest.fullDot')).to.equal('test_fullDot'); // setting object rs.addResource('de.translation.nest.object', { something: 'deeper' }); expect(rs.getResource('de.translation.nest.object.something')).to.equal('deeper'); // getting object expect(rs.getResource('de.translation.nest.object')).to.eql({ something: 'deeper' }); }); it("it should emit 'added' event on addResource call", () => { const spy = vitest.fn(); rs.on('added', spy); rs.addResource('fr', 'translation', 'hi', 'salut'); expect(spy).toHaveBeenCalledWith('fr', 'translation', 'hi', 'salut'); }); it("it should not emit 'added' event on addResource call with silent option", () => { const spy = vitest.fn(); rs.on('added', spy); rs.addResource('fr', 'translation', 'hi', 'salut', { silent: true }); expect(spy).not.toHaveBeenCalled(); }); it("it should emit 'added' event on addResources call", () => { const spy = vitest.fn(); rs.on('added', spy); rs.addResources('fr', 'translation', { hi: 'salut', hello: 'bonjour', }); expect(spy).toHaveBeenCalledOnce(); }); it("it should not emit 'added' event on addResources call with silent option", () => { const spy = vitest.fn(); rs.on('added', spy); rs.addResources( 'fr', 'translation', { hi: 'salut', hello: 'bonjour', }, { silent: true }, ); expect(spy).not.toHaveBeenCalled(); }); it("it should emit 'added' event on addResourceBundle call", () => { const spy = vitest.fn(); rs.on('added', spy); rs.addResourceBundle( 'fr', 'translation', { hi: 'salut', hello: 'bonjour', }, true, true, ); expect(spy).toHaveBeenCalledOnce(); }); it("it should not emit 'added' event on addResourceBundle call with silent option", () => { const spy = vitest.fn(); rs.on('added', spy); rs.addResourceBundle( 'fr', 'translation', { hi: 'salut', hello: 'bonjour', }, true, true, { silent: true }, ); expect(spy).not.toHaveBeenCalled(); }); it('it should also addResources nested in wrong way', () => { rs.addResources('fr', 'translation', { 'a.key': 'first', 'a.key.deep': 'second', 'a.key.deep.deeper': 'third', 'a.key.deeper': 'fourth', 'b.k': 'fifth', }); expect(rs.getResource('fr.translation.a.key')).to.eql('first'); expect(rs.getResource('fr.translation.a.key.deep')).to.eql('second'); expect(rs.getResource('fr.translation.a.key.deep.deeper')).to.eql('third'); expect(rs.getResource('fr.translation.a.key.deeper')).to.eql('fourth'); expect(rs.getResource('fr.translation.b.k')).to.eql('fifth'); }); }); describe('can extend resources bundle', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it adds resources by addResourceBundle', () => { rs.addResourceBundle('en', 'translation', { something: 'deeper' }); expect(rs.getResource('en', 'translation')).to.eql({ something: 'deeper', test: 'test' }); // dotty rs.addResourceBundle('en.translation', { something1: 'deeper1' }); expect(rs.getResource('en.translation')).to.eql({ something: 'deeper', something1: 'deeper1', test: 'test', }); }); it('without polluting the prototype by __proto__', () => { const maliciousPayload = '{"__proto__":{"vulnerable":"Polluted"}}'; rs.addResourceBundle('en', 'translation', JSON.parse(maliciousPayload), true, true); expect({}.vulnerable).to.eql(undefined); }); it('without polluting the prototype by constructor', () => { const maliciousPayload = '{"constructor": {"prototype": {"polluted": "yes"}}}'; rs.addResourceBundle('en', 'translation', JSON.parse(maliciousPayload), true); expect({}.polluted).to.eql(undefined); }); }); describe('can check resources bundle', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it checks resources by hasResourceBundle', () => { expect(rs.hasResourceBundle('en', 'translation')).toBeTruthy(); expect(rs.hasResourceBundle('en', 'notExisting')).toBeFalsy(); }); }); describe('can get resources bundle', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it get resources by getResourceBundle', () => { expect(rs.getResourceBundle('en', 'translation')).to.be.eql({ test: 'test' }); }); }); describe('can remove resources bundle', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it removes resources by removeResourceBundle', () => { rs.removeResourceBundle('en', 'translation'); expect(rs.getResourceBundle('en', 'translation')).toBeFalsy(); }); }); describe('can get data by language', () => { beforeEach(() => { const data = { en: { translation: { test: 'test' } } }; rs = new ResourceStore(data); }); it('it gets data by getDataByLanguage', () => { expect(rs.getDataByLanguage('en')).to.be.eql({ translation: { test: 'test' } }); }); }); describe('can check if a language has some translations', () => { it('it checks by hasLanguageSomeTranslations', () => { rs = new ResourceStore({ en: { empty: {}, translation: { test: 'test' } }, de: { empty: {} }, }); expect(rs.hasLanguageSomeTranslations('en')).toBe(true); expect(rs.hasLanguageSomeTranslations('de')).toBe(false); expect(rs.hasLanguageSomeTranslations('fr')).toBe(false); rs.addResource('de', 'translation', 'key', 'value'); expect(rs.hasLanguageSomeTranslations('de')).toBe(true); rs.removeResourceBundle('en', 'translation'); expect(rs.hasLanguageSomeTranslations('en')).toBe(false); // empty results are not cached: a key added directly to the bundle counts right away const bundle = {}; rs = new ResourceStore({ it: { translation: bundle } }); expect(rs.hasLanguageSomeTranslations('it')).toBe(false); bundle.key = 'value'; expect(rs.hasLanguageSomeTranslations('it')).toBe(true); // the same bundle object is known to be non-empty in a new store, too expect( new ResourceStore({ es: { translation: bundle } }).hasLanguageSomeTranslations('es'), ).toBe(true); }); }); }); }); i18next-i18next-db698b1/test/runtime/security.test.js000066400000000000000000000151701527173754700226040ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import i18next from '../../src/i18next.js'; import Logger from '../../src/logger.js'; // Security tests for fixes shipped in 26.0.6. // See CHANGELOG for the associated GHSA advisory. describe('security: warning for risky nesting-options pattern with escapeValue:false', () => { const makeSink = () => { const calls = []; return { calls, sink: { type: 'logger', log() {}, warn(args) { calls.push(args); }, error() {}, }, }; }; it('emits a warn when interpolated vars land inside a $t() options block with escapeValue:false', async () => { const { calls, sink } = makeSink(); const instance = i18next.createInstance(); instance.use(sink); await instance.init({ lng: 'en', debug: true, interpolation: { escapeValue: false }, resources: { en: { translation: { welcomeTitle: '$t(welcome, { "name": "{{userName}}" })', welcome: 'Hi {{name}}', }, }, }, }); instance.t('welcomeTitle', { userName: 'World' }); const joined = calls .flat() .filter((x) => typeof x === 'string') .join(' '); expect(joined).toMatch(/nesting options string contains interpolated variables/); expect(joined).toMatch(/escapeValue: false/); }); it('does NOT warn with escapeValue:true (default) — the pattern is safe there', async () => { const { calls, sink } = makeSink(); const instance = i18next.createInstance(); instance.use(sink); await instance.init({ lng: 'en', debug: true, resources: { en: { translation: { welcomeTitle: '$t(welcome, { "name": "{{userName}}" })', welcome: 'Hi {{name}}', }, }, }, }); instance.t('welcomeTitle', { userName: 'World' }); const joined = calls .flat() .filter((x) => typeof x === 'string') .join(' '); expect(joined).not.toMatch(/nesting options string contains interpolated variables/); }); }); describe('security: regexEscape on unescapePrefix/unescapeSuffix', () => { it('does not ReDoS when unescapePrefix contains regex metachars', async () => { const instance = i18next.createInstance(); await instance.init({ lng: 'en', interpolation: { escapeValue: false, // Intentionally pathological: a classic catastrophic-backtracking pattern unescapePrefix: '(a+)+', }, resources: { en: { translation: { // A string that would historically trigger backtracking against // the un-escaped regex. Must evaluate in well under a second. safe: 'aaaaaaaaaaaaaaaaaaaaaaaaX', }, }, }, }); const start = Date.now(); const out = instance.t('safe'); const elapsed = Date.now() - start; expect(out).to.equal('aaaaaaaaaaaaaaaaaaaaaaaaX'); expect(elapsed).toBeLessThan(100); }); }); describe('security: log injection control-character stripping', () => { it('strips CR, LF, NUL and other control characters from string log args', () => { const seen = []; const sink = { type: 'logger', log(args) { seen.push(['log', args]); }, warn(args) { seen.push(['warn', args]); }, error(args) { seen.push(['error', args]); }, }; Logger.init(sink, { debug: true }); Logger.warn('missed key', 'en\r\n2026-04-18 admin login successful', 'lng\u0000'); const args = seen[0][1]; // prefix-augmented first arg must be joined, no CR/LF survive anywhere for (const arg of args) { if (typeof arg === 'string') { expect(arg).not.to.match(/[\r\n]/); expect(arg).not.to.include('\u0000'); } } // non-string args pass through (logger is pluggable and structured args are legitimate) }); it('does not mangle normal log content', () => { const seen = []; Logger.init( { type: 'logger', log(args) { seen.push(args); }, warn(args) { seen.push(args); }, error(args) { seen.push(args); }, }, { debug: true }, ); Logger.warn('normal message with {variables} and "quotes"'); expect(seen[0][0]).to.include('normal message with {variables} and "quotes"'); }); }); describe('security: nesting regexp ReDoS on an unclosed $t(', () => { // The old nesting regexp backtracked exponentially here (~2x per char) and hung t(). const cases = [ ['interpolated value', '$t(' + 'a'.repeat(18), {}], ['interpolated value with nest:false', '$t(' + 'a'.repeat(18), { nest: false }], ['quotes inside an unclosed group', '$t((' + 'a""'.repeat(17), {}], ]; cases.forEach(([name, payload, opts]) => { it(`does not hang: ${name}`, async () => { const instance = i18next.createInstance(); await instance.init({ lng: 'en', resources: { en: { translation: { greet: 'Hello {{- name}}, welcome!' } } }, }); const start = Date.now(); const out = instance.t('greet', { name: payload, ...opts }); expect(Date.now() - start).toBeLessThan(100); expect(out).to.equal(`Hello ${payload}, welcome!`); }); }); }); describe('security: nest() does not rescan resolved values', () => { const init = async (interpolation) => { const instance = i18next.createInstance(); await instance.init({ lng: 'en', interpolation, resources: { en: { translation: { outer: 'A $t(inner) B', inner: 'Hi {{name}}', secret: 'S', x: 'X' } }, }, }); return instance; }; it('keeps a $t() forwarded into a nested value literal under skipOnVariables', async () => { const instance = await init(); expect(instance.t('outer', { name: '$t(secret)' })).to.equal('A Hi $t(secret) B'); }); it('still nests it with skipOnVariables: false', async () => { const instance = await init({ skipOnVariables: false }); expect(instance.t('outer', { name: '$t(secret)' })).to.equal('A Hi S B'); }); it('stays linear with many nestings behind an unclosed $t(', async () => { const instance = await init(); // Used to rescan the filler from the unclosed $t( after every match: nestings x filler // (~1.7s locally). Few nestings keep the JS work small, so coverage runs stay fast. const filler = 'a'.repeat(500000); const key = `ns:$t(${filler}${'$t(x)'.repeat(2000)}`; const start = Date.now(); const out = instance.t(key); expect(Date.now() - start).toBeLessThan(500); expect(out).to.equal(`ns:$t(${filler}${'X'.repeat(2000)}`); }); }); i18next-i18next-db698b1/test/runtime/selector.test.js000066400000000000000000000145511527173754700225570ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import keysFromSelector from '../../src/selector.js'; describe('keysFromSelector', () => { describe('example-based test suite', () => { it('handles identity function', () => { const keys = keysFromSelector(($) => $); expect(keys).toEqual(''); }); it('tracks property access with default key separator', () => { const keys = keysFromSelector(($) => $.a.b.c); expect(keys).toEqual('a.b.c'); }); it('works with array indices', () => { const keys = keysFromSelector(($) => $[0][1][2]); expect(keys).toEqual('0.1.2'); }); it('supports custom keySeparator option', () => { const keys = keysFromSelector(($) => $[0][1][2], { keySeparator: '...' }); expect(keys).toEqual('0...1...2'); }); }); describe('namespace resolution', () => { it('prepends nsSeparator for a secondary namespace in a multi-ns array', () => { // ns1 is primary — its keys are on $ directly. // ns2 is secondary — GetSource hangs it under $.ns2, so the path ['ns2','description','part1'] // must be rewritten to 'ns2:description.part1' for extractFromKey to route correctly. const keys = keysFromSelector(($) => $.ns2.description.part1, { ns: ['ns1', 'ns2'], }); expect(keys).toEqual('ns2:description.part1'); }); it('does NOT prepend nsSeparator when ns is a single string — regression for #2405', () => { // When ns is a single string, GetSource returns Resources[ns] directly. // $ IS the namespace resource, so $.common.name means key "common.name" inside // the active namespace — "common" is NOT a namespace prefix here. const keys = keysFromSelector(($) => $.common.name, { ns: 'config', }); expect(keys).toEqual('common.name'); }); it('does NOT prepend nsSeparator when ns is a single-element array', () => { // Same reasoning as single string: $ IS Resources[ns[0]] directly. const keys = keysFromSelector(($) => $.common.name, { ns: ['config'], }); expect(keys).toEqual('common.name'); }); it('does NOT prepend nsSeparator for the primary namespace in a multi-ns array', () => { // ns1 is primary — even though it appears in the ns list, its keys are on $ directly. // A path starting with 'ns1' means a key literally named 'ns1', not a namespace switch. const keys = keysFromSelector(($) => $.ns1.someKey, { ns: ['ns1', 'ns2'], }); expect(keys).toEqual('ns1.someKey'); }); it('does not prepend nsSeparator when first segment is not in the ns list', () => { const keys = keysFromSelector(($) => $.someKey.nested, { ns: ['ns1', 'ns2'], }); expect(keys).toEqual('someKey.nested'); }); it('does not prepend nsSeparator when no ns option is provided', () => { const keys = keysFromSelector(($) => $.ns1.description, {}); expect(keys).toEqual('ns1.description'); }); it('respects a custom nsSeparator for secondary namespaces', () => { const keys = keysFromSelector(($) => $.ns2.a.b, { ns: ['ns1', 'ns2'], nsSeparator: '|', }); expect(keys).toEqual('ns2|a.b'); }); it('respects custom keySeparator together with nsSeparator', () => { const keys = keysFromSelector(($) => $.ns2.a.b, { ns: ['ns1', 'ns2'], nsSeparator: '|', keySeparator: '/', }); expect(keys).toEqual('ns2|a/b'); }); it('does not apply namespace logic when nsSeparator is falsy', () => { // nsSeparator: false disables namespace splitting entirely const keys = keysFromSelector(($) => $.ns2.a.b, { ns: ['ns1', 'ns2'], nsSeparator: false, }); expect(keys).toEqual('ns2.a.b'); }); it('handles a single-segment path that matches a secondary namespace without mangling it', () => { // Only one segment — path.length is not > 1, so leave as-is regardless const keys = keysFromSelector(($) => $.ns2, { ns: ['ns1', 'ns2'], }); expect(keys).toEqual('ns2'); }); }); describe('strict mode (enableSelector: "strict")', () => { // Under strict mode `NsResource` exposes namespaces uniformly (no flattened // primary), so `path[0]` is always a namespace identifier when it matches // the scope's namespace list — including the primary and the single-ns case. it('rewrites a primary-prefixed path in a multi-ns scope', () => { const keys = keysFromSelector(($) => $.ns1.login.welcome, { ns: ['ns1', 'ns2'], enableSelector: 'strict', }); expect(keys).toEqual('ns1:login.welcome'); }); it('rewrites a secondary-prefixed path in a multi-ns scope', () => { const keys = keysFromSelector(($) => $.ns2.email.required, { ns: ['ns1', 'ns2'], enableSelector: 'strict', }); expect(keys).toEqual('ns2:email.required'); }); it('rewrites when ns is a single string', () => { const keys = keysFromSelector(($) => $.only.foo, { ns: 'only', enableSelector: 'strict', }); expect(keys).toEqual('only:foo'); }); it('rewrites when ns is a single-element array', () => { const keys = keysFromSelector(($) => $.only.foo, { ns: ['only'], enableSelector: 'strict', }); expect(keys).toEqual('only:foo'); }); it('leaves the path alone when first segment is not in the ns list', () => { // Strict mode still requires path[0] to match a namespace; an unrelated // leading segment is left flat (caller will get a missing-key for it). const keys = keysFromSelector(($) => $.unknown.foo, { ns: ['ns1', 'ns2'], enableSelector: 'strict', }); expect(keys).toEqual('unknown.foo'); }); it('respects custom keySeparator and nsSeparator', () => { const keys = keysFromSelector(($) => $.ns1.a.b, { ns: ['ns1', 'ns2'], enableSelector: 'strict', keySeparator: '/', nsSeparator: '|', }); expect(keys).toEqual('ns1|a/b'); }); it('does not rewrite when nsSeparator is falsy', () => { // Same fail-safe as the default mode. const keys = keysFromSelector(($) => $.ns1.a, { ns: ['ns1', 'ns2'], enableSelector: 'strict', nsSeparator: false, }); expect(keys).toEqual('ns1.a'); }); }); }); i18next-i18next-db698b1/test/runtime/translator/000077500000000000000000000000001527173754700216065ustar00rootroot00000000000000i18next-i18next-db698b1/test/runtime/translator/translator.cimode.test.js000066400000000000000000000041141527173754700265520ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate() in cimode', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('cimode'); }); const tests = [ { args: [ 'translation:test', { appendNamespaceToCIMode: false, ns: 'translation', nsSeparator: ':' }, ], expected: 'test', }, { args: ['test', { appendNamespaceToCIMode: false, ns: 'translation', nsSeparator: ':' }], expected: 'test', }, { args: [ 'translation:test', { appendNamespaceToCIMode: true, ns: 'translation', nsSeparator: ':' }, ], expected: 'translation:test', }, { args: ['test', { appendNamespaceToCIMode: true, ns: 'translation', nsSeparator: ':' }], expected: 'translation:test', }, ]; tests.forEach((test) => { it(`correctly return key for ${JSON.stringify(test.args)} args in cimode`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.exists.test.js000066400000000000000000000104551527173754700266360ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('exists()', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', deep: { test: 'deep_en', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test'], expected: true }, { args: ['translation:test', { lngs: ['en-US', 'en'] }], expected: true }, { args: ['translation:test', { lngs: ['de'] }], expected: true }, { args: ['translation:test', { lng: 'de' }], expected: true }, { args: ['translation:test', { lng: 'fr' }], expected: true }, { args: ['translation:test', { lng: 'en-US' }], expected: true }, { args: ['translation.test', { lng: 'en-US', nsSeparator: '.' }], expected: true }, { args: ['translation.deep.test', { lng: 'en-US', nsSeparator: '.' }], expected: true }, { args: ['deep.test', { lng: 'en-US', nsSeparator: '.' }], expected: true }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.exists.apply(t, test.args)).toEqual(test.expected); }); }); const nullishArgs = ['', undefined, null]; nullishArgs.forEach((nullishArg) => { it(`should return false if a "${nullishArg}" key is passed as an argument`, () => { expect(t.exists(nullishArg)).toBeFalsy(); }); }); it('it should not crash for undefined or null keys', () => { expect(t.exists(null)).to.equal(false); expect(t.exists(undefined)).to.equal(false); expect(t.exists()).to.equal(false); }); it('should return false for object keys when returnObjects is false, true otherwise', () => { expect(t.exists('deep', { returnObjects: false })).toBe(false); expect(t.exists('deep', { returnObjects: true })).toBe(true); }); it('should return true for string keys regardless of returnObjects option', () => { expect(t.exists('test', { returnObjects: false })).toBe(true); expect(t.exists('test', { returnObjects: true })).toBe(true); }); it('should handle object keys correctly with returnObjects option', () => { expect(t.exists('deep', { returnObjects: false })).toBe(false); expect(t.exists('deep', { returnObjects: true })).toBe(true); }); it('should handle returnObjects option with nested keys', () => { // Test with namespace separator - object key expect(t.exists('translation:deep', { returnObjects: false })).toBe(false); expect(t.exists('translation:deep', { returnObjects: true })).toBe(true); // Test with key separator for nested string expect(t.exists('deep.test', { returnObjects: false })).toBe(true); expect(t.exists('deep.test', { returnObjects: true })).toBe(true); }); it('should demonstrate object detection pattern with returnObjects comparison', () => { // Helper function to detect if key points to object (proposed feature) const isObjectKey = (key, options = {}) => { const withFalse = t.exists(key, { ...options, returnObjects: false }); const withTrue = t.exists(key, { ...options, returnObjects: true }); return withFalse !== withTrue; }; expect(isObjectKey('deep')).toBe(true); // object key }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.fallbackLng.test.js000066400000000000000000000042451527173754700275170ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate() - fallback', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', notInDE: 'test_notInDE_en', roles: { constructor: 'roles_constructor_en' }, }, }, fr: { translation: { test: 'test_fr', notInDE: 'test_notInDE_fr', }, }, de: { translation: { test: 'test_de', roles: { admin: 'roles_admin_de' }, }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('de'); }); const tests = [ { args: ['translation:notInDE', {}], expected: 'test_notInDE_en' }, { args: ['translation:notInDE', { fallbackLng: 'fr' }], expected: 'test_notInDE_fr' }, // keys named like inherited methods are missing in de, not resolved to Object.prototype { args: ['translation:roles.constructor', {}], expected: 'roles_constructor_en' }, { args: ['translation:roles.toString', {}], expected: 'roles.toString' }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate(...test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.getResource.test.js000066400000000000000000000027051527173754700276050ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('getResource()', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'test', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['en', 'translation', 'test'], expected: 'test' }, { args: ['de', 'translation', 'test'], expected: undefined }, ]; tests.forEach((test) => { it(`correctly gets resource for ${JSON.stringify(test.args)} args`, () => { expect(t.getResource.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.naturalLng.test.js000066400000000000000000000051471527173754700274300ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import i18next from '../../../src/i18next.js'; const instance = i18next.createInstance(); describe('Translator', () => { describe('translate() with natural language', () => { beforeAll(async () => { await instance.init({ lng: 'en', fallbackLng: 'en', resources: { en: { translation: { 'test: with a sentence. or more text': 'test_en', errorCodes: { UNAUTHORIZED: 'Unauthorized', 'BAD REQUEST': 'Bad request', }, UNAUTHORIZED: 'Unauthorized 2', 'BAD REQUEST': 'Bad request 2', }, test: { anotherKey: 'from other ns', 'key with space': 'key with space from other ns', }, }, de: { translation: { 'test: with a sentence. or more text': 'test_de', }, }, }, }); }); const tests = [ { args: ['test: with a sentence. or more text'], expected: 'test_en' }, { args: ['test: with a sentence. or more text', { lngs: ['en-US', 'en'] }], expected: 'test_en', }, { args: ['test: with a sentence. or more text', { lngs: ['de'] }], expected: 'test_de' }, { args: ['test: with a sentence. or more text', { lng: 'de' }], expected: 'test_de' }, { args: ['test: with a sentence. or more text', { lng: 'fr' }], expected: 'test_en' }, { args: ['test: with a sentence. or more text', { lng: 'en-US' }], expected: 'test_en' }, { args: ['test:anotherKey', { lng: 'en' }], expected: 'from other ns' }, { args: ['errorCodes.UNAUTHORIZED', { lng: 'en' }], expected: 'Unauthorized' }, { args: ['errorCodes.BAD REQUEST', { lng: 'en' }], expected: 'Bad request' }, { args: ['translation:errorCodes.UNAUTHORIZED', { lng: 'en' }], expected: 'Unauthorized' }, { args: ['translation:errorCodes.BAD REQUEST', { lng: 'en' }], expected: 'Bad request' }, { args: ['translation:UNAUTHORIZED', { lng: 'en' }], expected: 'Unauthorized 2' }, { args: ['translation:BAD REQUEST', { lng: 'en', keySeparator: '.' }], expected: 'Bad request 2', }, { args: ['test:key with space', { lng: 'en', nsSeparator: ':' }], expected: 'key with space from other ns', }, ]; tests.forEach((test) => { it(`correctly formats translations for ${JSON.stringify(test.args)}`, () => { expect(instance.t.apply(instance, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.array.test.js000066400000000000000000000066101527173754700304270ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; import PostProcessor from '../../../src/postProcessor'; describe('Translator', () => { describe('translate() with arrays', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: ['test_en_1', 'test_en_2', '{{myVar}}'], flagList: [ ['basic1', 'Basic1'], ['simple1', 'Simple1'], ], search: { flagList: [ ['basic', 'Basic'], ['simple', 'Simple'], ], }, keyArray_one: ['hello world {{count}}', 'hey {{count}}'], keyArray_other: ['hello world plural {{count}}', 'hey plural {{count}}'], recursiveA: ['a', '$t(recursiveB)'], recursiveB: ['b', '$t(recursiveA)'], }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { returnObjects: true, ns: 'translation', defaultNS: 'translation', keySeparator: '.', postProcessPassResolved: true, interpolation: { // interpolateResult: true, // interpolateDefaultValue: true, // interpolateKey: true }, }, ); PostProcessor.addPostProcessor({ name: 'appendResolvedKey', process: (value, key, options) => `${value} (${options.i18nResolved.usedNS}:${options.i18nResolved.exactUsedKey})`, }); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test.0'], expected: 'test_en_1' }, { args: ['translation:test.2', { myVar: 'test' }], expected: 'test' }, { args: ['translation:test', { myVar: 'test', joinArrays: '+' }], expected: 'test_en_1+test_en_2+test', }, { args: ['translation:test', { myVar: 'test', joinArrays: '' }], expected: 'test_en_1test_en_2test', }, { args: [ 'translation:test', { myVar: 'test', joinArrays: '+', postProcess: 'appendResolvedKey' }, ], expected: 'test_en_1+test_en_2+test (translation:test)', }, { args: ['recursiveA', { joinArrays: ' ' }], expected: 'a b ', }, { args: [['search.flagList', 'flagList'], {}], expected: [ ['basic', 'Basic'], ['simple', 'Simple'], ], }, { args: ['keyArray', { count: 1 }], expected: ['hello world 1', 'hey 1'], }, { args: ['keyArray', { count: 100 }], expected: ['hello world plural 100', 'hey plural 100'], }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.combination.test.js000066400000000000000000000107071527173754700316150ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate() with combined functionality', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { key1: 'hello world', key2: 'It is: $t(key1)', key3: 'It is: {{val}}', // context with pluralization test_one: 'test_en', test_other: 'tests_en', test_male_one: 'test_male_en', test_male_other: 'tests_male_en', nest: { foo: 'bar', nest: '$t(nestedArray)', }, nestedArray: [ { a: 'b', c: 'd' }, { a: 'b', c: 'd' }, ], friends: '$t(friend, {"context": "male", "count": {{maleCount}} }) & $t(friend, {"context": "female", "count": {{femaleCount}} })', friend_male_zero: 'No boyfriend', friend_male_one: 'A boyfriend', friend_male_other: '{{count}} boyfriends', friend_female_zero: 'no girlfriend', friend_female_one: 'a girlfriend', friend_female_other: '{{count}} girlfriends', message: 'Something went wrong: $t(error_code.{{error_type}}, {"defaultValue": "Unknown error"})', error_code: { it_error: 'it went wrong', }, }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { pluralSeparator: '_', contextSeparator: '_', keySeparator: '.', ns: 'translation', defaultNS: 'translation', interpolation: {}, returnObjects: true, }, ); t.changeLanguage('en'); }); const tests = [ // interpolation and nesting in var { args: ['key2'], expected: 'It is: hello world' }, { args: ['key3', { val: '$t(key1)' }], expected: 'It is: hello world' }, // disable nesting while interpolation { args: ['key3', { val: '$t(key1)', nest: false }], expected: 'It is: $t(key1)' }, // context with pluralization { args: ['test', { context: 'unknown', count: 1 }], expected: 'test_en' }, { args: ['test', { context: 'unknown', count: 2 }], expected: 'tests_en' }, { args: ['test', { context: 'male', count: 1 }], expected: 'test_male_en' }, { args: ['test', { context: 'male', count: 2 }], expected: 'tests_male_en' }, { args: ['nest'], expected: { foo: 'bar', nest: [ { a: 'b', c: 'd' }, { a: 'b', c: 'd' }, ], }, }, { args: ['friends', { maleCount: 0, femaleCount: 0 }], expected: 'No boyfriend & no girlfriend', }, { args: ['friends', { maleCount: 0, femaleCount: 5 }], expected: 'No boyfriend & 5 girlfriends', }, { args: ['friends', { maleCount: 5, femaleCount: 0 }], expected: '5 boyfriends & no girlfriend', }, { args: ['friends', { maleCount: 1, femaleCount: 2 }], expected: 'A boyfriend & 2 girlfriends', }, { args: ['friends', { maleCount: 2, femaleCount: 1 }], expected: '2 boyfriends & a girlfriend', }, // interpolation and nesting on defaultValue { args: ['noKeyFoundTestingDefault_1', { defaultValue: '{{val}} bar', val: '$t(foo)' }], expected: 'foo bar', }, { args: ['message', { error_type: 'it_error' }], expected: 'Something went wrong: it went wrong', }, { args: ['message', { error_type: 'other_error' }], expected: 'Something went wrong: Unknown error', }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.context.test.js000066400000000000000000000067231527173754700310020ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate() with context', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', test_male: 'test_male_en', test_female: 'test_female_en', test_1: 'test_one_en', }, }, de: { translation: { test: 'test_de', test_male: 'test_male_de', test_female: 'test_female_de', test_1: 'test_one_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { contextSeparator: '_', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test', { context: 'unknown' }], expected: 'test_en' }, { args: ['translation:test', { context: 'male' }], expected: 'test_male_en' }, { args: ['translation:test', { context: 'female' }], expected: 'test_female_en' }, { args: ['translation:test', { context: 'male', lngs: ['en-US', 'en'] }], expected: 'test_male_en', }, { args: ['translation:test', { context: 'female', lngs: ['en-US', 'en'] }], expected: 'test_female_en', }, { args: ['translation:test', { context: 'male', lngs: ['de'] }], expected: 'test_male_de' }, { args: ['translation:test', { context: 'female', lngs: ['de'] }], expected: 'test_female_de', }, { args: ['translation:test', { context: 'male', lng: 'de' }], expected: 'test_male_de' }, { args: ['translation:test', { context: 'female', lng: 'de' }], expected: 'test_female_de' }, { args: ['translation:test', { context: 'male', lng: 'fr' }], expected: 'test_male_en' }, { args: ['translation:test', { context: 'female', lng: 'fr' }], expected: 'test_female_en' }, { args: ['translation:test', { context: 'male', lng: 'en-US' }], expected: 'test_male_en' }, { args: ['translation:test', { context: 'female', lng: 'en-US' }], expected: 'test_female_en', }, { args: ['translation:test', { context: '1', lng: 'en-US' }], expected: 'test_one_en', }, { args: ['translation:test', { context: '1', lng: 'de' }], expected: 'test_one_de', }, { args: ['translation:test', { context: 1, lng: 'en-US' }], expected: 'test_one_en', }, { args: ['translation:test', { context: 1, lng: 'de' }], expected: 'test_one_de', }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.defaultValue.test.js000066400000000000000000000046771527173754700317450ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate() defaultValue', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: {}, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, pluralSeparator: '_', }, ); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test', { defaultValue: 'test_en' }], expected: 'test_en' }, { args: ['translation:test', { defaultValue: 'test_en', count: 1 }], expected: 'test_en' }, { args: [ 'translation:test', { defaultValue_other: 'test_en_plural', defaultValue_one: 'test_en', count: 10 }, ], expected: 'test_en_plural', }, { args: [ 'translation:testMe', { defaultValue_other: 'test_en_plural', defaultValue_one: 'test_en', defaultValue_zero: 'test_en_zero', count: 0, }, ], expected: 'test_en_zero', }, { args: [ 'translation:testArr', { defaultValue: ['some {{ value }}'], value: 'text', returnObjects: true }, ], expected: ['some text'], }, { args: [ 'translation:testObj', { defaultValue: { o: 'some {{ value }}' }, value: 'text', returnObjects: true }, ], expected: { o: 'some text' }, }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.escape.test.js000066400000000000000000000037221527173754700305520ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate() un/escape', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'text {{var}}', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, escapeValue: true, }, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test', { var: 'a&b' }], expected: 'text a&b' }, { args: ['translation:test', { var: 'a&b', interpolation: { escapeValue: false } }], expected: 'text a&b', }, { args: ['translation:test', { var: ['a', 'b'] }], expected: 'text a,b' }, { args: [ 'translation:test', { var: ['a', 'b'], interpolation: { useRawValueToEscape: true, escape: (value) => value.join('-') }, }, ], expected: 'text a-b', }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.missing.test.js000066400000000000000000000207611527173754700307650ustar00rootroot00000000000000import { describe, it, expect, vitest, beforeEach } from 'vitest'; import Interpolator from '../../../src/Interpolator'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import ResourceStore from '../../../src/ResourceStore.js'; import Translator from '../../../src/Translator'; const NB_PLURALS_ARABIC = 6; const NB_PLURALS_ENGLISH_ORDINAL = 4; describe('Translator', () => { /** @type {Translator} */ let t; /** @type {import('i18next').Services} */ let tServices; /** @type {unknown} */ let missingKeyHandler; beforeEach(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', deep: { test: 'deep_en', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); tServices = { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }; missingKeyHandler = vitest.fn(); }); describe('translate() saveMissing', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); it('correctly sends missing for "translation:test.missing"', () => { expect(t.translate('translation:test.missing')).toEqual('test.missing'); expect(missingKeyHandler).toHaveBeenCalledWith( ['en'], 'translation', 'test.missing', 'test.missing', false, expect.objectContaining({}), ); }); }); describe('translate() with missing key and a custom parseMissingKeyHandler', () => { const calledParseMissingKeyHandler = []; const parseMissingKeyHandler = (key, defaultValue, options) => { calledParseMissingKeyHandler.push({ key, defaultValue, options, }); return defaultValue || key; }; beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, parseMissingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); it('correctly calls parseMissingKeyHandler for "translation:test.missing"', () => { expect(t.translate('translation:test.missing', { someV: 'hi there' })).toEqual( 'test.missing', ); expect(calledParseMissingKeyHandler).to.have.lengthOf(1); expect(calledParseMissingKeyHandler[0]).to.have.property('key', 'test.missing'); expect(calledParseMissingKeyHandler[0]).to.have.property('defaultValue', undefined); expect(calledParseMissingKeyHandler[0]).to.have.property('options'); expect(calledParseMissingKeyHandler[0].options).to.have.property('someV', 'hi there'); }); }); describe('translate() saveMissing with saveMissingPlurals options', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('ar'); }); [ { args: ['translation:test.missing', { count: 10 }], expected: NB_PLURALS_ARABIC }, { args: ['translation:test.missing', { count: 0 }], expected: NB_PLURALS_ARABIC }, ].forEach((test) => { it(`correctly sends missing for ${JSON.stringify(test.args)} args`, () => { t.translate.apply(t, test.args); expect(missingKeyHandler).toHaveBeenCalledTimes(test.expected); expect(missingKeyHandler).toHaveBeenNthCalledWith( 1, ['ar'], 'translation', 'test.missing_zero', 'test.missing', false, expect.objectContaining({}), ); }); }); }); describe('translate() saveMissing with saveMissingPlurals and defaults', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('ar'); const tr = t.translate('translation:test.missing', { count: 0, defaultValue_zero: 'default0', defaultValue_one: 'default1', }); expect(tr).toEqual('default0'); }); it('correctly sends missing resolved value', () => { expect(missingKeyHandler).toHaveBeenCalledTimes(NB_PLURALS_ARABIC); expect(missingKeyHandler).toHaveBeenNthCalledWith( 1, ['ar'], 'translation', 'test.missing_zero', 'default0', false, expect.objectContaining({}), ); expect(missingKeyHandler).toHaveBeenNthCalledWith( 2, ['ar'], 'translation', 'test.missing_one', 'default1', false, expect.objectContaining({}), ); expect(missingKeyHandler).toHaveBeenNthCalledWith( 3, ['ar'], 'translation', 'test.missing_two', 'default0', false, expect.objectContaining({}), ); }); }); describe('translate() saveMissing with saveMissingPlurals options (ordinal)', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); [ { args: ['translation:test.missing', { count: 3, ordinal: true }], expected: NB_PLURALS_ENGLISH_ORDINAL, }, { args: ['translation:test.missing', { count: 0, ordinal: true }], expected: NB_PLURALS_ENGLISH_ORDINAL, }, ].forEach((test) => { it(`correctly sends missing for ${JSON.stringify(test.args)} args`, () => { t.translate.apply(t, test.args); expect(missingKeyHandler).toHaveBeenCalledTimes(test.expected); expect(missingKeyHandler).toHaveBeenNthCalledWith( 1, ['en'], 'translation', 'test.missing_ordinal_one', 'test.missing', false, expect.objectContaining({}), ); }); }); }); describe('translate() saveMissing with saveMissingPlurals and defaults (ordinal)', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); t.translate('translation:test.missing', { count: 0, ordinal: true, defaultValue_ordinal_one: 'default1', defaultValue_ordinal_other: 'defaultOther', }); }); it('correctly sends missing resolved value', () => { expect(missingKeyHandler).toHaveBeenCalledTimes(NB_PLURALS_ENGLISH_ORDINAL); expect(missingKeyHandler).toHaveBeenCalledWith( ['en'], 'translation', 'test.missing_ordinal_other', 'defaultOther', false, expect.objectContaining({}), ); expect(missingKeyHandler).toHaveBeenCalledWith( ['en'], 'translation', 'test.missing_ordinal_one', 'default1', false, expect.objectContaining({}), ); expect(missingKeyHandler).toHaveBeenCalledWith( ['en'], 'translation', 'test.missing_ordinal_two', 'defaultOther', false, expect.objectContaining({}), ); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.noSeparator.test.js000066400000000000000000000044231527173754700316060ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator.js'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils.js'; import PluralResolver from '../../../src/PluralResolver.js'; import Interpolator from '../../../src/Interpolator.js'; describe('Translator', () => { describe('translate() with separators set to false', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore( { en: { translation: { 'test: with a sentence. or more text': 'test_en', }, }, de: { translation: { 'test: with a sentence. or more text': 'test_de', }, }, }, { keySeparator: false }, ); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { ns: ['translation'], defaultNS: 'translation', nsSeparator: false, keySeparator: false, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['test: with a sentence. or more text'], expected: 'test_en' }, { args: ['test: with a sentence. or more text', { lngs: ['en-US', 'en'] }], expected: 'test_en', }, { args: ['test: with a sentence. or more text', { lngs: ['de'] }], expected: 'test_de' }, { args: ['test: with a sentence. or more text', { lng: 'de' }], expected: 'test_de' }, { args: ['test: with a sentence. or more text', { lng: 'fr' }], expected: 'test_en' }, { args: ['test: with a sentence. or more text', { lng: 'en-US' }], expected: 'test_en' }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.plural.test.js000066400000000000000000000164621527173754700306160ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate() with plural', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test_one: 'test_en', test_other: 'tests_en', pos_test_ordinal_one: 'pos_test_en_one', pos_test_ordinal_two: 'pos_test_en_two', pos_test_ordinal_few: 'pos_test_en_few', pos_test_ordinal_other: 'pos_test_en_other', oTest_ordinal_one: 'Every {{count}}st month', oTest_one: 'Every month', oTest_month_ordinal_one: 'Every {{count}}st month (ctx)', oTest_month_one: 'Every month (ctx)', }, translationWithZero: { test_zero: 'test_zero', test_one: 'test_en', test_other: 'tests_en', }, }, de: { translation: { test_one: 'test_de', test_other: 'tests_de', }, }, ja: { translation: { test: 'test_ja', test_other: 'tests_ja', }, }, ar: { translation: { test: 'test_ar', test_few: 'tests_ar_few', test_many: 'tests_ar_many', test_one: 'tests_ar_one', test_two: 'tests_ar_two', test_zero: 'tests_ar_zero', test_other: 'tests_ar_other', }, }, it: { translation: { test: 'test_it', test_other: 'tests_it_other', test_many: 'tests_it_many', // ordinal }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { pluralSeparator: '_', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test', { count: 1 }], expected: 'test_en' }, { args: ['translation:test', { count: 2 }], expected: 'tests_en' }, { args: ['translation:test', { count: 0 }], expected: 'tests_en' }, { args: ['translation:pos_test', { count: 0, ordinal: true }], expected: 'pos_test_en_other', }, { args: ['translation:pos_test', { count: 1, ordinal: true }], expected: 'pos_test_en_one' }, { args: ['translation:pos_test', { count: 2, ordinal: true }], expected: 'pos_test_en_two' }, { args: ['translation:pos_test', { count: 3, ordinal: true }], expected: 'pos_test_en_few' }, { args: ['translation:pos_test', { count: 4, ordinal: true }], expected: 'pos_test_en_other', }, { args: ['translationWithZero:test', { count: 0 }], expected: 'test_zero' }, { args: ['translation:test', { count: 1, lngs: ['en-US', 'en'] }], expected: 'test_en' }, { args: ['translation:test', { count: 2, lngs: ['en-US', 'en'] }], expected: 'tests_en' }, { args: ['translation:test', { count: 1, lngs: ['de'] }], expected: 'test_de' }, { args: ['translation:test', { count: 2, lngs: ['de'] }], expected: 'tests_de' }, { args: ['translation:test', { count: 1, lng: 'de' }], expected: 'test_de' }, { args: ['translation:test', { count: 2, lng: 'de' }], expected: 'tests_de' }, { args: ['translation:test', { count: 1, lng: 'fr' }], expected: 'test_en' }, { args: ['translation:test', { count: 2, lng: 'fr' }], expected: 'tests_en' }, { args: ['translation:test', { count: 1, lng: 'en-US' }], expected: 'test_en' }, { args: ['translation:test', { count: 2, lng: 'en-US' }], expected: 'tests_en' }, { args: ['translation:test', { count: 1, lng: 'ja' }], expected: 'tests_ja' }, { args: ['translation:test', { count: 2, lng: 'ja' }], expected: 'tests_ja' }, { args: ['translation:test', { count: 10, lng: 'ja' }], expected: 'tests_ja' }, { args: ['translation:test', { count: 0, lng: 'ar' }], expected: 'tests_ar_zero' }, { args: ['translation:test', { count: 1, lng: 'ar' }], expected: 'tests_ar_one' }, { args: ['translation:test', { count: 2, lng: 'ar' }], expected: 'tests_ar_two' }, { args: ['translation:test', { count: 3, lng: 'ar' }], expected: 'tests_ar_few' }, { args: ['translation:test', { count: 15, lng: 'ar' }], expected: 'tests_ar_many' }, { args: ['translation:test', { count: 101, lng: 'ar' }], expected: 'tests_ar_other' }, { args: ['translation:test', { count: 0, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 1, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 2, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 3, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 15, lng: 'ar', ordinal: true }], expected: 'tests_ar_other', // fallback }, { args: ['translation:test', { count: 0, lng: 'it' }], expected: 'tests_it_other' }, { args: ['translation:test', { count: 1, lng: 'it' }], expected: 'test_it' }, { args: ['translation:test', { count: 2, lng: 'it' }], expected: 'tests_it_other' }, { args: ['translation:test', { count: 11, lng: 'it' }], expected: 'tests_it_other' }, { args: ['translation:test', { count: 0, lng: 'it', ordinal: true }], expected: 'tests_it_other', // fallback }, { args: ['translation:test', { count: 1, lng: 'it', ordinal: true }], expected: 'tests_it_other', // fallback }, { args: ['translation:test', { count: 2, lng: 'it', ordinal: true }], expected: 'tests_it_other', // fallback }, { args: ['translation:test', { count: 11, lng: 'it', ordinal: true }], expected: 'tests_it_many', // fallback }, { args: ['translation:oTest', { count: 1, lng: 'en', ordinal: true }], expected: 'Every 1st month', }, { args: ['translation:oTest', { count: 1, lng: 'en' }], expected: 'Every month', }, { args: ['translation:oTest', { count: 1, lng: 'en', ordinal: true, context: 'month' }], expected: 'Every 1st month (ctx)', }, { args: ['translation:oTest', { count: 1, lng: 'en', context: 'month' }], expected: 'Every month (ctx)', }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.returnObject.test.js000066400000000000000000000132111527173754700317520ustar00rootroot00000000000000import { describe, it, expect, vitest, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; import logger from '../../../src/logger'; describe('Translator', () => { describe('translate() with returnObjects=true', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { common: { test: ['common_test_en_1', 'common_test_en_2'], something: { range: '[{{min}}..{{max}}]', }, somethingElse: { range: '[{{min}}..{{max}}]', hello: 'hello {{what}}', foo: 'bar', }, requirements: ['lorem ipsum', 'lorem ipsum', 'hello {{what}}'], boolean: { value: true }, number: { value: 42 }, }, special: { test: ['special_test_en_1', 'special_test_en_2'], }, withContext: { string: 'hello world', string_lined: ['hello', 'world'], }, }, de: { common: { test: ['common_test_de_1', 'common_test_de_2'], }, special: { test: ['special_test_de_1', 'special_test_de_2'], }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { keySeparator: '.', contextSeparator: '_', returnObjects: true, ns: ['common', 'special', 'withContext'], defaultNS: 'common', interpolation: {}, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['common:test'], expected: ['common_test_en_1', 'common_test_en_2'] }, { args: ['special:test'], expected: ['special_test_en_1', 'special_test_en_2'] }, { args: ['common:somethingElse', { min: '1', max: '1000', what: 'world' }], expected: { range: '[1..1000]', hello: 'hello world', foo: 'bar' }, }, { args: ['common:requirements', { what: 'world' }], expected: ['lorem ipsum', 'lorem ipsum', 'hello world'], }, // should not overwrite store value { args: ['common:something'], expected: { range: '[..]' } }, { args: ['common:something', { min: '1', max: '1000' }], expected: { range: '[1..1000]' } }, { args: ['common:something.range', { min: '1', max: '1000' }], expected: '[1..1000]' }, { args: ['common:boolean'], expected: { value: true } }, { args: ['common:number'], expected: { value: 42 } }, // with context { args: ['withContext:string'], expected: 'hello world' }, { args: ['withContext:string', { context: 'lined' }], expected: ['hello', 'world'] }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); describe('translate() with returnObjects=false', () => { /** @type {Translator} */ let t; /** @type {import('vitest').MockInstance} */ let loggerStub; /** @type {ResourceStore} */ let rs; /** @type {LanguageUtils} */ let lu; const loggerSpy = vitest.fn(); beforeAll(() => { loggerStub = vitest.spyOn(logger, 'create'); loggerStub.mockReturnValue({ warn: loggerSpy, log: vitest.fn(), once: vitest.fn(), }); rs = new ResourceStore({ en: { common: { array: ['common_array_en_1', 'common_array_en_2'], }, }, }); lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { keySeparator: '.', contextSeparator: '_', returnObjects: false, returnedObjectHandler: (...args) => args, ns: ['common', 'special'], defaultNS: 'common', interpolation: {}, }, ); t.changeLanguage('en'); }); describe('and "returnedObjectHandler" defined', () => { it('should not emit a warning', () => { t.translate.apply(t, ['common:array']); expect(loggerSpy).not.toHaveBeenCalledWith( 'accessing an object - but returnObjects options is not enabled!', ); }); }); describe('and "returnedObjectHandler" is not defined', () => { it('should emit a warning', () => { t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { keySeparator: '.', contextSeparator: '_', returnObjects: false, ns: ['common', 'special'], defaultNS: 'common', interpolation: {}, }, ); t.changeLanguage('en'); t.translate.apply(t, ['common:array']); expect(loggerSpy).toHaveBeenCalledWith( 'accessing an object - but returnObjects options is not enabled!', ); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.separator.test.js000066400000000000000000000047111527173754700313110ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate() separator usage', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore( { en: { translation: { test: 'test_en', deep: { test: 'testDeep_en', }, 'test::single': 'single_en', 'test.single': 'single_en', }, translation2: { test: 'test2_en', }, }, }, { keySeparator: '::', nsSeparator: ':::', }, ); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { keySeparator: '::', nsSeparator: ':::', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['translation:::test'], expected: 'test_en' }, { args: ['translation2:::test'], expected: 'test2_en' }, { args: ['translation:::deep::test'], expected: 'testDeep_en' }, { args: ['translation:test', { nsSeparator: ':', keySeparator: '.' }], expected: 'test_en' }, { args: ['translation2:test', { nsSeparator: ':', keySeparator: '.' }], expected: 'test2_en', }, { args: ['translation:deep.test', { nsSeparator: ':', keySeparator: '.' }], expected: 'testDeep_en', }, { args: ['translation:::test::single', { keySeparator: false }], expected: 'single_en' }, { args: ['translation:::test.single', { keySeparator: false }], expected: 'single_en' }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.skipInterpolation.test.js000066400000000000000000000125131527173754700330260ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; import PostProcessor from '../../../src/postProcessor'; describe('Translator', () => { describe('translate() skip interpolation', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en {{key}}', deep: { arr: ['deep_en arr {{key1}}', 'deep_en arr {{key2}}'], }, }, }, de: { translation: { test: 'test_de {{key}}', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { keySeparator: '.', defaultNS: 'translation', ns: 'translation', interpolation: {}, }, ); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test', { skipInterpolation: true }], expected: 'test_en {{key}}' }, { args: ['translation:test', { skipInterpolation: false, key: 'value' }], expected: 'test_en value', }, { args: ['translation:test', { lng: 'de', skipInterpolation: true }], expected: 'test_de {{key}}', }, { args: ['translation:test', { lng: 'fr', skipInterpolation: true }], expected: 'test_en {{key}}', }, { args: ['translation:deep', { returnObjects: true, skipInterpolation: true }], expected: { arr: ['deep_en arr {{key1}}', 'deep_en arr {{key2}}'] }, }, { args: [ 'translation:deep', { returnObjects: true, skipInterpolation: false, key1: 'value1', key2: 'value2' }, ], expected: { arr: ['deep_en arr value1', 'deep_en arr value2'] }, }, { args: ['translation:deep.arr', { joinArrays: ' + ', skipInterpolation: true }], expected: 'deep_en arr {{key1}} + deep_en arr {{key2}}', }, { args: [ 'translation:deep.arr', { joinArrays: ' + ', skipInterpolation: false, key1: '1', key2: '2' }, ], expected: 'deep_en arr 1 + deep_en arr 2', }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); describe('translate() skip interpolation should allow post process', () => { let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', simpleArr: ['simpleArr_en 1', 'simpleArr_en 2'], }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { keySeparator: '.', defaultNS: 'translation', ns: 'translation', interpolation: {}, }, ); PostProcessor.addPostProcessor({ name: 'postProcessValue', process: (value) => `post processed: ${value}`, }); t.changeLanguage('en'); }); const tests = [ { args: ['translation:test', { skipInterpolation: true, postProcess: 'postProcessValue' }], expected: 'post processed: test_en', }, { args: ['translation:test', { skipInterpolation: false, postProcess: 'postProcessValue' }], expected: 'post processed: test_en', }, { args: [ 'translation:simpleArr', { returnObjects: true, skipInterpolation: true, postProcess: 'postProcessValue' }, ], expected: ['post processed: simpleArr_en 1', 'post processed: simpleArr_en 2'], }, { args: [ 'translation:simpleArr', { returnObjects: true, skipInterpolation: false, postProcess: 'postProcessValue' }, ], expected: ['post processed: simpleArr_en 1', 'post processed: simpleArr_en 2'], }, { args: [ 'translation:simpleArr', { joinArrays: ' + ', skipInterpolation: true, postProcess: 'postProcessValue' }, ], expected: 'post processed: simpleArr_en 1 + simpleArr_en 2', }, { args: [ 'translation:simpleArr', { joinArrays: ' + ', skipInterpolation: false, postProcess: 'postProcessValue' }, ], expected: 'post processed: simpleArr_en 1 + simpleArr_en 2', }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.systemProperties.test.js000066400000000000000000000041751527173754700327160ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; // These tests originated from issues: // // https://github.com/i18next/i18next/issues/906 // https://github.com/i18next/i18next-xhr-backend/issues/258 // // should ignore non-string properties when finding 'deep' translations // (ex: `.length`, `.search`) // when a fallback is needed to find the actual definition of that property describe('Translator', () => { describe('translate()', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: { length: 'test_length', search: 'test_search', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('de'); }); const tests = [ { args: ['test', { lng: 'de', nsSeparator: '.' }], expected: 'test_de' }, { args: ['test.length', { lng: 'de', nsSeparator: '.' }], expected: 'test_length' }, { args: ['test.search', { lng: 'de', nsSeparator: '.' }], expected: 'test_search' }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.test.js000066400000000000000000000174571527173754700273250ustar00rootroot00000000000000import { describe, it, expect, beforeAll } from 'vitest'; import Translator from '../../../src/Translator'; import ResourceStore from '../../../src/ResourceStore.js'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import Interpolator from '../../../src/Interpolator'; describe('Translator', () => { describe('translate()', () => { /** @type {Translator} */ let t; beforeAll(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', deep: { test: 'deep_en', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); t = new Translator( { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }, { defaultNS: 'translation', ns: 'translation', interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }, ); t.changeLanguage('en'); }); describe('basic usage', () => { const tests = [ { args: ['translation:test'], expected: 'test_en' }, { args: ['translation:test', { lngs: ['en-US', 'en'] }], expected: 'test_en' }, { args: ['translation:test', { lngs: ['de'] }], expected: 'test_de' }, { args: ['translation:test', { lng: 'de' }], expected: 'test_de' }, { args: ['translation:test', { lng: 'fr' }], expected: 'test_en' }, { args: ['translation:test', { lng: 'en-US' }], expected: 'test_en' }, { args: ['translation.test', { lng: 'en-US', nsSeparator: '.' }], expected: 'test_en' }, { args: ['translation.deep.test', { lng: 'en-US', nsSeparator: '.' }], expected: 'deep_en', }, { args: ['deep.test', { lng: 'en-US', nsSeparator: '.' }], expected: 'deep_en' }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); }); describe('with returnDetails option', () => { const tests = [ { args: ['translation:test', { returnDetails: true }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['test', { returnDetails: true }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lngs: ['en-US', 'en'] }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lngs: ['de'] }], expected: { usedKey: 'test', res: 'test_de', exactUsedKey: 'test', usedLng: 'de', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lng: 'de' }], expected: { usedKey: 'test', res: 'test_de', exactUsedKey: 'test', usedLng: 'de', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lng: 'fr' }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, lng: 'en-US' }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation.test', { returnDetails: true, lng: 'en-US', nsSeparator: '.' }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation.deep.test', { returnDetails: true, lng: 'en-US', nsSeparator: '.' }], expected: { usedKey: 'deep.test', res: 'deep_en', exactUsedKey: 'deep.test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['deep.test', { returnDetails: true, lng: 'en-US', nsSeparator: '.' }], expected: { usedKey: 'deep.test', res: 'deep_en', exactUsedKey: 'deep.test', usedLng: 'en', usedNS: 'translation', usedParams: {}, }, }, { args: ['translation:test', { returnDetails: true, testParam: 'test-param' }], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: { testParam: 'test-param', }, }, }, { args: [ 'translation:test', { returnDetails: true, replace: { testParam: 'test-param' }, }, ], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: { testParam: 'test-param', }, }, }, { args: [ 'translation:test', { defaultValue: 'default', ordinal: true, context: undefined, replace: { testParam: 'test-param' }, lng: 'en', lngs: ['en', 'de'], fallbackLng: 'en', ns: ['translation', 'other'], keySeparator: '.', nsSeparator: ':', returnObjects: false, returnDetails: true, joinArrays: true, postProcess: false, interpolation: { escapeValue: false }, count: 1, }, ], expected: { usedKey: 'test', res: 'test_en', exactUsedKey: 'test', usedLng: 'en', usedNS: 'translation', usedParams: { testParam: 'test-param', count: 1, }, }, }, ]; tests.forEach((test) => { it(`correctly translates for ${JSON.stringify(test.args)} args`, () => { expect(t.translate.apply(t, test.args)).toEqual(test.expected); }); }); it('does not mutate the passed replace object when count is set', () => { const replace = { testParam: 'test-param' }; t.translate('translation:test', { returnDetails: true, replace, count: 1 }); expect(replace).toEqual({ testParam: 'test-param' }); }); }); }); }); i18next-i18next-db698b1/test/runtime/translator/translator.translate.updateMissing.test.js000066400000000000000000000147201527173754700321260ustar00rootroot00000000000000import { describe, it, expect, vitest, beforeEach } from 'vitest'; import Interpolator from '../../../src/Interpolator'; import LanguageUtils from '../../../src/LanguageUtils'; import PluralResolver from '../../../src/PluralResolver'; import ResourceStore from '../../../src/ResourceStore.js'; import Translator from '../../../src/Translator'; describe('Translator', () => { /** @type {Translator} */ let t; /** @type {import('i18next').Services} */ let tServices; /** @type {unknown} */ let missingKeyHandler; beforeEach(() => { const rs = new ResourceStore({ en: { translation: { test: 'test_en', deep: { test: 'deep_en', }, }, }, de: { translation: { test: 'test_de', }, }, }); const lu = new LanguageUtils({ fallbackLng: 'en' }); tServices = { resourceStore: rs, languageUtils: lu, pluralResolver: new PluralResolver(lu, { prepend: '_' }), interpolator: new Interpolator(), }; missingKeyHandler = vitest.fn(); }); describe('translate() using updateMissing', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, updateMissing: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); describe('without default value', () => { it('does not invoke missingKeyHandler', () => { expect(t.translate('translation:test')).toEqual('test_en'); expect(missingKeyHandler).not.toHaveBeenCalled(); }); }); describe('with an unchanged default value', () => { it('does not invoke missingKeyHandler', () => { expect(t.translate('translation:test', { defaultValue: 'test_en' })).toEqual('test_en'); expect(missingKeyHandler).not.toHaveBeenCalled(); }); }); describe('with a new default value', () => { it('correctly sends missing', () => { expect(t.translate('translation:test', { defaultValue: 'new value' })).toEqual('test_en'); expect(missingKeyHandler).toHaveBeenCalledOnce(); expect(missingKeyHandler).toHaveBeenCalledWith( ['en'], 'translation', 'test', 'new value', true, expect.objectContaining({ defaultValue: expect.any(String), lng: expect.any(String), }), ); }); }); }); describe('translate() using updateMissing with saveMissingPlurals', () => { beforeEach(() => { t = new Translator(tServices, { defaultNS: 'translation', ns: 'translation', saveMissing: true, saveMissingPlurals: true, updateMissing: true, missingKeyHandler, interpolation: { interpolateResult: true, interpolateDefaultValue: true, interpolateKey: true, }, }); t.changeLanguage('en'); }); describe('without a count option', () => { it('only sends one missing key', () => { expect( t.translate('translation:test', { defaultValue: 'new value', defaultValue_plural: 'new values', }), ).toEqual('test_en'); expect(missingKeyHandler).toHaveBeenCalledOnce(); expect(missingKeyHandler).toHaveBeenCalledWith( ['en'], 'translation', 'test', 'new value', true, expect.objectContaining({ defaultValue: expect.any(String), lng: expect.any(String), }), ); }); }); describe('with a non-numeric count option', () => { it('only sends one missing key', () => { expect( t.translate('translation:test', { count: 'foo', defaultValue: 'new value', defaultValue_plural: 'new values', }), ).toEqual('test_en'); expect(missingKeyHandler).toHaveBeenCalledOnce(); }); }); describe('without a default plural value', () => { [1, 2].forEach((count) => { it(`count=${count}: sends falls back on singular default value`, () => { expect( t.translate('translation:test', { count, defaultValue: 'new value', }), ).toEqual('test_en'); expect(missingKeyHandler).toHaveBeenCalledTimes(2); expect(missingKeyHandler).toHaveBeenNthCalledWith( 1, ['en'], 'translation', 'test_one', 'new value', true, expect.objectContaining({ defaultValue: expect.any(String), lng: expect.any(String), }), ); expect(missingKeyHandler).toHaveBeenNthCalledWith( 2, ['en'], 'translation', 'test_other', 'new value', true, expect.objectContaining({ defaultValue: expect.any(String), lng: expect.any(String), }), ); }); }); }); describe('with a numeric count option', () => { it('sends correct missing keys per default plural values', () => { expect( t.translate('translation:test', { count: 1, defaultValue_one: 'new value', defaultValue_other: 'new values', }), ).toEqual('test_en'); expect(missingKeyHandler).toHaveBeenCalledTimes(2); expect(missingKeyHandler).toHaveBeenNthCalledWith( 1, ['en'], 'translation', 'test_one', 'new value', true, expect.objectContaining({ count: expect.any(Number), defaultValue_one: expect.any(String), defaultValue_other: expect.any(String), lng: expect.any(String), }), ); expect(missingKeyHandler).toHaveBeenNthCalledWith( 2, ['en'], 'translation', 'test_other', 'new values', true, expect.objectContaining({ count: expect.any(Number), defaultValue_one: expect.any(String), defaultValue_other: expect.any(String), lng: expect.any(String), }), ); }); }); }); }); i18next-i18next-db698b1/test/runtime/utils.test.js000066400000000000000000000106341527173754700220750ustar00rootroot00000000000000import { describe, it, expect } from 'vitest'; import { deepExtend, deepFind, getCleanedCode } from '../../src/utils.js'; describe('utils', () => { describe('#deepExtend', () => { it('it should overwrite if flag set', () => { const res = deepExtend( { some: 'thing', }, { some: 'else', }, true, ); expect(res).toEqual({ some: 'else' }); }); it('it should not overwrite', () => { const res = deepExtend( { some: 'thing', }, { some: 'else', }, false, ); expect(res).toEqual({ some: 'thing' }); }); it('it should not corrupt shared built-ins via inherited keys', () => { const target = {}; const res = deepExtend(target, { hasOwnProperty: { call: 'corrupted' } }, true); // the inherited Object.prototype.hasOwnProperty function must stay intact expect(typeof Object.prototype.hasOwnProperty.call).toBe('function'); expect(() => Object.prototype.hasOwnProperty.call({}, 'x')).not.toThrow(); // the attacker key is copied as a plain own property instead expect(Object.prototype.hasOwnProperty.call(res, 'hasOwnProperty')).toBe(true); expect(res.hasOwnProperty).toEqual({ call: 'corrupted' }); }); it('it should still merge nested own properties', () => { const res = deepExtend({ a: { b: 'old', c: 'keep' } }, { a: { b: 'new', d: 'add' } }, true); expect(res).toEqual({ a: { b: 'new', c: 'keep', d: 'add' } }); }); }); describe('#deepFind', () => { it('finds value for a basic path', () => { const obj = { a: { b: { c: 1 } } }; const value = deepFind(obj, 'a.b.c'); expect(value).toEqual(1); }); it('finds no value for a non-existent path', () => { const obj = { a: { b: { c: 1 } } }; const value = deepFind(obj, 'a.b.d'); expect(value).toEqual(undefined); }); it('finds value for a key that has a dot', () => { const obj = { a: { b: 'zero', 'b.b': { c: 1 } } }; const value = deepFind(obj, 'a.b.b.c'); expect(value).toEqual(1); const value2 = deepFind(obj, 'a.b'); expect(value2).toEqual('zero'); const value3 = deepFind(obj, 'a.b.b'); expect(value3).toEqual({ c: 1 }); }); it('does not resolve inherited methods', () => { const obj = { user: { name: 'Bob' }, items: ['a'] }; expect(deepFind(obj, 'user.constructor')).toEqual(undefined); expect(deepFind(obj, 'user.toString')).toEqual(undefined); expect(deepFind(obj, 'items.map')).toEqual(undefined); }); it('does not walk into the prototype via __proto__', () => { class User { greet() { return 'hi'; } } const obj = { user: new User(), items: ['a'] }; expect(deepFind(obj, 'user.__proto__')).toEqual(undefined); expect(deepFind(obj, 'user.__proto__.constructor')).toEqual(undefined); expect(deepFind(obj, 'user.__proto__.greet')).toEqual(undefined); expect(deepFind(obj, 'items.__proto__.map')).toEqual(undefined); }); it('still resolves getters inherited from a class', () => { class User { constructor(first, last) { this.first = first; this.last = last; } get fullName() { return `${this.first} ${this.last}`; } } expect(deepFind({ user: new User('Ada', 'Lovelace') }, 'user.fullName')).toEqual( 'Ada Lovelace', ); }); it('finds value for an array index', () => { const obj = { a: [{ c: 1 }] }; const value = deepFind(obj, 'a.0.c'); expect(value).toEqual(1); }); }); describe('#getCleanedCode', () => { it('should replace single underscore', () => { expect(getCleanedCode('en_US')).toBe('en-US'); }); it('should replace all underscores in locale codes', () => { expect(getCleanedCode('zh_Hant_TW')).toBe('zh-Hant-TW'); expect(getCleanedCode('en_US_POSIX')).toBe('en-US-POSIX'); expect(getCleanedCode('sr_Latn_RS')).toBe('sr-Latn-RS'); }); it('should return undefined for nullish input', () => { expect(getCleanedCode(undefined)).toBeUndefined(); expect(getCleanedCode(null)).toBeUndefined(); }); it('should return code unchanged if no underscores', () => { expect(getCleanedCode('en-US')).toBe('en-US'); expect(getCleanedCode('ko')).toBe('ko'); }); }); }); i18next-i18next-db698b1/test/typescript-floor/000077500000000000000000000000001527173754700212575ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript-floor/floor.ts000066400000000000000000000015001527173754700227440ustar00rootroot00000000000000import i18next, { type ParseKeysWithoutVariables, type TFunction } from 'i18next'; const t = i18next.t; export const plain: 'Plain' = t('plain'); export const greeting: 'Hello {{name}}' = t('greeting', { name: 'x' }); export const welcome: 'Welcome to {{appName}}' = t('welcome'); export const price: string = t('price', { amount: 3 }); export const item: string = t('item', { count: 2 }); export const deep: 'Deep' = t('nested.deep'); export const other: 'Other' = t('other:key'); export const fixed: string = i18next.getFixedT('en', 'translation', 'nested')('deep'); export const label = (key: ParseKeysWithoutVariables) => t(key); export function withT(tf: TFunction) { return tf('plain'); } // @ts-expect-error greeting needs its variable t('greeting'); i18next.hydrate({ en: { translation: { plain: 'Plain' } } }, 'en'); i18next-i18next-db698b1/test/typescript-floor/i18next.d.ts000066400000000000000000000007721527173754700233570ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { strictInterpolationChecks: true; defaultVariables: { appName: string }; resources: { translation: { plain: 'Plain'; greeting: 'Hello {{name}}'; welcome: 'Welcome to {{appName}}'; price: 'Costs {{amount, currency}}'; item_one: '{{count}} item'; item_other: '{{count}} items'; nested: { deep: 'Deep' }; }; other: { key: 'Other' }; }; } } i18next-i18next-db698b1/test/typescript-floor/selector/000077500000000000000000000000001527173754700230775ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript-floor/selector/floor.ts000066400000000000000000000006631527173754700245750ustar00rootroot00000000000000import i18next, { keyFromSelector } from 'i18next'; const t = i18next.t; export const plain: 'Plain' = t(($) => $.plain); export const greeting: string = t(($) => $.greeting, { name: 'x' }); export const item: string = t(($) => $.item, { count: 2 }); export const deep: 'Deep' = t(($) => $.nested.deep); export const key: string = keyFromSelector(($) => $.nested.deep); // @ts-expect-error a plural key needs count t(($) => $.item); i18next-i18next-db698b1/test/typescript-floor/selector/i18next.d.ts000066400000000000000000000005151527173754700251720ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { enableSelector: true; resources: { translation: { plain: 'Plain'; greeting: 'Hello {{name}}'; item_one: '{{count}} item'; item_other: '{{count}} items'; nested: { deep: 'Deep' }; }; }; } } i18next-i18next-db698b1/test/typescript-floor/selector/tsconfig.json000066400000000000000000000002301527173754700256010ustar00rootroot00000000000000{ "extends": "../tsconfig.json", "compilerOptions": { "paths": { "i18next": ["../../../index.d.mts"] } }, "files": ["i18next.d.ts", "floor.ts"] } i18next-i18next-db698b1/test/typescript-floor/tsconfig.json000066400000000000000000000006731527173754700237740ustar00rootroot00000000000000{ // Checked with the lowest TypeScript of the peer range (5.0) in CI: `npx -p typescript@5.0 tsc -p test/typescript-floor` "compilerOptions": { "strict": true, "noEmit": true, "module": "ESNext", "moduleResolution": "Bundler", "target": "ES2020", "lib": ["ES2020", "DOM"], "skipLibCheck": false, "types": [], "paths": { "i18next": ["../../index.d.mts"] } }, "files": ["i18next.d.ts", "floor.ts"] } i18next-i18next-db698b1/test/typescript/000077500000000000000000000000001527173754700201405ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/_stub.js000066400000000000000000000000231527173754700216050ustar00rootroot00000000000000export default {}; i18next-i18next-db698b1/test/typescript/array-access/000077500000000000000000000000001527173754700225155ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/array-access/i18next.d.ts000066400000000000000000000020141527173754700246040ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'prefix'; resources: { main: { arrayOfStrings: ['zero', 'one']; readonlyArrayOfStrings: readonly ['readonly zero', 'readonly one']; arrayOfObjects: [ { foo: 'bar' }, { fizz: 'buzz' }, [{ test: 'success'; sub: { deep: 'still success' } }], ]; }; ctx: { dessert: [ { dessert_cake: 'a nice cake'; dessert_muffin_one: 'a nice muffin'; dessert_muffin_other: '{{count}} nice muffins'; }, ]; }; prefix: { deep: { deeper: { extra_deep: string; }; }; }; ord: { list: [ { place_ordinal_one: '1st place'; place_ordinal_two: '2nd place'; place_ordinal_few: '3rd place'; place_ordinal_other: '{{count}}th place'; }, ]; }; }; } } i18next-i18next-db698b1/test/typescript/array-access/t.test.ts000066400000000000000000000071061527173754700243120ustar00rootroot00000000000000import { describe, it, expectTypeOf, assertType } from 'vitest'; import { KeyPrefix, Namespace, TFunction } from 'i18next'; describe('main', () => { const t = (() => '') as TFunction<['main']>; it('works with simple usage', () => { expectTypeOf(t('arrayOfStrings.0')).toEqualTypeOf<'zero'>(); expectTypeOf(t('arrayOfStrings.1')).toEqualTypeOf<'one'>(); expectTypeOf(t('readonlyArrayOfStrings.0')).toEqualTypeOf<'readonly zero'>(); expectTypeOf(t('readonlyArrayOfStrings.1')).toEqualTypeOf<'readonly one'>(); expectTypeOf(t('arrayOfObjects.0.foo')).toEqualTypeOf<'bar'>(); expectTypeOf(t('arrayOfObjects.1.fizz')).toEqualTypeOf<'buzz'>(); expectTypeOf(t('arrayOfObjects.2.0.test')).toEqualTypeOf<'success'>(); expectTypeOf(t('arrayOfObjects.2.0.sub.deep')).toEqualTypeOf<'still success'>(); }); it('should throw an error when key is not present', () => { // @ts-expect-error assertType(t('arrayOfStrings.2')); // @ts-expect-error assertType(t('arrayOfObjects.0.food')); // @ts-expect-error assertType(t('arrayOfObjects.0.fizz')); // @ts-expect-error assertType(t('arrayOfObjects.2')); // @ts-expect-error assertType(t('arrayOfObjects.2.bar')); // @ts-expect-error assertType(t('arrayOfObjects.2.sub.deep')); // @ts-expect-error assertType(t('arrayOfObjects.2.test')); }); it('should work with `returnObjects`', () => { expectTypeOf(t('arrayOfStrings', { returnObjects: true })).toBeArray(); expectTypeOf(t('arrayOfObjects', { returnObjects: true })).toEqualTypeOf< [{ foo: 'bar' }, { fizz: 'buzz' }, [{ test: 'success'; sub: { deep: 'still success' } }]] >(); expectTypeOf(t('arrayOfObjects.0', { returnObjects: true })).toEqualTypeOf<{ foo: 'bar' }>(); }); it('should work with const keys', () => { const alternateTranslationKeys = ['arrayOfStrings.0', 'arrayOfObjects.0.foo'] as const; const result = alternateTranslationKeys.map((value) => t(value)); assertType(result); }); }); it('should work with context', () => { const t = (() => '') as TFunction<'ctx'>; expectTypeOf(t('dessert.0.dessert', { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t('dessert.0.dessert', { context: 'muffin', count: 3 })).toMatchTypeOf(); }); it('should process ordinal plurals', () => { const t = (() => '') as TFunction<'ord'>; expectTypeOf(t('list.0.place', { ordinal: true, count: 1 })).toBeString(); expectTypeOf(t('list.0.place', { ordinal: true, count: 2 })).toBeString(); expectTypeOf(t('list.0.place', { ordinal: true, count: 3 })).toBeString(); expectTypeOf(t('list.0.place', { ordinal: true, count: 4 })).toBeString(); }); describe("don't break prefixes", () => { const t = (() => '') as TFunction<'prefix', 'deep'>; it('should work with key prefix', () => { expectTypeOf(t('deeper.extra_deep')).toEqualTypeOf(); }); it('does not allow access to key not existing in prefix', () => { // @ts-expect-error assertType(t('morning')); }); it('should work with useTranslation', () => { const useTranslation = = undefined>( _: Ns, __: { keyPrefix?: KPrefix; }, ): { t: TFunction; // @ts-expect-error we only care about typing here, not about actual returns } => undefined; const use = useTranslation('prefix', { keyPrefix: 'deep' }); expectTypeOf(use).toEqualTypeOf<{ t: TFunction<'prefix', 'deep'> }>(); // @ts-expect-error assertType(use.t('morning')); }); }); i18next-i18next-db698b1/test/typescript/array-access/tsconfig.json000066400000000000000000000001241527173754700252210ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/custom-context-separator/000077500000000000000000000000001527173754700251325ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/custom-context-separator/i18next.d.ts000066400000000000000000000006031527173754700272230ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'ctx'; contextSeparator: '|'; resources: { ctx: { beverage: 'beverage'; 'beverage|beer': 'beer'; 'dessert|cake': 'a nice cake'; 'dessert|muffin_one': 'a nice muffin'; 'dessert|muffin_other': '{{count}} nice muffins'; }; }; } } i18next-i18next-db698b1/test/typescript/custom-context-separator/t.test.ts000066400000000000000000000010631527173754700267230ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import { TFunction } from 'i18next'; describe('t', () => { const t = (() => '') as TFunction; it('works with simple usage', () => { expectTypeOf(t('dessert', { context: 'cake' })).toBeString(); }); it('works with context + plural', () => { expectTypeOf(t('dessert', { context: 'muffin', count: 3 })).toBeString(); }); it('works with and without context', () => { expectTypeOf(t('beverage')).toBeString(); expectTypeOf(t('beverage', { context: 'beer' })).toBeString(); }); }); i18next-i18next-db698b1/test/typescript/custom-context-separator/tsconfig.json000066400000000000000000000001241527173754700276360ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/custom-types-default-ns-as-array/000077500000000000000000000000001527173754700263715ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/custom-types-default-ns-as-array/i18next.d.ts000066400000000000000000000013461527173754700304670ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceContext, TestNamespacePlurals, TestNamespaceOrdinal, TestNamespaceCustom, TestNamespaceCustomAlternate, TestNamespaceFallback, TestNamespaceNonPlurals, } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: Readonly<['custom', 'custom_b']>; fallbackNS: 'fallback'; resources: { custom: TestNamespaceCustom; custom_b: { another_entry: 'Argh'; }; alternate: TestNamespaceCustomAlternate; fallback: TestNamespaceFallback; plurals: TestNamespacePlurals; nonPlurals: TestNamespaceNonPlurals; ctx: TestNamespaceContext; ord: TestNamespaceOrdinal; }; } } i18next-i18next-db698b1/test/typescript/custom-types-default-ns-as-array/i18nextT.test.ts000066400000000000000000000067301527173754700313510ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('i18next.t', () => { it('should work with standard keys', () => { expectTypeOf(i18next.t('bar', {})).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('foobar.barfoo', { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); expectTypeOf(i18next.t('alternate:foobar.barfoo')).toEqualTypeOf<'barfoo'>(); expectTypeOf(i18next.t('custom:bar')).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('bar', { ns: 'custom' })).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('baz.bing')).toEqualTypeOf<'boop'>(); expectTypeOf(i18next.t('alternate:foobar.barfoo')).toEqualTypeOf<'barfoo'>(); }); it('should throw error when key is not defined in namespace', () => { // @ts-expect-error assertType(i18next.t('bar', { ns: 'alternate' })); }); it('should work with `returnObjects`', () => { type AlternateFoobarDeepResult = { deeper: { deeeeeper: 'foobar'; }; }; // i18next.t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." expectTypeOf( i18next.t('alternate:foobar.deep', { returnObjects: true }), ).toEqualTypeOf(); expectTypeOf( i18next.t('foobar.deep', { ns: 'alternate', returnObjects: true }), ).toEqualTypeOf(); expectTypeOf( i18next.t('foobar.deep', { ns: 'alternate', returnObjects: true, returnDetails: true }).res, ).toEqualTypeOf(); }); describe('interpolation', () => { it('should work with passing along values', () => { expectTypeOf(i18next.t('custom:inter', { val: 'asdf' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf( i18next.t('inter', { val: 'asdf', ns: 'custom' }), ).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(i18next.t('inter', { val: 'asdf' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(i18next.t('qux', { val: 123 })).toEqualTypeOf<'some {{val, number}}'>(); }); it('should throw an error when value is not present inside key', () => { // @ts-expect-error assertType(i18next.t('custom:inter', { foo: 'asdf' })); }); }); it('should work with default value', () => { expectTypeOf( i18next.t('custom:bar', { defaultValue: 'some default value' }), ).toMatchTypeOf(); expectTypeOf(i18next.t('custom:bar', 'some default value')).toMatchTypeOf(); expectTypeOf( i18next.t('bar', { ns: 'custom', defaultValue: 'some default value' }), ).toMatchTypeOf(); expectTypeOf(i18next.t('bar', { defaultValue: 'some default value' })).toMatchTypeOf(); expectTypeOf(i18next.t('bar', 'some default value')).toMatchTypeOf(); }); it('should accept any key if default value is provided', () => { assertType<'default value'>(i18next.t('unknown-ns:unknown-key', 'default value')); }); it('should work with plurals', () => { expectTypeOf(i18next.t('plurals:foo', { count: 1 })).toBeString(); expectTypeOf(i18next.t('plurals:foo_many', { count: 10 })).toBeString(); }); it('should throw error with invalid key', () => { // @ts-expect-error assertType(i18next.t('custom:test')); }); it('should throw error with invalid namespace', () => { // @ts-expect-error assertType(i18next.t('test:bar')); }); }); i18next-i18next-db698b1/test/typescript/custom-types-default-ns-as-array/t.test.ts000066400000000000000000000150771527173754700301740ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import { TFunction } from 'i18next'; describe('t', () => { describe('default namespace usage', () => { const t = (() => '') as TFunction; it('should work with standard keys', () => { expectTypeOf(t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('foo')).toEqualTypeOf<'foo'>(); expectTypeOf(t('inter', { val: 'xx' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(t('baz.bing')).toEqualTypeOf<'boop'>(); }); it('should work with keys from both default namespaces', () => { expectTypeOf(t('custom:bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('custom_b:another_entry')).toEqualTypeOf<'Argh'>(); expectTypeOf(t('another_entry', { ns: 'custom_b' })).toEqualTypeOf<'Argh'>(); }); it('should work with `returnObjects`', () => { expectTypeOf(t('baz', { returnObjects: true })).toEqualTypeOf<{ bing: 'boop'; }>(); }); it('should trow an error when keys are not defined', () => { // @ts-expect-error assertType(t('inter', { wrongOrNoValPassed: 'xx' })); // @ts-expect-error assertType(t('baz')); // @ts-expect-error assertType(t('custom:foobar')); // @ts-expect-error assertType(t('foobar')); }); it('should work when using `t` inside another `t` function', () => { expectTypeOf(t('foo', { defaultValue: t('bar') })).toEqualTypeOf<'foo'>(); expectTypeOf(t('foo', { something: t('bar') })).toEqualTypeOf<'foo'>(); expectTypeOf( t('foo', { defaultValue: t('bar'), something: t('bar') }), ).toEqualTypeOf<'foo'>(); }); }); describe('named default namespace usage', () => { const t = (() => '') as TFunction<'alternate'>; it('should work with standard key', () => { expectTypeOf(t('baz')).toEqualTypeOf<'baz'>(); expectTypeOf(t('foobar.barfoo')).toEqualTypeOf<'barfoo'>(); expectTypeOf(t('foobar.deep.deeper.deeeeeper')).toEqualTypeOf<'foobar'>(); }); it('should throw an error when key is not present inside namespace', () => { // @ts-expect-error assertType(t('bar')); // @ts-expect-error assertType(t('alternate:foobar.barfoo')); // @ts-expect-error assertType(t('foobar')); // @ts-expect-error assertType(t('new.key')); // @ts-expect-error assertType(t('new.key', { other: 'stuff' })); }); it('should work with `returnObjects`', () => { expectTypeOf(t('foobar', { returnObjects: true })).toBeObject(); expectTypeOf(t('foobar', { returnObjects: true })).toEqualTypeOf<{ barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }>(); }); it('should work with const keys', () => { const alternateTranslationKeys = ['baz', 'foobar.barfoo'] as const; const result = alternateTranslationKeys.map((value) => t(value)); assertType(result); }); it('should not throw an error when `defaultValue` is provided and value should be equal to DefaultValue', () => { expectTypeOf( t('foobar.barfoo', { defaultValue: 'some default value' }), ).toMatchTypeOf(); expectTypeOf(t('new.key', { defaultValue: 'some default value' })).toMatchTypeOf(); expectTypeOf(t('new.key', 'some default value')).toMatchTypeOf(); }); }); describe('array namespace', () => { const t = (() => '') as TFunction<['custom', 'alternate']>; it('should work with standard keys', () => { expectTypeOf(t('baz.bing')).toEqualTypeOf<'boop'>(); expectTypeOf(t('alternate:baz')).toEqualTypeOf<'baz'>(); expectTypeOf(t('baz', { ns: 'alternate' })).toEqualTypeOf<'baz'>(); expectTypeOf(t('custom:bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('bar', { ns: 'custom' })).toEqualTypeOf<'bar'>(); expectTypeOf(t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('baz', { ns: ['alternate', 'custom'] })).toEqualTypeOf<'baz'>(); }); it('should work with `returnObjects`', () => { // t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." expectTypeOf(t('alternate:foobar.deep', { returnObjects: true })).toEqualTypeOf<{ deeper: { deeeeeper: 'foobar'; }; }>(); }); it('should throw an error when key is not present inside namespace', () => { // @ts-expect-error assertType(t('baz')); // @ts-expect-error assertType(t('baz', { ns: 'custom' })); // @ts-expect-error assertType(t('alternate:foobar.deep')); }); }); it('error when namespace does not exist', () => { // @ts-expect-error assertType(TFunction<'foo'>); }); it('should process ordinal plurals', () => { const t = (() => '') as TFunction<'ord'>; expectTypeOf(t('place', { ordinal: true, count: 1 })).toBeString(); expectTypeOf(t('place', { ordinal: true, count: 2 })).toBeString(); expectTypeOf(t('place', { ordinal: true, count: 3 })).toBeString(); expectTypeOf(t('place', { ordinal: true, count: 4 })).toBeString(); }); it('should work with context', () => { const t = (() => '') as TFunction<'ctx'>; expectTypeOf(t('dessert', { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t('dessert', { context: 'muffin', count: 3 })).toMatchTypeOf(); // @ts-expect-error // valid key with invalid context assertType(t('foo', { context: 'cake' })); }); it('should work with false plural usage', () => { const t = (() => '') as TFunction<'nonPlurals'>; // this currently errors, but should not... // expectTypeOf(t('test')).toEqualTypeOf(); expectTypeOf(t('test_2')).toEqualTypeOf<'Test 2'>(); expectTypeOf(t('test_form.title')).toEqualTypeOf<'title'>(); }); it('should return `never` with invalid namespace', () => { // @ts-expect-error const t = (() => '') as TFunction; assertType(t('foo')); }); it('each t function must have a type based on provided namespace', () => { const tOrdinal = (() => '') as TFunction<'ord'>; const tOrdPlurals = (() => '') as TFunction<['ord', 'plurals']>; const tPluralsOrd = (() => '') as TFunction<['plurals', 'ord']>; const tPlurals = (() => '') as TFunction<'plurals'>; expectTypeOf(tOrdinal).not.toMatchTypeOf(tPlurals); expectTypeOf(tOrdPlurals).not.toMatchTypeOf(tPlurals); expectTypeOf(tPluralsOrd).toMatchTypeOf(tPlurals); }); }); i18next-i18next-db698b1/test/typescript/custom-types-default-ns-as-array/tsconfig.json000066400000000000000000000001241527173754700310750ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/custom-types-edited-returns/000077500000000000000000000000001527173754700255505ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/custom-types-edited-returns/i18next.d.ts000066400000000000000000000005711527173754700276450ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; // We're mostly testing for setting returnNull and returnEmptyString to their non-default values returnNull: true; returnEmptyString: false; resources: { custom: { nullKey: null; 'empty string with {{val}}': ''; }; }; } } i18next-i18next-db698b1/test/typescript/custom-types-edited-returns/t.test.ts000066400000000000000000000007421527173754700273440ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('main', () => { it('should accept null translations with returnNull set to true in config', () => { expectTypeOf(i18next.t('nullKey')).toBeNull(); }); it('should fallback for empty string translations with returnEmpty set to false in config', () => { expectTypeOf( i18next.t('empty string with {{val}}'), ).toEqualTypeOf<'empty string with {{val}}'>(); }); }); i18next-i18next-db698b1/test/typescript/custom-types-edited-returns/tsconfig.json000066400000000000000000000001241527173754700302540ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/custom-types/000077500000000000000000000000001527173754700226145ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/custom-types/getFixedT.test.ts000066400000000000000000000046401527173754700260310ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next, { TFunction } from 'i18next'; describe('getFixedT', () => { it('returns a `TFunction`', () => { assertType>(i18next.getFixedT(null, null, 'foo')); }); it('throws an error when providing `keyPrefix` and nothing else', () => { // @ts-expect-error assertType(i18next.getFixedT(null, null, 'xxx')); }); describe('should work with `namespace` and `keyPrefix`', () => { const t = i18next.getFixedT(null, 'alternate', 'foobar.deep'); it('should retrieve deep key', () => { expectTypeOf(t('deeper.deeeeeper')).toEqualTypeOf<'foobar'>(); }); it('should work with `returnObjects`', () => { // t2('deeper').deeeeeper; // i18next would say: "key 'deeper (en)' returned an object instead of string." expectTypeOf(t('deeper', { returnObjects: true })).toEqualTypeOf<{ deeeeeper: 'foobar'; }>(); }); it('should throw an error if key does not exist', () => { // @ts-expect-error assertType(t6('xxx')); }); }); it('should work when providing only language', () => { const t = i18next.getFixedT('en'); expectTypeOf(t('foo')).toEqualTypeOf<'foo'>(); // t3('alternate:foobar.deep.deeper.deeeeeper'); expectTypeOf(t('foobar.deep.deeper.deeeeeper', { ns: 'alternate' })).toEqualTypeOf<'foobar'>(); }); it('should work when providing `language`,`namespace` and `keyPrefix`', () => { const t = i18next.getFixedT('en', 'alternate', 'foobar'); expectTypeOf(t('barfoo')).toEqualTypeOf<'barfoo'>(); }); it('should work when providing just `language`', () => { const t = i18next.getFixedT('en'); expectTypeOf(t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('foobar.barfoo', { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); expectTypeOf(t('fallbackKey')).toBeString(); // @ts-expect-error assertType(t('alternate:foobar.barfoo')); // @ts-expect-error assertType(t('foobar.barfoo')); }); it('should accept a selector function as keyPrefix', () => { // When keyPrefix is a selector function, TKPrefix cannot be inferred at the type level, // so t() falls back to the full namespace type (no key narrowing). // The selector is resolved to a string at runtime by keysFromSelector(). const t = i18next.getFixedT(null, 'alternate', ($: any) => $.foobar); assertType(t('barfoo')); }); }); i18next-i18next-db698b1/test/typescript/custom-types/i18next.d.ts000066400000000000000000000014661527173754700247150ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceContext, TestNamespacePlurals, TestNamespaceOrdinal, TestNamespaceCustom, TestNamespaceCustomAlternate, TestNamespaceFallback, TestNamespaceNonPlurals, TestNamespaceInterpolators, TestNamespaceContextAlternate, } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; fallbackNS: 'fallback'; resources: { custom: TestNamespaceCustom; alternate: TestNamespaceCustomAlternate; fallback: TestNamespaceFallback; ctx: TestNamespaceContext; ctxAlternate: TestNamespaceContextAlternate; plurals: TestNamespacePlurals; nonPlurals: TestNamespaceNonPlurals; ord: TestNamespaceOrdinal; interpolator: TestNamespaceInterpolators; }; } } i18next-i18next-db698b1/test/typescript/custom-types/i18nextT.test.ts000066400000000000000000000110021527173754700255600ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('i18next.t', () => { it('should work with standard keys', () => { expectTypeOf(i18next.t('bar', {})).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('foobar.barfoo', { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); expectTypeOf(i18next.t('alternate:foobar.barfoo')).toEqualTypeOf<'barfoo'>(); expectTypeOf(i18next.t('custom:bar')).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('bar', { ns: 'custom' })).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('baz.bing')).toEqualTypeOf<'boop'>(); expectTypeOf(i18next.t('alternate:foobar.barfoo')).toEqualTypeOf<'barfoo'>(); }); it('should throw error when key is not defined in namespace', () => { // @ts-expect-error assertType(i18next.t('bar', { ns: 'alternate' })); }); it('should work with `returnObjects`', () => { type AlternateFoobarDeepResult = { deeper: { deeeeeper: 'foobar'; }; }; // i18next.t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." expectTypeOf( i18next.t('alternate:foobar.deep', { returnObjects: true }), ).toEqualTypeOf(); expectTypeOf( i18next.t('foobar.deep', { ns: 'alternate', returnObjects: true }), ).toEqualTypeOf(); expectTypeOf( i18next.t('foobar.deep', { ns: 'alternate', returnObjects: true, returnDetails: true }).res, ).toEqualTypeOf(); }); describe('interpolation', () => { it('should work with passing along values', () => { expectTypeOf(i18next.t('custom:inter', { val: 'asdf' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf( i18next.t('inter', { val: 'asdf', ns: 'custom' }), ).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(i18next.t('inter', { val: 'asdf' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(i18next.t('qux', { val: 123 })).toEqualTypeOf<'some {{val, number}}'>(); }); it('should work when using unescaped values', () => { expectTypeOf( i18next.t('interUnescaped', { val: 'asdf' }), ).toEqualTypeOf<'some unescaped {{- val}}'>(); expectTypeOf( i18next.t('interUnescapedNoSpace', { val: 'asdf' }), ).toEqualTypeOf<'some unescaped {{-val}}'>(); expectTypeOf( i18next.t('interUnescapedFormatted', { val: 'asdf' }), ).toEqualTypeOf<'some unescaped {- val, number}}'>(); }); it('should throw an error when value is not present inside key', () => { // @ts-expect-error assertType(i18next.t('custom:inter', { foo: 'asdf' })); }); }); describe('defaultValue', () => { it('should work with default value for existing keys', () => { expectTypeOf( i18next.t('custom:bar', { defaultValue: 'some default value' }), ).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('custom:bar', 'some default value')).toEqualTypeOf<'bar'>(); expectTypeOf( i18next.t('bar', { ns: 'custom', defaultValue: 'some default value' }), ).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('bar', { defaultValue: 'some default value' })).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t('bar', 'some default value')).toEqualTypeOf<'bar'>(); }); it('should accept any key if default value is provided, return type must the type of defaultValue', () => { assertType<'default value'>(i18next.t('unknown-ns:unknown-key', 'default value')); assertType<'default value'>( i18next.t('unknown-ns:unknown-key', { defaultValue: 'default value' }), ); }); }); it('should fallback for null translations with unset returnNull in config', () => { expectTypeOf(i18next.t('nullKey')).toEqualTypeOf<'nullKey'>(); }); it('should accept empty string translations with returnEmpty with unset returnEmpty in config', () => { expectTypeOf(i18next.t('empty string with {{val}}')).toEqualTypeOf<''>(); }); it('should work with plurals', () => { expectTypeOf(i18next.t('plurals:foo', { count: 1 })).toBeString(); expectTypeOf(i18next.t('plurals:foo_many', { count: 10 })).toBeString(); }); it('should throw error with invalid key', () => { // @ts-expect-error assertType(i18next.t('custom:test')); }); it('should throw error with invalid namespace', () => { // @ts-expect-error assertType(i18next.t('test:bar')); }); }); i18next-i18next-db698b1/test/typescript/custom-types/mock.test.ts000066400000000000000000000005521527173754700250750ustar00rootroot00000000000000import { assertType, describe } from 'vitest'; import { TFunction, WithT, CustomTypeOptions } from 'i18next'; describe('WithT', () => { const resources = {} as CustomTypeOptions['resources']; assertType>({ t: ((key) => { const keyValue = resources.custom.bar; return keyValue + key; }) as TFunction<'custom'>, }); }); i18next-i18next-db698b1/test/typescript/custom-types/t.test.ts000066400000000000000000000266121527173754700244140ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import { TFunction, TOptions } from 'i18next'; describe('t', () => { describe('default namespace usage', () => { const t = (() => '') as TFunction; it('should work with standard keys', () => { expectTypeOf(t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('foo')).toEqualTypeOf<'foo'>(); expectTypeOf(t('inter', { val: 'xx' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(t('baz.bing')).toEqualTypeOf<'boop'>(); }); it('should work with `returnObjects`', () => { expectTypeOf(t('baz', { returnObjects: true })).toEqualTypeOf<{ bing: 'boop'; }>(); }); it('should throw an error when keys are not defined', () => { // @ts-expect-error assertType(t('do_not_exists', { wrongOrNoValPassed: 'xx' })); // @ts-expect-error assertType(t('baz')); // @ts-expect-error assertType(t('foobar')); }); it('should work when using `t` inside another `t` function', () => { expectTypeOf(t('foo', { defaultValue: t('bar') })).toEqualTypeOf<'foo'>(); expectTypeOf(t('foo', { something: t('bar') })).toEqualTypeOf<'foo'>(); expectTypeOf( t('foo', { defaultValue: t('bar'), something: t('bar') }), ).toEqualTypeOf<'foo'>(); }); }); describe('named default namespace usage', () => { const t = (() => '') as TFunction<'alternate'>; it('should work with standard key', () => { expectTypeOf(t('baz')).toEqualTypeOf<'baz'>(); expectTypeOf(t('foobar.barfoo')).toEqualTypeOf<'barfoo'>(); expectTypeOf(t('foobar.deep.deeper.deeeeeper')).toEqualTypeOf<'foobar'>(); }); it('should throw an error when key is not present inside namespace', () => { // @ts-expect-error assertType(t('bar')); // @ts-expect-error assertType(t('alternate:foobar.barfoo')); // @ts-expect-error assertType(t('foobar')); // @ts-expect-error assertType(t('new.key')); // @ts-expect-error assertType(t('new.key', { other: 'stuff' })); }); it('should work with `returnObjects`', () => { expectTypeOf(t('foobar', { returnObjects: true })).toBeObject(); expectTypeOf(t('foobar', { returnObjects: true })).toEqualTypeOf<{ barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }>(); }); it('should work with const keys', () => { const alternateTranslationKeys = ['baz', 'foobar.barfoo'] as const; const result = alternateTranslationKeys.map((value) => t(value)); assertType(result); }); it('should not throw an error when `defaultValue` is provided and value should be equal to DefaultValue', () => { expectTypeOf( t('foobar.barfoo', { defaultValue: 'some default value' }), ).toMatchTypeOf(); expectTypeOf(t('new.key', { defaultValue: 'some default value' })).toMatchTypeOf(); expectTypeOf(t('new.key', 'some default value')).toMatchTypeOf(); }); }); describe('array namespace', () => { const t = (() => '') as TFunction<['custom', 'alternate']>; it('should work with standard keys', () => { expectTypeOf(t('baz.bing')).toEqualTypeOf<'boop'>(); expectTypeOf(t('alternate:baz')).toEqualTypeOf<'baz'>(); expectTypeOf(t('baz', { ns: 'alternate' })).toEqualTypeOf<'baz'>(); expectTypeOf(t('custom:bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('bar', { ns: 'custom' })).toEqualTypeOf<'bar'>(); expectTypeOf(t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('baz', { ns: ['alternate', 'custom'] })).toEqualTypeOf<'baz'>(); }); it('should work with `returnObjects`', () => { // t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." expectTypeOf(t('alternate:foobar.deep', { returnObjects: true })).toEqualTypeOf<{ deeper: { deeeeeper: 'foobar'; }; }>(); }); it('should throw an error when key is not present inside namespace', () => { // @ts-expect-error assertType(t('baz')); // @ts-expect-error assertType(t('baz', { ns: 'custom' })); // @ts-expect-error assertType(t('alternate:foobar.deep')); }); }); it('error when namespace does not exist', () => { // @ts-expect-error assertType(TFunction<'foo'>); }); it('should process ordinal plurals', () => { const t = (() => '') as TFunction<'ord'>; expectTypeOf(t('place', { ordinal: true, count: 1 })).toBeString(); expectTypeOf(t('place', { ordinal: true, count: 2 })).toBeString(); expectTypeOf(t('place', { ordinal: true, count: 3 })).toBeString(); expectTypeOf(t('place', { ordinal: true, count: 4 })).toBeString(); }); describe('context', () => { const t = (() => '') as TFunction<'ctx'>; it('should work with basic usage', () => { expectTypeOf(t('dessert', { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t('dessert', { context: 'muffin', count: 3 })).toMatchTypeOf(); // @ts-expect-error // valid key with invalid context assertType(t('foo', { context: 'cake' })); }); it('should accept not mapped context if a fallback key is present', () => { // wine is not mapped const currentTheme = 'wine' as 'wine' | 'beer' | 'water'; expectTypeOf(t('beverage', { context: currentTheme })).toMatchTypeOf(); }); it('should accept a default context key as a valid `t` function key', () => { expectTypeOf(t('beverage')).toMatchTypeOf('cold water'); }); it('should throw error when no `context` is provided using and the context key has no default value ', () => { // @ts-expect-error dessert has no default value, it needs a context expectTypeOf(t('dessert')).toMatchTypeOf('error'); }); it('should work with enum as a context value', () => { enum Dessert { CAKE = 'cake', MUFFIN = 'muffin', } expectTypeOf(t('dessert', { context: Dessert.CAKE })).toMatchTypeOf(); const ctx: Dessert = Dessert.CAKE; expectTypeOf(t('dessert', { context: ctx })).toMatchTypeOf(); }); it('should not provide partial match as option when keys include context separator', () => { // https://github.com/i18next/i18next/issues/2242 // @ts-expect-error t('beverageater'); }); it('should trow error with string union with missing context value', () => { enum DessertMissingValue { COOKIE = 'cookie', CAKE = 'cake', MUFFIN = 'muffin', ANOTHER = 'another', } const ctxMissingValue = DessertMissingValue.ANOTHER; // @ts-expect-error Dessert.ANOTHER is not mapped so it must give a type error expectTypeOf(t('dessert', { context: ctxMissingValue })).toMatchTypeOf(); }); it('should work with string union as a context value', () => { expectTypeOf( t('dessert', { context: 'muffin' as 'muffin' | 'cake' }), ).toMatchTypeOf(); }); // @see https://github.com/i18next/i18next/issues/2172 it('should throw error with string union with missing context value', () => { expectTypeOf( // @ts-expect-error t('dessert', { context: 'muffin' as 'muffin' | 'cake' | 'pippo' }), ).toMatchTypeOf(); }); // @see https://github.com/i18next/i18next/issues/2418 it('should accept TOptions as options parameter', () => { const opts = {} as TOptions; expectTypeOf(t('beverage', opts)).toBeString(); }); }); describe('context + explicit namespace', () => { const t = (() => '') as TFunction<['ctx']>; it('should work with basic usage', () => { expectTypeOf(t('ctx:dessert', { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t('ctx:dessert', { context: 'muffin', count: 3 })).toMatchTypeOf(); // @ts-expect-error // valid key with invalid context assertType(t('ctx:foo', { context: 'cake' })); }); }); describe('context with `t` function with multiple namespaces', () => { const t = (() => '') as TFunction<['ctx', 'ctxAlternate']>; it('should work with basic usage', () => { expectTypeOf(t('ctx:dessert', { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t('ctx:dessert', { context: 'muffin', count: 3 })).toMatchTypeOf(); // @ts-expect-error // valid key with invalid context assertType(t('ctx:foo', { context: 'cake' })); }); it('should work with text value from another namespace', () => { expectTypeOf(t('ctxAlternate:game')).toMatchTypeOf(); expectTypeOf(t('ctxAlternate:game', { context: 'monopoly' })).toMatchTypeOf(); }); }); it('should work with false plural usage', () => { const t = (() => '') as TFunction<'nonPlurals'>; // this currently errors, but should not... // expectTypeOf(t('test')).toEqualTypeOf(); expectTypeOf(t('test_2')).toEqualTypeOf<'Test 2'>(); expectTypeOf(t('test_form.title')).toEqualTypeOf<'title'>(); }); it('should return `never` with invalid namespace', () => { // @ts-expect-error const t = (() => '') as TFunction; assertType(t('foo')); }); it('each t function must have a type based on provided namespace', () => { const tOrdinal = (() => '') as TFunction<'ord'>; const tOrdPlurals = (() => '') as TFunction<['ord', 'plurals']>; const tPluralsOrd = (() => '') as TFunction<['plurals', 'ord']>; const tPlurals = (() => '') as TFunction<'plurals'>; expectTypeOf(tOrdinal).not.toMatchTypeOf(tPlurals); expectTypeOf(tOrdPlurals).not.toMatchTypeOf(tPlurals); expectTypeOf(tPluralsOrd).toMatchTypeOf(tPlurals); }); describe('should work with `InterpolatorMap`', () => { const t = (() => '') as TFunction<['interpolator']>; it('should allow anything when key is a string', () => { expectTypeOf(t('just_a_string', { asd: '', beep: 'boop' })); }); it('simple key', () => { expectTypeOf(t('simple', { olim: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); // @ts-expect-error because nope isn't a valid key expectTypeOf(t('simple', { nope: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); }); it('simple key (multiple)', () => { type Expected = 'This has {{more}} than {{one}}'; expectTypeOf(t('simple_multiple_keys', { more: '', one: '' })).toEqualTypeOf(); // @ts-expect-error one of the required keys is missing expectTypeOf(t('simple_multiple_keys', { less: '', one: '' })).toEqualTypeOf(); }); it('keypath', () => { expectTypeOf( t('keypath', { out: { there: 'yes' } }), ).toEqualTypeOf<'Give me one day {{out.there}}'>(); expectTypeOf( t('keypath_with_format', { out: { there: 'yes' } }), ).toEqualTypeOf<'Give me one day {{out.there, format}}'>(); }); it('keypath deep', () => { type Expected = '{{living.in.the}} in the sun'; expectTypeOf(t('keypath_deep', { living: { in: { the: 'yes' } } })).toEqualTypeOf(); expectTypeOf( // @ts-expect-error one of the required keys is missing t('keypath_deep', { suffering: { in: { the: 'yes' } } }), ).toEqualTypeOf(); }); }); }); i18next-i18next-db698b1/test/typescript/custom-types/tsconfig.json000066400000000000000000000001241527173754700253200ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/default-types/000077500000000000000000000000001527173754700227265ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/default-types/t.test.ts000066400000000000000000000020111527173754700245110ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import { TFunction } from 'i18next'; describe('t', () => { it('should not throw error for different t functions', () => { const tOrd = (() => '') as TFunction<'ord'>; const tOrdPlurals = (() => '') as TFunction<['ord', 'plurals']>; const tPluralsOrd = (() => '') as TFunction<['plurals', 'ord']>; const tString = (() => '') as TFunction<[string, string]>; const tPlurals = (() => '') as TFunction<'plurals'>; const tPlain = (() => '') as TFunction; // no error - not checked when CustomTypeOptions["resources"] is not provided expectTypeOf(tOrd).toEqualTypeOf(tPlurals); expectTypeOf(tOrdPlurals).toEqualTypeOf(tPlurals); expectTypeOf(tPluralsOrd).toEqualTypeOf(tPlurals); expectTypeOf(tString).toEqualTypeOf(tPlurals); expectTypeOf(tOrd).toEqualTypeOf(tPlain); expectTypeOf(tOrdPlurals).toEqualTypeOf(tPlain); expectTypeOf(tPluralsOrd).toEqualTypeOf(tPlain); expectTypeOf(tString).toEqualTypeOf(tPlain); }); }); i18next-i18next-db698b1/test/typescript/default-types/tsconfig.json000066400000000000000000000001241527173754700254320ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/default-variables/000077500000000000000000000000001527173754700235325ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/default-variables/i18next.d.ts000066400000000000000000000012041527173754700256210ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { strictInterpolationChecks: true; defaultVariables: { appName: string; user: { name: string } }; interpolationFormatSeparator: ';'; defaultNS: 'app'; resources: { app: { title: 'Settings'; welcome: 'Welcome to {{appName}}'; greeting: 'Hello {{user.name}} from {{appName}}'; mixed: '{{appName}}: {{count}} new'; price: 'Costs {{amount; currency}}'; item_one: '{{count}} item'; item_other: '{{count}} items'; nested: { label: 'Label'; hint: 'Hi {{who}}' }; }; }; } } i18next-i18next-db698b1/test/typescript/default-variables/t.test.ts000066400000000000000000000036001527173754700253220ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { ParseKeysWithoutVariables, TFunction } from 'i18next'; describe('defaultVariables, interpolationFormatSeparator and ParseKeysWithoutVariables', () => { const t = (() => '') as unknown as TFunction<'app'>; it('makes the declared default variables optional', () => { expectTypeOf(t('welcome')).toEqualTypeOf<'Welcome to {{appName}}'>(); expectTypeOf(t('greeting')).toEqualTypeOf<'Hello {{user.name}} from {{appName}}'>(); expectTypeOf(t('welcome', { appName: 'Other' })).toEqualTypeOf<'Welcome to {{appName}}'>(); // @ts-expect-error a default variable keeps its type when it is passed t('welcome', { appName: new Date() }); }); it('still requires the other variables', () => { expectTypeOf(t('mixed', { count: 2 })).toEqualTypeOf<'{{appName}}: {{count}} new'>(); // @ts-expect-error `count` is not a default variable t('mixed'); }); it('reads the format after the configured separator', () => { expectTypeOf(t('price', { amount: 3 })).toEqualTypeOf<'Costs {{amount; currency}}'>(); // @ts-expect-error `currency` takes a number t('price', { amount: 'three' }); }); it('ParseKeysWithoutVariables keeps the keys t() takes without options', () => { expectTypeOf>().toEqualTypeOf< 'title' | 'welcome' | 'greeting' | 'nested.label' >(); expectTypeOf>().toEqualTypeOf<'label'>(); const label = (key: ParseKeysWithoutVariables<'app'>) => t(key); label('title'); // @ts-expect-error `item` needs `count` label('item'); // @ts-expect-error `nested.hint` needs `who` label('nested.hint'); const tn = (() => '') as unknown as TFunction<'app', 'nested'>; const nestedLabel = (key: ParseKeysWithoutVariables<'app', 'nested'>) => tn(key); nestedLabel('label'); }); }); i18next-i18next-db698b1/test/typescript/default-variables/tsconfig.json000066400000000000000000000002161527173754700262400ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "compilerOptions": { "noErrorTruncation": true }, "exclude": [] } i18next-i18next-db698b1/test/typescript/fallback-types/000077500000000000000000000000001527173754700230415ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/fallback-types/getFixedT.test.ts000066400000000000000000000013071527173754700262530ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('t', () => { const t = i18next.getFixedT('en'); it('should get standard keys', () => { expectTypeOf(t('bar')).toEqualTypeOf<'bar'>(); expectTypeOf(t('foobar.barfoo', { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); }); it('should throw error when key is not defined in `resources`', () => { // @ts-expect-error assertType(t('alternate:foobar.barfoo')); // @ts-expect-error assertType(t('foobar.barfoo')); }); it('should accept fallback keys', () => { expectTypeOf(t('fallbackKey')).toBeString(); expectTypeOf(t('anotherFallbackKey')).toBeString(); }); }); i18next-i18next-db698b1/test/typescript/fallback-types/i18next.d.ts000066400000000000000000000006631527173754700251400ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; fallbackNS: ['fallback', 'fallback2']; resources: { custom: { bar: 'bar'; }; fallback: { fallbackKey: 'fallback'; }; fallback2: { anotherFallbackKey: 'fallback2'; }; alternate: { foobar: { barfoo: 'barfoo'; }; }; }; } } i18next-i18next-db698b1/test/typescript/fallback-types/t-fallbackNS-return-type.test.ts000066400000000000000000000014241527173754700311250ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next from 'i18next'; // This test verifies that t() return type is string (not never) when using a key from fallbackNS describe('t() return type for fallbackNS keys', () => { const t = i18next.getFixedT('en'); it('should return string for fallbackNS key', () => { // fallbackNS: ['fallback', 'fallback2'] expectTypeOf(t('fallbackKey')).toEqualTypeOf<'fallback'>(); expectTypeOf(t('anotherFallbackKey')).toEqualTypeOf<'fallback2'>(); }); it('should return string for defaultNS key', () => { expectTypeOf(t('bar')).toEqualTypeOf<'bar'>(); }); it('should return string for alternate ns key', () => { expectTypeOf(t('foobar.barfoo', { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); }); }); i18next-i18next-db698b1/test/typescript/fallback-types/t.bench.ts000066400000000000000000000007041527173754700247330ustar00rootroot00000000000000import { bench } from '@arktype/attest'; import {} from './i18next'; import type { TFunction } from 'i18next'; declare const t: TFunction; bench('t() return type resolution', () => { t('bar'); }).types([1, 'instantiations']); bench('fallback t() return type resolution', () => { t('fallbackKey'); }).types([1, 'instantiations']); bench('fallback2 t() return type resolution', () => { t('anotherFallbackKey'); }).types([1, 'instantiations']); i18next-i18next-db698b1/test/typescript/fallback-types/tsconfig.json000066400000000000000000000001451527173754700255500ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./**/*.bench.ts"] } i18next-i18next-db698b1/test/typescript/icu-arguments-selector/000077500000000000000000000000001527173754700245415ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/icu-arguments-selector/i18next.d.ts000066400000000000000000000007741527173754700266430ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; parseInterpolation: 'icu'; enableSelector: true; resources: { custom: { greeting: 'Hello {name}!'; rows: '{count, plural, one {# row} other {# rows}}'; gender: '{gender, select, male {He} other {They}} said {quote}'; plain: 'Just a plain string'; deep: { inner: 'Inner {value}' }; }; other: { welcome: 'Welcome {user}' }; }; } } i18next-i18next-db698b1/test/typescript/icu-arguments-selector/t.test.ts000066400000000000000000000040341527173754700263330ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction } from 'i18next'; describe("parseInterpolation: 'icu' with enableSelector", () => { const t: TFunction<'custom'> = (() => '') as never; it('types ICU arguments of selected keys', () => { t(($) => $.greeting, { name: 'Ada' }); t(($) => $.rows, { count: 2 }); t(($) => $.gender, { gender: 'male', quote: 'hi' }); t(($) => $.deep.inner, { value: 1 }); t(($) => $.welcome, { ns: 'other', user: 'Ada' }); expectTypeOf(t(($) => $.plain)).toEqualTypeOf<'Just a plain string'>(); // @ts-expect-error missing options t(($) => $.greeting); // @ts-expect-error misspelled argument t(($) => $.greeting, { nmae: 'Ada' }); // @ts-expect-error count must be a number t(($) => $.rows, { count: 'two' }); // @ts-expect-error missing nested argument t(($) => $.gender, { gender: 'male' }); }); it('works with a selector keyPrefix', () => { const tDeep: TFunction<'custom', 'deep'> = (() => '') as never; tDeep(($) => $.inner, { value: 'x' }); // @ts-expect-error missing argument behind a keyPrefix tDeep(($) => $.inner, {}); }); it('applies to selector arrays, explicit ns and defaultValue', () => { t([($) => $.greeting, ($) => $.plain], { name: 'Ada' }); // @ts-expect-error missing options (selector array) t([($) => $.greeting, ($) => $.plain]); // @ts-expect-error misspelled argument (selector array) t([($) => $.greeting, ($) => $.plain], { nmae: 'Ada' }); // @ts-expect-error missing argument (explicit ns) t(($) => $.welcome, { ns: 'other' }); t(($) => $.greeting, { defaultValue: 'Hi', name: 'Ada' }); // @ts-expect-error missing argument (defaultValue) t(($) => $.greeting, { defaultValue: 'Hi' }); }); it('keeps literal types for a selector array with defaultValue', () => { expectTypeOf( t([($) => $.plain, ($) => $.deep.inner], { defaultValue: 'fallback', value: 1 }), ).toEqualTypeOf<'Just a plain string' | 'Inner {value}' | 'fallback'>(); }); }); i18next-i18next-db698b1/test/typescript/icu-arguments-selector/tsconfig.json000066400000000000000000000001031527173754700272420ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"] } i18next-i18next-db698b1/test/typescript/icu-arguments/000077500000000000000000000000001527173754700227235ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/icu-arguments/default-value.test.ts000066400000000000000000000007621527173754700270140ustar00rootroot00000000000000import { describe, it } from 'vitest'; import type { TFunction } from 'i18next'; // Not part of the strict run: strictKeyChecks rejects unknown keys on purpose. describe("parseInterpolation: 'icu' with a default value", () => { const t: TFunction<'custom'> = (() => '') as never; it('still accepts any string key with a default value', () => { t('not.yet.translated', 'Hello {name}', { name: 'Ada' }); t('not.yet.translated', { defaultValue: 'Hello {name}', name: 'Ada' }); }); }); i18next-i18next-db698b1/test/typescript/icu-arguments/i18next.d.ts000066400000000000000000000021061527173754700250140ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; parseInterpolation: 'icu'; resources: { custom: { greeting: 'Hello {name}!'; spaced: 'Hello { name }!'; rows: '{count, plural, one {{count} row} other {{count} rows}}'; hash: '{count, plural, =0 {no rows} one {# row} other {# rows}}'; ordinal: 'You are {place, selectordinal, one {#st} two {#nd} few {#rd} other {#th}}'; gender: '{gender, select, male {He} female {She} other {They}} liked it'; nested: '{gender, select, male {{name} and his {count, plural, one {# cat} other {# cats}}} other {{name} and their pets}}'; price: 'Price: {amount, number, ::currency/EUR}'; typed: '{n, number} on {d, date, short} at {t, time}'; tags: 'Welcome back, {name}!'; quoted: "It''s '{literal}' for {name}"; plain: 'Just a plain string'; deep: { inner: 'Inner {value}'; }; }; other: { welcome: 'Welcome {user}'; }; }; } } i18next-i18next-db698b1/test/typescript/icu-arguments/strict.d.ts000066400000000000000000000001571527173754700250300ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { strictKeyChecks: true; } } i18next-i18next-db698b1/test/typescript/icu-arguments/t.test.ts000066400000000000000000000105721527173754700245210ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next from 'i18next'; import type { TFunction, InterpolationMap } from 'i18next'; // `parseInterpolation: 'icu'` types `t()` options from ICU MessageFormat // arguments (the messages i18next-icu formats at runtime). describe("parseInterpolation: 'icu'", () => { const t: TFunction<'custom'> = (() => '') as never; it('requires plain arguments', () => { t('greeting', { name: 'Ada' }); t('greeting', { name: 42 }); t('spaced', { name: 'Ada' }); t('tags', { name: 'Ada' }); // @ts-expect-error missing argument t('greeting'); // @ts-expect-error missing argument t('greeting', {}); // @ts-expect-error misspelled argument t('greeting', { nmae: 'Ada' }); // @ts-expect-error wrong type t('greeting', { name: true }); }); it('requires a number for plural and selectordinal, ignores #', () => { t('rows', { count: 1 }); t('hash', { count: 0 }); t('ordinal', { place: 3 }); // @ts-expect-error count must be a number t('rows', { count: '1' }); // @ts-expect-error missing count t('hash'); // @ts-expect-error place must be a number t('ordinal', { place: 'third' }); }); it('types select as its case keys plus string for other', () => { t('gender', { gender: 'male' }); t('gender', { gender: 'female' }); t('gender', { gender: 'diverse' }); t('gender', { gender: String('dynamic') }); expectTypeOf['g']>().toEqualTypeOf< 'a' | 'b' | (string & {}) >(); // @ts-expect-error selector must be a string t('gender', { gender: 1 }); }); it('requires arguments nested in cases', () => { t('nested', { gender: 'male', name: 'Ada', count: 2 }); // @ts-expect-error missing nested count t('nested', { gender: 'male', name: 'Ada' }); // @ts-expect-error missing nested name t('nested', { gender: 'male', count: 2 }); }); it('types number, date and time arguments', () => { t('price', { amount: 9.5 }); t('typed', { n: 1, d: new Date(), t: new Date() }); // @ts-expect-error amount must be a number t('price', { amount: '9.50' }); // @ts-expect-error d must be a Date t('typed', { n: 1, d: '2026-10-17', t: new Date() }); }); it('skips quoted text', () => { t('quoted', { name: 'Ada' }); // @ts-expect-error `'{literal}'` is text, but name is still required t('quoted', { literal: 'x' }); }); it('keeps keys, i18next options and return types working', () => { expectTypeOf(t('plain')).toEqualTypeOf<'Just a plain string'>(); expectTypeOf(t('greeting', { name: 'Ada' })).toEqualTypeOf<'Hello {name}!'>(); t('greeting', { name: 'Ada', lng: 'de' }); t('rows', { count: 2, ns: 'custom' }); t('deep.inner', { value: 1 }); t('welcome', { ns: 'other', user: 'Ada' }); // @ts-expect-error unknown key t('nope'); // @ts-expect-error misspelled argument in another namespace t('welcome', { ns: 'other', usr: 'Ada' }); }); it('works with keyPrefix and namespaces', () => { const tDeep: TFunction<'custom', 'deep'> = (() => '') as never; tDeep('inner', { value: 'x' }); // @ts-expect-error missing argument behind a keyPrefix tDeep('inner', {}); const tOther: TFunction<['other', 'custom']> = (() => '') as never; tOther('welcome', { user: 'Ada' }); tOther('custom:greeting', { name: 'Ada' }); // @ts-expect-error missing argument in the primary namespace tOther('welcome', { name: 'Ada' }); }); it('applies to getFixedT and i18n.t', () => { const fixed = i18next.getFixedT(null, 'custom'); fixed('greeting', { name: 'Ada' }); // @ts-expect-error missing argument (getFixedT) fixed('greeting'); const fixedDeep = i18next.getFixedT(null, 'custom', 'deep'); fixedDeep('inner', { value: 1 }); // @ts-expect-error missing argument (getFixedT with keyPrefix) fixedDeep('inner', {}); i18next.t('greeting', { name: 'Ada' }); // @ts-expect-error misspelled argument (i18n.t) i18next.t('greeting', { nmae: 'Ada' }); }); it('keeps returnObjects and returnDetails working', () => { expectTypeOf(t('deep', { returnObjects: true })).toEqualTypeOf<{ inner: 'Inner {value}' }>(); const details = t('greeting', { name: 'Ada', returnDetails: true }); expectTypeOf(details.usedParams.name).toEqualTypeOf(); }); }); i18next-i18next-db698b1/test/typescript/icu-arguments/tsconfig.json000066400000000000000000000001431527173754700254300ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./strict.d.ts"] } i18next-i18next-db698b1/test/typescript/icu-arguments/tsconfig.strict.json000066400000000000000000000001551527173754700267420ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./default-value.test.ts"] } i18next-i18next-db698b1/test/typescript/interpolation-value-type/000077500000000000000000000000001527173754700251205ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/interpolation-value-type/i18next.d.ts000066400000000000000000000011711527173754700272120ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; resources: { custom: { greeting: 'Hello {{name}}!'; count_message: 'You have {{count, number}} items'; event_date: 'Event on {{date, datetime}}'; price: 'Price: {{amount, currency}}'; nested: 'Value is {{deep.val}}'; no_interpolation: 'Just a plain string'; mixed: '{{label}}: {{amount, number}} on {{when, datetime}}'; price_eur: 'Price: {{price, currency(EUR)}}'; event_relative: 'Happened {{when, relativetime(quarter)}}'; }; }; } } i18next-i18next-db698b1/test/typescript/interpolation-value-type/t.test.ts000066400000000000000000000052251527173754700267150ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction } from 'i18next'; describe('interpolation types (zero-config, derived from format specifiers)', () => { const t: TFunction<'custom'> = (() => '') as never; it('should type unformatted values as string | number', () => { // {{name}} has no format specifier → string | number // (i18next stringifies values at runtime, so numbers are also accepted.) t('greeting', { name: 'World' }); t('greeting', { name: 42 }); // @ts-expect-error boolean should not be assignable to string | number t('greeting', { name: true }); // @ts-expect-error object should not be assignable to string | number t('greeting', { name: { id: 1 } }); }); it('should type "number" format as number', () => { // {{count, number}} → number t('count_message', { count: 42 }); // @ts-expect-error string should not be assignable to number t('count_message', { count: 'five' }); }); it('should type "datetime" format as Date', () => { // {{date, datetime}} → Date t('event_date', { date: new Date() }); // @ts-expect-error string should not be assignable to Date t('event_date', { date: 'yesterday' }); }); it('should type "currency" format as number', () => { // {{amount, currency}} → number t('price', { amount: 9.99 }); // @ts-expect-error string should not be assignable to number t('price', { amount: 'ten' }); }); it('should work with nested key paths', () => { // nested value without format → string t('nested', { deep: { val: 'hello' } }); }); it('should not affect keys without interpolation', () => { expectTypeOf(t('no_interpolation')).toEqualTypeOf<'Just a plain string'>(); }); it('should handle mixed formats in a single translation', () => { // label → string (no format), amount → number, when → Date t('mixed', { label: 'Total', amount: 100, when: new Date() }); // @ts-expect-error amount should be number, not string t('mixed', { label: 'Total', amount: 'hundred', when: new Date() }); }); it('should strip inline formatting options like currency(EUR)', () => { // {{price, currency(EUR)}} → currency → number t('price_eur', { price: 42 }); // @ts-expect-error string should not be assignable to number t('price_eur', { price: 'forty-two' }); }); it('should strip inline formatting options for relativetime', () => { // {{when, relativetime(quarter)}} → relativetime → number t('event_relative', { when: -1 }); // @ts-expect-error string should not be assignable to number t('event_relative', { when: 'last quarter' }); }); }); i18next-i18next-db698b1/test/typescript/interpolation-value-type/tsconfig.json000066400000000000000000000001241527173754700276240ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/keyprefix-return-type/000077500000000000000000000000001527173754700244425ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/keyprefix-return-type/i18next.d.ts000066400000000000000000000011671527173754700265410ustar00rootroot00000000000000import 'i18next'; // #2434 regression scenario: two sibling keys both expose `title` with // different shapes (string vs object). A `t` scoped to one sibling via // `keyPrefix` must resolve `title` to only that sibling's value. declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'app'; resources: { app: { settings: { profile: { title: 'Profile'; description: 'Manage your profile'; }; notifications: { title: { on: 'On'; off: 'Off'; }; }; }; }; }; } } i18next-i18next-db698b1/test/typescript/keyprefix-return-type/t.test.ts000066400000000000000000000024121527173754700262320ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction, KeyPrefix, Namespace } from 'i18next'; describe('keyPrefix return type (#2434 regression)', () => { it('resolves a leaf key to its exact value, not a union with sibling keys', () => { // Mirrors how `react-i18next`'s `useTranslation(ns, { keyPrefix })` composes // i18next's public types: `KPrefix` is constrained to `KeyPrefix` and // inferred from an options-object property. This is the surface that // regressed in 26.3.0 (#2434); `getFixedT` takes `keyPrefix` positionally // and is unaffected, hence the local helper. const useTranslation = = undefined>( _: Ns, __: { keyPrefix?: KPrefix; }, // @ts-expect-error we only care about typing here, not about actual returns ): { t: TFunction } => undefined; const { t } = useTranslation('app', { keyPrefix: 'settings.profile' }); // Before the fix this was inferred as `'Profile' | { on: 'On'; off: 'Off' }`, // unioning the sibling `settings.notifications.title` object. expectTypeOf(t('title')).toEqualTypeOf<'Profile'>(); expectTypeOf(t('description')).toEqualTypeOf<'Manage your profile'>(); }); }); i18next-i18next-db698b1/test/typescript/keyprefix-return-type/tsconfig.json000066400000000000000000000001241527173754700271460ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/many-keys-strict/000077500000000000000000000000001527173754700233635ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/many-keys-strict/i18next.d.ts000066400000000000000000000004761527173754700254640ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceManyKeys } from '../test.namespace.many-keys'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'generic'; returnObjects: false; returnNull: false; strictKeyChecks: true; resources: { generic: TestNamespaceManyKeys; }; } } i18next-i18next-db698b1/test/typescript/many-keys-strict/parseKeys.perf.ts000066400000000000000000000004671527173754700266430ustar00rootroot00000000000000import { t, ParseKeys } from 'i18next'; const getKey: () => ParseKeys<['generic']> = () => 'ahTLUS'; const result = t(getKey()); const result2 = t(getKey(), 'default value'); const result3 = t(getKey(), { defaultValue: 'default value' }); console.info(result); console.info(result2); console.info(result3); i18next-i18next-db698b1/test/typescript/many-keys-strict/parseKeys.test.ts000066400000000000000000000010731527173754700266600ustar00rootroot00000000000000import { describe, it, assertType } from 'vitest'; import { t, ParseKeys } from 'i18next'; describe('ParseKeys', () => { it('`t` should accept result of a function returning a list of keys', () => { const getKey: () => ParseKeys<['generic']> = () => 'ahTLUS'; // Test all possible function signatures const result = t(getKey()); const result2 = t(getKey(), 'default value'); const result3 = t(getKey(), { defaultValue: 'default value' }); assertType(result); assertType(result2); assertType(result3); }); }); i18next-i18next-db698b1/test/typescript/many-keys-strict/tsconfig.json000066400000000000000000000001241527173754700260670ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/many-keys/000077500000000000000000000000001527173754700220555ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/many-keys/PERF_README.md000066400000000000000000000012311527173754700241450ustar00rootroot00000000000000# Performance `parseKeys.perf.ts` file is used to test performance when there are a lot of keys. ## Run performance checks To run performance check change your current working directory to this folder. ```bash cd test/typescript/many-keys ``` Then run tsc ```bash time npx tsc --noEmit ``` Alternatively you can also debug using [ts trace](https://github.com/microsoft/typescript-analyze-trace) ```bash npx tsc -p tsconfig.json --generateTrace traceDir && analyze-trace traceDir ``` Or you can debug using `chrome://tracing`. A guide can be on the [Typescript repository wiki](https://github.com/microsoft/TypeScript/wiki/Performance#performance-tracing). i18next-i18next-db698b1/test/typescript/many-keys/i18next.d.ts000066400000000000000000000004431527173754700241500ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceManyKeys } from '../test.namespace.many-keys'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'generic'; returnObjects: false; returnNull: false; resources: { generic: TestNamespaceManyKeys; }; } } i18next-i18next-db698b1/test/typescript/many-keys/parseKeys.perf.ts000066400000000000000000000002311527173754700253220ustar00rootroot00000000000000import { t, ParseKeys } from 'i18next'; const getKey: () => ParseKeys<['generic']> = () => 'ahTLUS'; const result = t(getKey()); console.info(result); i18next-i18next-db698b1/test/typescript/many-keys/parseKeys.test.ts000066400000000000000000000005261527173754700253540ustar00rootroot00000000000000import { describe, it, assertType } from 'vitest'; import { t, ParseKeys } from 'i18next'; describe('ParseKeys', () => { it('`t` should accept result of a function returning a list of keys', () => { const getKey: () => ParseKeys<['generic']> = () => 'ahTLUS'; const result = t(getKey()); assertType(result); }); }); i18next-i18next-db698b1/test/typescript/many-keys/tsconfig.json000066400000000000000000000001241527173754700245610ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/mf2-arguments/000077500000000000000000000000001527173754700226275ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/mf2-arguments/i18next.d.ts000066400000000000000000000020251527173754700247200ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; parseInterpolation: 'mf2'; interpolationFormatTypeMap: { uppercase: string }; resources: { custom: { greeting: 'Hello {$name}!'; count: 'You have {$count :number} items'; plural: '.input {$count :number}\n.match $count\none {{You have {$count} item}}\n* {{You have {$count} items}}'; local: '.local $c = {$count :integer}\n.match $c\none {{One file}}\n* {{{$c} files in {$folder}}}'; date: 'Updated {$when :datetime dateStyle=short}'; options: '{$amount :number minimumFractionDigits=$digits}'; markup: 'Read {#link href=$url}the terms{/link}'; literal: '{|{$notAnArgument}| :string} for {$name}'; escaped: 'Use \\{$notAnArgument\\} for {$name}'; quoted: '{{Hello {$name}}}'; text: '{$value :string}'; custom: '{$value :uppercase}'; dotted: 'Hi {$user.name}'; plain: 'Just a plain string'; }; }; } } i18next-i18next-db698b1/test/typescript/mf2-arguments/t.test.ts000066400000000000000000000054021527173754700244210ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction, InterpolationMap } from 'i18next'; // `parseInterpolation: 'mf2'` types `t()` options from MessageFormat 2 // variables (the messages i18next-mf2 formats at runtime). describe("parseInterpolation: 'mf2'", () => { const t: TFunction<'custom'> = (() => '') as never; it('requires variables', () => { t('greeting', { name: 'Ada' }); t('greeting', { name: 42 }); t('quoted', { name: 'Ada' }); // @ts-expect-error missing options t('greeting'); // @ts-expect-error missing variable t('greeting', {}); // @ts-expect-error misspelled variable t('greeting', { nmae: 'Ada' }); // @ts-expect-error wrong type t('greeting', { name: true }); }); it('types variables by their function', () => { t('count', { count: 3 }); t('date', { when: new Date() }); t('text', { value: 'x' }); t('custom', { value: 'x' }); // @ts-expect-error :number takes a number t('count', { count: 'three' }); // @ts-expect-error :datetime takes a Date t('date', { when: '2026-10-17' }); // @ts-expect-error :string takes a string t('text', { value: 1 }); // @ts-expect-error interpolationFormatTypeMap: uppercase takes a string t('custom', { value: 1 }); }); it('reads .input, .local and .match', () => { t('plural', { count: 1 }); t('local', { count: 2, folder: 'docs' }); // @ts-expect-error .input {$count :number} takes a number t('plural', { count: 'one' }); // @ts-expect-error $c is a local variable, count and folder are missing t('local', { c: 2 }); expectTypeOf< keyof InterpolationMap<'.local $c = {$count :integer} {{{$c}}}'> >().toEqualTypeOf<'count'>(); }); it('requires option and markup variables', () => { t('options', { amount: 9.5, digits: 2 }); t('markup', { url: 'https://example.com' }); // @ts-expect-error missing option variable t('options', { amount: 9.5 }); // @ts-expect-error missing markup variable t('markup', {}); }); it('skips quoted literals and escapes', () => { t('literal', { name: 'Ada' }); t('escaped', { name: 'Ada' }); // @ts-expect-error only name is a variable t('literal', { notAnArgument: 'x' }); // @ts-expect-error only name is a variable t('escaped', { notAnArgument: 'x' }); }); it('nests dotted variables', () => { t('dotted', { user: { name: 'Ada' } }); // @ts-expect-error user.name is a path t('dotted', { user: 'Ada' }); }); it('keeps keys and return types working', () => { expectTypeOf(t('plain')).toEqualTypeOf<'Just a plain string'>(); expectTypeOf(t('greeting', { name: 'Ada' })).toEqualTypeOf<'Hello {$name}!'>(); // @ts-expect-error unknown key t('nope'); }); }); i18next-i18next-db698b1/test/typescript/mf2-arguments/tsconfig.json000066400000000000000000000001031527173754700253300ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"] } i18next-i18next-db698b1/test/typescript/misc/000077500000000000000000000000001527173754700210735ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/misc/backend.test.ts000066400000000000000000000012341527173754700240100ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next, { InitOptions } from 'i18next'; import HttpBackend, { HttpBackendOptions } from 'i18next-http-backend'; import FsBackend, { FsBackendOptions } from 'i18next-fs-backend'; describe('backend', () => { it('works with `i18next-http-backend`', () => { expectTypeOf(i18next.use(HttpBackend).init) .parameter(0) .toEqualTypeOf>(); }); it('works with `i18next-fs-backend`', () => { expectTypeOf(i18next.use(FsBackend).init) .parameter(0) .toEqualTypeOf>(); }); }); i18next-i18next-db698b1/test/typescript/misc/exists.test.ts000066400000000000000000000022551527173754700237440ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next, { ExistsFunction, TOptions } from 'i18next'; describe('exists', () => { it('should accept a string or an array of string as first parameter', () => { // i18next.exists('friend'); // i18next.exists(['friend', 'tree']); expectTypeOf(i18next.exists).parameter(0).toEqualTypeOf(); }); it('should accept `TOptions` as second parameter', () => { // i18next.exists('friend', { myVar: 'someValue' }); // i18next.exists(['friend', 'tree'], { myVar: 'someValue' }); expectTypeOf(i18next.exists).parameter(1).toEqualTypeOf(); }); it('should return boolean', () => { expectTypeOf(i18next.exists).returns.toBeBoolean(); }); // https://github.com/i18next/i18next/issues/2425 it('should accept a plain arrow function when typed as `ExistsFunction`', () => { const a: ExistsFunction = (key, options) => i18next.exists(key, options); const b: ExistsFunction = (key, options) => i18next.exists(key, { lng: 'en', ns: 'ourNamespace', ...options }); expectTypeOf(a).returns.toBeBoolean(); expectTypeOf(b).returns.toBeBoolean(); }); }); i18next-i18next-db698b1/test/typescript/misc/exposed.test.ts000066400000000000000000000073031527173754700240730ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; /** Exercise exposed types/imports for different tsconfig esModuleInterop settings */ /* esModuleInterop: true, allowSyntheticDefaultImports: true */ import i18next, { Interpolator, ResourceStore, Resource, Formatter } from 'i18next'; import type { SelectorFn, ApplyTarget, ConstrainTarget, GetSource, InitOptions } from 'i18next'; import { isSafeLanguageCode } from 'i18next'; describe('exposed', () => { it('should expose languages', () => { expectTypeOf(i18next).toHaveProperty('resolvedLanguage').toEqualTypeOf(); expectTypeOf(i18next).toHaveProperty('language').toBeString(); }); it('should expose hydrate() and services.utils', () => { expectTypeOf(i18next.hydrate).parameters.toEqualTypeOf< [resources?: Resource | undefined, lng?: string | undefined] >(); expectTypeOf(i18next.hydrate({ en: { translation: { key: 'value' } } }, 'en')).toEqualTypeOf( i18next, ); expectTypeOf(i18next.services.utils?.reloadResources).toEqualTypeOf< typeof i18next.reloadResources | undefined >(); }); it('exports the selector helpers react-i18next uses', () => { expectTypeOf>().toBeUnknown(); expectTypeOf>().toBeUnknown(); expectTypeOf>().not.toBeNever(); expectTypeOf>().toBeFunction(); }); it('exports isSafeLanguageCode', () => { expectTypeOf(isSafeLanguageCode).toEqualTypeOf<(code: unknown) => boolean>(); }); it('types skipInterpolation and what returnedObjectHandler returns', () => { i18next.t('key', { skipInterpolation: true }); assertType({ returnedObjectHandler: (key) => `object at ${key}` }); }); it('should expose interpolator', () => { expectTypeOf(i18next.services).toHaveProperty('interpolator').toEqualTypeOf(); }); it('ResourceStore', () => { const resourceStore = i18next.services.resourceStore; assertType(resourceStore); expectTypeOf(resourceStore).toHaveProperty('data').toEqualTypeOf(); type Callback = (lng: string, ns: string) => void; expectTypeOf(resourceStore.on).parameters.toMatchTypeOf<['added' | 'removed', Callback]>(); expectTypeOf(resourceStore.on).returns.toBeVoid(); expectTypeOf(resourceStore.off).parameter(0).toMatchTypeOf<'added' | 'removed'>(); expectTypeOf(resourceStore.off).parameter(1).toMatchTypeOf(); expectTypeOf(resourceStore.off).returns.toBeVoid(); }); describe('formatter', () => { const formatter = i18next.services.formatter; assertType(formatter); expectTypeOf(formatter?.add).parameters.toMatchTypeOf< [string, (value: any, lng: string | undefined, options: any) => string] >(); expectTypeOf(formatter?.add).returns.toBeVoid(); expectTypeOf(formatter?.addCached).parameters.toMatchTypeOf< [string, (lng: string | undefined, options: any) => (value: any) => string] >(); expectTypeOf(formatter?.addCached).returns.toBeVoid(); }); describe('eventEmitter', () => { /** * After vitest 2.1 update accessing `parameters` of this `i18next.on` reports an error. * Probably it is related to the fact that the function has different overrides. * As a workaround we perform the assertions on the "full" function type */ expectTypeOf(i18next.on).toMatchTypeOf< (event: string, callback: (...args: unknown[]) => void) => void >(); expectTypeOf(i18next.emit).parameters.toMatchTypeOf<[string, ...unknown[]]>(); expectTypeOf(i18next.emit).returns.toBeVoid(); }); }); i18next-i18next-db698b1/test/typescript/misc/format.test.ts000066400000000000000000000020431527173754700237100ustar00rootroot00000000000000import { describe, it, expectTypeOf, assertType } from 'vitest'; import { FormatFunction, InterpolationOptions } from 'i18next'; describe('format', () => { it('should accept parameters', () => { type FormatFunctionOptions = InterpolationOptions & Record; expectTypeOf().parameter(0).toEqualTypeOf(); expectTypeOf().parameter(1).toEqualTypeOf(); expectTypeOf().parameter(2).toEqualTypeOf(); expectTypeOf().parameter(3).toEqualTypeOf(); expectTypeOf().returns.toBeString(); }); it('should accept custom implementation', () => { assertType((value, _, lng, options) => { const passedOptions = options?.formatParams?.[options.interpolationkey] || {}; // All keys should can be read from options without any error const randomParameter = options?.random; return passedOptions + randomParameter; }); }); }); i18next-i18next-db698b1/test/typescript/misc/i18nInstance.test.ts000066400000000000000000000317211527173754700246710ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next, { InitOptions, TFunction, createInstance, i18n } from 'i18next'; describe('i18nInstance', () => { describe('initOptions', () => { it('should accept `initAsync`', () => { expectTypeOf(i18next.init).toBeCallableWith({ initAsync: false, }); }); it('should accept `fallbackLng`', () => { expectTypeOf(i18next.init).toBeCallableWith({ fallbackLng: 'en', }); expectTypeOf(i18next.init).toBeCallableWith({ fallbackLng: ['fr', 'en'], }); // depending on user language // fallback depending on user language expectTypeOf(i18next.init).toBeCallableWith({ fallbackLng: { 'de-CH': ['fr', 'it'], 'zh-HANT': ['zh-HANS', 'en'], es: ['fr'], default: ['en'], }, }); }); it('should accept `resources`', () => { expectTypeOf(i18next.init).toBeCallableWith({ resources: { en: { namespace1: { key: 'hello from namespace 1', }, namespace2: { key: 'hello from namespace 2', }, }, de: { namespace1: { key: 'hallo von namespace 1', }, namespace2: { key: 'hallo von namespace 2', }, }, }, }); }); it('should accept `lng`, `nsSeparator`, `keySeparator` and `fallbackLng`', () => { expectTypeOf(i18next.init).toBeCallableWith({ lng: 'de', // allow keys to be phrases having `:`, `.` nsSeparator: false, keySeparator: false, // do not load a fallback fallbackLng: false, }); }); it('should accept `enableSelector`', () => { expectTypeOf(i18next.init).toBeCallableWith({ enableSelector: false, }); expectTypeOf(i18next.init).toBeCallableWith({ enableSelector: true, }); expectTypeOf(i18next.init).toBeCallableWith({ enableSelector: 'optimize', }); expectTypeOf(i18next.init).toBeCallableWith({ enableSelector: 'strict', }); }); it('should accept `backend` options', () => { expectTypeOf(i18next.init).toBeCallableWith({ fallbackLng: 'en', debug: true, ns: ['special', 'common'], defaultNS: 'special', backend: { // load from i18next-gitbook repo loadPath: 'https://raw.githubusercontent.com/i18next/i18next-gitbook/master/locales/{{lng}}/{{ns}}.json', crossDomain: true, }, }); }); it('should accept locize options', () => { // Init with Locize options. // From https://github.com/i18next/react-i18next/blob/master/example/locize/src/i18n.js const locizeOptions = { projectId: '', apiKey: '', referenceLng: 'en', }; expectTypeOf(i18next.init).toBeCallableWith({ fallbackLng: 'en', debug: true, saveMissing: true, interpolation: { escapeValue: false, // not needed for react as it escapes by default }, backend: locizeOptions, locizeLastUsed: locizeOptions, react: { bindI18n: 'languageChanged editorSaved', }, }); }); it('should accept `react`', () => { expectTypeOf(i18next.init).toBeCallableWith({ react: { hashTransKey: (defaultValue) => { if (typeof defaultValue === 'string') { return defaultValue.replace(/\s+/g, '_'); } throw new Error("Don't know how to make key for non-string defaultValue"); }, }, }); }); it('should accept `resources` and `interpolation`', () => { expectTypeOf(i18next.init).toBeCallableWith({ lng: 'en', fallbackLng: 'en', resources: { en: { translation: { key1: 'test', interpolateKey: 'add {{insert}} {{up, uppercase}}', interpolateKey2: 'add {{insert}} {{up, uppercase}}', }, }, }, interpolation: { escapeValue: false, // not needed for react!! formatSeparator: ',', }, }); }); it('should infer namespace from initOptions', () => { i18next.init( { ns: ['common', 'moduleA', 'moduleB'] as const, defaultNS: 'moduleA', }, (err, t) => { // key in moduleA namespace (defined default) assertType(t('myKey')); // key in common namespace assertType(t('common:myKey')); }, ); }); }); it('should provide t function on ready callback', () => { // i18next.js export default as esm module because the build is apart from commonjs. i18next.init( { lng: 'en', debug: true, resources: { en: { translation: { key: 'hello world', }, key: 'hello world', }, }, ignoreJSONStructure: false, }, (err, t) => { // not necessary but check a non-inferred arg for paranoia's sake assertType(t); // initialized and ready to go! assertType(t('key')); }, ); }); describe('`loadNamespaces`', () => { i18next.loadNamespaces('anotherNamespace', (err, t) => { assertType(err); assertType(t); }); const cb = () => {}; expectTypeOf(i18next.loadNamespaces).toBeCallableWith('myNamespace', cb); expectTypeOf(i18next.loadNamespaces).toBeCallableWith(['myNamespace1', 'myNamespace2'], cb); expectTypeOf(i18next.loadLanguages).toBeCallableWith('de', cb); expectTypeOf(i18next.loadLanguages).toBeCallableWith(['de', 'fr'], cb); }); it('`reloadResources`', () => { // due to function overload can't use .toBeCallableWith // reload all i18next.reloadResources(); // reload languages i18next.reloadResources(['de', 'fr'] as const); // reload namespaces for all languages i18next.reloadResources(null, ['ns1', 'ns2']); // reload namespaces in languages i18next.reloadResources(['de', 'fr'], ['ns1', 'ns2']); }); it('`dir`', () => { type Dir = 'ltr' | 'rtl'; // for current language assertType(i18next.dir()); // for another language assertType(i18next.dir('en-US')); assertType(i18next.dir('ar')); }); it('`getDataByLanguage`', () => { const data = i18next.getDataByLanguage('de'); assertType> | undefined>(data); assertType(data?.translation.myKey); assertType(data?.common.myKey); }); it('`getFixedT`', () => { const anotherNamespace = i18next.getFixedT(null, 'anotherNamespace'); // no need to prefix ns i18n.t('anotherNamespace:anotherNamespaceKey') assertType(anotherNamespace('anotherNamespaceKey')); }); it('`changeLanguage`', () => { i18next.changeLanguage('en', (err, t) => { assertType(err); assertType(t); }); }); describe('`EventEmitter`', () => { it('should work with EventEmitter methods', () => { expectTypeOf(i18next.on).toBeCallableWith('languageChanged', () => {}); expectTypeOf(i18next.off).toBeCallableWith('languageChanged', () => {}); }); it('should have correct `initialized` event callback signature ', () => { i18next.on('initialized', (options) => { assertType(options); }); }); it('should have correct `loaded` event callback signature ', () => { i18next.on('loaded', (loaded) => { assertType<{ [language: string]: { [namespace: string]: boolean } }>(loaded); }); }); it('should have correct `failedLoading` event callback signature ', () => { i18next.on('failedLoading', (lng, ns, msg) => { assertType(lng); assertType(ns); assertType(msg); }); }); it('should have correct `missingKey` event callback signature ', () => { i18next.on('missingKey', (lngs, ns, key, res) => { assertType(lngs); assertType(ns); assertType(key); assertType(res); }); }); it('should have correct `added` event callback signature ', () => { i18next.on('added', (lng, ns) => { assertType(lng); assertType(ns); }); }); it('should have correct `removed` event callback signature ', () => { i18next.on('removed', (lng, ns) => { assertType(lng); assertType(ns); }); }); it('should have correct `languageChanged` event callback signature ', () => { i18next.on('languageChanged', (lng) => { assertType(lng); }); }); it('should have correct `customEvent` event callback signature ', () => { i18next.on('customEvent', () => {}); }); }); it('store event emitter', () => { i18next.store.on('added', (lng, ns) => { assertType(lng); assertType(ns); }); i18next.store.on('removed', (lng, ns) => { assertType(lng); assertType(ns); }); }); describe('resource store', () => { it('`getResource`', () => { expectTypeOf(i18next.getResource).toBeCallableWith('en', 'test', 'key'); expectTypeOf(i18next.getResource).toBeCallableWith('en', 'test', 'key', { keySeparator: '-', ignoreJSONStructure: false, }); }); it('`addResource`', () => { expectTypeOf(i18next.addResource).toBeCallableWith('en', 'test', 'key', 'value'); expectTypeOf(i18next.addResource).toBeCallableWith('en', 'test', 'key', 'value', { keySeparator: '-', silent: false, }); expectTypeOf(i18next.addResources).toBeCallableWith('en', 'test', { key: 'value' }); }); it('`addResourceBundle`', () => { expectTypeOf(i18next.addResourceBundle).toBeCallableWith( 'en', 'translations', { key: 'value', }, true, true, ); }); // @see https://github.com/i18next/i18next/issues/2419 it('`addResourceBundle` with options', () => { expectTypeOf(i18next.addResourceBundle).toBeCallableWith( 'en', 'translations', { key: 'value' }, true, true, { silent: true }, ); expectTypeOf(i18next.addResourceBundle).toBeCallableWith( 'en', 'translations', { key: 'value' }, true, true, { skipCopy: true }, ); }); it('`hasResourceBundle`', () => { expectTypeOf(i18next.hasResourceBundle).toBeCallableWith('en', 'test'); expectTypeOf(i18next.hasResourceBundle).returns.toBeBoolean(); }); it('`getResourceBundle`', () => { expectTypeOf(i18next.getResourceBundle).toBeCallableWith('en', 'test'); }); it('`removeResourceBundle`', () => { expectTypeOf(i18next.removeResourceBundle).toBeCallableWith('en', 'test'); }); it('`addResourceBundle`', () => { expectTypeOf(i18next.addResourceBundle).toBeCallableWith('en', 'namespace1', { key: 'hello from namespace 1', }); }); }); it('`createInstance`', () => { expectTypeOf(createInstance).toBeCallableWith({ lng: 'en', fallbackLng: 'en', }); const instance = createInstance(); expectTypeOf(instance.init).toBeCallableWith( { fallbackLng: 'en', ns: ['file1', 'file2'] as const, defaultNS: 'file1', debug: true, }, (err, t) => { assertType(err); assertType(t); }, ); }); it('`cloneInstance`', () => { expectTypeOf(i18next.cloneInstance().init).toBeCallableWith( { fallbackLng: 'en', ns: ['file1', 'file2'], defaultNS: 'file1', debug: true, }, (err, t) => { assertType(err); assertType(t); }, ); }); it('`hasLoadedNamespace`', () => { expectTypeOf(i18next.hasLoadedNamespace).toBeCallableWith('test-ns'); expectTypeOf(i18next.hasLoadedNamespace).toBeCallableWith('test-ns', { lng: 'en', }); expectTypeOf(i18next.hasLoadedNamespace).toBeCallableWith('test-ns', { lng: 'it', fallbackLng: 'en', }); expectTypeOf(i18next.hasLoadedNamespace).toBeCallableWith('test-ns', { lng: 'it', fallbackLng: 'en', precheck(i18nPreCheck, loadNotPending) { assertType(i18nPreCheck); type ExpectedLoadNotPending = ( lng: string | readonly string[], ns: string | readonly string[], ) => boolean | undefined; assertType(loadNotPending); return false; }, }); expectTypeOf(i18next.hasLoadedNamespace('test-ns')).toBeBoolean(); }); }); i18next-i18next-db698b1/test/typescript/misc/interpolator.test.ts000066400000000000000000000022301527173754700251400ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next, { Interpolator } from 'i18next'; describe('interpolator', () => { const interpolator = i18next.services.interpolator; it('should have correct type', () => { assertType(interpolator); }); it('initReturn', () => { expectTypeOf(interpolator.init).parameters.toMatchTypeOf<[object, boolean]>(); expectTypeOf(interpolator.init).returns.toBeUndefined(); }); it('reset', () => { expectTypeOf(interpolator.reset).parameters.toEqualTypeOf<[]>(); expectTypeOf(interpolator.reset).returns.toBeUndefined(); }); it('resetRegExp', () => { expectTypeOf(interpolator.resetRegExp).parameters.toEqualTypeOf<[]>(); expectTypeOf(interpolator.resetRegExp).returns.toBeUndefined(); }); it('nest', () => { expectTypeOf(interpolator.nest).parameters.toMatchTypeOf(['', () => undefined, {}]); expectTypeOf(interpolator.nest).returns.toBeString(); }); it('interpolate', () => { expectTypeOf(interpolator.interpolate).parameters.toMatchTypeOf(['', {}, '', {}]); expectTypeOf(interpolator.interpolate).returns.toBeString(); }); }); i18next-i18next-db698b1/test/typescript/misc/languageDetector.test.ts000066400000000000000000000013151527173754700256760ustar00rootroot00000000000000import { createInstance, LanguageDetectorAsyncModule, LanguageDetectorModule } from 'i18next'; let i18n = createInstance(); i18n .use({ type: 'languageDetector', detect: () => 'en', }) .init(); i18n = createInstance(); i18n .use({ type: 'languageDetector', async: true, detect: (clb) => clb('en'), }) .init(); i18n = createInstance(); i18n .use({ type: 'languageDetector', async: true, detect: async () => 'en', }) .init(); i18n = createInstance(); i18n .use({ type: 'languageDetector', async: true, detect: (clb: (lng: string) => void) => clb('en'), }) .init(); i18next-i18next-db698b1/test/typescript/misc/mock.test.ts000066400000000000000000000003721527173754700233540ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import { TFunction, WithT } from 'i18next'; describe('WithT', () => { it('should infer correct type', () => { expectTypeOf().toHaveProperty('t').toEqualTypeOf(); }); }); i18next-i18next-db698b1/test/typescript/misc/modules.test.ts000066400000000000000000000116611527173754700240760ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next, { Modules, BackendModule, LanguageDetectorModule, LoggerModule, I18nFormatModule, ThirdPartyModule, FormatterModule, LanguageDetectorAsyncModule, } from 'i18next'; describe('modules', () => { describe('module types', () => { it('BackendModule', () => { assertType({ type: 'backend', init: () => null, read: (_language, _namespace, callback) => { callback(null, { key: 'value', }); }, create: () => null, readMulti: (_languages, _namespaces, callback) => { callback(null, { en: { namespace: { key: 'value', }, }, }); }, save: () => null, }); assertType({ type: 'backend', callbackApi: true, init: () => null, read: (_language, _namespace, callback) => callback(null, {}), }); expectTypeOf(i18next.use) .parameter(0) .extract() .toMatchTypeOf(); }); it('LanguageDetectorModule', () => { assertType({ type: 'languageDetector', init: () => null, detect: () => '', cacheUserLanguage: () => null, }); expectTypeOf(i18next.use) .parameter(0) .extract() .toMatchTypeOf(); }); it('LanguageDetectorModule', () => { assertType({ type: 'languageDetector', async: true, init: () => null, detect: () => Promise.resolve(''), cacheUserLanguage: () => Promise.resolve(), }); assertType({ type: 'languageDetector', async: true, callbackApi: false, detect: () => Promise.resolve('de'), }); expectTypeOf(i18next.use) .parameter(0) .extract() .toMatchTypeOf(); }); describe('LoggerModule', () => { it('as object', () => { assertType({ type: 'logger', log: () => null, warn: () => null, error: () => null, }); expectTypeOf(i18next.use) .parameter(0) .extract() .toMatchTypeOf(); }); it('as class', () => { // exercise class usage // Need both static and member definitions of type to satisfy use() signature, see #1442 class MyLoggerModule implements LoggerModule { static type = 'logger' as const; type = 'logger' as const; log = () => null; warn = () => null; error = () => null; } expectTypeOf(i18next.use) .parameter(0) .extract() .toMatchTypeOf(); }); }); it('I18nFormatModule', () => { assertType({ type: 'i18nFormat', }); expectTypeOf(i18next.use) .parameter(0) .extract() .toMatchTypeOf(); }); it('FormatterModule', () => { assertType({ type: 'formatter', init: () => null, add: () => null, addCached: () => () => null, format: () => '', }); expectTypeOf(i18next.use) .parameter(0) .extract() .toMatchTypeOf(); }); it('ThirdPartyModule', () => { assertType({ type: '3rdParty', init: () => null, }); expectTypeOf(i18next.use) .parameter(0) .extract() .toMatchTypeOf(); }); }); it('Modules', () => { expectTypeOf() .toHaveProperty('backend') .exclude() .toEqualTypeOf(); expectTypeOf() .toHaveProperty('languageDetector') .exclude() .toEqualTypeOf(); expectTypeOf() .toHaveProperty('i18nFormat') .exclude() .toEqualTypeOf(); expectTypeOf() .toHaveProperty('logger') .exclude() .toEqualTypeOf(); expectTypeOf() .toHaveProperty('formatter') .exclude() .toEqualTypeOf(); expectTypeOf() .toHaveProperty('external') .exclude() .toEqualTypeOf(); }); }); i18next-i18next-db698b1/test/typescript/misc/t.test.ts000066400000000000000000000215651527173754700226750ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next, { TFunction } from 'i18next'; describe('t', () => { it('basic usage', () => { const t = (() => '') as TFunction; expectTypeOf(t('friend')).toEqualTypeOf(); expectTypeOf(t`friend`).toEqualTypeOf(); expectTypeOf(t(['friend', 'tree'])).toEqualTypeOf(); expectTypeOf(t('friend', { myVar: 'someValue' })).toEqualTypeOf(); expectTypeOf(t(['friend', 'tree'], { myVar: 'someValue' })).toEqualTypeOf(); }); it('overloaded usage', () => { const t = (() => '') as TFunction; expectTypeOf(t('friend', 'test {{myVar}}', { myVar: 'someValue' })).toEqualTypeOf(); expectTypeOf( t(['friend', 'tree'], 'test {{myVar}}', { myVar: 'someValue' }), ).toEqualTypeOf(); }); it('return cast', () => { const t = (() => '') as TFunction; expectTypeOf(t('friend')).toEqualTypeOf(); expectTypeOf(t`friend`).toEqualTypeOf(); expectTypeOf(t('friend', { returnObjects: true })).toMatchTypeOf< object | string[] | object[] >(); // @ts-expect-error this is not a string expectTypeOf(t('friend', { returnObjects: true })).toEqualTypeOf(); }); it('default value', () => { const t = (() => '') as TFunction; expectTypeOf(t('translation:test', { defaultValue: 'test_en' })).toEqualTypeOf(); expectTypeOf( t('translation:test', { defaultValue: 'test_en', count: 1 }), ).toEqualTypeOf(); expectTypeOf( t('translation:test', { defaultValue_other: 'test_en_plural', defaultValue_one: 'test_en', count: 10, }), ).toEqualTypeOf(); // string (only) default value as second arg // https://www.i18next.com/translation-function/essentials#passing-a-default-value // https://github.com/i18next/i18next/blob/master/src/Translator.js#L66 expectTypeOf(t('translation:test', 'test_en')).toEqualTypeOf(); }); describe('`t` result as function arg', () => { const t = (() => '') as TFunction; it('call method with optional null arg', () => { type DisplayHint = (hint?: string | null) => string; expectTypeOf().parameter(0).extract().toMatchTypeOf(t('friend')); }); it('call method with required null arg', () => { type DisplayHint = (hint: string | null) => string; expectTypeOf().parameter(0).extract().toMatchTypeOf(t('friend')); }); it('call method with required arg', () => { type DisplayHint = (hint: string) => string; expectTypeOf().parameter(0).toMatchTypeOf(t('friend')); }); }); describe('keys', () => { const t = (() => '') as TFunction; it('array key', () => { const error404 = '404'; expectTypeOf(t([`error.${error404}`, 'error.unspecific'])).toEqualTypeOf(); // -> "The page was not found" const error502 = '502'; expectTypeOf(t([`error.${error502}`, 'error.unspecific'])).toEqualTypeOf(); // -> "Something went wrong" }); it('string key', () => { expectTypeOf(t('No one says a key can not be the fallback.')).toEqualTypeOf(); // -> "Niemand sagt ein key kann nicht als Ersatz dienen." expectTypeOf( t('This will be shown if the current loaded translations to not have this.'), ).toEqualTypeOf(); // -> "This will be shown if the current loaded translations to not have this." }); it('null translation', () => { expectTypeOf(i18next.t('nullKey')).toEqualTypeOf(); }); }); it('using `t` function inside another `t` function', () => { const t = (() => '') as TFunction; expectTypeOf(t('foobar', { defaultValue: t('inter') })).toEqualTypeOf(); expectTypeOf( t('foobar', { defaultValue: t('inter'), someValue: t('inter') }), ).toEqualTypeOf(); expectTypeOf(t('foobar', { something: t('inter') })).toEqualTypeOf(); }); describe('interpolation', () => { const t = (() => '') as TFunction; it('simple', () => { // key = 'hello {{what}}' // -> hello WORLD expectTypeOf( t('key', { what: i18next.format('world', 'uppercase') }), ).toEqualTypeOf(); expectTypeOf(t('key', { what: 'i18next', how: 'great' })).toEqualTypeOf(); }); it('with an object', () => { const author = { name: 'Jan', github: 'jamuhl', }; expectTypeOf(t('key', { author })).toEqualTypeOf(); }); it('using `escapeValue`', () => { // -> "no danger " (obviously could be dangerous) t('keyEscaped', { myVar: '', interpolation: { escapeValue: false }, }); }); it('plurals', () => { expectTypeOf(t('key', { count: 0 })).toEqualTypeOf(); // -> "items" expectTypeOf(t('key', { count: 1 })).toEqualTypeOf(); // -> "item" expectTypeOf(t('key', { count: 5 })).toEqualTypeOf(); // -> "items" expectTypeOf(t('key', { count: 100 })).toEqualTypeOf(); // -> "items" expectTypeOf(t('keyWithCount', { count: 0 })).toEqualTypeOf(); // -> "0 items" expectTypeOf(t('keyWithCount', { count: 1 })).toEqualTypeOf(); // -> "1 item" expectTypeOf(t('keyWithCount', { count: 5 })).toEqualTypeOf(); // -> "5 items" expectTypeOf(t('keyWithCount', { count: 100 })).toEqualTypeOf(); // -> "100 items" }); it('`postProcess`', () => { expectTypeOf( t('key1_interval', { postProcess: 'interval', count: 1 }), ).toEqualTypeOf(); // -> "one item" expectTypeOf( t('key1_interval', { postProcess: 'interval', count: 4 }), ).toEqualTypeOf(); // -> "a few items" expectTypeOf( t('key1_interval', { postProcess: 'interval', count: 100 }), ).toEqualTypeOf(); // -> "a lot of items" // not matching into a range it will fallback to // the regular plural form expectTypeOf( t('key2_interval', { postProcess: 'interval', count: 1 }), ).toEqualTypeOf(); // -> "one item" expectTypeOf( t('key2_interval', { postProcess: 'interval', count: 4 }), ).toEqualTypeOf(); // -> "a few items" expectTypeOf( t('key2_interval', { postProcess: 'interval', count: 100 }), ).toEqualTypeOf(); // -> "100 items" }); it('`context`', () => { expectTypeOf(t('friend', { context: 'male', count: 1 })).toEqualTypeOf(); // -> "A boyfriend" expectTypeOf(t('friend', { context: 'female', count: 100 })).toEqualTypeOf(); // -> "100 girlfriends" }); it('`returnObjects`', () => { expectTypeOf(t('tree', { returnObjects: true, something: 'gold' })).toMatchTypeOf< object | Array >(); // -> { res: 'added gold' } expectTypeOf(t('array', { returnObjects: true })).toMatchTypeOf< object | Array >(); // -> ['a', 'b', 'c'] }); it('`joinArrays`', () => { expectTypeOf(t('arrayJoin', { joinArrays: '+' })).toEqualTypeOf(); // -> "line1+line2+line3" }); it('`joinArrays` + value to interpolate', () => { expectTypeOf( t('arrayJoinWithInterpolation', { myVar: 'a', joinArrays: ' ' }), ).toEqualTypeOf(); // -> "you can interpolate" }); it('`returnObjects` + `returnDetails`', () => { expectTypeOf(t('test', { returnObjects: true, returnDetails: true })) .toHaveProperty('res') .toMatchTypeOf>(); }); it('should provide information when `returnDetails` is `true`', () => { const resultWithDetails = t('key', { returnDetails: true }); expectTypeOf(resultWithDetails).toHaveProperty('res').toEqualTypeOf(); expectTypeOf(resultWithDetails).toHaveProperty('usedKey').toEqualTypeOf(); expectTypeOf(resultWithDetails).toHaveProperty('exactUsedKey').toEqualTypeOf(); expectTypeOf(resultWithDetails).toHaveProperty('usedNS').toEqualTypeOf(); expectTypeOf(resultWithDetails).toHaveProperty('usedLng').toEqualTypeOf(); expectTypeOf(resultWithDetails).toHaveProperty('usedParams').toMatchTypeOf(); }); it('should NOT provide information when `returnDetails` is `false`', () => { const resultWithDetails = t('key', { returnDetails: false }); expectTypeOf(resultWithDetails).toEqualTypeOf(); expectTypeOf(resultWithDetails).not.toHaveProperty('res'); }); it('without separator', () => { expectTypeOf(t('welcome here :)', { nsSeparator: false })).toEqualTypeOf(); // -> "welcome here :)" expectTypeOf(t('welcome ...', { keySeparator: false })).toEqualTypeOf(); // -> "welcome ..." }); }); }); i18next-i18next-db698b1/test/typescript/misc/tGeneric.test.ts000066400000000000000000000020601527173754700241570ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next, { TOptions } from 'i18next'; describe('tGeneric', () => { type Keys = 'friend' | 'tree'; it('should accept keys via generic', () => { const t = i18next.t, string>; expectTypeOf(t).parameter(0).toMatchTypeOf(); expectTypeOf(t).parameter(1).extract().toMatchTypeOf(); expectTypeOf(t('friend', { myVar: 'someValue' })).toEqualTypeOf(); expectTypeOf(t(['friend', 'tree'], { myVar: 'someValue' })).toEqualTypeOf(); }); it('should work with interpolation values', () => { const t = i18next.t, '{{myVar}}'>; expectTypeOf(t).parameter(0).toMatchTypeOf(); expectTypeOf(t).parameter(1).extract().toMatchTypeOf>(); expectTypeOf(t('friend', { myVar: 'someValue' })).toEqualTypeOf<'{{myVar}}'>(); expectTypeOf(t(['friend', 'tree'], { myVar: 'someValue' })).toEqualTypeOf<'{{myVar}}'>(); }); }); i18next-i18next-db698b1/test/typescript/misc/toJSON.test.ts000066400000000000000000000014031527173754700235330ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next, { InitOptions, ResourceStore } from 'i18next'; describe('toJSON', () => { it('should be callable', () => { expectTypeOf(i18next.toJSON).toBeFunction(); }); it('should return an object with the correct shape', () => { const result = i18next.toJSON(); expectTypeOf(result).toHaveProperty('options').toEqualTypeOf(); expectTypeOf(result).toHaveProperty('store').toEqualTypeOf(); expectTypeOf(result).toHaveProperty('language').toEqualTypeOf(); expectTypeOf(result).toHaveProperty('languages').toEqualTypeOf(); expectTypeOf(result).toHaveProperty('resolvedLanguage').toEqualTypeOf(); }); }); i18next-i18next-db698b1/test/typescript/misc/tsconfig.json000066400000000000000000000001241527173754700235770ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/misc/tsconfig.nonEsModuleInterop.json000066400000000000000000000002531527173754700273720ustar00rootroot00000000000000{ "extends": "./tsconfig.json", "compilerOptions": { // typescript defaults to these "esModuleInterop": false, "allowSyntheticDefaultImports": false } } i18next-i18next-db698b1/test/typescript/ns-separator-false/000077500000000000000000000000001527173754700236465ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/ns-separator-false/i18next.d.ts000066400000000000000000000003371527173754700257430ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { nsSeparator: false; defaultNS: 'a'; resources: { a: { isfalsey: 'A value'; plain: 'P' }; b: { other: 'B' }; }; } } i18next-i18next-db698b1/test/typescript/ns-separator-false/t.test.ts000066400000000000000000000007751527173754700254500ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { ParseKeys, TFunction } from 'i18next'; describe('nsSeparator: false', () => { it('has no ns-prefixed keys', () => { expectTypeOf>().toEqualTypeOf<'isfalsey' | 'plain'>(); }); it('does not split a key that contains "false"', () => { const t = (() => '') as unknown as TFunction<'a'>; expectTypeOf(t('isfalsey')).toEqualTypeOf<'A value'>(); expectTypeOf(t('plain')).toEqualTypeOf<'P'>(); }); }); i18next-i18next-db698b1/test/typescript/ns-separator-false/tsconfig.json000066400000000000000000000002161527173754700263540ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "compilerOptions": { "noErrorTruncation": true }, "exclude": [] } i18next-i18next-db698b1/test/typescript/parse-interpolation-false/000077500000000000000000000000001527173754700252275ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/parse-interpolation-false/i18next.d.ts000066400000000000000000000013311527173754700273170ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; parseInterpolation: false; resources: { custom: { // ICU MessageFormat strings — the default i18next type extractor would // produce phantom variable names from the nested-brace syntax. With // `parseInterpolation: false`, the extractor short-circuits and `t()` // accepts any options shape for these keys (matching what i18next-icu // expects at runtime). rows: '{count, plural, one {{count} row} other {{count} rows}}'; select: '{gender, select, male {his} female {her} other {their}} book'; plain: 'Just a plain string'; }; }; } } i18next-i18next-db698b1/test/typescript/parse-interpolation-false/t.test.ts000066400000000000000000000034161527173754700270240ustar00rootroot00000000000000import { describe, it } from 'vitest'; import type { TFunction } from 'i18next'; // `parseInterpolation: false` short-circuits the type-level extraction of // interpolation variables. Use case: ICU MessageFormat strings (via the // i18next-icu plugin) — the default extractor would treat the outermost `{{` // in `{count, plural, one {{count} row} other {{count} rows}}` as the start of // an i18next interpolation and demand a phantom variable name spanning the // rest of the string. // // With the flag off, `t()` accepts arbitrary options for any key. describe('parseInterpolation: false (ICU-friendly)', () => { const t: TFunction<'custom'> = (() => '') as never; it('accepts t calls on ICU plural strings without phantom variable types', () => { // No "{{count} row} other {{count} rows" phantom variable demanded. t('rows', { count: 1 }); t('rows', { count: 42 }); }); it('accepts t calls on ICU select strings', () => { t('select', { gender: 'male' }); t('select', { gender: 'female' }); }); it('still works for keys with no interpolation', () => { t('plain'); }); it('accepts arbitrary additional options (extraction is disabled)', () => { // No type-checking of option shape; we don't want false positives from // the i18next extractor on ICU strings. t('rows', { count: 5, foo: 'bar', anything: 123 }); }); it('does NOT demand the phantom variable from ICU plural syntax', () => { // Regression for i18next-icu#85. Default extraction would parse the // outermost `{{` … `}}` and produce the phantom variable // `count} row} other {{count} rows` // demanding it on every `t('rows', …)` call. With parseInterpolation off, // no such property is required. t('rows', { count: 1 }); // no error }); }); i18next-i18next-db698b1/test/typescript/parse-interpolation-false/tsconfig.json000066400000000000000000000001031527173754700277300ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"] } i18next-i18next-db698b1/test/typescript/registry-monorepo-legacy-only/000077500000000000000000000000001527173754700260655ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/registry-monorepo-legacy-only/i18next.d.ts000066400000000000000000000003261527173754700301600ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'legacy-only'; resources: { 'legacy-only': { greeting: 'Hello from legacy-only'; }; }; } } i18next-i18next-db698b1/test/typescript/registry-monorepo-legacy-only/t.test.ts000066400000000000000000000005631527173754700276620ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction } from 'i18next'; describe('CustomTypeOptions.resources only (no registry)', () => { const t = (() => '') as TFunction<'legacy-only'>; it('types keys the way it did before ResourceNamespaceMap', () => { expectTypeOf(t('greeting')).toEqualTypeOf<'Hello from legacy-only'>(); }); }); i18next-i18next-db698b1/test/typescript/registry-monorepo-legacy-only/tsconfig.json000066400000000000000000000001031527173754700305660ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"] } i18next-i18next-db698b1/test/typescript/registry-monorepo/000077500000000000000000000000001527173754700236445ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/registry-monorepo/package-app-legacy.d.ts000066400000000000000000000006171527173754700300550ustar00rootroot00000000000000import 'i18next'; // leaf app namespaces via legacy resources (one resources block for the whole app) declare module 'i18next' { interface CustomTypeOptions { resources: { 'app-feature': { landing_title: 'Welcome to the app'; }; overlap: { legacy_only: 'from legacy'; shared_literal: 'same value'; shared_conflict: 'A'; }; }; } } i18next-i18next-db698b1/test/typescript/registry-monorepo/package-common.d.ts000066400000000000000000000004661527173754700273250ustar00rootroot00000000000000import 'i18next'; // second package, second file — would be TS2717 on CustomTypeOptions.resources declare module 'i18next' { interface ResourceNamespaceMap { common: { hello: 'Hello {{name}}'; farewell: 'Goodbye'; }; } interface CustomTypeOptions { defaultNS: 'common'; } } i18next-i18next-db698b1/test/typescript/registry-monorepo/package-overlap.d.ts000066400000000000000000000004371527173754700275030ustar00rootroot00000000000000import 'i18next'; // overlap ns — registry side; legacy keys are in package-app-legacy.d.ts declare module 'i18next' { interface ResourceNamespaceMap { overlap: { registry_only: 'from registry'; shared_literal: 'same value'; shared_conflict: 'B'; }; } } i18next-i18next-db698b1/test/typescript/registry-monorepo/package-selector.d.ts000066400000000000000000000003121527173754700276430ustar00rootroot00000000000000import 'i18next'; // enableSelector is isolated in tsconfig.selector.json so string-key t() tests stay valid. declare module 'i18next' { interface CustomTypeOptions { enableSelector: true; } } i18next-i18next-db698b1/test/typescript/registry-monorepo/package-ui.d.ts000066400000000000000000000003541527173754700264460ustar00rootroot00000000000000import 'i18next'; // shared UI package — own namespace only declare module 'i18next' { interface ResourceNamespaceMap { '@repo/ui': { button_label: 'Click'; panel: { title: 'Settings'; }; }; } } i18next-i18next-db698b1/test/typescript/registry-monorepo/t-selector.test.ts000066400000000000000000000006511527173754700272550ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction } from 'i18next'; declare const t: TFunction<'@repo/ui'>; describe('ResourceNamespaceMap registry selector (issue #2409)', () => { it('resolves keys via selector on registry namespace', () => { expectTypeOf(t(($) => $.button_label)).toEqualTypeOf<'Click'>(); expectTypeOf(t(($) => $.panel.title)).toEqualTypeOf<'Settings'>(); }); }); i18next-i18next-db698b1/test/typescript/registry-monorepo/t.test.ts000066400000000000000000000074411527173754700254430ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import type { TFunction, ResourceNamespaceMap, CustomTypeOptions, FlatNamespace, TypeOptions, } from 'i18next'; describe('ResourceNamespaceMap registry (issue #2409)', () => { describe('package-ui (@repo/ui)', () => { const t = (() => '') as TFunction<'@repo/ui'>; it('types keys from the registry', () => { expectTypeOf(t('button_label')).toEqualTypeOf<'Click'>(); expectTypeOf(t('panel.title')).toEqualTypeOf<'Settings'>(); }); it('rejects unknown keys', () => { // @ts-expect-error not in '@repo/ui' namespace assertType(t('not_a_key')); }); }); describe('package-common (second registry file)', () => { const t = (() => '') as TFunction<'common'>; it('merges with package-ui in the same program', () => { expectTypeOf(t('hello', { name: 'world' })).toEqualTypeOf<'Hello {{name}}'>(); expectTypeOf(t('farewell')).toEqualTypeOf<'Goodbye'>(); }); }); describe('package-app-legacy (CustomTypeOptions.resources)', () => { const t = (() => '') as TFunction<'app-feature'>; it('still works next to registry namespaces', () => { expectTypeOf(t('landing_title')).toEqualTypeOf<'Welcome to the app'>(); }); it('rejects keys from other namespaces', () => { // @ts-expect-error 'button_label' belongs to '@repo/ui' assertType(t('button_label')); }); }); describe('overlap namespace (registry + legacy on one ns)', () => { const t = (() => '') as TFunction<'overlap'>; it('picks up registry-only keys', () => { expectTypeOf(t('registry_only')).toEqualTypeOf<'from registry'>(); }); it('picks up legacy-only keys', () => { expectTypeOf(t('legacy_only')).toEqualTypeOf<'from legacy'>(); }); it('keeps a key when both sides agree on the literal', () => { expectTypeOf(t('shared_literal')).toEqualTypeOf<'same value'>(); }); it('merges both halves into TypeOptions.resources.overlap', () => { type OverlapNs = TypeOptions['resources']['overlap']; type ExpectedKeys = 'registry_only' | 'legacy_only' | 'shared_literal'; assertType('' as ExpectedKeys); assertType('' as keyof OverlapNs); expectTypeOf().toEqualTypeOf<'same value'>(); }); it('drops same-key/different-literal conflicts from the merged namespace', () => { // `shared_conflict` is 'A' in legacy and 'B' in registry. Without // filtering, the entire `overlap` namespace would collapse to `never` // (TS reduces `{ x:'A' } & { x:'B' }` to `never`) and poison `t()` // overload resolution. // @ts-expect-error 'shared_conflict' is dropped because legacy says 'A', registry says 'B' assertType(t('shared_conflict')); }); }); describe('FlatNamespace', () => { it('lists every namespace from registry and legacy', () => { type Expected = '@repo/ui' | 'common' | 'app-feature' | 'overlap'; assertType('' as Expected); assertType('' as FlatNamespace); }); }); describe('default namespace via CustomTypeOptions still applies', () => { const t = (() => '') as TFunction; it('uses the default namespace declared in package-common.d.ts', () => { expectTypeOf(t('hello', { name: 'world' })).toEqualTypeOf<'Hello {{name}}'>(); expectTypeOf(t('farewell')).toEqualTypeOf<'Goodbye'>(); }); }); describe('exports', () => { it('ResourceNamespaceMap', () => { const registry: ResourceNamespaceMap = {} as ResourceNamespaceMap; assertType(registry); }); it('CustomTypeOptions', () => { const opts: CustomTypeOptions = {} as CustomTypeOptions; assertType(opts); }); }); }); i18next-i18next-db698b1/test/typescript/registry-monorepo/tsconfig.json000066400000000000000000000002051527173754700263500ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./package-selector.d.ts", "./t-selector.test.ts"] } i18next-i18next-db698b1/test/typescript/registry-monorepo/tsconfig.selector.json000066400000000000000000000001451527173754700301720ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./package-*.d.ts", "./t-selector.test.ts"] } i18next-i18next-db698b1/test/typescript/selector-comparison/000077500000000000000000000000001527173754700241305ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-comparison/i18next.d.ts000066400000000000000000000031201527173754700262160ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'ctx'; contextSeparator: '|'; resources: { ctx: { beverage: 'beverage'; 'beverage|beer': 'beer'; tea_one: 'a cuppa tea and a lie down'; tea_other: '{{count}} cups of tea and a big sleep'; 'dessert|cake': 'a nice cake'; 'dessert|muffin_one': 'a nice muffin'; 'dessert|muffin_other': '{{count}} nice muffins'; coffee: { drip: { black: 'a strong cup of black coffee'; }; bar: { shot: 'a shot of espresso'; 'espresso|americano': 'a hot americano'; 'espresso|latte_one': 'a foamy latte'; 'espresso|latte_other': '{{count}} foamy lattes'; 'espresso|cappuccino_one': 'a dry cappuccino'; 'espresso|cappuccino_other': '{{count}} dry cappuccinos'; }; }; sodas: { coca_cola: { coke: 'a can of coke'; 'coke|diet_one': 'a can of diet coke'; 'coke|diet_other': '{{count}} cans of diet coke'; }; faygo: { purple: 'purple faygo'; orange_one: 'one orange faygo'; orange_other: '{{count}} orange faygo'; }; }; array: [ 'element one', { elementTwo: 'element two'; }, { elementThree: [ { nestedElementThree: 'element three'; }, ]; }, ]; }; }; } } i18next-i18next-db698b1/test/typescript/selector-comparison/t.bench.ts000066400000000000000000000004031527173754700260160ustar00rootroot00000000000000import { bench } from '@arktype/attest'; import {} from './i18next'; import type { TFunction } from 'i18next'; declare const t: TFunction; bench('selector usage benchmark', () => { t('coffee.bar.espresso|cappuccino'); }).types([24147, 'instantiations']); i18next-i18next-db698b1/test/typescript/selector-comparison/tsconfig.json000066400000000000000000000001451527173754700266370ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./**/*.bench.ts"] } i18next-i18next-db698b1/test/typescript/selector-custom-types-default-ns-as-array/000077500000000000000000000000001527173754700302075ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-custom-types-default-ns-as-array/i18next.d.ts000066400000000000000000000014331527173754700323020ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceContext, TestNamespacePlurals, TestNamespaceOrdinal, TestNamespaceCustom, TestNamespaceCustomAlternate, TestNamespaceFallback, TestNamespaceNonPlurals, } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: Readonly<['custom', 'custom_b']>; fallbackNS: 'fallback'; enableSelector: true; resources: { custom: TestNamespaceCustom; custom_b: { another_entry: 'Argh'; one_more: 'Whyyy'; }; alternate: TestNamespaceCustomAlternate; fallback: TestNamespaceFallback; plurals: TestNamespacePlurals; nonPlurals: TestNamespaceNonPlurals; ctx: TestNamespaceContext; ord: TestNamespaceOrdinal; }; } } i18next-i18next-db698b1/test/typescript/selector-custom-types-default-ns-as-array/i18nextT.test.ts000066400000000000000000000066461527173754700331750ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('i18next.t', () => { it('should work with standard keys', () => { expectTypeOf(i18next.t(($) => $.bar, {})).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t(($) => $.foobar.barfoo, { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); expectTypeOf(i18next.t(($) => $.alternate.foobar.barfoo)).toEqualTypeOf<'barfoo'>(); expectTypeOf(i18next.t(($) => $.custom.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t(($) => $.bar, { ns: 'custom' })).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t(($) => $.baz.bing)).toEqualTypeOf<'boop'>(); expectTypeOf(i18next.t(($) => $.alternate.foobar.barfoo)).toEqualTypeOf<'barfoo'>(); }); it('should throw error when key is not defined in namespace', () => { // @ts-expect-error assertType(i18next.t(($) => $.bar, { ns: 'alternate' })); }); it('should work with `returnObjects`', () => { type AlternateFoobarDeepResult = { deeper: { deeeeeper: 'foobar'; }; }; // i18next.t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." expectTypeOf( i18next.t(($) => $.alternate.foobar.deep, { returnObjects: true }), ).toEqualTypeOf(); expectTypeOf( i18next.t(($) => $.foobar.deep, { ns: 'alternate', returnObjects: true }), ).toEqualTypeOf(); expectTypeOf( i18next.t(($) => $.foobar.deep, { ns: 'alternate', returnObjects: true, returnDetails: true }) .res, ).toEqualTypeOf(); }); describe('interpolation', () => { it('should work with passing along values', () => { expectTypeOf( i18next.t(($) => $.custom.inter, { val: 'asdf' }), ).toEqualTypeOf<'some {{val}}'>(); expectTypeOf( i18next.t(($) => $.inter, { val: 'asdf', ns: 'custom' }), ).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(i18next.t(($) => $.inter, { val: 'asdf' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(i18next.t(($) => $.qux, { val: 123 })).toEqualTypeOf<'some {{val, number}}'>(); }); it('should throw an error when value is not present inside key', () => { // @ts-expect-error assertType(i18next.t(($) => $.custom.inter, { foo: 'asdf' })); }); }); it('should work with default value', () => { expectTypeOf( i18next.t(($) => $.custom.bar, { defaultValue: 'some default value' }), ).toEqualTypeOf<'bar' | 'some default value'>(); expectTypeOf( i18next.t(($) => $.bar, { ns: 'custom', defaultValue: 'some default value' }), ).toEqualTypeOf<'bar' | 'some default value'>(); expectTypeOf(i18next.t(($) => $.bar, { defaultValue: 'some default value' })).toEqualTypeOf< 'bar' | 'some default value' >(); }); it('should work with plurals', () => { expectTypeOf(i18next.t(($) => $.plurals.foo, { count: 1 })).toEqualTypeOf<'foo'>(); expectTypeOf(i18next.t(($) => $.plurals.foo, { count: 10 })).toEqualTypeOf<'foo'>(); }); it('should throw error with invalid key', () => { // @ts-expect-error assertType(i18next.t(($) => $.custom.test)); }); it('should throw error with invalid namespace', () => { // @ts-expect-error assertType(i18next.t(($) => $.test.bar)); }); }); i18next-i18next-db698b1/test/typescript/selector-custom-types-default-ns-as-array/t.test.ts000066400000000000000000000204061527173754700320020ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import { TFunction } from 'i18next'; describe('t', () => { describe('default namespace usage', () => { const t: TFunction = (() => '') as never; it('should work with standard keys', () => { expectTypeOf(t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.foo)).toEqualTypeOf<'foo'>(); expectTypeOf(t(($) => $.inter, { val: 'xx' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(t(($) => $.baz.bing)).toEqualTypeOf<'boop'>(); }); it('should work with keys from both namespaces', () => { expectTypeOf(t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.bar, { ns: 'custom' })).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.custom_b.another_entry)).toEqualTypeOf<'Argh'>(); expectTypeOf(t(($) => $.another_entry, { ns: 'custom_b' })).toEqualTypeOf<'Argh'>(); }); it('should work with `returnObjects`', () => { expectTypeOf(t(($) => $.baz, { returnObjects: true })).toEqualTypeOf<{ bing: 'boop'; }>(); }); it('should raise a TypeError when keys are not defined', () => { // @ts-expect-error assertType(t(($) => $.inter, { wrongOrNoValPassed: 'xx' })); // @ts-expect-error assertType(t(($) => $.baz)); // @ts-expect-error assertType(t(($) => $.custom.foobar)); // @ts-expect-error assertType(t(($) => $.foobar)); }); it('should work when using `t` inside another `t` function', () => { expectTypeOf(t(($) => $.foo, { defaultValue: t(($) => $.bar) })).toEqualTypeOf< 'foo' | 'bar' >(); expectTypeOf(t(($) => $.foo, { something: t(($) => $.bar) })).toEqualTypeOf<'foo'>(); expectTypeOf( t(($) => $.foo, { defaultValue: t(($) => $.bar), something: t(($) => $.bar) }), ).toEqualTypeOf<'foo' | 'bar'>(); }); }); describe('union accessors', () => { const t: TFunction<'custom_b'> = (() => '') as never; it('should work with const keys', () => { const alternateTranslationKeys = ['another_entry', 'one_more'] as const; const result = alternateTranslationKeys.map((value) => t(($) => $[value])); expectTypeOf(result).toEqualTypeOf<('Argh' | 'Whyyy')[]>(); }); }); describe('named default namespace usage', () => { const t: TFunction<'alternate'> = (() => '') as never; it('should work with standard key', () => { expectTypeOf(t(($) => $.baz)).toEqualTypeOf<'baz'>(); expectTypeOf(t(($) => $.foobar.barfoo)).toEqualTypeOf<'barfoo'>(); expectTypeOf(t(($) => $.foobar.deep.deeper.deeeeeper)).toEqualTypeOf<'foobar'>(); }); it('should throw an error when key is not present inside namespace', () => { // @ts-expect-error assertType(t(($) => $.bar)); // @ts-expect-error assertType(t(($) => $.alternate.foobar.barfoo)); // @ts-expect-error assertType(t(($) => $.foobar)); // @ts-expect-error assertType(t(($) => $.new.key)); // @ts-expect-error assertType(t(($) => $.new.key, { other: 'stuff' })); }); it('should work with `returnObjects`', () => { expectTypeOf(t(($) => $.foobar, { returnObjects: true })).toBeObject(); expectTypeOf(t(($) => $.foobar, { returnObjects: true })).toEqualTypeOf<{ barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }>(); }); }); describe('array namespace', () => { const t: TFunction<['custom', 'alternate']> = (() => '') as never; it('should work with standard keys', () => { expectTypeOf(t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.alternate.baz)).toEqualTypeOf<'baz'>(); expectTypeOf(t(($) => $.baz, { ns: 'alternate' })).toEqualTypeOf<'baz'>(); expectTypeOf(t(($) => $.bar, { ns: 'custom' })).toEqualTypeOf<'bar'>(); // @ts-expect-error - `custom` namespace should no longer be available when `alternate` namespace is chosen in options expectTypeOf(t(($) => $.custom.bar, { ns: 'alternate' })).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.bar, { ns: ['custom', 'alternate'] })).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.custom.bar, { ns: ['alternate', 'custom'] })).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.baz, { ns: ['alternate', 'custom'] })).toEqualTypeOf<'baz'>(); expectTypeOf( t(($) => $.alternate.baz, { ns: ['custom', 'alternate'] }), ).toEqualTypeOf<'baz'>(); }); it('should work with `returnObjects`', () => { // t($ => $.alternate.foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." expectTypeOf(t(($) => $.alternate.foobar.deep, { returnObjects: true })).toEqualTypeOf<{ deeper: { deeeeeper: 'foobar'; }; }>(); }); it('should throw an error when key is not present inside namespace', () => { // @ts-expect-error assertType(t(($) => $.baz)); // @ts-expect-error assertType(t(($) => $.baz, { ns: 'custom' })); // @ts-expect-error assertType(t(($) => $.alternate.foobar.deep)); }); }); it('error when namespace does not exist', () => { // @ts-expect-error assertType(TFunction<'foo'>); }); it('should process ordinal plurals', () => { const t: TFunction<'ord'> = (() => '') as never; expectTypeOf(t(($) => $.place, { ordinal: true, count: 1 })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); expectTypeOf(t(($) => $.place, { ordinal: true, count: 2 })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); expectTypeOf(t(($) => $.place, { ordinal: true, count: 3 })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); expectTypeOf(t(($) => $.place, { ordinal: true, count: 4 })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); }); it('should work with context', () => { const t: TFunction<'ctx'> = (() => '') as never; expectTypeOf(t(($) => $.dessert, { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t(($) => $.dessert, { context: 'muffin', count: 3 })).toMatchTypeOf(); // @ts-expect-error // valid key with invalid context assertType(t(($) => $.foo, { context: 'cake' })); }); it('should work with context and array namespaces', () => { const t: TFunction<['ord', 'ctx']> = (() => '') as never; expectTypeOf(t(($) => $.ctx.dessert, { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); expectTypeOf( t(($) => $.dessert, { context: 'cake', ns: 'ctx' }), ).toEqualTypeOf<'a nice cake'>(); expectTypeOf( t(($) => $.dessert, { context: 'cake', ns: ['ctx'] }), ).toEqualTypeOf<'a nice cake'>(); expectTypeOf( t(($) => $.dessert, { context: 'cake', ns: ['ctx', 'ord'] }), ).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t(($) => $.ctx.dessert, { context: 'muffin', count: 3 })).toEqualTypeOf< 'a nice muffin' | '{{count}} nice muffins' >(); // @ts-expect-error // valid key with invalid context assertType(t('foo', { context: 'cake' })); }); it('should work with false plural usage', () => { const t: TFunction<'nonPlurals'> = (() => '') as never; expectTypeOf(t(($) => $.test)).toEqualTypeOf<'Test'>(); expectTypeOf(t(($) => $.test_2)).toEqualTypeOf<'Test 2'>(); expectTypeOf(t(($) => $.test_form.title)).toEqualTypeOf<'title'>(); }); it('should return `never` with invalid namespace', () => { // @ts-expect-error const t: TFunction = (() => '') as never; // @ts-expect-error t(($) => $.foo); }); it('each t function must have a type based on provided namespace', () => { const tOrdinal: TFunction<'ord'> = (() => '') as never; const tPlurals: TFunction<'plurals'> = (() => '') as never; const tPluralsOrd: TFunction<['plurals', 'ord']> = (() => '') as never; const tOrdPlurals: TFunction<['ord', 'plurals']> = (() => '') as never; expectTypeOf(tOrdinal).not.toMatchTypeOf(tPlurals); expectTypeOf(tOrdPlurals).not.toEqualTypeOf(tPlurals); expectTypeOf(tPluralsOrd).not.toEqualTypeOf(tPlurals); }); }); i18next-i18next-db698b1/test/typescript/selector-custom-types-default-ns-as-array/tsconfig.json000066400000000000000000000001241527173754700327130ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/selector-custom-types/000077500000000000000000000000001527173754700244325ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-custom-types/getFixedT.test.ts000066400000000000000000000061711527173754700276500ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next, { getFixedT, TFunction } from 'i18next'; describe('getFixedT', () => { it('returns a `TFunction`', () => { assertType>(i18next.getFixedT(null, null, 'foo')); }); it('throws an error when providing `keyPrefix` and nothing else', () => { // @ts-expect-error assertType(i18next.getFixedT(null, null, 'xxx')); }); describe('should work with `namespace` and `keyPrefix`', () => { const t = i18next.getFixedT(null, 'alternate', 'foobar'); it('should retrieve deep key', () => { expectTypeOf(t(($) => $.deep.deeper.deeeeeper)).toEqualTypeOf<'foobar'>(); }); it('should work with `returnObjects`', () => { // t('deeper').deeeeeper; // i18next would say: "key 'deeper (en)' returned an object instead of string." expectTypeOf(t(($) => $.deep.deeper, { returnObjects: true })).toEqualTypeOf<{ deeeeeper: 'foobar'; }>(); }); it('should throw an error if key does not exist', () => { // @ts-expect-error assertType(t6('xxx')); }); }); it('should work when providing only language', () => { const t = i18next.getFixedT('en'); expectTypeOf(t(($) => $.foo)).toEqualTypeOf<'foo'>(); // t('alternate:foobar.deep.deeper.deeeeeper'); expectTypeOf( t(($) => $.foobar.deep.deeper.deeeeeper, { ns: 'alternate' }), ).toEqualTypeOf<'foobar'>(); }); it('should work when providing `language`,`namespace` and `keyPrefix`', () => { const t = i18next.getFixedT('en', 'alternate', 'foobar'); expectTypeOf(t(($) => $.barfoo)).toEqualTypeOf<'barfoo'>(); }); it('should work when providing just `language`', () => { const t = i18next.getFixedT('en'); expectTypeOf(t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.foobar.barfoo, { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); // @ts-expect-error assertType(t(($) => $.foobar.barfoo)); }); it('should work with a two-level deep keyPrefix', () => { const t = getFixedT(null, 'alternate', 'foobar.deep'); expectTypeOf(t(($) => $.deeper.deeeeeper)).toEqualTypeOf<'foobar'>(); }); it('should work with a three-level deep keyPrefix', () => { const t = getFixedT(null, 'alternate', 'foobar.deep.deeper'); expectTypeOf(t(($) => $.deeeeeper)).toEqualTypeOf<'foobar'>(); }); it('should accept a selector function as keyPrefix with type-safe key narrowing', () => { const t = i18next.getFixedT(null, 'alternate', ($) => $.foobar); expectTypeOf(t(($) => $.barfoo)).toEqualTypeOf<'barfoo'>(); expectTypeOf(t(($) => $.deep.deeper.deeeeeper)).toEqualTypeOf<'foobar'>(); }); it('should accept a selector function as keyPrefix with language and type-safe key narrowing', () => { const t = i18next.getFixedT('en', 'alternate', ($) => $.foobar); expectTypeOf(t(($) => $.barfoo)).toEqualTypeOf<'barfoo'>(); }); it('should accept a deep selector function as keyPrefix', () => { const t = i18next.getFixedT(null, 'alternate', ($) => $.foobar.deep); expectTypeOf(t(($) => $.deeper.deeeeeper)).toEqualTypeOf<'foobar'>(); }); }); i18next-i18next-db698b1/test/typescript/selector-custom-types/i18next.d.ts000066400000000000000000000015201527173754700265220ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceContext, TestNamespacePlurals, TestNamespaceOrdinal, TestNamespaceCustom, TestNamespaceCustomAlternate, TestNamespaceFallback, TestNamespaceNonPlurals, TestNamespaceInterpolators, TestNamespaceContextAlternate, } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'custom'; fallbackNS: 'fallback'; enableSelector: true; resources: { custom: TestNamespaceCustom; alternate: TestNamespaceCustomAlternate; fallback: TestNamespaceFallback; ctx: TestNamespaceContext; ctxAlternate: TestNamespaceContextAlternate; plurals: TestNamespacePlurals; nonPlurals: TestNamespaceNonPlurals; ord: TestNamespaceOrdinal; interpolator: TestNamespaceInterpolators; }; } } i18next-i18next-db698b1/test/typescript/selector-custom-types/i18nextT.test.ts000066400000000000000000000104721527173754700274100ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('i18next.t', () => { it('should work with standard keys', () => { expectTypeOf(i18next.t(($) => $.bar, {})).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t(($) => $.foobar.barfoo, { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); expectTypeOf(i18next.t(($) => $.bar, { ns: 'custom' })).toEqualTypeOf<'bar'>(); expectTypeOf(i18next.t(($) => $.baz.bing)).toEqualTypeOf<'boop'>(); expectTypeOf(i18next.t(($) => $.foobar.barfoo, { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); }); it('should throw error when key is not defined in namespace', () => { // @ts-expect-error assertType(i18next.t(($) => $.bar, { ns: 'alternate' })); }); it('should work with `returnObjects`', () => { type AlternateFoobarDeepResult = { deeper: { deeeeeper: 'foobar'; }; }; // i18next.t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." expectTypeOf( i18next.t(($) => $.foobar.deep, { returnObjects: true, ns: 'alternate' }), ).toEqualTypeOf(); expectTypeOf( i18next.t(($) => $.foobar.deep, { ns: 'alternate', returnObjects: true }), ).toEqualTypeOf(); expectTypeOf( i18next.t(($) => $.foobar.deep, { ns: 'alternate', returnObjects: true, returnDetails: true }) .res, ).toEqualTypeOf(); }); describe('interpolation', () => { it('should work with passing along values', () => { expectTypeOf( i18next.t(($) => $.inter, { val: 'asdf', ns: 'custom' }), ).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(i18next.t(($) => $.inter, { val: 'asdf' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(i18next.t(($) => $.qux, { val: 123 })).toEqualTypeOf<'some {{val, number}}'>(); }); it('should work when using unescaped values', () => { expectTypeOf( i18next.t(($) => $.interUnescaped, { val: 'asdf' }), ).toEqualTypeOf<'some unescaped {{- val}}'>(); expectTypeOf( i18next.t(($) => $.interUnescapedNoSpace, { val: 'asdf' }), ).toEqualTypeOf<'some unescaped {{-val}}'>(); expectTypeOf( i18next.t(($) => $.interUnescapedFormatted, { val: 'asdf' }), ).toEqualTypeOf<'some unescaped {- val, number}}'>(); }); it('should throw an error when value is not present inside key', () => { // @ts-expect-error assertType(i18next.t(($) => $.inter, { foo: 'asdf', ns: 'custom' })); }); }); describe('defaultValue', () => { it('should work with default value for existing keys', () => { expectTypeOf(i18next.t(($) => $.bar, { defaultValue: 'some default value' })).toEqualTypeOf< 'bar' | 'some default value' >(); expectTypeOf( i18next.t(($) => $.bar, { ns: 'custom', defaultValue: 'some default value' }), ).toEqualTypeOf<'bar' | 'some default value'>(); }); }); it('should work with plurals', () => { expectTypeOf(i18next.t(($) => $.foo, { count: 1, ns: 'plurals' })).toEqualTypeOf<'foo'>(); // @ts-expect-error plural selectors require count with an explicit namespace i18next.t(($) => $.foo, { ns: 'plurals' }); // @ts-expect-error plural keys have been removed from the translations object expectTypeOf(i18next.t(($) => $.foo_many, { count: 10, ns: 'plurals' })).toEqualTypeOf<'foo'>(); }); it('should require count for ordinal plurals with an explicit namespace', () => { expectTypeOf(i18next.t(($) => $.place, { count: 1, ordinal: true, ns: 'ord' })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); // @ts-expect-error ordinal plural selectors require count with an explicit namespace i18next.t(($) => $.place, { ordinal: true, ns: 'ord' }); }); it('should throw error with invalid key', () => { // @ts-expect-error assertType(i18next.t(($) => $.invalid_key, { ns: 'custom' })); }); it('should throw error with invalid namespace', () => { // @ts-expect-error assertType(i18next.t(($) => $.test, { ns: 'custom' })); // @ts-expect-error assertType(i18next.t(($) => $.test.bar)); }); }); i18next-i18next-db698b1/test/typescript/selector-custom-types/params.test.ts000066400000000000000000000027731527173754700272540ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction, SelectorParam } from 'i18next'; describe('Parameters', () => { it('should resolve first parameter to a callable type', () => { type FirstParam = Parameters>[0]; // Parameters<> resolves against the last overload (TS limitation). // After reordering, the last overload is the general selector, so // the first parameter should be a function, not SelectorKey. expectTypeOf().toBeFunction(); }); it('should allow extracting parameters from TFunction with default namespace', () => { type FirstParam = Parameters[0]; expectTypeOf().toBeFunction(); }); }); describe('SelectorParam', () => { it('should accept a valid selector function for the default namespace', () => { type Param = SelectorParam; expectTypeOf().toBeFunction(); // Should be usable as a prop type const fn: Param = ($) => $.bar; expectTypeOf(fn).toEqualTypeOf(); }); it('should accept a valid selector function for a specific namespace', () => { type Param = SelectorParam<'custom'>; const fn: Param = ($) => $.bar; expectTypeOf(fn).toEqualTypeOf(); }); it('should reject invalid keys', () => { type Param = SelectorParam<'custom'>; // @ts-expect-error — 'nonexistent' is not a valid key // eslint-disable-next-line @typescript-eslint/no-unused-vars const fn: Param = ($) => $.nonexistent; }); }); i18next-i18next-db698b1/test/typescript/selector-custom-types/t.bench.ts000066400000000000000000000003631527173754700263250ustar00rootroot00000000000000import { bench } from '@arktype/attest'; import {} from './i18next'; import type { TFunction } from 'i18next'; declare const t: TFunction; bench('selector usage benchmark', () => { t(($) => $.baz.bing); }).types([3392, 'instantiations']); i18next-i18next-db698b1/test/typescript/selector-custom-types/t.test.ts000066400000000000000000000323531527173754700262310ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import { TFunction } from 'i18next'; describe('t', () => { describe('default namespace usage', () => { const t: TFunction = (() => '') as never; it('should work with standard keys', () => { expectTypeOf(t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.foo)).toEqualTypeOf<'foo'>(); expectTypeOf(t(($) => $.inter, { val: 'xx' })).toEqualTypeOf<'some {{val}}'>(); expectTypeOf(t(($) => $.baz.bing)).toEqualTypeOf<'boop'>(); }); it('should work with `returnObjects`', () => { expectTypeOf(t(($) => $.baz, { returnObjects: true })).toEqualTypeOf<{ bing: 'boop' }>(); }); it('should throw an error when keys are not defined', () => { // @ts-expect-error assertType(t(($) => $.does_not_exist, { wrongOrNoValPassed: 'xx' })); // @ts-expect-error assertType(t(($) => $.baz)); // @ts-expect-error assertType(t(($) => $.foobar)); }); it('should work when using `t` inside another `t` function', () => { expectTypeOf(t(($) => $.foo, { defaultValue: t(($) => $.bar) })).toEqualTypeOf< 'foo' | 'bar' >(); expectTypeOf(t(($) => $.foo, { something: t(($) => $.bar) })).toEqualTypeOf<'foo'>(); expectTypeOf( t(($) => $.foo, { defaultValue: t(($) => $.bar), something: t(($) => $.bar) }), ).toEqualTypeOf<'foo' | 'bar'>(); }); }); describe('named default namespace usage', () => { const t: TFunction<'alternate'> = (() => '') as never; it('should work with standard key', () => { expectTypeOf(t(($) => $.baz)).toEqualTypeOf<'baz'>(); expectTypeOf(t(($) => $.foobar.barfoo)).toEqualTypeOf<'barfoo'>(); expectTypeOf(t(($) => $.foobar.deep.deeper.deeeeeper)).toEqualTypeOf<'foobar'>(); }); it('should throw an error when key is not present inside namespace', () => { // @ts-expect-error assertType(t(($) => $.bar)); // @ts-expect-error assertType(t(($) => $.foobar.barfoo, { ns: 'ctx' })); // @ts-expect-error assertType(t(($) => $.foobar)); }); it('should work with `returnObjects`', () => { expectTypeOf(t(($) => $.foobar, { returnObjects: true })).toBeObject(); expectTypeOf(t(($) => $.foobar, { returnObjects: true })).toEqualTypeOf<{ barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }>(); }); it('should raise a TypeError when `defaultValue` is provided and value should be equal to DefaultValue', () => { expectTypeOf(t(($) => $.foobar.barfoo, { defaultValue: 'some default value' })).toEqualTypeOf< 'barfoo' | 'some default value' >(); }); }); describe('array namespace', () => { const t: TFunction<['custom', 'alternate']> = (() => '') as never; /** * @example * { * custom: { * foo: 'foo'; * bar: 'bar'; * baz: { * bing: 'boop'; * }; * qux: 'some {{val, number}}'; * inter: 'some {{val}}'; * interUnescaped: 'some unescaped {{- val}}'; * interUnescapedNoSpace: 'some unescaped {{-val}}'; * interUnescapedFormatted: 'some unescaped {- val, number}}'; * nullKey: null; * 'empty string with {{val}}': ''; * } * } */ it('TODO', () => { t(($) => $.baz, { ns: 'alternate' }); }); it('should work with standard keys', () => { expectTypeOf(t(($) => $.baz.bing)).toEqualTypeOf<'boop'>(); expectTypeOf(t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.bar, { ns: 'custom' })).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.bar)).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.baz, { ns: 'alternate' })).toEqualTypeOf<'baz'>(); expectTypeOf(t(($) => $.baz, { ns: ['alternate', 'custom'] })).toEqualTypeOf<'baz'>(); expectTypeOf(t(($) => $.custom.bar, { ns: ['alternate', 'custom'] })).toEqualTypeOf<'bar'>(); expectTypeOf(t(($) => $.alternate.foobar.deep.deeper.deeeeeper)).toEqualTypeOf<'foobar'>(); expectTypeOf( t(($) => $.foobar.deep.deeper.deeeeeper, { ns: 'alternate' }), ).toEqualTypeOf<'foobar'>(); }); it('should work with `returnObjects`', () => { // t('alternate:foobar.deep').deeper.deeeeeper; // i18next would say: "key 'foobar.deep (en)' returned an object instead of string." expectTypeOf( t(($) => $.foobar.deep, { returnObjects: true, ns: 'alternate' }), ).toEqualTypeOf<{ deeper: { deeeeeper: 'foobar'; }; }>(); }); it('should throw an error when key is not present inside namespace', () => { // @ts-expect-error assertType(t(($) => $.baz)); // @ts-expect-error assertType(t(($) => $.baz, { ns: 'custom' })); // @ts-expect-error assertType(t(($) => $.foobar.deep, { ns: 'alternate' })); }); }); it('error when namespace does not exist', () => { // @ts-expect-error assertType(TFunction<'foo'>); }); it('should process ordinal plurals', () => { const t: TFunction<'ord'> = (() => '') as never; expectTypeOf(t(($) => $.place, { ordinal: true, count: 1 })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); expectTypeOf(t(($) => $.place, { ordinal: true, count: 2 })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); expectTypeOf(t(($) => $.place, { ordinal: true, count: 3 })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); expectTypeOf(t(($) => $.place, { ordinal: true, count: 4 })).toEqualTypeOf< '1st place' | '2nd place' | '3rd place' | '{{count}}th place' >(); }); describe('context', () => { const t: TFunction<'ctx'> = (() => '') as never; it('should work with basic usage', () => { expectTypeOf(t(($) => $.dessert, { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t(($) => $.dessert, { context: 'muffin', count: 3 })).toEqualTypeOf< 'a nice muffin' | '{{count}} nice muffins' >(); // @ts-expect-error // valid key with invalid context assertType(t(($) => $.dessert, { context: 'bad context' })); }); it('should accept not mapped context if a fallback key is present', () => { // wine is not mapped const currentTheme = 'wine' as 'wine' | 'beer' | 'water'; expectTypeOf(t(($) => $.beverage, { context: currentTheme })).toEqualTypeOf< 'fresh beer' | 'cold water' >(); }); it('should accept a default context key as a valid `t` function key', () => { expectTypeOf(t(($) => $.beverage_water)).toEqualTypeOf<'cold water'>(); }); it('should throw error when no `context` is provided using and the context key has no default value ', () => { // @ts-expect-error dessert has no default value, it needs a context expectTypeOf(t(($) => $.dessert)).toMatchTypeOf('error'); }); it('should work with enum as a context value', () => { enum Dessert { CAKE = 'cake', MUFFIN = 'muffin', } expectTypeOf(t(($) => $.dessert, { context: Dessert.CAKE })).toEqualTypeOf<'a nice cake'>(); const ctx: Dessert = Dessert.CAKE; expectTypeOf(t(($) => $.dessert, { context: ctx })).toEqualTypeOf<'a nice cake'>(); }); it('should not provide partial match as option when keys include context separator', () => { // https://github.com/i18next/i18next/issues/2242 // @ts-expect-error t(($) => $.beverageater); }); it('should trow error with string union with missing context value', () => { enum DessertMissingValue { COOKIE = 'cookie', CAKE = 'cake', MUFFIN = 'muffin', ANOTHER = 'another', } const ctxMissingValue = DessertMissingValue.ANOTHER; // @ts-expect-error Dessert.ANOTHER is not mapped so it must give a type error expectTypeOf(t(($) => $.dessert, { context: ctxMissingValue })).toMatchTypeOf(); }); it('should work with string union as a context value', () => { expectTypeOf( t(($) => $.dessert, { context: 'muffin' as 'muffin' | 'cake', count: 2 }), ).toEqualTypeOf<'a nice cake' | 'a nice muffin' | '{{count}} nice muffins'>(); }); // @see https://github.com/i18next/i18next/issues/2172 // it('should trow error with string union with missing context value', () => { // expectTypeOf( // // @ts-expect-error // t('dessert', { context: 'muffin' as 'muffin' | 'cake' | 'pippo' }), // ).toMatchTypeOf(); // }); }); describe('context + explicit namespace', () => { const t: TFunction<['ctx']> = (() => '') as never; it('should work with basic usage', () => { expectTypeOf(t(($) => $.dessert, { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); expectTypeOf( t(($) => $.dessert, { context: 'cake', ns: 'ctx' }), ).toEqualTypeOf<'a nice cake'>(); // context + plural expectTypeOf(t(($) => $.dessert, { context: 'muffin', count: 3 })).toEqualTypeOf< 'a nice muffin' | '{{count}} nice muffins' >(); expectTypeOf(t(($) => $.dessert, { context: 'muffin', count: 3, ns: 'ctx' })).toEqualTypeOf< 'a nice muffin' | '{{count}} nice muffins' >(); // @ts-expect-error // valid key with invalid context assertType(t(($) => $.dessert, { context: 'bad context' })); }); }); describe('context with `t` function with multiple namespaces', () => { const t: TFunction<['ctx', 'ctxAlternate']> = (() => '') as never; it('should work with basic usage', () => { expectTypeOf(t(($) => $.dessert, { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); expectTypeOf(t(($) => $.ctxAlternate.game_chess)).toEqualTypeOf<'Chess'>(); // context + plural expectTypeOf(t(($) => $.dessert, { context: 'muffin', count: 3 })).toEqualTypeOf< 'a nice muffin' | '{{count}} nice muffins' >(); // @ts-expect-error // valid key with invalid context assertType(t(($) => $.ctx.dessert, { context: 'bad context' })); }); it('should work with text value from another namespace', () => { expectTypeOf(t(($) => $.game, { ns: 'ctxAlternate' })).toEqualTypeOf<'A fun game'>(); expectTypeOf( t(($) => $.game, { context: 'monopoly', ns: 'ctxAlternate' }), ).toEqualTypeOf<'Monopoly'>(); }); }); it('should work with non-plural usage', () => { const t: TFunction<'nonPlurals'> = (() => '') as never; // this currently errors, but should not... // expectTypeOf(t('test')).toEqualTypeOf(); expectTypeOf(t(($) => $.test_2)).toEqualTypeOf<'Test 2'>(); expectTypeOf(t(($) => $.test_form.title)).toEqualTypeOf<'title'>(); }); it('each t function must have a type based on provided namespace', () => { const tOrdinal: TFunction<'ord'> = (() => '') as never; const tPlurals: TFunction<'plurals'> = (() => '') as never; const tPluralsOrd: TFunction<['plurals', 'ord']> = (() => '') as never; const tOrdPlurals: TFunction<['ord', 'plurals']> = (() => '') as never; expectTypeOf(tOrdinal).not.toMatchTypeOf(tOrdPlurals); expectTypeOf(tPlurals).not.toMatchTypeOf(tPluralsOrd); expectTypeOf(tPlurals).not.toMatchTypeOf(tOrdPlurals); expectTypeOf(tOrdinal).not.toMatchTypeOf(tPluralsOrd); expectTypeOf(tOrdPlurals).not.toMatchTypeOf(tPluralsOrd); }); describe('should work with `InterpolatorMap`', () => { const t: TFunction<['interpolator']> = (() => '') as never; it('should allow anything when key is a string', () => { expectTypeOf(t(($) => $.just_a_string, { asd: '', beep: 'boop' })); }); it('simple key', () => { expectTypeOf(t(($) => $.simple, { olim: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); // @ts-expect-error because nope isn't a valid key expectTypeOf(t(($) => $.simple, { nope: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); }); it('simple key (multiple)', () => { expectTypeOf( t(($) => $.simple_multiple_keys, { more: '', one: '' }), ).toEqualTypeOf<'This has {{more}} than {{one}}'>(); // @ts-expect-error one of the required keys is missing t(($) => $.simple_multiple_keys, { less: '', one: '' }); }); it('keypath', () => { expectTypeOf( t(($) => $.keypath, { out: { there: 'yes' } }), ).toEqualTypeOf<'Give me one day {{out.there}}'>(); expectTypeOf( t(($) => $.keypath_with_format, { out: { there: 'yes' } }), ).toEqualTypeOf<'Give me one day {{out.there, format}}'>(); }); it('keypath deep', () => { type Expected = '{{living.in.the}} in the sun'; expectTypeOf( t(($) => $.keypath_deep, { living: { in: { the: 'yes' } } }), ).toEqualTypeOf(); // @ts-expect-error one of the required keys is missing t(($) => $.keypath_deep, { suffering: { in: { the: 'yes' } } }); }); }); // https://github.com/i18next/i18next/issues/2383 it('should error when using a defined namespace that is not present in TFunction NS type parameter', () => { const t: TFunction<['alternate']> = (() => '') as never; // @ts-expect-error t(($) => $.foo, { ns: 'custom' }); }); }); i18next-i18next-db698b1/test/typescript/selector-custom-types/tsconfig.json000066400000000000000000000001451527173754700271410ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./**/*.bench.ts"] } i18next-i18next-db698b1/test/typescript/selector-issue-2398/000077500000000000000000000000001527173754700235115ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-issue-2398/i18next.d.ts000066400000000000000000000003621527173754700256040ustar00rootroot00000000000000import 'i18next'; import translation from './translation.json'; declare module 'i18next' { interface CustomTypeOptions { resources: { translation: typeof translation; }; enableSelector: true; returnNull: false; } } i18next-i18next-db698b1/test/typescript/selector-issue-2398/t.test.ts000066400000000000000000000030051527173754700253000ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction } from 'i18next'; // Reproduces https://github.com/i18next/i18next/issues/2398 // // When a JSON array has objects with different key sets (one with a context // variant like `transKey1_withContext`, one without), TypeScript merges all // keys into a single element type. The selector overload with `context` must // still preserve `transKey1` and `transKey2` on every element after filtering. describe('issue #2398 - returnObjects + context + array with selector', () => { const t = (() => []) as unknown as TFunction; it('should return full object shape for all array elements, not a union of partial types', () => { const result = t(($) => $.transWithArray, { returnObjects: true, context: 'withContext', }); expectTypeOf(result[0]).toHaveProperty('transKey1'); expectTypeOf(result[0]).toHaveProperty('transKey2'); expectTypeOf(result[0].transKey1).toEqualTypeOf(); expectTypeOf(result[0].transKey2).toEqualTypeOf(); }); it('should also work when context and plurals are combined on array elements', () => { const result = t(($) => $.transWithArrayAndPlurals, { returnObjects: true, context: 'withContext', count: 5, }); expectTypeOf(result[0]).toHaveProperty('transKey1'); expectTypeOf(result[0]).toHaveProperty('transKey2'); expectTypeOf(result[0].transKey1).toEqualTypeOf(); expectTypeOf(result[0].transKey2).toEqualTypeOf(); }); }); i18next-i18next-db698b1/test/typescript/selector-issue-2398/translation.json000066400000000000000000000015051527173754700267430ustar00rootroot00000000000000{ "transWithArray": [ { "transKey1": "Hello trans key 1 from object 1", "transKey2": "Hello trans key 2 from object 1" }, { "transKey1": "Hello trans key 1 from object 2", "transKey1_withContext": "Hello trans key 2 from object 2context", "transKey2": "Hello trans key 2 from object 2" } ], "transWithArrayAndPlurals": [ { "transKey1": "Hello singular from object 1", "transKey1_other": "Hello plural from object 1", "transKey2": "Hello trans key 2 from object 1" }, { "transKey1": "Hello singular from object 2", "transKey1_withContext": "Hello context from object 2", "transKey1_other": "Hello plural from object 2", "transKey2": "Hello trans key 2 from object 2" } ], "otherTransKey": "Hello from the other trans key" } i18next-i18next-db698b1/test/typescript/selector-issue-2398/tsconfig.json000066400000000000000000000002161527173754700262170ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "compilerOptions": { "resolveJsonModule": true }, "include": ["./**/*"], "exclude": [] } i18next-i18next-db698b1/test/typescript/selector-json-format/000077500000000000000000000000001527173754700242155ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-json-format/i18next.d.ts000066400000000000000000000005261527173754700263120ustar00rootroot00000000000000import 'i18next'; import ns1 from './ns1.json'; import ns2 from './ns2.json'; import ns3 from './ns3.json'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'ns1'; contextSeparator: '|'; enableSelector: true; resources: { ns1: typeof ns1; ns2: typeof ns2; ns3: typeof ns3; }; } } i18next-i18next-db698b1/test/typescript/selector-json-format/ns1.json000066400000000000000000000023511527173754700256120ustar00rootroot00000000000000{ "beverage": "beverage", "beverage|beer": "beer", "tea_one": "a cuppa tea and a lie down", "tea_other": "{{count}} cups of tea and a big sleep", "dessert|cake": "a nice cake", "dessert|muffin_one": "a nice muffin", "dessert|muffin_other": "{{count}} nice muffins", "coffee": { "drip": { "black": "a strong cup of black coffee" }, "bar": { "shot": "a shot of espresso", "espresso|americano": "a hot americano", "espresso|latte_one": "a foamy latte", "espresso|latte_other": "{{count}} foamy lattes", "espresso|cappuccino_one": "a dry cappuccino", "espresso|cappuccino_other": "{{count}} dry cappuccinos" } }, "sodas": { "coca_cola": { "coke": "a can of coke", "coke|diet_one": "a can of diet coke", "coke|diet_other": "{{count}} cans of diet coke" }, "faygo": { "purple": "purple faygo", "orange_one": "one orange faygo", "orange_other": "{{count}} orange faygo" } }, "interpolation": { "val": "Interpolated {{val}}" }, "array": [ "element one", { "elementTwo": "element two" }, { "elementThree": [ { "nestedElementThree": "element three" } ] } ] } i18next-i18next-db698b1/test/typescript/selector-json-format/ns2.json000066400000000000000000000000421527173754700256060ustar00rootroot00000000000000{ "fromNs2": "hello from ns2" } i18next-i18next-db698b1/test/typescript/selector-json-format/ns3.json000066400000000000000000000000421527173754700256070ustar00rootroot00000000000000{ "fromNs3": "hello from ns3" } i18next-i18next-db698b1/test/typescript/selector-json-format/t.bench.ts000066400000000000000000000004321527173754700261050ustar00rootroot00000000000000import { bench } from '@arktype/attest'; import {} from './i18next'; import type { TFunction } from 'i18next'; declare const t: TFunction; bench('selector usage benchmark', () => { t(($) => $.coffee.bar['espresso|cappuccino'], { count: 1 }); }).types([6669, 'instantiations']); i18next-i18next-db698b1/test/typescript/selector-json-format/t.test.ts000066400000000000000000000116241527173754700260120ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import { getFixedT, TFunction } from 'i18next'; declare const t: TFunction; describe('t', () => { it('basic selector usage', () => { expectTypeOf(t(($) => $.beverage)).toBeString(); expectTypeOf(t(($) => $['beverage|beer'])).toBeString(); expectTypeOf(t(($) => $.coffee.bar['espresso|americano'])).toBeString(); expectTypeOf(t(($) => $.coffee.bar['espresso|cappuccino'], { count: 1 })).toBeString(); expectTypeOf(t(($) => $.coffee.bar['espresso|cappuccino'], { count: 1 })).toBeString(); // @ts-expect-error: plural keys have been removed t(($) => $.coffee.bar['espresso|cappuccino_one']); expectTypeOf(t(($) => $.coffee.bar['espresso|cappuccino'], { count: 1 })).toBeString(); // @ts-expect-error: plural keys have been removed t(($) => $.coffee.bar['espresso|cappuccino_other']); expectTypeOf(t(($) => $.coffee.bar['espresso|latte'], { count: 1 })).toBeString(); expectTypeOf(t(($) => $.coffee.bar['espresso|latte'], { count: 1 })).toBeString(); // @ts-expect-error: plural keys have been removed t(($) => $.coffee.bar['espresso|latte_one']); // @ts-expect-error: plural keys have been removed t(($) => $.coffee.bar['espresso|latte_other']); expectTypeOf(t(($) => $.coffee.bar.shot)).toBeString(); expectTypeOf(t(($) => $.coffee.drip.black)).toBeString(); expectTypeOf(t(($) => $['dessert|cake'])).toBeString(); expectTypeOf(t(($) => $['dessert|muffin'], { count: 1 })).toBeString(); expectTypeOf(t(($) => $['dessert|muffin'], { count: 1 })).toBeString(); // @ts-expect-error: plural keys have been removed t(($) => $['dessert|muffin_one']); // @ts-expect-error: plural keys have been removed t(($) => $['dessert|muffin_other']); expectTypeOf(t(($) => $.sodas.coca_cola.coke)).toBeString(); expectTypeOf(t(($) => $.sodas.coca_cola['coke|diet'], { count: 1 })).toBeString(); expectTypeOf(t(($) => $.sodas.coca_cola['coke|diet'], { count: 1 })).toBeString(); // @ts-expect-error: plural keys have been removed t(($) => $.sodas.coca_cola['coke|diet_one']); // @ts-expect-error: plural keys have been removed t(($) => $.sodas.coca_cola['coke|diet_other']); expectTypeOf(t(($) => $.sodas.faygo.orange, { count: 1 })).toBeString(); // @ts-expect-error: plural keys have been removed t(($) => $.sodas.faygo.orange_one); // @ts-expect-error: plural keys have been removed t(($) => $.sodas.faygo.orange_other); expectTypeOf(t(($) => $.sodas.faygo.purple)).toBeString(); expectTypeOf(t(($) => $.tea, { count: 1 })).toBeString(); expectTypeOf(t(($) => $.tea, { count: 1 })).toBeString(); // @ts-expect-error: plural keys are removed t(($) => $.tea_other); }); it('selector works with context', () => { expectTypeOf(t(($) => $.dessert, { context: 'cake' })).toBeString(); expectTypeOf(t(($) => $.dessert, { context: 'muffin', count: 2 })).toBeString(); expectTypeOf(t(($) => $.coffee.bar.espresso, { context: 'cappuccino', count: 2 })).toBeString(); expectTypeOf(t(($) => $.coffee.bar.espresso, { context: 'latte', count: 3 })).toBeString(); expectTypeOf(t(($) => $.sodas.coca_cola.coke, { context: 'diet', count: 1 })).toBeString(); }); it('getFixedT', () => { const fixedT = getFixedT(null, 'ns1', 'coffee'); expectTypeOf(fixedT(($) => $.bar.shot)).toBeString(); }); it('namespace: single', () => { expectTypeOf(t(($) => $.fromNs2, { ns: 'ns2' })).toBeString(); }); it('namespace: multiple', () => { expectTypeOf(t(($) => $.fromNs2, { ns: ['ns2', 'ns3'] })).toBeString(); expectTypeOf(t(($) => $.fromNs3, { ns: ['ns3', 'ns2'] })).toBeString(); }); it('returnObjects', () => { expectTypeOf(t(($) => $.sodas.faygo, { returnObjects: true })).toEqualTypeOf<{ purple: string; orange: string; }>(); }); it('defaultValue', () => { expectTypeOf(t(($) => $.beverage, { defaultValue: 'defaultValue' })).toBeString(); expectTypeOf(t(($) => $['beverage|beer'], { defaultValue: 'defaultValue' })).toBeString(); }); it('returnObjects + defaultValue', () => { expectTypeOf( t(($) => $.coffee.bar, { returnObjects: true, defaultValue: 'defaultValue' }), ).toEqualTypeOf< | 'defaultValue' | { shot: string; 'espresso|americano': string; 'espresso|latte': string; 'espresso|cappuccino': string; } >(); }); it('defaultValue + context', () => { expectTypeOf( t(($) => $.beverage, { context: 'beer', defaultValue: 'defaultValue' }), ).toBeString(); }); it('returnObjects + defaultValue + context', () => { expectTypeOf( t(($) => $.beverage, { returnObjects: true, defaultValue: 'defaultValue', context: 'beer' }), ).toBeString(); }); it('supports interpolation', () => { expectTypeOf(t(($) => $.interpolation.val, { val: '' })).toBeString(); }); }); i18next-i18next-db698b1/test/typescript/selector-json-format/tsconfig.json000066400000000000000000000001451527173754700267240ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./**/*.bench.ts"] } i18next-i18next-db698b1/test/typescript/selector-no-resources-return-objects/000077500000000000000000000000001527173754700273465ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-no-resources-return-objects/i18next.d.ts000066400000000000000000000002071527173754700314370ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { enableSelector: true; returnObjects: true; } } i18next-i18next-db698b1/test/typescript/selector-no-resources-return-objects/t.bench.ts000066400000000000000000000003651527173754700312430ustar00rootroot00000000000000import { bench } from '@arktype/attest'; import {} from './i18next'; import type { TFunction } from 'i18next'; declare const t: TFunction; bench('selector usage benchmark', () => { t(($) => $.a.b.c.d.e.f); }).types([382, 'instantiations']); i18next-i18next-db698b1/test/typescript/selector-no-resources-return-objects/t.test.ts000066400000000000000000000014721527173754700311430ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction, DefaultTReturn, SelectorOptions } from 'i18next'; declare const t: TFunction; describe('t', () => { it('allows arbitrary traversal when resources is not defined, and always returns type string', () => { expectTypeOf(t(($) => $.a)).toEqualTypeOf>(); expectTypeOf(t(($) => $.a[0])).toEqualTypeOf>(); expectTypeOf(t(($) => $.a[0].b)).toEqualTypeOf>(); expectTypeOf(t(($) => $.a[0].b[1])).toEqualTypeOf>(); expectTypeOf(t(($) => $.a[0].b[1].c)).toEqualTypeOf>(); expectTypeOf(t(($) => $.a[0].b[1].c[2])).toEqualTypeOf>(); }); }); i18next-i18next-db698b1/test/typescript/selector-no-resources-return-objects/tsconfig.json000066400000000000000000000001451527173754700320550ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./**/*.bench.ts"] } i18next-i18next-db698b1/test/typescript/selector-no-resources/000077500000000000000000000000001527173754700244025ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-no-resources/i18next.d.ts000066400000000000000000000001561527173754700264760ustar00rootroot00000000000000import 'i18next'; declare module 'i18next' { interface CustomTypeOptions { enableSelector: true; } } i18next-i18next-db698b1/test/typescript/selector-no-resources/t.bench.ts000066400000000000000000000003651527173754700262770ustar00rootroot00000000000000import { bench } from '@arktype/attest'; import {} from './i18next'; import type { TFunction } from 'i18next'; declare const t: TFunction; bench('selector usage benchmark', () => { t(($) => $.a.b.c.d.e.f); }).types([438, 'instantiations']); i18next-i18next-db698b1/test/typescript/selector-no-resources/t.test.ts000066400000000000000000000012031527173754700261670ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction } from 'i18next'; declare const t: TFunction; describe('t', () => { it('allows arbitrary traversal when resources is not defined, and always returns type string', () => { expectTypeOf(t(($) => $.a)).toEqualTypeOf(); expectTypeOf(t(($) => $.a[0])).toEqualTypeOf(); expectTypeOf(t(($) => $.a[0].b)).toEqualTypeOf(); expectTypeOf(t(($) => $.a[0].b[1])).toEqualTypeOf(); expectTypeOf(t(($) => $.a[0].b[1].c)).toEqualTypeOf(); expectTypeOf(t(($) => $.a[0].b[1].c[2])).toEqualTypeOf(); }); }); i18next-i18next-db698b1/test/typescript/selector-no-resources/tsconfig.json000066400000000000000000000001451527173754700271110ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./**/*.bench.ts"] } i18next-i18next-db698b1/test/typescript/selector-optimize/000077500000000000000000000000001527173754700236165ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-optimize/i18next.d.ts000066400000000000000000000004121527173754700257050ustar00rootroot00000000000000import 'i18next'; import ns1 from '../test.namespace.extra-large.json'; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'ns1'; contextSeparator: '|'; enableSelector: 'optimize'; resources: { ns1: typeof ns1; }; } } i18next-i18next-db698b1/test/typescript/selector-optimize/t.bench.ts000066400000000000000000000004441527173754700255110ustar00rootroot00000000000000import { bench } from '@arktype/attest'; import {} from './i18next'; import type { TFunction } from 'i18next'; declare const t: TFunction; bench('selector usage benchmark', () => { t(($) => $.z2_mA5z$.D1_N9I.C.HvalueOf.A2$R$.Ais.CY3.Z3DV$2$$_1.CA_len); }).types([459, 'instantiations']); i18next-i18next-db698b1/test/typescript/selector-optimize/tsconfig.json000066400000000000000000000001451527173754700263250ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./**/*.bench.ts"] } i18next-i18next-db698b1/test/typescript/selector-strict-interpolation-checks/000077500000000000000000000000001527173754700274115ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-strict-interpolation-checks/i18next.d.ts000066400000000000000000000005751527173754700315120ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceCustom, TestNamespaceInterpolators } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { strictInterpolationChecks: true; enableSelector: true; defaultNS: 'interpolators'; resources: { custom: TestNamespaceCustom; interpolators: TestNamespaceInterpolators; }; } } i18next-i18next-db698b1/test/typescript/selector-strict-interpolation-checks/t.test.ts000066400000000000000000000033041527173754700312020ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { SelectorParam, TFunction } from 'i18next'; describe('strictInterpolationChecks with the selector API', () => { const t = (() => '') as unknown as TFunction<'interpolators'>; it('requires the options for a string with variables', () => { expectTypeOf(t(($) => $.simple, { olim: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf( t(($) => $.simple, { olim: 'yes', defaultValue: 'other default value' }), ).toEqualTypeOf<'This is {{olim}}' | 'other default value'>(); // @ts-expect-error options are required for a string with variables t(($) => $.simple); // @ts-expect-error missing variable t(($) => $.simple, { defaultValue: 'other default value' }); // @ts-expect-error misspelled variable t(($) => $.simple, { olmi: 'yes' }); }); it('applies to an array of selectors', () => { t([($) => $.simple, ($) => $.simple_multiple_keys], { olim: '', more: '', one: '' }); // @ts-expect-error options are required for a string with variables t([($) => $.simple, ($) => $.simple_multiple_keys]); // @ts-expect-error missing variable t([($) => $.simple, ($) => $.simple_multiple_keys], { olim: '' }); }); it('leaves a string without variables alone', () => { expectTypeOf(t(($) => $.just_a_string)).toEqualTypeOf(); }); it('a SelectorParam prop keeps compiling', () => { // `SelectorParam` resolves to `string`, so a component that takes a selector // as a prop is not affected by the flag; the check happens at its call site. function label(selector: SelectorParam<'interpolators'>) { return t(selector); } label(($) => $.simple); }); }); i18next-i18next-db698b1/test/typescript/selector-strict-interpolation-checks/tsconfig.json000066400000000000000000000002161527173754700321170ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "compilerOptions": { "noErrorTruncation": true }, "exclude": [] } i18next-i18next-db698b1/test/typescript/selector-strict-key-checks/000077500000000000000000000000001527173754700253125ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-strict-key-checks/i18next.d.ts000066400000000000000000000015111527173754700274020ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceCustom, TestNamespaceCustomAlternate, TestNamespaceFallback, TestNamespaceInterpolators, } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { strictKeyChecks: true; defaultNS: 'custom'; fallbackNS: 'fallback'; enableSelector: true; resources: { custom: TestNamespaceCustom; alternate: TestNamespaceCustomAlternate; fallback: TestNamespaceFallback; interpolators: TestNamespaceInterpolators; arrayKeys: { arrayOfStrings: ['zero', 'one']; readonlyArrayOfStrings: readonly ['readonly zero', 'readonly one']; arrayOfObjects: [ { foo: 'bar' }, { fizz: 'buzz' }, [{ test: 'success'; sub: { deep: 'still success' } }], ]; }; }; } } i18next-i18next-db698b1/test/typescript/selector-strict-key-checks/i18nextT.test.ts000066400000000000000000000026741527173754700302750ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('i18next.t defaultValue with strictKeyChecks == true', () => { it('should resolve to the correct type when `defaultValue` is provided and key exists', () => { expectTypeOf(i18next.t(($) => $.foobar.barfoo, { ns: 'alternate' })).toEqualTypeOf<'barfoo'>(); expectTypeOf( i18next.t(($) => $.foobar.barfoo, { defaultValue: 'some default value', ns: 'alternate' }), ).toEqualTypeOf<'barfoo' | 'some default value'>(); expectTypeOf( i18next.t(($) => $.bar, { defaultValue: 'some default value', ns: 'custom' }), ).toEqualTypeOf<'bar' | 'some default value'>(); }); it('should throw an error even when `defaultValue` is provided if key is missing', () => { expectTypeOf( i18next.t(($) => $.bar, { ns: 'custom', defaultValue: 'some default value' }), ).toEqualTypeOf<'bar' | 'some default value'>(); expectTypeOf(i18next.t(($) => $.bar, { defaultValue: 'some default value' })).toEqualTypeOf< 'bar' | 'some default value' >(); // @ts-expect-error assertType(i18next.t(($) => $['unknown-key'])); assertType( // @ts-expect-error i18next.t(($) => $['unknown-key'], { ns: 'custom', defaultValue: 'some default value' }), ); assertType( // @ts-expect-error i18next.t(($) => $['unknown-key'], { ns: 'unknown-ns', defaultValue: 'default value' }), ); }); }); i18next-i18next-db698b1/test/typescript/selector-strict-key-checks/t.test.ts000066400000000000000000000107511527173754700271070ustar00rootroot00000000000000import { describe, it, expectTypeOf, assertType } from 'vitest'; import { TFunction } from 'i18next'; describe('basic usage with strictKeyChecks == true', () => { const t: TFunction<'alternate'> = (() => '') as never; it('should resolve to the correct type when `defaultValue` is provided and key exists', () => { expectTypeOf(t(($) => $.foobar.barfoo)).toEqualTypeOf<'barfoo'>(); expectTypeOf(t(($) => $.foobar.barfoo, { defaultValue: 'some default value' })).toEqualTypeOf< 'barfoo' | 'some default value' >(); }); it('should throw an error when key is missing (even when `defaultValue` is provided)', () => { // @ts-expect-error assertType(t(($) => $.new)); // @ts-expect-error assertType(t(($) => $.new, { defaultValue: 'some default value' })); }); it('should work alongside `returnObjects`', () => { expectTypeOf(t(($) => $.foobar, { returnObjects: true })).toEqualTypeOf<{ barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }>(); expectTypeOf( t(($) => $.foobar, { returnObjects: true, defaultValue: 'some default value' }), ).toEqualTypeOf< | 'some default value' | { barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; } >(); expectTypeOf( // @ts-expect-error t(($) => $.nonExistent, { returnObjects: true, defaultValue: 'some default value' }), ); }); }); describe('basic array access with strictKeyChecks == true', () => { const t: TFunction<['arrayKeys']> = (() => '') as never; it('works with simple usage', () => { expectTypeOf(t(($) => $.arrayOfStrings[0])).toEqualTypeOf<'zero'>(); expectTypeOf( t(($) => $.arrayOfObjects[2][0].test, { defaultValue: 'some default value' }), ).toEqualTypeOf<'success' | 'some default value'>(); expectTypeOf( t(($) => $.arrayOfObjects[2][0].sub.deep, { defaultValue: 'some default value' }), ).toEqualTypeOf<'still success' | 'some default value'>(); }); it('should throw an error when key is not present', () => { // @ts-expect-error assertType(t(($) => $.arrayOfStrings[2])); // @ts-expect-error assertType(t(($) => $.arrayOfStrings[2], { defaultValue: 'some default value' })); // @ts-expect-error assertType(t(($) => $.arrayOfObjects[2].sub.deep)); // @ts-expect-error assertType(t(($) => $.arrayOfObjects[2].test, { defaultValue: 'some default value' })); }); it('should work with `returnObjects`', () => { expectTypeOf(t(($) => $.arrayOfStrings, { returnObjects: true })).toBeArray(); expectTypeOf(t(($) => $.arrayOfObjects, { returnObjects: true })).toEqualTypeOf< [{ foo: 'bar' }, { fizz: 'buzz' }, [{ test: 'success'; sub: { deep: 'still success' } }]] >(); expectTypeOf(t(($) => $.arrayOfObjects[0], { returnObjects: true })).toEqualTypeOf<{ foo: 'bar'; }>(); expectTypeOf( // @ts-expect-error t(($) => $.nonExistent, { returnObjects: true, defaultValue: 'some default value' }), ); }); }); describe('interpolation values with strictKeyChecks == true', () => { const t: TFunction<['interpolators']> = (() => '') as never; it('should allow anything when key is a string', () => { expectTypeOf(t(($) => $.just_a_string, { asd: '', beep: 'boop' })).toEqualTypeOf(); expectTypeOf( t(($) => $.just_a_string, { asd: '', beep: 'boop', defaultValue: 'some default value' }), ).toEqualTypeOf(); }); it('simple key', () => { expectTypeOf(t(($) => $.simple)).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf(t(($) => $.simple, { olim: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf( t(($) => $.simple, { olim: 'yes', defaultValue: 'other default value' }), ).toEqualTypeOf<'This is {{olim}}' | 'other default value'>(); // @ts-expect-error because nope isn't a valid key expectTypeOf(t(($) => $.simple, { nope: 'yes' })).toEqualTypeOf(); expectTypeOf( // @ts-expect-error because nope isn't a valid key t(($) => $.simple, { nope: 'yes', defaultValue: 'some default value' }), ).toEqualTypeOf(); expectTypeOf( // @ts-expect-error because nope isn't a valid key t(($) => $.simple, { nope: 'yes', defaultValue: 'other default value' }), ).toEqualTypeOf(); // @ts-expect-error because nonexisting isn't found in namespace expectTypeOf(t(($) => $.nonexisting, { nope: 'yes' })); }); }); i18next-i18next-db698b1/test/typescript/selector-strict-key-checks/tsconfig.json000066400000000000000000000002161527173754700300200ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "compilerOptions": { "noErrorTruncation": true }, "exclude": [] } i18next-i18next-db698b1/test/typescript/selector-strict/000077500000000000000000000000001527173754700232665ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector-strict/i18next.d.ts000066400000000000000000000010061527173754700253550ustar00rootroot00000000000000import 'i18next'; declare const ns1: { beverage: 'beverage'; coffee: { drip: { black: 'a strong cup of black coffee'; }; }; }; declare const ns2: { fromNs2: 'hello from ns2'; nested: { deep: 'deeply nested in ns2'; }; }; declare const ns3: { fromNs3: 'hello from ns3'; }; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'ns1'; enableSelector: 'strict'; resources: { ns1: typeof ns1; ns2: typeof ns2; ns3: typeof ns3; }; } } i18next-i18next-db698b1/test/typescript/selector-strict/t.test.ts000066400000000000000000000052271527173754700250650ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next, { getFixedT, TFunction } from 'i18next'; // Under `enableSelector: 'strict'`, `NsResource` drops its flattened-primary // form: every namespace is reachable only via `$..…`, never flat on `$`. // This applies uniformly to single-ns hooks and multi-ns hooks alike. declare const t: TFunction; describe('t (strict)', () => { it('requires the primary namespace as the first selector segment', () => { // Flat primary access is gone — the next line would have typechecked under // the default `enableSelector: true` mode. // @ts-expect-error strict mode forbids flat primary access t(($) => $.beverage); expectTypeOf(t(($) => $.ns1.beverage)).toEqualTypeOf<'beverage'>(); expectTypeOf(t(($) => $.ns1.coffee.drip.black)).toEqualTypeOf<'a strong cup of black coffee'>(); }); it('exposes secondary namespaces uniformly with the primary', () => { const tMulti = i18next.getFixedT(null, ['ns1', 'ns2']); expectTypeOf(tMulti(($) => $.ns1.beverage)).toEqualTypeOf<'beverage'>(); expectTypeOf(tMulti(($) => $.ns2.fromNs2)).toEqualTypeOf<'hello from ns2'>(); expectTypeOf(tMulti(($) => $.ns2.nested.deep)).toEqualTypeOf<'deeply nested in ns2'>(); }); it('rejects accessing a namespace not in the scope', () => { const tMulti = i18next.getFixedT(null, ['ns1', 'ns2']); // ns3 is not in the hook's namespace list, so it's not on $. // @ts-expect-error ns3 is not in scope tMulti(($) => $.ns3.fromNs3); }); it('single-ns hook: still requires the namespace prefix', () => { const tSingle = i18next.getFixedT(null, 'ns2'); expectTypeOf(tSingle(($) => $.ns2.fromNs2)).toEqualTypeOf<'hello from ns2'>(); // @ts-expect-error no flat access even under single-ns scope tSingle(($) => $.fromNs2); }); it('explicit ns opt narrows the scope', () => { expectTypeOf(t(($) => $.ns2.fromNs2, { ns: 'ns2' })).toEqualTypeOf<'hello from ns2'>(); // @ts-expect-error wrong namespace under explicit ns opt t(($) => $.ns1.beverage, { ns: 'ns2' }); }); it('getFixedT works the same way', () => { expectTypeOf(getFixedT(null, 'ns1')(($) => $.ns1.beverage)).toEqualTypeOf<'beverage'>(); }); it('getFixedT scopes the returned t to a selector keyPrefix', () => { // The selector-form `keyPrefix` overload is gated on `enableSelector`, so // 'strict' has to be listed alongside `true` and 'optimize' — otherwise the // overload drops out and keyPrefix scoping is silently lost. const tScoped = getFixedT(null, 'ns2', ($) => $.ns2.nested); expectTypeOf(tScoped(($) => $.deep)).toEqualTypeOf<'deeply nested in ns2'>(); }); }); i18next-i18next-db698b1/test/typescript/selector-strict/tsconfig.json000066400000000000000000000001031527173754700257670ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"] } i18next-i18next-db698b1/test/typescript/selector/000077500000000000000000000000001527173754700217605ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/selector/i18next.d.ts000066400000000000000000000036201527173754700240530ustar00rootroot00000000000000import 'i18next'; declare const ns1: { /** * ## {@link ns1.beverage `ns1.beverage`} * * A drink, or whatever. * * See also: * * - {@link ns1.coffee `ns1.coffee`} * - {@link ns1.sodas.coca_cola `ns1.sodas.coca_cola`} * - {@link ns1.sodas.faygo `ns1.sodas.faygo`} */ beverage: 'beverage'; 'beverage|beer': 'beer'; tea_one: 'a cuppa tea and a lie down'; tea_other: '{{count}} cups of tea and a big sleep'; soup_one: 'a bowl of soup'; soup_other: 'several bowls of soup'; 'dessert|cake': 'a nice cake'; 'dessert|muffin_one': 'a nice muffin'; 'dessert|muffin_other': '{{count}} nice muffins'; coffee: { drip: { black: 'a strong cup of black coffee'; }; bar: { shot: 'a shot of espresso'; 'espresso|americano': 'a hot americano'; 'espresso|latte_one': 'a foamy latte'; 'espresso|latte_other': '{{count}} foamy lattes'; 'espresso|cappuccino_one': 'a dry cappuccino'; 'espresso|cappuccino_other': '{{count}} dry cappuccinos'; }; }; sodas: { coca_cola: { coke: 'a can of coke'; 'coke|diet_one': 'a can of diet coke'; 'coke|diet_other': '{{count}} cans of diet coke'; }; faygo: { purple: 'purple faygo'; orange_one: 'one orange faygo'; orange_other: '{{count}} orange faygo'; }; }; interpolation: { val: 'Interpolated {{val}}'; }; array: [ 'element one', { elementTwo: 'element two'; }, { elementThree: [ { nestedElementThree: 'element three'; }, ]; }, ]; }; declare const ns2: { fromNs2: 'hello from ns2'; }; declare const ns3: { fromNs3: 'hello from ns3'; }; declare module 'i18next' { interface CustomTypeOptions { defaultNS: 'ns1'; contextSeparator: '|'; enableSelector: true; resources: { ns1: typeof ns1; ns2: typeof ns2; ns3: typeof ns3; }; } } i18next-i18next-db698b1/test/typescript/selector/t.bench.ts000066400000000000000000000004321527173754700236500ustar00rootroot00000000000000import { bench } from '@arktype/attest'; import {} from './i18next'; import type { TFunction } from 'i18next'; declare const t: TFunction; bench('selector usage benchmark', () => { t(($) => $.coffee.bar['espresso|cappuccino'], { count: 1 }); }).types([6646, 'instantiations']); i18next-i18next-db698b1/test/typescript/selector/t.test.ts000066400000000000000000000352051527173754700235560ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import i18next, { getFixedT, TFunction, keyFromSelector, SelectorKey } from 'i18next'; declare const t: TFunction; describe('t', () => { it('basic selector usage', () => { expectTypeOf(t(($) => $.beverage)).toEqualTypeOf<'beverage'>(); expectTypeOf(t(($) => $['beverage|beer'])).toEqualTypeOf<'beer'>(); expectTypeOf(t(($) => $.coffee.bar['espresso|americano'])).toEqualTypeOf<'a hot americano'>(); expectTypeOf(t(($) => $.coffee.bar['espresso|cappuccino'], { count: 1 })).toEqualTypeOf< 'a dry cappuccino' | '{{count}} dry cappuccinos' >(); expectTypeOf(t(($) => $.coffee.bar['espresso|cappuccino'], { count: 1 })).toEqualTypeOf< 'a dry cappuccino' | '{{count}} dry cappuccinos' >(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $.coffee.bar['espresso|cappuccino_one']), ).toEqualTypeOf<'a dry cappuccino'>(); expectTypeOf(t(($) => $.coffee.bar['espresso|cappuccino'], { count: 1 })).toEqualTypeOf< 'a dry cappuccino' | '{{count}} dry cappuccinos' >(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $.coffee.bar['espresso|cappuccino_other']), ).toEqualTypeOf<'{{count}} dry cappuccinos'>(); expectTypeOf(t(($) => $.coffee.bar['espresso|latte'], { count: 1 })).toEqualTypeOf< 'a foamy latte' | '{{count}} foamy lattes' >(); expectTypeOf(t(($) => $.coffee.bar['espresso|latte'], { count: 1 })).toEqualTypeOf< 'a foamy latte' | '{{count}} foamy lattes' >(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $.coffee.bar['espresso|latte_one']), ).toEqualTypeOf<'a foamy latte'>(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $.coffee.bar['espresso|latte_other']), ).toEqualTypeOf<'{{count}} foamy lattes'>(); expectTypeOf(t(($) => $.coffee.bar.shot)).toEqualTypeOf<'a shot of espresso'>(); expectTypeOf(t(($) => $.coffee.drip.black)).toEqualTypeOf<'a strong cup of black coffee'>(); expectTypeOf(t(($) => $['dessert|cake'])).toEqualTypeOf<'a nice cake'>(); expectTypeOf(t(($) => $['dessert|muffin'], { count: 1 })).toEqualTypeOf< 'a nice muffin' | '{{count}} nice muffins' >(); expectTypeOf(t(($) => $['dessert|muffin'], { count: 1 })).toEqualTypeOf< 'a nice muffin' | '{{count}} nice muffins' >(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $['dessert|muffin_one']), ).toEqualTypeOf<'a nice muffin'>(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $['dessert|muffin_other']), ).toEqualTypeOf<'{{count}} nice muffins'>(); expectTypeOf(t(($) => $.sodas.coca_cola.coke)).toEqualTypeOf<'a can of coke'>(); expectTypeOf(t(($) => $.sodas.coca_cola['coke|diet'], { count: 1 })).toEqualTypeOf< 'a can of diet coke' | '{{count}} cans of diet coke' >(); expectTypeOf(t(($) => $.sodas.coca_cola['coke|diet'], { count: 1 })).toEqualTypeOf< 'a can of diet coke' | '{{count}} cans of diet coke' >(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $.sodas.coca_cola['coke|diet_one']), ).toEqualTypeOf<'a can of diet coke'>(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $.sodas.coca_cola['coke|diet_other']), ).toEqualTypeOf<'{{count}} cans of diet coke'>(); expectTypeOf(t(($) => $.sodas.faygo.orange, { count: 1 })).toEqualTypeOf< 'one orange faygo' | '{{count}} orange faygo' >(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $.sodas.faygo.orange_one), ).toEqualTypeOf<'one orange faygo'>(); expectTypeOf( // @ts-expect-error: plural keys have been removed t(($) => $.sodas.faygo.orange_other), ).toEqualTypeOf<'{{count}} orange faygo'>(); expectTypeOf(t(($) => $.sodas.faygo.purple)).toEqualTypeOf<'purple faygo'>(); expectTypeOf(t(($) => $.tea, { count: 1 })).toEqualTypeOf< 'a cuppa tea and a lie down' | '{{count}} cups of tea and a big sleep' >(); expectTypeOf(t(($) => $.tea, { count: 1 })).toEqualTypeOf< 'a cuppa tea and a lie down' | '{{count}} cups of tea and a big sleep' >(); // @ts-expect-error: plural keys are removed expectTypeOf(t(($) => $.tea_other)).toEqualTypeOf<'{{count}} cups of tea and a big sleep'>(); // @ts-expect-error: plural selectors require count t(($) => $.tea); // @ts-expect-error: plural selectors require count t(($) => $.sodas.faygo.orange); }); it('selector works with arrays', () => { expectTypeOf(t(($) => $.array[0])).toEqualTypeOf<'element one'>(); expectTypeOf(t(($) => $.array[1].elementTwo)).toEqualTypeOf<'element two'>(); expectTypeOf( t(($) => $.array[2].elementThree[0].nestedElementThree), ).toEqualTypeOf<'element three'>(); }); it('selector works with context', () => { expectTypeOf(t(($) => $.dessert, { context: 'cake' })).toEqualTypeOf<'a nice cake'>(); expectTypeOf(t(($) => $.dessert, { context: 'muffin', count: 2 })).toEqualTypeOf< 'a nice muffin' | '{{count}} nice muffins' >(); expectTypeOf( t(($) => $.coffee.bar.espresso, { context: 'cappuccino', count: 2 }), ).toEqualTypeOf<'a dry cappuccino' | '{{count}} dry cappuccinos'>(); expectTypeOf(t(($) => $.coffee.bar.espresso, { context: 'latte', count: 3 })).toEqualTypeOf< 'a foamy latte' | '{{count}} foamy lattes' >(); expectTypeOf(t(($) => $.sodas.coca_cola.coke, { context: 'diet', count: 1 })).toEqualTypeOf< 'a can of diet coke' | '{{count}} cans of diet coke' >(); }); it('returnObjects + context', () => { // Array elements should preserve their properties when using context expectTypeOf( t(($) => $.array[1], { returnObjects: true, context: 'cappuccino' }), ).toEqualTypeOf<{ elementTwo: 'element two'; }>(); }); it('getFixedT', () => { const fixedT = getFixedT(null, 'ns1', 'coffee'); expectTypeOf(fixedT(($) => $.bar.shot)).toEqualTypeOf<'a shot of espresso'>(); }); it('namespace: single', () => { expectTypeOf(t(($) => $.fromNs2, { ns: 'ns2' })).toEqualTypeOf<'hello from ns2'>(); }); it('requires count for plural selectors with an explicit namespace', () => { expectTypeOf(t(($) => $.tea, { ns: 'ns1', count: 1 })).toEqualTypeOf< 'a cuppa tea and a lie down' | '{{count}} cups of tea and a big sleep' >(); expectTypeOf(t(($) => $.sodas.faygo.orange, { ns: ['ns1', 'ns2'], count: 2 })).toEqualTypeOf< 'one orange faygo' | '{{count}} orange faygo' >(); expectTypeOf(t(($) => $.tea, { ns: 'ns1', count: 1, defaultValue: 'fallback' })).toEqualTypeOf< 'a cuppa tea and a lie down' | '{{count}} cups of tea and a big sleep' | 'fallback' >(); // @ts-expect-error: plural selectors require count with an explicit namespace t(($) => $.tea, { ns: 'ns1' }); // @ts-expect-error: plural selectors require count with an explicit namespace list t(($) => $.sodas.faygo.orange, { ns: ['ns1', 'ns2'] }); // @ts-expect-error: defaultValue does not make count optional for a plural selector t(($) => $.tea, { ns: 'ns1', defaultValue: 'fallback' }); }); it('namespace: multiple', () => { expectTypeOf(t(($) => $.fromNs2, { ns: ['ns2', 'ns3'] })).toEqualTypeOf<'hello from ns2'>(); expectTypeOf(t(($) => $.fromNs3, { ns: ['ns3', 'ns2'] })).toEqualTypeOf<'hello from ns3'>(); }); it('returnObjects', () => { expectTypeOf(t(($) => $.sodas.faygo, { returnObjects: true })).toEqualTypeOf<{ orange: 'one orange faygo' | '{{count}} orange faygo'; purple: 'purple faygo'; }>(); expectTypeOf(t(($) => $.array[1], { returnObjects: true })).toEqualTypeOf<{ elementTwo: 'element two'; }>(); }); it('defaultValue', () => { expectTypeOf(t(($) => $.beverage, { defaultValue: 'defaultValue' })).toEqualTypeOf< 'beverage' | 'defaultValue' >(); expectTypeOf(t(($) => $['beverage|beer'], { defaultValue: 'defaultValue' })).toEqualTypeOf< 'beer' | 'defaultValue' >(); expectTypeOf(t(($) => $.array[0], { defaultValue: 'defaultValue' })).toEqualTypeOf< 'element one' | 'defaultValue' >(); expectTypeOf(t(($) => $.array[1].elementTwo, { defaultValue: 'hi' })).toEqualTypeOf< 'element two' | 'hi' >(); }); it('returnObjects + defaultValue', () => { expectTypeOf( t(($) => $.array[1], { returnObjects: true, defaultValue: 'defaultValue' }), ).toEqualTypeOf<{ elementTwo: 'element two' } | 'defaultValue'>(); }); it('defaultValue + context', () => { expectTypeOf( t(($) => $.beverage, { context: 'beer', defaultValue: 'defaultValue' }), ).toEqualTypeOf<'beer' | 'defaultValue'>(); }); it('returnObjects + defaultValue + context', () => { expectTypeOf( t(($) => $.beverage, { returnObjects: true, defaultValue: 'defaultValue', context: 'beer' }), ).toEqualTypeOf<'beer' | 'defaultValue'>(); }); it('supports interpolation', () => { t(($) => $.interpolation.val, { val: '' }); // without strictInterpolationChecks the options may be left out t(($) => $.interpolation.val); // @ts-expect-error misspelled variable t(($) => $.interpolation.val, { vla: '' }); }); it('selector fallback array — a plural member requires count', () => { // `soup_other` has no {{count}} in its text: the requirement comes from the // plural group, not from the variable. t([($) => $.soup, ($) => $.beverage], { count: 1 }); // @ts-expect-error count missing t([($) => $.soup, ($) => $.beverage]); // @ts-expect-error count missing (with defaultValue) t([($) => $.soup, ($) => $.beverage], { defaultValue: 'x' }); // @ts-expect-error count missing (explicit ns) t([($) => $.soup], { ns: 'ns1' }); expectTypeOf( t([($) => $.soup, ($) => $.beverage], { count: 1, defaultValue: 'x' }), ).toEqualTypeOf<'a bowl of soup' | 'several bowls of soup' | 'beverage' | 'x'>(); }); it('selector fallback array — single namespace', () => { // Both selectors resolve to the same type; result is the union. expectTypeOf(t([($) => $.beverage, ($) => $.coffee.bar.shot])).toEqualTypeOf< 'beverage' | 'a shot of espresso' >(); // Fallback between a plural group and a plain string. expectTypeOf(t([($) => $.tea, ($) => $.coffee.drip.black], { count: 2 })).toEqualTypeOf< | 'a cuppa tea and a lie down' | '{{count}} cups of tea and a big sleep' | 'a strong cup of black coffee' >(); // Fallback within nested keys. expectTypeOf(t([($) => $.sodas.faygo.purple, ($) => $.sodas.coca_cola.coke])).toEqualTypeOf< 'purple faygo' | 'a can of coke' >(); }); // Both selectors resolve to plural groups; PluralValue brand is stripped from both. expectTypeOf(t([($) => $.tea, ($) => $.sodas.faygo.orange], { count: 2 })).toEqualTypeOf< | 'a cuppa tea and a lie down' | '{{count}} cups of tea and a big sleep' | 'one orange faygo' | '{{count}} orange faygo' >(); it('selector fallback array — with options', () => { // defaultValue widens the return type for every selector in the array. expectTypeOf( t([($) => $.beverage, ($) => $.coffee.bar.shot], { defaultValue: 'fallback' }), ).toEqualTypeOf<'beverage' | 'a shot of espresso' | 'fallback'>(); // Note: returnObjects: true with a selector array is not separately tested here — // the existing single-selector returnObjects tests already cover that code path, // and pinning the exact disjoint-union shape requires toEqualTypeOf (which fails // on disjoint unions) or toMatchTypeOf (which is directional and cannot assert both // members simultaneously). Coverage is provided by the single-selector suite above. }); it('selector fallback array — explicit namespace', () => { // Array of selectors targeting a non-default namespace. expectTypeOf( t([($) => $.fromNs2, ($) => $.fromNs2], { ns: 'ns2' }), ).toEqualTypeOf<'hello from ns2'>(); // Mixed namespaces in fallback — GetSource exposes the primary namespace (ns2) keys // directly on $, while secondary namespaces are hung under their name ($.ns3). // At runtime, keysFromSelector rewrites secondary-namespace paths to "ns3:fromNs3" // so extractFromKey routes them correctly, while primary-namespace paths are left as-is. expectTypeOf( t([($) => $.fromNs2, ($) => $.ns3.fromNs3], { ns: ['ns2', 'ns3'] as const }), ).toEqualTypeOf<'hello from ns2' | 'hello from ns3'>(); }); it('selector fallback array — @ts-expect-error on invalid keys', () => { expectTypeOf( // @ts-expect-error: plural suffixed keys are removed from the selector source t([($) => $.tea_one, ($) => $.tea_other]), ).toEqualTypeOf<'a cuppa tea and a lie down' | '{{count}} cups of tea and a big sleep'>(); }); it('keyFromSelector returns SelectorKey', () => { const key = keyFromSelector(($) => $.beverage); expectTypeOf(key).toEqualTypeOf(); // plain strings are NOT assignable to SelectorKey (branded) // @ts-expect-error const badKey: SelectorKey = 'beverage'; void badKey; }); it('t accepts a single SelectorKey', () => { const key = keyFromSelector(($) => $.beverage); const result = t(key); expectTypeOf(result).toBeString(); }); it('t accepts a SelectorKey with options', () => { const key = keyFromSelector(($) => $.tea); const result = t(key, { count: 1 }); expectTypeOf(result).toBeString(); }); it('t accepts an array of SelectorKeys', () => { const key1 = keyFromSelector(($) => $.beverage); const key2 = keyFromSelector(($) => $.coffee.bar.shot); const result = t([key1, key2]); expectTypeOf(result).toBeString(); }); it('keyFromSelector is type-safe against resources', () => { // valid keys work keyFromSelector(($) => $.beverage); keyFromSelector(($) => $.coffee.bar.shot); keyFromSelector(($) => $.sodas.faygo.purple); // @ts-expect-error: invalid top-level key keyFromSelector(($) => $.nonExistent); // @ts-expect-error: invalid nested key keyFromSelector(($) => $.coffee.bar.nonExistent); }); it('keyFromSelector with explicit ns', () => { keyFromSelector(($) => $.fromNs2, { ns: 'ns2' }); // @ts-expect-error: key from wrong namespace keyFromSelector(($) => $.fromNs2, { ns: 'ns3' }); }); it('exists narrows to SelectorKey', () => { const key = 'beverage' as string; if (i18next.exists(key)) { expectTypeOf(key).toEqualTypeOf(); // can now pass to t() t(key); } }); }); i18next-i18next-db698b1/test/typescript/selector/tsconfig.json000066400000000000000000000001451527173754700244670ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "exclude": ["./**/*.bench.ts"] } i18next-i18next-db698b1/test/typescript/strict-interpolation-checks-nonstrict-keys/000077500000000000000000000000001527173754700305655ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/strict-interpolation-checks-nonstrict-keys/i18next.d.ts000066400000000000000000000005341527173754700326610ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceCustom, TestNamespaceInterpolators } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { strictInterpolationChecks: true; defaultNS: 'custom'; resources: { custom: TestNamespaceCustom; interpolators: TestNamespaceInterpolators; }; } } i18next-i18next-db698b1/test/typescript/strict-interpolation-checks-nonstrict-keys/t.test.ts000066400000000000000000000015251527173754700323610ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { TFunction } from 'i18next'; describe('strictInterpolationChecks without strictKeyChecks', () => { const t = (() => '') as unknown as TFunction<'interpolators'>; it('requires the options for a string with variables', () => { expectTypeOf(t('simple', { olim: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); // @ts-expect-error options are required for a string with variables t('simple'); // @ts-expect-error missing variable t('simple', {}); }); it('t(key, defaultValue) accepts any key, as in this mode', () => { // Without strictKeyChecks a default value makes any key valid, so a known // key with variables cannot be told apart from an unknown one here. t('simple', 'some default value'); t('not_a_key', 'some default value'); }); }); i18next-i18next-db698b1/test/typescript/strict-interpolation-checks-nonstrict-keys/tsconfig.json000066400000000000000000000002161527173754700332730ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "compilerOptions": { "noErrorTruncation": true }, "exclude": [] } i18next-i18next-db698b1/test/typescript/strict-interpolation-checks/000077500000000000000000000000001527173754700255735ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/strict-interpolation-checks/i18next.d.ts000066400000000000000000000005671527173754700276750ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceCustom, TestNamespaceInterpolators } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { strictKeyChecks: true; strictInterpolationChecks: true; defaultNS: 'custom'; resources: { custom: TestNamespaceCustom; interpolators: TestNamespaceInterpolators; }; } } i18next-i18next-db698b1/test/typescript/strict-interpolation-checks/t.test.ts000066400000000000000000000037631527173754700273750ustar00rootroot00000000000000import { describe, it, expectTypeOf } from 'vitest'; import type { ParseKeys, TFunction } from 'i18next'; describe('strictInterpolationChecks with strictKeyChecks', () => { const t = (() => '') as unknown as TFunction<'interpolators'>; const tc = (() => '') as unknown as TFunction<'custom'>; it('requires the options for a string with variables', () => { expectTypeOf(t('simple', { olim: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf( t('simple_multiple_keys', { more: '', one: '' }), ).toEqualTypeOf<'This has {{more}} than {{one}}'>(); // @ts-expect-error options are required for a string with variables t('simple'); // @ts-expect-error missing variable t('simple_multiple_keys', { more: '' }); // @ts-expect-error misspelled variable t('simple', { olmi: 'yes' }); }); it('applies to t(key, defaultValue)', () => { expectTypeOf( t('simple', 'some default value', { olim: 'yes' }), ).toEqualTypeOf<'This is {{olim}}'>(); // @ts-expect-error options are required for a string with variables t('simple', 'some default value'); }); it('leaves a string without variables alone', () => { expectTypeOf(t('just_a_string')).toEqualTypeOf(); expectTypeOf(t('just_a_string', 'some default value')).toEqualTypeOf(); }); it('a key-only wrapper over a key type no longer compiles', () => { // Inside the wrapper the key is a type, not a literal: the variables of its // string are unknown, so the call cannot leave the options out. The same // holds for a generic key and for the union of a namespace's keys when one // of its strings has variables. function trGeneric>(key: K) { // @ts-expect-error the options of a generic key cannot be left out return tc(key); } function trUnion(key: ParseKeys<'custom'>) { // @ts-expect-error `qux` is 'some {{val, number}}' return tc(key); } trGeneric('foo'); trUnion('foo'); }); }); i18next-i18next-db698b1/test/typescript/strict-interpolation-checks/tsconfig.json000066400000000000000000000002161527173754700303010ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "compilerOptions": { "noErrorTruncation": true }, "exclude": [] } i18next-i18next-db698b1/test/typescript/strict-key-checks/000077500000000000000000000000001527173754700234745ustar00rootroot00000000000000i18next-i18next-db698b1/test/typescript/strict-key-checks/generic-wrapper.test.ts000066400000000000000000000010071527173754700301120ustar00rootroot00000000000000import { describe, it } from 'vitest'; import type { ParseKeys, TFunction } from 'i18next'; describe('generic wrapper without strictInterpolationChecks', () => { const t = (() => '') as unknown as TFunction<'interpolators'>; it('a key-only wrapper keeps compiling', () => { function trGeneric>(key: K) { return t(key); } function trUnion(key: ParseKeys<'interpolators'>) { return t(key); } trGeneric('simple'); trUnion('simple'); }); }); i18next-i18next-db698b1/test/typescript/strict-key-checks/getFixedT.test.ts000066400000000000000000000030341527173754700267050ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('getFixedT with keyPrefix in options (issue #2318)', () => { it('should accept keyPrefix in options and scope keys accordingly', () => { const t = i18next.getFixedT('en', 'alternate'); // keyPrefix 'foobar' should scope valid keys to those under 'foobar' // At runtime, fixedT prepends keyPrefix to the key: 'foobar' + '.' + 'barfoo' = 'foobar.barfoo' expectTypeOf(t('barfoo', { keyPrefix: 'foobar' })).toEqualTypeOf<'barfoo'>(); }); it('should accept deeper keyPrefix in options', () => { const t = i18next.getFixedT('en', 'alternate'); expectTypeOf(t('deeeeeper', { keyPrefix: 'foobar.deep.deeper' })).toEqualTypeOf<'foobar'>(); }); it('should reject invalid keys under the given keyPrefix', () => { const t = i18next.getFixedT('en', 'alternate'); // @ts-expect-error - 'xxx' is not a valid key under prefix 'foobar' assertType(t('xxx', { keyPrefix: 'foobar' })); }); it('should allow overriding getFixedT keyPrefix with per-call keyPrefix', () => { const t = i18next.getFixedT('en', 'alternate', 'foobar'); // Override the getFixedT keyPrefix 'foobar' with 'foobar.deep.deeper' expectTypeOf(t('deeeeeper', { keyPrefix: 'foobar.deep.deeper' })).toEqualTypeOf<'foobar'>(); }); it('should still work without keyPrefix in options (existing behavior)', () => { const t = i18next.getFixedT('en', 'alternate', 'foobar'); expectTypeOf(t('barfoo')).toEqualTypeOf<'barfoo'>(); }); }); i18next-i18next-db698b1/test/typescript/strict-key-checks/i18next.d.ts000066400000000000000000000014571527173754700255750ustar00rootroot00000000000000import 'i18next'; import { TestNamespaceCustom, TestNamespaceCustomAlternate, TestNamespaceFallback, TestNamespaceInterpolators, } from '../test.namespace.samples'; declare module 'i18next' { interface CustomTypeOptions { strictKeyChecks: true; defaultNS: 'custom'; fallbackNS: 'fallback'; resources: { custom: TestNamespaceCustom; alternate: TestNamespaceCustomAlternate; fallback: TestNamespaceFallback; interpolators: TestNamespaceInterpolators; arrayKeys: { arrayOfStrings: ['zero', 'one']; readonlyArrayOfStrings: readonly ['readonly zero', 'readonly one']; arrayOfObjects: [ { foo: 'bar' }, { fizz: 'buzz' }, [{ test: 'success'; sub: { deep: 'still success' } }], ]; }; }; } } i18next-i18next-db698b1/test/typescript/strict-key-checks/i18nextT.test.ts000066400000000000000000000032441527173754700264510ustar00rootroot00000000000000import { describe, it, assertType, expectTypeOf } from 'vitest'; import i18next from 'i18next'; describe('i18next.t defaultValue with strictKeyChecks == true', () => { it('should resolve to the correct type when `defaultValue` is provided and key exists', () => { expectTypeOf(i18next.t('alternate:foobar.barfoo')).toMatchTypeOf<'barfoo'>(); expectTypeOf( i18next.t('alternate:foobar.barfoo', { defaultValue: 'some default value' }), ).toMatchTypeOf<'barfoo'>(); expectTypeOf( i18next.t('alternate:foobar.barfoo', 'some default value'), ).toMatchTypeOf<'barfoo'>(); expectTypeOf( i18next.t('custom:bar', { defaultValue: 'some default value' }), ).toMatchTypeOf<'bar'>(); }); it('should throw an error even when `defaultValue` is provided if key is missing', () => { expectTypeOf(i18next.t('custom:bar', 'some default value')).toMatchTypeOf<'bar'>(); expectTypeOf( i18next.t('bar', { ns: 'custom', defaultValue: 'some default value' }), ).toMatchTypeOf<'bar'>(); expectTypeOf(i18next.t('bar', { defaultValue: 'some default value' })).toMatchTypeOf<'bar'>(); expectTypeOf(i18next.t('bar', 'some default value')).toMatchTypeOf<'bar'>(); // @ts-expect-error assertType(i18next.t('unknown-key')); // @ts-expect-error assertType(i18next.t('unknown-key', 'default value')); // @ts-expect-error assertType(i18next.t('unknown-key', { ns: 'custom', defaultValue: 'some default value' })); // @ts-expect-error assertType(i18next.t('unknown-ns:unknown-key', 'default value')); // @ts-expect-error assertType(i18next.t('unknown-ns:unknown-key', { defaultValue: 'default value' })); }); }); i18next-i18next-db698b1/test/typescript/strict-key-checks/t.test.ts000066400000000000000000000142021527173754700252640ustar00rootroot00000000000000import { describe, it, expectTypeOf, assertType } from 'vitest'; import { TFunction } from 'i18next'; describe('basic usage with strictKeyChecks == true', () => { const t = (() => '') as unknown as TFunction<'alternate'>; it('should resolve to the correct type when `defaultValue` is provided and key exists', () => { expectTypeOf(t('foobar.barfoo')).toMatchTypeOf<'barfoo'>(); expectTypeOf( t('foobar.barfoo', { defaultValue: 'some default value' }), ).toMatchTypeOf<'barfoo'>(); expectTypeOf(t('foobar.barfoo', 'some default value')).toMatchTypeOf<'barfoo'>(); }); it('should throw an error even if `defaultValue` is provided when key is missing', () => { // @ts-expect-error assertType(t('new.key')); // @ts-expect-error assertType(t('new.key', 'some default value')); // @ts-expect-error assertType(t('new.key', { defaultValue: 'some default value' })); }); it('should work alongside `returnObjects`', () => { expectTypeOf(t('foobar', { returnObjects: true })).toMatchTypeOf<{ barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }>(); expectTypeOf(t('foobar', 'some default value', { returnObjects: true })).toMatchTypeOf<{ barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }>(); expectTypeOf( t('foobar', { returnObjects: true, defaultValue: 'some default value' }), ).toMatchTypeOf<{ barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }>(); expectTypeOf( // @ts-expect-error t('nonExistent', 'some default value', { returnObjects: true, defaultValue: 'some default value', }), ); // @ts-expect-error expectTypeOf(t('nonExistent', { returnObjects: true, defaultValue: 'some default value' })); }); }); describe('basic array access with strictKeyChecks == true', () => { const t = (() => '') as unknown as TFunction<['arrayKeys']>; it('works with simple usage', () => { expectTypeOf(t('arrayOfStrings.0')).toEqualTypeOf<'zero'>(); expectTypeOf(t('arrayOfObjects.2.0.test', 'some default value')).toEqualTypeOf<'success'>(); expectTypeOf( t('arrayOfObjects.2.0.sub.deep', { defaultValue: 'some default value' }), ).toEqualTypeOf<'still success'>(); }); it('should throw an error when key is not present', () => { // @ts-expect-error assertType(t('arrayOfStrings.2')); // @ts-expect-error assertType(t('arrayOfStrings.2', 'some default value')); // @ts-expect-error assertType(t('arrayOfStrings.2', { defaultValue: 'some default value' })); // @ts-expect-error assertType(t('arrayOfObjects.2.sub.deep')); // @ts-expect-error assertType(t('arrayOfObjects.2.sub.deep', 'some default value')); // @ts-expect-error assertType(t('arrayOfObjects.2.test', { defaultValue: 'some default value' })); }); it('should work with `returnObjects`', () => { expectTypeOf(t('arrayOfStrings', { returnObjects: true })).toBeArray(); expectTypeOf(t('arrayOfObjects', { returnObjects: true })).toEqualTypeOf< [{ foo: 'bar' }, { fizz: 'buzz' }, [{ test: 'success'; sub: { deep: 'still success' } }]] >(); expectTypeOf(t('arrayOfObjects.0', { returnObjects: true })).toEqualTypeOf<{ foo: 'bar' }>(); // @ts-expect-error expectTypeOf(t('nonExistent', 'some default value', { returnObjects: true })); // @ts-expect-error expectTypeOf(t('nonExistent', { returnObjects: true, defaultValue: 'some default value' })); }); }); describe('interpolation values with strictKeyChecks == true', () => { const t = (() => '') as unknown as TFunction<['interpolators']>; it('should allow anything when key is a string', () => { expectTypeOf(t('just_a_string', { asd: '', beep: 'boop' })); expectTypeOf(t('just_a_string', 'some default value', { asd: '', beep: 'boop' })); }); it('simple key', () => { expectTypeOf(t('simple')).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf(t('simple', { olim: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf( t('simple', 'some default value', { olim: 'yes' }), ).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf( t('simple', { olim: 'yes', defaultValue: 'other default value' }), ).toEqualTypeOf<'This is {{olim}}'>(); // @ts-expect-error because nope isn't a valid key expectTypeOf(t('simple', { nope: 'yes' })).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf( // @ts-expect-error because nope isn't a valid key t('simple', 'some default value', { nope: 'yes' }), ).toEqualTypeOf<'This is {{olim}}'>(); expectTypeOf( // @ts-expect-error because nope isn't a valid key t('simple', { nope: 'yes', defaultValue: 'other default value' }), ).toEqualTypeOf<'This is {{olim}}'>(); // @ts-expect-error because nonexisting isn't found in namespace expectTypeOf(t('nonexisting', { nope: 'yes' })); }); it('simple key (multiple)', () => { type Expected = 'This has {{more}} than {{one}}'; expectTypeOf(t('simple_multiple_keys', { more: '', one: '' })).toEqualTypeOf(); expectTypeOf( t('simple_multiple_keys', 'some default value', { more: '', one: '' }), ).toEqualTypeOf(); expectTypeOf( t('simple_multiple_keys', 'some default value', { more: '', one: '', defaultValue: 'some default value', }), ).toEqualTypeOf(); // @ts-expect-error one of the required keys is missing expectTypeOf(t('simple_multiple_keys', { less: '', one: '' })).toEqualTypeOf(); expectTypeOf( // @ts-expect-error one of the required keys is missing t('simple_multiple_keys', 'some default value', { less: '', one: '' }), ).toEqualTypeOf(); expectTypeOf( // @ts-expect-error one of the required keys is missing t('simple_multiple_keys', { less: '', one: '', defaultValue: 'some default value' }), ).toEqualTypeOf(); // @ts-expect-error because nonexisting isn't found in namespace expectTypeOf(t('nonexisting', { less: '', one: '' })); }); }); i18next-i18next-db698b1/test/typescript/strict-key-checks/tsconfig.json000066400000000000000000000002161527173754700262020ustar00rootroot00000000000000{ "extends": "../../../tsconfig.json", "include": ["./**/*"], "compilerOptions": { "noErrorTruncation": true }, "exclude": [] } i18next-i18next-db698b1/test/typescript/test.namespace.extra-large.json000066400000000000000000016740651527173754700262020ustar00rootroot00000000000000{ "$$$": { "D_8": { "_": { "EN_0OP_4$": { "$": { "_88": { "s": { "c": { "P_": "$l", "AT00": "x0e8", "Ere": "ASP_q" }, "$au0k": { "__0$": "I_d8", "_4__define": "_$ydM", "$dpr": "$$_wDH$$" }, "$$NBG9Oj": { "$7$": "$L6r$_$_N_", "g$": "$ow$", "_Nj": "v$8_3b$1" } }, "BY": { "C1$lI": { "b_EoX$o": "$valueOf", "_length": "wY3", "dl0_20": "V4" }, "$d4RtV$$$": { "W0qaALC__": "Py_", "$7q$": "bcaller", "_$__A$__q": "$Y6n$$2_$$" }, "$z$1CF0dl": { "b$$EaT_4E_2": "vwD$y$H$9", "DteOfbind6h": "d_", "$__0": "_k_6__2sq__" } }, "___B2$W5i_$": { "L$1_Lab_": { "$F8": "Z_$__EJx$A", "$$c2$Z4$wo": "_50mi187", "W3Jt": "$ref" }, "$L": { "z": "_", "q": "__$$n6$_4_", "OZXO0__K": "_" }, "_Bper": { "$__look": "$", "_$": "_", "$": "XB" } } }, "_0U": { "Dpbo2M9w": { "_prototype": { "$_HgYF": "$1gT_", "VE__": "_1$yV", "Yref": "_yk_" }, "Zs2x_$$Ct": { "BK": "_", "y3": "l$Gs7uo9", "$__0_w___": "_5" }, "_6_RUeH": { "ac_": "u", "ek3l1$0E": "C$$$__", "P__Cqf": "_c" } }, "_IEM$6$B": { "U$$$_$__": { "$": "Y$y_", "$3c": "$", "coStri": "$_a" }, "_ref": { "ae$D": "U0_", "$valueOf": "YU$6$7", "_y$__$$$_": "$_O" }, "VZu2m041w_": { "_": "B$9$_n$$$$", "WwVa": "n", "Jnam": "_" } }, "zr": { "D_0Z5": { "_$i_R2vuuX": "zf", "$pL$": "e3o$_9", "b$W": "g" }, "$_H2$2": { "rWP": "C__proto__", "T$g": "XBX", "fd__KpIp": "V$69" }, "DEPI0$3b_l$": { "$aleSt$al": "_$_aQDOoG", "z_m": "_03_$", "_str": "S$_H$$_S_" } } }, "vy8V": { "e$_ZU$fN": { "je": { "bfine__pro": "_e", "E": "$WLd2k", "$R_NQ_3_gB$": "Abind" }, "e$pcj$_6_e": { "__t$9Za3": "$ng", "P": "_7TTnM$e", "z": "__" }, "Ez__lookup": { "xz": "_$2", "Y_62j": "_$inw", "$B7": "c_T$s4i" } }, "D8l": { "a_": { "_$_$4_b_": "Z6_", "Av": "D1Bs_Z3__y$", "$3_": "$i$" }, "_lP$s7_f$$": { "$63w$": "vm31Y3V$Y", "_E": "$length", "$d2$$F": "$" }, "hprototy": { "K": "Dapply", "c__l": "R$rl_", "EZSy$5__": "$L" } }, "DxQ2_D__5J": { "_$MDM": { "___defi": "$c_c", "bj$$": "c", "_z$___$XZ": "O7v$mk$F7" }, "h2b_48_xr8": { "k2cW1p__9wU": "$9xjsfO6", "$_SXu1mj": "$$", "b89$8Eq52B_": "btY_1$$8g" }, "Bcaller": { "c$": "A_", "F$$$B04_Y": "YSV6", "$C$7_r": "nesFD3U1_" } } } }, "avtoL": { "$__": { "bPb_": { "_": { "$c$1": "V_Ce_iYEO", "_$___v$6z4": "ZCky1U$", "$SK_3t_x_0": "$7" }, "__h_$_$": { "$_": "bref", "_$0X": "_a", "aE$$7__C$7E": "_$" }, "S06_58_$": { "eU": "_", "vr": "D_", "t$": "$" } }, "E8W8E": { "$_E": { "VZ": "CP_a", "__6": "_G0$_o$xLYa", "a_$": "_I_" }, "O3$$0_B": { "c$7Z_$appTo": "f3_a", "$58wZ8$": "XBY5T2G$k", "A$$lM_M": "__A5" }, "eW$$_T$_$": { "$M$$": "_", "CA": "vkL_$3uwd8", "$_": "L" } }, "$6Sf$": { "Bu$leng__": { "$m4$$2": "QTh0", "XW$": "_", "eDd482_i": "R" }, "wvalueOf": { "A": "$$p$$c1y6", "$efi": "B", "d_": "a_2Z$6E$_Z" }, "__T9zX": { "G": "DbAVa", "_$_1x0kN$": "_A$", "_length": "d$s$__$_$_a" } } }, "j$Mi": { "J$K": { "P_fr$_26T$": { "B$": "_5$", "_g$Yilook": "$a", "__p0": "_" }, "eapply": { "E": "____$__i_1P", "e__y_": "$l", "_C7_$BR": "a2$3$zS390$" }, "fproperty": { "$$d$": "G$5tZ", "_Py_Bg": "A__y", "_J$_R": "yar" } }, "$__2": { "$_9": { "G3sc$U_y": "Y9qS$$k$__", "$": "$$", "_Y$_D$": "g$a7_p$2" }, "CRa": { "dha": "a$WJ_", "_b3_$72_": "_$_3f$9v", "$$2$0_5MdC": "s" }, "_": { "E": "V3z", "Bw": "_$$$6___Y", "$valueOf": "b_9__" } }, "_7s1_S$__": { "dq": { "GbVbD__$": "Bar", "zB9M4b15V7": "$A2l_5$", "C$": "$v4Mpi" }, "$c58_$rZD": { "Z_E17$f": "c40MaB8$_$_", "$$_XV": "_ref", "_0B$": "J9RR$" }, "_zle": { "$9XY$z7f_N": "x_$", "_D": "__", "_e$": "c$" } } }, "$W_3__": { "_": { "$ref": { "dT$$_y$E$_A": "$__E2", "j$": "gE$$T", "_h$Z_6": "_J6_9" }, "_le": { "y_": "bH$glXNx_C$", "jU_": "$_Z_", "O2BY_G$5__": "__$$0" }, "$z4$": { "M72__": "$1$D1$31", "bs$9$_": "Bar", "q_d": "D$$" } }, "$z7$DF_A4": { "a_v2_": { "_$5T_": "$", "__6__9Ct75I": "kpro", "$E2_": "$$V_5r87m_" }, "$apply": { "_6_$": "Eb", "S4$F_C28m": "BPOQ___2$Du", "D7$YWn_$$": "VJ$Bp$4" }, "_b5SKy": { "$": "_$", "A_$": "$_C___3M0z", "_g": "B" } }, "$": { "E_3q": { "C$6$$$w_S": "_$ngthx_ru$", "_": "w_", "$f": "S69$xY8I" }, "_": { "_kC_": "Gbind", "$__": "D_", "W_mE_": "w$O$$" }, "N": { "__6_Z00$": "$isPrototyp", "$a_lr$": "__32K0__", "DM2u_02_k": "__" } } } }, "Eu": { "$5y$": { "WW7$_o4$": { "n_z605$J": { "b_$_$0__": "J$", "m$z$A_00$jk": "H5NMjX$H9$4", "b": "v_zvM$5V_" }, "a5LC_WR": { "$_c": "$ref", "f": "_ZFD", "bO2$9Y$_84W": "$U0ifVM$Y" }, "$": { "$$_C_": "S_F$AA_$e", "$toString": "q5", "p01W$$v": "C$" } }, "$_$2$$2O2bw": { "_bind": { "__FP$_y": "S$", "D9__": "_4w$_7v", "yae": "c" }, "_I_$6Y_uG$M": { "EX": "v4B$N$_$", "_Tp_j$": "F_", "w7_2": "AhPnU" }, "Es_$$$$W": { "Lref": "$9zDu$$C$b", "_$vcZ65": "$$WZ$B2$$", "w3": "asProto___d" } }, "D": { "D_": { "Y": "CwzcRnyX", "_": "Qku", "$vr_6": "_9K" }, "$_": { "Fcaller3__d": "Zb$O$9E", "$$3$_hI": "Vd", "wg__X": "E$_$$_a_" }, "__k": { "Sl_$m4$$$": "ceva", "e$3": "$_7", "$gP$$HWR$Q": "_$27$" } } }, "_gC$": { "W": { "ycallerd2": { "_c": "$_9$", "dB_H_0X$_v": "$", "aV": "_a_7_Cd" }, "B7": { "$": "A0", "aref": "_", "$_P$$_": "YvalueOf" }, "___9J$X4$t": { "A_A_3A__": "S", "Ygu$constru": "b$_$ur", "_3c$d_9$F$_": "kw_N4w" } }, "y": { "$toString": { "$$6Men_$$$": "B", "RO$a5$$": "$b5ad7$$$a", "AR$j": "_V" }, "x": { "c_$eL_E": "$_Tc", "k3$a": "_W$X__ES00", "$": "$3N6l$_5i" }, "B$H6K_": { "$": "eBq27_$Bkf_", "r_": "jkey", "_c": "a" } }, "_": { "b": { "WBF_$ED9_": "h0W3C$a", "c_3_": "v__ob_$KH$q", "$6vr$": "y$$3x0" }, "$": { "_D$": "Avb$$_6", "A0Y_038$1": "ap$_02Vy", "$r_2O9W_Ed": "E$k3$_$$_$" }, "DVlengthtt": { "_93L": "n_7_dYU", "$_62$Q$0": "$44qdF", "_74_s4703ma": "$" } } }, "$ar": { "d453$0a": { "_name": { "$_Mr": "$key", "$Vr1_M$69_P": "$___8", "___g_FX4F3D": "p_1$" }, "plmiN$c__": { "wv": "p", "Ol2__61": "__Bw4G__4", "_arguments": "$_$rGKy_wQ" }, "reR": { "wu_Y__Q$_m_": "$$$B_3_o_3", "$key": "$", "$$$": "$_W" } }, "X5oY_": { "$": { "E": "$A__", "$1$1": "BW", "y_": "c8$$Ii_" }, "Du": { "_0": "D7_", "$": "sB2", "s3h$B": "_D8$JQ0WA" }, "_y3G$md": { "yy5_JNxR7": "_", "H_cht_$Z": "J", "$b": "s4$$$$IX_B" } }, "_$$Ox_a7ve": { "eBy": { "upr": "mo$_vdb$Hcv", "$x": "_e__$N", "Ev": "qf$R$6_$" }, "_$_D": { "$$_DB_$6kV": "g0w$_", "$$l": "_", "__2w$6b0Ea$": "capply" }, "$7_2m$2Y$$": { "j_": "y_Wb", "W$i": "y", "Pd": "Hc$_$Y_h" } } } } }, "a": { "_N$OVM$Od_u": { "dvalueOf": { "ebzW$$_9": { "D8Hx$_l": { "__": "__", "_": "z", "b$9lY": "$__nsb$D7_N" }, "_i_$CGs8$r$": { "c__c_X2": "_w1", "T3S7jnI1": "dg", "_ref": "vN$$K$__ly" }, "$n2": { "$Y$$H_2$0E": "$_P", "$": "c$P77", "an": "$p$ex" } }, "C_$": { "SO$erD_ll": { "$valueOf": "xL7$$z$", "h__": "Q2__1", "EE_$": "b6" }, "__I088_1": { "_xybE_5He__": "bu5$8", "a$3aj$W_K_": "bcallera", "_c$Q_N1ci$_": "_X$2" }, "$5$k_4q$Z": { "$ref": "V$Ku", "fM__": "$toString", "_e_calc": "g_" } }, "Y9$i": { "$F_0t5b_4": { "A_p": "_2", "_H": "$", "$b0": "$0in" }, "bns": { "_ca": "dgVC$$C", "$v$tV$W_$": "$$$e", "Cb_": "_8e1" }, "$": { "E$o2j_$u89": "ZcC_B_V$", "__e": "_key", "Ld": "_KC" } } }, "_d": { "__6": { "$__gH$$": { "_": "b46", "_t": "_cd", "e": "v$A3" }, "$__BY": { "v_$_": "E_p", "E7__$$$P1": "$$$f9D_", "y__": "$55J8r0e$" }, "bDV$$$$VR$J": { "c_d": "$va", "$C_7$_t": "$key", "_": "y$R$$$bdy" } }, "$val": { "$4$32Ye_": { "_Go$bq": "B0e$", "d5g__": "q$Dt", "$_": "BXt" }, "Y": { "$b$6_e$$Id_": "$V_0", "$sbl": "etoString", "$v7ttq_$": "VJ$S$_7$_iM" }, "x": { "_$": "_5", "xd$10$1$M": "_", "H$": "d$$XZRvn$" } }, "d": { "hkey": { "W_FS": "_$$$6Z", "Pa98": "_", "D$v$3P$EOq": "$_" }, "ej_1L6_": { "DhasOw": "$", "_s3Fhsb1z_": "_bD3oF$mY$$", "_": "Eq7_t$M9" }, "_3$j$3_G_H7": { "$": "V$8X_", "$q9Q0O$_iJB": "B_bt_$", "L___lE$$_B_": "X__" } } }, "___f": { "Ekey": { "$key": { "$$8__1$": "a_6ze$Cy$P", "$": "__$_j6_W7$", "E$$u$q__": "$_zj_" }, "_lg7": { "_": "_Xw_G", "$_": "$$", "$c": "dJ7e43aI$" }, "_z$$$_2$S$": { "_": "l_con", "Q_$$$$_v6_u": "$9zq", "bjO_1$vv_E": "v$_$O$r" } }, "Alength": { "__3": { "_bind": "$$7_8$Hm$Zj", "k": "$U$U$$", "_71cb$$": "D$X7a$$EP" }, "y_$": { "B4$K": "$7_", "A": "l_1$", "_$": "_$$Yz4iRS" }, "W$HG_Ym0$": { "Z$": "$$_$iqfh$_", "$$$": "$asOwnP", "_C0": "$5_w3$b_Vk" } }, "__": { "W": { "Zkey": "v0$_7X", "l": "$__1aU__", "$eT": "G$uX" }, "dname": { "$$$j15C9": "d", "$_$ICu_c": "$ce_EO$0D", "F17_": "df_" }, "vvalueOf": { "_xR_19$R4i": "Q__B_", "$ry$_$_l": "PAN7_$_i", "s_9": "Wt" } } } }, "Vpro": { "_$": { "b$J_4R_$F_P": { "_": { "Es$HA_Ohe": "K", "D": "_U", "Gm$WZY_U$i": "X$1" }, "w": { "z8l$": "$te_", "K$9__": "chSGE", "A": "$" }, "E$yI8_": { "t": "Z$", "Vkey": "xne$f", "Y": "__" } }, "$2_7$x_K$8y": { "L": { "b$_": "E", "$r": "m_", "PvFf$da": "_77b_8_Q__$" }, "$_": { "_": "Tapply", "w$O$_3": "I$9", "$re": "v_0P$" }, "CT4$$": { "uto": "$$1$e$9__h", "__6_x231": "_", "_fy_$itz$": "B6D" } }, "e$Bk$9": { "VT__WE4$A_": { "kk0_": "Pw7pb1", "_c": "c", "H_$Xf3$xW": "b6x" }, "l": { "XG6$_5": "_c", "kkeyXamelen": "E$V1e8T04_", "_": "_$_zw" }, "_": { "_xb": "$__$$t", "W6__": "$a$", "U": "__3IEa" } } }, "_1W$$v": { "$_": { "Ey7_2q$": { "_keyleng3c_": "$", "_keyB": "g", "__M$_$o": "D_" }, "_XertyIs": { "c$": "_na", "$$": "f", "e0C6$N$q$": "_$_w" }, "_m5$$$f$$": { "$_$": "$$w_85", "_$1key": "eB$", "_": "$5oQ6$" } }, "Y__$": { "_bn$w": { "$$1e$_5k_1": "WL1__$KE_67", "D$bl$_$p4$$": "_h8__M", "_": "$length" }, "$": { "_$_ocalwnPr": "$$", "DJ0p$$$": "_W", "$8ItoLocal": "b" }, "Y": { "A8": "t", "__": "v$_", "T_H$u117_": "_$_" } }, "q3a4": { "w_9__$_": { "$": "f$18$H8o$r5", "b$$$6": "Vp", "$__A": "V_$9_Y_" }, "_A_uC__$Q": { "n$$z8$hG": "$1$", "CO": "$g_7p1", "Kky_T__": "_s$_MO5$T" }, "_c": { "j$j_Nm$DnV": "$_Ndb__69_w", "TG_n": "_$0A", "a_": "X" } } }, "_": { "_P$d$IJl": { "u$9": { "$8C$": "_", "s87_": "$$B", "RY": "___grL" }, "_": { "w": "OZtoString", "E_deERcalli": "_T_", "$lp": "_0$4yf$" }, "e$_jZGT$": { "$valueOf": "_$", "$_25": "AJ$6_D_", "_F0X$pBF": "_LB" } }, "zz_4$$_J6C$": { "_s": { "_18a$zdT$": "D_$BV", "$caokeyoc": "Bv$", "b$_": "x" }, "z3_Q": { "_bind": "z_", "Tm0": "_", "_ro": "__$t_8__Q8" }, "v_es$___": { "$$w$c": "$$2", "Geap$M8o": "C", "q$Lv": "$N$" } }, "D4$9_0Gi": { "F$": { "$key": "$71T", "eMZ$F": "iNO______s", "_B": "_80$h_wc" }, "cd$67": { "C": "$4$0cjv", "c$VT_E$J_": "_$__Tn", "d_$v_c0_2": "b3gx$_3$2c" }, "_F0": { "_toL": "_ca", "_Y_RQ2j_": "_", "$": "b__VME_U_$" } } } }, "_": { "$_P_$$$i9": { "_U": { "e": { "c_$k$7": "$z", "$$_DTz_$$": "a_", "_0qm_9IA$_i": "_2" }, "_d2pr": { "v5h8_0$5_x2": "B$B", "$j$6ht$$z$_": "__7_", "$$0$_$x$_r_": "Tv" }, "$Yk$": { "p7_key$$": "_", "Sw_$5": "$dBf$", "d_C": "_$_" } }, "$_2h_": { "_0L": { "$_$rb_": "bW$", "$MD_": "_ZT", "J3": "kR$LiSX$__" }, "Z": { "_8": "$$__$__a", "$": "_iI$$f", "__isP": "$4a" }, "_e": { "_length": "_i", "__J$": "cW$EAY4", "b": "_length" } }, "_": { "$i85o": { "C": "_", "E3_1_n_V": "aHh", "AW_QE$_7S": "$n5" }, "_$$g_5$vL0Z": { "$6Rf5uP": "_h_J", "y$argument": "EK1j5$Y$_G$", "BA": "$5bu" }, "_$_$__$a$": { "Q$28": "AYSe_K641$U", "g$$R2T$5W": "$_$n", "_": "Zke" } } }, "_7$_6_L_A": { "N$$Y": { "DZ7$u3$1": { "$$n0P82": "N", "z_$I$_1b1": "A__d", "vI3vx": "c30m8I_$_" }, "Y9_2$$5_": { "$$_llZ$_C2t": "A$e", "w2e_z": "o0E_D_$E7", "_R_RP1_$": "$" }, "_T": { "$I$$m_": "$P_$", "w39M": "_$_A", "$_v$$68O": "Tprototype" } }, "Cnw3x__defi": { "$_$_$i2": { "Z4_UR67ZR8": "G34Q_8I", "w$bwn": "$xTb", "ekey": "C056cb$$_4" }, "b3$b8QzEY": { "_5$0": "_", "_ref": "B6Y", "BtoString": "$$1" }, "I$$9$q$E": { "$58": "_D4e", "D__G__": "d$propertyI", "XlueOftpval": "b5" } }, "A2is": { "_eC5$Y$8Q__": { "$$D1_Or": "_$3", "B$": "$", "c4_": "$8X7_$_$w8" }, "CD": { "_8SD88X$": "_8", "__$$$A$$E": "I_", "M$": "$C$_" }, "p___6_4tUHQ": { "D__": "$mI_$$S8_", "W": "yref", "$Bf7h__T6": "a9X_Wi$iSF" } } }, "$CN": { "_caller": { "$_h": { "_zceT7y": "_5$", "__$K1": "b3$", "xm$$z7": "_x25Y_" }, "_c": { "__bin": "_", "$$all_d": "Yh67V_", "__7": "$b$$$7yb" }, "xc": { "xvalueOf": "_$0$A_$c$_", "_$D$_$P": "_AEe1$_", "w": "$B" } }, "g1": { "K$1": { "T$": "E_def", "G$ec$1$9_$_": "b$$IB_az7", "_l": "$J$" }, "$8k": { "tD$_MfGPV": "pc", "__": "_ub", "s_rZ_$": "_e$_wZO$72" }, "e_j$_9El2": { "E1$_": "$K", "WtoString": "$", "_1m8ADC": "$2_" } }, "__27_2": { "iw": { "b": "$", "$$g": "$$E2", "$3": "__" }, "_Eb__t": { "De": "zv5Bm0$_n$I", "_": "W$Dd82_$", "_G$": "$$1__d2" }, "b": { "A2$A5AK": "_", "K$c7$n": "Y$b$iXo$", "_length": "__$Dm_" } } } } }, "NB6nS2LKbr": { "$UWI__1_6": { "$": { "_f__$$_9_$": { "__35HI": { "aYj4c_K_": "$", "_0g7_R5lp": "_W", "r$cs9Zk": "$$aCM" }, "m9A_": { "eujpH$Ld$": "$M$e$$0$WN$", "Av_0xc__D_": "zV_8X$5_$A_", "$$$_7_yu9": "C$Py_$Y1_$s" }, "_cU7": { "_": "VAv", "SRb$": "ao327V_$D", "$": "KtoStr" } }, "_64t5p_": { "$$_b": { "akey": "_in", "zV_e1y": "U57830I$_", "$$_$$9": "_19" }, "$key": { "_XS__": "tw__$D9H8", "$": "_2", "c": "vkey" }, "bref": { "$$D$g_056$G": "p91_$_2$", "BY_X6asOwnP": "$A$cj$", "_Ue1W2_Q$8": "c_k7" } }, "__A_8_7": { "x3iWC2": { "_1": "e$$", "$$$": "u", "_length": "$_t" }, "d__d": { "eM": "Llength", "_": "Ath", "Gxc$h4": "_rin3Xcallt" }, "W$12": { "_q": "v$a", "_": "$yB$", "cha": "__" } } }, "$_$t_s$": { "$": { "_$$": { "aX_M_$7QG": "YBF", "d558_L": "S_propert", "E_PX_": "Akey" }, "_E7$$I0": { "h0YZ": "ji$_", "yVR_4$S8": "_", "$_Ue_IN9": "b" }, "urin": { "_M_$6b": "B", "Y_": "d", "cBNx": "g" } }, "KY_fs": { "x__c": { "$_o": "VE043", "_61": "o_", "$_04__": "w29p" }, "$e$_": { "yvk": "$0", "Qpr": "_N0$$", "$length": "$bWe$" }, "$2P": { "$n$v3_cJ$": "KT$_Wa$6", "s_": "bw5$9$_$51", "_$$5$": "jxS" } }, "_0": { "$2$J_yA": { "d5q7_": "AG___s0_", "$": "_", "Ze": "$" }, "$c_$": { "A82kxvy9Eu": "t$", "$_0_s_": "$", "___aCE$__": "k$_XdO" }, "x$": { "_C__$p": "_zY_", "Ye": "f_", "$r7L__SWh": "E6k" } } }, "_01$$": { "Gc1v": { "$$_": { "zGb_$g0": "$76$C", "G9_G": "$argum__pro", "r$": "a3" }, "B": { "y5": "dtoS", "$$u_I$_u$qO": "XZcCyH6", "$VsC3$": "$_A" }, "_F7I_ea__z": { "y9": "_$X_", "NX0_cAS4Ab": "$W$", "$": "Fkey" } }, "Q$$$6t$$f9": { "$": { "yvalueOf": "W", "CtoString": "_0$d0", "$_rV$1e": "$L$P$$" }, "$_$_bEX": { "D7___k3pDP_": "_D$__036$_Y", "atY$": "$$9q$", "eoL": "$f$$b_J" }, "_$_": { "b___lueOfle": "a", "_argumen": "M", "E0__o7Xs": "_3$$$" } }, "Ghh$cN$3P8": { "$5co": { "n4$Ez1$9_Z": "en", "L": "$G", "$m_y1$": "Et9v" }, "D$": { "c6M": "vNF2_T4", "$a3": "_$2$__", "$_6": "___E" }, "__": { "$_$$_": "_", "Hc$ef__5v0": "$", "_$_F": "D$_$$$40" } } } }, "_WE1$_k$Q8": { "A": { "Gis": { "$co": { "u": "_i", "$key": "V_61n", "$6prop": "$58_$7$l_" }, "a": { "D$": "dh", "xK": "Bs", "_Au$_1t": "dW_Y$" }, "Ek": { "$": "_bi_$Se$", "_z": "$", "o1_$9d7": "$" } }, "u2Ki": { "_guk6_uj": { "$eBrF0c": "_WE$_1$j9_H", "_ref": "coZn$$O$$", "c_": "____q_s_$_l" }, "_E": { "cR": "R", "$": "Bcalle", "ckey": "d" }, "Z$_Do": { "ce": "_L$$7___", "$_p_r$0A$w$": "$1$15", "yl$C__J_$": "___7kIWXsPO" } }, "___R9_bM4m$": { "__vR1B$9N": { "$ref": "_toString", "$s4o1kk": "yVA$$", "A4kH9$__4$$": "$$_8" }, "$$U": { "$br$e3": "$$", "$h_L16_s": "ucaller", "$$$$__p": "dwE_" }, "C": { "_j_0k_$$_": "Fo78_", "_$": "x5__", "cN8_8_e5mc_": "$__proto__" } } }, "_C": { "_1_$q": { "AJC": { "$2$": "bhasOw", "___proto__": "N", "EtoString": "__2dc" }, "$": { "__2__": "__$a", "_4$$_K_$": "_7s", "E$V__n$8$M": "$G2GM_b$0_5" }, "bt": { "Aprototype": "$Wb$", "$9MQ$": "P_5Xh8lu_$Q", "$": "Ds15o__2" } }, "$6f$S_FP": { "d$egvP$14_": { "_": "cub_V$", "$name": "D5F18_J", "_ere": "_ref" }, "c69": { "Fref": "___9px$_", "_": "c$_9", "_$_7Z": "_" }, "_$_a": { "_K": "$v48z$6", "e": "X3S", "dineGetter_": "__X8" } }, "Z8": { "____2": { "e": "ccaller", "_": "nf_Ad_$cD$C", "v0$_M_$_sp": "Ib$" }, "A": { "$S$_0G9": "ak", "_$": "ct$_$p_$", "$x$pp$__3": "tc" }, "h2": { "b$": "Db_eO_Ua", "_r": "x8k_$u_DHh$", "Y9pT6dc2l$$": "_" } } }, "_$__$$___": { "$": { "xref": { "$$$_U": "$", "ElqJG1ir_": "$", "Y_$7_$": "_4__" }, "e3_$7_x$": { "h_N$K_1$$n": "$i9EQ_$b$ji", "Xeqy": "__9$$_B7", "R5Z5G$0I6_r": "___$" }, "c": { "h$$D__6D3": "CykupGette", "__": "_", "fapply": "e3$7$" } }, "$$ECi$__$h_": { "C": { "__NJ": "V_", "_v6bB$$3$$a": "_uo0P8_$__$", "_Wxt1F": "M_$$" }, "$0$DoLP_": { "E__": "AS$$", "_": "$f2$__C", "$$$8": "$key" }, "o$A__": { "$_Ve$3_": "Chz___c$", "_k": "mb43aPUhM_", "aB": "eE7" } }, "E0a$FBdVG": { "H__pro": { "G_": "$$31$$0Y$1", "_$_4_": "$", "$dh": "Q$$Um10" }, "$_$q$r_Gg05": { "_e4ep__XV": "_u4_n$7C", "$_7h": "$$y8_", "$$_qo5$": "C_$_T_$r$_d" }, "B_": { "yK$ov3$2": "_$8_5E_b1", "$$$$$": "_$_", "d_i__$3CXg_": "eU" } } } }, "an1": { "$__": { "AA9": { "$$$": { "tr_3k": "W$Zx____", "$_": "CV_$_5", "_Z": "q183isProto" }, "vcaller": { "$_$l": "EdFKt$m", "$H3y8": "d1y$_4$", "___": "_" }, "_$uE__oo6": { "$$z1Y$_": "Y", "AY9": "S5ar", "$": "ydAr2Aa$D" } }, "X_$1$2g_71": { "_": { "__82Vz$_3E7": "Oy$$__$", "$7__de": "$", "z7_": "r_$_i$M1$X_" }, "UC_b": { "VqI7r": "$toString", "$d9$c": "J$7w", "dY1uh": "__$$jz_Z" }, "D": { "E__lookupS": "D", "d$h_k": "$9", "Y_l0$f_$": "C$1_B" } }, "_G_$a$$be": { "$0a$BQe__Y$": { "E": "_3w4_7$$$G", "$X": "_t", "$8mT0BE8$": "v" }, "_WL": { "W_": "t_qd8194", "l$e_$_tZ8t": "z", "B6$_": "E" }, "dt": { "$_W$1l": "aZ", "_b_$": "$a__", "HB_Rs$": "V_W_2M__n" } } }, "_iax$C_$j": { "OI$p$": { "$": { "_re": "iM_9n3e_", "X75$$": "_P8B4$", "c": "dvalueOf" }, "VCec": { "X__9S608": "ndr", "If_Svt": "$9", "_o": "Y_" }, "$ibht$": { "EYO_bw_$4_": "$a$$77", "_2toStri": "eprot", "_K___0_Z94": "_valueOf" } }, "_$L": { "_": { "$pr": "___R$__$", "_7": "wBsDU$$_", "Bi__": "_upG" }, "_$$___Wo$VA": { "Fgb": "___lookupGe", "qmd$": "$$0", "_": "$" }, "$t": { "__2QL": "D_$_4t", "$$o$": "B35Rf_ae__", "BNTWC8__": "_35B1c$A5$" } }, "$7t$P$$kp_": { "X2pnw": { "V$": "_", "_": "x_8", "_KaZm35$": "$AH_6_$_2e$" }, "$7_": { "v21_$": "_E", "_9": "x9f$", "C$4_8nm__": "_MS56s$_" }, "rrz9_k$F": { "_$b$$f_s_zC": "Kd$_Fe", "_$3JD2": "_", "B$N": "$__$LLw$$" } } }, "_v": { "$MH$dX_$": { "_": { "_": "_X$$r", "D1f": "CG3g", "w$RbNyv_z_": "$" }, "d_Ju$v24": { "cUO_R_1": "__$C$", "eDvalu": "_o_3$6$e4D", "bS$": "v___$D8$" }, "c__defi": { "$0_": "_9QE5", "$Nm5$v_R$b2": "_", "$_": "B_Meo4" } }, "Tref": { "HY_$$35d_": { "$K_": "$ref", "_y": "$af$$q_", "$": "$C_CDL8" }, "C": { "i": "__", "$Cv": "_", "yvAhas": "____" }, "_ts": { "w42": "IQe_f1wa", "DI$_P18_": "_0", "H": "_h$_$8" } }, "$i": { "Jmm6q": { "B$$": "_isP", "__A$$$SlGL": "s2Euh_$h_aC", "yprototy": "zZlF" }, "z_J": { "_": "Xde", "FC$t_": "_M8s", "$Wb_$__$P": "__" }, "_l$$$": { "a__$": "dL$__$$y_8", "A": "I", "_$_P": "_aluErtisPr" } } } } } }, "_ja_cal__": { "a": { "$217": { "dleWca": { "e$": { "_name7_bin": { "uU_d": "_U$1$v$$1$J", "C$k": "$h93$_f", "kn_q": "h" }, "$__w": { "_": "$be_ex_", "hZ_$_pCLA_": "_co$TC2u0D", "____Yy": "c" }, "$a3_": { "$le": "e$$9__K_43o", "_R_Z2_$iuyg": "$$Enumer", "w": "T" } }, "DZ9q$66": { "ub1$Caa$$": { "v$1gS$m$4C3": "_$_k_", "ecallEhasOw": "Y$A4$J$$", "v30$": "___z" }, "wbind": { "_isPrototyp": "SZ", "$Y__3$$$_2": "jA1$", "_da": "a$" }, "g7_": { "_D$2c3": "$p", "$je$T_$OTMz": "_$5$Vd", "$prope": "b_$$$_dm" } }, "$": { "H_x6$h$mO_": { "_": "_W_$", "CuX6$_$_3l5": "_mV_b$F", "PEK$_": "_q_oy$868X_" }, "$_$RjW": { "$$5_": "aQt", "BDn_$7$a": "Al_$", "dU57_4$z": "C$" }, "_": { "$c": "C_1_lG6w$V_", "$__d": "_$i", "B_8": "_" } } }, "$$_NG$": { "Q7": { "_kj_VcN_": { "q$0q0V": "$__prva", "$": "_r", "bE": "_Z21044" }, "$A8tN$f3Go": { "y$Ef36_": "_$5", "k_V": "HO0$z62_IN_", "W$": "__T_zmeG" }, "aSTg70_n39": { "_$_v": "Q9_$He_$8m$", "DZ$g8": "oy$", "vp6td$_": "$bind" } }, "_bE_": { "__N_2$": { "$": "_af2_4$$4x_", "wP_6$_": "$7$__", "Cbx_": "__n" }, "M2_3_$": { "h___": "_", "$_N5_d_D$2$": "Q$", "ch_": "X$V_" }, "a0$$_B_V6": { "_cal": "x_", "t": "yX$", "_o29bx_LI": "JPb_75" } }, "wB$": { "_b": { "_$_a$U_S26J": "$ZU$vM_K", "$vXF_B_Oo": "$n3i_us$", "_$b": "_u" }, "_e": { "f7ke6Iz_jS": "CA$", "x_$a1_": "z$xA$8", "A4$": "_U$U$_i4_t" }, "a4Qj7r_": { "Em_3zbYj": "_bind", "$E1$$G2K": "Bt", "bHV": "Capply" } } }, "_5": { "$R_g$0cO__": { "Rb56x": { "rEE__9": "CDi", "Bapp": "$5_d", "Gn_3rn___88": "_eAyvn$9$$_" }, "_o8PhS$": { "G$_": "_$i8e_3$", "e$_$neSet": "s0", "_x$": "$_AY9YD" }, "_caller": { "SC_": "__Hb5", "ZEX8": "d_B$5XN$89", "F": "_XC$3H_$_" } }, "m_mw2N": { "K__": { "Q": "arL", "s7D_$": "$_", "A3V": "e5_qh_3" }, "vW21_": { "$__80o$_": "$$2g$e17XE0", "$r_$P_": "D", "_$U6$____7l": "oal3e9$prSi" }, "_key": { "$toString": "c$__W$V", "Ble": "X3", "a_": "$c_$0" } }, "$": { "e$_$": { "_9$e7$": "$cC_", "vap": "N90_$_$_F", "_4Zt7hg_": "cprototype" }, "$$x9$": { "Ec$_": "_c8", "$_$": "$$", "B$$$$B$_5E2": "b" }, "$defineSa": { "A8$L": "B_", "X_$t520$IXp": "$g", "v4": "$" } } } }, "d": { "E$4": { "_5lE": { "c": { "fo": "z$$_$", "AjH6_": "a5asOwnProp", "$de$__b8": "Zt$$ABP" }, "_h": { "DA8": "$Z__", "C_g": "$7w$__E", "_": "_$__7Wnt$k$" }, "$_$0$$_$_$": { "N_toLo": "D_$A7Jy", "$hCt": "_o$_$f_9_", "c1l$8b8__$": "$t9$XLCYJ" } }, "$O": { "_k": { "$": "$Vkj", "BI_w$F__p$": "_o", "$U": "D$Q0y" }, "$d5": { "_arguments": "vf9$", "_QQ7_": "$IS02$", "k__e$0$V_U": "$$" }, "_$9$_$": { "_$2d": "_h3_$_E67$$", "$YD$": "A7Fg", "_7_$$$_$V_": "a5e" } }, "A": { "__$": { "$oku": "YNo_", "E_$6T_IP": "Olength", "$3j_a$g_$": "_6" }, "vYl": { "aaV$2_$w_k$": "T", "$valueOf": "$", "_Yw": "$cb$2_$K$$" }, "_y8z": { "$_cl$$": "__F$", "C": "d$", "D": "_" } } }, "pG$8": { "_t3e__defin": { "_Q90X$": { "H$": "$$6M_b6_", "h$_": "E", "_q$_": "R_" }, "M_": { "X$$8$89C": "C", "$b7_L$_e": "_$q$E4w$_7", "S": "_w" }, "D_": { "QK$f$_s": "$F", "L_iC__e_$_T": "$zb", "u$A817VD_": "__7" } }, "__d": { "V8_OraJ": { "kefineSet": "_$5", "c2": "$_Z$", "_$Y__X$": "$valueOf" }, "_Rv_uZwJ__": { "Q__proto__": "_1$_", "_": "y", "Q0_": "_" }, "X7g$m$_9": { "e_L_$__o1c": "$key", "$J$nT$zo": "_", "s8_s_7s": "EI" } }, "$": { "$Io": { "_V4ia_7P$": "a$7YdJ$wT_", "zD": "_$_IiQ_", "e": "_7TE" }, "d$b": { "_$": "_ref", "A8": "TMk", "__": "Ut" }, "$t": { "xc2EbCe": "$le", "_argumenons": "d_fQ", "O$H_2$": "_8b9Y8_" } } }, "_t13c": { "$bind": { "$$": { "Ai__QiMx": "a", "Z": "_$", "sN4i$0xeo": "P$g5_$3" }, "T2": { "$_$$i$": "$2$$c9VK$_m", "f$PL$9$7_$": "$$I1$YVAKJr", "c": "$0$" }, "b_aY": { "$$_3ez4_": "A$z4b4A", "_z_NUZxJySx": "v6$$B$A$T", "$": "V2_" } }, "Xca": { "_0V$": { "$g$JoD8": "_h", "Ms3": "W__QyK", "aOHVV$": "b7_a$" }, "v$Mo9oYdf$7": { "$1$7_$$B_": "M$K_oN$$", "b": "yHw", "D__": "DWqn8$28om" }, "$m": { "$$n_57w$Gmd": "_I2B", "$": "$h$$ac88_4H", "_8WY": "Eapply" } }, "B$Zf": { "_bV_": { "_efZDca$app": "y5I_$$$", "$$AD$Jk4": "__8w9Bx$_CF", "zkey": "eke" }, "_": { "Kref$Xkrgu": "__5VI$$", "_L$__": "$4$__$__$", "__": "a$$Q" }, "A": { "b": "Yarguments", "TA13_I5": "_82$", "m3d__bd_$X": "z_S8j2" } } } }, "_A": { "$v": { "StoString": { "_toString": { "QAg$x": "N_$", "ag0$$$$$lNl": "_$$0W", "_r$_g9_n$": "Zh_$_HV7_" }, "_": { "zUy": "aVD0$A", "h3": "_bi", "_fy$$S": "_re" }, "$d$": { "M": "NDK", "XoFrb8r$C_": "__", "_key": "_p" } }, "$$$e3NvmT": { "$g": { "ehB$_M_ku": "v_$2", "FG5O": "W3$w5__", "_5UX$$dw": "bvalueOf" }, "a2v": { "_PA$": "$0$$$2", "clength": "S", "E$": "l4P_" }, "e$G_": { "_c_AVY": "_", "$B__YK49$": "__mLK4E", "Gc_a": "Ov$" } }, "sLX": { "$k_": { "F0n": "m21$$$__", "$02z$B": "$$", "XJ__D0": "d8" }, "a_4E": { "c$AtH7$$9_e": "$", "_$_R_9Dr1G": "$1R_", "Hv$K4": "$m_eKTR_6_m" }, "a2b": { "zQ_trmi__": "__d$O", "rd3W$t4": "$", "d$nay0$$$_": "DRK_Qt_$V8w" } } }, "$d": { "d": { "k$$rb$$H": { "_": "$llp", "r_$P$$kr1H": "$W9PJ$_$Q", "KB6q4wD": "q$_z6F$1q" }, "VE_0": { "_ref": "$28w_$_a7", "_": "A_7fO", "__": "$dT60GZUc_" }, "yt": { "_ref": "_B_n$Gu$5", "_6WU": "$$_$", "y$$9r$": "dvalueOf" } }, "Z$k3_N$P$_1": { "$_3a3": { "N6$Vh8_$3": "ib$15$q_zPn", "D": "cref", "$$A": "wpb" }, "N": { "$toS": "$6F6", "__$": "$$D$", "_ez_Q$42$W": "u" }, "_$": { "_X$u7fs$Q_": "_1_WwI$__8", "ItoString": "__d58O", "$$emS$g": "$xUO2N6" } }, "_8": { "$9R4Z_": { "_$k$": "__$E", "r$_1bU": "_ref", "e5G$g": "$6hbr$" }, "_r8_u_3Kj": { "kpQOZ_": "$9_b_E", "k$M_$$c99": "Lapp", "LM_4un": "g" }, "_$_79": { "C_2": "T_", "_RT": "Ifi", "_$1_$": "$5qp" } } }, "$Ya": { "Wefh": { "$5y$j7b2": { "_": "S$ref__d", "$r": "$pW1e", "c": "$" }, "_q9$Db_9": { "s__$": "f2g$_ed", "B32$D_": "_BpSette", "_D__": "Xv" }, "VGY$$_": { "__": "$0", "_$$STQ4n": "$me", "$c": "_" } }, "_c_$$_": { "_9": { "Q$n571_6": "wo", "VDC9ev_A$": "a6$8eL1$", "$u7t_": "d$_$C" }, "__7v_": { "$": "$$4__a4mq", "J_$_$": "dA6$$_", "__$p_zkL4$": "B$__$_3_I" }, "$___$Ha$": { "$u": "__", "$5b": "$length", "XdrSZG_O_E7": "$hasOwnProp" } }, "hH": { "_apply": { "d": "_$yy6P7$$", "EZsE": "_wt", "V": "_$_YVN_" }, "v63CNl__p": { "$y0": "q$", "Uw_$$09": "_CnxE", "$_c": "$$_" }, "g_$h$d": { "$A5v": "eTjF5$JI", "____8_N8Zi": "_M$_cwc$W_", "t$K": "$" } } } } }, "B$9_r_BR_": { "$$V$__H": { "Pkey": { "W1": { "Xh3": { "b$f1": "EWq2$___6", "pEn__": "aI_", "_$": "$" }, "$argumen": { "c_$t$Zb_": "drrotoeOf", "$cH_O": "C_pI", "MpW7$1": "$S1z_1$f$_" }, "n$ra": { "P9_B$7_": "$D_$11_o$_h", "l": "D78_T", "E_": "$V_Qids$" } }, "g_R6": { "Wkeyn": { "d": "__length__l", "_": "$_", "tll": "$$O$1z" }, "$a_m_$$": { "___F81s_": "$v29W$f__", "rKw$T": "K$Z", "E$KC8E$D": "$_4P2MG" }, "y_b": { "g31_G$": "_SNJg", "ef$O": "___", "c_6KQ5t": "_9" } }, "_": { "E1_$": { "$y": "$$P$_5$3$fc", "_": "$", "IallerQ6has": "Dh" }, "J_82": { "k": "$x_69aWbw", "yy": "$5_$31_e6dE", "$xN$w8$$$C6": "e__" }, "_j_6HI_F": { "_$_Yf$_$": "G5i38$__56H", "_8t$": "B_$$$", "_$_8o": "_3" } } }, "F": { "_": { "avalueOf": { "Xr": "__", "$$": "___", "_ref": "C4" }, "O": { "__D": "_calle", "I8$": "Q$w85", "vprototyp": "_$l5_T3Y" }, "_Yq": { "p8_$_": "c9Q6$M", "wtoString": "b_74_0$f$Q", "_": "_$keyoS" } }, "_6$$C8h": { "v$$": { "ak$$6$4_$$": "H", "D": "_J$", "$$$$_$Z70_$": "$$_" }, "_": { "$J": "$key", "_ref": "Y", "Iref": "__3$MJ$" }, "N25f$$$2f$": { "_Cx84_$$_Zi": "$$7_$8pb", "_ref": "$__O_", "$_B": "_$_j$1$" } }, "$": { "_Rhnk6$1H$": { "D_n7": "_le$isProto", "D6s": "$", "_cD$2_6d": "_W" }, "ftl$$": { "E9": "_$", "$J": "_", "AA_$8tJb3g_": "_" }, "A_a$$": { "$M_F": "T_nvY$0FL3", "___$$_$$_Ws": "$5$$_$$", "$_": "_" } } }, "w": { "$key": { "$valueOf": { "G$": "E_1_iXNd_$", "$XA_$kx_m": "t", "$": "m09$$2$__" }, "$va": { "_D_": "x7V6_", "htoString": "_", "_5$EI_7aBB": "_" }, "$_y": { "$Rw$": "$$$_M$_$_", "_": "cf0_$$py", "bRL": "qx$VV_" } }, "$E_1O9_JmP$": { "__": { "$": "v", "YZ$M_J5": "E8$1__ps", "$_p": "M_2027r" }, "$__$": { "$": "Xp", "__nT": "j$", "_": "x" }, "$DVo": { "d$t$": "$k", "X$": "_d", "$B": "$na" } }, "_2_$5$0_": { "$4": { "U__w$_K_L": "Ftc", "a": "V$7wW_a7", "$U$391_": "K_" }, "$hasOwnume": { "$3Wy70": "b", "_": "GR$_1_", "_x7_$xcA": "E$$__6$" }, "_t$_7O": { "$x$Qvs$3$i": "$$zJ", "_YC_H$$_": "wkuc$$E44$", "x03": "$y" } } } }, "$_$$_evo$": { "$_5Z1_$7h7T": { "_k_0$$__$": { "DvalueOf": { "$8_": "$dC", "$": "Dr", "aA2y_p_6G_": "_" }, "H": { "$_M8": "gn_", "$d": "__8", "$$$$_u$": "_" }, "EhasOwnProp": { "_$J": "li609", "X$__1_$U8$": "BN_$", "d_H8_": "_e_" } }, "___": { "$_Lo_A9__N": { "c76p_5$k_": "$g$$_i", "_r": "$D", "fu9gxbje$": "DeLv" }, "_g$s_g": { "__p": "C7D$_", "Da31_$gB1x8": "Y", "__": "y" }, "ttoString": { "D": "_zr$_$$___", "$gcFw$c": "___", "$Uy$": "nX9" } }, "_lq85M3$P$$": { "$9_de": { "_B3": "$toString", "C$": "_$", "$$h": "_" }, "_b$Se4lea": { "_6_uH0f": "a$2wW_", "P$N$T$S_y": "_", "D_$_": "$_38S" }, "W80s4gR9_8$": { "$$E2d": "__W88$L0", "w_U$$$": "GTR1$_$VF1", "g$26__oc3": "o$$cUeN$R_" } } }, "Zgi": { "_$du$14n0": { "z_$": { "$$7__": "B$1C_$_$", "y8U_9$_a": "$y", "__": "Iprototype" }, "a707": { "mtoLocale": "UaB$VpA4x_6", "w": "_2GF5$", "_Vn$d": "X_2$" }, "Vcv1": { "nle": "d", "_4": "y69ototype_", "_v_f_$8w$$": "_" } }, "R": { "$$_$Y$7$": { "h$1$J$__v_Z": "_zSepro", "w_fK": "Happly", "g__$": "s" }, "$N4": { "$$o$f_bia": "$g_$", "_": "$calargum", "U$": "$3ou__0$5_a" }, "_1G79$$4cM": { "Ilength": "$", "_": "$", "Jyca": "$S$G" } }, "$$": { "_": { "$$$0d_Qps": "$__defineSe", "U_l_": "$eU3_w$w1Q", "TB4": "_$" }, "$J5t": { "zTlD": "$_b_", "n$tkR_$l": "$apply", "CSe": "_05" }, "R02_8$c___": { "$": "_", "_E": "__", "_2__": "w06" } } }, "b": { "vzx4V76": { "$$___": { "$": "$ap", "x_$I_U_$8": "$$7_", "$bi": "$_8c" }, "D90H": { "_": "X_", "_j6$$wx": "_b3", "dname__l": "k$3D$$$_$L" }, "d$de": { "_": "E__Ev$_bdZ", "AA$": "_VaVsEn", "capply": "Y4_6$dn$U" } }, "j_": { "b43S": { "w$": "N_$J__2A", "$102N$_4": "_", "_$ijw27$_": "$_" }, "_ref": { "xe1$_6$_5A": "L$", "vU_": "_key", "Ba9_OYvR": "$ux$$0" }, "$": { "v": "gt__eWRMq", "$": "_1$6P$z$__", "__": "_e" } }, "___": { "_tX": { "$A3_D$_0": "$_g_$$_$_", "$$_s$tf_": "$e_$", "xl": "$$8D65V9" }, "c5G_$": { "i$___": "$T9V7F_pfGW", "$hasOwnPr": "_l_K", "$u": "z" }, "WDa": { "c1_": "e", "$$_uI$P_$": "_65n27Mc_4M", "Z$gI$$": "c$$_5$35u_$" } } } }, "$3e": { "_": { "_": { "O$6$a$": { "$_1G_": "Vk", "E$6A$": "___A$$", "p2": "O_2Pz_X$z5" }, "Xa": { "$key": "dX$c", "eE9G$2__e_7": "$3_2", "ThasOwnPr": "$_c$" }, "BH_4_": { "$0": "E6$SEj$q_", "_val": "_b$_DdB_", "Ft": "_4R3" } }, "$c4__wa_hZ": { "$": { "u_w$a__": "_X48$$__9", "D_$": "r7B_$____", "$1$G$_j9$": "$DEZ" }, "_toString": { "$_2$s_Glo_l": "_Lq_4njR_8", "f_e": "y", "$v": "NTh_" }, "p$OwL": { "$8": "_7$J", "E__": "_$z$$___N$T", "d$_H$93_D4": "$apply" } }, "$": { "e": { "xE": "___w_m6$Y", "$1f$$": "EhU$8$", "$Vw_m$$V5X_": "zP$D" }, "_y3": { "f_____D": "$__$_V_r2f", "_X_": "_e$g$_$", "n_x_S__jn": "$_" }, "v$b": { "_S8": "w__rw_Z$_N", "_3_a205": "$$_", "M": "E___$5$" } } }, "B9": { "_d_": { "Eal": { "$toStri": "_$__", "B0tD_9": "_0", "ZfF$_$C_qm$": "XHn_2lY_l" }, "_": { "$P_nJ_7_": "$$", "CXD8B$2K_X$": "_f", "_$$$ny_$y6U": "_Fq1__a" }, "$e$": { "$c_gB$C": "Z$", "A$1$": "_", "e$": "$" } }, "la": { "w": { "M$$vk_W4$f": "hev_cR", "___8_3A4__": "S", "w__$PT": "bOv_sPAln" }, "_$E": { "k_73": "$$o", "D0": "a", "o_B6_BA": "aK_$rw" }, "mtoString": { "$vc": "w_", "T_": "$$l", "fQr": "V816_$_" } }, "$F": { "EX$_": { "$w": "_Wu_m6C_J", "a_$___Y$sJ": "x$V$_o", "E__4$": "bRc" }, "DtaVLqoQr_t": { "Z3": "$$fu41B7$$_", "p$__P$a_$$_": "p_O$", "Y": "_9Tz" }, "x": { "$$_64$$": "d8Yl_6l$h$", "r$": "_n", "eapplyn": "_$X$6l" } } }, "bY$C": { "$0_$$$_7$_": { "by$E": { "$$": "_al", "IT1_": "bapp", "_9VM__$t_": "P5" }, "_2_U__$X$j0": { "$": "____$", "_$": "_", "B1_Qb_3$_": "_A84" }, "$___": { "$_5": "darguments", "Bpa": "_o", "Pk": "_3nA8bk_s8" } }, "$": { "$_pSetnameM": { "yref": "_n0n_", "C__$i": "Gb", "dw": "Av03d$TR_" }, "__$$5lP3e_8": { "s": "_", "_n_zao": "k_8F$$", "$val": "_" }, "_5ta": { "q$dS_1Rzw": "H2v$B55Z", "k_o$q": "$DWvjD0a", "Y": "pB$" } }, "$Yp_0$XVS$": { "$__bd6_1$": { "dE": "__", "$C$": "$2___7_$$", "_8ZM": "akey" }, "$da": { "J$_5h7$_60$": "qiE", "$BDw$$_5": "VOo$E", "__4f_ot_D": "_9" }, "____p": { "aO1$__V": "_$ypeOa", "bvalueOf": "$$$B", "__$0G_": "__0_ch" } } } } }, "Y_C_": { "bW07z4av_$_": { "V6$$_j_": { "$$": { "$": { "I": "b8A", "$99U$r_": "$PKAz$", "d": "_fi" }, "_jr9718HVX": { "t$KE": "ZRJsKx", "$ref": "bIF$3$", "C3__2$": "_c4$t" }, "hvN_hi0a2": { "V": "Jx", "vg_JqG5j": "wp", "c__E_99_$": "s" } }, "sQ_$9x": { "Qhas": { "$": "FHaM2_$_9uQ", "___5": "O8", "_01a": "$rgp" }, "$IyM": { "$3_a": "b6Q", "_d": "C41", "$e": "_toString" }, "$": { "z": "W3$ks$iV", "ebind": "a62$j8$$X", "_": "_length" } }, "$fo$": { "giet": { "P___xi1kM": "$6__3Nxd$_$", "bprope": "$T52y6$e$1_", "E_B_$M9$k_i": "$8B" }, "k97Lx$__z9I": { "e$g": "__e_", "$$____$3": "u", "y1$mSHY$8": "Z_$" }, "DTLX": { "_8$9_Ce6": "_w", "AZ_g": "X$Dp", "E$$WK": "D$7$Z5_" } } }, "mkey": { "__": { "E$$O$I79": { "___C$C__": "b13", "__2$c6": "A_K", "eu": "vb$t25$m" }, "T": { "_": "xku", "grinprop": "aref", "a5u_A_W": "$Q$i__$x$$P" }, "_$3_i$1O_D$": { "cS$__7Fj0_s": "$d__E6", "Wt": "_0I", "hb__": "_1" } }, "MEnumer": { "WB": { "E1e_": "$", "DbbindSett": "G99$ca", "$arguments": "_e3_YO3_$K" }, "l_z$$ZC1$_1": { "b": "C", "$l5___$zZ": "ny__7", "_YV": "H_C__k" }, "_$6_": { "r$$_y_": "a9__1MHp1i", "g$_": "D$_$$$4md0", "$": "y" } }, "_mA23v$": { "$Ijme5$_t": { "$_$$3UD81": "$$t_$On_$", "__nd": "C3k", "_": "BAj3_8B$A" }, "__$V54eL": { "_Rkh": "$l8e$5$_g0", "Wcaller": "$__p6Q$u", "D5____": "$F$" }, "d": { "y03": "F26G$", "$$d$4": "Ef", "V_$_": "yv$_c" } } }, "D_$_r": { "yO$8oMA$o1e": { "LH_$2uc": { "$_$$d4l$2": "_pG", "_k": "Cce_", "B": "a" }, "$0$____4F": { "__$d_0_q": "hzQ$_", "yva": "__$Ab", "B78bUALJ0": "$$b" }, "$T2p": { "__": "_tr", "$efineSe": "$Q$$0", "$v": "___wiZ3d" } }, "H$": { "$": { "E665$U": "B_$ri2$prop", "$__hE$t": "_3$", "uL2": "P" }, "_ke": { "AtoString": "_R_$", "$32": "Jp$_$P9diy_", "X$t$": "_bind" }, "_": { "C": "V$w_Zh__v2", "__": "g", "C98_": "$_ux_" } }, "z305_h_qr2": { "_XC2JJ_9$": { "Y_": "Y_$rWHcz_zh", "cA": "bb$l_W_", "$_p__O$$": "__" }, "eVh": { "W9$": "_I$_", "vuBa$": "x$4_q", "$_Y8__defi": "j__proto__" }, "$caller_h": { "fref": "EX$g", "p9a": "$W87$6_53_", "_o": "$$A" } } } }, "$$i$E": { "y": { "w_48K5C9j8": { "_$_Ed_8_7": { "$_0_$L": "_$q86C_4", "_6z": "V__8xgU", "h$8S": "E$_$Apf_" }, "_l_9gu_cal": { "$_": "WA_8$$", "___": "E", "$__$X": "_x" }, "w$_3$D$_": { "W_": "J_", "e": "A$_k71h", "$": "B$_nD_D4__8" } }, "$_": { "_YKH_": { "BV9EC$": "Rp", "$h": "xn$$MM", "X": "$$_t____" }, "fz2_b2d_c": { "X": "_", "U4": "l", "a6wA$Y0S": "Fk" }, "japply": { "$$t$$8": "$$3$", "u4FCY": "Ato", "U__1_8": "ds" } }, "E_$_r0JJ": { "C91Y6fvh2x": { "Y_$5": "$f0", "$ro": "$FgfFe5$p", "$$1_y_k": "_c" }, "_43$": { "$_": "yd_$", "e$$E_C": "_Z_", "V8_7A_1$22": "ZW" }, "_$C_": { "_": "r21$_3", "$lpkoJv$_R": "$$o", "c4_": "$" } } }, "Ih": { "$": { "b$$$": { "$0": "_", "E_": "G$r$A_NTp_", "Bd": "T7_" }, "_H1__w$9W": { "$": "$_$", "$$": "_mq$", "A_$": "c$_b" }, "$": { "apI2_89f_$_": "_", "p3$$T$_h_$": "__6iE8Vp0f", "j$$": "$$Hp$$$_" } }, "$$$$ty": { "_eE9i": { "$$r": "$", "_L$Iy___$": "$", "UN6_": "X_" }, "t$D$n": { "H": "v$$$__cX", "$_ad": "U5$__l", "$__$p": "a__" }, "A2$__2": { "i$": "a___", "D_XD_k": "S$3", "I": "$4Rar" } }, "_C0": { "RV$gwaUs": { "_CIE_": "zJ$$$HOvJH", "$q_$": "Yref", "z": "_" }, "$j": { "$apply": "$JB08$47", "t_A": "a__proto__", "E_": "$7" }, "_Or": { "I$F7ssS9__": "x3$$avc$", "_Oz9": "Z7k_8_", "D": "$1k" } } }, "bC": { "_$y_M$o": { "$$": { "c10": "$isPro", "vEY_$Kqw$": "cy_l", "$gt": "$_Sx" }, "v$c_28$": { "_F$vDJYE2H": "v15_76__9", "$_dd6c": "ccineGe", "$": "_w" }, "$Xgf$$v_$bh": { "_Xb$M$": "Y_2$7Eob$", "_$_9_64$": "Y__K12", "_call": "w" } }, "aC_Y$f$XO": { "_pr": { "_sOwnP": "$R_", "_C_t4_": "D7$S_Y6c", "_": "$A$$Dt" }, "_cx": { "_$Eva": "_jA", "$11$d_$__": "$toString", "a1": "_$" }, "$F21y$U$": { "_2$wY": "wre", "$": "_BL", "w__lp": "Ar" } }, "_v_O$uh__8_": { "j$uct_em": { "eref": "$A$$$$39W", "b9i32e": "CZ$3dv$$", "$": "_ref" }, "$": { "YvEW_b$": "_toString", "v_$": "EtoxllA$k", "Ca": "_o98$m6_9" }, "eisPr": { "D$t": "_uY$C", "$TF_9$84": "$apply", "KXCW_0": "_$Gh_8$m$pG" } } } }, "$le": { "$$o$$": { "EoX3": { "__ww$Mx$_U": { "_": "Mhc28YT1__", "YU6": "dkey", "_5_1_q$t": "_key" }, "w$": { "_NU_E": "_0_agy$_q62", "r8$_Hc$_6": "__Y136__", "_8_zca$4": "_A_$c$$t__" }, "$$H": { "$_$4_": "O$d$0$", "D__": "d__proto__", "$_": "$$TI5" } }, "X1O$3$1$V": { "_": { "s$4_k": "n_", "c2$Ns$H": "$$_1oV4B", "Cl": "c_0x" }, "kBZm": { "ym$o$F_$__p": "W016$$1_", "_lGM_C": "$$$u", "fref": "$hasO" }, "$y_3a_8GrC": { "_T_V72m_$Xb": "_$", "$$": "A__proto__", "_5$$$07A$": "_c2Z" } }, "_$f_g13$tF$": { "v$6_$_$$": { "_zR$": "EC", "$Z8_$D": "$Z0_$820s$", "x": "$H1_P_s5" }, "_A$": { "$_m4": "Gk", "$34": "d5xWw$", "$V_": "i6_c7" }, "Kiy$011": { "a": "_K_R_p_79$_", "F_uP5$": "b$ZkY", "D": "f_v_$" } } }, "D": { "___": { "$T9eX$_": { "$$9$$XQI": "$__0$$$", "_P_": "$valueOf", "B$$P": "$J$x$$" }, "_caller": { "$_jw$WN$t": "_cC", "A": "$", "$0$A$56": "$__$eG$_e" }, "E$v": { "U$_Aa1v": "AAwua_", "__2$_": "e$_3P2$_7$7", "y__": "vy$75$$_" } }, "$_2_$__": { "_Xo_r": { "_WisProto": "_", "Zpr": "$$ke", "_$$$": "$0Vp" }, "D_Ys": { "_": "k_", "_$": "$I_", "ayE$": "$ref" }, "ct": { "w_a": "__", "Ee60$": "a", "$8_wc": "$8" } }, "$$4": { "$_89d6G$mB5": { "AvalueOf": "pkey$", "_30T6": "ccall", "P7_j__0v3Xe": "Zl$j$62v" }, "$_": { "__2$z$$TLs": "yS", "_B__89b1": "RE6", "_$a__fK___1": "q78_$" }, "y3": { "Mr": "$", "wtu": "B", "_91$$XHO7A_": "_1_9" } } }, "$20_": { "wle": { "__Zy": { "$5a_5L$0_1H": "c_Qy3_Hr$", "c$uF": "I__C$7$g", "$zVW7": "$$pl_" }, "__8$$Q_": { "dtoLocal": "$1vw_$$$K$", "$": "$", "E_": "Y__8" }, "_": { "$_0_Vo$7ji": "yp6$_dM$Z", "a": "$D", "$": "B$" } }, "$apply__loo": { "e": { "C1": "_c__", "$name": "$gY$", "_ZDval": "h_v01JH" }, "EACYz1H": { "s$": "WjO", "_oDz": "N__IDbt93", "$$_N6Jp8": "ANE" }, "xao": { "B": "DB", "D_": "Akey", "_T$$x": "$__loo" } }, "_$45": { "C0_5": { "S$$ex": "ZY", "CH": "_7z90KLI", "_": "Ex0$$$iiC$e" }, "FK3__3$$__$": { "_$1c": "$ev9$", "Wto": "$O", "VbhU$$y_I$$": "$U4$Gvz" }, "_$_d": { "e$d": "w", "VMxw_0": "$88kp$$42Ac", "Y$1f2O$4X9": "$$" } } } } } }, "$construct": { "___H$$_$": { "T5297tA": { "$Z$$1": { "_$G": { "v": { "E21": "B$$_L$", "Rt": "_aJw_$8A8O", "y$C8_H1$_": "__a" }, "$76T_z__": { "$2vD$g5b": "__", "bC": "$f_84$_C", "$Nw$$m_$694": "$" }, "_": { "M5Qe": "_", "$D": "Bref", "a$$wr_8": "_G" } }, "$__Sxf14ZEC": { "$l5": { "nXb$e$": "$$c", "EtoString": "___", "$1X": "$R__" }, "_n_": { "Hp4$JA$": "$_p68S", "___": "b$a9e$w0u7", "_$8_$___H": "$" }, "s$$$": { "$": "_valueOf", "$tg$cD_6_3": "_$$9$_r_U8T", "E9p_$$4$": "__4" } }, "_mU3____": { "_ref": { "a$_$p": "z$_p_p$", "d": "do_$$_Pp_", "a600_DO$": "_$" }, "yde": { "vd$": "V", "ln$_1i2": "EFH0$4", "__": "dD20o24" }, "_1$j9_sY": { "l": "$$", "Wkey": "$_", "m_$_d_1ecu9": "y_rX3_N$" } } }, "L9E": { "Je86$$_Ex": { "CKcKHPm$": { "t8Q$$1_": "_apply", "s$e19S_$$": "$U$$W_Z9", "__b": "B" }, "$bA": { "V9Q$cd$94Ku": "$a", "b": "$", "_MZ3qde3_$$": "__$3p$AfE$" }, "An_43": { "S_y_": "VO_2", "Z60_8m_": "$$oC$$_$_", "C": "a$y" } }, "$$$iO5": { "w0_sw0b$aZ": { "_c": "b", "B1__yY$": "c_3Z", "bkey": "$" }, "$d_$2_1_$D": { "_nameEy$to": "__$3e$$$b", "x2_": "p6T__e_c$", "$": "hd0W7__$_r" }, "c$E": { "Up": "$$$_9$yk0", "$caller": "F_$P$U__$_$", "__": "$eXwx_$e" } }, "DO4_$ro$C_": { "_c$YWw$C": { "l": "BANJ$$dE_V", "d86_$j9W_": "h_9_2$$y9x", "$5LpZF_P_c": "R1" }, "dM$u7fEY_7": { "_3_": "c5E_", "$0VP$": "Fva", "yTge": "$$9" }, "_$key": { "qgC$n7YI": "_Jm$_1", "_4$_JK$_$LC": "N0Z", "$key": "bW" } } }, "_M_p": { "uB$xbO": { "_E____$I_": { "$H": "__f$_", "Zre_": "rD_", "$$": "_C" }, "_Rm$": { "__83_$__$7o": "_W", "X": "yE$1$", "zn$_Du$": "$0_4_e" }, "b$": { "_a$J_0A$X3": "$$$_$sh8$$$", "d3Cd_": "$", "Q$_0$P__$AS": "$d0rhasOwnP" } }, "_$N_$7s": { "c02Vt$_": { "V": "a9", "X$": "_mAx", "_": "$oto" }, "$p4": { "_$$2": "z8$$$", "$_zQ1": "dr", "Abi": "$x_" }, "$0": { "s$_o73Y2wn_": "C_V$CDp6W_4", "$albinWpr": "Y_mA", "v81APU_$_$": "bW$9_m_k4" } }, "_k": { "_Lg$pd$_W": { "_": "Jref", "H__uLg": "$$", "_kt7_A0v": "_Z_Nh$l$3" }, "yn7_Tu8_$_": { "$__45m3$7": "b$$tV_jR__8", "_": "V43q9_$L", "$": "$Qu_o$uy___" }, "PF3_2calle": { "E726_3aY$": "$$", "x_": "d", "_$$n$": "Fkey" } } } }, "U$N2": { "ZO$_8_8$": { "ap$_l5t": { "j$_v": { "w_p": "d$", "go": "E__vjHGp_", "D$_c__$V": "w" }, "E": { "__6_sq__$_": "A_", "B7_": "$__6W$AR", "_n$wW7X$0": "$" }, "V8l3UT$q_n$": { "_6": "Kwa", "_$9": "_$Ufl__9q9", "v": "E4C" } }, "w_8m$$": { "Xbd_E": { "e$$$3": "_$P$", "v_1_2$$_P9": "J_", "a$i_9DDM_": "_caller" }, "fJDBD$hE3": { "$dw": "__$_$$", "ANQb_": "oqD67z_", "_ee_$_$$X": "$" }, "$$6r": { "EsEnume": "$__4__Ve_$", "$5r": "$", "_ref": "_ef" } }, "EDE0$u0Yd_s": { "___d": { "N36": "_", "v5$_$": "Crt", "B$$Q_S7$0_": "vf8_z4uX" }, "P_$": { "_Z$": "$", "p918y": "$ixadO$d", "i_0i$$XJ$": "C" }, "Z0_6d$l": { "_kcplB4US": "sA", "_$": "_7_", "Bref": "$a" } } }, "$$_I": { "_r": { "B$8v": { "cH2": "d", "_bs$a___": "$84z", "$E_$DC0C": "$1$_" }, "$__define": { "$07$5$$a$R8": "WhH$Ch03Yv", "__tg$t62h": "$7$C2bn", "U3S$": "$$1DBc$$8" }, "_66K": { "$$_dH_CE$v": "$RnF", "$_7": "_ref", "b$ca": "$7$$con" } }, "$re": { "_B3": { "__1TwU$_qk$": "$apply", "T$__": "B9__", "c4nt_$_": "_ea" }, "__prot": { "__l$": "B_1O_", "w_Z$": "_z__O", "Ccall": "_" }, "B_lr": { "_i": "B", "V0ca": "Zref", "Yj2": "$__V$0_LA" } }, "zzuU3$v": { "$LA": { "a6_43": "E", "qeY$$_$6L": "L0_8a_c", "_8_2$$v3": "j_PR" }, "_Z_": { "$5__": "$00_$", "eH$Gxr$6_4": "_w$V4___E", "__": "$$R$j" }, "e_WB": { "qz": "b", "C6mR0_": "_N91B", "c": "_" } } }, "__": { "_$$1": { "dC_$": { "_$jU$": "_7Y7JX__q", "_ea_": "y", "$i0gL": "__$T" }, "etoString": { "xx$": "_4xW", "v8": "CT_$w9$$mJ", "ls": "_E" }, "wk": { "dwD_": "_", "_12Z8": "Ro3aBFf", "uF$__7$B": "cD" } }, "_S": { "W_3e": { "e": "$Ew", "$___1d0_HO": "$I$", "_5$_7_3Hi9c": "cEh" }, "y$__lookupG": { "_to": "Z$68_1", "D": "gcon", "S_Q$_yh": "$" }, "atoString": { "_E": "$$H___1_r", "Ab$": "__b$_", "_R328_4$": "c8C" } }, "$_": { "ED6__": { "A": "_$60", "_4$$": "eprototype", "N39I$X49s": "D" }, "_x_2": { "_e__vAp": "B_9_N7_0hf$", "_$": "c2", "d3": "B6" }, "Sapply": { "_BC$": "_i$5_O_$$$x", "w": "$$r$$iq_", "w4Q_fPz_4": "$_Nck$1Bxm_" } } } }, "$8M___": { "$": { "_Tp06_$1_7J": { "$y": { "Bwy": "_", "$": "_", "_$G_$_fn": "_" }, "$9$": { "c_88_lt": "c$Kuz$", "$6i_$LQKWF": "L_q38J", "hpr": "V$$" }, "$428_X_$a60": { "$14_Eiz$": "$$_$8$", "Za$5o": "$valueOf", "$": "p$" } }, "Vkey": { "_I3_E": { "Wq1_s_B_r4U": "B$_08", "$A": "bB", "X": "B8" }, "_$s_": { "_d$9b$2a": "_c", "E": "_", "$toString": "ktoL" }, "d": { "l_4Ss$5_1$4": "_ref", "d__I": "BH$d$49", "c__$L": "fx5_0F$6Z71" } }, "_$042": { "_prototype": { "$_L2_": "BS7d9", "DT12$mm": "__I$e", "_7_6$$_S_": "b$9$QB" }, "Dlen": { "Ekey": "_W__26", "h": "E", "z$_30h$$Xa": "_bind" }, "QG_": { "$V_$$$": "g5$_$$K$", "$w$$": "e2_", "$$3xD": "_" } } }, "B92WXDr": { "_": { "C": { "_I_": "c_", "_Lc3f8P_4_Y": "e__", "$": "_ci" }, "_$": { "K$H$$4": "bt", "K$x_const": "LfNdP", "_2_L08": "hvalueOf" }, "bT": { "$u": "$_$_o", "Y___4l": "Bapply", "r6B5h_$": "a_bhp_Ac9" } }, "o$_$": { "$6$k1$": { "_Q": "$3F2kS$$___", "$Y03xxa1$j$": "$C$", "a": "$_9Zp4_8$$" }, "$key": { "yvalueOf": "_$9r$w", "si$$S$": "$N_", "$_o7bH$o$_$": "S_" }, "N_": { "Y$__s": "LX8tMM17B", "$e$z$FCiR_": "v$__$_", "v_$": "D$R" } }, "p$": { "$9e_qo": { "e86_": "___$_3$", "Cnam": "$u$$", "_to_bindM_N": "$O" }, "Z$$_4$": { "epN": "__S0O$P", "$": "PZ8_$$", "$_$1": "_$51f$" }, "$": { "_yts$4H_X$$": "__$54_", "Cp": "$V$NH1$$2o", "_a$$$R$$$": "$" } } }, "$ne": { "$1_7": { "_4J1": { "au$e$_X6_": "YwKx_$", "RXN_7__6": "$mW_$Y1E_9v", "r78$vDF_c": "F$_" }, "_E_$_": { "y_xJH0": "OSo$7$_$7_F", "pbind": "_vT$i_$_K3j", "_name": "D" }, "_$__de": { "_call": "$", "sT_Hu": "_$0Nx67_g$", "___$_$fS$_j": "C_$mQ_Y_3" } }, "eref": { "c$": { "C_ce___V": "_X$$0_", "_$A_": "d_I_$1DAVd", "A": "_0" }, "$8t_Z$___g": { "hB": "$a7_$", "$y_b": "Cy$40Q", "D4__de": "$3d" }, "$m4": { "e$6__$aT": "w_2Ov_3FEW", "r$_0_": "X$y__", "Cz$": "H$q0bkN_S" } }, "EX$$$ozZ": { "B": { "X": "_Y", "DsOwnPropec": "gva", "$": "dnu1_$" }, "b9Ntc$": { "$1V$9_MJ_i_": "f", "$g$$6e_": "_zR$_o$$9", "__$": "_$Rs6_S7p" }, "_": { "$key": "Ta0oStr", "_": "rV_", "EBNh": "clength" } } } } }, "$At": { "_42_$ZhF": { "aapply": { "_": { "_3s8AX5": { "$XV": "_ZCW_", "B$v$JDDk__5": "$12$$__y9$0", "_r$_l": "Y" }, "_$$Flf7$4K": { "$aa": "Z", "z": "$5", "s": "vke" }, "_O$6M": { "__$_": "B70E$__$O", "elq$4": "P_O___", "a3___6ebW": "ob" } }, "e$": { "i35$m": { "$p": "CX", "_": "Q9_", "A8_": "_" }, "_45H$T": { "$": "k6Z9", "rva": "$_4i_", "_Abc": "_okuE__lo" }, "tGE": { "b8_LFU_Me": "_$", "j": "daly_caller", "VvalueOfe": "a$" } }, "Warguments": { "_sf_$X": { "f8$A$n$m": "tvIGNq_$B", "Gc": "Z", "$r__1": "$_9Y" }, "N": { "$h": "c$zmm_$0_$", "$cal": "$$O", "_$$eVL2pd": "Y$" }, "Ksj4r$$$_2c": { "lo": "$key", "AfD_": "C$G_2$", "$": "_D" } } }, "g_cO__$": { "cWng_call": { "$_sq5A9$5E1": { "xx": "aref", "d4$Q_": "X___Wkbd", "f": "$7$Zq$" }, "dprototype": { "yNn2C_4N$": "c9l", "xEv_": "xL$", "J6": "GE$D" }, "__": { "g1vE_2": "$3x1_", "brefctoStri": "_q$__Y$", "dc_0S9_$$": "$y$$_$" } }, "_ref": { "_toLocal": { "$wn": "_key", "$_$J2Ru_e$_": "_", "E$": "D" }, "G9": { "Agny_2$_28": "E5$_", "$W_y_8$8": "$", "S$$b_4": "b6" }, "V": { "$V": "L__N$", "$$$k$": "gh_4O_Q5", "_valueOf": "_5$_QZ__$" } }, "$key": { "$bind": { "_Js6_4H": "G$__", "__Jx_R$6_": "d_$$$6$7", "$a": "CK$c" }, "E37$4$6U_": { "f1": "W05v_3$O", "I8j_mX_O_v$": "$", "L____": "$$b" }, "aPKy27$": { "wVz_3_3$2__": "_", "__": "cbi", "Zcall": "$x" } } }, "_$823zlk$$": { "ed4___C$": { "_5_52": { "_$Yu7": "____p", "Yk$_$": "$__5s$", "_k3": "zp" }, "r$$Txl_$": { "$": "eq$$$_T3", "hr_$$8__4X_": "_YI", "fa": "_$_4U_" }, "$rt": { "$3D": "_P", "$__Z": "_ap", "$vo3_i": "$" } }, "Y__d": { "_i": { "_$Zxjc0a$_": "LXK_", "e$608_$$$9": "_callerargu", "WTAicf": "$cc_" }, "z_$5R": { "e2n$4$d__3": "B", "d_6yDT0": "_$BpF$_O", "z$$F": "$" }, "M2$$$o_$j_R": { "d$d": "F9YpM$iskU", "$_eJw$9Lr_m": "$61$sTYz0r$", "hXns": "$3g_" } }, "z__IZY": { "$236yy7$vw": { "$Ya_": "C$mq_6_ZOn", "h_$T_R": "j", "jva": "W4Z" }, "$": { "YY$9": "$__", "_$": "b", "Kcal": "$OG_$o__$68" }, "$$$ACx": { "_k_g_a0U$": "Bcobind_d", "V$BaoF$": "yd$$", "u0_w": "_o_$__44" } } } }, "Sref": { "__H5r_$7$G": { "_caller": { "D$_": { "$163_$_eek": "B", "y80": "c", "$EAH6cHU_$": "_f7oUW_" }, "U4_": { "Vett": "_3", "$n2p7tcj81": "_5$1$g__8", "W$": "rDoe" }, "o6$": { "$$r": "Z$mIb__08", "_L__": "JtoString", "e": "a" } }, "Adi": { "xs$$7_58$": { "c_6$Yc$Y9": "$W_", "w7__JV": "C", "Ys": "YWV_1N_N$$" }, "E89x_$9F": { "E$9u": "b", "C_7": "j_", "t": "w6___8Wp" }, "$key": { "_": "_key", "cc__J_": "A5P$d$mp$9", "$$_l": "C$_OFqi76" } }, "d": { "eapply": { "R": "Q$G_XU5_R", "b_$K7": "$_1C", "_$$eS4$": "B" }, "_$kr__e$ri": { "wl": "Y_B", "z$$a$": "d_", "$$$4": "_toString" }, "$key": { "$__": "M$D", "$$y": "_A$2", "$": "b$Awrc" } } }, "e": { "e_3$DZ$$aA": { "Nf$": { "T$_7p_M3": "CB_", "gV$T$8p$w": "$$", "oH_$_": "K5$p706I$_" }, "_$b_$$o": { "$_y$_": "_1G$", "$ro": "$6nG", "z3$Ic$x8": "a" }, "_2$_t$_8Hp$": { "s6__0$_h": "____define", "_K": "B6lf7$_", "a$2$Wd$b_$_": "$K9$_7u_soO" } }, "_": { "v_": { "Ea$A___Y7": "_9D_$1Bi_I", "_$A": "$_X", "$4": "$M$$$y$2_5" }, "_6$u": { "__E": "$5", "b$M": "iG_$B", "__$y_3": "_08y" }, "$": { "_yT": "_3$CHSMYE2_", "fkey": "Q", "din$__prot": "_f$814_81$" } }, "$ha": { "N_$X$_1__$": { "y$v003uJgb_": "zB1_l$S_B$", "$_mvo": "$0wx", "P$X": "B" }, "$": { "X_": "__9__DB_", "d_": "__s$", "tOar": "$" }, "zR5_$q_E_0": { "uki4zudl_c": "x", "F3G": "Hprototype", "D9Y$_0": "_GD_rz9VQV_" } } }, "Y": { "$": { "_P": { "_$_88$B": "baya", "$$_A_R": "_v", "_5_$7_": "Bn" }, "e0s$i8__$B$": { "$$Y___": "oX$oE39Z_5E", "V3I08T1_": "u3u_2_$wb", "$NUJ3Brgw": "bs$2" }, "_ze_W$_$_$1": { "u9B_$$": "_4J7d8l$_Q", "$$g_": "$", "_N_": "c$" } }, "C$7": { "c$H5_$mw$f": { "$C$f_W8M$8w": "_I_", "_8$H": "$$0$mlCB$", "__8q1": "BD$D$2z08hZ" }, "_": { "_eY_7a$": "_V$zR_H18X_", "_$$R__b6Af_": "_Z3_jyeC6v_", "e$": "_BN1" }, "$_f7r2J$E": { "B8_Ro$": "_i", "di": "_o_", "$eOf8__de": "ojr6j__EIZ_" } }, "vXK5z": { "_F0": { "$prototype": "_N", "__": "$_", "H4x": "bn" }, "_": { "_iu$_": "_", "$": "Z$$_9$_5$", "B_W$Nn_": "$W__defi" }, "$": { "$sxd": "_", "t$o": "$KJHF10yEL", "Rty": "c6$3$78" } } } }, "$$": { "_prototype0": { "B1V": { "v": { "c_kZu9e": "Cw2cv1f", "__$4S$": "Vd$b__", "jH9r": "ZWx" }, "d$_$Ok$Go_o": { "a_": "xref", "__": "_T$$$", "_": "wrgu" }, "Y8$lS_$vb": { "_V$": "$A_$", "_$c": "d_", "_$X_": "eV$_SL" } }, "__$$d$_$B": { "_V_C": { "$Z_": "_fa5", "Z___": "$", "$isca0_5$L_": "Zy1" }, "$e_E_7y": { "e1ktruc": "D", "$lXe": "U", "e_K": "$lengt" }, "B": { "b__pr": "X____", "$__4__a7": "$_", "$valueOf": "EA_" } }, "w$": { "_$bQ7_W__Y": { "p$$_$": "_", "xd7": "Ca", "_$I__H_5$_": "$$bfm" }, "_77ui1O": { "y$__P7$q04": "AeEa$2R$$5", "$e7": "_", "Akey": "w" }, "_$$i3": { "__WKWV$": "_t$", "bWa_BlYO2_1": "d", "bE_SgiRL_": "_$$rcYbind" } } }, "w_vd0s": { "AvalueOf": { "$$": { "y_5X4lH": "rTw6", "c$_qT9__$_": "_Gr$JOe", "dUqVE_mW0b$": "cAE_qNn" }, "$$_cc5_J4": { "i_vz$a6__$d": "Q30N0bC$0", "b_$": "$_6", "n": "_mo_" }, "wV$r": { "gDP$n$": "_$", "_k6D_M": "E3", "_0": "Cj_OG$" } }, "vE_SDE__8H": { "_$q_u$_": { "I$$_dJ__loo": "Qe", "_": "$$Wsw_Yt_", "__71h_": "$__6_" }, "_toString": { "$4": "fx94C_498", "C31_": "ya16r$m9r$", "_93s": "_c" }, "N8$2$_M$T_Y": { "$$": "j_", "_fug__CG": "$$$hj_V2$75", "$_2_8T9": "Sp__" } }, "CvalueOf": { "Y0$_": { "$V4_$_$M$": "$_a$U", "$$_2_": "$c__o2_$", "$m8dJ5_q": "__$_i_" }, "Wfv": { "EZ2$_v": "A42", "Kr": "cT$O_$_8c_$", "EJ7": "$w$X$$8a_" }, "$rq_7$z": { "$0q$__ImtH4": "$wZcN___", "_0G2$": "q$C$$$", "$Te": "$d" } } }, "z": { "$vS$y": { "$__l": { "$__v$Y": "Slua", "_n": "__$ZrNMeN", "A2Yp_8Go0": "_Z_P$v$G_m" }, "_": { "z": "_Ch", "Mc": "$apply", "_I$_Jn3Y": "A" }, "$": { "$": "$2_", "$_43_3W": "_1$_zqA", "b7$nKf__": "RH$__" } }, "w_N_$_UaB": { "b$3__dc$$_": { "Aza$": "e5w$_d$", "WMy7": "_$W", "_": "a0c$F_5B" }, "t3": { "O": "_4hdVnS74u7", "O_0__34tpN_": "$valueOf", "_$": "alwAg6P" }, "_0vW$_pMAv$": { "$": "_g$_v_$_1$a", "_iD$8_": "cco", "_$2": "$t" } }, "i1": { "E_lXT_P1L16": { "_": "C$$A__$Q", "_q_X": "aQN$$2z", "w9u_$w_": "$5" }, "$": { "A8u$": "jq$d$4_9Gy_", "L_94p7_$": "_ar", "$0": "L_0__4" }, "FP1$_$$B56$": { "Kyln": "z0", "V": "$_P4$02", "$a": "_$$R_1$_4z2" } } } } }, "$N_1": { "$$__$p": { "dW_Cc_9_g1G": { "e$e84$1__$": { "___3_w48": { "_$$_Jw": "yEn", "$": "_", "Brgumenpro": "$_0Tm$ge_r" }, "c0$k_W_$": { "z$": "ap", "_Zp": "C7$$a", "_3___y7L": "$_vJiO_$$d" }, "$_x$nN___$_": { "$O__sh0_": "_$_7a__defi", "Apbind_$": "VW$3bGw", "BEuE6_K$": "$A5" } }, "$cJ": { "F__$v$$d8": { "_1$_W9_": "_$$_$1_v_", "$_C$b_": "_ref", "YE": "_$U4_H4" }, "z7C____": { "__$av": "ec", "$__d": "ey", "_EX": "$_$$$_1" }, "$b9$": { "B_Ii$__": "$$t29___", "$Y$zB": "L$E_94xEX", "__F1i_3": "Ts_DfVV_G_" } }, "_e$$": { "_Z__S_$8_": { "_": "DU_244$30a", "__A4": "C5J_c__$z2$", "$_$0_cd1_b": "_M$$$_8uF" }, "_$i3_$6kT": { "B": "r", "Xref": "A", "$_fwT_kC__5": "Av" }, "dE$Scmu": { "_w": "q$DC", "a7_": "P$2_$xK7$", "a_$MO9v6mi$": "$A3J$T$_p" } } }, "C$fo3$_$$1$": { "$": { "_$$f_9Bs$$p": { "ol": "A7$n___", "_": "bvalueOf", "_$": "Y__I34x$__D" }, "zrefy_cgxrg": { "$": "_keyM$_", "$1bd$_": "PGVz", "bu__": "_454_1$_dg" }, "$__": { "_o$A": "$", "$RZt_u$": "y$N9c_9_", "_b59O$4_": "re4vb$Y" } }, "Z6": { "_8S": { "_": "w$u__5$$q", "Z": "Ch", "V": "Z__4_RO46" }, "e64": { "bY5": "$$", "BvalueYH": "_8_a", "_1_k$2Rq": "_5$__v$6h7" }, "_arg": { "b8_y$": "_ACE08", "_ty": "$$", "VnDaRIl$vc6": "oc" } }, "eref": { "Hg$_": { "$0_a": "valeSr", "D__2Pe": "$r6H", "aC_Dc3c": "__" }, "tO0$$": { "_": "wn", "D": "r2y", "ETLU0$$_Dm": "A" }, "k9valueOfa": { "agnJ_": "u", "_$3_m3e$1": "$CC1", "$Zn": "Y" } } }, "C$DoN": { "$$_": { "$$$$0Goi": { "_$j": "$_$", "Qna": "$3$_U_", "C": "Xa" }, "_D6lerapply": { "s": "lX_$", "dS6MHcF": "_L76I_$_$e_", "F_lUUa$xm1$": "dSn_6" }, "$call": { "j7J": "$u_m6$W6$18", "_EC0c$p_$": "_m", "$call7": "$5" } }, "JE_Y4__": { "_": { "PvalueOf": "_NR2", "M_a08$d": "A", "_K_$DuQ3": "VTX" }, "_$X": { "__B": "__$", "L$Q$_$36kj_": "bd_", "dH$$X$M8": "__0L" }, "hQSAc_N$_7$": { "__": "v_WP$_", "$": "$_$__", "IQ$Chf8_": "DGnp__rcMK" } }, "$_M": { "z$uTI": { "___9hVJax": "O", "_$_$$tC6J": "_74_", "Ikey": "eS$_tlQqR" }, "_ref": { "U3c$3__Kw": "_2w_k4___y", "_ke": "$8$$$t$u1", "$": "_$K8" }, "D$_": { "_$uk$l__4": "_WIyR_quq9", "$rxID8e": "k6$R", "z": "$Cd__gaLCX_" } } } }, "ECva": { "$1__": { "$": { "__": { "$__l": "W", "$E$$$6Aq": "_p$_4_NHZ", "_C__": "_f$" }, "W": { "_iJZ": "$_B$dZ_Y", "j_": "A_$___4_", "$": "x_c_1SGR$z" }, "$k": { "_apply": "oeyonstr", "$_": "_", "_": "_$d$_" } }, "SJ2W___z1x": { "__": { "$$C": "WW_GI$", "ek": "_$5", "v_": "_" }, "E": { "yref": "_D0LV____5e", "r_": "_GG11D1_5L", "NKke": "_1" }, "_u_": { "$": "Bcall", "_$5COB$_E$": "$Ch$_2FAn8", "_S3": "$valueOf" } }, "Ex___q": { "e$N": { "$m": "A", "Z_o$": "$", "$": "Mx$$RLI$_" }, "aH5x_": { "D$": "$key", "C3$$NqZ$7": "jQB$Dr", "_mj_E4": "_8U_TP$3$R5" }, "X_$_k7ia$$w": { "_sX_z_$_lp": "$$___", "nca": "$f_4_U", "v_5d2jfN$_": "$" } } }, "aisProte$": { "C": { "B_s9d$J__": { "Z$AC$0JddD": "D__8$", "$": "ZX_5t$U", "_eu": "J__$4" }, "bT$u0__": { "i_v$6f5_T": "YOx9p", "_6$$_Ok": "Gcaller", "ER974$$$6D": "$o8w_sEI$" }, "_XH": { "lL_s_$$GXt": "I__loo$$$n", "$$oQ$m3": "$S0_B5R_", "DaA8p": "zn5S" } }, "_0__ZyW$2$2": { "m$_": { "ms": "_", "Lw$F5_": "Zk$WE9oP$$", "M28": "e$$h" }, "_": { "f_C": "eokupSe", "wx$d3Cq_": "_caller", "bP_oK": "$" }, "hL": { "__4": "_$", "XE_": "$a_3", "__39Bs": "$2u" } }, "Wv": { "i0_$_3": { "___": "_h_RH$O", "Varguments": "X$$", "aQ___8Y": "k$" }, "$u": { "_tP_$_81G3": "$$_2H", "a9r": "P", "_23$argum": "$jt6k" }, "H": { "EY_": "_", "DNXke": "if", "_C1w_CV$": "JU$$6D$J_" } } }, "pCXJ0Mye7$": { "Z$V$_j$0f7": { "C": { "r5": "$17_$5x_dIN", "X5kF960$Z6": "q", "___l": "$_" }, "$vA4": { "yf_$$": "N9", "cto": "O$F_", "_02r9hM": "E0" }, "$$$C_$": { "$4$_y_26U7Q": "xnamertb$", "JT36$Cu$TQ": "__4i7P___49", "_valueOf": "$__proto__" } }, "V_j7": { "V_9_5w1FA5$": { "E_B_$b_": "_K4", "CvalueOf": "_$0$__$B9$$", "Eref": "br2$7_Q9" }, "Cprototype": { "_$V08": "J_6h_$$_$__", "__k___$v": "$$$_uh", "V_": "__7zQ" }, "_4$J": { "R": "BQj$10", "$R3_TLLO$": "_6f", "D$": "b" } }, "l_": { "$": { "Xa5": "D_40_WP_6_", "_Yarg": "$H_3", "a4_$$F$": "$_A_$" }, "$r": { "u_$7hroQ8$": "YI$m8n", "_3_8_$Ad": "q1$", "$_H$8": "_" }, "D7_$$7GU_8": { "Bd": "$", "E": "m_", "S$wAew$D": "n$$" } } } }, "$_DzNmDt": { "_6_m_": { "a": { "__85_Ik_$$$": { "m7_$$H": "_i", "$$": "$9_$4$$27_", "_lo": "g$wF_$71" }, "B_6n8V_3": { "$ref": "_", "_U30b": "B", "jX_c2_X0": "$7_6U" }, "C4_951$_Y_G": { "_jH3$d": "ZtoString", "_": "eI", "D$B": "As_$_6i$s_" } }, "GZIlwUXa_t": { "L_E": { "jueOfas_e$h": "_$5", "RF$": "C_E", "$b$b$uueA2": "f" }, "d__4_$": { "_": "Dlength", "n_$9oGhPve": "N2$ew4", "A5": "$$$" }, "Y5v$m$_v": { "$$S": "X0_9", "_$$LXbs8D": "__$gHaR2E9$", "D": "$mX$$z" } }, "b": { "Ykey": { "O_": "$tothasOwnP", "n": "$", "V__lo": "_e11W" }, "$$3ez$YbT": { "$9__": "e$___lookup", "$toStr": "H__ey0S__de", "d": "z4Crx$_$e$" }, "v_3": { "sarY__$_97Q": "XG$", "$___2$pM$4": "__N_bN9XC_W", "$": "_2q$" } } }, "_": { "_o$60_Xth": { "d": { "$call": "D$__J2g", "t__7": "Lke", "$c": "$pbA_JDd_$" }, "M_": { "$b9": "$", "W1_X_3_EZ_z": "$toString", "$": "$_PN" }, "_": { "_2$": "$C$_", "Flp1E": "_EF$s_qP", "dIK$FC_OtH1": "$toString" } }, "m8$": { "j_9s_2sv_y": { "_": "_ey", "BisPro": "_", "_pv2$_$2K_": "D26" }, "CrhGjl": { "_T7__M_": "A$", "C_n": "cE", "_C$X": "i$_X8pCHl" }, "yp": { "Dlength": "a_", "_": "e$$_", "tp": "_f" } }, "$$2": { "qx____": { "_O$$$TH": "p9i9e_", "Ct": "V$", "Y1_c$r$": "k24$d$" }, "$r": { "e$m_6_72w$_": "_1$_$1", "_N_$ADk": "UvalueOf", "$_0p_l$y$": "D_05_$_$7_" }, "_": { "_RI$$_a54w$": "hmKQ_T4X", "_": "C_", "_0ke": "$p_$pS_7_" } } }, "_Y": { "Zc": { "$A_XiWRw": { "Wr": "m$J_$$$_", "_$$4": "Aref", "_w$": "_ume" }, "_isF": { "o_": "$7_$__ETj_", "M4tR2": "$Nhw_$1s1o", "$_kMR_$u_": "LxK" }, "$_W$": { "$L93$57_1": "___", "wB6": "d_w", "i": "$_z_5J" } }, "$v4$$__Fb$": { "$$6j__o_": { "$k": "e$7", "_1": "w", "__K": "V" }, "yE$": { "$$_bind": "a_", "$2i": "_7k$4", "s$c$xj$Rg7a": "c" }, "_$skka": { "$_2829w_Q": "_i5D_5", "L0_$__": "q", "_Z$$gu$Y": "_MD_C_XCY" } }, "$": { "V__1VkJ___B": { "l$_": "C$Y", "W$": "$toString", "_7$$E": "eA$" }, "_V_1Bt2$r6": { "Wname": "k$_1", "_$wBQ_4A": "c__def", "_5cons": "_$h$$$_$" }, "WvalueOf": { "Zpro": "$arguments", "$82eC": "zS_8", "$P$_6t$$_": "vtoString" } } } } } } }, "$": { "bvalueofe0CM": { "A6": { "d$OZ51$b_": { "C": { "$ec": { "_O_170$$O__": { "Y7c4sx0U_": "V__8", "f__K": "_", "_4$": "$0v$jp$" }, "_$_3$": { "_K$_9z": "_ref", "__$lwnq6F": "_$8Oi$", "bb": "B" }, "Wn_56$": { "Bbi": "_380_F5sXj", "$4$": "$_k$_DK70J$", "_": "a$fm" } }, "_": { "vWb": { "rs_1ex_CO": "b_", "e": "$_", "$xE": "w2$" }, "eD_s": { "__": "$x2_$r888Es", "V": "nn2", "c_PmzJ__$": "Yw" }, "_8_$": { "__o9$$3PH$$": "kEPrsOwn$$u", "_$$_": "yN", "$00": "U$p2C" } }, "_W_$g$": { "$__QL__$l": { "A$ed": "_Q$", "$V2x03h$": "d2", "s$31": "E" }, "ED$vH7$": { "A": "YzC", "Are": "_U__14r", "M1EcW2DK3d5": "$1___67" }, "v$x0X$Ws4$c": { "_caller": "$__6", "_I$71Xm$_": "$key", "$3": "$_" } } }, "$_": { "dZ": { "iq3_$8_": { "$Od3$MV8t$": "$rot", "__G$$y__2__": "$", "El$3_DE": "C$_bdmv_d_" }, "$": { "_": "__dm_s$", "$L": "_$", "b_Y": "$0j" }, "e1$": { "nC861_4p0": "d$HBT$J", "__": "$49kW0e", "$__ds_$": "_6G" } }, "$": { "H": { "yto": "N_3", "y6$$_N$k_z": "$zV$", "_$__6$_C5$": "$C0K" }, "Dref": { "_LQL0E$3Z_": "c_u", "_i$$": "$toString", "db$": "_Ce" }, "kWm26_79$S": { "__4t2U$": "E", "$_": "_C$iw9qBu$", "W___": "$2" } }, "C_y": { "$prototy": { "S2__$$6$": "_key", "$k$F": "_i", "Db8$$D$t": "_pp" }, "K": { "RW": "$_4_IKLE$m$", "L__w_jp": "Z_", "hpropert": "$V$E" }, "$c": { "$6": "E_U$S__drY", "_q_c_rN": "$63_$_", "w8": "_E" } } }, "BbX$8$__hf": { "$_": { "_6opUa$E": { "$g": "_fint", "C$$_wZ": "$_5_", "_apply": "e_$2T$C" }, "X$0": { "$b90$VDW7_": "Y$m$a$", "$o": "Sa", "j2s$": "cE" }, "V": { "D3t": "_A8", "_22Sw_": "d", "zKV_": "$8m$dr$" } }, "___3$$d$": { "_6": { "Kref": "dn", "$$_74U": "v$7", "C9_l": "$8g" }, "y": { "V$_": "Mt_U$_3kj7L", "A4hasOwnPro": "V94y2x", "bme$": "_N6d" }, "l_8_h9P$C$$": { "V_V": "a$9", "_valueOf3": "$i_W6_$2_c", "d$06$_4_$$$": "l$$5_Ih" } }, "U2_1$40$": { "$V_": { "v7M_d$TJ$": "_61_", "__8W": "bvalueOf", "c": "$$_k4" }, "_me_0$irin": { "c0r_": "$g____", "a": "e7", "cjc__M_4$3w": "Wo" }, "$_$_wy_": { "_K99YXN154": "$NKzo_YE", "a$$": "_1_$g_ukt$$", "_7xj$": "$Q$U" } } } }, "V": { "l$0": { "_": { "Y_2B_P": { "Nd9q1$$AA$N": "Z2_4_G", "$$$291": "_o", "$$$$": "B_" }, "akm0Cj_": { "C$9TC$4H": "_1$$8__l", "AOj8$_TQDq_": "$$2_$ZkY3", "lvalueOf": "d_$nJ" }, "_85": { "e6d_fR_3d9": "ysDSt$WyFG", "b": "Z2$qC9", "_": "$v1H1$i" } }, "__8X_8__Xg_": { "_": { "f": "_V", "O___v_K": "A$", "e0CM": "E__9_6" }, "$$_ve$_8k9": { "vbind": "_W_B$b$__", "H__d": "w", "D_C_wdMuU_": "TL_3$_4" }, "y4$h$": { "_$1": "$", "_12m": "Db$2P7", "_": "Wot" } }, "$g4$$$U": { "$$AbxZ_r": { "Ef_7_": "Z__081_", "z": "h", "W43_W$$$VM": "$E" }, "F3_$_": { "LXi_B$": "$_hyM$Fp", "$": "_$$$$S1$$C", "$valueOf": "yaIh_BF$" }, "cA_vaI$QC$W": { "Ff2": "OB65__", "Y_5_$": "_nzfY$", "J": "___$r_0L" } } }, "yj_": { "_k6r": { "ccaller": { "l6g": "V", "z": "$3", "$": "fam9" }, "k$$0": { "w_Ee1$2": "$oPh0t9XH8", "$app": "RD", "J__proalupr": "e" }, "_6_m": { "J7$__W_D1n": "_", "$$_EEu$g": "$vUw1_x", "$$_W$": "m_2$callerm" } }, "wb_": { "$l": { "QvdB6HHjc_7": "O", "_4$Zvl": "$4$__fmGw$", "_$": "__ZVt" }, "_key": { "K_": "_$0", "bX": "BI$N$6O", "L3q0sO$V": "V_j94$1k" }, "$271": { "W$JEq_dl$k": "_X$_", "$52MRMdQ_$O": "$", "E$6_rm_0_S_": "$M$$_1" } }, "___$gjH_": { "ZiDWN5c$": { "_eNEz$Hd_$": "$6__$_O$Sf", "z_2$Lwsd_": "l_AU", "$y": "e_C" }, "v7_I$5fL8$": { "$Q$": "EXJ", "E$__": "_", "_3$8": "E1cZ" }, "$": { "_XDm_a___y": "dna", "d": "_n7$Pb$P_E_", "Y_Ikw73D": "__" } } }, "_": { "uX__": { "_$v5v6HN_1": { "$": "AJH$$t_t", "Ex1W": "WJ_m_k_$$5_", "_$k": "$6$MEm" }, "BV1_": { "Xj": "__", "_": "_$U_SS$__9", "S$yW_$k0": "_1__3" }, "A__proto___": { "a$$K": "D601$0p$", "$W_Xw": "w$h", "$_T4d$Y$_O8": "$_" } }, "W4_6_FH": { "$9__77N__9_": { "d7": "_", "Ck": "$B_u_VQb$28", "a": "_$_QYP23" }, "_310": { "$calle8ca": "F$$", "Hd4": "$$Y8p_$$b$d", "_9A5a_6": "c_Q" }, "D": { "e$_": "C", "B_2_$O$c_": "eFE51G", "Io": "$__$" } }, "D$1_9XrefPr": { "__$": { "_jbhU7": "Vd", "W$": "$_c", "D": "i$_$" }, "$4T__b__w$$": { "$a2": "ciEi$70n", "Xe": "X", "xkey": "r$_5$$$_Q_x" }, "c_f_hQ$E": { "Wt": "_valueOf", "$_gJ_d": "_", "$T$994": "R__$" } } } }, "_3$X6_3S$7O": { "_1R": { "e7_$rZ7$_79": { "S2": { "_1fB_T0m$E$": "u_jN2_Q6_", "_$c9$cb1$": "t2", "V$$": "$c$_$1" }, "_2": { "acal": "ivalueOf", "__9": "_", "Ch$88sj$B": "B__c" }, "$j2$": { "Be": "_E9_$$ZC$5X", "_Pfh_$j": "_q_5g_5N", "y": "x" } }, "_43c3__U": { "_ER$$": { "C3": "_", "D": "$2o", "$call": "QXq$4$lm" }, "bj": { "$$UNY": "_6$I__Op", "$J__": "capply", "G8670O": "$_J9" }, "E_$_Kx": { "$": "_$$ccbE_", "n9s1c": "V", "_BE399_P": "$e" } }, "__l": { "_D2FE": { "Y_": "c_", "_": "A$_29$$", "kW2": "X_2R" }, "E_Te": { "$isPr": "c_", "$$B$$_": "Vc____$TC$", "$x4__$_370w": "v" }, "_$$_NOadGV": { "ei": "$EvBc7V2", "_to": "___pha7", "_LI_$6__Cb9": "_$vMEz1N43_" } } }, "BP$": { "_bi": { "_$z6$S_kM_": { "Gcall": "_n", "AD_x": "$3Ei$0$rx_", "xV_": "c5683O_1_" }, "$": { "C$": "C$2$", "y": "$___$_6_A", "t$X_V1S": "Q_R$_A2k" }, "$_b": { "b62_O_": "_$", "a": "B__$Ax", "DEO_R$": "x5" } }, "e_$Jy_WA6$_": { "$a6V2B_": { "D0$K": "$$_$3$p", "Zd__Fr": "$m", "_Ep_": "$$" }, "ecal": { "$": "Eo_t9$", "O": "$w7$$$K__", "__th_pr": "col" }, "ei3g$": { "_": "$646W3A", "L": "Pa", "$4": "b_" } }, "Y_": { "$aJ": { "CE": "U_b$3", "_9_$_Xu$": "_e", "DW6A1qZ$": "X_" }, "a$Y$$__V_0": { "dA$7_4o_6zU": "L_", "bFpTyv46$__": "z_f_$_E$", "Qb$b_14bL1": "$ll" }, "X7__$EY": { "nj_C___$1C": "p_", "$_$B": "YHK4", "ASqM$0": "$" } } }, "ADyM$": { "w6_8_b$i": { "A": { "Dm$4IEK": "r$_evalueOf", "$_19G_": "$Vm_", "$_S7_34Z5d5": "Nis" }, "$$x6": { "w9_xD7d": "w_", "_3": "nref", "Cbi": "zFt$o_4$u_" }, "e_iSM$$_": { "T0": "___proto__", "nl7$7pD_D": "W", "Ae471_$": "t$$b__$_" } }, "$_DkF$m_GE": { "zk": { "$44": "e_1L58$", "$5KE": "$$6", "eh$$__v": "$V" }, "$ref": { "_q_iaA_6": "$apply", "C": "__5n___$", "$caller": "BW0" }, "Q": { "t": "_caller", "_$j$A9": "TXt", "Z_": "___$Yl5_1" } }, "$2Tu4$_yvP7": { "$G_U$": { "_c9": "el", "a": "Y", "TtF": "_y__0$__" }, "Lg$2_d__g2": { "C": "Lar", "$": "$aa", "w_$s": "e_q_" }, "Capply": { "dq_$4$$Ov": "A$", "MEy": "$_fp9", "S6$": "_ref" } } } } }, "Czo_YE": { "_": { "Dkey": { "_": { "$aot": { "$_$x$_e": "$VE", "_$a": "yinrgume", "$5G$4$": "t_1t" }, "wef_c": { "k$": "$Q_q", "tyHpdLCQ_E": "DU_F7Kp1B2", "eE6_": "D_3$$4___v" }, "y_eA_": { "Cwa__y$_$0": "Pn_5F$_$7", "ilength": "D89", "AcaDy6022bw": "H$qG$p" } }, "Ul6yh": { "__": { "tI_9$_GG": "Ky$", "_": "Clle", "A34h5r": "_$" }, "$$$Q_Q$bZ$": { "a___YNG$$": "_cf8$", "T807MTR$$": "e$48Z", "YtoLoc": "bC$W" }, "_$$zJ$v": { "z": "$_$", "zw28$E$9v$": "_$_JA", "$$6$": "Q_" } }, "SQ": { "_0_$gS$": { "Yref": "l$dw", "v_$": "gF_$", "c$3$s4GZ": "$AWX1cW__B" }, "Ao": { "i__d___a": "_$dv_L", "__": "f9_$_S5$y", "$$_": "B" }, "d$": { "V$B_H_t": "Eb_7Y_", "X$": "$_k_w_$5k$$", "_a": "_dm_4" } } }, "__Pngha": { "D_F_": { "Zl$": { "X8$t": "pj$90n", "y": "___$n1xC", "C": "$mCx4j$4$" }, "_key": { "$$_Ez_2Y$": "$ref", "_Do$__": "$rt3", "_ref": "e$V2FA0$" }, "bA7": { "A$F": "yy73ivD__v0", "wRo": "_", "__dx$ed_xqZ": "c$3__$" } }, "cvalueOf": { "aNC_5$uU$3": { "$E__W": "_", "_$7b": "AlC_de", "dG$869$s$": "$apply" }, "DX1hk": { "d_Mj": "Akey", "_": "___Y$$zQt", "Bref": "X$" }, "e": { "G$$OV_": "$e", "$e": "A__5$$", "w$Q$T": "$SJNHwZm2" } }, "$$yWd3": { "_1$7o$$": { "y$": "c3DCGI$3__", "Eh$": "$Pr", "_bv_hV__x_$": "_dC7C" }, "M_e8": { "_$$2_": "_", "_l": "$L_$Cu8q", "c": "$3a" }, "x4": { "sV4$$3962": "__", "__z": "$_", "$U": "_XaCx" } } }, "E_1_2d0": { "$p9$h1vU": { "eK___kM24": { "$C": "b$$__39v", "w$_F0": "n", "$apply$_c": "Fproto$$" }, "z7_w": { "Ar": "$8_7Y$", "A$": "Y", "Y": "AEE_" }, "dTLn$$tsAD3": { "lB": "V$$_1$", "__$dp1qG": "$key", "aw$_d_C": "_ref" } }, "S9___$Xo3_N": { "a$$Gn_1": { "$R": "CM_$3w_s", "__2B": "$", "ClE": "Fr9_" }, "D_$": { "dea_$ZI_": "Qu", "nE7_q8A$": "A_a$W", "y4S": "$1aq_" }, "$X": { "$$VD$Go3_": "$6_v$$", "V_$S5_D": "Wp", "_$$_$rJ$_P$": "$a" } }, "_": { "U": { "$to": "$$$_$", "N": "pis", "D$$$5": "x_" }, "dL": { "Wer29_9_": "r", "Ph$oz$7": "_", "W5_$": "econstruc" }, "_$V___L": { "$_$7_PNX": "c", "_pr": "$", "j$": "ru__6$$I" } } } }, "$C_4": { "I": { "z_tEt9Y_": { "D__5": { "_D_$3_7i87": "$$9sK_V", "__o": "$1$8", "_T_Dd$q5_T_": "Sv" }, "__": { "a": "$jmo$", "bRp": "__E3XQ_$a_Q", "_": "c$_i" }, "Ru": { "B": "_$D", "__$$": "$as2q7K", "_e_tj01$": "_va" } }, "qa3_$": { "_rejU3_": { "_$": "$$e$$f2t$$9", "_8": "l__", "_a": "p__lookupCO" }, "vX_6VD_": { "BdrejD0_": "nOm$__R_MA", "$VaW": "y$a_X4$A$", "$": "$" }, "ve": { "t__2$U4_$": "De$bJ$_", "$pr": "_fM", "_u$QvF6_F": "aX" } }, "$3": { "$bi": { "Ynam": "_9gf", "Y2Z": "Z1_2", "dkey": "_" }, "$i$__57_$_6": { "$1B": "_$0lengh$", "$": "___", "w": "$$_h$$G4_La" }, "$Bwb": { "zu$": "_E$Iw", "WXvc": "_$7x", "_": "$gJY" } } }, "$R$_z0$": { "c": { "$__": { "XFk$GGQ7$9$": "$___$$l", "W9D_": "d64H", "$$": "$Jdc_b1_4_6" }, "i": { "_q0Zx": "__String", "v_c7": "$Exn", "W": "E7s9$H" }, "$2_": { "Ad_7_y_1$ei": "DJ4h7Dt_I$", "bHu_d$": "g77$0u2_", "$d$$": "c" } }, "$m$": { "e$": { "_C$_34__$": "$C__lookupG", "$$": "$TJ$OeN51", "t": "_toString" }, "v$": { "$": "$", "B$_n$$RsW_": "E$$hv$_3f_", "_ko": "_v" }, "jRu": { "_DK__$$$": "$", "$v2": "c$nd", "$": "a$8x0naa" } }, "ckei": { "dsc87z_$": { "$_$": "_$0$TQ___", "C": "_o1Pz", "dD__$_szu": "Z" }, "V$": { "_": "D_", "x_$qy$bNW": "o$T0QI_", "$X": "$toString" }, "_3T$dD_": { "__1E$_": "_Q$wa__KD89", "__iC": "$_a_", "$Y9$$n_$$$$": "_$2u7_D$Lk$" } } }, "EV$$_6_$im$": { "$4B$_9BhDA": { "Eapply": { "_": "dHN$2$Ay", "_c": "U", "_$_": "_R" }, "_Fen$$_e$$O": { "$$$_": "g$5__iAO3", "$nC": "$apply", "$D$$": "C" }, "f_gs_g": { "V_J": "Hj8$$$4$Qb", "Dapply": "_$jQ___r", "$": "Y$g" } }, "_O_TT_8_": { "$p7p": { "___": "_", "$0z$$$$_r": "$$N", "$A": "$pr" }, "S": { "B": "$apply", "$__2v_RD": "V", "___": "y_anP" }, "R": { "$8j": "_a", "E7o3H8U_": "y__defineSe", "$e4_": "w$$A" } }, "$": { "X": { "OtoString": "T_L_", "v7": "plength", "w": "l" }, "$34w": { "b": "$$$l__$u", "_apply": "CZ9ld__i$1", "_": "_50" }, "_YZ$$Z": { "xP": "$", "C_2_": "$$Bc4T3", "$ref": "__A737$Cy68" } } } }, "c$P_$_J__": { "_W$69$_Ojp$": { "$2": { "XIg": { "_$": "$z$B", "btoString": "oN_f", "_c": "$_" }, "A$$a$R$": { "xR_CA_": "D$D$x8E_g", "H0": "$valueOf", "B1r": "$743H1_j__" }, "$9Ebeg": { "b_2$$_1ic0": "$_", "OJsG$a344$k": "_0", "cprototype": "_03w" } }, "_z_e": { "X": { "_c$": "m_c__d3$", "_$Y$": "$x_YE", "$Z6": "$argu" }, "LW": { "_Hl$": "$$QW$17", "$DmVC$__": "WF0_G54_$0$", "_$DE0e": "n6$" }, "$x__f": { "z6_BA": "w$", "$": "Te_$4o", "g_f$_1_Imd_": "Z" } }, "B0vd9$_0EC": { "a0u": { "$e": "R1", "_D": "$h", "_$$6$$Y": "$8$7_x4" }, "$app": { "$_y_": "$e", "$": "Ks$C", "WD1i_Jep": "klisProto" }, "$D$__bz": { "$": "VR$0$YXb1$6", "ASO_$FZA": "$$", "_": "_ZBd" } } }, "wbi": { "E_n": { "a": { "e_$Dnu": "gesuh3", "k$_M5": "q$$_", "_Is": "q8__$" }, "McFB0y_": { "Z0$_R$NKS4$": "_z2$d__", "_l_f$_": "O$8_", "A$_$": "Y1" }, "n$XMJ": { "zprototype": "$tSM_67xpd", "c$h070$t": "__f$6_4s$", "eT": "e_$e$8_20ty" } }, "c$2B4nZ_D": { "kBr$": { "r$$$1jyZG$9": "_z__3u", "$_C_6WvJ_82": "$7C", "C": "Z6" }, "ycaller": { "W": "$b", "$_1tya": "D_e$", "_d$39_$2": "_" }, "J$c_I8BaEw_": { "c$": "$i", "Xw": "$e", "TZyI$_O4S": "_suj7" } }, "_____": { "vpb": { "xT": "$kFl0b_U_$", "b2": "_C", "c4x$$_$nH$l": "Gx" }, "J5Ai": { "U$w$2$$": "s", "_$_C": "___U5$x$$", "_": "v_b_v$" }, "_": { "f_$Q$w84_7": "Z__Az2$8_", "$_X$_x98B": "__x1_1_S$", "$$7Y": "f$t" } } }, "Yt": { "Nw$y___9c": { "$3P__6$Z": { "A$": "eSTO", "A$F$WwD$$_2": "VY", "x_toty": "__$3_" }, "E$": { "_e$$fE3a": "$z$__", "$_l": "_0$isProtot", "$$9$N0": "_$0" }, "$7_$$_": { "C$": "Wc_", "$": "z$$x_6o", "$$__$$": "_k34iSj" } }, "eket": { "eisPro": { "_$$$2_N": "$__$ovze", "$_CW_$_w_": "V_", "_E__defineS": "$p_" }, "$": { "CF$KQ": "v0dlj7_eKp", "c5__e$$h": "eref", "x_": "_" }, "VK$_eV$h__": { "D_$zt_$UW": "_to", "_l$": "$$UM1nwl", "q_": "A" } }, "__$": { "gis": { "$Fw2$i9": "$2c", "__P$": "_", "v_$D_$8$": "_$6$$" }, "$_$_AK8_$": { "M_V": "$key", "_ref": "$__$$$$$6", "__$$SO$": "P$7$B6gxF" }, "L_I$$_": { "f$$$7_z_s_": "z_", "_apply": "$3_kl_", "M__": "m2er_gt_$n" } } } } }, "A$r$3": { "_rot": { "uU___$_2vq_": { "wxW$$d": { "ZH$$6$3X": { "$": "$$_Mf", "ahBk_3$_": "_", "$A4": "$" }, "c0g91L8_vx": { "aY": "a2$$rwi$E", "e9_o7$6_F7": "A$ro", "F06$Kh6_9$o": "RH$_$F5" }, "$$s2a": { "b$___7$": "$u", "$Be63_n$y4_": "$__G", "$V_": "$l" } }, "_eC": { "aSvUv": { "w": "_$$MI", "$0Uat$_$": "_m3", "B_$2IMa": "w58_$_" }, "ecaller": { "B_$UqSi$c": "v_E8125x9$$", "BO": "vSt", "__W__I": "bu9" }, "Eref": { "okey": "C1", "Af$S_T": "ZCW", "_": "X$A_CI_$_$7" } }, "$h": { "a_": { "M__d": "A$4$", "V": "W$", "B7": "c_VJ__48N" }, "$$48": { "$_e9$__$$": "N$a0", "Sx_R": "_$_t3wBK_X$", "N_l$3$": "$Fhe_K5" }, "$$J$0": { "_": "$_R", "a$": "bjz_", "$ref": "W6hasOwnP" } } }, "De50$_jde": { "C$A_Ek_D_": { "wE23": { "_8_N2R_19_x": "$_ci9$M_", "T$": "_dcA$2", "X": "C_$_8B_b_" }, "$FJ$7___y1$": { "_9_$": "d$Bx", "d": "Bo__$1$_Q", "i_$": "$5_" }, "v_ic_CF_": { "x$c$X$_1": "_", "$_c_K0h7": "bL", "D8xd1$Wc$2": "a$" } }, "$32$CRy": { "d$$E$97_v_9": { "D$$$": "K$", "ee_5": "w3__", "__XT$k$5$_3": "sapply" }, "ydu_hpv": { "zj53K_": "pv20", "$$O60$m$$$$": "e$", "$9$$_T5VZ$": "_" }, "Ei$9_D__Ar": { "X": "_DqSd4", "_t": "__91", "_to": "A$$_$4$G" } }, "JFd$K1Mz$c": { "SO2_": { "ww__def": "_$v$Z_q", "EC__lookup": "$_Xzr__o$", "a": "$r$2" }, "$26yDqYzH": { "$$n1Za$Z0": "_J7VPF", "$$": "$_Ei8_u", "$$3_": "iref" }, "$G0$": { "_f9_": "__b", "_2$": "$35O_pLH$", "__Z$BD_Ae$": "yprot" } } }, "$hB": { "$ar": { "$J_Q_": { "mx": "Ds3$M", "v$D": "I_C", "daJB1A": "xD$$$pp6n" }, "__toStrin": { "c": "XC_2", "w_1TS8t_$": "Z", "_K2g_CM": "__v" }, "D_3ah4": { "_": "_$", "_$__88H9$": "Wi$4$", "bab$value": "L$" } }, "en4z4_": { "F_1": { "ev": "E", "_0ig_j$_": "N$b_Y_1", "V": "$" }, "A": { "ju3$KBDe6$6": "_ref", "_": "_Z$W$4m_2$", "_$_$_eAG": "$" }, "z$3F": { "$M": "_1$", "_a": "GyE_", "_6D_s": "d_c" } }, "p_toLo": { "$wRvO$0_": { "v": "ey", "_$dallle": "_rM9_", "c1AF5f": "varguments" }, "bJLfsoqk_": { "_key": "_BLH", "_$D": "_", "d": "$s$" }, "_1P": { "Cname": "_8uir_C_F9", "Ekey39R$a": "$H7$4_Q_", "r$": "____EX$7_C" } } } }, "$82": { "Cc_4B": { "$1": { "YITFG0_F": { "P_$0g__": "$", "$ca": "$5", "$$g": "_ACN_24_$" }, "_$": { "MB_": "Blen", "e": "B1__$2X9D$x", "$": "$LLU15_$6" }, "$B1_$32s_Va": { "Zw": "eSAX$42$", "$$hB_": "c50$34$", "J": "_$__b" } }, "T64___$_P_": { "_B$": { "yNwc": "_kf_p3", "e$1$M": "_", "A6": "c$$$_8sIKN2" }, "__ng__proto": { "_ha": "$___", "_$6mb74dA82": "$1l", "D0_$7sA_": "_" }, "_$6": { "D_$": "kq_t_V$", "_$$": "_$_D3v$x$", "_j$tvYS": "$$" } }, "f7N_nZzP": { "___proto__": { "_fL_R8": "_$", "_te": "_6_", "A$$y": "X$_$__v0" }, "cc$": { "$$aJ_": "D3ZD__UR", "_F_e3k7$g": "$_$hfwB7K", "okey__defi": "pp__lookupS" }, "EJ$_$_": { "c": "xB89", "q": "F$_$8___CN", "vu_BwFC": "q" } } }, "$yB": { "Z9": { "A$bisPr": { "_o$$": "e", "b3": "dD_$Ny$W_5", "I": "$__J8_$" }, "x": { "$key": "wXq2ve__g", "Z$1C$": "_4_p5", "_9$Ve$": "_" }, "__$$__09T": { "V_$$6": "a", "w$E3": "$Cl0", "$O": "Rook" } }, "Q$$": { "__0i1a$_": { "K$_p": "AK_gE__", "X9D9fZ": "_q", "Kprototype": "$$B1B3$_" }, "$_$h_J": { "ekey": "XL", "_o6_$$2": "__agK_$3$", "k0_T6$$fPc_": "yM$5u" }, "V$n_": { "iZ$": "cDUaQKy_", "_DYzIr_V9$": "_B$", "$u$Q": "$___3_a72" } }, "$U$5": { "_p": { "h1_cc": "__BGDm_L", "E": "$rabl", "yB_4": "Bref" }, "B8$UDV$6s": { "_W1W": "GB6v", "e": "v2n$", "$8$3$": "C" }, "___": { "$_lM_$_": "G0", "Rapply": "_7$_$_$_$$", "$r0i$jD4X$4": "T3$$9$_$" } } }, "c$q": { "_5_8": { "l": { "l3__3": "__", "$R_O2_n_e": "sHW5l_Q", "b4C": "a" }, "zx4_w": { "_x$$t$": "oh", "_Cpply$A": "Z_EcbCw", "OC$x81": "JT$Z" }, "vS": { "_$i_ls": "$", "$$zg": "__", "lz": "Xey__el" } }, "$b": { "_KX": { "__2h": "_NGa$678", "o_It": "P44_$$Fv", "v$3BE": "_2$l" }, "_": { "GB": "___PPcD", "$zmlbg7": "$z$", "J_$$C$P8k": "$" }, "YQr": { "Bref": "C9", "c$7": "aV", "ZMt_L2$": "__$kv2u$2$$" } }, "_eha": { "$toLocale": { "_C_5": "$_K", "$$1_3X$": "R6HkvW$$_E", "O_Rm_T_mEB": "Vr" }, "Npf___": { "Y_$9_8FDXr": "F____defin", "E_": "E$$_$$", "B_": "K$29$" }, "v$28": { "_z": "q", "y_19": "VrototC$e5", "u$_$s$": "_$_" } } } }, "BvalueOf": { "W": { "Y": { "bF$7_2": { "_os": "V$e$", "$_$M$_$U2b": "w", "$_$f56_": "_W" }, "B$": { "ZY_$$A8c": "DT0__", "_A$p1d113Is": "c", "$S0$Hw$": "_n" }, "zH$3B": { "sLaG8_$M$Y": "m", "c4$pl": "y", "_r6": "g_JK6_T" } }, "P0$$u6A": { "_$3O19yYP$": { "_8$0D7": "_$kb$38X_", "FYe": "s", "EuVT_7f": "$apply" }, "$": { "MY_$0_FH7": "_$$b_", "y$s$_B8$R0": "___p", "Y_0Aib$$b2$": "$m_F_0D4$dE" }, "_oK$p_i$_I": { "$u_A": "J6$8cJ", "$6_IIYJs$_": "_c_$", "$": "fVe" } }, "A__b": { "Yq_x$$_8a0": { "_2": "$A_$sM1$$SY", "$J$Dg_QT": "I8_L", "$": "__Z" }, "$$_r1": { "y$7": "$_", "$_$AVB2H_d": "_$$", "$$": "_ref" }, "m": { "_": "__B", "y_1_": "qen", "_P$S$O": "e_" } } }, "zkey": { "$Hx": { "a067CR$_$_$": { "$": "SpJ", "$hd$_t3$$": "V4", "__$Qd$f_": "_CQu3__" }, "d_Y11_$$": { "_J_F$$__t1": "bargumen", "W": "$$$q2$6e_ER", "l": "$$YU5" }, "tE": { "M": "JvrK7F7Gr", "Wv": "$$", "A": "Ef$$$Z$_$_Z" } }, "$_to": { "_": { "ri10_O$": "$Nc", "Y3E_$$$$$3Z": "S", "q_$_": "Ba5_" }, "_B0$e_": { "$7$TA3d": "b44J_$_", "r_": "_3$Xb", "p$_bE$": "O6W" }, "pnc": { "_wk": "Eapply", "Cprototype": "K$4y__F", "$_uq4": "e$" } }, "Dna6": { "b": { "_VMU8$__": "xi_2_$_R__V", "$$": "w", "vD_3O_P8$": "s__" }, "_Hr$$$": { "b_$e": "y$$B_P1__80", "IvalueOf": "$", "C$4j$$$8$n_": "$name" }, "W2Q2c$X": { "Acaller": "Vl_nW_5_G", "kW_m_": "$A_t_", "Tcaller": "Eis" } } }, "$eft": { "_j_33$_$W": { "E": { "$$": "$$6p", "f_U9$__TY": "_$J_73$I$$_", "$T$_8": "aL$Y_$o$6a" }, "$_Pq$5_": { "_apply": "$5$S$F$_a_", "_": "$J_$__", "kle": "om_y_" }, "_": { "__n__D$": "e31_1V$", "_R_158$5$Zs": "_$", "_$": "x" } }, "_d_$_$W2_l": { "M": { "B_0$": "r", "$6_$2$_V": "_$_h_E_$$$", "__g": "$__9" }, "W___JfwR$3": { "__8": "_", "$dC": "e6_$_", "z_k$s_": "E_t$" }, "b": { "Ln": "$apply", "d_$": "_", "YY": "$04" } }, "_": { "_$$_$": { "B": "$", "v492H4": "Y$85$96", "e__prot": "_ref" }, "amY_$$": { "wS8q29$": "Qengtprope", "_N$k$$i$w_": "$", "$toString": "cI" }, "Hj": { "Aname": "bk__Y0jah6", "YVLaPLd_q": "B$", "ad": "Skey" } } } } } }, "v_": { "Al": { "_06q$w_S8": { "$_$$IwVZ9a$": { "Bk5": { "LL": { "r$_0_0$fu4": "_", "_l_10$mO8c": "h$_", "$$9": "__$LTw__e9" }, "_1D": { "iy_20eA4": "YE_M_$f", "$jW_": "e$dA$13$", "Eu_": "$length" }, "_K_I_": { "X8k6$$D6y$": "B_hR171", "_$$$B_J": "_5", "$y": "$" } }, "$ref": { "$ealu": { "$EA$_$$M_": "a_r2f_4Ln1", "_B$_": "$8", "E_": "AASj$__$BB$" }, "dcaller": { "$$2$i$": "_D$", "_20B$1": "$_7V_f_", "d": "$an" }, "_$$8FJ__": { "____e$0g$": "Y$8S_X", "_bkey_": "H_Z6$_US8", "$": "Darguments" } }, "HykBa$s0": { "$_1$U8__": { "$i_wi8b94_$": "_W_c", "etr": "D7brf", "$5": "Eca" }, "$_$_b_$EN": { "C__$e3H8W": "ch6d2", "$$__": "E0PB", "c": "_0das$Q" }, "$$_Dr$$2$": { "$2F2l": "gtoString", "O2": "$caller", "$Z": "$_1ex$" } } }, "$valueOf": { "DY9S5_$": { "__fS__W$_AI": { "_toString": "D6A$1$F4$", "Z": "c", "Lw0$$$$VMD": "$067_$" }, "i": { "Atl$": "Ykey", "H__6": "X$_C2$", "eclikeycal": "C_$3dz698H" }, "$CX": { "$$v34D_91": "p$$s", "$d3_": "p", "$__1$": "$0" } }, "$to": { "_Fz": { "D3": "$ref", "$aD": "_1_", "$pR$_0_5q8": "$__proto__" }, "$0_wm$85": { "etoString": "W_$R$$$", "YR___j": "d", "S$ca": "_e" }, "__$i": { "e2$hn_": "$$$WU_rb_", "a": "_ca", "_": "h" } }, "$x5V$E": { "c_": { "$A2QdV9o4": "mB8Zz$9", "X__l": "$apply", "_i": "$" }, "Z1z": { "J$6$cez_R_B": "$arguments", "_": "__o_xG", "$$_$_h$$": "j" }, "$f_": { "H3$_B6sd": "l8", "d$": "_", "$10_": "_6__" } } }, "D$": { "$y_bxe": { "____define": { "_37$dLo": "d$_g$xQ12$", "z$fEcallerA": "$", "_0_": "N4_8d$_" }, "Bprototype": { "By$y70f": "oE7$", "_7$": "x$2_6WU0", "avalueOf": "$$_EY62" }, "T___": { "C__h9_": "a1_o_2", "$B6$w$_$X9p": "_$Rf_$w", "F_K$91$$1$$": "$_w7_F_" } }, "f_F": { "Aq": { "_eyconstr": "$6WC", "$T7EyR$mOG": "v_$8", "$qI$w$$$$": "V__" }, "x$__05": { "A_": "U1b", "b": "$$h", "_JLU$$__": "u1__6_YC" }, "ebi": { "skey": "_ha", "Y$_": "$A", "C$$x$gAz1": "xconstructo" } }, "$o0$k__6L_t": { "_toString": { "L_$": "Dkey", "_$_8P$2X__s": "i$ov5_", "Y_1sd_C_": "$$$F8" }, "$QP$_G$$$": { "$_": "$_p_", "L1$s96$w$0$": "Kfi", "$length": "_ref" }, "_7O$d96$": { "z_": "$H9_M$", "v3$$u127_g": "_toString", "e_$$0_E__yL": "N" } } } }, "Eke": { "Bx": { "X$38a$26d_": { "Y$$_u_": { "r0": "$apply", "_m0e_13z$$e": "QvalueOf", "Bo": "bK_$_" }, "$valueOf": { "$$d3__$e": "g_$_", "o$b": "$VHd", "_J$w$": "B$C$$L$_" }, "z": { "_": "r__7_37E", "W$_": "H8BW0", "_V": "BQa_A3_48_" } }, "dc": { "_": { "$a": "_1Rn1", "y0awf6": "_$___", "W$_xpropert": "$_0lc5L" }, "C$H$T8M_": { "G": "u$", "$$9": "$$u$e$_U", "QZp": "$_a" }, "dB$9_Z_Gf": { "$Sett": "$H8", "__j": "_$", "$al": "_g" } }, "$_": { "_eyumerable": { "__3zy9": "$_$8V1$$$0_", "CHdUG6": "__a_$1$7", "ARI_": "$_8_7T_" }, "qw7qY$": { "Yapp": "_v$q_$$U1", "h37W": "Vv$_y$K", "a": "kapply" }, "s_28$$": { "$bT_mI_": "d$$G$l$", "o6": "_9NK", "AtoS": "a6" } } }, "_": { "_7Z4l04": { "$$": { "uy$F_$$_0": "_$Z4_", "E$7$": "A_c", "$_$$f9x5": "_5" }, "Zi_WYA": { "Ei3$$X4w": "$$$1_", "GY$_": "_THM", "_": "sUE$_D3B$$" }, "_KO____68$": { "$S_6_e": "vgi_", "$44H": "Y_$F", "_P$$66": "$ref" } }, "_yB$": { "$_9ZZl_I1_O": { "y$BWaW__$_": "SlengthQ$$7", "D6$gzhE_": "_tn3$2$5", "__$$": "H$T" }, "_c$N3": { "sV3mebin": "W_", "$2_": "_$$A", "vE$$$_GZY": "_call" }, "_1A_A": { "C50t": "_8$z7o_XQ$$", "Wnamey": "_$$0H_", "cef0r": "r$231$p__TE" } }, "_d$": { "b$X$$$$": { "z9T_": "_5", "v$": "ubX1$R", "_O": "$2D" }, "__i6$X_": { "_a0TW66C": "cC4$n", "$$5_to": "zo9vvsK$l_", "NSbn": "s" }, "B": { "E1_SBzeo2": "$0", "_BZ$": "$_8_A", "e$T_$_T$R": "a_l$Pj" } } }, "Dref": { "Gv4_l": { "xp": { "S6$L_t0oR": "eE__", "VEn": "$$D77Q$lX", "obind": "P_7IL" }, "Z9t1z__$25": { "WVv$JP": "$T7$", "$_B": "ux_", "$k_": "$$__0jrJ" }, "HY8lp_O": { "$7n0$Je_": "_c_", "LC6": "$_Vd$I_y", "B__": "wd" } }, "x$prototype": { "$_": { "_T1tG_j": "Bkey", "__$_7$_Y": "Xnf9$$", "Bd_": "Q_$1__y3" }, "g$$t_": { "_": "s2UJJ", "acaller": "_M_W$_", "EQ_ct_i4": "M" }, "_valueOf": { "WQk": "_nH", "Bname": "___value", "$m_$p_$": "_UGT8_9$" } }, "J": { "cref": { "__": "a__albi", "BY$0": "VV5Tlk", "$refepro": "Hprototype" }, "$$$4HY2_0": { "vf_I": "$7", "Er__V_R$xf": "va_", "c__$": "_" }, "$e1$C$": { "o": "z$98T_53_01", "T4j": "e$$$", "$_hd$_9T": "$erproto" } } } }, "B5Md$6": { "z": { "P": { "X$_aF4N": { "_$__edtoStr": "PSB6H_$nP__", "b1_t_X7MKg": "$b$", "$$$81A$50_": "___P__y__$$" }, "_": { "$_2xz2YD$J": "_m_fzRZ$w4", "DJ$___3q_N": "_D", "_N$4$y$$X7$": "ls5JeU$$" }, "$NrW23g_7s_": { "$": "$3__", "_$": "_370h_i30$b", "ZC": "w" } }, "m$O": { "D": { "S": "$$$", "$_$___pI9": "$yp_", "h_": "L$__oB_" }, "eref": { "$h_": "W_4BP__6Z", "_Aog$$B$1M_": "_$$", "_77e_F$": "r_0a" }, "$Csf8$$ZEb": { "lX_": "YtoString", "gco": "_$0", "_6_C_j": "w_$x" } }, "__": { "__to": { "$$": "y46$_1", "_g5__4": "$OL$", "Ocal": "Y$$_" }, "AI_L7i_Q$$c": { "$IS$4$k": "d", "N_8": "$_$", "$i": "$ey2rahasO" }, "$LI4$e_": { "$7": "$$", "w": "B$", "$$_3l8$6r_1": "c$0ak4XA_$" } } }, "$EZ": { "_aF_15$": { "aI$$": { "di$oo": "_P1$", "$": "E__7_$", "_82S": "_" }, "y$__": { "cy": "y8$Ud", "_V9_": "_eb", "$d$_$x$D$$q": "_Nv$" }, "r$_2eOfO": { "J_": "_g_Eq0", "_B_jcD_$_": "$", "$": "NA$$Kv2m_" } }, "_Y_k__f": { "d_gB": { "_ref": "V$q_", "Mbindply_": "B", "Yt": "_" }, "f_$$dEH2_": { "$name": "A3$6", "z$_": "VY_", "au5": "$name" }, "$bin": { "_pr": "$valueOf", "ecal": "x$_", "_de": "_8o3$$$" } }, "wM$R$p$F": { "Y_9": { "$eX$$h_69$v": "Z", "$hasOwnPr": "w____2$7$G", "$": "B_m$" }, "A": { "$5_DIMLO$2r": "$sOwnPtoLoc", "f_$": "$toString", "$lengtht": "_" }, "X8___b": { "_$": "w$_9Q8", "dV": "$toString", "_$pY7w_": "_FCR" } } }, "$": { "p_": { "b$__$$0db7n": { "eGm_": "c71205$", "$e": "_c", "_28__b$b": "c7_2R_E" }, "$_": { "_mGisProtot": "e$$Wl_r", "HR_ov$": "$", "_4_": "$g_NYxCR$_R" }, "_u6_C$$a$j0": { "$Y_$0b1": "J", "_": "e", "$o_JqA2q$3": "karguments" } }, "$7": { "_$7405": { "tc$FI__P8$": "_toString", "coo": "_yp7", "DX": "__0_D_Bl2_" }, "$oy": { "_592p15": "_", "$$_B$__": "_mee", "x$l$mSYO1$": "_tBa87" }, "A2na": { "H_A": "_$__XCC", "_8jwJf_0_u": "_", "$_DOM$j$5": "ve$" } }, "$": { "sNzc$l$": { "c_8P$3$$2$": "__$0z3$$", "nh": "_", "V__defi": "_w" }, "_ca": { "____$YMk": "yvalueOf", "$$Ab": "__$$Z33$$", "ck": "$s" }, "BPTKw_o$z_": { "$snvDZ6$5FB": "Skey", "aoL__T$K": "_F_5", "_3$F_$": "$__$B8$a" } } } } }, "_": { "$key": { "E27": { "_77K$$$_hw": { "b$8$$3bx": { "y_3h": "bn$8", "_9ec61": "fxhA$O", "CDe": "$f_$1_$" }, "X6x$7$Z": { "$apply": "_", "f_": "VY", "f": "_S" }, "$valueOf": { "dB": "_DbNSh_d$5", "$4": "_$R$O$mG", "_Rc076OY": "_qz$rS" } }, "_1$$$ri": { "A4e8_c": { "_w": "lI_v3__", "$lRN_Ml1": "s_", "_Xy5$P$": "d" }, "c_": { "ia__d_$C": "__a__C_2a$_", "_$": "____6vom$", "A6J6z2iA": "$yk4_7" }, "$7IM$1xPW": { "b$": "_LV", "W$__": "$x", "wHm7$y$9c27": "Au4" } }, "dB": { "$5a87_": { "E$$SP1__U$": "_N$", "_call": "_$g$", "$C2Nd": "Cao" }, "$$__": { "e_$": "_3_", "W": "__4FHaN_$", "k1": "UX" }, "$5ok": { "Gab8_P9_$__": "a__4_", "c_$gT": "_i$$", "$$y_A": "_" } } }, "_CB3_": { "$$oatC$": { "A0bin__look": { "Q$8$5_d_$_": "h", "r": "$5$", "W0TId5_46_": "B" }, "$": { "dp_$6_is": "$___", "c": "W$$", "__": "$N$L_6$01" }, "__": { "_ZL2p": "$ne", "weW_6": "_g$N8$Hijw_", "_W$_$72t___": "$_Z_Vx" } }, "T3A$": { "$": { "_3": "vx_9X", "M$1": "_T4", "$": "___JX_3" }, "e": { "$b_$l": "_$$$$", "__$T2_": "tn", "lw_": "$dAd" }, "_5": { "eJ": "oapply", "_80Z66_$": "z7$$821", "vN6W6$N": "al" } }, "_$_$$I$FkU_": { "X_": { "ycall": "$$", "Z14Z_6$$$$": "c", "cap": "$" }, "$": { "Q3$H19": "_$", "_peOcal": "$", "_H$_$pz": "a$2" }, "$$r8$$Jt_": { "E": "_1d8yI", "_A9ctV": "_mem5$_toLo", "_$const": "bLr___j" } } }, "x_6": { "$": { "C88$": { "DC5": "_j$_E$$$", "$": "qRw5", "_d0v": "$$" }, "$9": { "_zWS": "G$d2_Q8", "$k00$l_3$__": "_b$11ega", "__8": "Ae1$CY_a_q" }, "x": { "$_": "y65s_$$o$B", "$h_$nX__$": "W", "$ku$": "__7" } }, "AZ": { "_l____": { "_7": "z_z", "$_9": "_$_", "B": "$yuH3W" }, "$__lookup": { "C_": "$n$e", "_$z__define": "$8", "_$_RI0": "$" }, "J_$": { "_a": "_ref", "$__2$C$_$": "$", "_w$c7": "u" } }, "aXEW_": { "jr_$": { "_a": "_constructo", "B": "$Ar", "_v$I31": "$_$_l$Q" }, "$4$$3$": { "_": "$2c$4___k", "_O": "$u_$3$pZ$i", "$$_F": "icaller" }, "Cbind_ha": { "$jNV$6$5": "_name", "_$_A$9_f": "$ref", "fW$": "z" } } } }, "$len": { "_6Q__9_S$__": { "G": { "Y_b$_": { "Q_$9n_4$605": "_$5$o$", "Dfar": "pi_6F_aw", "__$0_H6xw_e": "wS__49$_" }, "Aal": { "$qx$_v$$7$6": "$$Se_", "$9": "$", "M_3$2$_C": "ok32_Mt$A" }, "np_": { "_$": "$_", "$bind": "D2$5_WEoa0x", "m60$5Bs__m_": "$" } }, "$10B": { "y_j__y2_J": { "P": "abind", "$ref": "$jP_Q_16$", "b9_T$s$$$": "_b$_5$_rb" }, "$a_f": { "_$I": "$s_e_n14lo", "aP$I$lDv": "_$_", "_htYt": "Iyi_B4" }, "Y$4IpN$3__": { "_6O1_z_": "y__7Cs$2_$v", "Nb_GZ_0___": "_$$$$_$", "C9tb": "Rc$w$$$2$T$" } }, "$4_LP_$_K": { "b36$20$$d__": { "eoJ": "MvalueOfref", "$G4": "__0", "XvalueOf": "B" }, "D$_": { "$_fP": "_$$", "v31": "c$R0", "w_$BV__yN$": "_o" }, "$": { "_$1": "_4Z$7E_Z$y$", "_c$": "_Ui$r1dH_i8", "s$XZ$": "$" } } }, "OR$": { "_c": { "$2UZ": { "_Own": "_d_2", "$$_": "z_20vXjE_", "Z_": "_32r$" }, "$ref": { "_$CXZA0b": "_1Ld8__$5_", "zA": "sEa_nQ9", "A$Itf": "_d$R$_19N" }, "$i": { "cs420$": "____", "_pr": "_toString", "_$5_18_1A": "_5$ak__E_" } }, "D_2V6_$$$D": { "$O4$MUE4_4": { "_v": "$caller", "gvB": "B42_f_b", "Ce$p7z": "b$evN_f" }, "Dbin": { "__": "_protot", "bvalueOf": "$7Br_2wc4__", "X$": "$_" }, "A8_4": { "U3___A55X__": "$toString", "$V_$_$0$6$$": "D6uI", "$_$_$$_": "z" } }, "_p": { "_2n$_$$": { "W$XE1N": "_ref", "MDrScP$__": "_$D8r", "$547K_zBB_": "$ex_" }, "$$98": { "$": "Vname", "fkey": "xref", "bref": "UWNY" }, "_ama": { "$n": "z$", "V_a7": "j$$2_U", "YBz$_": "_" } } }, "uyBC_7e": { "_": { "$Y60": { "WEA$$$sL$": "lkey", "d_": "cthk", "$v": "_key" }, "D": { "$$w2": "yz_$w$v", "cw0": "b", "$$$E1_1_W": "Db" }, "$_$1_": { "_MWD_7": "_$_", "Ecaller": "C81", "An_": "QW$O_" } }, "D$9_": { "c2a$5d$__": { "_o$_$27P$": "$2_5", "yHn": "Qb", "Q$$d4_kc7": "aao3_wi$__" }, "e2Xa$$": { "w": "_cA__3", "v": "a$_O$1", "b_": "V7$$OBbi" }, "b7aU": { "_B$$_": "DE_$", "WWAw_": "__$o5", "Z$2p6": "D$v73_e$s$" } }, "_caller$ea$": { "$valueOf": { "_exA2b": "G__7_$_6A", "d__4W$": "$key", "__": "$M" }, "de_j0_": { "ZAR": "$_", "AZ$$__QB": "v$__l", "$c_$$$": "Q" }, "$I0lengthar": { "dkey": "Href", "B_toLocale": "___", "A": "_$Q$rp_$" } } } }, "$f_i_$n$5v": { "X$0$$ak": { "_8$w66_g": { "e": { "f_J90$P_": "$o", "C_r": "Dref", "_$": "Acd$$32$$$" }, "z8$6_": { "$$___$": "At93$", "KT$_R": "ChR", "b7$7_": "W" }, "$_9": { "_vg": "X$L", "c4Ot_s_91y3": "$Sh_B2_hb6_", "Bumen": "Cb" } }, "_r": { "A": { "J$$_9_$JOg_": "$$_", "$B": "C$", "Aym___": "c$68$bX" }, "_": { "b": "_a6_", "$": "_toString", "Vapply": "_T" }, "$valueOf": { "x0": "x$$z", "e": "__", "e9_VqgRY": "$m" } }, "d_73q_D$Y": { "aJ_$__": { "Z_$": "$$$2E_y$_w", "_89": "$nv_S3", "_$5Zz6W$O$_": "_" }, "$6": { "b9kSX1$_$": "_J$", "C$": "_", "_5_6alu": "$2" }, "$$___": { "D1$": "i7_DC7$", "__W": "__3_", "p_pgV$": "__m$_W$$J" } } }, "_": { "$$lWv$_": { "eC": { "_0_Wc__3": "w__lookupSe", "V_": "$ze_", "_ref": "_0c" }, "nsG": { "_4P$eJQ34": "__$$XRjJ_U$", "_6T$": "z9_$hrHm$", "_dBZd": "Wj$6$JaZ$oY" }, "p": { "____U_$": "w_$3_", "$": "B", "_prototype": "$2" } }, "Yi0Ci$5RP": { "Z0$8": { "A": "_8$", "$$b$_____": "wK6_$$t$mA$", "$D$": "sty" }, "d$P": { "_ref": "href", "_prototy": "ApL", "bJ7dYgun": "$Q8$80a5" }, "$6O_3_": { "X1$_Q$b_$": "e$t_K", "$": "_T62isP", "$r": "Qco" } }, "$$$Qp": { "ABlg": { "$valueOf": "$$a", "o_gS$$_": "$7g45$", "XAhl$$t3": "$_Qs4_PW$" }, "d6$": { "$__": "_$C", "_": "O_", "$": "BzMa_I$YE" }, "_$6d": { "B__1_qf7$": "$__$$$y9$_", "AW_p___01_H": "$_7E_C$", "E_k7l": "t2V_" } } }, "d1l_M$$_$Y6": { "O$9I_G_": { "t$m_V6mx4$$": { "E597": "h$1P$$$$", "C$w_$i": "_$nstructo", "Cb$": "x_" }, "g_": { "_VJ_$Od": "A4", "A_$$M$8$f_$": "$ref", "$Y_rr": "E3" }, "Y_uG3$6": { "c$$_$g4": "$$_$At_", "__": "$hx", "O6D$0$": "___" } }, "_S$4$$q$_C_": { "_b8": { "_b": "Xarguments", "$$yV": "$4ha", "_E7B": "$$C5OE$d" }, "_v6R6gau": { "__7qSCQ_w$": "BP0o_4$wv", "I6$": "_3_82__", "r$Y_P__$$d_": "_$__" }, "AzwC4qx71$0": { "g": "$e_$XA$$x", "b$$$K1mD$M": "$$", "Vyhp": "kG2GT_$_J" } }, "__a$TA1N": { "$b$$O_$": { "_$a5a": "c$$v1ph", "_": "b", "aH$t$_1R$u": "_f" }, "n$_Sd$XTai9": { "x": "$7tg_$D", "$s": "$cr", "a96Z9E_$_$Y": "B$R2_C$_$_" }, "oref": { "eb": "BaBz58P1", "_": "WaEY$$o$_YR", "_WV": "$_" } } } } }, "NprtoL": { "X$W$_$H": { "y3$tR_4_G": { "g$7G$31H$LA": { "_X_djY_Fa8w": { "$$_": "Z0$A61_l9X4", "$__p": "_bind", "$uu$3$$": "C" }, "oI81B": { "$": "$ys7r_kD$$n", "Z_aBt__0$": "U$c", "_ref": "$" }, "$_TW_h3v_1": { "B": "$et", "Y": "$$6$Rj", "cX$q": "_y7q_c" } }, "$t": { "$60": { "$2t_0W": "sZ", "_N$": "eR1", "a_$$": "A$R_$D$a$Z_" }, "veVq4": { "_A9_3_cb_": "$$", "_caller": "$$", "v": "avalueOf" }, "YV8Rd1": { "_6_$q": "$$$", "E_5OB_FHQ": "uWF", "Wkey": "$$_H" } }, "Drea": { "P$Q$1": { "VP": "_", "_alue": "_m$76bED6$3", "bl_$4_s$": "_9299g$I" }, "C_D": { "$": "bref", "s__9": "zYa", "ex": "b" }, "$_5x$Y$_df": { "x_m": "D", "$E_$$$$AE0": "$$Rv74", "D": "_2_Lr" } } }, "_z18$_0": { "Eq$S$O$a": { "$$$v_eE_": { "_5WA": "$ref", "b_4E$Yu": "by__", "E": "_wa8cX9b" }, "G8x95e": { "$Jj_": "X_C9", "_": "j4$$8_e1y$", "$$St": "Dbin" }, "$kj_": { "X": "Aapply__d", "$s6L1$$$": "$$RX$", "ARa$": "__$" } }, "___proto__": { "_$z$": { "a_2": "AV", "Eru__lo": "_", "$Y_z3": "bm$" }, "_e$3_$": { "w_q": "xS", "$_47nJ$p$$_": "D", "$": "$" }, "_zy$09": { "Wk5A0": "$$_Ac5$L$", "$_H40": "$abi", "_": "q8T_$SA" } }, "$B$": { "T$A85_6$__e": { "XHY$__2Z$": "_bin15__loo", "HCvd$7y4$": "_$__", "xCl": "$$_U0" }, "o": { "_na": "CkH", "_ca": "_dU_5ta_d8", "RRb__": "$ji___" }, "_": { "IJ7a": "cZ$$_0_$_$d", "__7_X": "cl__loo", "T$n4$A$q_$": "e$1" } } }, "$yS__A_": { "$__look": { "B21": { "Yto": "cv$$C__", "M$$4R": "$i", "k": "_$Y_vY$$" }, "D_6PpF_C$M": { "_c_3": "$S_$", "yrC_": "W", "Q$y_Sf02": "Z$Lh$" }, "XU$B": { "xd0BD7Xr3$": "a", "$$$7$": "$_ref7value", "_w56$G8j3$1": "_" } }, "$key": { "$__": { "$key": "$5A_t", "_dSK$s$J_": "x5$4$w", "dDh_": "__$$Ba" }, "$": { "b": "$2K2Z$", "D": "__De", "pb33qM_c1_": "_j_3_" }, "_$": { "$$": "$8", "$_$_$7$_": "_drk", "K$V": "BL81o$_aJ" } }, "$$Bq": { "$2l": { "_2": "zL$A2$$", "$$": "$", "$": "c$Tg_$" }, "_6_": { "$_u$cn_z6h_": "_og", "$_$": "$4_", "c_": "_o" }, "e": { "____i_JA$la": "o7W$$", "$___": "a4valueOf", "e$3_2": "Ay6k_qq9R2$" } } } }, "l4$wm52": { "T6$va": { "$$l": { "fkey": { "$$4_Yi09J": "$n$$", "__$__": "$lle", "$": "_e" }, "Ga3wY___": { "_": "w_bi", "$0$t_1$_": "$", "$$$$_": "_hE" }, "_d5ne": { "z1epSyb$Q$n": "$2__M_", "$": "_ref", "c_$z$tq_7t": "_w8$_$00wd" } }, "m$9$7Yb_jG7": { "a": { "$r$1$6": "_r_C", "__$_aFV$mD5": "_6_1", "_rgunamelen": "$$3_" }, "$": { "Xlength": "l_Kg5RZ", "$$O$": "_DPU_B_ar", "$M$0$": "Z8_" }, "_xf$$": { "B$$76$ua6": "_", "Tg__92": "d$0", "$$_D__x": "_$$_$i_j" } }, "OQ$i_$": { "Nz_": { "$_$X$$_": "AWD", "__3_yR$_3": "utoString", "Cq$": "_" }, "$_T": { "_P4": "___proto__", "y$__": "$$", "Ecal": "td" }, "_S_$HDDF$": { "_71Q$": "$", "_r74_A7$T7_": "wSl_0$Z", "$Q__$0$G$": "$p" } } }, "$$_": { "__$_0dc9N": { "$r0_": { "__M0_t$Q_$": "Y", "$_$6_": "$_$_63$", "An4j$": "$_" }, "$I$643_$2$": { "VYSIck3": "f", "$K7dyWq141": "$5len_up", "n": "$b3_8pb$x$5" }, "v$6S_H$": { "$L$_23Cg": "_", "vs7qVs$_": "SR3K4", "$": "w_b" } }, "_89N3$4tM": { "$$_G": { "O_wH$__": "J__", "z_": "$Vl__0m$8", "z": "$$0" }, "o": { "e8j_$_$Q": "Q$7BgB_", "n$": "LO_V$pH", "_W6X6kQd$Lf": "bto" }, "X_$z$Vu$ND_": { "aD": "ZeauE$$", "_e$__$0_": "$G", "Qt$_1_$_c": "Y78Q5u_$_" } }, "IU4$___": { "L_": { "_6_d$": "__2_", "_8_$R": "_", "E87$xI$a$mI": "f" }, "_2AAUW_5": { "e$zg$k_": "$$", "B": "Agd__$dY", "Z": "$$" }, "Dco": { "V6p6_$D": "_7b", "VvalueOf": "$_1__", "D$d_$": "Y_" } } }, "K$X$gEM_": { "_": { "C": { "q": "$", "$$_B_J_I$": "$m", "$y": "_T2" }, "X$_": { "_": "_$2", "$0qo$$5_": "_bH_$0G2MN_", "_a": "u$ec" }, "eMC3Tw$GE_$": { "Xk_$ref": "bY0", "E$": "_", "Vv": "Z$w_name_5" } }, "A_Vw9$h0k": { "$len": { "$": "_$94_e_$$2$", "_p$": "_Zl", "C40X4_$4$p_": "B36ov$" }, "$N__nkre$J5": { "Y": "jA_Q$", "w_O$504": "$_Z$", "_apply": "_3T9" }, "_$c8_m_X": { "AMR_K6_$UN5": "_A_$_L_bbI", "__": "v$$j$n$t0", "e": "DCOdk" } }, "zca": { "V": { "_": "j$$sitQ92", "_r$_W5$": "EaX3$_6b", "$_c_$jf": "Ao6$_18H35$" }, "b_": { "d$": "_", "N_9": "$", "$_$LK_36": "e" }, "_7u_": { "CK$_G_": "a0_Z9$_78Z", "_V": "VV_", "$1_": "xb" } } } }, "WFJ90_": { "D": { "$_d00vy$pa": { "_$w$t": { "$$5$5n": "_$_2", "_": "$_8", "d": "W_$" }, "$upGet": { "yzw_$_9k8": "etoString", "__$": "Yt", "D_": "$rbM" }, "C": { "Z_$1T_$_F_": "v__", "_MI$": "_length", "$q": "_refproto" } }, "H4z0": { "x": { "D_": "c", "__$_$97$_s$": "$$$", "nZ5": "pDL" }, "D0": { "a": "_1GI__xHy$g", "$c_": "_$__wl_", "zD": "$call" }, "_$$jl": { "rN": "_", "Q$": "Zv0", "G$3o3o_": "w_0_" } }, "_valueOf": { "$66": { "b_9": "$call", "$a5y": "_ik_v8q", "eo": "$EAH$7$mT" }, "_D_": { "E_0$$26_21T": "_$", "$": "$d", "Z$": "Dbind___fin" }, "d$iR3_Z1": { "b_9_I4$9_": "$PJ", "Ex$$9$g_$B_": "$w$__5", "_En": "E_$" } } }, "x$0$UMg_5S": { "_": { "CvalueOf": { "_e$D": "_length", "$x___z$k$J": "XiG$$", "__w4_r": "_68$$" }, "d$apply8Ydr": { "Aer_upr": "_U$_W$t_4", "Mlengthref": "__t6i_nc1_", "$_dJ$I6vD4": "$key" }, "_6$": { "C9_zl": "$X$8ot1", "h": "B", "$val": "mU" } }, "_w_$4M$l": { "e___de": { "b8$FC_": "E8PsJu_", "y3_$_21$73": "_$kh_$f49", "__$$": "__" }, "E_$0_0$_2": { "$_V": "b2C4$_", "$_s$": "$$5C91$UcW6", "U": "$32zTb$57$R" }, "M": { "BtAY9_2_Bc": "_apply", "$": "A", "$$$_3$_____": "vm" } }, "R": { "E9va": { "_": "R$_gSa$", "C": "A_", "___e$oz": "$d$I_$6s" }, "$": { "$nPrp": "x__$380", "A_$fO8bl0_O": "fha", "$$__DJX_1$": "$_" }, "_$4": { "u_73yAXg": "jFi$SZq", "_xlength__l": "X$$", "$_tl_$S_29": "F______u_E" } } }, "C$_u_H_G__": { "$yref__lo": { "H": { "_W0": "e", "w_": "oZw$8__", "Ta": "_Yto" }, "Djw__01_AA_": { "ZP$A6$W2v1Q": "__$$_$___", "ik_o$": "$$_t", "z9f53": "_$" }, "$A": { "$__pro": "eJ$_D", "dFe": "bi$W", "$$_": "_key" } }, "$8": { "e": { "$$kl": "$", "b7oL_6_$$_": "Pcaller", "$b5": "c$bs" }, "d$1$$___1": { "_JH$_6": "d_2", "$_$2$": "Oc_$", "_W$__a": "$r_$0$1w_x1" }, "Ae": { "_S__F_7": "UX_Izis$QzI", "__$$": "$M3", "J_": "$bD3_5" } }, "_3_____3Y5r": { "__$$4k": { "dkey": "$", "$pr": "$7Xc_wAf$f0", "$o": "km$_1$5$_" }, "_a$y_": { "_in": "zECSI_O__f_", "$": "ee_72Bx1", "_$_00": "l__jJ" }, "ckey": { "X4$627nyo": "D", "Vrot": "b", "Ws9__$v_$": "d_$941l_" } } } } } }, "ZiUs9h2$$2": { "C": { "_e$LHKEY__": { "__D$__Dk_g9": { "V": { "_": { "d_$$_ul": "$ca", "___0d0wbwr": "ot", "j0$R$$": "$B3" }, "Xwd_Q": { "$dFh$4": "$_G_k", "S_Y": "C_Uj", "R6X41mC$a67": "_6aSD0___$$" }, "_72": { "D_3_d3E_M": "$c81_", "dapply": "Sv", "q___3Ax": "R" } }, "_J$": { "W__656yMI": { "_Ti": "$00$$", "_2g": "_P6_H4$$", "a__": "k_9__cal" }, "L_w": { "_4XP0K": "la", "_Lo": "$", "G$_f5": "$ny8$$wx" }, "_$T5yE8": { "$W$U$2$$D": "X", "v": "$gX2w_p$", "$_": "$O" } }, "xref": { "TJ": { "hC$b": "$h_6_$8k", "_": "ELEt7$_7o_", "$": "_valueOf" }, "$4N4": { "$cx$_$t2l": "x$$$A$O63__", "wv6_$K_c$_$": "dzHB$$", "$y00B1GB__": "_$52_3___$_" }, "NHkR0Y9r": { "$$_$": "$$_SOol", "$_$jz$1X6w2": "Ka2rp1$$", "_35": "k746" } } }, "_fineSetter": { "_2F__W_1_": { "$_": { "$$d_": "HkmFA9ClZ$_", "M911": "e$e", "$YmrWN$K$": "__$__Ydw$x8" }, "E$U": { "dDE$a": "_", "ed7_kH___$X": "$3$_Hw$", "$$lengthS": "$$S" }, "E_$": { "$": "$$5$g__$", "a": "A", "B__A$j_D$P$": "Ka" } }, "q$0H_h_0": { "$$Fu$": { "_": "Qbi", "valr": "b", "$_z$": "_j_" }, "MO$i7e88": { "Q7_P$": "$_s26LV", "$lookupSet": "$call", "_BeOfcalle_": "D" }, "K7_19d_$": { "qLA": "_8hHh$N_tV_", "dhas": "_", "W$a_83": "AcLgr$" } }, "_$le$4y": { "_i_$": { "_": "$Acy5YE0382", "a_$$r": "_59yUi_$", "_name": "evalueOf" }, "D2": { "ovalueOf": "DV_____888", "$_9b__u$78": "__h1$8", "c_50_1": "C$t_2J_t$$" }, "x5$$$t382": { "$$O0_$Iw": "_dAP9pRYhle", "Eap": "hE_Zc", "A_$E__p": "_prototype" } } }, "_$6g$_$w": { "$": { "xF$14rC_5$W": { "Z_$4_H": "$8c$", "yfeSw861$2": "__$5Mm5__", "C___L_$sm3": "_$" }, "Xp": { "$kgl": "x1m", "$D$f": "_7w_", "B": "K_" }, "zlength": { "$B": "E_", "C$": "p_$", "_tG$R": "d2k" } }, "__$": { "$4C09EI38$_": { "$$ax$oeV41_": "__v", "AAn": "_$g", "YI": "$2$$_IV$" }, "_a0$": { "TreHto": "B_", "m_4nR": "$m4", "$_b_": "A$$a_" }, "_": { "ckey": "V_7", "$C": "e7", "A_95": "_NP" } }, "vD": { "$KL": { "r_$": "$WfTHm1_", "__$__tYLs": "XS$0$", "e6_": "_D$" }, "__v$ec": { "Bf_": "$$w8_C$UH$f", "z": "_n$$_$zh_", "D04_": "a53$" }, "_i": { "$e___pr": "aarguments", "m6a$9ZaKx3": "$Bg", "xf_3x8": "EZbe" } } } }, "$$____mZ": { "D$yC$": { "fn_7_prop": { "X2C_": { "V0$_$_": "_8", "_FSU44": "Ln$_J1$18", "mv_RT_I$_5": "Pyb" }, "_sapplyAa9_": { "_H4_$": "edM5N", "_v_51$_Y": "$$R6N$$2_$", "a$_U5": "_apply" }, "v9XMe$_$1$$": { "_toStringr2": "L$", "_tA__": "bname", "_eT_": "x$$8_c__M" } }, "_key": { "dn9D$$$0": { "_6_PH": "F_$63", "m": "v", "$DCB_lYC7$_": "_vr$_tB95" }, "_h": { "Qex": "$uqI", "Y7L": "XyNj$l788F", "_$": "oB_D_p" }, "_": { "b_$7$G$_1_$": "$valu", "a": "$toString", "m$$": "g$1Be" } }, "$$W_4w_Z7": { "_t7t": { "$": "eH7", "A5W$tN": "r", "_ref": "xam" }, "_key": { "_": "z__proto__", "s_$$o_8ouQ$": "$", "X$": "a$ql1" }, "_KF0G": { "$_u": "C1y_y_$", "$m84__$6": "_", "_valueOf": "BPp$1" } } }, "$G$5HC_$$$": { "_": { "_$": { "$_$": "X", "$$_Of0pY$P8": "AV", "_CEm3Xstgum": "$w6M" }, "XppkI0_": { "w": "j_WZ", "J$3": "__", "cj": "VKe" }, "$$0G626": { "_$__$": "_3", "D_xqappl": "Z0", "b$$3_3_g": "$caller_" } }, "b__$$3nrV": { "$": { "Uu$$_dBcWw": "_A$_h9", "$al": "B4_O_", "b": "$_" }, "$2D1x_1": { "_ITa_": "z_3$bk$_$$", "C": "$", "DtoString": "e____q_" }, "$c$hqz$c_": { "Fw": "$_pce", "$dEN9_h0X": "E_", "VsV2e$_CA5c": "$9a" } }, "$J_": { "e": { "$K": "Ekey", "_lo": "Cp___", "_": "$valueOf" }, "$callisPro": { "A": "_l", "$asOwnProp": "_S_2", "I$5M": "Tf_I4" }, "BU_y2AETL6": { "ade0": "_isProt", "Xre": "S_3$", "RE_": "_r" } } }, "_5f$myQQ": { "$_$": { "$c94y": { "$R$3": "$___o9", "$$_p$$I_": "_M", "$": "F" }, "XJ9fQ_$$$G": { "BI$__Bo$A": "De7$__", "iref": "A1c__o8DwdC", "_$": "$" }, "B22Lk_P": { "_$_LyGyU7": "o$_dB", "_$_": "yg1s$$$E", "__$$9GoWS": "_" } }, "D$z": { "brot": { "o35gL_bG_49": "_cL", "Aa$C": "$h$$4", "$2SK$_5_": "$" }, "$va": { "EvalueOf": "$_$__", "_Sa_": "DE", "Z$$y9Q32$": "_fi" }, "_": { "y$1$": "a", "_": "_$_cE_0r$", "vk": "X6k" } }, "g": { "v$re": { "$ref": "_", "_": "Z$", "____$": "$" }, "_$X_09WwcV": { "_$C3": "ynVWTT$T", "NN": "_", "$$t0$56w_": "$$G" }, "VhasOwnP": { "$2$6c__aq$_": "bC_W", "$5_B$T_rU$$": "v", "F": "$7vO_C3_" } } } }, "_DE$7": { "$3": { "econstruct": { "w_$lf_Xe": { "A$0$": "M$_", "$_Gkr____": "Tb$", "P$": "N$" }, "__0": { "di": "x$gh_", "D_$$": "D_8w_", "_$ca": "I" }, "$Khref__": { "W": "k$toLoca", "A_GJ$4_": "$_", "g$refer_c": "$" } }, "y0": { "Bref": { "$a": "$6", "V_": "F$qbi", "X_b17Yb9": "R$8Z" }, "b": { "E": "_", "$pr": "_v$_7o__7", "_Cvmb1N_5_": "E" }, "_nstructo": { "d$fFn": "vD$$$$j$__", "$_C28X_": "_$b", "$6AzS1_$$": "$G" } }, "B_$Z": { "aHNC$j_0_f$": { "$b$B": "_c$", "_": "Tapply", "_i_F_mH_": "_" }, "y$$ES4_$m__": { "saapply0R$_": "__$8S__", "a_f_": "_keylcalltt", "$_$3t9$": "$apply" }, "U$o5_$RZ_$": { "a3": "$$_", "c": "RZ$7$8$yC_", "d6tz4_$F": "_" } } }, "$$fygd_": { "l_HA4U": { "$Xs16HLKJw$": { "_a": "m$_E", "S53__": "a3S_5_", "W_$f_s": "_D$__" }, "V2_": { "P": "_", "_$Jb": "B_a", "$": "_07_$_k" }, "$toString": { "_01": "_l", "_efi": "_key", "$e6e3$2D": "blueOas" } }, "$1_": { "e_": { "y_K": "d__", "d_Cs_0$$": "$$", "Dbind": "J__def" }, "c6$WBp": { "_BG_1GtK": "$zaV", "e$": "$__proto__", "C": "$def" }, "I_E": { "$L": "___d", "d$": "S2$8", "a": "e4sL_$J$x47" } }, "B": { "$2d_W1": { "uvalueOf": "a_", "Z$": "k___lookup", "U$": "U_2$yp_" }, "VL$8_F": { "B_cLNI$$": "_5$2", "K": "_1$", "BE": "_$_$$e__J" }, "AH_vH$1PK_": { "R$": "$_8$f34", "$Vi$Iq": "I$g$R4$_jW$", "_arguments": "ww" } } }, "P$$$_$4": { "_W3R2dx_o": { "$": { "$p": "_sW_dD_", "pu": "eq73P_Zz$Z", "$$NSd$a": "R$4_S" }, "_$4": { "C1vs9_": "vkey", "$d": "y_$U$We$_", "bpp": "$2y_17n0" }, "wA7A": { "CoJv$01I": "_7_", "_3_54": "_v71_Lrj", "U": "k_2Xz$_n_" } }, "$applydefi": { "_indconstru": { "V$$$$D": "H1", "_": "$", "Z$$$_": "v1" }, "_nDb": { "$$$dr_$1": "_e__proto_", "_$$$$": "W5z3__s", "$_$_qdO": "_$9A" }, "Dl$HS_0i": { "c": "$v_Y9", "nyegDx": "_CaP5", "$$$": "$v$D" } }, "$D": { "CIH9$$qj": { "$": "$$", "C": "U8x3es$Mx0G", "$__lookupG": "$y89" }, "_Z_L_$5_": { "ro6O": "Vn8$", "n": "W_d39_r__", "$w": "abind" }, "$3": { "ba_CB8C": "f", "CweL": "Ht", "$": "$x__" } } } } }, "$name": { "$56$$7": { "dvalueOf": { "d6t": { "_$P$__": { "_9$2Xp_X$R": "$_", "$apply$isPr": "a0", "s_Jb7": "d_$E8__$_dX" }, "_Dy$$": { "LX__": "o$_6_5C1_", "J5$6$__": "_ffDF$$c08w", "sref": "_1mdY" }, "w_6j__B0$WG": { "Vo9w__pG": "u3", "a": "$AM6_", "___i8_9": "fJ" } }, "_A$": { "$D7s": { "y$YBccx$": "AW$7$$___Q", "_": "___Av__", "Xw": "_$E" }, "$": { "t30_z$$_$_5": "$6constru$", "g_l": "a6_", "__f12$2": "B$Z__def" }, "k1$": { "_": "zyC73", "x$$o525_3S_": "oCx_$", "e$a_$_$i$V": "$_Ey5yY9" } }, "ca": { "B$I0": { "YQ1E0$_8T8": "kbind", "c": "$_$m9", "Z$cj_w": "dYY$" }, "_L8": { "VLq_bu1_U": "$APl$__g9h", "Yoo": "_$r_U", "$____$d$QR": "$" }, "d": { "B": "_length", "AaH5_jhb$81": "F_$JtV$", "$valueOf": "c_e1EF_" } } }, "_M": { "$A1Hk": { "_": { "_D": "as", "$value": "_9g$I$j_$b5", "EEt_2pp__lo": "_$_h0_2_3F" }, "v": { "$E$t1_mx__": "iZ_i", "f_": "_s", "___": "lT_$J_$" }, "eeC$C": { "O__proto__": "S__c3_", "_ewi$0$M_": "$_R2$$$", "m$2u___$T_1": "vj5" } }, "$": { "__$$": { "F_RlB3_": "WesB$BX", "$name": "x_", "v$$$": "Y6__bind$" }, "$fO$$1_x$GC": { "$_As07ud5": "$6", "c58Abt_K$$": "L50r_$", "_alln": "$a" }, "_$lucal": { "$": "_", "$$3_Od$_": "_z6__m_", "$R_A": "y$_$$NQc8" } }, "s": { "h_": { "$Lc": "__$", "n1": "$", "_1xR$o$": "_4$" }, "s78$$C_$": { "W_defi": "D__proto__", "_h$oz$0m": "YV_7_$$", "Ba": "Z" }, "XO_": { "_T_$__2E$x_": "wn_", "D8hasOwnPro": "z9_9$", "wkey": "v_5v_o_g62" } } }, "$_ER_c": { "$$H7OO": { "_$X26": { "O_": "$a", "$_": "$53Ntqj74", "R": "_p" }, "e$": { "$": "V$$_60_G___", "avalueOf": "atR9i$_v_", "ReD_2Exo$": "_$" }, "_n": { "$__$Ch_": "v", "$_$": "E__", "_Q9p": "$2_" } }, "hnL": { "___": { "$$": "$_gbzr_L$$S", "ZN": "_key", "___": "$$d$" }, "stoString": { "_p": "$yX_qF", "_": "$_", "b4r_khG": "HhasOwnP" }, "c$QIF22$m_R": { "$f_1": "E_2_Q_b", "e": "ytoString", "_": "j$e" } }, "Ucgume": { "_": { "$_$o": "_n$3$l__", "$nap": "C", "_n": "_vd_$cu_P__" }, "_e__cQlPAk": { "Eb8fAV4y1$V": "_key", "$_": "g", "$$N8V$$_": "app4_$p_$Q" }, "_31_1len": { "nF_": "_05$69", "asx_e1_8_21": "aCzc$d", "$4": "PW" } } } }, "$9__$o3T": { "_C_": { "GE_sYo": { "$$8ePg3": { "$_$": "_KW_c9__u3", "ev_a9Cd": "$", "$_78": "$toString" }, "L$_b0loKp$_": { "cprop": "_4H_A___", "$__": "_7y", "b2$92_m": "X1$Oo_09c$x" }, "c35V": { "_9$__X5$x": "im_o_$$", "$$__lo": "Xro", "e$$W_$6$l5l": "D33X9_$_" } }, "z$": { "sT_m53Ak": { "$_Y": "$$", "a_$P_j39": "_ae0__r2b", "ACc$cB_8$__": "$apply" }, "DE$x_": { "_": "$ref", "p1SwsH": "$$Ku_3$", "$": "VVwc_d36_" }, "__93_3_9Ym": { "N9D": "_", "D_": "$_Y93wY", "__$804_8$": "V$$_$K$$_" } }, "z": { "$S$_": { "_tV": "dtoString", "_PaN": "$_", "iK$": "$_2$PE_7wwx" }, "_": { "$A": "X4v", "S_2pn": "_x$e", "_j_1i$": "y" }, "Y": { "_c": "T", "r": "lLm9_7$_", "b_$$5": "dw" } } }, "J_$": { "_DRsOwn_A": { "$key": { "M_7n": "$$O72", "$": "$k76xH59$_f", "B6b22DB67$": "Bref" }, "__$y$K": { "_70wO6$6M$": "h__loo", "V$8__": "a__", "__$o$_$": "$_" }, "W_f83": { "a": "_", "_bin__": "a$", "W": "x_$06F2pd_y" } }, "FLk": { "___": { "b_F": "$", "LyC": "y0", "B17": "_0" }, "B_": { "$1x_2_": "Zh_Q$___B$", "$": "I$a0", "__0": "eEr" }, "_I2_$z__I": { "$o_": "v", "$B_": "OqpI_mY0M5", "G$_2FwWW4l2": "uref" } }, "$yC": { "_length": { "d4": "__0e$", "$5__3$Nt$G6": "$_", "_": "P__EZ_0$3_$" }, "o": { "$": "DC", "$fy5__q$emX": "_c$wi_4_8D", "oY$s_4r58Ta": "d_$Q" }, "Q44wx4_C": { "_": "$mJk$Hj5E", "$$": "_T_", "__": "zll" } } }, "$_e$$$$_$$": { "$$pW4d_$": { "S": { "x$b_BR_4": "bg_Rb8_$", "$__": "$$R_$", "$z_$DF_$i6": "__V_1$6" }, "___7s$": { "_y_2a_": "G", "$a": "_01$_r$", "$F_": "__" }, "__Le$": { "th": "Z1jy9R", "i": "p_To$Wq", "x$": "f$" } }, "w9wEnul__": { "$3$v8qU$_": { "Vca": "_$0$_$", "cw$": "_", "_4_8y$$aA3a": "___" }, "_lu": { "Y_$_$5": "$9a8V$b2_$A", "$x$_B_$": "$XV_", "_valueOf": "C_" }, "_$": { "$pjU$$q$$": "CfTWJw", "T6_l": "_$", "ze": "i" } }, "H": { "y6_ibR25_": { "$2G": "CtoLocal", "$$$$J5$2C_": "$$r", "k$_y": "_4s$vrU8_2" }, "$BD_": { "_kc__l018$": "___proto__", "nUU": "Z8_2_T", "x": "b" }, "e$1_9_g_$z_": { "$0O$32": "$_Y", "z_Gc_xq_Kx": "___2A$$w", "$toLocaleSt": "_q__" } } } }, "$$X0V$_93": { "AI": { "e$B": { "H$_": { "r_$_VyaLoca": "RjO_Ja9M$_8", "C$s__$wz": "_", "ZXP": "__ze2h_t$8t" }, "$": { "_B4__F_": "$$$1$_1$4", "$$": "c", "$D$q9H$l1_": "$7w$X$J$nT" }, "ato": { "_9_": "ek3B$$wo$d", "$_a8$S": "_i", "$propertyIs": "dj$G" } }, "_73": { "W": { "i$BX_t4F$": "$_Y$_", "k513__$$": "$apply", "$N8__S$7": "_ar" }, "$__proto___": { "NHK3L_G5$p": "F", "$4$_dw$": "_va", "vD1$5s0v": "$x8c6_1c6" }, "$s0$ZmV_lS4": { "$38___": "zprototype", "a$_X9": "__B4", "$2go4Es2TA": "ma" } }, "_": { "__Ov_A": { "_aw": "_x6", "M0jbionstru": "$$2$5$", "_p": "PKl" }, "$56": { "vg32Z$$": "_Xr", "d8$Ebinddef": "Uca", "d$R": "L_" }, "$__proto__": { "cS_4c__y": "$$g", "_valueOf": "C$", "$": "Drot" } } }, "B_N$I$2G": { "_8": { "w": { "_toString": "$v", "$_$": "__$a", "_6GrUY_p": "$ac" }, "_i3": { "Eis": "f_3l_1", "$q$_": "E", "yN6X2_____": "V8$$" }, "_Be": { "sY$": "S$1", "W": "_$$$Zed", "a$$n$$4$91$": "$1W" } }, "$$TeAa$9": { "$_": { "t0$D_L0$$": "$25w_Ev9", "$$5h": "B", "$": "p_f" }, "dSlrk": { "v$5_49": "I$_C6u", "_y_": "_um", "L$t_Q": "G" }, "C": { "$toString": "$_Rr", "$": "v$t$__8C", "h__UXQ$$d2j": "ha" } }, "C$_": { "Z$s": { "_hZ": "$_b2sWW_5$", "_": "_M$6OaZ_", "V__9": "j_" }, "V_4__1r85n_": { "__d": "_X$__Yw_d_w", "$_$": "efKGl3o", "_$": "Dmecaller" }, "w$$6_$$DBX": { "$$_$MY6_": "_D$", "$0k": "$arguments", "MAG$X$4_": "_0" } } }, "e5": { "WMoz2_Mj_": { "_1pZ_8Y8_1": { "e___": "$qE_", "J$0": "G", "_$33_1W": "L__V" }, "__6$_8": { "___19_9_ntA": "$qqI5R$m_0X", "$_$i": "$ref", "U$$p_": "e" }, "$c_": { "V5b6HY": "$__0_IM_$", "_": "V5$c$B5_nd", "$$1821$b": "__" } }, "$_8cd": { "Dapply": { "_36_s$8$L$": "$3_W$YX$$", "$d710Yw69": "B", "q_lookupSe_": "xFg_$__bcW" }, "_d_s$3v8Ur": { "$e_XA7wO$s$": "D", "_8uP$G8I3B": "BsPr", "_": "d" }, "x80sE$17": { "ac": "$", "x_B$$": "$$_", "$i0_": "$name" } }, "$argume": { "$a": { "_B$$": "p_$$6__1", "b": "$j$C", "od_22": "$Dwv" }, "_mr": { "$__proto__": "$$$B_3Dk9$", "_br_S$k_": "_$$$6_e$V_Q", "a5_oq$2nne1": "CuK_2gE_59" }, "Wcal": { "X___Qm$RK7": "E", "_er": "$n9bc1$m9", "s_": "__c" } } } } }, "e": { "d": { "_$": { "$": { "$7FkY_Wo": { "V7w__$Pgq24": "$__", "_6SPzlB$L": "d$$$", "TOu$8": "_$$aV3zE$S_" }, "_l5_4$G$x_y": { "$s3zQ__l": "_$$$_T$_", "$__YD$$I$": "Z9efin", "__F_y_": "$L2$_" }, "_Wxy_": { "DZ$m": "_$f__rST4", "$$$1q8_6P": "V", "FBeo": "_$" } }, "w": { "Y$1a_q$V__": { "$$": "__", "$$$$$V$Lm_": "ZsP", "$va_$GUt": "D" }, "$$$B_Xx2": { "fgt": "vJ9___a$2$9", "$El$_$": "$u$$GSS__9_", "Sd": "_" }, "_": { "$ref": "$_z", "vca": "B_0_S_Dnq", "_E$": "$eSe" } }, "_": { "_Zp": { "$O8BD$": "G$", "_3e6": "Y", "x_$fL": "aHl83" }, "$key": { "_valueOf": "_d_$99$", "eJ_$7bL": "a", "$R$z$$": "Dype" }, "oj_t": { "$$5_": "$2k_L_a", "y$W__Y_": "$Q", "G$$_": "$" } } }, "$TZw53cakxs": { "_IK$ny": { "__9ezA6$$1": { "_$_o4$_j$$_": "$b0", "_vd": "_dnProkeyco", "_": "$D" }, "Vv": { "___proto": "dXZbMB_5k", "VN$$": "_", "_call": "$" }, "$_Cv$858_2": { "_4_QFa$4$": "_", "Cb$": "$c2", "$97$R": "$CLYQE$fM$E" } }, "_J": { "P8Pb15_": { "_": "Dqu$pP_", "_ref": "vkey", "w_UZ$": "ilength" }, "V": { "V_c1$D_3$": "_", "C": "$_$cPP$2$", "__$rH1_": "$$4N5x" }, "_Ar$_$5jq8": { "Z_3": "$_L$$$L_9L0", "W1": "_$YD_", "_": "$_Q_R_f$$" } }, "$8$_ertoS": { "_y$m3h67": { "c__E9__1": "$_$", "D$": "_l_", "Q$X_L11_7": "XjZ0" }, "NsL$_r1$9": { "$": "__c", "x$s": "u3$371c", "fZ": "cf" }, "Q0a_": { "fc": "e_YA$$_0_", "__$1A_$__1_": "a6_54_6aSW9", "J_C_6_$$": "_co9$J9mn0" } } }, "$wSJC_$$$": { "_": { "M__": { "bB59$": "_I$$$", "z$i9": "iT$d$$", "aaIL9r": "D" }, "_a_0$3kUJ": { "$$$": "B", "$_$$8I_wmo": "b__$56v", "_": "_$$yu$$__rp" }, "q5U$_W_": { "$M4$$J__X": "$$G", "CNs6$_$9$OM": "X_$DVk$Jug_", "dt": "$" } }, "yamar": { "_J8": { "Pb2": "e0b_", "_s": "Kref3", "_0_2$3": "$Tv8KLZzR6" }, "e$$W$$": { "d_r6": "e2b8", "$1X$_$B7__": "c_$_jy$px", "$$0S$": "GAl3X" }, "E__": { "_$aAJl$_": "$ef", "$C_R_": "a", "$w$21s": "__" } }, "_mb8$": { "bL$37__e_": { "K1aG_$jq_N$": "$5_", "$$NW$5_": "$e", "$": "$$r24uu$_Sk" }, "$": { "Happly2cons": "$_", "_e": "_$$$_", "$_3": "$p_4$_" }, "bi099$0D": { "XisP": "H_S$1R$I$_", "_$2Z": "y$4$", "A5_$": "cG6" } } } }, "E_6pUN_": { "_D85$$": { "_": { "$s": { "h_S_": "_A", "a$qO_RN": "X3_0$$_$__", "n_leno": "B_jd" }, "_O": { "P18_$__q_": "y", "A_N6$": "_d", "$_5V_02_A__": "_" }, "$": { "$$": "c$__dt8$O", "$l$f_0f3H": "$6g", "_p": "_length" } }, "_j0S1p3I$": { "n90_j5_$": { "$rQ36T1_": "_F", "_valueOf": "$$", "_t": "$q$" }, "$": { "$__de": "dx", "ykey": "$S_m_7", "Vp": "S6l_1v5Q" }, "X5$$$lb$f_$": { "Y0_$v20N$5$": "GE3o", "M_mAQ$v": "V", "e$be": "CB95_XC6_" } }, "__fCJ00": { "x": { "vha": "$$yZ", "DJj6$$x": "_arguments", "dtoString": "DG__" }, "Y$4i34M$i23": { "v": "V$$yb", "_45_$$___": "A3_", "yall$all": "E$L3$_2" }, "B$_$Vk3_": { "$v_jf$__0_": "Y$", "C$_1$$$11q_": "GrR$__$0_zW", "wkey": "M6_v6w89w" } } }, "___6$_$Z2": { "$8$0": { "$s_X_QVam$": { "_0p$x9$Go": "EI694m$_", "$l$$$1_P2G": "c_", "Xca": "_2_vv3B08" }, "$to": { "i_": "$w2", "vcaleString": "_$__", "W3": "__4G$V" }, "__3$YP_": { "_d__4$": "$9$", "z$66nyb$_2E": "e_R", "$a_$C_Q": "_g_" } }, "aHb_9$84iNZ": { "$lengthri": { "v$m": "_", "__w": "t____8H$", "jyF$": "_T$_" }, "p$AP$X": { "$$n_": "wa_1TK$$PI9", "_ref": "n", "E$V$rV_2": "ybin" }, "$MObi": { "xref": "_$P8$_", "_": "$key", "i0": "cal" } }, "_$$h": { "X$__": { "e_c": "xF$U_zVbq", "$$_": "$", "e": "$key" }, "y": { "$9CK__": "_c7", "_L$alkapc": "a_", "_zb$$Hr": "$____f6str_" }, "c_v": { "g$$_2$14": "_$3", "ztyI": "CC$$a$57C", "__9": "qTa$" } } }, "Yz$d": { "y$": { "Du719$$48_": { "s2Q48": "B___", "$G": "qf", "Al886$$4$": "$Vi" }, "cD$6$aL13Z": { "D$vW17_m_c": "IyDP$$b$k$d", "$1__$SZ_S": "J1_w", "$0dD_dqG_34": "Bya_$Pn" }, "$z$W9$Pp": { "nc": "gref", "AM_": "D", "BkeyueOprop": "Dtct8M5$_2$" } }, "$pr": { "$bc": { "A": "$6_", "$1_$": "$C$60$95", "a": "V$LI4" }, "bvalueOf": { "lf79$B": "_0_", "DUHi": "z$", "Aa2ve0Xb": "hj" }, "___A": { "__2aDD$wv_n": "$", "_1d7_5": "$", "a_$c$E": "c$$Bl_$_" } }, "_apply": { "xkz$5": { "v$13$$__": "$S", "$key": "r1$", "DF$T": "A__$_" }, "d": { "Qe_$": "__$3", "Z6UZ": "_p", "d$T$": "_3" }, "_": { "x$$wy_4_": "_ykOMj$V", "$U9v": "$x$_HIBV$_", "__": "Er" } } } }, "$k": { "a1kd608ZtP": { "emb": { "$QYeo1": { "$883_5Z7": "e$8e7$9$r0$", "v_": "_C0", "$apply": "_" }, "jtoStringco": { "_B7": "$7$", "__": "ocaller", "c747xP_": "$__82" }, "_$U3EV_8_": { "$A": "_q$_", "yzeQcWO$F": "_$2", "Cbindar": "_" } }, "q$$DAaD$G": { "R3c$__z7$s": { "$__$": "Y7Ar_", "___P": "RqeYx$_9$", "y": "xbinbi" }, "$__": { "ZG$7$$": "Sy5X2$__", "$$13$8x$$0": "$$", "C__a_": "a$4A" }, "d$3P6$_i": { "_G_l2$$Ovb": "W7$EDZ$_$X", "__$is3$$_": "QxY00", "$_vh$__": "$G_EN$0f0$$" } }, "_10": { "AO_C$efb5": { "$m4z9_": "c9$E4Xhd", "s": "_E", "$": "_B" }, "sV": { "l5Q_s$YQ$1": "__B9_", "_": "Ncall", "$v2_$": "_$$" }, "$$X1c__i_E_": { "UBXmW3": "$15$$8", "a": "C$Hu", "Z$$": "$_" } } }, "Y03": { "c5k$": { "$ctory": { "s__proto__": "__", "n_": "_ZQ_", "_key": "d" }, "_b": { "_3pe": "__J", "lj_l": "fco", "_": "j541_f_" }, "_H__$C$lVD": { "_O9LE8_$$a_": "p4_h_a", "wL_9aA$$c2": "_vA6LcK_kx", "wm": "j28_$$y" } }, "_C$1H5_$_l": { "_$24$rk$$": { "$call": "$3_oq__", "$27$": "$_c", "kbind": "__5_14$" }, "$e": { "$h$u_C$9B4z": "C", "A0": "_lengthr", "C__n_7$_$_": "P_O0_$z" }, "_6$$$CF": { "_e___B": "aX$", "$L5Uk2n_$Wo": "c_v9", "$$$__b$": "R__lookup" } }, "_": { "$0$": { "d": "N", "__Y_o$3_": "_Re_v__", "_9$": "y$q" }, "C7PJJ_U5": { "$v_6": "$6$_i52d_", "Ecaller": "$length", "$6": "dmm$7E__GMQ" }, "$$$k": { "aib$QBn__$1": "Xw__3", "$61_tG_DB4": "$0", "_apply": "Wea" } } }, "E0__proto": { "x$__v$__$6Q": { "$": { "B2$_S$52m": "K9PzN$j_8", "_G3$76": "$$$U__i_h_", "zcallerO_i": "A" }, "_": { "_$s": "bXbygZf", "u_9P$0$Y_": "$mkVv", "U$_yF1": "_v_9_$v_7" }, "NXA": { "Y$_$u7J_Y_": "_", "$0": "$$7k$ijF", "u8nG_i4$o": "x___ux4l_8" } }, "Lt$V$": { "D___$": { "Qapp": "eZ", "cb1r4$": "_$_$m0T3___", "x8_$1pne": "$eme" }, "i$$u_c": { "_P4$3": "_n$Jv", "$_ru44": "$", "$$4_S0$c": "wL_KN$3r" }, "a$___": { "L___$$$_$2": "b9_$CH_DNH", "L__defineG": "$X$_C", "U8R5$Z65u": "j$$y1_F6_Ro" } }, "h$$Co$_": { "_": { "D8Q": "gIts$k1s", "Ebind": "d_", "gD": "C62_ID$" }, "_$$": { "Z": "$$_$$k$$_Q", "tBlI$3ZO": "_3G$", "c_": "c0" }, "E": { "J": "$ref", "a$5": "$", "$_f6$": "za51_YH$W$$" } } } } } } }, "__$73n$": { "_c": { "c8": { "_": { "W$": { "_n3$o": { "_$A6$9P": { "$3D$$": "$cL", "aE4_$$_y_X$": "AB", "_length": "_$k$C" }, "$j": { "IyT$p_6_6a": "_toString$u", "_JO1$$r_jL": "Akey", "$D$$YEWK$": "$" }, "$E8_$v8_3Y3": { "__10Co50Mmc": "BU", "$$$v": "I__w_R$f", "V__1Cl_": "$c$g9$_K_1Q" } }, "_": { "_$K7u__3zM": { "wca": "$__l", "L9_w7Y": "M$CS", "tTN2m$CR9N": "R$_238GX$0$" }, "T$E9Vx$$$av": { "y$_w$gm9L2": "$w_c6$78_0$", "_": "MBt0$3i_9", "_0uMA_$395": "Cbin" }, "_11_d1O$2_": { "Nr": "_QlzoX", "vc": "_7Z", "z__86": "_$9" } }, "ddS": { "$WE": { "$aV$_4_": "$3", "_": "_$", "$5$YK": "C_" }, "__$jY": { "$_define": "UO5feo8_", "_1$_Y0": "$$$$JY$8_$O", "N7": "oai2__$Iv" }, "AC_bD_C$X": { "_o6_": "$_$23$QV", "EZ0": "G", "a$_": "_" } } }, "L_8cx$__6_": { "_$4de_1_": { "$K3": { "E$X1__$6": "XGr", "b$1__e_jZ": "_2UiY$wit_", "w": "c_a" }, "x$1$$Ez9": { "_nk$$_7": "_de", "Bapply": "$", "pMt__": "$_$_Y$3B$k" }, "bm__$_7$": { "_j$_H_X$q_K": "$", "b_": "$vhq$$", "ckey": "X9" } }, "_3vz_zhe1$": { "_key": { "_$4w_": "U", "_01_$ZJ5$w": "_bind", "$arguments": "$__e4b2r8i1" }, "I": { "$hB$": "___644g$$b", "_": "$w", "_1n": "__n" }, "$7X6$_": { "_te": "N__$5$0", "y_1$K": "oC", "v_": "Z" } }, "_00SR$": { "_Q29I2V7G$y": { "_OE$8$_M$": "EA44___", "_6": "Dw_67", "l$__f": "o_r6$" }, "n": { "_2$b_$x2X": "_", "$_yZa6$f": "$length", "$_232$Z": "_DL" }, "$$$$UZiV_1": { "_": "_Z99__$$_", "d_": "$Va$9Vx_13", "_$t_$U2$_": "o$N$_$_R_o" } } }, "$_uw$E": { "JA1u": { "___A$_AB_": { "$_$_$$": "Y_K", "_EB": "EF$", "Av": "b6$alsEnuri" }, "E_u04": { "$R5_": "z", "$6vN_6jU": "D__cAk", "$$$_r": "_length" }, "_2_": { "$7_0Kv_d_a": "N_Wd", "$PJ___$": "_F", "o8_$9p$8_5": "C" } }, "c6d_ufineS": { "_1N": { "Dref": "$Kp1", "_": "z_J_$Nf2", "$6": "f9t" }, "Wcx": { "dE5_": "B__Rz$2", "v__$": "Cref", "a": "A2$6" }, "bz_0": { "UalueOf$_bi": "$X", "$": "$", "_c": "eWv3$" } }, "_": { "$": { "Ckey": "_o$$M_$_", "$P$$u": "$a", "__pubG": "$$9A" }, "C$_$": { "_Z4$5J_$_8": "_", "Z6a": "_3_$_Y$", "s$F": "Fapply" }, "u5Y_": { "_y$_3__M": "DuZ59t$", "AWbi": "A", "zE6X_$1": "cllccalEref" } } } }, "_Y": { "$$_": { "_Kp": { "_bpSetterc": { "z$_3XT$5": "$RfO6$_FT$", "__EY4x8": "r_$7hz4oR", "RJ$2__": "_" }, "_$4bY_944E": { "_ot": "$oru_$_J", "d3$99$$": "y7", "_$FLf7$$n_$": "xA3_" }, "_$c$G$1$": { "_": "_ketcalle", "b": "S_3", "r$b$7H": "ew" } }, "_3_2": { "B_": { "h$_e_Z$": "_$u4_l$$wV$", "V": "B$_W$Y6$A", "yP_": "p_" }, "$f": { "C": "_$_", "Ckey": "wca", "$p$QfrMI_": "Ckey" }, "w": { "_G4__J4$_": "$u6__u_$", "fV$_rHhV_P7": "gY3FdQa0_v", "_": "$8cU" } }, "K5__": { "$_mC4J__$$o": { "_$wq_Pgf": "zEA", "$_$qS": "l$9", "_2n_i": "l" }, "___$": { "q6$111V_$ET": "$i_v", "_8o5$o_9": "_", "$$S6b": "_" }, "G$B$__": { "eS": "xY$$vPe0C", "ha": "A", "_3__Bt": "ae0F_" } } }, "_$a": { "_Qh$$ldSMag": { "___j_$$_8_$": { "e": "$_unLJ$_8$", "$9": "wen_c___def", "N4$j49Z": "b$$_NfTb" }, "$": { "Y_5adoX$d_": "_$", "XT95_$4": "_A__", "uL8v__60Y$$": "EC" }, "_valueOf": { "v": "n_$e__$", "ap1vti$": "_E_D___E$_", "$callerCkey": "_$1" } }, "_": { "cS$PCd8$": { "Pref": "ytL_IJ5", "_RDd_e3B_d0": "$argument_2", "_": "Dfa4$" }, "$": { "D_Q_PZAO": "x$", "b_": "X__proto__r", "zE": "_$H$ei_$I_" }, "_v": { "$$$s_": "$", "cLqg9_K": "_$_", "___$eXg$9Co": "wkey" } }, "C$_M5": { "y__4": { "$": "_v_$$sm$yi", "_i": "$_4_6", "$6A_MpX9C_": "_2$_Qs5" }, "D$_9W": { "_le": "DnC$3_h0", "L4$C___qAu": "$_", "$27ck7": "e7a" }, "E$__J__e": { "CbB": "Wrp$1PiB", "$C": "_l$W3O$", "g$4$_": "_" } } }, "B": { "d$cribna3": { "$_$": { "__4$$_6$": "x", "GD2": "A", "w$_": "$Lg" }, "x0F1p": { "Sey$Wcaller": "$k", "N7$__F20_$r": "$bind", "$": "_" }, "LZ0H": { "xe$28CC": "_", "rD": "$1t", "_06W_HHhUg": "$F_$$_$vH__" } }, "_r": { "_": { "$$": "_B3", "_is": "wCr$", "Y_9$_": "w" }, "Cc9$$": { "$eA_D": "_d_h__D_1", "_a_mIj1P_5": "$", "WL63O": "$_3L$8M5u$" }, "wfZa_": { "_": "$$_O7TA", "dT$Qxg4": "_", "__$bBV_Dae_": "_$" } }, "$yyS24": { "XH$_$": { "_9$s$3K4B_4": "L$_Y", "yfZe62__": "___proto__", "zbapplyv": "$$_09_D$dC" }, "_U9bK_": { "l_": "WhasOwnPr", "k_7": "_BXih5$2", "_$ZX_": "abB_" }, "A$H6_Y$$": { "$5": "B$hSDW4x", "_2_Aj_": "$_$gF_$gXX", "___$8$ot7$a": "y0p" } } } }, "$_9$_gN": { "$": { "_x": { "$": { "A5y": "cX", "$ref": "__$fnn", "I__": "NvalueOf" }, "e9z$7T0$Q_e": { "c2sZ$P": "c_A", "B": "_o_i$7$iv", "_": "X$6K0Xr" }, "_$__$3_Ic_4": { "_$": "$$", "Ci_jJ$_ew": "T9_O$$$", "kdRy_v2O4S": "$call" } }, "$key": { "Bw": { "uA9$1AA$$": "_0$", "$b": "yp9", "Xh_38": "xP" }, "e_N": { "$_G_$eql_$": "c1", "G5_": "D_", "dvH7McL3773": "zu" }, "$FKM$$y": { "$q3": "M", "_$": "XS", "C1yB$_zR": "d$85" } }, "m2": { "C$d_": { "Bt": "F_3$s", "xV001L": "$H8TG$x_8$", "$R": "Zet$" }, "gwN_": { "a_6$p_5$l2O": "$", "BO6w7ht06_": "_617$$$$$_", "__B$": "$apply" }, "A1_B_XZ$4$$": { "__3Gt_$6T": "$_3e", "_q$sgJp": "_o", "Ebm": "$25Y8" } } }, "$p": { "a8F__y$$F0": { "Xp": { "Qk_": "_", "$_20eA8_$": "$S$$s", "$_s$_F$_$dj": "$XhN" }, "$Y": { "_$$o38yL_n": "$$kV2_$D69z", "b$q__$CrefP": "$V__L", "$_1We35": "bpc" }, "C$_$7": { "$": "s", "_": "c$1w_R_2D", "$MbiisProto": "G" } }, "_e9": { "_d7$": { "v96r$": "$__F_4$FS9", "_t": "$7", "_": "_9_c7_w1" }, "Dy": { "$": "$", "vvalueOf": "$tructorl", "E": "_$1" }, "_": { "$$7__uv": "_$y$aey$T82", "_": "aarguments", "_valueOf": "$__" } }, "Qef": { "ocB$V_b$$_": { "$n": "s", "_d": "_9constru", "LB8t_BL$_": "H$" }, "__G$v": { "_$": "_name", "_39": "r", "$_$ACXT_": "_ref" }, "_5i": { "jsx$__39X_$": "_l7", "xe": "_", "$45$N2ZEA$": "_j_" } } }, "NA0_3_OSy$t": { "cxE5$3$$$": { "v_$u5_Pw": { "$$Qd$r6J_C": "_1Wq_", "$7$t": "G", "e_k": "wo__9" }, "_y3$$69$70b": { "$_q$": "__T_$$B5$$2", "vk3t7$": "$0ns_4", "$": "c_t" }, "_ob$2qc": { "_b": "BapplyD__de", "Xm": "yleng$9Ko", "_d_wEZw34_": "__$$6tl_2$$" } }, "$$": { "B$8v_$W_w8": { "P_": "_$", "u_$__": "$", "D": "_arguments" }, "$_1$": { "$x6": "JNn$_14_$O", "_NgZ": "_Nf$i7z8_", "$Lr": "eF_$__" }, "BYasF$$_": { "_3y9v2": "w_3", "_$0_AE$": "K$Q7__", "$jc0K": "xs" } }, "V8_$$$$_1$": { "Mv$24$DY$_T": { "_$m_Zbzs8n": "XD_a", "atoString": "_Dvg$54y35_", "_y3": "$____$0f_" }, "_W": { "xD$": "$aO", "CV61": "_7___m$__", "dVh": "l62d" }, "e7": { "$$Rm_9O": "_7", "E$$cvopR$_2": "g", "Aj$o$f7T_": "$$66f1_h_" } } } } }, "$caller": { "$mVp": { "VS$$RU_kF_$": { "$$$7K4$V9": { "_to": { "t_01$U4GHQ2": "B$_$z", "$to": "_1", "_n_$VvWc": "$Dm168" }, "Mz_$_L4__5H": { "$jL4_$$6$": "E", "d_c$1nC6": "F", "__R$$": "_____$Bi" }, "_2": { "$R": "LtoString", "$c5r": "$valueOf", "_9_": "B1$" } }, "ce$X$": { "eUV0Tc$T0": { "x_": "C4$", "bapply": "bnE8_8H0Y_", "C$$uC_v$4": "$c_b$ih59" }, "Econ": { "_": "$0XS", "Cr": "X_SMr_$", "_ar": "_ref" }, "_ZA$3IyXFAk": { "AlP5Xb7_$": "__7Og5_$", "$$__$": "X_0S$$bU5", "Dc1": "Y$$_1n" } }, "_G7": { "_H": { "n": "CH$5PaI$r", "V$1G2KO02": "ckey", "$Z": "D50" }, "n$__": { "$4$$_p": "Z9_rX8", "_Cz2x8_Q$__": "_key", "Mref": "aTy07i1$N_" }, "al": { "_rd00Xv": "$W_$$32a", "C": "$C$Gu$_E", "C4__$a$c_": "_ha" } } }, "CG$": { "_Go$$__$$9": { "Rq$": { "T_AE_g12_fx": "$$E", "_0a$hN_7vm": "$o8", "$": "_$_yT$" }, "l2o": { "$1b_tD__k2$": "__$3_ur", "_": "_ba", "_X5$$OeV": "$" }, "k8k": { "b_ek0": "t$_JIJ", "$6": "x3p", "JY_": "b$0$7V" } }, "$_iEP_4$$9h": { "q": { "b_": "e_x", "n$": "d", "CE$0": "$Bk9i$C" }, "$$$z": { "$$Y": "t$_k__", "$3$V": "c", "D07bT_": "$" }, "c$7_s": { "Y_p": "VlL0$$H$z__", "A$e$V__": "H", "_a7Bu$$Qja_": "C" } }, "_1x3": { "_valueOfg": { "a$CW_": "eue", "ZalB": "$ref", "jref": "Nbind" }, "_s__E9$$yB": { "A": "_J", "PvalueOf": "_1$$EE", "D$dh$_$_I_": "$Q_IL9_" }, "cQ89$_0y_": { "___o__4wM__": "_$", "_": "_5_", "d$Ddg4": "_L5$" } } }, "$0_b": { "Nv": { "eEV_": { "u_7l$$k86": "$_PEor$X_$", "jpv$WZ": "e9E48C0V9gR", "o$O$G": "_YD13_" }, "c": { "p_": "$p4I$_1_Ql", "_1_6Pf4$40_": "T$", "Zkey": "__oG" }, "__1$": { "_trIQv$PL": "dBQd_", "_": "biXvB$g_o", "L_$": "_arguments" } }, "___proto__": { "W$D$": { "_argY$": "__s0$f$Pp$", "psO2$3$R8": "_c", "nY0_": "$kQ$24_$i" }, "__$_$$_A$ua": { "U__9JA___": "__$wTW", "V8ZuS68$7": "$wI9", "a$$X$B_j": "y1o" }, "eZ_$_3_C_s_": { "S$fg7_": "A", "Mr": "$$_", "Jva": "$$$" } }, "$88": { "Iu__7ES": { "$_93$n_6$6e": "D", "_$o3BbTq$": "_k", "_": "__x" }, "_$D0": { "PcC2": "n$02_o", "bd$_": "$h$x8_$p1", "_$LocaleStr": "_" }, "G$": { "Yl": "$__proto__", "_arguments": "BX$oZ_$14", "Z": "_t" } } } }, "$_7$_$d_Uz_": { "E$_$V": { "y_h$HL$_d$p": { "_$H$_PM6gYi": { "_x": "$", "___w____R": "$", "_to": "_key" }, "CC": { "_wJ": "Oref", "a$Fdc_$7s": "K$", "KTZ": "hp" }, "bref": { "C": "Cprotopr", "_$": "o_AA", "g_9_HqgOu_z": "Et_$P$qh$_" } }, "$appa": { "_": { "$_$": "$__9Zh_", "_": "_5_", "c_": "Aca" }, "_$$5x": { "$U275y03D$s": "nkey", "__": "_$7__$_Z0D1", "i": "___" }, "_P_": { "n__838___$": "___Sy8M", "_": "___", "c_": "_" } }, "E0t": { "Rw_b": { "$key": "$xu3___H03", "$": "_08", "$9i": "z3$$d$$b0" }, "F_cc0__5": { "ckey": "Wamev$C", "_$Ea": "__c_Au$", "E$": "_$d__$_Fw_I" }, "__": { "Qn$2w$": "____", "$5$q": "_", "_": "_eXr_fR_" } } }, "_m__bY5__$": { "WB": { "_8p": { "$m": "$b3l$$_", "$Oy__QKg_": "PceSt_y", "c": "jx$$$90$Z_" }, "$4_$KlxZb9H": { "$$$$X": "d", "$_": "_", "x3$": "_SAy_" }, "b__J_z$$DM": { "_6V$0": "yy_B_0K", "$1_RUs": "_u", "$_T3": "__7e6$_$$__" } }, "Wy$": { "d$B": { "Db2__": "y08$0J_4$__", "_$M$_X7tjQ": "$j$1$hOB$a$", "vJt$_g8": "d6$_3__c" }, "Zo71_S9$_$I": { "_4$8US_": "j", "$$_": "V11n", "$xu27__Z_l$": "VM" }, "ms": { "t$q6x_$___6": "_", "Y9$$s": "ENg$E_$5y$", "_1": "$___" } }, "X_67$_a": { "cA": { "___toS": "z4_$$_W", "_R__rl_i$$$": "cwh$R", "VvalueOf": "d$" }, "z__2$$1$x_$": { "_cK4$_e$E39": "T28", "X_2Ky": "WQ3$X_", "_tr_ks_$$V": "$d9EQ" }, "o3": { "w_AD$1_u": "xOEapp", "_2oP_4": "$_73", "y4e_K$$1": "__Me7tNq_9_" } } }, "E$8$_l$G": { "E$ZW": { "$": { "B$TH$_cD": "d0U_26_$s", "dfuo_R7": "DR_$8D4", "__$zA2_$x_D": "BS$1_" }, "y": { "_e79": "__", "__": "_AQyhLY", "NH4": "_TT_Usk_$$" }, "__6_": { "_": "V_k$WZ$", "$key": "A$ZvSj0r", "C_zCxa": "X" } }, "bkey": { "$g5_f$_": { "lw$Y": "$1c", "_isPrototy": "$valueOf", "_3m7": "$$" }, "_tp_$jI2ChQ": { "a$": "_$", "L_": "E_xWC9$4", "W_": "e02" }, "t_$": { "zkey": "___8xVrn", "iO": "___$oK$", "Uk": "C_$$5_" } }, "_2_8E_$$": { "E8u_2": { "$": "Ab", "b$0F$7": "coqf", "S80": "y" }, "oS": { "_121Z": "C6$$$_D_X0$", "yo0caCb53$": "_valueOf", "__6E$_$_v": "_caller" }, "B51$Ku_9W$": { "_wFc": "$_I0____P7", "pb": "_name", "_8X$$__": "$$8807jnA8$" } } } }, "$_$": { "y_q$": { "p_$4": { "_q_b__2": { "Dnz": "$_", "ca8": "_arguments5", "_2uF__": "uA7__$___" }, "w_v_": { "CV__9": "_edi", "c3_d": "_8m$8w8", "vA$_$": "v" }, "U__O_": { "$_": "$_RW", "e_gm5_E": "__9zW2A", "$0d": "o_e_$W_E" } }, "d": { "p__K_": { "$$24VP$": "v2$_8U$X", "_length": "ca", "__l_": "Uapply" }, "Yine_u": { "a11b_T_d": "DG5$", "$T$Z$$e_4$9": "nWapply__y", "$prototype": "cT$C8$$Dk_v" }, "_7JO__5$0hq": { "$3W_": "V8yvN7d$0", "_": "Der0Yf", "s8l9_": "__" } }, "_$_$": { "$E__lookupG": { "z": "L_", "b1": "_", "_1$z_nbF": "_r" }, "z5": { "d$8_7": "Elength", "$8$$J": "_$_uX_$U_", "$tri": "__I$i" }, "_Q_$_P": { "C6$$Xl44a": "_$o", "N": "$wX9oELY_ca", "V1xl": "P_$" } } }, "dA": { "W$596$$": { "_$$S6_b7": { "_a": "_apply", "y$1__$573": "_d$$", "_": "$S55$W2_$F" }, "Yg3$pB7tYR$": { "_F_03A": "$56Y", "w1_": "aS", "bn": "z3d_" }, "o_t$CoL$": { "W56O5X": "S$_cuD$H", "_$$_B_Zz9Nw": "_apply", "$M$$": "vbc_" } }, "_key": { "$_36G3_d__": { "Y0sNO": "_", "_": "we4LbC$", "ey$v_0$n$Uz": "Bca" }, "n$_4w_": { "y$Km$_F$l": "_6$$2p_rV4_", "y__8": "k3E_c_", "_D_$_aHQZ": "_$b$" }, "A": { "L": "$_74vP6", "d_9f0": "___z$", "_nM_hJq": "mvalueOf" } }, "F$cQg_0J$": { "$key": { "__t": "xE$", "$08q2": "j_", "db$OV_K": "$82$$_prope" }, "$": { "B8xcbF": "_T", "d$__$": "_QO", "D5aW$$K7": "Q_3_" }, "$v$07_$30": { "b_z_IT": "$toStringva", "E": "Wi__4_9", "hr": "$wsw9_8" } } }, "_I$$8$9ysm": { "E7$43$Bgog": { "e": { "r": "ZhU_", "ea": "d", "$_4": "m0_d$3$y" }, "U$$": { "z$40_$$": "CAJa_j36$_", "y$Zd3$CX": "$T_$T6k$o", "cyB_$_$": "Ebind" }, "VtoString": { "B$_Y$2ob": "Z", "B8y3B": "$", "$$": "T89K__$6" } }, "$1p$6__IH$": { "$065$_$n": { "yarguments6": "$_", "$": "$__BqW$_", "$j": "Kapply" }, "bO": { "$EmHU1$_0n": "hkey", "zbz__4C": "h_n_q92cZ", "H_prototy": "WI4r5J7_FS" }, "$9u__w$": { "ao": "___$Q1$V$_", "jprototype": "$8", "v": "_G_R6JO" } }, "$__": { "$6T1uX$": { "W2ro": "$q__c_9E_$4", "_9$$_": "y_SyxiK1n", "Z$_A4g__": "_$baM_" }, "_proper": { "vh5_pP": "Vz$$SCWW1", "$prop": "Wk_iD_", "EXB_b": "X" }, "__": { "s": "$BwNZ_", "_C__Y": "_4p2_", "E$": "__j_ygjt$$t" } } } } }, "_toString": { "Md_$6": { "_k$$": { "_7t": { "pa": { "H__": "_$", "b_7_": "$3E8", "$_h$": "$_" }, "ZM_4$_S$___": { "_$w__": "O5$j", "_": "_59", "Bg96$1p__aY": "_7$" }, "S": { "_kup": "AM_", "$_$_B$j68": "KE$$q_$_3", "$$_": "$$_" } }, "z2_z2vxA9": { "$": { "d7_Z$BW": "_2$3S1K", "$dG56_8c": "cJq$$M0$N_", "Kargumentso": "_X$" }, "_4$_P_b": { "dn": "jref", "w4Es$": "d7s", "$__": "__W7_2I$_F" }, "$b": { "$70_GoQX": "_3VdStr", "_$$$_c$__$z": "y$A", "_Z_": "$lA" } }, "_ot": { "Ig_7$q": { "$e__h_67$$": "_0", "v$": "Gc", "__Y": "$$$_125p" }, "_3x$B__AhWS": { "_14_": "_C_D", "h6LY": "$_$o_", "D": "$valueOf" }, "$$": { "$$$3Z": "E5$K5Ko$J", "_f$_G": "V4_L3_v", "__W_$P04": "$" } } }, "aT02AW": { "___": { "A__A": { "$jal_toL": "_Wnd_AkupG", "$3": "$$m_HeR", "EE_GUTC": "$3" }, "_26f2": { "x_i_vB": "$", "_": "Yo$$L$L$", "$": "Aa_1$7E_b3" }, "A$5_r_": { "__8q_w_s": "v", "X$_": "_recallerke", "wBivc": "___loo" } }, "_cal": { "$h8$_$N_1": { "$key": "$_9O$6_$$o", "_Ft$y4vcP$": "ZxXw", "w$C": "bm$56" }, "MD_t": { "as$$$": "YB$_", "L$n$___6_n": "_4_", "__gzookup": "P$751nL_" }, "_q": { "e_$": "P_VaZ__d", "h$h$": "yx59Nc5", "$": "__" } }, "Ycis": { "$6_$_X6$": { "$valueOf": "Fref", "$_6$_$": "$", "cuF": "o" }, "BS": { "_": "d_", "$": "_2__d$_W3_", "_4E$_7_4D": "ZY" }, "$": { "_$k$V__$": "$$PL$", "y$c": "_lw1_Y___T", "Bkey": "yU241__" } } }, "B_": { "Kz__": { "_arguments": { "_$9": "d__", "_6mE": "d$1", "v55x$l_": "WX_$$y0__bN" }, "_7Wwj": { "$64H": "_caller", "a$ef6__": "$B", "VtoString": "Vw1O" }, "_x260$3E": { "DY_H": "AEO$", "$v0p_Swu": "$o", "A": "$$" } }, "Y": { "$$2g6$_p": { "ACW": "__$__$K_X", "__V___4$": "M", "$$$7rwNV2$": "$P$_3Z_e" }, "n_k_U_H": { "_a1$4M$___$": "_7v6$_P$d", "VZ$_C$oB_cp": "$valueOf", "_pG1q$E16_": "W3__n_B7_e9" }, "L": { "LJ3_": "E", "$": "_ref", "kf$": "Y___e$" } }, "j__S7hucgOk": { "Yettera": { "__": "O", "NC_": "aB_defineS", "_": "$7W" }, "d__proto__": { "$_1t$74VK": "$_", "CZr": "__$F_2", "N$GjFF863": "__h1" }, "_key": { "Tconst": "_", "$9": "V6value", "$": "_V" } } } }, "$": { "xwF_$84$": { "rR$B$J_M": { "___g$6__7_9": { "$toString": "Jx__kfh$$", "__9_$5": "$", "$$bxe9": "$rAZ$kL_h" }, "_v2$": { "b0b$_": "_6", "n_1_$dr_$Q$": "xCc", "$valueOf": "_J2_DB9" }, "D": { "G_H": "$$94_dN$Kq", "_e$": "$_", "_NN$u_8j$4": "$_2_" } }, "b2": { "iapply": { "__ZHSj$F": "$e", "$_": "d3v_toS", "_$_": "$h88_y" }, "x$7": { "$$8": "__u_9Xhg", "$0N_": "tname", "_NK8z8b$": "_o" }, "jb__$": { "s18$": "R78", "C_Dr$": "w_A_w$$ZyG0", "z_$": "w_e" } }, "_call": { "_$0C0_$_": { "Y_$B": "A9E3_x$", "$argument": "_pr", "_$I$": "LU$W7KueA__" }, "_0$5": { "C_RgaCqL$$0": "$", "Hw": "$i$TG$$", "Cl$": "bTU$_$$" }, "SR$": { "q$W9_7$": "$$", "$XFc$N4$_n": "$L$__", "BQh$a$$U$": "_g__w3$$3g_" } } }, "c_4ngt$ter_": { "BS": { "ZX$": { "$": "Jf$", "B_$i_2$iB": "_bind____de", "X": "_" }, "Bva_": { "_re": "J", "c$_b$$__": "_m", "e$C_$kR": "_O$$_$" }, "M": { "i3D": "XueOmer__pr", "$P20$P": "$Qv", "r": "$$" } }, "L_W$ZIUi__": { "$ib": { "__q$_O$QZ": "_mqp$Rif$t0", "$_zUBE_": "__57Z", "x6": "$a19$L8$2_" }, "_": { "$F5dkOr$_j": "_toL", "$l": "_E$$a_T", "nc$$4bA": "_" }, "Q_DsjG$$d$R": { "$$_497C": "_x", "$": "bf_", "_Yx": "y2_o$" } }, "$_w$1$": { "Dc44_2": { "v": "b$", "$": "C_$SJ", "$_eA297O_": "_B3$4_X" }, "bg_8": { "$_n3q$$": "_3_", "$T$4_S2": "$", "_$": "_5_" }, "Zcp": { "wGv_X$RxdI": "Um_1$D7_", "_$jW$": "B___", "TeyefineS": "_2oJ41_W" } } }, "D_": { "L6U_$s49sz": { "$Ia0R8H_$7_": { "$": "D$0$$F", "C$$": "S7l1h", "_b_15t0$lf_": "_$_1" }, "_$0x": { "_": "__$_L$V5_Ru", "$": "_", "Bc": "$_uP" }, "$": { "ri7g": "lip$$$8", "$q$G$X$Y": "_C$$c6$", "b": "$p_P5Pz3" } }, "mBCA03yw_Y": { "$Ao_": { "_": "$", "k_Hqh0JChX": "_$D", "__z_$xT8$3": "eug" }, "_": { "W_M_a_X$W": "$bind", "B$wG_I": "Qapply", "_7": "$$82_n_$1$_" }, "d": { "$$p": "wvalueOf", "W_c$_YL$vv": "$", "E5": "B0_xbpC8_" } }, "_T$": { "Bo_": { "_$": "$x$3G", "Wkey": "A_l_0$$9$", "$$8c2$_1_$$": "_cD$$" }, "b": { "AI": "ot$C", "$1bi": "_$0$d$$_ia_", "$re": "G$DiMMVh1_" }, "$": { "$_$_l$": "z$2_z$O$$7", "c__": "_", "$fv": "$Q9" } } } }, "_9_a": { "eP93$KF$W_": { "B": { "__26$8__": { "BShy12G_E": "q__K", "$Et__X": "_5$__q$Iu18", "__w$_J$H2": "_" }, "$__proto__": { "$Zs$$_P": "d$k", "$0h7$$S_": "w0a", "$6": "__5XA_4" }, "_c": { "$53": "$key", "$le$__looku": "a", "f": "w2" } }, "BH": { "_": { "x": "__Qz$_a_z", "$6_$T": "e", "_fi": "F" }, "y_2WU4$B05": { "$toString": "$8iSS1$", "Gx_3": "$s_2A", "Dkey": "_o__ku" }, "$9U_C_Q$Py": { "_bBr7u_$x": "r", "Sargu": "_pteH", "$": "v_vf_E" } }, "kZ": { "_toString": { "$": "_3_", "___l": "yeatotypeva", "b2A": "u$_X__$92_" }, "_key": { "B$Z$": "$bind", "R_C": "$rincalluc$", "L2j$$m4Uz$_": "_gGRE2324C" }, "$T87t$": { "_l": "cc71", "$_$vF$_": "_$GA", "_U__5AheF": "e$$_$_$C" } } }, "___loo": { "_t": { "_$_9": { "_bind": "Q", "_": "Bkey", "C$$y_": "E6ll__p" }, "_vL$KYJ0": { "kv": "R$ZZ_Z0dB1", "$x_cI5g": "_aPC8$_", "_": "$b" }, "v$$": { "$$": "$18_I6O", "$$$c": "c$E_78$i2C", "$c": "YGS" } }, "$": { "oD3e": { "___C_Dx6_": "Aoo", "K$$4": "l0e", "$4": "_T_lVrbV$$" }, "_bEkE$$": { "__f__p4$_vq": "Z$", "V_u": "c_$V062", "_P6_a$_X": "_gd_uoA" }, "$8_": { "_e$d$Dy": "ac0ea_$$", "y": "__b1x", "etT": "BC$_E8" } }, "$0$": { "Fc": { "_length": "wVP2_L", "X": "_1", "Y$4$y_P0": "a1pr" }, "$$TCf$": { "RMd_": "$", "bL_e": "_$$$2$Q_C", "D_m": "at$__u" }, "aref": { "D_N54__": "_$_X$", "s$36I": "$_$", "_2C92E": "z5g" } } }, "X_$$_1h$65": { "FTo_M$0": { "a$call": { "_Up": "$", "Sbi": "fg_P4", "_": "e_" }, "dk3": { "twvz$_$_$1$": "Z_k4call$0a", "Z": "M$", "_": "Ye_5" }, "__b": { "_lengthispr": "_toStr", "dlength": "AB", "dtoString": "$m_V$" } }, "_": { "$": { "j_A": "CtoL", "BX_": "DUhn8o8", "$6$": "N$B" }, "aD$ig9q": { "_": "fv$_1$_P_", "Cc": "e_", "u": "l5ndGetcal" }, "y08": { "Z5z": "m_3c8", "Y8ID": "$_E$_", "h_1_$72_dR": "_1f" } }, "W$TZBVB_": { "a_": { "W": "$GYtoLocale", "$_f4": "c", "WCH$": "CFYl$XKg_" }, "_Ei0X_": { "$___proto__": "___0", "c$": "a$$f$$", "Bref": "$_" }, "ca_rXC__j9$": { "__": "D", "Yx6B3b__": "_67$L07f", "_awxo": "aFi1$" } } } } } }, "Za_1": { "____": { "_9F": { "_$J_47_1": { "Y$D_": { "_M_Z2qm$_ha": { "$y3": "__1$$Df$", "_length": "X", "A3_Y$6": "Cw$6" }, "I": { "e__y": "e$$_", "fL_m": "_VC6", "Z$$R_": "$" }, "$9_": { "$b": "bbind", "_Q": "w_aW2", "oB4l$K": "$" } }, "$Tn_OR2P__H": { "_19Bc$a": { "_BVYce": "__$$pm$0_$_", "_": "__$$", "c$rZ__$Z": "X$nstruxval" }, "$w$E_$V2q3$": { "$9$1": "a", "SH": "x$Q$j$8_bG$", "IO8F": "$a$" }, "_$K__": { "A__": "$", "$_$N": "$I9JNH", "a$Y": "h_" } }, "v": { "$": { "$Z_r2_$wd$": "DWIdCz_", "_Z$3l$_$93": "E$XU$me$_", "Q4b": "_$vE3tBK0" }, "$_": { "Z2": "_", "V_b$": "j$E_", "VJ$4_bm6": "$" }, "$D": { "$is": "h5", "$WTd": "$0$T", "_bind": "_" } } }, "acqG19A_": { "hl1_nSI_": { "_x0UE": { "$etter___l": "Zappl", "n": "eyRF$n_$v$h", "zdz": "$IlDJZ_85m" }, "Y": { "cH$Zk": "q_3w", "t1$72": "$", "AhT": "exeb0k7" }, "_7$2_02": { "cE_$3": "$to", "D3W2": "_9qPRQ$5_R8", "sk": "$$28$2" } }, "A1_$9B_": { "a5S_wj$N": { "_Ob_": "d9", "VvalueOf": "AN$0$_Z_", "ta": "Ai6z$W__$EF" }, "$Z0_9": { "jp$": "wk_", "$": "e", "H7_Gl$l": "$_2hO_$" }, "Q$X": { "$A": "e_$_", "$arguments": "z", "Y$": "__e0_C2PN1" } }, "_2": { "$k": { "_u2$": "__$Zz__6Z", "_": "_toString", "EA9_W5Bi5$": "$tru" }, "P$9E$u_505": { "_": "Y6$__$q", "EtoString": "a_h", "s_": "ltoString" }, "_3c$propert": { "d": "$0_pro", "Bprototyped": "$$l4o_I_7_K", "__K3ua$": "uGi_" } } }, "_8x$_": { "cME": { "Y": { "_6": "H$0_", "_J": "$Vo_x$", "x$__$Ge7tm": "_kx6R1__I_" }, "_cc_R_2_": { "L0WA_$__9": "_", "_21$": "Yo", "$w7$___W": "$6J_" }, "b": { "$O__l__": "$D_", "ABs": "_5Gy", "X$O__9O$a_": "h" } }, "__r": { "ye3e": { "__wn_763_U4": "_$_w1q$5", "W": "_h", "_k$c$$6epj_": "iJ5Tp_" }, "AalMN3re": { "_e$_Z_$v__": "$ea", "_2x": "$a_lMc0b$", "$P_": "$" }, "_Zb1D$c_": { "z42_b92": "C$_", "C$__$": "n", "$u016": "_8$6" } }, "e3$Xn$f$_": { "_": { "aX": "Aref", "_P$i3wFp6$": "_k", "$$V_$I$32A_": "_$$_N" }, "_key": { "h_4$$rop__d": "$0$_2cf", "o5": "$H__$___T$7", "_": "evalueOf" }, "d_cp99$q": { "_p$Sfd4$": "jprototype", "_3_ca": "nh$", "nkey": "E88z7$$V9pg" } } } }, "I58x": { "_g_$O": { "$_": { "$A": { "$$1_": "$3_", "_5S7q__1e1": "d9$$$9", "c_h": "El_QR" }, "$": { "__": "Akey", "a": "i", "Qs": "_A" }, "_4B$": { "$ref": "M$3__lookup", "el$zX18$2$": "SAc", "_QA_": "E8TE8a" } }, "__": { "_": { "_": "A", "gcL": "D", "_b$nFET6$": "_" }, "_$4": { "mqI5qAv3": "$3W0WI$__P", "D": "_$57iE", "S": "$" }, "C$": { "_R$$$87$nB": "_I", "eB4rpmn2": "Rb", "$": "_me" } }, "$$": { "$$_0": { "_0$_x$2y_$b": "Y_I823j_05", "OtoString": "$_QQ_", "WyIsEn": "$2D_2_i$m" }, "_caller": { "xZ": "_XZ", "_Dt_V5W0j7t": "_$w2_", "_valueOf": "ahaZ" }, "$p": { "$": "h_Q", "i$VFF_$S1_o": "Rc_D$y_", "_X": "b" } } }, "_$$": { "wDn2_3$U": { "R__proto__": { "ad$pn": "d__h6q", "cb$QsKxyM": "zM_T", "Xp_3w_$q$o": "_o__" }, "b2": { "_apply": "j", "_zu9_": "_$", "Y$2": "_a1$" }, "bX": { "D": "lbind", "mame": "d", "$6": "_" } }, "G_h79i_$k": { "vc3": { "vi": "Cp", "$": "Wi5_3_M_", "LP_h": "a_p" }, "$d0d": { "C$6_4": "s", "Vkey": "$def", "z87Cd$": "eod_d2A_$4" }, "_FR": { "$Rr_9s$m": "i3vm_", "Dd$d_b00DDK": "_$e", "_t8R$": "Y$_" } }, "_b": { "B82x$1__": { "a": "_f8_J", "w$$$D4": "c__I$k", "_8$xb_2_$$T": "_" }, "$$e": { "x37__": "$", "NAa": "$key", "_1_": "$_ZWX_5$" }, "Kj$": { "$$i$4": "Dp_O7F_5EC$", "$M9": "$wD_8$L_D", "Bb$q": "$$$" } } }, "Dkey": { "$a": { "a2AI_O$P$9": { "$z$": "aprot", "p$": "Br", "Vd": "d$_k25RV9" }, "$Wg_$q_T_$p": { "B$b": "$F36_$_", "_0$": "$_$$G_17_", "$E$_Jl40": "zp7_" }, "BD_": { "$arguments": "wHf_j$ZGQ8d", "_": "__", "B_BI_8I": "$VG$" } }, "Dkey": { "E$$": { "$d_dL47$_G": "n_3", "zB__": "_valueOf", "k": "z" }, "nFP": { "$_6": "$7O_$G5Z_9J", "h3_$$": "evrC", "DX4IosVLgx": "Y" }, "V": { "Nn": "$$$b", "$7_hlE": "UM__looku", "$ujg__5c_": "$_h0$yP" } }, "_y_dVG": { "_": { "m": "_4keyprotot", "B$": "y", "v$DHtter__": "MtoString" }, "Co": { "O6x7$s": "Vn$5_", "Tkey": "_9$Ca$", "ez_1$r8refY": "_7d" }, "Ct": { "DJ7_Tbe": "$", "_p": "xfv", "A": "T8C$$$_aC" } } } }, "$n$t$": { "$": { "_": { "QQWG_7S8": { "S9e": "Az", "_": "_1r_59$__A7", "_0": "AE" }, "_": { "$valueOf": "u", "_": "ci", "$": "Sprototype" }, "$caller": { "$$EY": "_d$$47F", "_$cTn$": "q", "$": "$_Cgj" } }, "$b$": { "$__": { "cn_3dt_$4": "C$$", "$$_L$$$F0Y$": "B__3BB5_2qi", "C": "e" }, "Xkey": { "$_I_": "_G", "X7": "_0$_Al$a$", "U$": "X" }, "_bD_": { "$tv6NJX_i4": "V$_x", "_D8": "W$Z_h6$2j_5", "j": "ZHg0_$r2x" } }, "$$n": { "D__$": { "E__RG$$X": "$0", "_toString": "X", "Y$jr$": "__4K$6" }, "B": { "jaw0": "E", "aXVWlb": "ch", "_$_5PS_$": "$$1$x$" }, "__9_$gY$$": { "_$$_": "hB_", "C": "$3C$$GEz", "Dk6t": "De$_$$4n_$V" } } }, "_oo": { "$60cE": { "$25EZ": { "$_$$$ym": "M", "_r_D$_Vm4": "Y_AA1$Il", "w7_$J3w": "B1t" }, "_": { "_3O": "VM", "b__rLi": "$key", "_6": "_$5$" }, "B$": { "DdQ9": "_0", "bw_bindtype": "CT", "CO__": "g___" } }, "$fY": { "z_5_2__": { "bb_sj$__NV": "$Y0", "$": "wnenam", "V__81V__Ul": "ica" }, "$z_TMe5": { "_key": "iH$$J5__", "wrefw_66ine": "$key", "$": "b4" }, "$r61_Mp3$KN": { "$": "_5_$$$$", "C_yc__$$_14": "$__", "$call": "x" } }, "_Z": { "z4___45SLW": { "$_R0$pi_65": "$_B_$DH$_", "Y_OS29$_0$$": "yvB", "$4$846IR_f$": "$t_$" }, "_2BB8f8XG": { "$d": "$", "KJ8Q$3c0Y3": "e$$7EX$_W", "_O$": "_tXk" }, "Xalu": { "$o_aD$X_$id": "_$XU_zV$$$_", "G9$$": "V$__", "$": "c$$_v6u" } } }, "$key": { "$_S": { "A_Ex": { "XnPr": "$0____E", "A$": "_$nameB", "$": "Ri$_$$K$U8" }, "$cY02": { "_N": "x", "_o__$3DS6$": "k__bf__$", "JzFs0": "$wg$" }, "yo1_$_1": { "e$": "C", "ofx3$$": "$__", "$Z$z": "_b" } }, "$": { "MD$L$": { "_9cX": "_ac_$EC5", "qqAhBE___": "_$QX3NcBtu$", "Zes$$_k8": "B_dUZ_" }, "F": { "$": "$", "v$e_S0": "C$$_", "ecw": "wM" }, "w6": { "_2$0vh__H$6": "$$Fx_B_Z5$", "__": "YNo2_W", "$2V9$29g": "$8h_$$" } }, "lintriamkey": { "W$Q": { "$": "Z_1B6r$$", "S1": "x", "_V$$v_": "$EY$$_D_" }, "$6_": { "$JaW1_": "_K9lWC", "$h": "I$_$_2", "_7": "_$pt$D" }, "$": { "Fapply": "X_a", "$O6": "K", "Enamruct": "c_loo8key" } } } } }, "JhQ": { "$": { "_1C_pZ_ZU": { "JFgZ": { "$_": { "xg$4$": "_r", "sPI1": "b_", "D__i$": "$__$" }, "_O$uT7z3A": { "$x__9v_$$3f": "c_$Y$", "a4": "$bind", "z$2_2$_k__$": "Pi_$I$__6C" }, "ph_cv_3_S": { "$ji2_J$": "B4_3$PS__L", "AyyEtl__4q": "v_", "Ibin": "$_EN34y$__" } }, "_toString": { "_4vJ$": { "ZXJsQ_p$7L$": "Wr", "_6": "Q$w_D9_", "$6p$2_WY$$G": "X$$" }, "aj6": { "_x5M": "_", "_jv": "$", "$$__2": "SC3__hE7$" }, "_U$_ap0_15": { "Bkey": "c3__u", "x_ft$$": "OV", "s_$$N8$$_U": "_$WHm9ym_AH" } }, "v$9__": { "$i": { "_a_$7$7": "$__6Q_R_3", "Y4Nd": "E_R", "k4_$$": "e_1mO___0ba" }, "$z2X": { "P$name_": "AEX", "Gr$$b0b_W$z": "BBeGe", "$a_Yo$4$": "A6_n" }, "e_0$N$4": { "$1ds$x_$RjZ": "$Aa", "_xd_g9a_": "$_re", "YcW9_$_m1": "$dAz" } } }, "d9": { "$F$C$Z82": { "V": { "yS$": "$AA$Ta3Nv$", "Y_3y": "Z2$x8S00_2", "I_6x$YgK": "$__" }, "F": { "$": "_", "eM$$7": "__s2", "Ec0vYz$5C$_": "a" }, "$$m_HEpck": { "xkey": "_Oap", "$_4e$$95$": "dmKl_3$P", "jD4dmc_": "_$_toStrin" } }, "___4$0_t$": { "JNey6": { "__gT": "$e", "C9": "$8Z", "_2": "$ref" }, "w_$p$J__1": { "_h0$IMY9Dk$": "n556$0", "___y": "_v", "CO_62kX_c": "$7_aVZ" }, "i_": { "_1$": "_$x$", "Akey": "G8_$_pr", "vZ$J_Si$": "_$J__$VJ" } }, "$yxh__$_$1q": { "_Xi$$v_": { "x": "HF6E$0$$3P", "$c_9D": "aGG949$$", "$ref": "_0_" }, "_": { "$ln$fU1RZ2_": "n0ew", "e_FkP$_9z_$": "OtoString", "yOdi$_O3": "$_" }, "z_N": { "$$": "$$1HBy$_", "_52_": "d_RH7_g7iPG", "X": "jlength" } } }, "n$": { "___l": { "d_$45__": { "W$": "CM", "_valueOf": "Nb4", "_0LWd2": "_zc" }, "_x_EDw$__": { "EF7": "B_R_utf$a", "_$mw": "B_Q8J$873$", "c0a_2$wup66": "J_Dy_9N$b" }, "$aW_iHb": { "j3M_lck": "BhAEp_$y_$", "$__": "$$S4$1h_", "f___e_cx$_": "s$H_" } }, "$L": { "$d": { "_B_jl$n3_1": "$B", "$B$e_g": "Ps", "cr$s": "i_" }, "c": { "$": "$", "_3_7": "_R3e2_n", "_p$_B$3H2DB": "$4E" }, "NjjE$8$6_3": { "C0BedE_e": "$Z_3cAb", "_valueOfhas": "_", "_prototypec": "_" } }, "VQr7$D94": { "D04_": { "t_p9e7W": "_", "$": "D_", "$_k": "$2d" }, "$_": { "C__p": "Cs$Z8BxI", "o": "$2", "$S0_": "ld4" }, "$fk6": { "Q": "n8", "qx$_b0": "pr_0", "_0_": "_ato" } } } }, "u_dY": { "W$": { "_1$_zN_6_": { "JIX": { "_": "_kYV$da5_$$", "$iHb_": "$", "z$KR_y_Y": "_$p" }, "bRQVhG__I": { "G5$e$": "_1", "V3iA": "YSDd_2k$$", "H": "dB__d$4$" }, "DwDxu0_": { "$$__": "y7__$A_", "Bb": "Wr0J_", "A$_$": "_" } }, "E_pro": { "E$_V_4_37X": { "Ac": "_E$Ck$_61", "HL$$": "L", "_X$h4$7z_7$": "e" }, "$tp__C": { "$": "$6W_", "$36_$_6": "_$", "d_$$W": "B" }, "$az$Ia__6B_": { "Yzrototypro": "ceHd$A_", "$$Ge": "bU7$__1Z_R_", "c$": "_A$_$" } }, "eref": { "z": { "Z4": "$1", "z__f1X97__j": "a_$4_1", "_im6": "z" }, "cC$eb_0y_": { "_$5XO$_7$_": "$Z2$J3w2s6O", "_n": "eB3a$_Y$J2b", "K$B": "Yd_v" }, "d$pzvumeran": { "_$H6wV$$": "BY6dVD1__23", "$__En_$6$": "C2_53_GAOH_", "H_cq$P$": "s__T_Fmi" } } }, "CVlcH_i$": { "$___": { "__bind": { "U": "_", "D$___": "$vlT_", "X74$y_jw": "_" }, "_5_FH$_$": { "n_": "$toString", "$M": "DWrefSet", "pp_q6$7_b$": "c$$_k__Zo" }, "Hl_6AY_": { "$E8b": "b_p", "d$$$__$": "_3IP", "$kr__M_": "_bind" } }, "WZ_9h": { "___$e_$G$2_": { "_SDTSg_Ad$": "_toString", "s$": "$_q_$8V$RZ", "c_Z$gBU$0K": "_J$$cWZS_w" }, "K": { "_WZ_$$_": "t__$s_$I3_P", "MM$_D7_": "jtC_9f3U$", "a$rsv$": "c" }, "E_": { "$8_": "$__d", "atterprot": "s$_8b_Q2_", "$ROg02": "_l__$1_G" } }, "$pii_": { "o": { "_Qz": "_e__defin", "$j1T": "c_$", "_ca3btoS": "f" }, "v": { "_0": "TtoString", "A$_": "$", "_call": "__wa$_" }, "$$6": { "_1$Zfded$": "___6$_C2_7", "_98$$7__$ad": "$T$$Bc0Z$b", "$": "_Q3$E$$" } } }, "_$b_": { "Z$": { "X": { "X3_U_969_$2": "_$E$07", "dapply": "_3R", "M__proto_": "_p" }, "Z": { "bC____de": "$", "X": "__c", "_3d2SW6": "_" }, "$toString": { "_bWtU6": "$p6Az", "bapply": "$$y", "a2": "$ke" } }, "__const": { "_$o_$": { "_": "_0", "z": "C_Z1", "__h": "$$" }, "_7$$$9_$PB": { "$": "_$$", "w$93": "m", "sm_": "A" }, "w": { "_length": "p1_", "c_B": "zyp__", "$x$": "_$3x" } }, "__n": { "__": { "_": "$6a", "d3n_W$1$uv": "n_D5q_T", "$_cO7": "lcall" }, "Cname": { "e8E": "ezs$$", "Aref": "$Dd$_R", "b94$": "E_4_y__" }, "$8_wV5H": { "E__": "_key", "a": "V", "IQi": "$_" } } } }, "_valueOf": { "b": { "Yref": { "_arguments": { "$valueOf": "D8", "_7aD": "$T", "abin": "Q_" }, "$5$T": { "$P_$__9Xzfz": "_1$cE", "$HOOcE$OxKU": "W$o", "_$Y": "c" }, "oxf": { "$__p": "b5Km$8", "$": "R", "krcall": "W__$_$$f_4" } }, "$valueOf": { "m8$t_S$U$D": { "b_$4Lu$": "BY", "_oZ$$$D$E": "X0", "az$N_64AnE": "kkey" }, "_": { "$": "KX", "y__defineGe": "_length", "wA5__5_1": "h" }, "M_5$": { "_b_$$e6N$": "D$c7Of$_", "c$$82c$J": "Nru2_8_$k5$", "$$V$X$__": "Xq_qa$J$2__" } }, "$i": { "_": { "P$h$89$1": "_K$6E", "$6$u_p_3q$": "E$$n$$", "$o_0_DU$U": "$_$b_sb$_Y" }, "$_G": { "_": "_", "$$hZ": "$A7", "_a_Z": "WAwneGet" }, "_U": { "X0s9$": "Ckey", "$9Z": "_F", "Y": "X8_h_$y" } } }, "$": { "aI_nd$8_r$H": { "Xd_bA8$W_B": { "T$6$Rw$V7_": "Xz", "$$U98T5v_": "$key", "$valueOf": "$" }, "i3$": { "CZvQ$_$$f$": "d__Z__$_$a", "vct": "_$13$$yECe", "Sarguments": "G_$jD7$$$1" }, "A$v$": { "_key": "$u1V9l___X9", "D": "$callery__", "dneSetyleng": "$Sy_H2" } }, "_arguments": { "$__1_n9G": { "L$E_mg_h": "__", "_$3n": "H_$1__i", "m_": "B_" }, "$$_nX_6V$": { "OXm": "$2__T9__7", "D__$RJGZ": "e_6$$", "$_de": "wt_L$" }, "S34wuue": { "_XXA$1Xv1$9": "r", "$_$r": "A8$2", "yb": "g$887n__e" } }, "D_L0z": { "Pnc$9k": { "dWm85x_$j$t": "ygT", "d": "$ref", "$prope": "$_$13$" }, "q$$": { "$$9": "o6aref_s", "$": "$_$", "c_$A": "_T" }, "VO_P1$Fyl9$": { "$B3$c": "n$", "c": "k", "A_$_$": "mGetter_" } } }, "$$_J$$_": { "_Y$I$6d": { "$cK$re1p": { "D_995$": "n1", "uto": "___o", "Qkey": "YBh9w$" }, "$x_": { "as": "$y_4OB5u", "zti1_$_h": "N__PR8__Q", "eb$$": "QtoString" }, "$4key__look": { "_ref": "C_SCUg_$2$", "$_eflengthb": "BN", "_h$$$oV": "_$Uw_" } }, "EEwe_": { "$valntt": { "$F8mn": "D$6", "_j0": "_", "$": "$bI6e_1G0" }, "z$$_k8$0J_$": { "$": "__Y", "K": "$CM", "$$f$": "o_$h9kxU_7_" }, "c__": { "zf__$0__2": "_$E2_fd", "zkey": "A", "_P$__$z": "$_G_$T2H" } }, "dP$__Dj$9g": { "$_O$$$F": { "tett": "gapply", "_$": "b_$3", "$__8": "OoQ_" }, "X$": { "DN_$Vb$WV_$": "Ol5", "do": "$4", "_3": "_H61_" }, "$": { "$_v_": "_H", "E_VL": "_y_1__", "$Hy$XeU__": "E$o4J" } } } } }, "_WcuGg0J": { "$Ul$$RZy6": { "_$$fp": { "$_6$U_dh": { "_$": { "A": "W3X_L25", "I319$$_Nr": "_$A1$_9$$M", "zi_35_J$AC$": "N4Tj0_$$CZ" }, "$_b80H_": { "E__1": "v9$tp", "ctoString": "$$$r_", "$PLNc$$8": "D_V$SSWK" }, "z8v1": { "__gw7": "s", "Di_$_$BwS": "$", "a2YMX": "$" } }, "FmT1l$C_": { "d_$4O5o$uVl": { "$": "$7pr_eaAu", "v$_$": "X__$9", "__y": "H$tA_J_$" }, "$7v$_ELe_aE": { "C8w_v6$hi3": "$valueOf", "EP$$dF": "T", "ZszB$__tk": "DvalueOflen" }, "Ze": { "v__p": "O_", "$J0O$F": "af$$vX_ezq", "Br": "$n_$1" } }, "dh": { "Tv__Z6TT23": { "NwO": "C$F4v3Vp9$_", "_t": "$prototype", "teq$Ym0$": "$1ertypn" }, "U_Lf$wa_31_": { "w_b$Q8__4": "$__1m_", "_a": "y$C_$F6E", "g$$$3$y_Ec7": "X__C" }, "_b": { "_calbr": "N", "$M": "Y", "xK_9G1Ia0": "w$" } } }, "E$": { "_": { "$_": { "$": "$E__a2_e_", "$le": "d_z_4D2P$M", "p7$_7n": "_$v" }, "O686": { "_4aZ": "$toString", "$_0_": "R5Hm3OTWlH", "_7D$ter_": "F" }, "rZ4e__$B$8": { "S$$O": "o_n3eE5f_$Z", "D1b$BDCe6": "O", "K7$tEy2Svu": "V_C$1$$_" } }, "Y9H$$$$b_": { "_4$$41__$M": { "_$3hasOwnP": "n$$$$", "X0t$": "b$g", "$_": "__U$1I_$" }, "G_": { "j_XD_2Hi": "ze6Dr_3r7", "$$uR$$d$c": "$R", "v7$78D5_9": "_7_$i7" }, "zl": { "$__": "$$t", "$": "$Xu0m_", "_": "$$9a" } }, "w": { "a_": { "$": "v50", "YA$v_0h4i_$": "yb_", "$05xZ$__1$": "_$$00__" }, "$": { "eIH_iN": "_z8$$_P__$", "vc": "u_", "VK2x4$j0g9_": "cS7u_" }, "E": { "$": "_$c7_D_e1b", "d_": "Frefm_isPr", "T$$OH": "$" } } }, "$$$n_4": { "__$": { "V$rc": { "$_5": "c2__52", "Dkey": "y_$_lg", "_bindar": "p6$$3_uC6_J" }, "BHV": { "oisPro": "wa_M_Wr$s", "_$$s": "$v", "_Xme": "$3" }, "_8$A16$0WG": { "a$b7e": "PGy$", "$": "_1p_8", "oP": "b_$IwO_$2" } }, "y": { "$K$e": { "L__defineGe": "h$$_$k_0", "_": "$$", "A0___7": "__0L" }, "E__": { "FVwP_z": "___", "_3": "_318025$", "ZoK": "$90" }, "nMT$$6": { "_$3$3": "W", "ZqXeS2": "$__", "$_$$w__N7fU": "B" } }, "$B_": { "__z9TIz": { "$32_": "G3dt", "$A": "E_J$$", "Zy_": "$p" }, "$i5o$LPL": { "u$z4": "e$kM_", "wLB4x$R7S": "gE7", "dy9F$O$Xx": "$$$I$$" }, "$app": { "_TGMX_54j": "$$_w", "ca_Ed__Y": "N", "PvalueOf": "_ce9" } } } }, "t5F$$ItRJ3q": { "s_": { "_3b_n": { "x": { "A": "Eref", "d$N": "G_toLocaleS", "$e_R67ZX$": "$H8_8i6m" }, "$": { "C_$$d$D_": "UY3v", "a": "$_", "_T$8I_2$$": "V" }, "_5": { "_": "_$", "_s4_T__A": "Q$3X", "_$_Z$t_J": "Cc" } }, "E_Y_d": { "B": { "$6A$": "y", "_$vP": "_$", "E3Jr": "ADhasOw" }, "$": { "$H$$35": "$6$k", "$Cd": "X$_", "Zc": "___l$wp" }, "c6": { "YReW__": "bS$z7", "etoLo": "$key", "B": "$01ox_$$" } }, "E": { "Dd2a": { "_": "i", "$sI6_$": "_$ek3X__mD_", "wi_ld$$$": "$by" }, "pvalueOf": { "__$v": "x_mL0", "d$": "_Y", "_llp": "U_$sXWW" }, "_d": { "$3f$4_J": "$810_o7", "Vkey": "$l9ZV6z_", "$$u7_$$$": "$H2U5" } } }, "$6_D9$": { "$_bWZ89": { "$s": { "$$$": "$_x", "_WRg_z0d": "S$H", "W_k4R": "x0s" }, "WBA$$_": { "z120c7cY": "K3", "_": "Dkey", "$$": "aop" }, "b": { "B8$_xO_5": "h_C$1c4xl_", "$5_7___yN_": "z83Y$_$_", "w_$": "b_$$_6$6__" } }, "_$N_$$_8__": { "_$_2_$$D$6": { "k$": "d_RF_x$10$", "VGi": "dHEb", "mbke": "z" }, "B$": { "n$M$_E_4$e": "__$z1$_l_Gz", "_J8CeU": "zyq5_$_", "m": "$H$4" }, "_8C6$5": { "b$X": "aD160j11", "Y_S9Qd": "_4Xc", "_4$E": "W" } }, "__": { "AJ$$F7$10": { "H2_tvw": "$", "w9_": "E$Eemerab", "_X_r$x$$K_$": "b$9Crso" }, "u$PJ$$$_$": { "v_77jK__dd": "_$$bHWF66$", "$": "Z$53$IWob$", "oI4$": "$bind" }, "AngProto": { "$$1_": "w6vP", "$T7": "b$", "f0Ffk2$_g9Z": "_1Bvx_7_$" } } }, "_$": { "A_A7": { "N__$$5Hk1V": { "_D$": "F$S___3_$7", "w_": "B$", "e$7Nm": "C" }, "$B": { "_v": "Y_", "wis": "p$_8_", "$": "_X$" }, "X$N$$m__$$x": { "x": "EgsyO1F7$Z", "C": "DM45NL_", "$YpauI_l_": "C0" } }, "$$$$G_": { "$__b$4$6F1": { "H": "_3T8_x", "Apro": "AJfA_", "_J$IV$_b_U_": "_$BVee___7_" }, "__$": { "$_": "CM72_", "W": "_Y8$t$", "q$SQr1R_": "$" }, "_0": { "$_l$p": "x1bG5_a_$4", "$1C1z3l": "_$970$b$e", "$_al$bi": "w_" } }, "$jKX_s": { "__$": { "N": "_4yX_$_5$", "____proto__": "_o", "e__$BVE$": "Ckey" }, "__$O02_$$C$": { "m5$": "$call", "_ref": "$$$", "bO": "_" }, "d__Qp5fn__L": { "r$$4": "$kvj97$6", "$_N5le": "p0a9_Lz", "_$_": "b817U7s$_" } } } }, "z0Z7_$$": { "Lref": { "_": { "$": { "yt": "$vfJ$_n", "X__s$x4$": "$__Hi_0_$", "__": "$_0b__" }, "$_": { "pN": "_totkey", "L": "XJ", "_": "$valueOf_YO" }, "c_b_7_$C3W$": { "HX": "$_O", "__Y__$TOK$_": "$$", "_b": "CtoString" } }, "VkBZ_m60E_": { "$$i_t_5xOl_": { "W$O7ts7": "_zm829", "A_k$y3": "_ref", "rJ$": "__M__$" }, "$mI_w$_l$4A": { "$A_": "B", "d": "_", "_P": "E7_$4" }, "$S$": { "AX": "gI_$", "W_OF$": "_GB4_w", "EA$a1P_": "L0g" } }, "iZHN": { "ZtoString": { "_prototype": "$4f9w__", "$": "YO$L$e$bbA", "$_C_": "$__" }, "_B$": { "_Rit1Z$3$": "zco", "$$9": "Xio$v7Kz6_H", "l$4D3DEe_": "$_" }, "F": { "w2nB$6$$YK": "___$E_0$c__", "et5": "_", "_w": "i" } } }, "$b_$5__5": { "u": { "$key": { "q__1": "$s3nA17__$", "_d": "_$", "H$_$__P$": "_n1IR$7" }, "N": { "A98$$3RQ": "EmmEH$__KF$", "_bind_Gett": "c", "_V_D$5g97_m": "e__$bind_2_" }, "$": { "V_": "$", "A_": "X_x", "$$X$8N$i": "_$__" } }, "$": { "$_X$$vK$": { "A_a": "_w__Ph2", "B_": "q_h_", "$length": "$_7$Aj_B" }, "_$": { "_L$C": "$x", "$_e_": "wis", "o4": "_rog_$" }, "$7$S": { "D__proto__": "$$FB$B", "_bi": "E", "$key": "G_" } }, "_": { "$tLQ$e_$__$": { "$_m__": "_t", "y8_0$": "D05t5ml$kx", "z$y$$a": "Ac" }, "ep$5p": { "YZNf_p8": "EYt", "E_Ib$_": "_wM9", "s_$__vjW$$$": "$_2" }, "v_i9": { "_B2": "$k5d2f$5_U", "CYs_N": "___proto__", "E1R7NVY$ak": "$app" } } }, "Z1": { "_arg": { "E_14_": { "$_": "Txb9UeQ", "Bt": "_2ke", "D_qk": "_" }, "O_19_$L4$_": { "k$": "wn", "y": "J__ZJ19$59", "z$s5": "v6" }, "RO": { "O67w": "$len", "C_": "T7$7", "aa$$_$7_$t4": "c12$" } }, "pJ_": { "$3$_$l$_oF": { "hb_": "C", "$": "$7_UQHU1$7_", "G$$": "d_$Lbv_" }, "c": { "Y8q_": "ReQ_____", "B": "h_5____EE_x", "$K$fVB$_$": "_apply" }, "_arguments": { "$$": "Ps", "iZ": "$s3u2I4K", "E_r": "l$" } }, "Xapply": { "i6": { "C$FB_$$": "$Z_9FT$63__", "_X$4Bd16d2": "_apply", "$$_9__FCJH": "$" }, "_b": { "_": "B_3$v_$4$x8", "$X1_": "s0b$3U0_", "BbS": "y4" }, "X$dw$W$_t": { "X__defineSe": "_10$V_t$f$X", "ge4DOK68g": "$_g0$1$I", "$De": "aapply" } } } } } }, "a": { "$prototypep": { "$$7llp": { "_": { "$3": { "$9$__": { "_ot": "D4b_", "C5_51H_6": "g$$bzr", "_1$_z": "Dz$" }, "$p": { "$71x_R$": "D_xa3", "$$": "RtoString", "$3$": "y$6refpr" }, "_$A_": { "$Vtype__l": "_", "_$$DP": "$Cc1", "a__": "t4G$$__$j" } }, "_l$91ztO9$$": { "o$_B": { "L$xS$$_": "nk5B_2s", "_l": "z_$E$9wv_5", "$V____": "$_$_8_C$4$9" }, "Ide": { "f9gl_": "_2s$_l__X", "l": "$kP", "$$O_M$z0Ty": "$___$_$" }, "_na_e__": { "Ce9$Z_sq4gC": "___", "$C_M_$$$8s": "X", "__H$L": "$" } }, "A0_": { "__s0s$": { "W": "_", "cF$p": "$$", "$0_0_$N": "j$R_2sg_B$1" }, "gto": { "c7z": "_a", "$O0$3n": "By$$3w", "pWg$": "W$P_W" }, "vn$": { "h$Z___yp6": "Wap", "E": "$O8M", "O7yjP8V_E": "Q_1$N5$l6" } } }, "$rit": { "$8$$$__6$": { "av1": { "JGXE_H$_pb_": "$_H_i_9aCn", "Dapply": "Akey", "E": "O0$_s" }, "_a_": { "EJ5$": "__", "_M$$Wt_$Z": "$Y_17_3GI5", "$valueOf": "ez2$x3$8aK" }, "__$Q3": { "C2fBX": "al51$30$hDj", "WK": "ix$", "$HZ_74$_$RS": "_wX6p_2$$0" } }, "_$a_$h5NrK": { "C$": { "eyZ": "wp28eL", "_key": "__sg$8Fv_", "g_F0$zp5$": "j____" }, "___R": { "Bapply": "_r_$9En$mV$", "$fo$yk_i05": "_5$_", "__ame_IsEnu": "y" }, "w": { "_a88G__P_": "Ec", "$__6$": "xtoString", "$q_": "dN__" } }, "Q_": { "VO$h_$I$tHx": { "_COC2_0Xc": "$", "__$$7$": "_8_L6G__27", "_e__A$fp$": "YN3112" }, "f_$b": { "U5": "_r", "i2": "$g_6", "Ypr": "$m" }, "WAMcaller_": { "$116$BOvL$": "jtoSt", "Tr94$zygn_": "_p$Q$$48$_", "_$e": "_e_1i_$1$" } } }, "$valueOf": { "e": { "_y$$v": { "yam": "$", "__G_": "C", "_9s_$$6$$$": "_TL88$A_J2" }, "b": { "E0y_": "dR$1$21", "m3a": "b", "L": "j8TX$$6$3" }, "x9": { "c_": "ku_8", "z": "V2tQ", "$6ad": "M_$9_WP9$$" } }, "V$_$": { "$2": { "Yprototype": "$", "zrinG_w_ree": "$n$___", "tcal": "$_k0B0$o" }, "$": { "_Vpro": "A$", "W": "_", "XU__": "_A" }, "B_toStringt": { "$r_w": "$$950", "$$uO$$$_3": "u", "A_": "_$$V" } }, "F__k": { "_bc$1$": { "aY_": "HZ$_hQDF$l", "_f$o$46": "_j", "$jW": "Dk" }, "b_$22_yah_": { "$": "KR$$_$", "_$_Op$dj": "_", "$_h59Q": "$_$jGT$" }, "v72": { "a_": "_d", "c7_$3cIz": "Olength", "$": "$Z_5g$$vr9S" } } } }, "Mt": { "D$_b8": { "xuoLocaleS": { "$_": { "_": "DOf", "e__": "dB$$w", "zm9e": "W$w1" }, "P": { "$7P$L": "$e", "C6_I$2W7": "$eme", "$_72": "sRG$" }, "u1$adK$": { "_$": "_", "a$mJq": "z_b", "_w_": "TJt_Z$07" } }, "buD$RS": { "X2": { "_6__Y$_": "vOpertya__d", "$_": "C$x$", "$_$E1_S3__M": "z_3_$619" }, "$h$$Q": { "Dhyh": "_l6___lGC", "O___c__9q4": "VIJNZ7$", "a": "_5$" }, "zd_$$jj8": { "W$": "$P0l_", "__m$_": "W", "_d_r$_o$h": "qvN2KB0_P" } }, "J$$$B$d": { "$U$": { "e_02": "_length", "e$": "g1e03_b", "_b$Rm0e$i_S": "qI3" }, "Ze0z_J_sR8X": { "Xl": "$r$$3_$ue", "ervC9K_": "$j_$$L0_", "xq$_232$4B_": "$" }, "dWu$_": { "$$": "$", "_H$_RwxQ": "_Y$SJ740D", "B$I": "$__o__sR5$" } } }, "In$gDuk$": { "_exE": { "Bo": { "ttR__O$$": "e_$", "$": "m$42_", "a9C": "GT_$$s$7_s" }, "yEto": { "F58": "Lx__", "_z": "W$B$3w_XdY", "_$$9OM$_P$": "x1" }, "$": { "zGQvx4$$63": "Y$b$", "adAd2$$b": "O$JmC$__D_N", "$$5": "$_$_$$___2" } }, "$4$F4__$S": { "$_2_": { "BPrototyf_s": "_2_", "$$": "y_1w", "e___G$1Z": "$YI" }, "_$_$_$4": { "Wv$___7bb": "_$$$o_8", "CA_$_4V_20_": "$", "e_X$": "EA$$$_Qt$_$" }, "i_": { "_": "bM67Z0$_U3w", "_6$9_4gdyW": "_37", "E$3": "VA__7N___" } }, "B": { "_$_84F8k6_": { "_$": "s8A", "ziHoIw": "C$", "VW$$": "E$g7" }, "b5": { "V$0$21": "lcall", "$0$K444__": "Scr", "y_bsC07$": "dEL_j$$7" }, "N_m$1o$z$": { "w$$argume": "f$$", "$O": "$refprototy", "E__": "B" } } }, "Ccaller": { "y_": { "D$o_$DHT0": { "_$6$$L": "$U$h54R4$$_", "$$b": "o", "o$$": "$_p_" }, "x$1$": { "Q": "_", "__n$b$e": "$lo", "vname": "_$e$i7jG0" }, "z": { "$aI": "$7lo$mT_4$", "_": "zZc$a0G$03H", "W16v$n_$C": "Y" } }, "_W_P43b9": { "$5__$0_": { "p": "d$ymC31bD", "$c": "$toString", "A_": "_Ik" }, "_t_pT$8$": { "$o_$DCN$$": "_$", "v$_$": "C__a_6_Q5", "$___5$": "$d58H$I7a_" }, "$d$Z7y": { "ZA": "href", "$QSBX": "$96U", "e_42fh_s": "$6_k" } }, "_": { "y0_": { "__48wLF": "$6_1", "x": "$_21$", "_S5_": "ZA76y$$3ym$" }, "W": { "_$Y": "B", "t3MTW": "C$__0$aa0", "C_J7$_": "e" }, "_l_$0K": { "_": "E0__z$gk8__", "Bd55Ty": "kv$3", "a$0": "W" } } } }, "_bindhas": { "_key": { "V": { "ztnhI_zb3r$": { "h5": "__$$29o0_0", "Vh": "BDn", "Vs_$3___$": "_K_4YE9_" }, "i8": { "$": "B", "zc_WJ8_$$": "$$__$_$G8", "Mapply": "B0__Eux" }, "_Dz$2263": { "$": "_$_eG7xoD$9", "$u8HBJ_z_": "bwo", "Xref": "M5$$$_k$" } }, "_": { "_Z$_": { "iq_5g_": "_apply", "$S0__H_": "_F$_$y", "_3NV": "l" }, "$$3": { "$7$C": "_key", "$": "m8", "__0___KbO": "r" }, "a_8Yr_O$n_S": { "_u$iC": "y", "CfE$$": "z_9__V", "_08": "$d" } }, "BjOFo__79": { "Br$2$0$_s$": { "D$": "f6$$W_05", "$o$4q": "e_3le", "_$": "w$Jdg$lR7c6" }, "e2__g$$$a": { "xG_$4F$2_": "XKh2$I_V__", "Z_9_s$_": "hgIv95_CE$_", "A_U$$e": "_$_z_7_$tS_" }, "$": { "_": "CtoString", "e$U_yVQ9": "v$a0__5K$", "$$": "$apply" } } }, "BF": { "Y": { "Y___": { "Ai": "E__e3$$$1wG", "__04_$4r$u": "Dbind", "v": "_ar" }, "ahHz1$": { "_s": "$_X", "AO2iW36": "W$a8_fh__", "ztoString": "$Dw$O__K7I4" }, "_ty": { "_": "$1", "_co": "_eO__Propum", "_Bq8B$h6ovG": "$" } }, "A__d": { "bvalueOf": { "D_$": "_", "_": "e_FV$_T_", "$v6_bS": "e_3_6p$_$_" }, "$ref": { "$9c$": "B_", "$$gJ$4Mh_8": "YD_z", "_4$$s7_": "_$V$q" }, "_9955V$Z_": { "E_D__6": "$3Np__$", "c$_": "$J$T$d$", "Wg": "X_z4_$lG" } }, "$_K": { "f": { "ZK$2z": "$P__de", "XA$7J_ZR7": "d6eP8", "_5G$$C_6": "$$t7n$z$J" }, "$": { "$ZzA": "__l", "BnJij6$ziZ_": "Fu_", "$Qa": "$9" }, "q95$8_": { "_": "yz___", "_arguments": "$e_$", "_$$_$": "_Nk$Y$G$b__" } } }, "_": { "p5__8d_": { "d4__s0$$o8": { "$": "_key", "Zd583zzB8c$": "_E__", "$$a": "W$W_4" }, "_": { "$$$_J9JV2": "E5lCVu$7$$", "X": "V77", "$valueOf": "a$" }, "H": { "D$_": "A", "$p": "__d1__looku", "$apply": "nZ" } }, "$_E348W": { "__B": { "c_Xv": "$_C$_", "$Zyz34Tl_4": "Cq$oO$8$_", "_": "CtoString" }, "_sZKE$_": { "B": "_ibk", "$_": "_", "_9": "$_na" }, "BzB8K_E": { "$Q$_A": "Y_ale", "P__proto__": "p7_", "JM_T$": "k" } }, "v5h_F5l$_$$": { "__tIcTF$": { "R_$yk_$kK": "t", "_$0_B_": "_Y", "$530": "z_$ce" }, "_cZ": { "htoString": "d$Bd29$$", "$": "$F", "a_": "$" }, "_": { "CDvr5_$$": "$", "_4": "E1xw$rt", "z1t": "J_" } } } } }, "$L": { "D": { "Ikey": { "v2z": { "$": { "$DDp": "$key", "B4a$28$N": "V", "A$_$": "E" }, "z38ZpyUR_": { "$$_l": "___$svo7", "_RA4E$4": "E_$7KU", "_": "_" }, "O_bP$i": { "$": "eC_70tr$", "Db$$$$__": "c$_$_", "x": "_txe" } }, "bX96v_": { "z6": { "akM_$Gk$$TT": "__", "_": "d38$y$9E$", "$": "z_H$_" }, "B$4_Y$$8_$": { "_0__look": "$D3__define", "_$n": "X0", "Z$$E$b05": "xil0A_" }, "$w0g": { "ype_": "Z__", "$y8": "Nfi", "$ke": "BVQa2_0" } }, "$": { "F": { "$b4__defin": "BjE", "$$18FL": "_", "_3n": "uD_6" }, "_hasOwnP": { "_E": "_Mol", "v_pL__K_M$L": "z", "_$_6Nlyn_": "Aref" }, "B4calle": { "qp": "__ZN$", "CAD8$$Q801": "__P2$1fb", "WM2Z$T3$$_m": "$e" } } }, "$_": { "a_d__p": { "$1": { "X4_9_": "O", "b": "___O0_DE$", "__P$": "E_" }, "v$j$_U$$$_5": { "B$": "X2zhJ$$i$_$", "g": "_", "$r_Vp$$g": "m_" }, "_8": { "$d29k2": "_ref", "S_ST_3": "XN$Nm", "$$6r": "$m_Nft__" } }, "c6v778yX": { "E": { "$__$2": "_", "ek$n$v_$": "$$2$_$$$$e", "$": "$" }, "_oD": { "Vh": "ay_0h", "_C__": "v$3Aaxhq1r", "__Rq$b$bq_": "$" }, "$3l$__Y$": { "$": "_7_$Z3_", "A": "d_jYC$_1t", "_$wnPropert": "_FrD3Jj" } }, "I3_ef_$$6": { "RmY6": { "Aarguments": "m_$f$z5", "Z": "_", "E$1_kK": "_303L" }, "_": { "$R0_": "_ar", "_$3$w": "h$", "___proto__": "$544" }, "L$c$4": { "_9a$D__3p": "a_t$_k_4_9z", "d_B__": "zmm_7_", "g$$y$kOD": "VF$G_LyHX" } } }, "$cd": { "$3W_": { "$_7Q": { "$Mr": "m$_", "_x4$sS$$48Q": "qVA_e", "cle": "c_$7_6" }, "Jkey": { "$6Z$": "_", "Ym_5x_ZEq": "_$_X$Q", "_": "_$h$_c$t$$" }, "Bgth$_": { "ftU_$x": "_2_I____sT$", "b8$$o_p": "$$0__cX_L3z", "$G$$$_3": "mhrR2$_$40" } }, "K_$": { "N$7b_c$_j": { "_": "$65yE__", "_$8_m$$1_": "By", "$4g5O5dWveF": "Y_" }, "$_": { "d7$$R1_$a11": "d$$XsGI0_F3", "E$HwB2$M7": "_", "eref": "$L5xvL_R" }, "__c__h$L": { "_": "_66", "v": "$c$", "$I_NGrQ_": "hW8_" } }, "e": { "v_": { "EcC9QO$8": "_", "$1": "q__24", "_$62A1DhzLJ": "C2p91F4" }, "Dc": { "$": "$h", "Yg": "$s", "Vh3": "Al" }, "C6v": { "X$y": "Ye_Y1PB_t", "$to": "_hasO", "cY_": "__$" } } } }, "__82": { "$BVdK": { "Wc": { "e$_": { "Yd": "U", "$4_73bJBZ": "$33", "R7TM_": "r__$7" }, "_$__4": { "E_hM7Np": "$w_", "v$ED": "w_d__look", "___": "_Ve" }, "v__": { "v": "Ur", "$$1v$m_": "Zref", "$Y_": "____Yp1$iV$" } }, "$": { "$key": { "$$$Cl7y_E": "_ef", "$": "A$0__$_$aE3", "_6Na": "_9_i_$$1" }, "a_6$03$42F": { "$U_0NwPNQS_": "capply", "$bind": "__$2i_k$6U_", "Bl$I_$__n": "b4q_1a5" }, "$wOe0_5$6": { "c$": "F$$$3v", "_0": "_", "a$$8$e": "_y" } }, "sar": { "V_$": { "_": "$_", "BQ$$": "$$", "rJFCv": "__Q_M_I_x" }, "__": { "C$": "aF_o8_4Phd$", "u$$AnN$_r": "J$", "_caller": "B$_" }, "$": { "_3_h2H__Bt": "M", "UY__D$": "$wnPr__l", "$caller": "$_$0" } } }, "_gu_$y_$t1": { "$Y$uY1$__F": { "$name": { "u$a": "a$A$aYKB", "n$": "zq_$", "v": "_$wa04Ma__" }, "I_$2": { "w3dceg": "_$Ad$$Z_iP$", "aconstru": "B$0k$$$$t", "$name": "X_v" }, "S$O$d4t_7J": { "Y$f$Rqg": "Y_F_$", "_4S$7": "Y24n3_", "va": "__n_EtX__" } }, "$": { "__7": { "vtoString": "$$$hasOwnP", "Bkey": "_75", "x0_$": "Ct_L$" }, "$W05D__c": { "e57_q": "rO", "$$$L$": "f__0Rw$e", "$2$2$$4_": "$l$$5_4" }, "_$U1ws": { "CB$_$$Z": "_AG5$mh$$", "_toString": "$$$_$m", "_y7b5__7TAa": "_" } }, "$b": { "ulc": { "$6": "b2_949_$_b", "EL1__$": "_28$$", "__": "ev_" }, "cs$": { "$8v7$7g": "YER7p9$", "$$g2_1___3": "D$$0", "$": "_length" }, "az$_w508w": { "$i": "A7_b$C$O__", "_in": "OxuSs_rJC", "JV8_": "J5_" } } }, "k": { "$": { "$is": { "$4": "K$B_", "_H": "mw", "a$$$": "___Dt__A$" }, "__0_S": { "D$": "_k", "_co": "b", "V$z": "d" }, "Vna": { "g$Gg$_$_0Gx": "D7", "Q": "$omE1r$$0", "V": "$Z" } }, "$0$0G3": { "$7g$cb__P$9": { "_ngrefcon": "__y8_$3O", "_ref": "GE", "A": "$Ee8protot" }, "V__pr": { "$$2$V$$": "VB0_nPwj$", "$t9L79$Po": "_caller", "$$": "xu3_H_j" }, "_$_$7$n": { "_z2": "E8SW0", "Vpr": "_oK", "z$kde$7mh": "$N__sF$" } }, "Rnx_q2X$_l$": { "_S_Io$x$": { "_4$": "e", "__3": "CDf$", "Sb": "_0s" }, "$__": { "A6": "pX$", "$$6$5R$": "v", "d$$34_$_1_$": "m" }, "_Kd$gkv_L": { "$": "_", "$t": "$lerUp", "_keyr": "e8$" } } } }, "eB__dc2$": { "__$w_$5cf7c": { "d": { "__$sl": { "Y": "_k$__2R__7", "q": "_w_NwY_bZ", "$a1": "HM$W$__$_o" }, "Lb": { "$1lb5_": "_", "E": "_A_l$_4", "_c": "uZV$w" }, "q2$r$E1B$_": { "AoW6vh_S5": "_Ra$Fz5_", "eD_": "vQ__q_hf$_", "_z_$C$__$": "_Z__" } }, "E_": { "$": { "_indPa": "Cd_NkSV", "dOb$V6_$": "wyu", "_ha": "R6$" }, "$$": { "_B_1$": "IZ_$C_O", "Rl_V_DY$_c$": "ZoR$$$$_", "ll6zQ0E3S": "_" }, "pB_": { "_": "ZvalueOf", "rD": "_", "$8lL_$NT_": "__$" } }, "_$h_4309_": { "$k2$3$$k": { "_KP_0$_Otp": "_z7$$g4", "_PZ3": "_", "dNe$zqLnFUQ": "___YfO768" }, "_l_pCj8": { "EP_x": "QC", "$2z_4_91": "__e", "_S4$u7_": "A_6iMe" }, "E": { "e$6T": "_3B", "ZiZU": "$__lookup", "_3$": "_2_W" } } }, "d": { "x": { "i": { "yLt61$": "R8__$zBB__", "$": "eAj", "VC$R": "BP" }, "v": { "_w_$7bx": "IY", "$1157lh_T_k": "__6_1NxW$1y", "____M": "D9" }, "$r0": { "h_2": "$_$", "_$c_$": "Ba45$_b79_8", "b": "a$vU" } }, "_n": { "_$6$TIn_$__": { "_m": "G$_", "$": "_EK__", "s$Ew": "z_k" }, "_SybW5vZ__z": { "sZ": "mWT", "uoA__a595_": "$Z", "X$Vx": "b_7E$$r" }, "h": { "$D_d3a3_b_": "b$H_9$L_$6", "$_d": "_ue2C", "BbomP$$": "_Y1$2VC" } }, "$Q": { "C$HC65": { "EB8$": "d__proto__", "G": "$_iB", "dk": "Ven" }, "V9b": { "uO$": "_", "$": "_D$H8f", "$_a": "S__1$_" }, "_Z": { "$_de": "E7__AN6$$", "z033": "T8$_", "PE3_F__": "PE$_" } } }, "n": { "_$u": { "yX$88N": { "x8V$N$_": "yx$C", "_oto": "_", "_": "_" }, "__0$Q5": { "c$_": "M7", "z_$3__y": "$Z_M_6", "$propertyI": "$S_g" }, "DM": { "$D_9": "____0e$l$1_", "_z": "Bl", "$IQuxm_$_V": "y6$$" } }, "z$_": { "__5$x_2v": { "q": "cEDB2e", "$apply": "T_o_$Cmc3_", "w7$$ZFF": "Ae" }, "$l_d2a$_216": { "_": "an_3X", "dkM0_": "_", "c": "$K" }, "QP$l": { "a_prY$_p": "_$$H", "Tkey": "$6$t", "$_": "z$0$0" } }, "_0$": { "E": { "bq__Um_ZGB9": "y2e$C1$", "$e": "$V_V73$_", "___s": "$_aO$J_$20" }, "$g0t$": { "Z$D2kM_7": "$bind", "k": "$v$$Zp", "UiT_82$$_aY": "_Xx" }, "Dca": { "__9": "R4$", "$r3": "aC$$$", "Y": "f_2" } } } } }, "Y$_$$0Z$8": { "_r6s$k_$": { "_01R48frD__": { "_bind": { "_X$xrNg_": { "p_m2s5V": "$__P$C$__", "$DL$$$$_t$6": "BW", "G_Ekey": "RL8_2V$" }, "u$___ZVW_": { "__c": "_", "sc": "_Y$8$C62$5", "CWF__": "_namere" }, "N__$_": { "Vref": "__3k_YN_2", "__6_u$7$9": "Z72g__NM_R$", "$$_6e_B": "$Ja_$X" } }, "B": { "aJ9_2c8$$$G": { "_7Zz$m$_1": "_", "_key": "nTz3_25d", "_v": "R$$yrHL$$" }, "B0pjI": { "v6_$TO15Sd": "_3x$", "C_f1T_$xb": "_ref", "_roE$z79": "wvalue" }, "$_0Uo_$": { "qto_9lue_": "_", "$__$_T$$_": "$pr", "$o6$p$": "Y_" } }, "_": { "_": { "Q$A$2": "X", "_$": "yva", "_Q": "Dc$kP_$$$" }, "C44": { "$x8Ab": "_0_0", "$6__hy$$": "Ca2761$E3E", "Q5_$_N$$B": "z6$9$" }, "_7": { "$pS": "D$", "ks$": "$__6l4$mk_", "C9_": "H3" } } }, "$": { "pc": { "A__$9": { "RtoString": "b", "D$_": "_$3$Ua8D", "n": "$B" }, "Kb": { "y5constr": "$V6a", "$er_9XA_lla": "b$7", "c": "b$" }, "q3$$V7b_$0$": { "FhasOwnP": "____$Lz_", "Apn_p": "_S", "y": "_3SR" } }, "$$j_X$FE$i": { "$Gz$U$$$$mg": { "$_": "j2", "D$z6_6_k5_": "v4", "$$$_": "ZB0" }, "_z9_avU_R_": { "$_j": "_$cd3v_$__$", "v_Yexx$Z7C": "$lp$$XY$$z$", "_$": "_1f_$5$Q_" }, "Q7_": { "$$": "$2", "dz$_Cj_f36": "zU", "$_r": "D$_J$" } }, "b39dC__$": { "Dref": { "WOC$_$_$_V1": "$o", "Y$$$A$__H$": "pAR$_$F_4_", "n_4$___8": "$_nuR" }, "CS$_z_$$3_0": { "_$_": "$h_BdTa1", "_r": "Lgument$all", "$07_": "c_F9" }, "e7w$_DR": { "_0nKW$p__": "CCY8", "Ename": "C7$$_G$5o$", "_7$0_t7E": "$I" } } }, "_$": { "$E$L": { "$t": { "_N": "r", "_$_$": "evalueOf", "$_$_Ql$NN0": "r$$090c_$" }, "__": { "_ref": "W$D_", "H_$$": "_$1", "_$": "$Cz" }, "CtoString": { "_De$": "a8$x", "eZ40$$": "F", "_51$$6x$_5_": "b" } }, "$$_q$7uS$": { "$valueOf": { "CN7C$": "VI", "CPm": "_$N__c_", "L_74t6c": "YQ85_$rMF$5" }, "B$$": { "du3": "$b$_S$Jp__", "Mkey": "_b", "_apply": "c_9" }, "_apply": { "_$": "q_J_", "g8DC": "mref", "$s__": "YY_H020T9" } }, "S1__s$x$_1_": { "yPx8_7X_": { "$N_$o$nt8": "amq", "XX_dOh": "z7__Bd_$$", "V$__$": "_P5$bL2" }, "$hasOwnProp": { "Bu239$_yf_": "$MqL$68m", "____GI": "E_", "cpp": "Bd5_" }, "rAe": { "z8A5": "$_", "arefkeyC$": "oJdW", "cpp_dconst": "_X_$" } } } }, "X$$4_F": { "_$c_$$6": { "$_Bbi$z$t": { "$0bFp$$_C": { "__$r_": "$T", "t$ns$j": "Nw9E$C", "_$_$$": "B$9$q_$_$2" }, "b$l": { "$_v": "w55c$$CH2$", "_d": "le09b_", "A0e$_e_RW0": "_" }, "e_X$b5$": { "t__$_": "__", "$": "c_O_", "$0l": "xn" } }, "_": { "emi_$18QD$": { "dH_vG": "_", "_pr": "G", "$$": "x$$lA_$5_" }, "_5keydnd": { "B9QhXv__$": "e_c", "di$vb842_q": "T2bin", "pap": "e" }, "u$": { "$Yf": "pd$Oa1$p3m2", "$49": "hNx", "x_Pf": "_$5$R" } }, "g0x_": { "$allargumen": { "__$B03": "WCkeyha", "V$3$ic$$$$$": "_6Aproper", "XC$_": "$$7__$$$O" }, "_": { "E$$G": "Sc$$_$_8eb", "n_": "Bkey", "apr": "q" }, "_d$": { "v": "WQl", "$c": "c__", "$h8T$K_u60$": "Da_" } } }, "$$149": { "Wcaller": { "rargumentss": { "y": "z_DOb__prot", "E_": "zar", "CC$m2$$": "$Z$" }, "$": { "b3a": "$_gpQ9", "$va": "$QE", "z__": "$D_e" }, "$__": { "$Z": "HO", "dBFB1$LbEi_": "d$_Zb$$_5", "QF_7": "WcC_4$c7_$" } }, "b1Q_6": { "_$NjW_n0_X": { "YtoString": "w", "_p_G6_$l_": "__s__1M$", "RD1ineeale$": "_" }, "aMiHC7$6": { "$07": "$H$", "uM$$": "$__dw2t", "D$_$S": "$x" }, "_ref": { "y8_$24$W": "_callboto", "F$2v": "_Z$V", "__": "tC_424_$z$" } }, "_d__": { "$": { "o7D7Y8_3": "yre", "G$": "wref", "$": "dp$BM$_u0" }, "D$": { "$": "zA", "___9mB": "H1_J", "$eO4__$__": "mj_" }, "$99$_$Z": { "$2_E": "_", "X$d_Z": "Wds2Ya", "Z": "Zngle" } } }, "_a2NG7": { "capply": { "dn": { "B$9eb$eGett": "$f$7M794", "_W___4_": "Zi", "_S$5_": "_va" }, "_axd$_Ad6v": { "$5_3h_": "F_$E", "__length3_t": "s$1e$9__e$", "n3V$$6$w_e": "$_7wF_" }, "$name": { "NK$_zC$$$": "$9", "Vn": "_3$O", "_apply": "_$__E$Q_p9" } }, "__": { "$0s": { "_$$3h8$_": "_4_M$mw$", "_$D": "$eX", "d$B_K": "$" }, "E$": { "B$$l$A6": "$", "$$0$vG1_": "_$$D651_$__", "zh74E9L8$": "_sP$n5F8$_T" }, "EUY": { "$V_$_b$": "tpro", "oB": "Ap", "_0O$i2": "P01mD$a8$$" } }, "B7a_$$_$": { "_": { "e$__": "VN3", "I_2$y$L_$$": "yJOv5CbFnY_", "_toString": "alen" }, "E": { "$5Iw6m$2$g": "WB8Ei$z$", "$": "_", "$xT$_3I": "Ig" }, "G": { "$namecall": "$9$$5eIIu$", "E8_a$_zh": "$__", "a_zb": "bTQZzP$Oy" } } } }, "mgu": { "___R$Cr__": { "$": { "XPDa": { "Cl_l": "jd_", "_toString": "$_$", "X_M5$1": "W_8$m$$C_X" }, "D": { "$": "JB", "D$$": "_$__", "yrg5$": "_M5i7_5___7" }, "enameval": { "Ec": "_sHa4u", "_": "r", "MRd4_x6_A0x": "sjLV8i$" } }, "w": { "mC$": { "z$3h$9_60": "E$", "$$argument": "$znOLd$16__", "$p$$": "$_d35_S" }, "___7$__$$W": { "qcaller": "m_b4$6$__$c", "$$": "$F$$0_q_", "Vapply": "o_$" }, "$O97": { "y1": "$_6j$g", "_$": "_key", "R$7$$": "_toString" } }, "_$_A": { "__6_1__9": { "L_g": "Wt_w$7", "_8$$$yJ2": "e_N$", "T26": "h_" }, "_i": { "_ref": "d_f_Qr$$smH", "$": "___I_E_j$", "$59$": "Q" }, "QDWgP_eA": { "xzspmP_": "C8_$", "$__Ab": "_5$", "vv$Z0__doe$": "yJ" } } }, "zref": { "$$": { "_O": { "$E_6": "f$_$H", "d": "V$1n6$d_O", "ca": "D_1d" }, "$$V$__m_": { "g490WB": "D2_", "$V_": "X", "$": "__" }, "Cx2hZ": { "_9aR__E$3": "o$0A1h$$", "$u_3": "b7_Pm_$$JE", "E7": "_apply" } }, "$2": { "D__": { "_b": "$3_", "Kref": "$__", "vL": "$$b_" }, "$s": { "__$1f8_": "$_T3W_xH0", "_F": "cq$27Q_V$a$", "_P_c": "vB$_8lL" }, "oapp": { "_$__lgD$": "K", "__$3i4$e$fY": "G___D", "_protot": "ueA5$_$8" } }, "_J4_3": { "$K$v": { "DP_": "xoA4_E$p7__", "O92Z": "Ne", "K51": "U_T3$mcV_" }, "$P$$Iq": { "$$3_$xZ_$7": "$__", "cd87__1$$_": "Zkey", "$": "_$bTp_$$n9" }, "$R": { "_": "_xX", "$length": "w$_$", "_H": "gcP1v$" } } }, "_call": { "a5_A__": { "d6n8bDC9Da6": { "_": "__$Bd_1AcA$", "_$XO$H2zf_$": "Qw$3$7", "eapply": "_LR1__WDI5O" }, "Q$_k_$$$x2": { "_$o_____nt": "d", "BaY__define": "$le", "caA7S$": "Cd_386" }, "x": { "__$o$": "N$39q", "A_": "$", "_6X3": "A2A" } }, "_Zg_$4_b": { "$v$_lJW19": { "w$a$10_": "_7$p", "O99$_T": "$", "$g_$pR_2$$": "$_" }, "vp": { "_61_": "e4e", "$QD06C": "p", "Q$$E6__WYG$": "x" }, "ca": { "__na": "x__E", "BY_gtC8B$": "$x__$d", "_Kk": "d" } }, "b0I": { "$2Ew1As2g": { "Fj4m$uW": "F$B", "YZ$$": "_e", "$": "B0$15_LX$" }, "t0$63": { "_cal": "__", "$A0n_": "cF_", "V$$0zgo$h": "_$" }, "ca": { "G8_G$3vTT$": "$$kW", "__$Y$": "_4_", "Yp__$$s9": "_toString" } } } } } } } }, "z2_mA5z$": { "Zb1": { "$": { "d2_$y": { "d$": { "y3_5_$KC$_": { "E": { "r6VC_xCZ": { "E_meXproper": "T", "BM_": "K", "C_": "__1$70__6__" }, "B": { "$eq$G$dS6": "zB$$UC1P_qr", "F0": "d$TmQ_$_", "$e____SP7": "_i32_$$$$2D" }, "_E__defi": { "$ref": "Lbind", "a": "$_", "$9c$Y_$6$": "$" } }, "q2Ut_$_": { "Eju": { "$A$": "$", "$Y": "T_3_$R$9", "$$": "$8$r_$_$E" }, "w3q__pOc_1": { "$is": "Bix$t", "_$5KO3$$_O6": "_", "$F$fs$$$6_": "$_$" }, "cref": { "_C": "h9", "_Q5w$$$E_": "bC4qMb__O8y", "_2": "bl" } }, "$i$4__6h$y": { "_V4wTw_$g$0": { "W": "__", "z3": "at$_$$_76", "$W$Y3$": "_AS76LE$O_" }, "Zv": { "$_": "_knFX_$9Ck", "_c": "$$9$$", "x": "_$M$_Y7TY$5" }, "$b6N$_": { "$$71$": "b$$$$Y", "$$e$": "tp", "c$_v$Q_Gt_": "$__AgG$_" } } }, "Ny2_8$OXPb": { "_arguments": { "jL3$e$c8L": { "_ns": "N$_$JUCv$Dv", "$_y": "$_valueOfca", "c_": "$$_VmtOo__G" }, "c00hxC_0G7$": { "X$W$f$dn2$": "_B", "_5$5b_xhA2a": "Ckey", "__F_1z_YT$e": "_d" }, "_co": { "_e1": "_cisProt", "W__loo": "_apply_", "__": "_$$uE8cgI_" } }, "_$l_": { "_881": { "$r_": "_$_0_Lk", "XZ23": "juEc", "s": "E$" }, "d$": { "E$_": "Y", "$bBS": "C$$7vVK$", "$_$2$l6_v_": "_8_4$td5" }, "$Dl$yQ": { "d_eO": "dXw8a", "aM_SA603$Y": "_prototype", "_$cl__p7$": "C6_D" } }, "___": { "__v8L_5": { "dqZ_": "gV", "$$j$c": "$_M4$vXu", "__$__MJa$": "B" }, "_3Nv_$_6x_": { "Tyf5$v": "c_", "$$_KW__$": "L_", "vE$$": "____vUS6_4Q" }, "$l": { "vw4b_$_$s_": "o", "o_$J$36L_": "$S$$", "Wet": "$b$" } } }, "$Q31$$2_H": { "_M": { "_0_v$": { "vQFfT8b_g$$": "T$b0_L$", "_": "_b", "_7__L$QY": "Dref" }, "j": { "Zpr": "$8U", "$": "_5", "v$2l$_V0q": "B" }, "$bkeycal": { "_9Bc": "rRS_$$0__Vc", "_BA": "$$j_$aA$_1", "_iOdA": "$W8a3k_6$_" } }, "$$_kj0": { "$l": { "G": "Xt", "_1dn": "dy$Uf", "Vj_12$$": "C_8v$$jAX$" }, "$P": { "w1": "$mw5D$7H$4_", "jo_Y$V_8$$": "$bD", "V": "ApeAl" }, "__V": { "Dk": "ZWt_B_Jq$O$", "$na": "A", "$S$Z$9$KXS$": "$umeconstr" } }, "$": { "$__6": { "lcaller": "__$Rq", "_S3": "E__O3$U6f$I", "$X_9_Dg": "$$3673__V$" }, "_75": { "$WB1": "y_r", "b_s": "$$$0432$", "vp_$jb__5": "_nXJ$$$$M" }, "$$$$": { "_a$": "_e_gYCc", "vln": "Aa__define", "$_r": "dD3" } } } }, "K__": { "ct": { "_w$__$MpY_": { "$UG__2h3K": { "$P$RIK_": "$V", "$$": "___d", "wqN9_": "P" }, "______2rWF_": { "kQO$_": "Ai_f$_$9$$0", "D": "w__9Mv", "L$A_6_y": "v___" }, "Ju": { "e_$0$": "E8_", "_7$": "k_B_31$d$W0", "JKZz": "$Vp___wM" } }, "__C$x": { "$$$g1S0$Y8_": { "X6p$$C8$$d": "$", "_84A1L": "Tcall", "$yrgumet": "_$1$$$" }, "$k$1$Bu__J": { "Zt": "D___Z", "$$_": "_Ev_$R", "BQzF": "C" }, "_6": { "e": "_$X", "$$_h$7$_": "bl$", "_ref": "iOec$$_d$" } }, "wN": { "v$$$BWyW": { "_B_z_": "$_39Z", "dva": "_V$", "_j_3_g_": "oref" }, "BJ_R_P": { "$v_2y_$": "_4$", "e$P$_2$$_6": "$_", "__TbD$W": "_e$B_YP_$$w" }, "$propertyIs": { "$apply": "$_T_E", "H_D": "ykey", "$6d9e": "mkey" } } }, "eM": { "_2$$": { "$nKT6J$xm": { "_$$C_": "Aref", "i": "$", "ciI": "_S_" }, "e": { "C6": "xMSt", "e$$$8R": "f$", "_toString": "_x5R4$_T__" }, "X_": { "ay": "B", "R$G_Z$1tZ_$": "x$4", "Z": "A$_" } }, "$A3": { "_Js_Z": { "$$": "___", "a$_$": "_", "BI_9p2_2": "_2_$6" }, "$__Nkt$Q": { "f6$x5_$": "_key", "_d": "Z$i8z4", "f2xXhT": "_8$$y" }, "_$BbE0": { "hCC": "$_8_e$$", "S$I9j6$I_av": "$3", "_rl_2$": "$" } }, "x_$": { "$z_x0": { "$$SKJ_1Elzw": "q", "qlength": "A__", "$V_": "_mboB2K_" }, "$": { "w__T_D8$b$_": "a_DWWoq9Tzw", "R": "H_z9_", "vK": "$__" }, "x$V": { "_$2_$zP": "ba", "w_9E": "zTp8S$1_aC", "m__$1": "jI" } } }, "bd_B_2b_8": { "z$_y$con": { "Q0U__0_g$": { "__6_ZGG": "Iin", "x": "$$_Eb$0k_", "Bd__BZC": "aj$X_9$" }, "$$p": { "$_i2": "U", "_M1": "$zx$$$_3", "___6$8": "Z2$7F$W$y" }, "j5GR$_ERo7_": { "$": "$P_Hfs_", "_": "_b4$Za9__L", "R3_$4p0k2P": "Bk_" } }, "$y": { "$2$31DdXR_": { "Z2$g_$_1_": "ylllength_", "X1$WhasOw": "_C0", "_$3_": "$length" }, "$_M": { "_mv_": "_H", "_": "$f_3$", "b6$5$V_$V_": "s__L_9_" }, "ZkX$JPLc2_": { "Pcab": "a0_a_$_", "$$_k": "$WZF", "$ref": "d_Yd" } }, "b$_$_$": { "$p_6x__": { "u": "T__$__$", "_5_$3a_YO_": "D_ca", "_3A_defi": "HI" }, "E": { "w_D": "d_0", "ya1": "$4j", "_Y$_$_": "Vx_1" }, "U_": { "d$": "EV", "_W_$P_": "$_8W2$", "_": "mb6" } } } }, "deAnu2_": { "e": { "gY$68_": { "r$__2v$fHO": { "Wm_": "etoS", "Bett$$Xok": "_4_$d_J_$_", "$RpUm78V_Gu": "D7_If" }, "$x6": { "Ye_": "etoString", "YZ$05J95_": "vr", "zo": "_$" }, "xN$4Jt_C": { "YAmk7": "rr", "$_erty6": "$Qp$Pg54$", "$$$F3y__$B": "$" } }, "_ref": { "$": { "gname": "$w2W$", "Gl4_$j$_g0_": "_", "_": "B_$Ntl5__" }, "$valueOf": { "$toL": "H_rdD", "Wcaller": "_p", "Cb": "i$8$$y$p" }, "__": { "CretoStr": "o_N$S", "_MX_W$06W0": "Cu00_d$", "_z$": "$2w" } }, "I_W$83_B": { "$N_$i_qq": { "df__P_L$": "mE7$wZ_ORf", "bt": "etoString", "_7_": "href" }, "_20b": { "E": "ek23oX_", "ACQ42H_$_": "_", "xp": "$_1$__$$5$_" }, "__ou$7": { "A4d": "BHY_t$$$$", "sL3": "_$I", "b": "_B" } } }, "_$c___W$D_E": { "$": { "DFGY": { "_E_B_Bz$W_": "cGw$4SXB", "cXO42$$_$": "W2$$Y$7$", "BYc": "_$" }, "Ze$": { "AO$1D_": "a_5EC", "_Z954a_7": "_o$r__", "e_": "A" }, "P3_a": { "$": "eh_", "x": "I$$$Y", "_A$": "EWw1___b$_$" } }, "ni_$fZFyl8": { "_AT9$": { "__$KSr": "_r", "nX": "$$1$2_$$", "_ZE1xI": "b$_d$_oto" }, "$key": { "ASF$_9y$VK_": "c$Tller6le", "Dke": "$n__hn", "_toL": "__S26" }, "Ba7_57i": { "d_": "$P_D$$", "$$s": "m_S96___kx_", "Cmb": "_V7eO" } }, "Y_$30": { "d": { "z": "_0ZSx_", "W_5": "$T9bFD1$", "__IZ1jl8v_6": "_" }, "_length": { "AL_Q7": "sJ23", "b28ml": "$c", "$valueOf": "$3$$Jt8r_3J" }, "uZ54$20J8s": { "t_ototbindc": "_eS", "gj1A5i$_h0": "$7d_", "_": "_bind" } } }, "_$$_4B5T": { "$a": { "_N71do_8PK": { "_": "Dref", "VInlbI$": "o3_7$", "vy$__": "Xpr" }, "$H_TP_$I": { "E4Von$_Hu": "__", "$$1K$v$": "K", "C$q_Q$call": "fIZIQ" }, "$": { "Dc": "C", "_0T7V_9": "a", "_$QQ_$_": "_$" } }, "_Vp_5$u": { "_S$C": { "d9": "$", "B_Q": "_valueOf", "_H": "WW$$" }, "p$3": { "$x0Z$$UT": "_Bp_$", "d": "_key", "Bca": "K_3$6" }, "eroapplyk": { "Iarguments": "ku", "$8_7_g$Ip": "_", "Fq4K_": "Xapply" } }, "$B2_Zd1K$": { "_3a$6toStr": { "l": "U__proto__", "$Re$b_s_Y3_": "qD3$3D", "$$r": "n_$" }, "$$_t$9__e$": { "$6N_8__Jm": "E7$Z$$_5", "$": "_ref", "AbewcC$": "CC" }, "CCCF": { "$_$_": "_k", "TnJv": "Ipro", "D_S_p_d$_$_": "uu" } } } } }, "_key": { "W": { "EK$$s": { "$X3_$": { "WvalueOf": { "_Kw_$2": "a0_$", "K": "$D", "_": "__" }, "__$8_$L7D": { "_$9_$W1": "$$B_", "_": "$Hv3$2_", "J$": "W2_" }, "_7aLC3$$1U": { "Vbind": "p$2", "_QjB": "_rbT", "W$$1_$$9": "$0i" } }, "p_9a": { "$_Axrotrgum": { "_41o__50": "_K$2tq", "$ty_": "n$0Gj$", "_WY4_5u$rI": "d$vlpropert" }, "d6_Z__U$ah2": { "Y8QO": "$", "IO": "hb55", "$Aap": "q$_0$$" }, "D$": { "__": "$name", "$r": "$_0", "P9": "j5$Lr$3h_V" } }, "_20$": { "m_16d9$M": { "_": "_valueOf", "$J_S6f9_I$$": "c_nC2_9ID4", "$pr": "$_$prH" }, "vdM_A$6D2": { "___nb2_y$": "m", "fS1_": "_", "$r_": "$" }, "Pec____$_W": { "_$DP": "_2d", "C7__": "_caller", "$_": "aisProto" } } }, "$Nai": { "G": { "D": { "D7$r$$k5": "$$", "_Y": "$7v_r_$5GXZ", "C_": "e" }, "_$$Y_$__": { "W$W$$_J$_$": "y", "ao": "ckey", "Oprototype": "ylength" }, "cCk": { "$YvQ$Z5$8": "dvalueOf", "q": "x", "z$D_41L$h7": "_K2" } }, "$t": { "_xd$1$1_": { "D4": "$", "$GC$H_v6z": "_", "W5": "$y" }, "b$": { "$": "eZ", "qq": "$B_bind", "xU$Ia3$_": "_ct" }, "__$_8$Ie_": { "st_": "VtoStri", "$": "__5E$", "z_27V$45$_": "y" } }, "$ref": { "D__w$": { "$_d_": "e6Zlda_9_a3", "$__": "$", "$_": "stoString" }, "$_y$4": { "_": "UG", "$": "M$", "NC6OL1_3_w": "____$__np_8" }, "$_": { "KSU22Be_1Z": "$$$K", "iYs": "d_2HH", "g_j": "C_W$7y6K_00" } } }, "B_F__": { "$apply": { "$__": { "$EA_": "w$HuHj_47w", "_$_7Jo": "K4K_$a", "$O": "xl" }, "c_0D8IG$": { "ZX8_": "z", "_Jf_G_$": "n$", "dL1g_": "$k" }, "ySK9": { "Vapply": "__6Ms_oL_$$", "Xapp": "E2_V__6", "$U": "_6__3t9" } }, "_z_M_$6kXg": { "Dbind$6_": { "nref": "_$", "Xf$U_$vI": "cw$__ZY__q", "b": "$" }, "$2$_kB_4": { "$tG": "_key", "BOpb$$X5": "eD0$F$C_B_y", "qmi_": "h__lookupS" }, "wAe$_p56Zj_": { "xhHF_ic": "$length", "wh$_$_$J3": "_U1Ac7_", "Ft": "szYv4E" } }, "_": { "_6_c2$_x": { "IB0_": "_x", "_ref": "A$", "x_30_v__": "AO_S7U83_" }, "_2Xv3_Yd$1y": { "clq": "$7_$", "$rD": "__$vbW_y7", "aV": "e3FLK65_" }, "Oga": { "_I": "__", "$X8C__Y": "_$_$w$$", "$": "_3$TFRJ_5_" } } } }, "z2zIf": { "wn$Vu8XP_Z": { "_3c": { "D$": { "ZZpropert": "wt", "eq1": "$I$y_$__4", "d19BN4cO": "A1ioa_V$" }, "_2": { "eoL": "hP", "a_$dsM$4": "cv2W_V_AQ", "a55$__$1Ru$": "Xo8__" }, "K4__v0_$3$T": { "$_H": "_prototype", "J$$$1": "etoString", "$_$C": "_$C__S$" } }, "q$$Xkn$$a$3": { "u$$Og___": { "a": "_G0pw", "$": "L__5p0", "$Q$$_V__J": "$0$1$$" }, "IXtXP$$_h": { "$E": "C1Og6", "_4": "_ref", "_a_b_WW_d": "_M$" }, "yx$$4eNz": { "A_O": "$$__$16AZ$3", "$$T_$AV": "$valueOf", "X$7": "_" } }, "l$3$$D_04": { "B3B_$$o_W": { "H$$B_": "Ckey", "_ugX8$8_i": "$e1z$O", "_s_": "$intoString" }, "s": { "_$c": "V$EB6$_", "e_S_Zy": "U", "$__6": "_3uvJ4" }, "__n": { "b$f$1NF": "_H_$A_5D", "ovo$$_2$J_$": "V17$_Y2$$", "a__h9": "_1__2O" } } }, "$Z9$": { "_X_$": { "_": { "BE_E": "Z", "_ha": "E_ac_1$T_E", "$6_": "m$YY55" }, "Qkey": { "_k11": "_wD", "$JF394F_b$": "RQG", "$": "_ZJ_$" }, "A420eLM$": { "$zY_o": "f", "$Da": "Zkey", "_": "a_" } }, "U9": { "$fy$rl$$wi6": { "O": "dop", "By_$$6A$$$$": "$", "m8e": "MMk" }, "B$": { "SN$_f_": "_", "C": "$toString", "d11i9$xZK8": "$tf$v__" }, "EY_4_": { "Hto": "e", "A": "rL", "_s$3$_w63": "WD3v" } }, "_valueOf": { "wk": { "v5$Va_": "A_q__proto_", "z__l": "_5$0__d3$", "clength": "$$_q_$$4c" }, "d": { "$_6$$C": "$__K_0x", "j": "e", "Bc": "_E1$" }, "$7$$6S": { "__$$7$Y0": "_$", "C8$$3$$": "CXR$$kt_Kx1", "g_$___": "_wk" } } }, "$s$R_7_6_1k": { "A56$_$_Na": { "_": { "Abind": "O$$I_7__L", "YGoo2W": "a$5", "c": "_0_" }, "fo": { "W_": "w5_K9$du", "bhM$W_8F59": "aP", "L8_$8$": "YyXD$10$$7r" }, "_1dr$__$e_G": { "me": "E", "_VH1z0E$": "_P_4o$_su", "Uy_H": "z_m_p4ofa3" } }, "le6_Z2$d$c$": { "j$_E_8Ir$": { "P$_": "_b0_3o", "w_$64": "$__aw_f", "__": "k_" }, "_2y$": { "v___def": "gJ", "$5$N26_Eee": "$$", "_": "_aVc" }, "EWQ$e$": { "$X_$$$4d": "Nl", "_95$uJx": "_XB", "$$b_": "R5" } }, "A_5_j_": { "_7$k6_": { "_B1B": "LcaleSt_y", "_n_$_$oU": "F_bind__pro", "Shv": "iKv" }, "_key": { "$$_": "K", "$_h$L6j5uJ3": "_$$_C", "_": "E9ca" }, "_$_Y9": { "Yapply": "WX__de", "_": "W21__C$I", "_$_h$__": "E_2$0_0$_$t" } } } }, "Z_K_k7$4i_D": { "b$8a": { "B___f": { "$_3": { "$$": "fc", "st": "g", "h$9_$$_KvY": "__g" }, "$_": { "cP_2$m0$": "abindEapp", "f$dG": "cH_ooo2_s1_", "e$$ykeyva0": "a$q$_f_$_" }, "$": { "S$GH": "B", "C_P$g": "_in", "v$V": "usjQ$5$S$" } }, "v$t": { "$$3": { "rIc": "k$k_", "$2$_": "__$$2", "wXpP": "$3$$T_k$" }, "_": { "yCC": "_06", "J_syq_4I": "$_B8$$5$", "e7_$i$R$T5W": "_$__WG$r$CV" }, "_s6_H": { "_": "_", "$n": "K3A$6a", "Wm$$W__m": "$0$" } }, "$": { "_NQg9": { "_": "__", "_ref": "qY3e", "$7hP1vwIFf_": "D9P_1c" }, "_ZgZ$$_": { "$_H47": "_toLo", "_ke": "_aAwX_9", "_": "A__reflengt" }, "WA": { "__": "capp", "z": "$GF", "_3a2p_$8": "_lengt" } } }, "N____$": { "_Vmtx_Fx": { "x": { "$": "r$", "q__proto__": "_4", "$edY": "_" }, "y$A$f2Ce_V4": { "n$e2EB$_": "mA$X$_", "L80B1$$_$_O": "$3$b$$_", "_apply": "x1_$9_$5q__" }, "Eme": { "_v$": "P$9Uk___F", "CZ": "$9tter", "iref": "w3$_jO" } }, "_U": { "ER": { "Dpl": "i_f", "_$": "E$$$r$", "_F8": "J$$$$TT" }, "$$$7": { "_Y6$i$MP": "$", "_5TSJK_vNHQ": "$B19XhAXw", "$length": "___" }, "cE": { "$": "$", "$___wU_": "D6_I", "_r": "$C" } }, "Z": { "Cgp0t": { "bz": "$X_y$1Pjx", "$": "$9$", "jxle": "$f$YNE$" }, "V": { "vL0unva": "ZxOGF$_", "$_8": "Z", "K": "x1_d$_" }, "_ingX_cotot": { "Z_$_b7$5": "$ke", "bt": "$", "$name": "$a" } } }, "Sh2_": { "ay": { "_bZsPis_$7E": { "_$P$I57__": "$3$_5$O$aG", "_a$z$DY$": "$e13F", "__": "$5" }, "Z": { "$ar": "$$66$$18", "E": "P", "BB": "k" }, "t4$hF$$j": { "L": "KvalueOf", "__$Ze4K$6": "_h$_$__A$6I", "$U3": "$0_Aw$$_" } }, "vz__$": { "_$OMJ_": { "_": "_key", "$bind": "a$x1", "znP": "$_" }, "cR4$F3C": { "w0$T$_53": "te2", "$F_$": "Jjc0AT8w$", "$$$$X_Ww_": "_k6uv$Y6" }, "$$_V_J$": { "d_n__$": "hle", "__ZtC": "_jfir$$", "$valueOf": "__ku" } }, "$j$$": { "_CD_2$cal": { "_$$$": "V", "a3": "DF", "D_z0yi$2v98": "__s3" }, "$9h": { "Cr9_": "W__3X$_$", "A$e": "q_lZ92$2_d_", "_$$9E4bH$Z": "_K$tTG2V" }, "_1_6j": { "$": "vJ_L1", "$4V7P98c1u": "_", "L$EF_Ibj9_": "$99lZ$f9N" } } } } }, "Dw": { "_$valueOfku": { "__U1$s$B$": { "G": { "$prototype": { "$Y__H": "d$$u", "bm$": "v__proto__", "B$": "QzGhCE_8$C1" }, "_458I6vT": { "$307aAV5aC": "E8$2_", "sD_": "V", "oE_Kb$5wl": "a9__0A_1$E" }, "_8Pljf$iu$1": { "CGYmJGvJp": "B$__I_x_Wu", "_arguments": "h_Yjbp___$", "$D$$b$xQKc": "_" } }, "d": { "f": { "Sr": "C$$cWe_3", "$eaC$$_": "$_b$", "$_1_54ud": "$$IY" }, "d64N$U$": { "$b$Hc5d_aF": "_5w_f$$K$", "$proto": "qp", "$e5GLXI70": "Qi" }, "Z_$$hT": { "__": "C$0__42n$", "$$kk": "$_", "$_": "bU" } }, "$_nd3qP": { "_": { "XUgs": "$_7$$__", "$": "E__ev", "$6": "$d$" }, "SvPro": { "hapnK_j": "_", "$SJ$$$$8V$_": "a_f$_", "$$9$": "$OZ$I_$Q$$6" }, "S_$7": { "$$": "b7vG8l1_A50", "rLf5_$$": "$_C", "W$_C__$_1i_": "$_ir$_$2_" } } }, "$_AjP": { "u$6_D_Xm$C": { "wPkhp$HbXI": { "$Y1H$$VT": "d$03", "_g": "$L_S2_$", "$__9$_5": "XA3" }, "$9$_": { "__$": "$e", "g_6$": "a", "$5bF$1__$$": "$nam$$3_pro" }, "F": { "$Nb$": "w", "A_17": "$_281_H$Fir", "RrH$2e_Ik": "$zVU" } }, "x7$2_me13": { "B4_2": { "_x_wW_8e": "$6$v$37G_", "_z$_4": "cisProtot", "eDa": "cEd_" }, "w": { "_7$_uGe$Y9$": "g_5_lk_$", "vtoStrin": "$l$", "w1___$$7": "StoString" }, "__2": { "_enga": "e$oZ_X$", "B$$$$58": "dx__D7B9_R2", "K8q$": "_K_$TMM6" } }, "r_8": { "U_xcall": { "r9v": "BE$$$5_$___", "$$": "j", "_prope": "z" }, "_": { "A$": "__$45_e8_", "_key": "xP_1_K49$", "_aw": "vHFJoo6T1" }, "y_5$6cv_2": { "X_x__$k2G$": "__$t3$$_0", "YS_d": "v_$6", "_1": "$_$0" } } }, "$ref": { "_sB3a$": { "$": { "H_": "_$D", "whclu": "QOi", "$eA$8W_$$": "utr" }, "$a_$o": { "$$": "$9v6__$$6qo", "$$6o_$$e08J": "_N$$_Ug4", "u3_rGz": "$sq7_4O" }, "_6w$9fDL": { "v": "eXq", "Z89__Qt$$": "$$$t1J6", "$b7": "$$_" } }, "_C8": { "dD28A$_g$_j": { "GTH5": "yD5__VRr", "Q2e$_x": "e_$8$_5", "gref": "$$90hH2_6$7" }, "m": { "$keyc": "c__r", "Cprototype": "$caller", "y$_": "w" }, "$B_Z$$4e": { "$5f$": "sT$_8$C_", "QX": "_8C_8yNF", "$Q9$FZi5$_": "AB30X_" } }, "z$$$96h": { "_n": { "c0n$UB_": "_$I$5_W$L_5", "_E4a": "d", "Ds_$F": "$$xR_$6M$$$" }, "_r0B_X_$_": { "d8Oci_4_": "$", "Aal$": "d5$$RvNt", "w2__$": "v" }, "xna": { "$09$8j71": "$G$Z_bU0", "a1tr_$$6cx": "Dfg6k$", "n": "_" } } } }, "jr": { "di4Y3V": { "_a_$__82$": { "a__": { "Yp_$0": "$r", "__$_$n": "$", "e": "Bq" }, "A_0": { "T$N_": "q", "_valueOf": "v__", "$D_$0956$": "N$" }, "P$_$70$P$": { "_": "$$", "_YwT$_E": "o_$1$", "$kvuh$0_": "b___" } }, "C$t": { "oname": { "X": "Eb51_z$O", "_": "_6$$FoO", "Z6g6_$": "Y_z_e6$" }, "_0__Pj": { "$8$a6_": "$o", "$name": "i3w$1$__", "vE_gdE$$_": "$0np" }, "_s_$y$_all_": { "B$re": "aC$$$$Rr4_", "_GqJ32g$$$": "e2$62", "_toLocale": "$$_$" } }, "$_6gT": { "EQ3Z": { "M": "$T_", "v_pydproper": "D5d$", "$__lookup": "_$d$_hn_pw" }, "$": { "y": "c23Cc", "_7_FT6tI32": "_", "_HP3": "c$M$$0hZ$" }, "m$2": { "qdsefineGet": "y1$$2F__", "$JGdp$": "ebind", "$UW9Gu": "Ga_" } } }, "$toLoc": { "Cu__oc_": { "__j$Z_S45R_": { "I7978b": "E1", "$refconstru": "$key", "_": "A$" }, "_": { "fo$_$I$": "K21", "oisPro": "w$E$", "$key": "A$6" }, "A5_5b": { "e_U": "d1_r", "$____b2v1": "$$y_fe6p", "j": "__5" } }, "bcaller$": { "vyvalueOfap": { "_$": "h44_41v$__", "$ok": "dR_S$$c_h_", "$C$Z3": "$e$$$_tdb" }, "_vm__": { "cC4D_": "_", "TQ$hVMxjfl$": "$t", "v$3": "_Y$4i" }, "e$_VY7$2": { "h$x": "_yp", "b$J$_2": "n45CxG$ca5$", "ZE": "__3Gz_c$8__" } }, "$_05$": { "wmG_G$zy_": { "d": "NZ4CyBcoc", "_bind": "B__$$A80C", "_3U5": "T_$" }, "dc": { "_N_Vo": "$a$vDa6$cVd", "cnY_c9Z$eQ8": "_WY$v_V1v$_", "cA$_$Lc_$1p": "_length" }, "D__proto__": { "_KyT1W": "_H_$E_S$b", "_BkIZe$u": "$t$", "_et": "ZQ2" } } }, "L$": { "$toString": { "$w17_3E": { "$Y$D_Ex_": "x_9_V5$$P", "$": "$G$", "A$_g": "rB6$_QD_$" }, "Bcallerl": { "$$9Ny": "e$h$_x", "___H": "_x_LU7R_p3_", "$_k1$1ooo7": "cD9" }, "McIr": { "W2_X5$z0gQ": "E", "gH$$YW2": "Tb_", "$": "_YX$_" } }, "$": { "V": { "_$2$$_": "__", "q_$1": "V5_A$f_", "e1$Al8296$q": "$5v8i_$_" }, "_bj$6h_e_": { "St8e": "Q76", "$_fYl_A0O": "ef$B1", "$$": "Z_$t3$$$" }, "__0_": { "$": "s$f", "v$8w": "_$apply1s", "$key": "$caller" } }, "_$$16Eu_z": { "wb_w09_": { "Ecnca": "XCE", "bp": "_", "E7$6f1__qaB": "ce4A" }, "a_$": { "A69Y$7u_": "_", "_": "$7_", "z_$": "w_$__V3" }, "C": { "__av2": "F$C$$_pn", "$5sb$K$B": "s8K$3_Pw$m", "p$$M": "_$JM51q$" } } } }, "$x$": { "$": { "___lookupSe": { "zpr": { "VR": "dcaller", "Ct": "a6$D$", "d7Mc$ex$": "v" }, "_gP$$_$$X54": { "_$6": "fJ0_J", "_NAuUbF$_$": "zcall_hasO", "_Aa": "BsP$$gC_Cc" }, "_c": { "r__": "_x$_$58", "D_": "$$$e", "E_W": "Zoi_$" } }, "AD": { "dG__X": { "$e__": "_k_9", "_7$8": "$ref", "D87callerl": "D$0$nJ$y" }, "l5L_": { "_Mu": "O$4_", "$_1B_$k_": "e", "x$fa8w_": "v2R_I9_" }, "$79C_pGK": { "Ak_$": "S1$a", "bo$1$5": "_pQ__Jr$H6", "c": "B" } }, "M2$v": { "_propertyI": { "$": "YV", "wav": "$", "$l": "_6" }, "$RR_": { "b4$_9f": "HuIR$$G", "$F": "$700", "$toString": "$$$0U" }, "_V$1$Q_k": { "$y$_EVHC$": "$_$_8", "$": "$__c", "_pr": "Zl7cX" } } }, "gc": { "YDB_qb_8$": { "w_": { "$arguments": "n", "_": "w_C$", "g": "_7lT_" }, "B": { "Y0Re_TG$_": "_2toS", "A$6_EZV_": "$J9o", "$3_$Tw_M$aT": "XA$X" }, "gtoString": { "KL6L": "_$_3c$_", "$w_$$r38Wmf": "ocC3_1i", "Zt": "_d$A_x_gr$" } }, "HG_": { "z_C_f": { "$_J1$_w___": "_L", "BB___$Z": "d", "yFWB56$": "G" }, "v$$_": { "$arguments": "$RW", "_ET_$$D": "__ov", "$$": "$" }, "C": { "$": "B$w_", "JC": "f", "_cqZ": "$$_IAy_9d4" } }, "$A$$lLC2W": { "$": { "$Bp": "lE$B__1$_D", "$d13_j$": "$78Q", "$Eru": "_" }, "C_": { "Y$8$6$$aS$0": "d$8_$4l$_", "c$_": "Act$tx$", "$R_L$$bm4L": "gQ2$$P__$_4" }, "_$a__$p__$A": { "_": "$__$_3__7", "__$l$$M": "LQp2$udX9J", "_b_vND_A_$": "$" } } }, "B$_rN_": { "$h_": { "C_t_$Y6OKa": { "Ccaller": "X$$_$K9P__", "E$b": "_pO0$lDOh$_", "Ik": "aC3" }, "Ag4$R": { "_k": "__$$nnGd$", "btvM": "x2a$$_3", "Z": "F8_s" }, "d4$5B$": { "_7": "en", "$UB": "zD_", "KJ1_4F$$4": "$O" } }, "C2$$_$OZ": { "t$$r1$8": { "tk$$_": "WCu", "$$kZ": "$$G_n_1", "$len": "D" }, "_GQO$": { "$__": "S7x4", "_E$eoc$": "MD_e", "p": "DW4_jd1h83_" }, "$_f": { "oa5_": "$$Rd_Y", "Vc": "c$Dy4$z_aY", "$gume": "wy_R$$__$" } }, "bj7_g53D3$L": { "$$Fga1iw": { "$Cu": "e$Gt", "$_": "bHbH_$$", "$y_5x2_1_V9": "aee" }, "_$nJ_YizN": { "EIJ7s": "A3_", "D$$$": "as8Y0Atb$U$", "etoString": "Dcca" }, "cJv4dO3$_": { "v$u_g3": "jnC$", "_z5": "_FB5", "Mfoo_$F0eP": "$$" } } } } } }, "_4qq_7$": { "W_5v": { "$_": { "W3Nc$0_J$a": { "$$$_zz_n7": { "dK0pQw7_3$$": { "N": "$__F0", "__WZ": "$74", "_Z___b$": "Db$$" }, "$_A_": { "$1_22_7": "cref", "b_J6$7fWr": "$$$", "$": "$h_$jI$___" }, "$b": { "L7$2_C$$": "R_u0", "_pro": "Ealuc1Dw9", "e7BS": "Pprototype" } }, "$bid_": { "_A_1yC66_A": { "CZ": "_", "a$__9n": "J$S$566O", "_$$$": "$__7Z$_y_" }, "E$1$E": { "C4__VUJ$": "a$N_f__", "$$ck": "$_I_5$5", "$iZ5_O__c9": "$8$0" }, "$_67589Z_c1": { "U9_": "$$$", "_RH8i6$J2_$": "_$", "R": "B" } }, "W": { "$$": { "_aRk": "cr", "_FIh$Z2": "aq$Uo__$_", "$": "$$U94b$se" }, "W_2": { "__Cx": "_name", "_ref3JtoL": "cDd$_e", "__A_": "B$_R$" }, "_$dd": { "$": "$___103", "V": "$", "_d$$4_$I": "S453vv8$B_" } } }, "_$y9e$rE$": { "$hLXb$7$9i$": { "U_pE2xX$_f8": { "bl": "h_F95$_$OY_", "_G$": "Q__", "Dcproto": "Z4Y_9M$$R0" }, "ce": { "a__": "_8__$8c", "_key": "C$$_$$$_ciP", "x1__def": "D3" }, "b$": { "V9": "d", "T2Ny_b2$": "e_", "c_4$x4aP14": "bqG_b__24Y$" } }, "d__0": { "R$K": { "__VI$7_Vt": "el$$$", "N$$$$lB$Q": "$$tg$H__", "v2": "_$TK_OjK9$" }, "d_o2$7$_": { "$$z6_NX": "E$", "B_$5$zQ": "$U1b$I5E$", "$A$G_": "R8" }, "Nid$1J_": { "_hBC": "r$_3____1", "$": "Ct_", "b$___a_": "__$V$_" } }, "E$$lRe_L_2": { "_XZ_z": { "$1Oz_": "$r_$_PMD$", "_6m$1_t": "t_$x_p_", "X": "_$leprop" }, "JTYv1$": { "$1_Q$$$6": "FHq93", "_1ZA_5d8_": "_8$d", "a24qxub_cIu": "$eA" }, "_toString": { "DY$__o_s$": "$0_", "_5_2_Bw_": "z", "$3hasOwn": "pM6$0_E$6" } } }, "E2d$Tzj": { "$8c": { "$_Zd": { "zle": "c", "___l": "w", "YJ": "_$W" }, "_P": { "A": "A9p", "$5$_": "dkXA2$3fk_", "$_356l4$r_1": "D" }, "Ex1w": { "VU_$8Eh_m": "$K_", "_uQ$06T93f2": "_t___b", "$": "j" } }, "w1$M": { "$leS": { "_": "$29T$Vb$8$d", "_fA__": "H_", "$u_m$B$4$": "ER" }, "z_M$_z$B$$a": { "L__": "a", "_n$": "$", "___5$": "os_$En$r" }, "z": { "$": "H2x60_H_Z", "ELr_$m3fxs": "$g_", "__F$": "Dh_q_$_VEfY" } }, "Xn$": { "re": { "C": "DF8", "a": "$v__", "E$": "B_d" }, "Urabl": { "_0JM7": "A$_5", "Bbqx_": "$$__", "VvalueOf": "Q_" }, "sRo0engthpe": { "VnamehasOwn": "AQo", "BW7": "ssK", "_9y_W$3ra": "f_" } } } }, "___": { "_am": { "_refva": { "$e": { "e11_$oBWj": "oref", "$_$D": "tt", "$B$": "_w$K" }, "_n5": { "Ox$Fy": "d_Yb__f", "$__ds": "R$ub$_H0_Qt", "E9$9_": "e_" }, "_$_n": { "_": "$$6$p4$E$", "_$": "$$8", "d$$": "ek$a6C0X__W" } }, "_8$_zj03": { "$b": { "_$LrNQb": "$key", "__$4ga0": "Er$8$", "$$_x___$_$": "A$s" }, "x_0$X$X": { "_w": "KD$", "Alength": "aname", "_9$$7_Z": "Nprototype" }, "Ap": { "J0_3m_$": "_12_$_M_4", "_$$$": "$$m_aZ", "_key": "f1" } }, "_E$eO2": { "_c$2": { "xTj_6$Q0$E": "u_v$__h_3_$", "$re": "$$$6r", "eo$Cc": "Xref" }, "WC_$0s4": { "NE": "L7_y_J", "_E__": "SC33", "v8": "$HU_" }, "___rX_": { "_": "B_kp", "ipf": "a__$toLoc", "CYz5": "$q__n$$t7$3" } } }, "$x$$$$JNO": { "eB": { "a8z$": { "_F_$_AZZ": "$wH2_$$3$_", "_c_2": "b$", "E_$I": "$u" }, "Xref": { "$M$6_$": "_ref", "T1_$z_1$xG": "x_G", "JalueOoto": "bD$" }, "$8RJv$a1V__": { "_$3_": "e1", "$": "l_1$weE", "H1": "Dj0" } }, "$Y_UDd4x_": { "_isP": { "AV36": "$40", "$g": "P$3vD_", "eW_": "_3$p$S4" }, "$": { "D_$$": "$apply", "__": "Dt8$la$F", "_2l_38$_G": "$I_Q0$" }, "_": { "$call": "_O$_GU$", "d_": "_$vZ_", "zT": "f__proto__" } }, "b_57c_o": { "$": { "Y41f$A9R": "$", "pCto": "T_$$Za_1_", "W": "$_$O05S$$" }, "a2": { "$": "_lle", "x$b$UW$": "E$_f", "m__p__lo": "$_s$RR" }, "_7$$": { "VeB_": "mi", "__Y_18": "$pci47_", "XM$y__St_7": "_F" } } }, "W__Ct_345_": { "y": { "$ref": { "A9k$I$_": "_key", "s": "cZ02v", "$_n_3$lAfR": "IM$1$$" }, "D_8ZPbXBQ": { "X$_3_$xu0_T": "Wp", "$$re": "u", "$xmt4a$6$5$": "V___lookupG" }, "M20": { "GvalueOf": "$$M2", "$$S$$xe": "C", "d$": "_1_fw1k" } }, "__": { "He7$ECX_": { "V": "m$_$_X2C", "$X": "be", "a2_": "$Y" }, "V_GU14e": { "$j4q$__$": "yH9", "$_zD_D": "$e_z", "d0$6dzPs": "_Ar9" }, "$bV4_3k$w5": { "$h": "__", "fu3": "yaF$$tjLZ$H", "f2cD_k_3n": "J_d" } }, "_3_Ae$_": { "$$_$ojx91C": { "p$_$v$_$_m": "$5$S733", "_jO": "d", "b$": "c_$$$L" }, "tO": { "i": "_$$c__E$BZ", "$_": "Y$G$_$1SE", "q": "$_A5" }, "F__d": { "qZ$$_L_$": "$D_z$", "$$__": "d_83_3nf", "a4_$N_yJ": "x" } } } }, "__": { "_$R$_6": { "A$$$8": { "_J": { "Y__defineG": "Y9_callnam", "$__$qd_6J4M": "_am", "_$": "ul$3" }, "WJ$_A6107YA": { "$$_M_6Xe_": "Ckey", "$9_8E": "V", "$__V_$": "tBkc$4b3e" }, "_D": { "Vn": "avalueOf", "R_D_HL$": "_length", "$_e$$eb9696": "_$$Z" } }, "oSp$DT": { "$_D$_WRX": { "ZDX2$$0_C__": "W___0", "w_IJd_Vy": "ykey", "z_2": "gs" }, "KhP__": { "j6l__": "t2E3", "$": "V0d4", "_$58$yf_6": "CS_" }, "B$__G": { "d2__l": "a_wJ", "Cbna": "$eN", "uJ$Vb": "$_" } }, "ug": { "l$6$": { "T_Mm": "d0$", "Y": "_$", "_y": "_r_" }, "__2$8_$": { "_6_2Z4": "a$", "$apply": "$zu", "y5v$Iuy": "$_iSaY$_" }, "rE": { "c_4im3e$": "E__7___v4d", "$lr_$k_4_": "_0IDm0W", "$ZLh": "Su" } } }, "$W$47l5": { "$va__C38ghA": { "x_2$6$h": { "drefpro": "_$$f53_4v_x", "R$Ry_$": "x6$P", "b__8$p2": "__dw$z9_" }, "D1": { "z": "y_eX8W$6X", "_16a18_AwZ": "$$C", "Dett": "Cp" }, "$0gc": { "_L_d_p$": "_7r", "_": "e___1", "b$__": "x$" } }, "_": { "E": { "_5": "Bva", "_dD": "$_c_", "bref0xD__de": "zt2M_GpP" }, "$Gm__": { "v": "COJd__M$", "$W$": "OtK$Q", "d$$t$8": "_x40p_p_$" }, "y": { "Y": "$qd$$_NCy$$", "_Y_": "Rq", "V_$w": "c6_$YX" } }, "e_c": { "y": { "x$n": "_$a3_", "s1$_y": "C_", "__kV$": "_L$FWqK$$" }, "f1UI_U_$k_": { "$54r8$$": "R$", "N0xzw$": "E_QB$Yo", "Ac": "p4_V" }, "_$$nJC_2": { "m6hasOwn": "f_$73_$f$_", "$__$$H": "l$Wv", "vP": "dg_$$0_$w7_" } } }, "Lre": { "b49z_$_": { "_0h7P": { "aa": "XE1", "$$43$": "pref", "_$I": "$call" }, "E": { "d$8$I": "$$$$$2o_$E", "_x$$__8$$$m": "W$$$_Eg", "bFd9": "$apply" }, "C": { "cGLzAgsO": "B2Fk$z_qm", "_GA8_U$SV$G": "_ur", "bjq": "B6$_53z" } }, "k$8Abkeyh5n": { "J": { "Bh3_$_6": "$to", "_7$$$DA$2": "Y_", "$l": "_toString" }, "_Ya": { "V__proto__": "VAconstru", "N": "$23yae", "YFTh$9B9C": "A" }, "$ref": { "x$": "$", "$t$ii": "$_", "_$x": "$O$9_3k$5" } }, "v": { "ye$_A$$_": { "$6__": "x$g", "bvv_": "Z$ht$_Nr", "A": "$$_" }, "$C3$eM__$ra": { "$": "aarguments", "V$$Pd__$c": "$$", "B$_": "l__$" }, "d_o__L": { "b": "$k$incaleSr", "aE": "d$C", "_": "Dprot" } } } } }, "$": { "R": { "d0": { "_20F1_V$l_": { "i8_b": { "y4A$j78r": "___hsO7bX", "_G_toL": "__leis", "_ref": "_3$Gi_" }, "C": { "my_4F8$L$1$": "z_01$$o", "_9FB$hl$u": "z_$", "Am__0$7u_": "$a" }, "$$": { "$": "$dc", "___": "w_Nn$$wN", "Eto": "$I$$__ihJ$Z" } }, "$J$$": { "_4Jz": { "zvalueOf": "U", "$$K1$": "x", "_": "_3" }, "_0": { "l__S3_eS": "Qc", "C": "iqv", "X4_": "A" }, "O__aQ_M$": { "y$": "$", "B_$_lCy": "$v$", "_key": "KE$6" } }, "B72d5lI__": { "$_": { "OM$b9_A$64": "$p$$E_$", "DPSF3N": "tG", "clength": "f20_v_A" }, "$$jbW": { "BXh$_": "af_", "maa3_d7": "BfS", "$_": "n04" }, "$v": { "x_$RUo_iT8_": "Z", "j": "$_", "Z$48$_8PG0$": "rj" } } }, "_pr": { "_e_re": { "$7b$0$": { "$": "yB__", "$$x_": "C1_$$2_r3", "UxEaZY$": "$___F" }, "_b$": { "fb_MTP": "V_", "x_$6_$__$rk": "_16_4Aeaw", "X": "b$" }, "CI": { "$5_O4__": "_$8$", "yal": "$9l2_ru__pK", "_l": "Eb" } }, "i": { "_": { "VF": "_1N66__", "_8va": "p$", "_$U9R$p$A$_": "zbe4_lz8" }, "_Rd_$Db": { "pce$": "B$_E3", "W_x$9v$_$_": "$4c_", "_SQ4$Gd": "_c_$USN50" }, "$Wc6$$_$$7$": { "_$_": "gw_y", "$eVc": "_o", "_": "$" } }, "q$": { "iC$B9C$1B$": { "w": "_a_bZ_$", "W": "b3d", "d$2$": "$$" }, "_": { "Z0$J": "WRInZ4NtS3$", "$__": "E_", "$8": "L" }, "gHcc": { "F_1s_y4$": "D$D", "w$__6K": "C4K$$V$s", "$2__g0_$5s": "zn" } } }, "$_": { "$8Z__": { "v$55$PD$_": { "_toString": "W6", "a9y$K": "$f$lapply_", "M2callerha": "C__loo" }, "d6_1": { "N$U_G_": "ax__t", "$LE_3Y$": "CQ", "V_w$": "V$r$" }, "$": { "b__l": "_bD$8$_$_$", "y_": "$_", "VX_dEwYde__": "s$7H_" } }, "r": { "B4C_A6_$$1": { "lr": "_3$C_", "o3__$5": "Cb", "b$$$XBX1$g": "Z_" }, "$$applyRDoL": { "_ELN$c__": "$_Xz_", "$c_49_W__": "$$v", "_o$$$t7": "$5$_$Rq$7a$" }, "z$_Ec__c$": { "M_": "_i_", "$uO41xy$N": "x", "e_": "a0B$np" } }, "T$____57_B": { "_": { "Xf": "$_J___64", "u$_wh6h$__": "d23", "bca": "$82612$8$0" }, "D__": { "_": "$$$VK538WS2", "__$Sc$_": "_5$", "_ppro": "C__def" }, "V88d$e_$": { "WDB4o_4$kR": "$_", "_c": "i$$S___o", "$": "Q" } } } }, "$7_c": { "mf_$bwN_k$": { "Df$5fF$mus": { "$toString": { "_GT": "Bz", "ybX": "Ad0$_70", "_043Wb_$e": "$_M" }, "ta$6Y": { "w_3$$UR50L": "z", "e": "Ap$$d$", "Z_": "B" }, "_namX9stru": { "XC4": "b$_U", "$7ne": "_91__$S_", "DlZh5_2P$$2": "ya$" } }, "_$$JP": { "Bb0_C": { "b_$": "_ref", "K": "Eb$5k$_", "$E_C": "U1_" }, "_2v$": { "$_J": "yle", "k$gW40_m_": "nef_ind$c", "$W": "s" }, "_M$iY$Kvc__": { "cE7": "vlength", "F": "_", "_3ne$__R": "w" } }, "D76RITs_": { "cC_D": { "pva": "E", "$$p0t$_H": "$__$", "qYsEnumerab": "aD_" }, "e$1": { "ed$$Q$_k": "$$$Ef", "$knd1n$2": "_KO", "O9K1$_j": "E$_$$_" }, "n": { "A": "D$o3", "w": "pG$82x8k_", "__3B": "__$dCXZ" } } }, "___d": { "$MC$_9$$7": { "do$E": { "$4pq__p5": "_$", "_26": "Ch$ZYeyo", "$1_": "$_c" }, "K__K7q5_": { "$_$$RP_": "$AMD_3_5", "e_": "_$$GJB$$MF", "O$_$H": "$$_$" }, "CE": { "Dmb$_4_": "$9BD", "$j": "$Z5", "Q$": "fr$_" } }, "b$Jqb___Q": { "js_": { "_": "_Q", "b1$0B": "__B", "$a$2": "_x_Ah3_5_" }, "A_": { "ikebumerab": "__$$11", "B$$9V$$___": "mwA5", "$": "$ref" }, "_al": { "c7Wx9$e_P": "_$7KK5Bt", "$": "Oc$$", "_": "aKu_9" } }, "$": { "$": { "Z$$t": "$$QeH__", "A": "b4Lu1", "BD9_9$___78": "d$___defi" }, "_j37mV": { "_": "$_$hM_0rC", "Id": "Zi", "EE3": "SdZc$B_5x" }, "R1$bhinnac": { "$$": "$", "$$60": "_0", "d__$N$h__FH": "$499" } } }, "Eyv": { "_b": { "__4$9$z$_": { "_$": "G_", "_H$$BfL_": "L63", "Le": "W_$" }, "W93877j$3": { "_a$$$$_": "_", "_K_": "$toString", "_f_YxA_Ej$": "drS0_1G_2I" }, "$_90z$": { "_lhA": "A", "$p": "$V", "yE": "_valueOf" } }, "tkey": { "$ref": { "Ao_": "$", "$o$": "R71S2", "_6$": "_Sn" }, "x12I$l": { "$iE_ILb$H": "$ref", "_v": "$_4A_", "$ref": "_9" }, "$__$_MW_$ph": { "AwM$$$2_b": "v5", "zconstruct": "W7M__", "$$ZA": "d_3fv__" } }, "$": { "b$GDt_$m_$": { "$$_OW$5dC_": "$$ICEnum", "e7$__": "e_", "$$2$": "W7_" }, "$arguments": { "_e": "d94_$$$4$_", "a$_x": "eD", "y": "$_G$" }, "$key": { "__": "eb$p$$", "Targuments": "_$", "N": "YyKc$" } } } }, "_MS_6$$_": { "FV": { "B_I$": { "$$": { "E6n$6$F$9": "VE_$0", "_": "$T", "ykey": "$$s$_$f" }, "u": { "i1x": "v4", "frp2WcRz$1": "z_$2$", "$D_$E": "D" }, "__0$Ivt": { "M1_": "zux9d9_W$__", "_r$J_": "_01j$_", "aJ8_$l": "a1nc" } }, "ye_": { "$h_$48$": { "Lname_": "$keyF", "v7i3$r_2": "___p", "Jy$bWf": "$d0SD" }, "$a": { "s$1": "$$", "V": "V_7__", "$7$o": "J6_5aM_1Y1$" }, "VH_": { "H7Z2_U$$_D": "uM1s6l8_NX", "$__D": "_aI8$7N9$_", "X": "t7$_" } }, "Au_": { "$_$x": { "b_": "B", "$valueOf": "$8R8", "e_NhVK": "b7$_v" }, "P$": { "__z$_$_$hd$": "$u", "$idSx_$0___": "C$", "A8_refi_7_": "cYB_a7$Y_$" }, "A2_": { "$CU": "$9ao", "wapply": "DI13_Pr", "__T": "$__define" } } }, "__L": { "x_w$_2_Ys_": { "$": { "Go": "$", "G2_": "x_", "s_": "r" }, "E63$$": { "Iz_1$": "$5$6$_8$$$", "cc_": "$5$j$$", "__": "___proto" }, "Dv_": { "Ybin": "B", "$Ct": "g_V$Y1eyBa8", "a_$$w07_ai": "M" } }, "A$": { "E$y__": { "e$": "$$_4$m", "____$$_R__": "_g_3$$$__", "_8e_": "dR__$_" }, "Y8": { "$8": "Ch41l_$$$", "M7$m$W1$3": "__$K_$QH9$$", "__W5__": "D2sk_4" }, "_0_$b$eY_4X": { "V$_": "$9", "a3$_": "_$bA2C$$$__", "v$$s_$q": "$4" } }, "vd_1rcUR": { "___e_$_a$": { "i_$9MPK$4": "_H", "UlE1OI07oh$": "pe6R$$$z$", "$3$7$R_D$": "$G$" }, "y": { "$$$0N$$1": "$$$", "s_re": "__jf6hX9__I", "_vk2_xc": "$b__look" }, "c_25Qa$4$1": { "$op": "_", "d6e$AD5": "DuH$3r", "df$_u": "Lz_z$" } } }, "$rot": { "b$t_y_B_": { "e_V_mqE": { "_toString": "Sv9", "__W63_d9_Qw": "EXck", "$$_7": "_AO$5$l__p" }, "E_X": { "$_3_": "Jva", "_$_f": "_mn_$$", "$U0": "$v_9A$dy" }, "$": { "WDc$4cy$_3X": "dkey", "_$D_8": "_0t$36shge1", "$$": "kN$" } }, "$_e$lOQIE__": { "$BC_t$Y21$_": { "_c": "_ref", "$__l": "pA_$f", "$$_w": "__$__" }, "_lengtha": { "$": "_$24m$", "jkey": "_P1W", "xapply": "$$5$$_$TJ_" }, "_C3T": { "_length": "V_$l$_$8", "$_v_$_b$": "$k", "Y": "$_" } }, "__": { "$p$s0": { "i$ygD5_$P_": "C_", "$ref": "v1appefinuc", "__D3_1$73$": "$4p$" }, "KqN9_$": { "_h$Z4Ni$$_": "_B4IO", "wn": "_FfG_$_u", "_d": "z" }, "$$_$a$1s6u": { "$$_": "b$_9$C0_x__", "_Lx31m_": "Ddw7jX", "eref": "$" } } } } }, "_M": { "_ke": { "Xkey": { "Ey": { "H$": { "_3__nyd9n5f": "v", "DkWD$$Q_X$6": "_R5mS8", "b": "_B$$7V" }, "_": { "__6_$": "__7$R3_O", "y_$": "Y78$", "F$_$_V6y_": "lWV" }, "d$_$": { "f9_a_Sa$_": "_", "W__": "$$7_El$_r_y", "_t": "vp" } }, "ajh9": { "eW": { "Ay": "_$At_", "y$5ll2_8d": "$$_", "_": "BBQ4T" }, "w8R$7mNraAl": { "x": "c0__", "S0": "bcal", "AL$XgAh$l$b": "Dy" }, "M4E_7l2w__$": { "$bL__OGU": "szm$_$AA$", "$_et": "C9c_", "E1": "ECv2b2$_$" } }, "_h6Z": { "KtoString": { "E_": "$$8", "$u1$$$U7Ps": "EvalueOf", "$3": "Ea_$$9o$" }, "J_$87q9": { "_call": "w$$0HFFR", "s": "$$", "akNN$_$r$": "d_wW" }, "$$$": { "V$8$Fm$0boC": "$919P$_$_", "$AA": "v", "RPGR$zSj__": "_" } } }, "$l$EB_d$$87": { "$": { "$r7$_3HW_": { "d_": "R__WA", "$ko$OB_": "$caconstruc", "z$H$5": "Vp8a_W9I$" }, "G$": { "_": "v2$O$X__", "d$65$G$$N": "__V41_R", "xcaller": "Dna" }, "UP$$W": { "$ref": "$", "AH": "$1", "$7": "$ind" } }, "$kbJ": { "$": { "_$6z": "$$$X$$j", "$_M2$3": "$", "_$o": "_HC_467" }, "_$_0n": { "L_4": "_m5$SV$$", "n_": "_$N4b__$B$$", "$$Ber": "$_$fCk" }, "_l$6_W_d": { "V7u__9H": "P", "$la_": "$$O$", "m": "$__$R" } }, "B9$5$u_S": { "A4A__982p2_": { "$___0_2": "$_0$t", "W9____": "_8_9_ZGv__", "bK__x___v2": "X_$" }, "H": { "$$B": "_", "$": "A648E", "$_$2Yes": "$6" }, "$_XzX": { "$": "zca", "d0Y0B$D": "$", "t$2$2__$_6A": "h$lj$V___2_" } } }, "_ref": { "$$": { "XG2$9__1": { "__$_2$": "_9$bBdkey", "y0_": "e7_A", "b$$_": "$$p" }, "D$": { "_prototy": "_$_$", "$dvVsF___$": "V28", "kI__": "$$" }, "$_": { "iP": "bp", "h$_K": "C_toLoca", "_toString": "__IXIc" } }, "d": { "v2_": { "$a": "_67_", "__D_": "_3j", "xa5K": "_name" }, "$jc_$84$": { "W8Wg$_m": "$2", "A75_$lm": "E9QK7$", "$_2": "$__QkY__0$" }, "_A$__e3$": { "Z$$1_$_": "c_", "$_": "qB", "YCjy": "d" } }, "_toString": { "$_$$": { "$": "__$1L_K_", "zE_1$$d": "M", "vVn": "X$" }, "L3": { "_AsZC$6$": "w4pw$$$6", "$$$$u_IA_1": "__w$", "_": "_$$" }, "A_6_5": { "aaM_9ZH": "P6_", "_L": "AK$5p1_$_4", "$B___44T5": "zapply" } } } }, "B0$n__": { "$": { "g": { "s__": { "$yV_S": "$NN5k_", "H": "$M7", "B0_$B_yd_51": "_$_t$ZN_" }, "WX87": { "_8050I$": "$W$5l", "_$B$XR$": "_C$3$p", "VUd": "$srgumen$" }, "$toString": { "$key_Cref_": "oya", "uJ": "ED_Q3_1$_", "$arguments": "_pr" } }, "u7": { "n1$__M1": { "_w": "b$", "fCTt": "$", "_7v": "_O7_G$m$$" }, "d_6": { "$8_$$_b_": "c$$", "y__$$_$ho": "c__gVt5", "$": "atoString" }, "$ref": { "l$3I": "_", "$VN$___8X_": "$_", "dRmp9i$l$": "$N8U" } }, "b": { "_": { "Zf$$0ref_": "E3Bb$C__0C", "a_e$t$_": "F8x", "_6_A_3$_": "k31p$6" }, "f6p": { "$c_0clvalu": "a4_0$$u", "$arg": "Hy_1DS", "_$$_C$_7": "as$_G$" }, "$$Of_$_": { "_z_$": "e8$", "B": "$a3O_V3", "r_m": "idS$" } } }, "n$x82665": { "E7": { "_AA5_": { "Bc$uq_53": "Z_V", "_apply": "_Y", "$82$Nn$_": "_$X__lL" }, "V2": { "z_c": "c2lo$A__$M", "c_$": "jcal", "CD$0R$$_K": "$$" }, "_calq___": { "Z_8_$_e$_2": "_6_P", "o__d": "UI_$E__w_", "P_": "$_ERpAZ_3" } }, "_": { "_Fc": { "$valueOf": "_cy_", "p$Nz7": "_6$3", "j": "$$mdF$E__$" }, "ykey": { "Xna": "D_$$", "vb_5K": "b_FK_$o$7", "$tr": "$_Pp_" }, "_xL": { "$Lat": "_ab", "_": "t", "__6": "_S1ne" } }, "V_f7_J6O5_6": { "d_iZ_": { "_C$p0v_cb": "__2w", "$$_s$_": "lref", "K84b": "bo7" }, "$$$": { "okey": "c_", "l$QQ$3D": "w_QV$_0", "o0": "bI" }, "d_Z35$_": { "$z": "f__$_$V", "W_SF2$": "V03fG_", "__": "$$" } } }, "e": { "AR$X": { "RSY$yj6g8s": { "Hx_": "_X_", "_5M9W$mz$k": "i5e_e4", "$3$d": "al5_w_" }, "D3w$": { "Py": "_", "_$_": "CC_e_qn$$$5", "$lN_Z$": "l$_7$R" }, "w9W_B51": { "$": "u6", "$4ab$N$e": "b", "wt_f4Y_V": "_xBB_n_$YBX" } }, "XX_$__e$1_$": { "bD": { "A": "E", "nu_Vx$": "DOh_$$_", "_Ns06v$1": "$tsull0a" }, "$": { "$$_1$z1_1": "Dha", "w_yQ_$X_": "_", "o": "_" }, "xIoC6_ZB": { "cC": "_gP7d$QD0$$", "__$b$c": "_8_", "VZ": "Y2_7d" } }, "dcm": { "_": { "__Hv$": "HT$04C$", "M_X2$$u$$s4": "$1NV", "$": "O" }, "_yiO_u_$": { "eoy$_$$GeOi": "$__T4", "_$$$4B0f": "__2", "$2$": "E4_$6" }, "VpGe_ototy": { "Xd$__u_": "duI", "Wnam": "sref", "_": "CW6" } } } }, "_0$$R0P6$7_": { "yL$Yh1n535_": { "_$r": { "c$$": { "$": "dRo__vd634", "vpO": "Ds", "__": "$f" }, "O": { "_C": "_", "V_7_": "_bindbi", "y": "_" }, "AnZgs": { "J_$T32__8k$": "$7$x_6$l$$", "bwB": "__M", "$$4$_$t324": "ay" } }, "_d$v": { "w0": { "_va": "Cy", "Ei": "b8$", "$P": "$1" }, "GB": { "_val": "Y8_z", "$_": "$2toLoc", "l__d": "k$$" }, "gbCu$_": { "wpplap00": "$_$5", "__Z$": "$", "_d$": "$" } }, "o": { "G_x": { "e": "V1WYw6Z_8$", "A$$r2_": "V$$6GZ1$", "_49": "$Og$6_z_Aq" }, "_e_3$_3_$": { "_5refonstr": "v2w8p", "$_x$Au7_": "c", "B$___J5_Jn": "_QV7$I0_0oE" }, "$$": { "V$V": "_callsPrrgu", "b_P$": "VJ$01S$_l", "Z8C$7": "$" } } }, "___": { "g": { "_": { "i$Vpropert": "$6__9Y", "__": "e$_k_i6", "d_wu": "B_0" }, "___$$8": { "_key": "n_$$W8", "_62x": "$x3J7", "R$_z": "$$5$$qF" }, "j$$3y_$$": { "__hD": "$g5$__$", "__V_$2A$": "_", "_c": "$_U__cW$_$1" } }, "hZ$": { "vaA": { "$$1B$ee_": "$xGY37$_$WW", "Aons": "m0O", "_ref": "$ref" }, "L$me__F__lo": { "$to": "Y_", "W__4w4GH_5B": "$y", "_$Bs": "A$b$_R$" }, "_d7z__g$2M": { "_9BBRoF": "$$SV$ACeHW$", "_$__ho_p": "B$Ye23C88$", "$g9G5$p": "_uPN$" } }, "$P": { "_Oz_5n67": { "$": "_xj", "_w_xBb": "__x$$", "G$8a": "vQQn4$_" }, "$43t$b": { "$$DPy_96YKu": "wu", "$uy4DA4$qR": "_cal", "tnamal": "b$7b$g" }, "_": { "$C$": "_$zTCr_", "$z": "_X__", "Wx7W8$w9_$6": "$$9" } } }, "_arguments": { "S_sp$V_M3lC": { "$$$$_$9_32_": { "$e0": "$I__j_Fq$7", "Q": "$7$av", "$$": "XBm" }, "A": { "EW": "_M_VPaC067", "_X$__": "Vcall", "_u_$V": "Av$$$7" }, "$$i$$": { "fcaller": "$4valu", "_d": "$", "e6x8a": "e" } }, "jB": { "$length": { "Bf": "_p", "lKpYp$$0$": "n483", "$otE": "X0_TB__$" }, "__NZ": { "d$$1": "$p", "_0_": "_H_", "D$": "B61$$9m" }, "L": { "C": "$s_3", "Ran$6_A$_M": "Bn", "x1Ch$vOY": "$0MT" } }, "Co3$NusE": { "E_kup": { "$": "$Y", "_yA": "$key", "fm": "Zp__$Eqk0" }, "d_$6_$i": { "_0LZ_$8": "_Y__", "v0": "$u", "BMW$_g_$5$q": "bE" }, "_$$0b7b": { "$_Iyq": "$wB4_5h$", "vu_": "_$____", "D__$_78_a": "K161_q" } } } } } }, "$f7vz_": { "E_6__6_M0": { "F0l$$byxDv_": { "$2O_VY": { "___1_": { "O_": { "_0w": "$", "_$_": "_$$$", "_di": "_5wt5_tB__" }, "$lengthamna": { "Q$k0$": "U$__$j_", "$": "C6", "_$$": "ZY$$_e" }, "$J$2h": { "P$xy": "Sref", "Dk": "$pK_G", "_2$": "yv" } }, "AavA80": { "nref": { "Av_Locale": "_8$EV_$o", "Cca": "_name", "$$h_A$a": "l$C" }, "$": { "$6$9$$$": "wy", "z$$w0$3fW": "x", "zna": "e2" }, "dc": { "D_Yr": "K$Bme", "$j$_z": "Dh$_9W$C_4", "_": "e4$" } }, "wtoString": { "$up": { "_$_Ph6_pMP": "_", "$_6w_$c8": "$uS_$_U5$", "_z$X": "$length" }, "$a$_YU$$p": { "z9$zb": "_", "jk": "$M$W", "D2": "Y_51$84$__g" }, "v_": { "Fw": "_$", "$": "xf_", "_call": "Oel" } } }, "ha4": { "Y_$": { "__0m$_l": { "__M_": "AdX6", "Sva": "vz", "w70__$O": "b_$6nF06G" }, "$_": { "_ref": "VU__DW8u", "$p$Yq0__$": "j_I_08", "chasOwnP$6": "_24_$H1_H_" }, "do__": { "BE$$E7_$": "$$$K7_i_C", "_": "bcE08t", "$L94y_R$I": "$a" } }, "_c_p": { "CC0x": { "$_a6": "_99L_", "DU": "a$ox_u$", "$_6$$$w1s_": "_$Ybirabr" }, "_": { "___": "BXe", "__l$r$fM$": "M1__proto__", "_92__d58_": "__2t4" }, "_$2$s": { "$$$3_A2__": "$_$$0H", "_$Bc__p": "lot", "elt261": "D4$1iT" } }, "$_h_": { "c2FTiE$": { "Dr92name0co": "a", "xo$": "_w2$$b2", "c__proto__": "P$11$M" }, "___": { "$$_nq": "$P$_", "$$Y": "$$e_", "$$_00wO": "L6q4c_1" }, "m": { "$$to": "y$4W$2Y", "$toString": "__R", "$e": "Oe6_b$" } } }, "$d$_3_": { "_key": { "_GU": { "$val": "Vb", "z3": "c__", "$$Lp__$T": "$F" }, "$0": { "$j$$_A3R$_": "$up", "zqU$a$O": "v_$P$_$97$", "_key": "$t" }, "h233Xbb": { "_8N5": "_$$_8$$QZ", "e": "b8_L63Xzr$4", "_0h$0_$9": "X" } }, "_p": { "A_5_$Ori": { "$ref": "z", "yk_0_$_i_$": "$$l1N_6_j$$", "$$k9ns_v$$$": "FC1__def" }, "e$": { "$32tX8fU$": "__K$$Q_$6", "_$X": "$valueOf", "$f1e": "_BC" }, "e5_Q": { "_v_9": "$0Gl0", "$7$_": "uCCQ", "Br$5": "dR1" } }, "$__proto__": { "_": { "$$_g": "$am", "_D$": "Y$", "D$9W_6_G1": "$j" }, "xPO0d$_ebGB": { "_ref": "$", "__B3$3_E": "B", "Bi": "$V$4" }, "e$_53p_": { "$RgFB$": "W", "w9q_8$$0$": "a$mK_9_9Zk_", "B_b_x_9L9_z": "E_Si0qs4_i" } } } }, "alength": { "lke": { "$ref": { "Yn7": { "$$c_Co_4x": "z$Qgmt_mk_", "$a_": "D$_", "Yf_$p": "D$e7_" }, "$sOgM53__": { "$_": "_55$_ZZ_$", "_u": "_V_6LJSU$", "$g5": "_$77_" }, "Eu6F___": { "_": "Dbind$apply", "ytoString": "_", "D_$t": "$$toStrin" } }, "$$1$": { "_Eb0Bx_3": { "zXg___9$": "Z$", "xname": "lkey", "lk$f_$T_RJ": "RO8q0_" }, "_MU8I$w__B": { "__": "$YD", "_$U21_n2_": "CT2_$$$u$Gy", "_r": "$is" }, "_5j$H_P_k": { "__R$N9": "$B_$7B", "$": "_$b", "dX": "_A$" } }, "Ll$7$0696E": { "ec$_M": { "_": "C", "A": "$_", "d2Vd": "eprototype" }, "$KR_Q$_": { "$L_1$u$h": "P_$3", "D__lo": "bk__proto_", "B$__F__$y4_": "o$8d$$P_" }, "K$2Iv$9": { "$Re$__$__L_": "aqd$weqn", "bo": "_3", "$u": "$S_544" } } }, "_BeV": { "oo_": { "c$_": { "$_": "ac", "_v8P52$": "io9$8rrM$", "E$_1xi": "$35oNCkrIhm" }, "D81$s_$$j8x": { "_C": "_all", "e01Vb$____": "_XG__", "$isProt": "Dcall_" }, "__$_tA_w": { "O_2BdU": "W$$_$", "b": "C6$p", "ar_v": "dno9" } }, "___": { "__q_Yr7YA_$": { "A3uX9Q_": "__$$A2Jf", "sh_$$$p$_o$": "F$$", "_22E_Vz": "$" }, "_P__lookup": { "th$v__looku": "dre", "$P6$5": "$9__$py_Z", "$ec_90i4h$c": "$ca" }, "_": { "a_G_$2": "YAE7__Fn_", "$A$": "D", "b3$$": "$p" } }, "CBU_": { "_7J": { "D": "$$_P", "_$_$K$": "$$_$__$_5O", "_toString": "aPcc5_A" }, "vueO1$7": { "q": "_W___L$", "e6W$_Ve_11e": "$y", "$caA": "_leng" }, "rba": { "$k": "D9$6", "$$__": "dtoString", "ato": "Zg_" } } }, "gcal": { "$": { "$__": { "_g": "Kx2c", "B$": "a2$F$6__$$_", "$arguments": "o_" }, "X5GGec$O14L": { "$__$bH3S4": "_MF", "tv$u": "E_txW_VW", "$jk": "a__pr" }, "E$_b_": { "$yG$___v5": "gwb_$$_", "g42": "$e0", "$8Vm5$_": "$v_" } }, "y$dMev1_": { "_F_$8M_$": { "E09$APSw$cW": "$$_$b_Ew$r7", "Z$90": "qref", "X": "otoL" }, "___eRv": { "_b": "Bref", "am$": "D$_gwW$$$", "$$y_": "_0" }, "_dr": { "$11": "__WSj1_Y", "$E$3r$$$": "$_GbP", "zs1": "$1Lo" } }, "x_9_yS$": { "B": { "_E$": "_lC", "_m": "B8", "_": "_$Z8_1" }, "_Q$_i$_n_m_": { "___$wZ_$6k": "w_y_40M7$3d", "T_Ms8k$LZ5_": "Aa", "j$i0q16DevW": "_$3o$" }, "k47_37pq$": { "$ref": "$$_8a", "$p": "r$cu", "_$TFmQ$$_T_": "$" } } } }, "_um": { "$_F2$0_": { "O": { "a": { "_$Mr3A": "e8G", "Z_sT": "$_z4", "Lx2_x$U__65": "ctoString" }, "_$Ae$H7$k": { "_1Lk4u6x_": "WB_$m", "$7": "_20l$e_l", "c_": "$c_a6y3R" }, "f": { "_eng_call__": "b_2j", "_$": "$5", "$$24_nh": "_iT_" } }, "Y": { "$b_": { "cvalueOf": "_$i$s_B_E$$", "gfva7": "_", "$": "$6h" }, "$i4gs_e71M$": { "__": "$", "W__a13BA_$$": "GN$0_YL5_$", "_ot": "__b" }, "$HxuG_$$": { "s_6_W1B": "_g", "O_": "CZ", "Op": "_" } }, "_t": { "VtoString": { "___": "$key", "yG4d_": "_d$$___E$", "W$v": "$6_$e_" }, "_7_": { "q": "nc", "z$$Kt$_NCl": "T$E_74T8", "k": "_toL" }, "c$$E$9_m": { "Z$": "D", "m_$II": "WH_", "dcb_$$": "_yp6" } } }, "_r": { "$": { "_bind_": { "$k": "_ca", "X8": "W", "$": "_GRf58" }, "__y74F_$$_": { "__": "_W2", "z": "y", "$E3Q_": "b$" }, "T": { "N1K": "oQ__$", "T_8sy_0": "z_p7_", "_$Eo_K$": "$_b$rY$_B" } }, "h": { "$e_7O_5_w": { "_": "$e", "M_": "B_o", "z": "KhX_Yb$32$W" }, "$": { "_DZ2": "io", "_U$$__": "$2oz_p3", "$RBg__": "bv1" }, "_$_LO3$2": { "_ook": "$_P_$", "_Q": "__", "$__lookup": "_" } }, "_it": { "$": { "$z": "a5$Uc_f", "v$48KC0aG": "S$o_g57Q23", "__": "__Q_$$w5$$M" }, "$$_$_5": { "D$v": "_c$BEe25$2", "b_C_B8$3": "$", "e": "Bi$15_v_v" }, "vpro": { "zca": "$", "z_N__$": "$", "_3$T$Hu$$": "$Ad" } } }, "_4$": { "FA": { "$wDE6Dy4": { "_$W": "c70T", "d0$_": "a$l4$$$_8", "_key": "$_v_ii__0" }, "b0$V$_hV": { "E7": "$9k7Y", "d$": "$9$$C3U99", "E$S90": "W_$2V2j" }, "VP": { "e": "_E_$2__5dA", "$dj$JJyak": "$__9", "_2$7": "$_XP" } }, "$2_A": { "E": { "GP$": "$mo$41_", "n$$w943nTX": "l", "fcallc": "B$P_Ei" }, "YengtheW__l": { "$$efiRa": "_$$L89_$c", "$": "x$$T$x$_3v", "_Cb_kE2$": "_1Z" }, "$_$2G__$": { "$Zl": "q", "Z": "_caller", "a": "R3vCBebZ$p7" } }, "P_$": { "wargubwnPr": { "_a$_7h": "N6", "_z_d_0_no": "$$s", "z_$E5": "_2A4812EF" }, "$$4$$$0": { "Dal": "_7DXi_25Te7", "_b_iy": "w8_F_", "KCqit4E__": "_$" }, "atoString": { "_9_": "_$", "E": "E", "_$__": "ap" } } } } }, "aOe": { "khcalltoMRt": { "_key": { "__": { "$8QmW": { "_e$": "bAY", "$$": "_K", "$__g_2": "e_j" }, "Va": { "$": "_K9zE", "j$$h82": "p$0", "$Ue0k$Q": "x4" }, "$0$_": { "C7ng_8": "e1P3$u_", "_": "I", "_6": "sEIbF$" } }, "_1EBow0SS": { "z93__n$$": { "i": "_", "$79859_3y": "b$na", "dz": "_0Srd" }, "_apply": { "LcxtLS1X$w": "D9P4PvQ$5_", "e$_": "T6ZW$$$__", "$$_v": "_$Z$T$" }, "__6t": { "$N": "_4_77", "$__proto__": "_9", "U$7_F3v9$$I": "__$$jUN" } }, "_$$osu_2$": { "$v$_j6gF_": { "e": "sI", "$u$qz8$": "_key", "Ey6$Ci0": "A" }, "__$gW": { "mn$_": "_$7_$72E6$", "_Y_": "c$Ubb$d9", "k8$j": "_7_6_" }, "DK7_1__": { "__": "$N_z__7uZ", "x__lookup": "r_$", "_length": "_" } } }, "THhe": { "E_kca": { "Ec": { "$con": "$7K", "$valueOf": "Yto", "$2C$__t": "__" }, "dRr$4St": { "Ef": "C", "C$k$$X": "zx_b", "D_Jn391_$nl": "BLdGY" }, "w2": { "_4UI1390$6": "P", "Z": "w", "_KY$GV5$5": "$0$$_" } }, "__": { "_K_$$_1__$": { "k_iS_4_G$": "_callerume0", "ES": "VW$uE5$7_qj", "fNF$_$r$_I_": "$$" }, "bUCW": { "$S$$N": "J3C$_$", "$$i6": "_s1", "__": "Apr" }, "_": { "K9$$": "d1$_N__F_", "_7_": "$$$$", "_Ad$$E$": "c_V__Ns" } }, "etoStringto": { "_caller": { "m75v$": "$$_2_Cl", "M2": "_", "$": "j_$jyAf" }, "$": { "_V_ed$35dn": "_F7_Y$HA$$", "_C2": "hRU1", "am__D_M3": "lXcF" }, "_$_0": { "kj36A_$6": "$e9__", "E_6": "$", "rPRwo9": "S6" } } }, "A": { "_Rl8k": { "$caller": { "$ealu$_n": "$a_", "_": "y$y", "_7": "$y8$_6$3$n" }, "cvalueOf": { "Zapply": "i__l", "f21$s1_E98": "dkey", "$$_": "_C" }, "xwk": { "$$xO$": "_ref", "_90_": "E", "r1_": "vs0" } }, "_Nb__define": { "$toString": { "$45": "_9j_", "FO$": "D_", "$$le$Z_$": "$Ty1d$HX__" }, "___proto__": { "D9Y": "B0$zr8y0$_", "vx1": "FDbB$_04d$_", "_X6w": "Z3L$" }, "Capply": { "$$Yw1ANg": "_D$j$D$S_R", "Zh": "E_i", "_9": "_" } }, "_apply": { "$3_k$Nd4$": { "Dln$_": "_", "_y": "t_$B_", "o": "$" }, "$valueOf": { "s$D": "AB", "$L5c_9$": "ZA", "kc$": "N_2$$$PQ$RI" }, "bnRd": { "v8": "$S_$e_A$_0", "hcaller": "_2JC$$", "z$8_E2j$": "KJ_u7T" } } } }, "$Bmbg": { "$Q_": { "U": { "na": { "_9E_1BW": "a", "_": "$wmI_", "$Aoper_t": "$$_" }, "KUyf_$_2_$": { "Vb7dG7": "A$$Ok_6$0nQ", "CbB$Z$": "xr", "z": "e_2tijg8" }, "__J$": { "E_": "_$c", "$": "$hf2__wd", "$5_5$$": "_A$o$5qsrB4" } }, "$E2YW$I_$": { "$$3C": { "E": "v$$", "Wkey": "an$A$__0Y$", "FS": "_$C$" }, "f$bw$_Ye_": { "D_C4c": "$$B$6_7", "$V232": "m", "$": "_" }, "Y$$ePC_h$dC": { "WO6i___$": "c$$", "_I$_$5G": "$$A$_e3h_B", "$yl_5gwo": "W" } }, "d1b": { "$qJ_b__g": { "O92$9$$": "__1AB", "d$_l_$jn": "_", "D": "o_7z$" }, "tN$D$": { "A0I": "_JK", "Bw": "_Ow8___75In", "exV$Y_hF$": "$_4$_g__j7L" }, "v": { "$F_$_$": "__", "_Ek": "cIe42a8$Fa", "z_t": "$9$_" } } }, "JtoString": { "c$": { "s7_9$$$$uhE": { "bCis": "Z_W40_y1", "_apply": "$toString", "_65Gz$waf": "c" }, "ZA$": { "r2": "$JxhbtU", "_A": "bM$$_$X1w", "_": "$$" }, "s2Gh_y_CS__": { "VE_$19_D44$": "a$lZ_1_6d", "AuS_6_R8$$": "znD$", "$n": "YBW1" } }, "_Q__A": { "b": { "V$5i_X": "z", "__": "zj", "I": "c6y9__YYs6" }, "$": { "$C_": "$le", "z": "c_zH0O_B", "_qD_8lw_": "W2_$36$" }, "_hc": { "_i": "yWU", "$k_lookupSo": "_", "Iu_xWKl$w": "_all__l" } }, "oav": { "$5_8": { "q_Rn__3c_V": "$3X$H$t_Ef", "R2": "$re", "_s_P$b": "$$X5J$$" }, "d$$____4$E_": { "$": "__", "__M4K$3X_": "_k", "D7i6AT0": "_C_" }, "$_e$X$__$h": { "c$": "$v_y$$e", "$g$_$R$Y_": "__9r$", "WHconstruc": "A_hC" } } }, "$$nd$0$a$$": { "V": { "C1c$o": { "pq": "_", "FEApro": "___lookupGe", "$Wl$$$": "$2_$l" }, "s5$x": { "$____$$_": "vv", "$6": "$9_", "_AC": "YyrefalueO" }, "__c2_WN08": { "$": "A__loo", "_xD000Vb$": "__6__4SaT", "$$b__yj2$v": "cap" } }, "$$$B": { "mp_p": { "$": "xSK39_T", "cD_": "$yIsEnuto", "_D4q9$E": "vpefJte" }, "$": { "_apply_": "$2", "b$0r_Gq_$": "_", "$_o_A__defi": "P_4" }, "_E2n": { "_": "__$4_$2D", "O$": "a52O_$7qkU", "B__": "W6$Vi$$1$X_" } }, "y": { "k": { "_arguments": "$", "$1___Nk7": "va", "i4oI$": "C9O_R3" }, "D_$_": { "A_r7_$": "O9f", "$_1hx$_6c": "$n7", "$_$87$23QN": "_$5C_" }, "_l8BqO_": { "$": "yMxOA", "b_Pq$4Bf_": "W$y$7m__p", "_b$n": "RAU_" } } } }, "A$": { "$beECf$c53": { "_": { "_": { "__": "V9ringEa$_r", "j$fGCd3_": "__y_$_9QVE1", "_y__": "_ref" }, "$$_Y": { "_": "f0e", "__$_7$_": "_0", "E$XW$$__$": "$dP_U" }, "cc0_D$$2DD$": { "t$__defin": "Y$$8", "N": "wUwy", "$3PQc8___e": "_cx_" } }, "$": { "$$$1": { "v8W6": "O2_BZT", "NtB": "n9_", "Z7A1$1": "U" }, "$$_": { "$6$U": "$j$$$1c$iq1", "ri": "$ouG", "_CN$jZ": "gref" }, "$v$__": { "_zcW": "_$D", "V3__swr": "T6$u2e33", "__v_": "wy$$_" } }, "B0M$V9": { "_93ik": { "_$X__6": "$$_", "Gk$YN5_6": "_k", "EI$_F_h8": "$$" }, "_": { "_r": "PvalueOf", "$l_": "b$__8__W7$", "__I__we_sD": "__" }, "Bv$_P___": { "$$tR": "HTo63", "_qB$26": "$__", "_8$hGT_A$E5": "Ekey" } } }, "$$_MA_$$0$": { "D___M": { "V": { "$8PY$8$$F": "zhh5G", "$_p8_ZS": "S_h", "$": "__" }, "y": { "$S_f$G$2r": "$_7_", "mkey": "$", "m$8o": "___v$_Y_" }, "X04$__M$": { "$": "_2GE$_$n$1", "_zy_3B05_": "$nvalu", "$ref": "$k" } }, "$$N_": { "A": { "Y_7": "_", "__i4_9H0": "__6k_G", "__6$m__4y$": "_9a" }, "dprototype": { "hkey": "$", "X69": "N0Fdk", "r87qp": "$" }, "$sL": { "$yke": "_a$kty", "fUc_CrfQx$": "W2Bcy_66m_", "xmWU$": "L_" } }, "I_5JYuV_$$2": { "$1$_": { "$8P$p___A$": "_Gw", "Di_$": "$", "$k": "$$" }, "$_1": { "$8X_": "vku", "d": "G", "C_ar": "M" }, "wO4xIE$": { "VEBn$_v": "f_$_9g", "xm": "V$c", "_": "$1jXA" } } }, "L$_": { "$key": { "D": { "C$k": "_x__", "c1_o4N$b$V_": "$j_$w$_y", "$M$G1f": "_t" }, "x_": { "__jH$$s": "_$", "$E$8W": "dI", "$toString": "d" }, "S_6$1_": { "Cr": "_$_D_2$ut$", "c": "d3qJ$$$z", "F": "_B7k" } }, "_iD": { "v$": { "_Y1_vE9R1": "$", "b_d": "$h", "_r_x030": "$52n$" }, "_6Xy04": { "aR": "Y10c", "xh": "vjO$Xl66z5", "dkey": "$caller" }, "_": { "_9X$z$$$y": "ncall", "C_$dyY_r": "$1$plyi", "dU$__$R_1mL": "__$20x1$" } }, "_n$_pppl": { "D$": { "_8$$": "_w_", "_Y": "_8mi71405H_", "$$k_s": "_" }, "cT_x": { "$": "$1", "Iref": "$", "xjC": "$7X" }, "_$z_06_FI_5": { "xrSay_$": "_t", "S$1R9$$Lrh": "D0$", "$1$_$_3__$5": "_" } } } } }, "j1": { "$7": { "$$352": { "G": { "_": { "KlhtoLoc": "BQ_$4$d$", "bB0n": "i2Pg", "$9$t_vz": "_zA_4$" }, "_$$Z": { "A$$": "_4_$N$", "Di02": "vba", "M77$": "_8w" }, "$_": { "Px": "bah$47aS", "C": "A_", "$_": "$" } }, "T$": { "_w$O25S": { "Q": "D__", "_lN": "n__proto__", "$": "$x0_$vE7Oo" }, "$name": { "e7$": "w_R$KNQ", "f$__": "Ep", "B9bi": "$A$" }, "_length": { "a4I8_s": "_y_6iYKf", "$toString": "$", "$__": "$$$c_$_" } }, "e": { "A5": { "ElQHO$T4O": "E_$k", "$": "$_rKp", "_$RVi$w__": "_h$Ci$y" }, "$7_wy$$": { "cYxq0$2": "iw_", "j0_cJ1": "f_T", "_p": "_7vYP" }, "kt_GY_D": { "VVe": "b$$$wq_2", "$EX": "v46", "_": "_7$" } } }, "hq_": { "$m8$J$_R8_$": { "Uf__$": { "cyM": "$Vi", "_7C$bou": "$", "__2$kna$D_u": "x$$J2_" }, "c$$$$LFLX": { "yv_$": "T$_$", "P80_": "Xg_", "_8An": "$$g" }, "TA$I$$": { "Lkey": "Ir5_$uh$VwG", "a": "$_$_zpk$6x", "jc__e$k": "_arguments2" } }, "Ec": { "C97": { "_bind": "RAL$55_$_", "$54xgw": "aDj_$l", "_ref": "Rto" }, "$t": { "$z2": "__d", "$3": "_50N3$$$", "hw_": "_$T" }, "_pA$0W": { "_": "_7iX", "vvc": "$tx", "$j2e": "a$$$$6g" } }, "CHm$vcR": { "kz$": { "_0939Kya$": "_", "_DP": "B3_a_$4$$", "x$s": "Y0" }, "ima0__$": { "$S_l_L__$Gc": "$A", "Hh6JpN_S$$$": "_le", "__": "D_" }, "xerty___pr": { "___": "b", "$X_Yz": "$", "_NdT6$69$": "__A" } } }, "d___S_v8L__": { "MsqcEdEa13": { "$$$587$_j_": { "_i1": "b", "$j73I4": "L", "_7": "_" }, "_HHt_$Y__": { "qref": "$8", "_um": "$9z_$t8d", "$$": "$G" }, "$z8_k5sZ$": { "e_": "Xkey", "zu$$Kr": "O_8k8", "_": "C$VK__2T" } }, "$$18KI": { "i_H": { "i___$E$$t_W": "$O2L_P5", "$90_$4$8UL": "$ae$_R$5iN", "_$_": "Vjc3__CI__" }, "o$96r": { "_": "_K$Ap__zV92", "$_mu$": "UC", "YC3$y": "__" }, "_O9n7_F": { "dRx": "_j_L_", "_$2$": "m_", "bbind": "A_F" } }, "$$YRWY$_": { "b": { "$_$A8d": "_to", "__": "a", "_3ca": "$$x_n_k$_" }, "a": { "Tref": "zj$F$_$H", "_G_FIUS2": "vE_4bE_3$t", "$$_d": "Jc" }, "d$": { "Z$$65$je$": "v$$EH__$", "_M4Y$Wq": "Ico", "Y__S0$4_J": "$" } } } }, "aref": { "$": { "hp": { "$$5U9": { "_key": "$__", "b08c": "wo", "_$$Yom3": "$$a" }, "__def": { "d_": "$$$", "X6g_W_P_": "b5dDDD_", "Bapply": "_" }, "$7_": { "W_I4t_vX": "H", "ZO$p_": "I__$$", "$pr": "_to" } }, "V": { "sV": { "$Y8$0$Oq": "c_x8pav0", "$": "$ba", "fR1ym$$a$81": "_i" }, "hT__7Q0_31": { "$_$$_$8": "$ni0f03y__", "_E06": "$w7", "$apply": "Yae_z$" }, "_E_": { "Z": "_72$_9o6$7", "g3__$$_$M": "$$EdSw_0", "$$Ws$__$_": "$XKF$9W" } }, "ZBc": { "V_2_4D$_hx$": { "W$2d3127$9": "d_W", "R$1$1y_": "C2", "h3": "_toS" }, "_$z$$X$D": { "___1b": "v5_22", "$": "E", "cAV": "Fkey" }, "b": { "$__": "ekey", "Qtt": "_K__U0OOAS", "cn6Szo$WE": "$_pl" } } }, "e$_$6m": { "c2": { "F": { "C": "$de", "_e": "_$$", "P_m": "bref__looku" }, "_": { "i$4_d5___t": "$T$_$c", "EtoString": "wJ$", "fkey": "_O" }, "B__p": { "_C_W": "Elength", "$_$i": "ei_", "$h1_": "d" } }, "B": { "$c_oRG": { "__x__": "___$_", "zDE_": "c__", "D_": "_p$" }, "eDP$": { "Cn_": "dh_X9_", "Wkey": "$", "$_b8Fe9Lf1$": "$_" }, "$7Y": { "_G": "$__look", "Ld": "ciD6", "d1Go5o$_o": "_pa$B7_K5_M" } }, "_bg": { "n0__": { "$e7i": "DW$5_$D", "_0z_Fl2": "V68D8w2", "$5": "$__" }, "C": { "B": "os2zd5_$", "YH": "_cA", "_L$_2B5c_Dd": "_" }, "$": { "$bi": "xba", "$a": "q_P_u", "KB$31DCAe_7": "EM$316" } } }, "$_8C96bw3": { "$5_q$z__Q_": { "$_i3$u": { "$8yMfrv$": "__$_0_xB", "x": "$$$I52_", "C_$_xWDD_$": "H_RK" }, "$1_C$3T$3_$": { "U": "a_9$CqW_", "mval": "NB_jg8$", "$_RV_Q3a$O_": "$r0_$ZI$" }, "__": { "_uh": "_0$", "$_v9$5k$__": "V", "I__0": "_$N24YfP" } }, "vB$": { "IUe": { "_$$__u": "s57ine1in$", "_length": "Pky", "_x$T": "__3v_1_" }, "D__l": { "$Y$": "S$$", "_q_w__$": "$b$Os", "$prototype": "wmf67149$9" }, "vtoString": { "_s$C_19": "$_a$B6_a__", "z_": "_", "garg": "vA_H_" } }, "Ti": { "$_MG8z_x8": { "$$": "F", "d9_0_5": "t6By20", "_K$": "_3KG_5" }, "A$U_rtyIs": { "CEAV": "xTKGITEPb", "__M0_SQv": "$9$C", "_Et51_zAo_l": "$$_" }, "c_": { "b_J_r": "_llD", "_c__7C3v3$m": "_", "$": "$$C_C___$2$" } } } }, "V$06FM99": { "aD____0": { "jlg$5": { "$4_": { "W": "$constructo", "$": "E_", "__Q3_lI$d6I": "__4I2bUg7" }, "x$": { "B_i9hyTEn$": "e", "X__k_mgz_x_": "A", "_1424$$": "$__" }, "_": { "bpro": "y", "tfit": "_a9", "Y7_g_$_j": "Bg0$Wb___B" } }, "a8_$_c": { "_XWIO_L_": { "_3_$d33p": "_$", "$": "J", "d_": "l_8__Pw7O" }, "_$9S_i_$awh": { "__": "$$$Q____q", "$_$_B_": "_$$$_$", "zK": "wAz" }, "__2": { "n4$": "$_$", "_k08q": "ZD$E", "j__": "__" } }, "_u4$I_$0_": { "p$$": { "aiMw__k$Uy$": "__VAv67_a", "b9_4J_1$1d": "$_9$", "wcall": "Q$UFA$1$$" }, "x$6": { "e6AlY$$G$PS": "d", "_d": "Yc", "_0keyxDbi": "_w$S$_4" }, "Cz3$yNa9": { "E25Vfl_": "a$", "_j3_": "eS", "A7_4z9$": "K$$H$e4" } } }, "$o$c": { "$_5$73$X": { "ccaller": { "_a": "unstructpro", "_alu": "Bx$", "xapply": "$key" }, "_$_N_a$E_": { "c_GYRu_": "_val", "b_q55_1q$": "$Va", "lQOX4_9b_": "E9_T_$zO6w$" }, "_gV$d_31_": { "CyC": "dUJ", "t$6": "yb$", "A_": "EVC$N_4Zt$" } }, "mWf$": { "$$ts__2I_7": { "bbl": "tfL", "x$$$_": "$_$_$1Z4", "oC_4": "__4" }, "F$_$Hu16": { "$1$__define": "E", "vdko9$$b_$": "_$$_FeGu90D", "$toString": "C$Df$A3" }, "_b$Q": { "$_a": "zp", "__2B2FE": "__f", "_": "$0jC$K__5" } }, "$A$E$$$j3y8": { "E2z_S": { "e": "MQ", "_C": "h$", "Ha": "$_7EVc7E_G$" }, "Z": { "$rOR_$": "l_j51$Qjr", "$7$_r$gj": "$$i$$", "v$": "S__$q$i_$i" }, "amaD$6": { "x_": "$", "Zdam_$ke__": "CR", "YkGPQr": "g$Uo_5M$$__" } } }, "C$": { "$2": { "$$": { "A": "_$2$__", "K9_l_01h": "_9", "Tbin": "_con" }, "_arguments": { "F6M$_": "aE_v_03kD3$", "$_": "_$EbindtoSt", "C1$_1_bA$$": "uk" }, "$_$_k$F$F06": { "D0$ZR": "A$__", "$9h__Uxl8": "zn", "$3D": "$_6$i$j8x_5" } }, "_p": { "Xn2": { "_v": "VGJrt$BO", "g": "E4_BU$", "$h": "S_P___6N$" }, "_": { "R$RDw__": "$_$q$5k_z7", "_o$R$$24": "C", "$$k": "$Gz_$" }, "_8j_$w_ev$": { "D$A$": "$", "$NwG": "j_3", "cE$$$": "Atrin" } }, "JW$Q": { "$e": { "_$": "_E", "$V$_ne": "E$", "h$vW28": "_AN" }, "G1h": { "d_b": "KJ1Z$Z", "dK": "IV", "x": "$47C" }, "_$_": { "$$": "$as", "T_p": "g__", "$__d": "Fpw$$dx" } } } } } } }, "D1_N9I": { "e_V_": { "N": { "$Q_9": { "S": { "cNd$$1_269_": { "x$_V$gnf__": { "XY": "$$$", "$$K$1": "____", "Wv_A": "_" }, "eapply": { "FpbFF_": "$$7ebv", "D$8$$g": "u$$_k_$Oes", "$0$$U": "EE3$E$$0__W" }, "_19": { "d$$f8_6": "__", "_C_94_n_4w": "$_da$HcY_", "_": "_n1" } }, "__t": { "$": { "c$$$": "D9_0B$$E_7", "sP$o_6__$": "$8x$3$$___g", "ckey": "V$" }, "_$_$": { "$valueOf": "Ncall_defin", "_M$9Y_": "E__proto__", "$q5C": "j_i5$2_$" }, "$aBM2aE2": { "g23$1q$": "_$8i", "$_4KW": "$_s6_56e", "_89$X__": "EeS" } }, "$": { "$H7__d_$_": { "_iap": "$g$$97Z_FN", "rd_b_": "QtoString", "_3L": "$bindxca" }, "_8$_": { "_ref": "v_", "$aA_ropc": "ex$8$_u$$4", "_": "Xv" }, "$7$jW$$_TM5": { "_key": "$4zW0jWTdA", "en$$$u$vS$": "$ref", "$_va": "$m_$7_1R$O" } } }, "$2": { "w_AY": { "y": { "I$e$p$3Ry": "A", "__$$e$$": "C_", "BGB1f_$": "_b" }, "$$__refr": { "Dq$$": "_$$bD0", "v6$c_$N": "$va", "e": "Y$jLl_E$" }, "$$": { "wF4__TG": "CsD1$$_i__g", "aZ$6$_": "dvalueOf", "$$W$_hA50__": "_$$w" } }, "$89y$": { "_fRa8X$": { "u": "_$Q7X$_", "_nam": "Fl$", "$name": "_852$_" }, "$": { "$3R_": "$__d", "Qa": "cpply3llerS", "$4$": "$_P9$d_U0_k" }, "acaller": { "$1$": "_Y$__f", "_d$Rh$9$_": "Yj_Y6_6$", "__$13$": "$_" } }, "e": { "Q_$E$$$D39": { "D$W": "W", "_Cwx_": "b_7_U_3", "_C_": "uF$$X" }, "A_AW2_4EXVc": { "_gl$__$8lV$": "dhQ3YHO_$", "_a9_3Tw3_92": "_9", "$$_HS_ITT": "cb_C$Dz2d$A" }, "cC0": { "uref": "_$$__b__$$", "Ejj_": "z", "oEUXfTiI": "zC$$" } } }, "_c": { "j7$_43o$xq": { "e6$c": { "y": "bh_9_$v__8", "i0toStringn": "Ykc_R7_90$", "_d07___": "$$$_6$Sk" }, "A_c_LC6v": { "_7U3M$": "rd$$_5$V", "X59_7$_N9": "_0_rr$", "_CoD$_B4_dH": "bva" }, "_": { "$97_h$": "$caller", "Ckey": "yis", "$_p$w$$a_5h": "_Q$b$k$$_$_" } }, "$Q": { "zref": { "C$_": "_$", "i$": "r", "_": "_$e_$pa" }, "$G$M2$_Du$": { "z": "_$h$_Kt_", "$_7gp_L": "DC_", "$": "Y$$_t8bu" }, "_dX$": { "$toString": "x$$j", "_$A___0": "_4_$a_$", "__035k": "uA$" } }, "_D$e$89C$$": { "z": { "_valueOf": "bvalueOf", "g1eRb70": "b$S_T", "Vkey": "A__tC$P_$" }, "_3_": { "_m4$_t": "_Dtype_i", "_X7": "w$9$_sS9nwJ", "E_": "_6vd$o_b_$_" }, "$7": { "A$$uv": "a1", "Xka": "w_3$_0$$D0$", "$$K": "__$T" } } } }, "_key": { "w1Ziw": { "VOi_hU": { "$$": { "_6$w3_": "ZC_a", "$ref": "$", "A58_": "$" }, "kt": { "B4UY0aA": "y8__nC", "$": "W$ot", "c$": "$X_" }, "$0Fj$A_m": { "_X_l_J_G$$_": "_$0", "OZXckk1$t$_": "ZPJ", "csI_gc18$$": "Z6uY" } }, "_LZ_y5$$$": { "Y": { "Zref": "$_5c_$9_$M", "$y": "__T0$_6$", "u$": "i$C$_2S0$" }, "_ZQ$$ob07$_": { "BW2VA$": "C_7PpPa", "B_9$9Yb7I64": "W$o$R$", "p$by": "e$p$2W67_" }, "B": { "E": "CsDLoc", "I2$_jkx": "$Xd$$yxWxN_", "CZgpo$$": "$" } }, "B__f$A": { "$a9aE8963": { "_toLocal": "$UQT$$_$Z", "$dD": "_6E", "_781": "cpertty" }, "_as": { "k3O7$J9__": "$$1tm", "Mri": "e$1_9$4A", "W62$lEW8": "_z$w9_2_tD" }, "_": { "$": "eU$", "vD": "_$48aJvQ$__", "H3$": "a" } } }, "W1_6_$_$_e": { "Ar": { "$$": { "$0e___cz_2": "_", "Zd$": "_0_izD$BB", "$": "l_6" }, "$5_v0c92lW_": { "e__U": "$$6$$vuq", "A8$": "$$_m9__l$_", "$$N$w$": "N$" }, "$QQV4Vi_5__": { "_23_": "D_", "_qk": "xRn$1", "$_$$4W": "$85" } }, "jHV$__9": { "w1O_gh$2$$": { "rd": "p9M_", "rN$1mG$u5Nk": "_$0$", "z$_I": "_4t" }, "$_": { "_a$18$_7$ya": "cpropertyIs", "ke$": "$7", "DLK_$_$": "_lly__l" }, "e__13EvS": { "e": "_", "$prototype": "b_Nbds__", "h$": "$" } }, "w_O$NA45__": { "__Lp8l_s_": { "A": "kisPro", "__F": "__i_", "z$$j5": "yvalueOf" }, "$": { "f_HU$6__c$": "b__proto__", "_": "x_$__RK$8m", "_$$": "x" }, "s$3Mcal": { "ukey": "feC", "pe2z_7": "tl5", "$_1b00y_": "EvalueOf" } } }, "$": { "Lpr": { "Ijgy$$__2I": { "C": "$$J__3$", "a": "$V$676$7_09", "$": "_" }, "O$cM_v$": { "aY$6EWf$_T": "$is", "_hy": "AZha_", "$$": "$yM1$" }, "l_7": { "Z": "$26", "Ulp": "mP", "C_UE4V": "Vc" } }, "Z_": { "J_$_4$": { "X": "$", "$toString": "$$$E$", "qC9__c$C$p": "Au" }, "$_852_$$8_0": { "r": "x_$0_q", "_$0d9s$": "d", "$eV$$_LT": "n3n" }, "_ITJFb$k": { "ty": "_X$p8__t_L0", "k$E6d$": "$apply", "$3F": "C60" } }, "Clength": { "vV_": { "B": "_Bw$7", "$$_5$_A": "$$_$$l", "E_": "AFQe_8" }, "_36c$9Gj": { "y": "i2cq", "D1_2$O$": "ZA6Z3n$", "YO$__l": "b$toStrin" }, "$uy$7R5m": { "$y__t": "_D3$", "gkey": "vy3xZ", "Rf6_99$": "$" } } } }, "dn_": { "T": { "K_v$5$": { "$__a": { "Ck": "q_4", "$": "_$eYsn", "_____xW": "c9YxB" }, "$C$C$__hA_k": { "DS": "_vK$i$$z$d", "$$H_$$": "x__0UE3D_", "sX$": "xcj__$o$" }, "_is": { "_1dl2$": "_$", "$_$8__Y77_N": "B_Z1m$Bx", "_": "$vj$u$P" } }, "__U9$g_7Y_F": { "__8": { "_PY$": "B5$7Df_i", "$": "j$HGqU_", "$length": "d73uln4_" }, "_54Mle8": { "b$_c7E$": "AV$L_Q$", "CEF$_": "vDG$", "utri": "v4__9" }, "A3c$$": { "_": "_WV$p", "I_": "P6Ti", "$a": "$" } }, "D5_VR_": { "a$c": { "EC": "$__m6A", "$$W$$$_": "_$__", "v_Y": "eto" }, "_3": { "NN": "Vcal", "_valueOf": "d5", "Vc": "_yX8___Z$n$" }, "_qjpq": { "E": "d7wi$I4$_a", "_$_QIn$_84I": "$", "W": "_j_8vDq$" } } }, "B$2h": { "Nk9_c_": { "$C": { "B_0x_1coPS$": "Ymentrefcal", "Ezb": "_b_g", "capply": "$key" }, "Y__G": { "B": "k$2$", "a$$": "pl", "Cc": "_0l_m$0b" }, "uvalueOf": { "$0ZO": "_Y", "$_g": "$", "rM0_0": "zd" } }, "c": { "r$__2bz$": { "$rtyIsEnum9": "c$9fB$", "Oappproper": "$", "_": "_Z_" }, "_6V$q": { "$$": "Lapply", "B$_$wl560P_": "$C$", "m_": "$$M203" }, "$4tYi$$$_3_": { "wwv_ac$": "W$6", "cdi$__": "_4_3c_7", "__$_$__": "Cref" } }, "_DX$_$P$": { "B": { "J_": "_cr_", "$0D": "$", "dprototype": "$1$60$" }, "ato": { "$$$$z4": "$b$$2_", "$84_9HR6U$1": "_w__0$y$_aI", "cH7j1xj$s_$": "$0Wn_" }, "_": { "VEv": "Z8$a", "$": "j$c_FD3_GH_", "_": "$s_" } } }, "ZlueOferab": { "i994r": { "s$": { "Eq7Ya7": "_", "$ap": "z$OC", "_t$$L_3_": "ca_A_44z" }, "jx7y_X_": { "FvW": "Y", "$call": "__w", "$ap": "$B$$w85$y" }, "$$": { "_6": "_7$", "$joE": "cre", "_ZuG$g0$_$S": "bXX75" } }, "v": { "_": { "Yar": "$$U_Q$_", "y": "$I$", "$$U$$2m": "bY_D" }, "_BUd": { "_c$": "c3__", "$_Pyy$_559m": "_1prop", "Z$m$": "$W1Lh" }, "_Q8_6$_$": { "$": "$_$pcY0_$G", "V": "$1M0", "CM$": "D_9__j__O5" } }, "$0$5B$": { "wI": { "_w": "_7$$$5T", "$3k": "$L9u_h", "akeyre": "D__$O$" }, "$__$": { "B52L_": "____$U8_", "qA$$DzMt73": "$h$9r_T", "ATD__0pr": "R$$0__" }, "_bwms_Ub2": { "$1_VF_X9": "$$jR", "bref": "$c", "WNqzYo81j": "__D_mdp" } } } } }, "$0_19n8$Q": { "_": { "e$": { "E7": { "Q": { "i129": "eoty", "lme": "$Wo9$", "__": "$$" }, "_ref": { "_2$$13": "$length", "$zktTu$r$$p": "$_LF0$$_3$", "$ref": "vC_k_hZON" }, "w": { "aW": "_Ip_1U$0R0S", "_$$": "Xapply", "$fCl_$": "_$" } }, "C$78W2B_": { "$75": { "_f$___i0_": "_argument", "zapply": "Bguments", "$__proto_": "v" }, "$name": { "__o2$K_F9_": "dgd_rFr", "$": "N3sMMjn6", "aU": "_$R" }, "_8__8": { "_f$P": "$_6K3Tm0s$", "$3_$__y5aP": "_", "C$ZCY": "nz4Io_$l$5W" } }, "W5$ch_5": { "$a": { "e__": "$E59_", "_$_": "_Z$__c_gi", "_$6$$9F$": "$9$Ud1__5" }, "N9": { "Akey": "$b", "$rT$_m": "$t", "D_$BH": "A_$E$$" }, "_dV$YRfd4_": { "y$$_0": "$_CaAhZ_", "_": "_A5D", "m__4G6__": "RK3n8$3fQ" } } }, "_K58D": { "de_$$e7I": { "c": { "$": "$", "uX$0_": "X_", "$_d$Z$": "e_k" }, "e__lo": { "c2$yEw2l_P": "$de_h$", "_980t_dw8q9": "dVC0$4$R_a", "_ref": "baC" }, "w8M": { "d": "_caller", "Z_": "_O3FJ", "_": "_" } }, "Ak4B5": { "ejO_if$$_03": { "_5": "Ya", "G": "B__key", "_": "_Dm$" }, "$": { "B3": "Z0_$d__", "l$g": "_M", "_": "$_" }, "_O$_": { "V0xd_DE6M": "ELHz0", "_": "__$$03_KM1_", "$_k_$6_jE": "$t" } }, "$R_1_H3Z4j": { "__$": { "_a": "__af", "y": "Q_$Lr$6m98", "Z7": "_8D" }, "aap": { "$": "$c", "_8": "IT6F$_I", "_s8$u$": "e$7m$" }, "_E": { "$x": "y5b", "Y$_$n$": "VaFy_3", "__$a_9": "__GFP" } } }, "_$": { "_TA_su27__6": { "z": { "a": "$__", "Wd$_5_$W2": "avalueOftot", "$_x$_4O2": "_" }, "$$$u6W9P": { "$t_$fV1": "_8_D5", "bxg$": "_A2z", "Ca": "$" }, "ch$prope": { "SQ_$q$$6": "yBh", "tOCOA_$$_04": "_key", "C6$__b": "ZvR" } }, "w": { "$": { "AN$wM$": "$key", "$$2": "$cO_VZ$6$1", "e_": "$tteconstru" }, "K_$97": { "ae": "_27qR_$$", "sl": "Tz$", "dL$$Cp4__9": "$$X" }, "$0S_0_": { "CV7": "_", "$1_b$$$2$": "ceam", "_8yr9_": "O8$4$$$z$x_" } }, "IV$": { "vvalueOf": { "$7_Myn__E": "Z$3$t", "__": "D", "pfineSy": "_" }, "X$wjvu1ohU$": { "_": "__", "_$LOPs____V": "_", "$j4$4ic_$KN": "_Z$yj" }, "$Z": { "$lf$_3_Y": "_$80dli$88", "$e2zuM$": "$", "$7d": "a0$" } } } }, "Eh$_$C": { "Dx": { "_$qz": { "v__": { "CWY$FV": "d_ly_BV$6_d", "J0$9_BS": "z", "c_hwe_": "DD$__$e$vy" }, "$$A": { "X$e__b5": "_yX7883N", "x5p2_": "_", "yB6$8": "$o" }, "kw_$G$_P7_": { "_": "_M_T", "b$x3_94": "$__k$", "$__proto__": "_" } }, "k$J9": { "R$T$$": { "yC_": "_key", "$__proto__": "C_908l$", "$5E": "$" }, "$k9": { "F_BU_JCV8": "Uapply", "WyR_m65FMy": "B5_H_$nj$", "Uw$4$_o1": "_$" }, "z2rtyci": { "$$__$$$1A": "$$_Zx", "DxVdenam": "V$J", "eB$60$Fvc": "wxV6" } }, "_U": { "b$sR": { "y7pr": "$_xE", "in_Z7": "$h", "d9v$": "$3" }, "$bO": { "b_mST4": "_$G_0_3$H_2", "Y__d73_": "hPEi", "$71_q_6Z4__": "j$$" }, "W_31": { "eB$_": "Z$3bZK_MQ8_", "$B5$19h89z_": "l$Di$_51", "$_": "w_$i" } } }, "U0V9GWr1$": { "_8DA": { "mAyB$_Z_": { "$_": "_$", "$": "eapplyrabl_", "Uy__proto_": "$$_I" }, "_$_$0$SB_": { "$$$1c2": "fyAl", "c_K8k$8_": "$apply", "_valueOf": "$$$F8" }, "_na": { "E": "iAS", "Cn": "$$", "$_$Q$_jr_": "$" } }, "V$$$KkUv8": { "wo8aqb3$$": { "J_M2": "X", "b$": "_", "dpf": "_1_1$4Dj" }, "__": { "EtoString": "e1$$B", "B7$Lp": "E3sF2", "$_$$": "_ref" }, "$Tm$_$6$$8e": { "Cp$rM": "mx5__$0681_", "yu": "ml9$k$jQ8", "_$": "Napply" } }, "$$_": { "_04": { "dOgiQL$_": "__", "_$_": "Z", "_ent": "cj_ik2_" }, "$_DE_$": { "cgu": "$", "x_Or": "_bG7", "q1$_cyY4": "ax4$Rn1$___" }, "dG4$": { "A$lS": "f__$", "w_": "$Q", "stoString": "__Df8_2$" } } }, "J_T$h$": { "$": { "Ol9c": { "wj": "$7L__", "a$": "$4gument", "$E_": "$_" }, "xB_ddT2$Xd": { "_key": "$$lYdovalue", "_$A$_$$_8r": "s", "Cref": "$$__6$$$2P" }, "jc$$2VC$$X": { "ZvalueOf": "E_", "_ref": "__9UBdL", "$_l$MKLu4_": "Akey_X2a__" } }, "y79CGT": { "$": { "_oSprop": "_e", "Akey": "_", "Fu8": "___" }, "yC7_uH5b": { "zsie$_$e_": "yxt$", "b": "$", "$9RWKQ0_": "B89$" }, "QX2": { "h": "$yM$$e", "napply": "$", "Lxb7E___0": "$" } }, "Xkey": { "y$30KoEtcA_": { "_m3_": "$$$", "YI61__$6": "E$x1", "W9": "p6w69E" }, "rv": { "Y": "EE5", "$$3E": "$0$T", "_valueOf": "$S$_$_1" }, "_AFH_9udvG": { "__0": "B", "$c$": "K", "e": "$5__" } } } }, "Y0ZV": { "$cPQ$_J1": { "_0": { "KtoString": { "_valueOf": "xnvd4_$q9_", "$$_s_B_c_$": "$_$8$_", "$__L2_y0_82": "__wpP33$ZE" }, "$$$_i": { "_oI$_$$": "s0wv_", "_ot": "CTp$", "_": "_s" }, "_ref": { "_o$_L_$_b$c": "_TZm_b$__", "$_$mq$_8": "$hCG_0$0$65", "jz5X_$0$zpF": "E_" } }, "_1_d$sY28t": { "P_$GR$0_0": { "_": "s$", "F_s1L": "_", "V_sGC__OkQ": "_BV" }, "lw_q": { "o__f_9DV__D": "O_Eq", "$X8$9$7o0e": "$8$", "J_ap": "EdxI_O$h6C5" }, "$2P$$5$8_": { "R": "eI$U$O$__", "d$R8_": "qd", "_Ci_j_E": "Qname" } }, "egY_4s8": { "M__6": { "vOe$_$SL_h2": "Gp5n", "_$97$JmzLe": "$_", "$": "_toStringbi" }, "_D__0_i_": { "_wnProperty": "Zmo134r", "_0p": "_d8$b$5$_l", "H_z_": "$n3$$0" }, "E$6$30$r": { "A0$": "FU$N$", "_$__": "ccalltoStr", "Wref": "_$V$" } } }, "x$O": { "_lle": { "_wd": { "f3_7": "$W$_", "eI": "Ze", "$0K": "Ckey" }, "Hk$$7307": { "w": "O__3$9_", "$$W_": "$tro", "A": "E$$a" }, "ABh2": { "yd$_": "b$w_ette$wt", "D3_Hw8_": "$n", "Gref": "_G_i$F8Pv$7" } }, "_e$_qX_IQ9": { "_8": { "y": "$_$7", "BB_F": "Tname", "a$$$21": "_re" }, "$$e$_35_K_J": { "b": "_3IgK918$", "Ap$$_Z$$": "$p_n$qtN$$", "$$": "$$$U2" }, "C_ho1$": { "$rtoLoca": "S7", "$": "E$_F_63$$y", "E$knCC": "_h_C$hV" } }, "h$X$_": { "_z$$S_$eE": { "_": "fR", "a65": "$_cL$4y__", "v82F": "c_6$2$__" }, "___": { "$$7MB7f$$X_": "$d_$$T_0T_1", "$_V7Q$$": "$_cxY", "_$1": "$0$" }, "__$$T6q$": { "_09E": "_ref", "$": "v", "M_$6xg_": "$_" } } }, "Cap": { "$X4_6$": { "My_key02": { "$bU_J0$$r": "_824", "_6V": "_bo", "C": "C_JC$" }, "c": { "$_4a7_9_i1$": "yN6_", "$$d$2R$": "_RNw91r", "OL": "$QW_Z$$_" }, "e828": { "Hstr": "U_$8v_k", "_Fk": "$$48", "_E$_$I": "___$" } }, "V": { "v_5$0S$5": { "ZKB": "V$0__W_K__$", "e_": "_$$C_1", "C0x$dXHw$$H": "Mf2" }, "$": { "__KDM0$": "_$A$6C", "$key": "j_", "$OK9_Z_$": "AxW_" }, "xx": { "V$": "$PEVp17N", "$_$_Q$$4": "___", "srLa_6_3__": "$" } }, "Vlength": { "_$n$1": { "__3$N1U_L": "$co", "gcnV_$8RI$C": "C6_E$$_9c_", "M_$9$$S3_": "W71i$9eey__" }, "xp": { "_": "_zV70t_", "QtoString": "$", "_n$F460_": "$_I1$" }, "V": { "$$y$3": "$", "_8R$$$$AT": "F$eY", "_JZ_4$": "$__" } } } } }, "C_h16zZ": { "$__lookup": { "_ie": { "$ref": { "ctoString": { "I": "Zw_qD", "xx799$M": "c", "a$9": "CaM$$" }, "$_3": { "_$72T$Q__$": "_5_", "_a$_": "__", "$3$_": "eN__b3$$H" }, "_$$0H_$7Uzd": { "M": "E4", "$__md$": "aZ$IY_6U_$", "_n": "rc7s" } }, "_0_$0V_2t": { "O$t": { "xStr": "$$k8HK_", "$7A": "E$V2$2C$__$", "$40": "rAq$L$6$is" }, "_e": { "EtoLall": "$L2_", "FvalueOf": "_", "$": "$$Zp94w6" }, "V$o": { "_z": "C$72dgiB", "bw0": "$", "fX$_fD_D_w": "_ar" } }, "$tW0": { "A1": { "_": "md$_00", "dB$d60v$_": "x$$h", "W_$B": "L__$$jb" }, "vM": { "en$_h_": "Qha", "$reSetter_": "O4_d", "_9e": "_c" }, "W": { "$o3E2$BA": "EiAvLbA", "cB0": "Z__loo", "_xmjx": "_Vd$" } } }, "_toString": { "z$0$": { "Vc$_D$p_": { "$": "$$$p_$T", "y_3a$W_B": "$H6", "_": "B$7k" }, "$$R$_$J": { "o3$$8_$$": "c$$$3v", "$$2_": "B$_$B$$Q2$", "$$ar": "_A__" }, "C": { "s": "$$$yuY$", "$$5": "g", "_arguments": "bg_" } }, "A_$1": { "yP_p__$oW_": { "V": "_b$_", "_X": "Cr", "_fA$L_3$udV": "V$xnam" }, "h$t": { "c_apN9_": "$$$", "_W_": "$$o3", "V": "$_" }, "SQ02eOf": { "_7_": "cc", "o83g": "Q", "$U": "$8UX" } }, "Lz": { "$K": { "_": "_$Sw_", "Z_$H$eS0gs_": "J51$uGAA", "g_ref$cons": "Bot" }, "Dto": { "w8$a": "$E_O_BQ", "B__proto__": "_7V91p00$", "w": "OZ6o_1" }, "$toL": { "___": "Z_f_", "_z1xx": "$93_0uEb", "_r": "m" } } }, "E3M__mfo8": { "PtoString": { "__$_m5": { "__": "E", "$8I_6B$9_7N": "hd_$8$", "E$u1": "f$" }, "$__$$v__6_": { "_XQ9z": "P", "$g$z$_91": "_", "b$_XN_15": "_T$X" }, "_0lf4$T$s3$": { "R$t": "Dk6Q", "XLf8_5_w6": "Ew", "t3$Mw$$4d": "E$$$$___" } }, "_valueOt": { "Zref": { "yQ$$W$$$": "__", "$ref": "rB", "$L37$5": "AisP" }, "D": { "K": "Nlength", "Okey": "___3r4", "$M_E$$yK_1_": "R$$c$_Y" }, "_": { "_u": "$$__b7$$$2", "$$vd_D$b_$": "B8", "a_i9f_$": "_hr$_7n_$3" } }, "_Y9": { "_g": { "a_48U$$_": "pfH$", "__$2L$0Ss$k": "f_U$$Ke$cr", "K$": "$_O__9" }, "$": { "r$5__": "V$_1", "$_$C": "w4__", "aEeSette": "v_3C" }, "$$D_e__7": { "_$0AGEE$": "cE_b_CM__7", "K": "vh4b_J$V", "_Xc1_c$": "$b" } } } }, "z": { "$L_S": { "Kc": { "_3S$t1$$N3$": { "UisPr": "j_$FPi", "_": "wnt", "f$e$_7P9": "l_$_$$_" }, "zD": { "_toString": "EweK$0E$", "Acall": "$JJ$_q", "I84upu": "$" }, "_0$": { "_e8": "$$x9$19__m", "$C": "$tA$", "$": "$yb" } }, "X": { "C$": { "A$wlTj_": "B", "v_5$Dx$S": "ZCBe_9_c_", "HT$_$$_$fHt": "d$_8Fi$H" }, "c$S_$": { "$K9": "$e$m$", "$valueOf_": "Z", "z_525$x6": "_Lb9_6proS" }, "Ath_9Q1_O": { "e": "_9F7a_9_l", "ax": "w7", "__$v": "T$d" } }, "_": { "c": { "$__": "_$CvQ0$_e5", "$_2": "vW4", "yH$_XcvM": "Es_SBr" }, "l": { "_g2_98gi": "C_Vr", "_2_$": "$jw5$gTJ6$", "$": "Z" }, "Ut$71$_F8": { "D": "b1", "q$$_": "b90r_34", "c$o0": "_$Q" } } }, "Q_$_$_proto": { "__": { "Z8U": { "D3y": "$_", "h$": "__i_$__", "$Q109$$": "t5$pf$8" }, "BvalueOf": { "$_J9aYo": "O", "DkO_6": "q74k_Nx$n", "E6__R$_y3X_": "$$EYl0z_$6" }, "lMylvJ9$7v": { "$1$$E6Ew": "zlen", "$pp_O$l8": "o53$$8", "$9B$$_pfW__": "_7$4FP" } }, "_valueOf": { "_$$_": { "$22call$": "_V", "_R": "b$ZBm0F_", "_": "b$$" }, "e9ghYn_weWS": { "v8$I": "C_$$2K__W", "L": "YbuT$_bs", "Eto": "_3$U$6" }, "_": { "p": "eapply", "_ref": "O_ot__pro", "C": "e1$_$$03$" } }, "Rj_$m_j0_u$": { "$82": { "_ref": "a__$Y_N$$$", "_4_at4_g": "_totybi", "AI4fV_w8T": "C" }, "v$_": { "x": "ia", "$r_1": "d_0S_905", "c$$c_l": "$hasOwn" }, "_key": { "Ge": "$d", "$toString": "T", "$": "Q" } } }, "_": { "_$J$_$b$s_S": { "x$l_$": { "Y$_$ke": "ageaw$3D", "_7": "$Kd_", "a$FCp0$": "$_" }, "Rn_$9": { "earguments$": "_", "$arguments": "B5$_2__ql", "GCS_": "l__pr$" }, "cd$y_k4Br": { "Nj$OY$A_$": "$___i", "_": "DX1_Df__h$7", "Ebind": "$Ea" } }, "_": { "_$$_4": { "NY$c5$$$_": "ebind", "_k": "$", "BtoString": "E_" }, "_$$": { "p__$2$7F3": "d$k3$fD0", "FoL": "$ref", "_namegQ1rep": "__92_o" }, "$": { "mkey_ne$": "___7", "$": "_app", "__8Zm": "_$7wG6aM_9" } }, "eF": { "c62": { "kT_Wy$HzZ": "viqU__", "$": "$Rza", "_": "Zh_$8$$$7_t" }, "E__$4k1bb": { "_": "P", "v$w2$$c": "d_tcZGJ", "DBLIeK_4S_$": "C3Z_1_D_7" }, "$ref": { "_dWA": "J$$$P", "$___": "f2O$", "bca": "$_7IHave$_" } } } }, "_1": { "$apply": { "$key": { "$$0yB$K$7n$": { "$C": "C", "_T_s_e$_$": "Bj_y", "_$e": "$$z" }, "$_V7__1H": { "udW": "_F", "_": "Y5kOv_$I9_", "$2oD8_$f$0": "M_" }, "y": { "deo$z7F": "__n$b$tx$_4", "A": "h$9$$yL$", "__": "aI" } }, "_": { "Dj$v": { "_ueO": "__", "h_$": "cr", "$key": "__jLSl" }, "xpk$__8": { "o$opert": "$K$m$d_f", "D$F_6": "zD7$", "O$c$_UB_$_$": "zm0$$C__" }, "_n": { "_$$xV7$aY$c": "xH_5_5$_$2b", "_W$a": "_3", "zref": "k" } }, "aC__$3006_": { "_0": { "O": "v3o", "__": "ma", "$j$g0hW$$": "_1" }, "bkey": { "$1D": "__Mu", "$call": "C$Bkcall", "$1_$1$_GG3": "_" }, "$toString": { "$304592E22": "$In", "$$6$f_": "Ba", "wg_": "a3R_" } } }, "w_$_": { "N$S_2": { "V3T$": { "rd": "b", "_sval": "_r", "$D3_$$9egU": "E$8_3K7s_" }, "_": { "$837": "_$$X$s_$", "Dstruc": "cdx7lY", "ev__GTw$$PA": "H" }, "_12$Y": { "ua": "$L5yJRgk", "$Ep": "l$Jz$fr_1Ca", "Q__pro": "__7$$d8NH$" } }, "dname": { "aec": { "$VI__prot": "x$L$$daV", "$F_63U$$$tk": "_J_o$_t9A", "W": "VcX4f" }, "$": { "Ef$9": "_oku", "c$c": "_3_MisPr", "DtoString__": "_" }, "ZH_": { "Y": "cref", "V$i": "bcatoS", "$_": "BLo" } }, "_1": { "_7$250_7X": { "Z": "$length", "z5X$$": "dx", "_$$_": "e5" }, "dS44": { "$": "__1", "aind6$_0": "x_$8i", "$ref": "$R5" }, "iJ5f_w": { "$$S": "nE_", "D2$px$_W1$$": "QH_Enk8", "b": "X8" } } }, "W$$_$C9eB3y": { "$": { "$__o__46": { "___": "$4j_0Y$_$x_", "$": "$0$E_E$$W", "_": "G" }, "q": { "$_": "U", "$amxbi": "e8_Y", "j$o1Su8j_t": "Xbind" }, "D$": { "$$3B42M$6F4": "$", "g_$$": "awc_9", "d$O$V1A0F": "$H" } }, "_e$6": { "c$_K1Q_3xBD": { "_": "___8$58q", "__": "_c", "labB": "$y" }, "mvAv": { "_w$$$a_": "_d_T_$9", "T": "$ZWu_G", "HDMW$5$7a_": "N_" }, "$hO_$W1": { "_3$5$p_": "O6", "$SZM$v5$4": "_0_$", "A_B_": "K0" } }, "$VY_Wz2_": { "Bc$B$b8$": { "_$3s": "akY7$A9R$__", "U": "_", "__E8": "Bf$_$2__4j" }, "_call": { "BF$__v_$$": "WwpB", "$2$": "$y28$TsH$", "$5PJ": "_3" }, "t": { "$": "bkey", "_bw$Hf__I$": "f31$Y", "$_$C_iw": "$_$" } } } } } }, "C": { "Wm$": { "_$7A": { "_5_": { "b": { "a": { "w$mJ_$": "_$", "Do3$Q$": "h", "D0Warg": "$_$" }, "E$_": { "a98_V_$_70$": "g$1m_", "x$0zpSN": "a", "b_3$$$x": "_i_" }, "$_X_": { "$B": "$8", "_PVcb$y$": "kwFZGdWS2", "_$I0$qwZ$c$": "$p" } }, "iD2$": { "_2$$$_V2": { "p_": "C_U", "C0$2_6$_4_": "_zwD0S06", "l": "D$__k_0" }, "$": { "$dJrp$An$": "D$_H$", "$$vdV2Xc5$Y": "_", "A": "$keyg__look" }, "b4$": { "ar_": "I36__z5J", "wItIo": "o", "KrototypeO0": "ehoP_8Q0_H" } }, "aALM$v": { "A$gb65n4_6": { "vsx2_": "_k", "Vref": "W31Bwc$w1", "v$$": "_re" }, "cvku": { "YuyA$$": "n", "y__": "$3YC2_u", "b": "AW2_$_$" }, "$call": { "$_S6_QsYT": "_$", "_WX": "A4$_d9", "Exl": "b2$" } } }, "d_4_$": { "__D": { "_TK$7_n_$": { "$_q0_$B$6$M": "Be_2e_D_", "iVi1": "i", "vE$750_": "$$T_" }, "a_": { "$__$z0c$z": "A4q0$", "A__eddD2": "$nc$$IC8ZW", "bi_471$__": "_1_05" }, "R_I$_$$_$": { "_S": "e2t$v$kz", "q$5G$z6": "D8_ZxG$_8mn", "b$t4": "$010t" } }, "r_": { "a$8$$$$$": { "yu__tQQ": "_ty", "$68": "lW2", "_TT1$Sque$": "G__proto__" }, "Z6B__": { "$JQ0_T___": "E", "v": "___w7k3$i", "_vWZ": "$" }, "_r": { "d$b": "V__", "$ueOf_Ib$$": "$co", "$$V1NgVT$": "A" } }, "BW$mr0": { "$q$b": { "h4c$_": "dW7u_rV$", "$__x$_d": "$", "$_vv1_9": "$uc" }, "y$F": { "_": "ve8D__f$U", "___a$3Zk": "_", "cOP1C_v0": "w_V3$_$7y2d" }, "c7WE": { "$3E6pply3w5": "E_P$sI", "atoSt": "B$", "E___": "coYwA" } } }, "$_Yy_R5_$": { "$R$bFI6z_": { "$valueOf": { "y1": "_", "gz0_h9__m": "_b_$_aH", "_c": "bref" }, "$$8Is_": { "CupS": "Ol", "$_4": "C0w$$j_$$", "IK$b_": "$E$" }, "__ca": { "C$He_": "ZtoString", "__cQ_Gi6$t$": "C_$xT_I$pl", "_6Jy_$Z$e": "A6__define" } }, "$Yt$Gg": { "d$603h": { "Mc_h": "s2", "$C_Rbari_": "$Z", "_$20Q$l0e": "__" }, "_mU4": { "$$F_": "$c", "_$S$z": "$", "Sv_": "aprototype" }, "D_9311": { "x": "D$$c_W_4$", "q$_Ma$eP15": "BvalueOf", "__": "C_J$r2K$_O$" } }, "e$dt6__k": { "_23v$2": { "_$6C": "a__lookup", "$lleconstr": "EbCE$zU202$", "$$3m_qr": "$_Vjn$$_Rw_" }, "dhasOwnProp": { "_da_": "_6", "D_9_": "_", "p": "MZ_b$$OL" }, "h$h": { "w$_lV": "_$yC", "W_G": "$", "AG6yb1074_": "_H5" } } } }, "IByr$$3$io": { "G$_9F__": { "_$7qX2$": { "_argumen": { "Co____e$_": "Zkey", "A53_h$": "_", "$$$25": "_1_j9_5at" }, "_$": { "_H2Bi$$_1": "Gcaller", "ha_Dcj": "_K", "__": "___$$_7$lC" }, "EiO0": { "$_U_2AgT": "__nXG1z", "K6_p$E3_d": "$", "r__$_$": "_$_o$_" } }, "_": { "$key": { "i": "CDpG", "V_$__$D_$Y": "$6n$$mr5", "y_$8": "$$_c3_" }, "_97B": { "b$B$Z": "C_$qfuf$Ga", "YB4f_Cmq$U": "$_UeDd_O", "AtoString": "$US3Pztz" }, "$toString": { "$1___q": "dref", "$Z0D": "XC", "Edg": "$3" } }, "_arguments": { "$_1EY_2_8": { "$": "$F__$3", "B": "$3_qA_8Hrp", "e7$": "m_" }, "__to": { "y__p": "$_1o5__$R", "gf$$GHV": "$F$", "ARdJj_vw_": "$f$" }, "$Je": { "Bl54eTV$": "_$82", "Aq$$J__$0": "VA", "$c58u7K": "_5C0vn7$2" } } }, "C$u_$": { "_toString": { "$__b": { "Dg0$$J6Lp$": "$9K0", "cname": "_is", "_0$8K29$$e": "z" }, "_A": { "WD_1": "$z$", "$22__": "_Iy$$7FxcXj", "$applOw": "_1$" }, "_0": { "$_xwNe8j": "$6J02_O$_", "a7_P3$": "$_tnI1wg$_S", "$": "$wb$" } }, "ao": { "$": { "j$": "$vD5", "$B": "o23", "v___defineS": "fB" }, "dat_pin$su": { "__$T": "MG$", "g1VZ$Cv0O_1": "_$_", "Zapply_b_": "_$d$33_v" }, "s": { "_RA$1_0": "N6", "AtoLocale": "$length", "$$__YU": "_$neGe2__Zx" } }, "vais": { "D111": { "_atoS": "c", "o": "cvalueOf", "E": "$1" }, "b3$_proto": { "$$7r$": "C$_7$o0$8$", "_": "yA___D7_", "_5kb": "eDc" }, "V": { "$_$w_": "lwy8", "i": "$$a", "E_780iZ_": "_E$$A_2_Y_" } } }, "_dZ": { "b_b": { "__7$T": { "_9_z$l": "Ct", "$_9": "P_", "DelUm_C_": "yBbW" }, "$key": { "Cprototype": "G", "vO$_u": "EE_20$$EA_", "fdz_": "$" }, "X$$C_": { "BSR4xJP$l": "$$$B", "_": "$n_I4$_UKZ", "__C__defi": "_" } }, "$$$_$c4d": { "x3_4_e": { "Ce": "$C", "E": "aprototype", "$A_7_D_D$_8": "$$5B$4$" }, "$$$ey": { "_to": "$U", "$__kuzr8": "_b", "x": "d4l" }, "$kIT_Md8": { "_NY$$$$_$7": "C", "$kKy": "B", "D0": "D_83pN$OF" } }, "etoString": { "$6bp": { "z$0_M_$0Yq$": "Jd$J", "_gpN_N": "i_", "Y_289$$6E": "_LQy$u5" }, "b_$__$": { "Ez$": "$$", "BvalueOf": "$r5P48Ke5C", "$_VZ": "_16Wnw" }, "J": { "__U_Cta_$5": "_$O", "$_$9l": "Hsm", "vr": "G_$$ps8m" } } } }, "_toL": { "U3____$": { "wume": { "r99__kl": { "_xP": "_f_", "_$3": "_", "Ca_vor": "j$_fD5jv1" }, "eiw": { "kr": "DSdkeytoS", "$": "Lz8632_$$tv", "d4_K_q$L_": "$9O_b$8wir" }, "Otzx21Y": { "$8_": "_", "_$$G": "$", "sPw": "a" } }, "Ybkeyo": { "$6__s": { "_prototypep": "bV", "$6": "QQ34$n_UY", "R3N": "$8J$9$" }, "C5q": { "_Y$E": "w_$$00_Vz", "x": "$_$y$9ya$7", "bdb2": "_2toString" }, "_key": { "_$T$C": "$wup$", "_ha": "G____T", "_P_": "_$U$_vnT$" } }, "$bA": { "_": { "$TY": "AD$e", "W": "$Hp_y$rQ7LZ", "_3$1_a1_$": "Y_d" }, "ba_$": { "_l4U": "Cname", "Ze9_toStr": "$", "y$_d3brRdB": "Q$5$" }, "$$pY_f8$k": { "_": "Cd", "ZgAd": "lQOQ", "_$D$": "_M$$wVE$" } } }, "Y": { "VAb$": { "_$": { "UdtoI": "Scaller", "_w": "_$a", "$": "_vh" }, "$Zow7$Ax_": { "$_8Pyff$_": "$___3627VU", "Ef": "o", "Wi$$F$d$C$": "$_w$_A8bqcC" }, "e0$N": { "W__260": "__1G_$__", "$__$_Q_B_": "_$$K9$JB_", "O": "z" } }, "Bkey": { "_G$Z04$uE$_": { "I_P2t": "$O0_M8", "Z__9D$5_$$": "B3_QF_V$aeE", "D__o": "_0i" }, "MB_$": { "d4Y": "W", "___5": "nt$7", "$fHD$8$e": "w$c" }, "c$D": { "$$_": "Epro", "v$_2V_$": "__3$G_", "_2__": "Z77_$I" } }, "eA$_$NG$0": { "sX_$nc4": { "_$$7x1m$P": "b", "_Zh_M_$dk0": "w$F$", "Fapply": "De$aCC" }, "$13$z": { "$call": "_$", "d$$U_e__": "BcY_$", "_p_2$eW3": "_Fm_" }, "BW5": { "__": "$$_", "G": "_", "B_$y_ref$v": "a_23" } } }, "Barguments": { "DB$$": { "c$v": { "o$7cAq$u": "$j$K9p6fe_", "v3f__h44$_0": "z$E$2__", "w": "U__proto__" }, "$D$": { "_$o$DQ_mc": "$n1_f$6gR_", "_uQ7$0q8_": "a_$_vF", "R$$": "$ca" }, "A7$V": { "D$": "xu_q_bnIf", "za$Vb_R1__$": "CHQ$_$$$g$9", "A9shC$Bf_S": "v$1x_ns" } }, "x": { "ee$Z": { "c4d$ju_$7": "bt", "t6": "Zp", "$EI8uAl": "_r" }, "$v": { "$_": "E6Krinle", "c$__h": "V_B0QY$7", "W$4H$e$5$q": "Sa" }, "v3_3": { "iO1z$7": "XTz_sY", "a_b": "b", "CZ$": "X_g$q0$GhA" } }, "$6J9_": { "$ref": { "$YPV_iu": "$$_X65z4p5", "_": "__", "i_djo5dK$_": "_A_" }, "Vy3": { "W$_3Q$": "$refnstru", "$_$4nZj$$$": "_fr_$$$$", "N_Qz": "_" }, "$": { "_dr_U_$": "_", "F__SLN7qKN": "_n_3u6$56", "_y16o": "_$c" } } } } }, "HvalueOf": { "A2$R$": { "k": { "$key": { "U8_$$Jc": { "__p$4VV_L": "d7y6", "_63V": "$1$$pU__h$", "B_uM1$": "WqYb_4d6_U" }, "__": { "$mQ": "a", "_V__TK": "x", "w$_isPr": "b$" }, "c$_u0tkf": { "ik_6$hF$_0": "$d", "G$_": "Wcal", "_iFXe$": "bo6$lU6" } }, "R7Pd8a": { "$ref": { "_V$r2$$9": "$_p$$pT_7X", "_2$Ep": "_S6__", "_7meraproto": "$__proto__" }, "t$x$_$$C$_": { "Z$$$$$___1": "_c$ZyY_Z_", "__N$_F$": "b_Rj", "jF_$": "$" }, "_$_S4": { "$_Zx$xDvVmH": "b$_I_223$__", "cR__$_$": "___l8__", "R": "acB6" } }, "_6aVY2gtcee": { "_0W$C$": { "_ref": "_mbim", "_$_$_": "$mQ_N", "O$E$_": "_v_E_0_1_4" }, "$": { "Ld": "E", "A_w$9B1rf_u": "hB_5Wp4", "_4_zq": "U_" }, "_$__$77Z": { "Af$": "yz", "$vvCA__$0": "wtoString", "C": "_2CJm_$W7" } } }, "$": { "wcall$topro": { "$_yM": { "Dbx_U3r$_": "$eZOD", "e": "$", "CBcc02_2": "___V_" }, "$valueOf": { "$": "_", "dj_$2": "ZI_BNt4$V", "___": "Aref" }, "WC": { "E$": "_$ef", "s": "euU$a4$$_", "$_B__l": "$va" } }, "$x": { "$": { "C7_$L": "_6", "A__L$n_$": "e_$", "a$Y$U_": "dZ$F6DX$5_i" }, "W": { "$_$p": "CVCargument", "c_$$": "__wc1gE", "Kref": "_" }, "vvalueOf": { "$v": "$$__Wvme$", "_": "V_bI", "y_2_aA_a": "b__12Hz87$" } }, "$A": { "b3c$": { "_C_6": "$W210FuA", "o$": "__W_0", "_y": "cTy" }, "_U": { "nE$$_G4": "cDe_$SzviP", "C3Q": "_$$", "a4$_11P_V_": "$" }, "$M9$$15": { "_1_b568uX": "_w$E", "$pq6_6J8oB2": "$$$$R$M$_92", "Be6$k2": "$key" } } }, "Ais": { "_": { "Y": { "_$z$_o": "r0$", "e05_A": "aF1$_", "__": "$7s" }, "$V_CG": { "_ezPSBP$$$": "$_8_8", "X": "$_1$", "fGg_YU2": "_bind" }, "tD0": { "$": "I58$$_$__C", "$apply": "aY", "Me_": "__x_4o" } }, "CY3": { "_o8_Y6$X": { "XNa": "$VBE", "$$Pw": "s__loo", "__Xr": "Be" }, "Z3DV$2$$_1": { "$wt": "Xk6d", "$_warg": "$_$l01_", "CA_len": "Dh6" }, "_": { "_": "uKl35Y2$w_W", "_9$_$": "Bz$", "d4eY1G$N1$": "_7HS$x$v" } }, "D": { "$d$": { "vC": "_$$$J1$qtA", "$_53_D$_Y6A": "_EiE_p$m", "_": "BHO$" }, "y50Q_YH$_": { "_6J_": "$a", "d$9s": "Zv", "__3a$$$_": "_i" }, "V_": { "$_$__i_P": "b_d", "$6$$": "_name", "_": "$aa" } } } }, "dI_n$8_": { "Wv_d": { "__$": { "_": { "$toString": "vbi", "Xu$$_u_R": "E_CI0_", "$_5d": "$B__$e_$3" }, "D": { "_c": "_D", "$T": "o_0B", "Fz": "__P$vo$1J$" }, "$2": { "_caller": "d2$uAeab$$", "$$Z": "z79b", "YBzWav$y0E$": "_" } }, "B3d$_$5bq": { "ked": { "$W8op_": "k8DY_cN_r_", "_ref": "Dc$C3K", "_d": "A_0$_" }, "__yWw2A3V$$": { "Xy$E_8": "_", "A": "p$", "Y": "$1" }, "Q__proto__": { "_W": "L54$$", "$0_$f": "_$e8", "_R5j5_$QN$O": "$11bAtE" } }, "$k_$q2": { "Id_b": { "GVpb": "_p$$u_L5_", "c__proto__": "_Y_w$$_$", "$l$63C7$M": "dKH$$$c7" }, "_ca": { "z_8ER8q$9": "w5$0l$H", "$": "__D$44", "m$_": "$ca" }, "Ge5": { "_5a_$3$q$": "$C_t1$7$f__", "dk": "$Gw11Se3", "X9L$": "e$$" } } }, "$8_$y07Jn$": { "_": { "_23_": { "j_22a1_7E$": "__x_", "Z$$": "_6$Q_lHQ", "Eq$c$_": "$valueOf" }, "$___Bfy64q": { "zc1": "a", "$35$": "apr", "aM__0__bx$8": "B" }, "_": { "$_H3_": "$4G_$", "_d8Sal": "___$", "b$Q3_gsN": "Y_9_1O" } }, "Vm$$z__": { "c$$lF_": { "W": "A_r", "h_$": "C_$", "$Df_h$": "b_" }, "_$$d_u": { "w$": "_s__9F_9", "_$mconst": "_efi5typ", "C$Bp3_UGOp_": "lNAA" }, "__": { "_Y": "Kname", "___proto__": "Ir9_Kuv", "$$PNb$_2J": "$_2_$_j" } }, "S": { "$caller": { "_": "_ly", "_apply": "VC", "A_Xj$_65": "Fbe" }, "Fw$w$": { "DDe$$C$": "z$83$OKT_", "$$1": "$", "a$_l": "N_$C$6bt" }, "bu$dt$M": { "_m$U": "A", "x2$_As_": "Lprototype", "$$": "V$_$" } } }, "$o": { "c$Mp0$u$__S": { "_t_NwS6": { "G_": "$_2", "$": "$$M$OqX$", "$yp": "c$B5M3" }, "cZ_": { "$_W_": "_CX$A8_bw__", "D1_": "Zs_1$9", "_ACOwnPro": "_316$$_Wr_q" }, "C$2_39D1n0": { "Op4w_$q_m_": "$", "_Nt$$9": "_", "$E$857": "C" } }, "E_4t": { "C_6E$F": { "$2F5E": "___", "$$CH$$_Kf$": "$n3$Ca$a", "$7_I": "o69" }, "O$": { "$__Bzw_EE": "_R", "$bh": "IG", "b__CR1y": "X1gn_4_$_" }, "P_": { "c": "Eb", "$": "$$5M", "zineSal_": "G_$_$jV" } }, "w_": { "_$_$sKy_w": { "$$aa_X$I": "$$_g6$_", "M_$3": "XtoLocaleS", "_zrototyp": "_5" }, "IOvo_$_r$x": { "B$": "_D2T32_", "D": "s", "$$Ay$toLoca": "F$yq2" }, "T": { "kPrefUA_l": "_9$HY_tL_f", "b0l3$$B_a": "MDZpr", "_$_7": "_c" } } } }, "___": { "_ref": { "_e$$91$_": { "E_$C$$_b59": { "S": "$", "zjC$": "E", "__": "D_7I$L" }, "_$11_": { "_": "_8H$___k_", "B_": "_N__R_I", "__dec": "_BT" }, "$": { "e_fiu_w_": "Q", "_5_k_": "$$3_", "N54_F$_5GEv": "W" } }, "$_$$$__": { "d_": { "$__y$": "e$prototype", "cb2DzA_3_9d": "$$", "$h_X_9_$yfZ": "_39yV$n_" }, "OTkbC_$i": { "eref": "_ccallppl_c", "v2": "____SG", "d_x2f4Co$X1": "q_UC" }, "aef": { "$": "_$XH", "OF$5$yHM8n": "_D1S", "$V": "_L" } }, "ad_": { "U": { "f_$": "_uS6nq$", "$4D_$_j$": "dpr", "_$_R_": "$j$" }, "_j0": { "n$": "ddJsZn_$_4", "zt$N$": "_QC", "$0$$__Nv_": "e$$6$" }, "b$$mBo": { "dT$6x9Q_": "___3L99D", "$": "$A$o7", "$g_W": "Eref" } } }, "_$tte$": { "_": { "t837$_B0$": { "$$2fK$z0": "w", "b6$$$h9$__7": "__", "$W": "xaM" }, "k0o1e_PdW": { "Y2": "a75", "_": "YMe", "X__defineGe": "E$Uh_" }, "Y$": { "yn": "e29", "DW_$f2": "elPo", "$k": "D_bn$$Yy_h" } }, "___": { "$PtJ": { "$$W9": "_p", "$__proto__": "$xw1E7$_0$", "_oWeO$x": "_$_jQ$" }, "ZY_3_A1": { "$v0": "Y", "$4W$": "a_H$4", "Q0a_": "$Uw8$$J$idb" }, "E$": { "$BW$$$__9_": "_", "_3$88": "W$B", "zMk7q$_T": "cD_aA_3S" } }, "_$Mf7_$kr$_": { "$to": { "_J": "$o", "$H_": "$p9", "_lengthcale": "V_C$3NM$_" }, "B": { "db$": "dh", "_dTno": "$_K0__$$_7O", "Vapply": "__4" }, "_$Ex_": { "D": "_caller", "_key": "$g$_k_$8i_p", "Wname": "$" } } }, "V_$_": { "cref": { "$": { "v2_s__": "qq_$", "EASe": "___p", "M$": "_" }, "Ak_92": { "yb$2$": "An64a$", "_valueOf": "A_n__$", "x$$_$6hk$7Z": "_4j6$$y_T__" }, "_$2_D": { "K2": "_mi$K", "Q": "zN$Tt6Mx_7", "$BengtuisPr": "c1$" } }, "_$X__$7_89": { "_$$": { "F2P": "d", "$$$": "$2E7Rc7a", "K": "eX_" }, "AOMc$H68n_": { "D_M7": "aQgt_lj_$", "_w_F$_l_$": "AF3__$2_h_a", "_6": "_Yam0key" }, "_G$0qQ_": { "$eame$Vj": "Eref", "$A_8z068": "m6$$Y$7$_D", "a": "$" } }, "$": { "$32_87": { "_nam": "__e", "eke": "$6$_8v_1", "z_6$L_15": "_aVW716b" }, "A_": { "di58$$_$$_": "z$_$V", "$L6": "hJ__g1tV$_", "$B$C": "a$CX$Y2P" }, "$_5$": { "i$$b$q_": "L", "_$L": "_$__j$0_$", "AaOIbC": "x_r$_$$W0" } } } } }, "c1$_y__$_": { "_W$2": { "v$a$_$4": { "$": { "v$O_0$DAe": { "_0_k__$": "b", "d$6": "$_$", "du__": "d$VXP8" }, "u8G8AN$P_": { "R": "_$_q2$s$", "DzP2": "cM_F___qh__", "V": "LOIuU_n_" }, "p5D_nameneS": { "_$h4G": "E", "$tx1P$_q": "d", "UH2": "w8$$bVzLtf_" } }, "$1$f": { "Zkey": { "__$CA$V_1WE": "_q_2B$_", "Q8vD$": "Y", "_$$489": "$M" }, "Z__Wz$": { "yHg5": "$l", "_$": "wcall", "V_$$$H$4": "Z_$" }, "$_$$Bx$b$": { "p$": "Al", "a7$e": "_", "b_": "_$q4$" } }, "$_": { "d$$fL_Y$C": { "YB_E": "_68$$6D", "_2_$_$LO": "nR_$", "ecK7e$_6o": "__D$$m_Y1" }, "_$ke": { "Nn": "$_$Y$2", "_nameume": "_9", "__J": "$s$$3$2" }, "t": { "_b$Vnt": "$BHoO_h", "___W6": "Ix$_$$8o", "c$KjsEJT$$0": "_length" } } }, "Wf": { "n$p_$a": { "MaO": { "SDc": "Mwa$9N8$C$", "$byE6": "$1Q_", "$": "Dd" }, "$ahJdM9_$": { "$$F6$$G$": "tnb_P8w4b9j", "_Y": "$", "D": "M__HGJ_$" }, "EkupG": { "$$8_": "$_6_t8yg8_", "_name": "$l", "A7_QGM3": "bg___y8$DJ" } }, "___proper": { "$$_L_5$cT$": { "Y_": "C$$Iqx__", "Z___o9": "Z8$", "g$$Nx": "A" }, "n_name": { "D9_6n": "$j9__P$2Rq", "_17": "V_$oM", "Z$VY_": "g3MbJ1M$$N2" }, "A$_": { "UA_9": "aapply", "O618T$E": "md$R_U", "$d__C": "_6Bl" } }, "$_": { "D": { "_V8A_Yd3_": "$", "_mA$_i0$dT8": "_p_", "_$t": "$$zq9$H" }, "$V0_": { "y$": "$0w", "e0$": "$", "$$_L0o8e": "a_A6_Ya" }, "Vy$": { "_zu_1c1$0d4": "j__de", "B$$$$p$": "$T_J_8_J", "X$$P": "$key" } } }, "SMW$Qg_M2": { "c8T$L$d$__": { "D": { "$$": "op6", "_$7_": "$$_q_r1B", "c$bF$$14W": "_2" }, "_A_": { "_hasOwnProp": "d_$", "b__CU$_29$n": "$k$N5Pt_", "m__w": "$" }, "$xd": { "_": "$_$$b__wnv$", "i6_o_Dud$": "D0$_W", "$_j": "__" } }, "b": { "Z": { "j_": "o", "a7": "V", "$$w$_jJAd": "_92qaeb4$_8" }, "m9": { "_bin": "ZD90bE5$", "$u_$$qy$Y": "C", "b_wqD$": "a" }, "s": { "W16hu$6$k": "DRJ", "E_$R": "wC$", "e$5__$": "$" } }, "$": { "_ref": { "$": "_", "_C27_$_": "_WE2", "Cr$oN$$_01_": "$" }, "d": { "_5Tb_tgj": "Xapply", "$5$": "b_F$P", "$8$7O_89$": "d_G_" }, "$": { "$": "_YV63$$cEZ", "i_": "_EB_B_$SX7", "m": "BK$Sxp5_j" } } } }, "VUM_U_": { "b$__": { "wiZI": { "Okey": { "aJ3M_Od__O": "s4_$z", "$": "_bind", "G$$$$_M": "E$zp" }, "_d$sX01": { "Vke": "$_61c$", "_$": "_ec3K$1", "qpr": "_9__$_1" }, "EA$8FDL": { "$5$$O_tq_zN": "f__w$_$6L$$", "B02H1_Y$e$": "D_", "H9": "c_$C3$G_" } }, "v": { "_pr": { "L$m$6": "U__", "Wapply": "__", "$": "a_9mRB$$8" }, "h": { "__$$$$": "_4_Tas_H4_$", "vC": "_2", "p": "$" }, "$$": { "C08_": "_$GU_$Q$$_3", "_eJkEx_": "h4WqEQ7j7", "y016": "$_6" } }, "En": { "$": { "qb": "Ab$l_8of2F", "x$W": "mc$$5c", "$$": "$Q3A_" }, "_ku": { "cEs0": "A$F_j3i$", "B6$H5": "$$", "DIE": "_D3" }, "_a": { "_s": "$__looku", "DJ": "$z3_k0_$A$$", "_": "BpcW" } } }, "_E$9n": { "H$8Q": { "P_VR": { "__U$LGF8Q$": "$45jj$", "ym": "k", "C": "gvalue" }, "$_namecallw": { "f1$yS$$Dp": "eNE", "Dq6": "z", "E": "j$Ya" }, "d_xv_c": { "EP": "oLo", "_mpGetter__": "D4$XQ__", "w0l_": "$U9w$_7$QH" } }, "A_$$_S8$$Wm": { "$v$D7F8": { "iw$$1f$nyL": "$P__", "cjUp_": "_3ckbe4__T_", "_dC$M7$": "$_Xi" }, "J$_": { "e": "E__", "_EC$Aw": "_length", "_kf$t_": "d$" }, "Z": { "$": "eprototype", "__aX": "v_valueO", "$_d_Fz7a": "$_S2$0y" } }, "__4S": { "$9$__M": { "_valueOf": "___f_E38", "y$d$_": "E_", "a$n__fAgA$$": "x__" }, "_cal": { "b012C": "g$2_2f574", "C6p$_FSf$Z": "ytoString", "O$IT869d0x0": "$5tb_I$t$I" }, "W4": { "V": "EPv_qr$v", "$valueOf": "o_8Ue", "Z_N": "$" } } }, "a_6$Z": { "w_": { "vp$L_$__9d": { "C5E_": "Z", "_": "_hDm_VB", "a$": "_ef$$_Z$" }, "_": { "_l82$P5I": "_$7$$___de", "_uL": "z_NU3_$", "$gC4_OY1": "$kT" }, "n_e_": { "_": "O_5$", "i": "__1ad6", "_zaltrinuen": "$$$$l_8d_aA" } }, "V_1$_": { "G$$UCTM": { "Q": "W", "_$": "_ref", "y$l": "_" }, "G_A_0$_$V_A": { "Ad7": "D4_", "w1": "A08Y_M", "$2_32b__9": "x$" }, "b$": { "_isP": "$wQ", "j2": "c", "__": "_k$___" } }, "eQM_Th$": { "$33_e$$$p": { "xX3": "$$f_$_$0", "$WFb_": "$96$", "V": "_" }, "S3eVux_": { "_ap": "_e9V", "E_$y": "yr", "$": "p" }, "__NheL$5_sQ": { "_wE": "S_Wi$11", "k8_at__A0$": "$_$", "CDw": "A$S" } } } }, "PE8": { "Apj$T": { "$V1_75": { "Jhq$": { "yOw": "_$8$_TP_g", "N_$2_": "$6wr", "i": "_N8$0_l$jqF" }, "Xo_8_": { "E_39": "_$_$z_R", "_": "$$VefineSet", "_$A$cc$P0": "$a" }, "$": { "_E_8dEo": "A__lookupSe", "q_mG5_$_": "$ref", "$": "Bw$1_$2K3H8" } }, "N6toty65_": { "$": { "A": "$8", "_w$$_5": "l2$$Z_$8F", "$u": "X3o" }, "C321bG_": { "wd_": "c$", "$I2": "B", "v5e2D_$$": "Cef" }, "_": { "c5": "$g____j5T", "f3": "O$2n$D12$Cj", "y9$9": "sv06uvF$9" } }, "_": { "__$__0e": { "$__proto_": "o_3", "_aj": "$5dNd_vp", "$2": "$" }, "$m3F": { "S": "$", "v_$b$d8bv_": "_e6", "$R$": "_$" }, "$": { "eM$Y": "h$$Y$$$D", "_": "P", "PllAmO": "x7$$" } } }, "_Mt_68$$_6_": { "_length_con": { "_": { "___$5573": "$k", "_$a": "$$", "cUt6_1": "S99_" }, "$$x": { "ThBS_": "$vI_JFRN$", "_$_": "_", "D0T$E$2_$": "$bi" }, "Tale": { "$": "$a", "$kP8au2_": "_6_9U$_$I", "Zd": "jprototype" } }, "Ax_$": { "I__ZX": { "A___3": "vW$", "x_lo": "S$H6_lFhR", "_SO_OMw_": "r_8_0B_" }, "zj": { "$yZ1": "$0V", "a": "$", "_": "_D" }, "$_$0_": { "$V59___": "$$D3", "k$_8uh$v": "e_Y__", "d": "yPr" } }, "H$": { "$": { "qF0$$v3eE$": "EFA", "z_$f6_5": "V__", "$r_y_$z": "$h9G_9V" }, "IcR$": { "j0373$s__3$": "a0$db2_6_0", "Kref": "d8FHn__$", "_t": "Mapp" }, "Xy$$": { "O3F$": "w$8h", "S7D_A_$$__": "_$$PEu1", "$ef$$__0": "cc" } } }, "eiEN_$H_$_": { "S33$$__J$": { "_3_$28_k$3$": { "_5EzpH$4_h": "$length", "A": "fe$0", "RtoString": "c" }, "t2": { "_$$$": "b$c9", "$ref": "wdjkG5Z", "_t$4t": "a4$21_5_Ja" }, "Ex": { "_M_$o9I": "$bl", "D$$dp_x": "Y_c", "Zkey": "t$0c38E3VM" } }, "V_$$_z_6L": { "E": { "$": "X$Q8iS", "cC3$": "R_lo", "aapply": "$t___5ZmxF$" }, "$91$P9": { "_": "_$8l", "_$D44__m8_": "__K_0M", "LR$P$__7___": "lE4ZN$Z" }, "_key": { "a": "_L$03rx$D32", "___": "a$9H__$u1RG", "ce5_F$$E": "A" } }, "c": { "P": { "__": "C6F9qU_", "$8gF$": "_", "A47$q$nXlq0": "TE$ZnP" }, "He$7": { "A15__aO": "Zbind", "_P$K$": "$_o_", "_$": "__uqCf_4$_b" }, "xbind_calle": { "z1": "$refrgu", "E_$D8Z$X9I": "WOTt", "Yx1_": "Oy32f$7x_w$" } } } } } }, "_A__e_": { "_": { "$toString": { "____7_e": { "__": { "x$__": { "vUHy9o_LY0": "d_7", "yref": "a23TS$", "ho": "$" }, "_$$": { "E$zMfL$": "$_T75wED42", "_Ya_5E": "$1$5$k$_Cy", "_4qf$_nd$5": "$Ne" }, "_Z_0$0": { "DvE": "$$", "c_$3T": "_ller", "_x": "C3YN_$" } }, "_dX$$d": { "_CCUu": { "ZZ": "_", "we_d": "$", "epK$_": "$NT$e$$" }, "PT$_4$z$_v": { "$efi": "___proto__", "D$gP_b8$": "c", "$E": "yC0_74$_" }, "_": { "$$_$": "$9", "_6j": "Wo76", "rS$gj_q2_": "$$$_d$3_$d$" } }, "E_$3$": { "_": { "_$_28$$_": "e76$D1___", "$J": "$qPEM0$2d", "h0$a93": "$V" }, "XY$1$Rcda": { "_": "S2pP6_C8u3", "W_": "_r", "M$": "_$$01$" }, "_T": { "a__d": "A0$Pv6$8A", "$H": "$_cb7$_", "_": "Z_8" } } }, "C_": { "_40__$": { "d$$$Q3H": { "bX": "_d_", "D": "$$", "e_t": "_22" }, "P_e": { "_$J_$DEN$CR": "X_$$fKX$$$", "_s_f__": "dvalueOf", "e4": "G" }, "C1pr": { "Sbind": "$", "N_6Bb$0$D$": "WlC", "_F_$9$c1Q0": "__Z_$_E$Y" } }, "$": { "$Z3_m_j0L": { "k4keyet_X": "a$8", "Y": "bc", "$_": "$$WY$_z" }, "M_Hea": { "h7I$$a": "$rt", "_valueOf": "_e_2c$_$f_g", "$": "$" }, "x": { "D": "_3BMS", "z84$": "D_", "nlength": "iz" } }, "Pq_$1X": { "x": { "b": "w6", "$I4$q": "$arguments", "x___B$": "Cot" }, "_L_f6tu2": { "$": "C__$6G", "_8e_": "_u$x", "_aCcNE__2": "c$e_$A_oTV2" }, "_": { "a$s1AEtyG": "$_CC2T5", "$_": "E", "$": "_VM__b$2$" } } }, "_": { "pyj$C2c1GJ": { "$36": { "_41m_d2i": "D820__", "_length": "_er", "a": "e6PT8_Y" }, "d": { "v4_0": "d", "wjYMI24": "d__$X_tDX0", "__$WrYa_9": "$key" }, "_N41__1_$er": { "_": "_Yf$$3", "x$2mYI4$__": "D3prope", "_7": "$1M___" } }, "Rcaller": { "B7DzF1lH": { "_$0c2": "$", "C3Q9_p$": "$$", "e": "E_$d" }, "_IsE": { "___$9_09": "$kt", "Vlengthar": "Bref", "_8$$$Cp$$_": "lkey" }, "B6__$p_$": { "_9a": "$t", "$a": "$3za", "_zp523o$d": "i_yQ7n" } }, "$$4hX1$59__": { "_6uSB$$29vz": { "_B": "b", "O0$$": "y$t", "$q$7m0": "C11b$_d" }, "eup4_2_": { "vto": "$apply", "cB40Fh": "_", "_Y$_R": "A" }, "$_3": { "ekey": "$", "Akey": "___$fb$_", "B65I$O": "__Y3_6$O$$" } } } }, "_valueOf": { "$Y_6$_$z$": { "$$$55": { "dCe9l": { "E_$B0$w": "Zj_pMJ7H65", "_": "_nEZ", "Ojd__4$ADc_": "NT_" }, "__": { "_3_$D$ST_U$": "Y$_E", "ybind_": "E", "$0$Gv_5": "_" }, "Ze": { "$_": "___1$n02r5", "Vp": "E7_28$$$HJx", "QweO3$": "_E0U8" } }, "$QP3": { "$de": { "_3": "_$b", "ye_9": "_KA", "yB$$0e": "_" }, "C": { "_E": "Bjr$_u_OBo$", "_JGI$": "$$7_$_$9D", "X_v_": "$_e9" }, "Ey9$": { "XX6": "Wh$", "b_R$c6_": "$70Pd$g$_BW", "Av": "$$$a" } }, "S": { "f2i$v$": { "eD5": "$", "m5_mJ3pIf": "a", "B$_$__8_": "__" }, "$": { "$": "_V", "c_": "x2jO$$", "_1": "a1JU$1$$$8$" }, "_$wy": { "$": "_V$4_M$", "Yy": "_9_7$$$_Jo$", "aIe": "bargumentsv" } } }, "$$T$1_$": { "_CWG_$$": { "sSZl__y2": { "_a1$q$": "$__", "_ME__w1$7u": "o", "atoString": "C2M$9v" }, "$": { "__": "g7$_$X___", "WCCJ_28$$aH": "x3vv", "a$R": "_" }, "$$_6a665_": { "x$": "$$$", "D_Zl": "$ty1z9vL7", "s$D": "$fN_7_" } }, "$2_xY_$A7": { "Cn$_z$7V$_8": { "$$_$3": "_QP4C85_", "_23D_j$": "$G", "U$dN6b$_$_0": "X_YC_A_Z3eb" }, "zJl$$S": { "$9Y_": "ccr$", "adQ$P": "wj__1u$_$E", "$R$__n": "C33M" }, "WS4$$NX$$$L": { "Dtw": "_eZ$f", "vMqcv329O": "hW$6Di3_", "$$0": "$" } }, "$2D": { "bm6": { "vlen": "_", "__Cup7": "$e__A$apZd2", "$": "B_c_" }, "b$8_$$F2_1": { "_n$_4YeKA$": "$", "$C": "g", "_$$": "fprototype" }, "_5e": { "uT$k$": "l", "Sg3$6": "uD0_z", "_mPAT$9_l": "Vx$$a0_$_G" } } }, "$": { "$": { "B86$_8$$6": { "mE3M_o": "w_", "j": "Vref", "ykey": "_" }, "_": { "Xkey": "by_", "i9_0$h$3_1": "_e03", "Z30": "g7" }, "bJ$Q": { "_K___eXKX": "_hrefcaleS", "rS": "c", "__": "FTi" } }, "$u_": { "_": { "_R_x06OWwG": "AQ_36", "rap": "$D$WcxW", "_uX8WI__": "u_9p_$7$b_m" }, "_6$_$SX$_": { "Vd7TD": "_", "$": "b_$M", "_$6$$GO": "W__325" }, "_B4_": { "_D_": "_apply", "VAt": "_", "_": "Au_XWy$qd" } }, "u5$_$1$GY": { "dm8$B_J$k": { "e$C$": "dvalueOf", "m5XiI_R9": "G_q_$88_U", "a1Q": "___lookupS" }, "_name": { "_322": "_N_De", "$": "_", "$_$": "e_$aC" }, "_i": { "_": "_1S9", "p$2729$J__": "cyz", "a1": "$" } } } }, "_": { "$call": { "AYv$$": { "l9$W": { "_g6b": "$h3$", "_P": "C$9$T", "wU9Q_": "YCC3" }, "vtoStr": { "_ref": "A$$6f8e_Y", "$_$_9$6$$2": "$name", "_": "S0c" }, "e_": { "D": "_SY_O9", "$N$tv__2QK": "$Gc$", "da083": "_l" } }, "E8_U3": { "w5F$XANC89": { "CDM": "d$8", "_x2": "G_Z_0", "g": "AA" }, "b4c_$$_x_": { "e1F6_16Vw": "p", "$$1$6_": "Cv$_3_$q_4", "iBbindyle": "u$0M2" }, "$pSe": { "Fc": "__", "d$$V_": "$e___p___k", "v": "$W$u5$" } }, "$V": { "t": { "ij$_EF$": "_ar", "_2Vwb$_": "$o", "$o8$Q$": "_toSt8toL" }, "B0": { "_4m": "$_G$ZtQ_", "B_p$63_$1": "$ref", "j1$__WQ40": "_$$uQ$qq" }, "$$BsPro": { "_$9": "$_toLocale", "VEcz1": "$$n$", "_XQ6": "_QK" } } }, "__1cQzf$3X": { "xapply": { "$f_0q22": { "b": "$UxWr__29lx", "Y1": "_QcJ", "xyU": "$_n" }, "d$_3$$": { "dU_vw$_7$": "lt", "wcall": "_$__defin", "E": "SB$_$$_S06" }, "XYki_PQ": { "k9LA": "$t", "__q": "hu$V", "X$": "_" } }, "b$D_$": { "___": { "B": "$", "y_$G$y__$Xd": "_dH", "$": "_u$$_a3_8vK" }, "_9$": { "z": "__Z__Pyf3$", "$m$_tP75$": "d", "$_": "p3_4_Y2O_x" }, "_n7w": { "_7$": "A7f", "_": "___ax_", "U": "l" } }, "_lrn": { "_X4$I7P": { "m$B": "Z", "c_$E": "L$", "d__d": "_$_mm$$38" }, "Gc7_7hcw8XG": { "Wij6__6X": "$$_", "$$z$": "$_T1", "_": "WA68_xQT10_" }, "$_$_w": { "h_": "_", "EU$0_A": "A$___$$", "_81$$_P_5_": "__defi" } } }, "v": { "E0": { "_$": { "___o$__$_o": "_le", "a2$9": "_", "_$y_": "_$X_" }, "jVi$b$9_": { "Din": "$_", "s2$4cX97": "$_c", "E$y7": "V_1_6_" }, "E_zW$_C_": { "fN_": "_key", "_P$lOr": "$key", "bec": "D$i_I939c" } }, "_$7$_upc$Y$": { "_bi": { "_u$51_": "E__$_6_rS_", "c4_Y$__": "d$H__6$", "_SfG8": "E$_xb$" }, "_": { "_8j8O": "P6$", "_1": "__$$G_", "$$6": "$Wb1V_jzue0" }, "k8c$____": { "_q_3P": "$s6_3wx", "_6H": "NN6$_3R$z$", "e": "w_ePv_B$$l$" } }, "W$6f": { "L7e9": { "xe": "$__M", "_$Ed_$YF_": "A_e_$03$p$_", "$$__1": "ZKB_f4$$_" }, "C$c": { "bgvalueO": "g7", "$": "_4T", "___": "Alength" }, "_": { "$7_": "_bo$$a$_v$X", "V$F4$sL_": "_Y6_qA", "$d": "W$wT$3" } } } } }, "s0$j5$7_": { "Bprototype": { "Az": { "X_3$T_$j5M": { "Ee$$6": { "yvalueOf": "$t_", "$Es2": "E", "$030_": "_YO$m_2W3" }, "$toLocale": { "_a": "_Gk2NCij", "$EO_": "Z9", "Nt$___$2F8u": "c_$X36xx$_" }, "$": { "Xref": "__mN2_R_KK_", "$eG$": "$_$", "$": "$" } }, "J$_": { "_$": { "$I": "$DF", "w$z6_wO$": "$key", "$2": "_" }, "bal": { "$LH": "I$S_O$$78__", "_V_oig_$V_J": "Bv", "_V": "mqW" }, "$B$Yd3$": { "$to": "B", "dvalueOf": "h$_4v53", "$": "$Ry9HR_oYr" } }, "_gt": { "Se_": { "$A$w": "_$$", "c": "__", "tapply": "aSn" }, "eWL$$hq5": { "bDP": "y$5_rO", "_3$8_$9y": "$$R_0_6Ty", "CC$_7Cm": "$_u__" }, "Ayconstr": { "T$_3e$": "uwCP", "B__p": "v", "p": "Qo$Xleng" } } }, "B": { "$$": { "_": { "$d$": "f", "e$W_$70": "_", "e$s": "Z623" }, "___defi": { "iItZ$H_": "$ocal_", "M$": "B", "_hM$4$$": "$" }, "y7B_": { "_qP6": "B_QK0$g", "G_": "D2_$$", "$gO": "_6y$" } }, "C1$$WwV14d6": { "_f0g": { "gZ_8": "_", "$14_cI_2": "$3$G2", "$_r_": "_$ZlO" }, "$$6$_3h$_Dx": { "$": "$1X1_$$Vf4$", "Pub": "$$$lw_$f6", "_": "_$_$$aj_tA" }, "m$52ijXBW": { "v0H$x__Z$$G": "$", "Cd": "$zl", "N$U$y_$I$$0": "$9" } }, "UvalueOf": { "cKwA": { "$_O": "_7", "$0$S_g3": "w__7$_", "a": "_$" }, "j_": { "$t$9_20$": "G_jp", "$prototype": "z_l", "e_": "$caller" }, "$_2T": { "K3": "b3b$", "ina": "__$0_8", "EFk2": "_ha" } } }, "D46_$_J9": { "c$$t$6T": { "$5wYE_0B1": { "$": "$caalue$__", "Z$": "_ap", "dT$V": "a_$Bb$_$v3" }, "$_": { "yX": "k__", "LvalueOf": "$c", "__$_9$3__$k": "$" }, "F$g": { "_valueOf": "$3Cx_D_U70", "tts": "B$$", "X__": "T_$_p" } }, "C": { "L$__": { "$$_": "e6", "L_$f704i___": "c1ytr6er__", "EvJ2V_4": "wapply" }, "$t": { "_nSu2": "_3H", "_": "$w", "z2__d": "oO50$_N$" }, "_6_": { "Z__": "Ck_Py_$T", "cs4$5z3": "y$PR", "C": "L$__h__" } }, "_": { "$": { "dw0": "_f___3__", "jU_$uQ$R": "Y", "ekey": "$e" }, "__": { "_$__2$UMLr$": "_5$fU_6_0$", "F$$": "y$$$nJH___A", "$L2_$": "AX_8E$$" }, "_9_G_T$R$1_": { "_nam": "_W$ap", "LC9$Tp": "$6$VYl$", "_d_GV_u9$V": "rvT$3kzwxQ" } } } }, "kEZy": { "_KC$r_": { "$__Vc$$": { "$n$$": { "$H$A_": "E", "_$b": "$0Dz1_", "_apply": "w$$l_4_$1N" }, "__": { "$dG$_x9m": "z$eXu_i_", "C2l": "_32__q_", "_keytoLoca": "__" }, "_$": { "LreS": "_cal", "W39$_v_d": "_$$_4", "$_443": "F4_$_8_uRBW" } }, "Aj_": { "_htoLocaleS": { "_R$": "v$0PU$4$CS", "_t9q4": "$bind", "___d_$_cAAr": "Exz_$791_Z" }, "$_wkeyZ": { "$XY": "_661", "_O": "$wA_", "$_": "mm" }, "_": { "_callerC__": "Zt", "d$$_D$4_4c$": "_bo", "aT__": "H1$7" } }, "$$t": { "$8_$_Y5V": { "$": "_8_Aa", "_66pH_gn$": "l5T__$_", "H1x": "_0_0" }, "_pro": { "_valueOf": "A", "_e$__prot": "W", "Dr6_OZ$$__": "$ZLAR$" }, "$_k_": { "TxCa$j_$2$M": "$U_", "y48_": "a_9__$", "_3O$_1_$cKM": "_toS" } } }, "lb_A0$a": { "sQ$": { "__03_": { "_2ein__": "ivalueOfns", "_": "R", "_3": "_h_$_" }, "$": { "a": "_rS$$gzP_Q", "___": "c_84__", "$": "$0$__P" }, "X_Q_$$u$76": { "sg06$5$e1": "_$_NR22$_s", "h": "Y", "w$$___8_9": "W_WQ2l" } }, "$$_isPro": { "x1l": { "e": "_5$V", "_l$": "e$K", "$Lut3x$$Zs": "VhasOwnP" }, "$str_6_toSt": { "b$I$$_i": "$$sl1$_$0$7", "t": "a", "VDk": "_8$7n9C" }, "_K": { "_31": "Y", "DaE_O7Gz_$y": "_A", "$_o": "___" } }, "___proto__": { "nhasOwnPr": { "X$": "$Ly1", "_a$": "__39__$U", "D_": "u$r" }, "$_$s_": { "$": "$FaC", "$L_": "s6K14y__o_", "X": "u" }, "Qc": { "NUB": "Cbind", "_d_": "earguments", "v8U4C_": "j8" } } }, "b_": { "bo$cqA$4$$c": { "w_": { "_3c_E4_7O_$": "$r", "v3c7_eM_$$d": "xbn__12", "oS": "__E_aOfJ59t" }, "_zG54SH": { "_1d_": "hzH$", "__$6z_1s": "$apply", "$": "__" }, "z_C_EQwt__": { "__": "S0z", "$": "W$D0", "$$": "_" } }, "$": { "$D$$8": { "ad0epLb_": "_$zn$cGZ_J", "Y$": "A588", "$_$ROh_p59c": "ADq31" }, "ljl__$P_x": { "AdvH$nHa__x": "C_M_", "$95P_": "_$w", "$$X_": "Dw" }, "zj": { "$_l": "BGpP3cJNN", "D": "a$rl_", "X": "aY" } }, "UC": { "_1$8": { "Xt": "y_pT_5$$", "y": "B$e6has", "_9to": "y$" }, "_6__l": { "_": "C0o$nU0c", "_QF_": "_ncWe44$$R", "$yZw__O_EY1": "_6_M_E" }, "As$__6r": { "$_7e0_$": "$", "EGQ$$q60_": "z", "B$hG$fcF": "_" } } } }, "$$___lookup": { "_R": { "$Mex": { "$": { "_70$Fj_c$yB": "$toString", "YOW$_jN__": "m", "r3W__$$": "$" }, "k4_$": { "$t__": "$I0o3A9D_", "_$$$": "$HQ7_Srq$", "_4": "_2Zx6H$0_v$" }, "d_0": { "e": "d", "$$_": "V_3$R6$", "yd$x": "A__proto__" } }, "RAQ__s$UM5W": { "$_": { "B$tm_$$_$$G": "c6_dC$_4OLj", "$g$": "e", "_$___dK_0": "_$5ZHC4O14" }, "UC": { "U_ZP": "$L_ucKk", "V6$": "_$1$1D_$E17", "$": "_" }, "$Y78_r$_h": { "cre": "eUSf$", "$f_V": "jname", "_L_6q": "B__" } }, "$": { "d$": { "D__49I$A": "$_r", "$$_s": "CtoString", "C5$$": "$9_$I_$$$" }, "X_90o_9": { "_wb7_$": "ZG__jT_", "_$_": "Dr7_Fb_6_y", "nzt_": "$_vv$0h$Z" }, "HB": { "$2S": "$", "Vyp_$$wSref": "o_6", "aGX1N8$__": "$" } } }, "$K5": { "$_in": { "De": { "_$": "c3$s", "_1_0__$$7": "$_d_4_", "aH_$zuz_W$": "e1l" }, "$b$8$": { "_": "c_B_3$ka$_q", "x_H$_m$": "$s9_bW__$za", "$k_m": "_$ET_it" }, "vv0": { "$I": "Eref", "__": "k", "A": "a" } }, "w": { "A": { "Y_$": "_", "Ww": "BFHreQv_", "$$x": "_TVxw8$Lo_" }, "$_3": { "_rop_1umen": "Ekey", "Y5$P": "_4", "e4g9MiT_$_$": "_B" }, "_$8$__P28": { "$d066_1_PX": "k91w2", "jprototyp": "Mt", "D$2$j_1$$": "ilength" } }, "o": { "_I$7V": { "_$m7CAH_$$": "w_7PN", "_valueOf": "x", "J0N$2": "b7_5_$" }, "EJ": { "u$B": "___1e0", "_9LT0$F5_": "x3S1$u_b$$", "$g3": "$wnPropert_" }, "c3prototyp": { "X_D": "yf", "$F": "XokupS", "_g_$_A00": "$$5K$_w$m" } } }, "Vn": { "p": { "b79AWD6B4$": { "$": "Z_$3_7", "VhXb": "At_", "$_f": "_BD" }, "F4DY": { "y$x__$": "$h", "$ref": "$3$R$34", "_o0": "_KD___" }, "_J0bi_pro": { "oarguments": "a04", "_": "_", "$b": "_" } }, "$$$H$$_sfD_": { "_lh_SyVel": { "$3pd2b": "$rb", "aBtv$S$7C$a": "_2y7$", "$$$0o$_W": "c" }, "DC32Lc$_gQ$": { "_$l_$C__": "BWTL3b2cuOI", "c$": "eC", "__v5": "K" }, "_ap": { "_$i": "$", "$toString": "_C$1B31", "_7$": "_VE8" } }, "aIswau3_W0": { "R5$$$3$G": { "vcaller": "_a", "__": "Y_V", "$02": "$xuns_Z" }, "WJ$": { "Wz$": "J3$e_7", "C$3y$": "$at", "c1G$Z_Sm$_7": "N_" }, "QF7": { "$$22argum": "x0_ekz", "zk_a$h$l7Z8": "_6Bk", "$pE9_$$$_y": "Y$" } } } } }, "$fe2_A": { "$na": { "_31Mh1_3$": { "$Eb$2X": { "d$9_K___": { "CH0k$_s3aZ": "a$p", "$4_3": "B", "$caller": "$E_Cx__YA" }, "__2$": { "$2y_": "d_qXi$$$$", "$Ns02_O$$V": "$$SFE5_$4$_", "_o569_": "$nW5" }, "Dref": { "$hgVyze": "h", "$$S7e": "X", "$78o0rE3_": "$valueOf" } }, "$bpV": { "$_X$v_": { "$3x$$0$_n0": "V5__$", "x$b__m$": "C", "QK6_$_7": "oN$_7vc_n" }, "$67ZQBy$B": { "$S": "A_5", "___": "$i7h", "_Oaacp": "_N__" }, "$5$": { "$$3": "D_P$7", "_": "J$H$Qr61", "$8U2$gjQ": "_" } }, "_7": { "_fT_bi$B_2": { "$arguments": "X6XB$zTu_8", "_$": "_$", "P": "xsOwn" }, "Dd33_70$DD": { "vn8": "wabc", "_": "$", "E$t_pE3B$$": "m" }, "__i__H8n": { "$_h$$_m": "v_$zz_", "z9$$K$CRX90": "$s", "c$": "c__" } } }, "XA": { "b_X_$OO3": { "$uG": { "lM0g$_$F$": "__$_ki$E", "xhT": "cq", "_TE_": "_b" }, "g": { "$": "_$_8", "_X_YDE7": "_sO", "$X$H": "LH64" }, "B4le": { "bOK__Go_2$8": "vtoString", "b$5$1M7_": "__", "rf77$61P": "v" } }, "$9x$559": { "$L$B$3": { "L": "f$", "ApT$$cL4$s9": "O4$$4b", "$": "$G1g$j$9__" }, "_P$Y$": { "$3_Q$": "_$", "_3P58$_": "eQ1VOw", "e__59$_": "d_h$" }, "_q$o6Oq3C": { "gpF__jVq_": "z_$Y$8", "Ccall": "_2_W6$_d_V", "e_": "w" } }, "a$Jr$uO": { "_$Aa": { "Lr": "$", "_DDAb1m4Bd": "b__0", "__z_fUz1": "_Gb2" }, "__Q_$4": { "_Zo9": "WnameisPro", "Lref": "$e", "$9_at": "__2T93lY" }, "_": { "__$Z_C": "kdbindS", "_tz": "_l", "Hc": "_8d_" } } }, "W": { "w": { "o_j": { "$SC__de": "$j__B_$y", "$$9_": "$toString", "_1LX": "BBw$W1$_$__" }, "a": { "Bproperty": "X__d", "w": "$ty", "V__defi": "p6$_81$kydl" }, "$42Hc_fB_": { "x_$$$$": "D9", "$0": "$e", "$yIrUA$": "_" } }, "_01$": { "_$D": { "_WZL_1isl_": "$e", "Qref": "a", "_L": "Dd" }, "_2q$": { "_$_i": "LK_X$7", "$__proto__": "___pr", "c": "KgWn$" }, "A___$5$1$pP": { "$_$$7$5_": "C2", "__8": "_", "_$3": "$3$" } }, "c_Xk": { "W$keb": { "FZwJ_q_tB": "$", "Q$c_$_": "$e$A_$x", "$_": "Bha" }, "C__v_v": { "_$_x": "I$0A", "_FKMI$qKK": "_has", "$0a": "$_k" }, "fy3a": { "Z3$": "__Y", "e5U": "B", "$8TGj$__SI": "$__9_$4IcF$" } } } }, "____$$1": { "$wI_": { "$valueOf": { "_": { "U$___$A": "Mf9U", "cuIG9$_r$n7": "$toLocal", "_": "umJ6t" }, "V$9_5t_lC": { "cvalueOf": "K$8D", "_valueOf": "_ref", "_p$_": "r__" }, "V": { "$$proper": "w8$Rw_", "_": "_q5$Qs4$_$$", "$_": "X_$$____" } }, "a_": { "$r": { "Dprop": "dw$Q_$t1", "ca0": "_0_$", "_ey0a$td_1": "$_n6MS$$_" }, "$_l": { "$_$": "c", "_": "_2", "Ekey": "z__" }, "t": { "_M$$": "z", "b$_$8N$": "$", "xV": "S$_5_b$7J6" } }, "B_$_d": { "_8$3_$": { "_K_$26$$j7$": "_a", "_Lz$c$$K9": "c", "D_": "zw_c$v" }, "_$d352_$O": { "_s___": "p$CHCq2L", "Akey": "_55y9$nc", "_$G": "$_$_$$__JW$" }, "$4_p_": { "D$Rbw": "m_J", "h": "$", "$t$": "u_k61g_H" } } }, "$3": { "c$__": { "A_BH8o8": { "_$Z3_$X_": "wr", "__": "_q$10", "dG2_$": "$$$$$_K$$2_" }, "_": { "b_g": "OA0vK$y", "eX": "_valueOf", "YG0Kn0_n$Y$": "$_B" }, "_6": { "WK_$_EDs": "Ae$", "Ep": "$__$", "r_$_": "_" } }, "k_": { "___$An_q": { "$F$r_": "$", "bJE$": "_", "h6mc": "cx8_" }, "$$ETt$": { "AbEE70_": "C9$0", "E": "$$_$_d$yF$", "$VWlength$": "ztt$bind__" }, "eI02___$$": { "Ds5EL$4": "c", "X____I6": "jaw__7j_o6", "$_0": "X_u$d" } }, "_n$h__": { "mPHR$$97mQ": { "_$6e": "vtoString", "_Ue": "X", "AtoString": "$P_m$4" }, "T6$$w_$_GSp": { "$valueOf": "_nY4$_", "$3xB_dp": "$_", "_dkb6$": "_$040A$8V" }, "__X8_$Eata": { "_pr": "__2", "$_": "e3_i", "XeJ$__j59$0": "__V" } } }, "_ef": { "_": { "zAE_O4H$": { "_$NJPPmy": "A7$r", "VTX_": "ZC", "__H_9e9BO$": "$_e" }, "x": { "_": "$$", "$O$": "$9di_3", "$key": "$2b_" }, "Ax9LW$P6KG": { "$_bD$Xt": "Clength", "g$_2": "_", "$A_L$$": "$2" } }, "C_l2$J": { "J": { "Rk0$9C6$_": "fW_", "z2": "if5n", "Rre": "$_$$D_d_$$" }, "$c": { "$": "cF", "__F$u_9X$__": "c9E", "_$0_2l_VN": "$ref" }, "t$Iq9": { "_mc$": "$$$d__zB", "$4": "Hd$$z_M", "$0_$53xX1": "_Y__" } }, "_yu_3s2": { "j8Y": { "$eP": "v$4_P$795", "_3_9r$j": "$7", "X": "G" }, "_": { "z5": "azW$_r__g2o", "g$b": "f_Bt", "W$$$Vg$q__$": "dgd1$I" }, "$F$": { "$h3_g": "__0", "iu__": "_", "$g_": "$$oX__$$t9_" } } } }, "q$__": { "B": { "$6$472": { "_1": { "__CyB5l": "Cs21t1R9_o9", "_Y7lV": "e0", "N$z$": "_$94W5b" }, "$": { "_IE": "_z", "M_$wA_n_": "qlo3q1", "E0Ii$3_": "$_$5" }, "_": { "d$x_$7L$S_4": "_$qB", "_length": "_y$", "C2$": "__" } }, "$arguments": { "_key": { "_": "a2$$l2VK_6", "E$A$yV_4m3l": "_Bj5f_$__v", "$4$": "C" }, "z_$_": { "w": "btoString", "w6$oduD$": "$l", "__$$8ZTZ$": "ZtGw9f_8G" }, "_": { "$1Yre_": "_D$_RtVP", "E__proto__": "_oO$C_", "yj": "a$_e" } }, "c": { "$": { "w": "ffK", "i$": "gpr", "_O9_9": "$O$_" }, "_3_h$83": { "I6L8$3$C__": "_n6", "$iE": "X_", "$key": "$Y__" }, "$A$": { "$6AzY": "$TP", "_xI2$v$": "At", "b$h": "T" } } }, "P$wmL$_kso": { "$$": { "$_FB": { "y1xR$$_": "_valueOf", "_t__V": "y$Z1", "c": "$47_" }, "k": { "$9Av$$S": "a$1$", "$G$": "KcI9_", "$$e$": "_7y_" }, "z__proto__": { "E16": "Pre__looku", "$$___H4$": "i$L2Y19$E_", "$": "koO9Z_c_" } }, "$$28$sI$L7": { "$wr3": { "V_$": "xvalueOf", "$$_x_w_": "u1", "yy993": "l2c" }, "$$_hasOw": { "ac": "BV_7", "_": "$a", "$3cnw_5": "VB_z$6Y6$v4" }, "wkey": { "$_$": "_key", "b72s0$it": "G$", "J27": "stoString" } }, "__": { "mp": { "$_$__95$t": "b1_", "$1lOdvF7u2": "Zz", "dx$z$$BO": "__" }, "__arg": { "$1": "$_isPrototy", "__ySY1_I": "VA_", "$$": "z_z_v" }, "JG__$_Y__Zi": { "$$W_$$R$": "$c", "_Xp7_": "EbVp6tUIz", "_x4Y$V": "b$e_" } } }, "$key": { "_y0Z0A25X_l": { "$_": { "YB$zt$q_": "wW_", "$_Pg3": "$_8T$V$2$$", "_$": "cu$" }, "_c": { "___loo": "Xref", "_h8$f$": "a_0$FYz$$a", "Zre": "hnamnameB_A" }, "_$i53$_": { "_": "d_W6_JY_a0", "_L": "$app", "Di": "$ref" } }, "Ow_B": { "$8Qqf_89": { "Yi": "$UU6Z__e$", "_ett": "X_w148$$$", "Cz": "es__$$$ad$6" }, "$8_": { "Bkey": "w", "mapply": "Bc__", "$ZsX6l_x9$3": "pcall" }, "_54UhY$8$qS": { "C_": "cK", "d": "E0", "_VwJ451": "$Y7h" } }, "$oR$gGS5t": { "$ke": { "T$Y$$JAM0": "Ale", "_LrtoStri": "eC_jRj", "$C6": "xC" }, "_$A__p": { "_0$jy$$": "a_BQVc0$zRa", "_a": "YbG_$_c", "acl": "$$" }, "_W$": { "_$x$": "Zy_8_$$__V_", "$J$t$D": "C4___V", "E_0t$_D": "__" } } } } } } }, "__nf": { "$ees_W3": { "$1qI": { "_V__$62$_": { "$9r$": { "_": { "_": { "D9473T": "F$8", "_$_2$$$_8$o": "car", "$7$C": "$$$" }, "c": { "$b_C": "l__", "$": "$Sj$_Z8$_$", "_ct": "N$ve" }, "_1": { "$Y_$": "$$4", "e": "X__y_bBY4i", "_5U_4": "_bB" } }, "$_U7a2z2X$": { "_1": { "_VU$8$D": "$k", "$": "W_Ap3", "Yog$": "_" }, "_0": { "_1_$$b$_tj_": "$valu", "_isPro": "_$D", "$LryH$E_$": "e_OZ$_$" }, "A___Z": { "dQ": "Y", "Ecelengthpr": "_s", "$5$$": "_1SA$89" } }, "$9H_z$$": { "x$_": { "EujsHu_": "Ekey", "u6rM$": "$q", "$k": "$_e_62" }, "y$$_": { "e7$ds$": "E7uX3a_mJ8v", "aUK_": "_ref", "$_an": "_AZw" }, "i__": { "$key": "_8s$$DN_", "$toString": "$z$$ry", "_eP$": "_$$" } } }, "z": { "M": { "$5I4_": { "A": "Mapply", "$LD2": "c_$", "__o0_r__OZ": "y2etoSt" }, "U": { "U0$": "O$o", "Fyc": "$4$8U$074BL", "_": "g$t" }, "Q$b": { "e2H$E$1a": "eref", "_Cbin": "_9ttec", "bfC_$f$": "w_B_CD$X" } }, "_g0": { "$2_$_5G2J$": { "$_En": "dL_r", "Dk": "$", "A$": "B_yV" }, "_": { "_Dll": "C_sbh4L_2$", "a_k": "I_c_VB", "$_jYW_W_9": "$na" }, "M$": { "$x_": "d_", "$E0$_": "$__3", "s$yx__q": "a_0Q" } }, "_$": { "_Z_": { "qref": "lD$g", "$rB": "D3K_E$$L", "__$d_$__ce9": "_C5$7$FrO_W" }, "$$2a_0ao": { "z_Q": "_7__$1_", "$S$M$$9": "e$0X", "EB": "$AUUd19$_" }, "_0$$_0_": { "__n": "b$h", "Y8_": "E", "e1": "$B" } } }, "$": { "e2Ao_0_3K": { "xD$": { "$ref": "_$6", "V_a9__": "B$_e", "$U": "_$ydu_89_" }, "$key": { "z$_5xA__Oq": "$2c0", "wkey": "v", "_U": "Y0_I0" }, "_$x_W$$h$W": { "R": "__$$", "$8_E$_": "$", "$_$1_$jZup": "q0b_" } }, "$_S": { "L5Xs_x$01e": { "w$31": "_02t$E7$3", "_": "x_3$w$__A$", "_b$7_pro": "a$A" }, "_valueOf": { "$d$2$": "H$", "$Y$": "$", "rS1oj$spJd": "Cd3swo" }, "y_j0$v$7$$": { "d9": "__9_a$_$", "_": "zL9$", "_24_j$$HkE7": "Zapply" } }, "y_y_94yyfWu": { "_$_0FXi$4$": { "HY": "$", "$I_JN": "a", "s": "$proaw_0loo" }, "b": { "$_m": "$$7$$$6$$6", "P": "__l", "PSm$": "Wq_A$_M" }, "_8v$1": { "_": "bB", "Bd$$D": "A6__l", "e418_$_$_UR": "__F$$$$" } } } }, "x$AX": { "B$_g": { "x8": { "r2_s_": { "$24": "_property", "$": "lr", "yH_3K": "_v" }, "C": { "_ringname": "cinh", "$ref": "BO_", "PjCWE": "R_s" }, "_C": { "_M$_6k6uG": "d_$O_2", "WEQ_5$$319c": "$", "Z$kb$y": "$__$" } }, "$RI$8": { "ZN": { "d9$$_": "i", "_U": "dDs0", "t": "C65DQ$__" }, "$12$": { "_ET": "_$9$3E$_b", "D$$t__7K__": "_", "__$a": "_4Ed$" }, "Cc7v": { "_n": "bpFA$$a", "$_$__1WD$q": "$K", "wx_": "$valueOf" } }, "a___c": { "_n8Yi5": { "DeO$etter_0": "e__lookupGe", "$2$_l1_$$$": "_0Yo$E10l", "di$xf": "ZXQ" }, "X9": { "db$": "atoSt", "eIr_prefapp": "_$", "_$0": "o_p$___c$" }, "_9__": { "c_d": "_3D_$c_Md_", "$1": "CW9_3$A$b_8", "V$ume": "_c_A_Yq_50" } } }, "$o$p$wv9": { "D$re": { "_$bE_cC_Di": { "XkzBMPM": "_", "_appl": "_$_", "dK": "$_lengt" }, "Fref": { "_": "_isP", "$_15": "D$CD", "___Roo": "_vv3" }, "__Oi": { "_": "b$__", "_ND_19": "ED", "$key": "$" } }, "$b": { "D__e_e__Vz_": { "$$cz$": "$p", "UFrlj$": "$2$i", "$$keyar": "_BL_o" }, "vF": { "a": "v__o__", "$": "$apply", "at_$gG8": "e" }, "e$": { "_": "$J", "K_yz": "$_callerme", "___D$c": "$to" } }, "$6": { "u$c$4eW$": { "L": "$Y", "_U": "_Q", "$xBe9I$$$_": "dQ_3b2s" }, "$_tC": { "W__y": "__R$", "_$m_FHl_1$": "A", "_oG": "_6jW1_$Lm$F" }, "$K": { "Icon": "$Bb", "p": "n", "$_C$$f": "U77b2" } } }, "W_i$$": { "$p": { "ZYVld$2Cd_$": { "W__proto__": "$", "_$gy5V$z75$": "R4$E4_", "P$_": "cw6_1$J$" }, "Y": { "C_$_": "_$$q0h____9", "__G_": "BCr", "$Q$$U7": "V$k$6$" }, "E": { "_7_": "H_Hd4", "cc": "$K$T", "e2$": "ch" } }, "$": { "$_": { "e$": "g$y$$z0", "Bn$$$2Y": "wkeyoSt", "__": "$sD__" }, "wQ$ll": { "$": "$d$", "cJ$": "xg$", "DYjm$_": "$" }, "$$": { "$_04o_ut$": "e2$$C_n", "W__": "$c$$enwnPr", "___5e": "g_" } }, "Yname": { "N_t": { "$": "$7y$Y___n", "E0i5_": "_yP$7L$", "$valueOf": "N40_S" }, "B": { "v$_dT$$": "$", "b$": "_to", "$__$1oN9__2": "A__t_$__n" }, "_D_d": { "_0q_e$$8": "Dw$$yJ_d", "fK": "rsEw2l", "_8__I2_09$": "eAvalueOfg" } } } }, "z7J_riokz": { "_MQ3ZzWuha$": { "z14V$_3_$s_": { "Ccaller": { "$": "X$_$3b$_S_", "Do2P9j__zLX": "b_yME$9$U$_", "$g_$$$Qd": "_50" }, "$287$f_$$$_": { "b4G___A$$": "__", "z$CV7oO_": "__7$", "Kr__": "$02_" }, "_": { "v_": "$", "z_0": "D_2", "$_D": "h6x" } }, "Bw$L$__80": { "Z": { "CAWhasOwnPr": "$N$$oC5", "ttoString": "S", "Bhq_Q__D": "j___$4$$7_n" }, "$_": { "$": "_OWB", "j6": "wv$2", "yYH$$_CV29": "Yj" }, "iNc3": { "$_V_9_o3$": "P__M", "H_": "$D_j", "_T801_": "dj_G0$4" } }, "TcallL": { "$": { "yB6FXRdv5$": "$27O0cuT$", "skey": "W$$", "$_": "D2CM_hn$9_" }, "__d17k1i_": { "i5Nz$O$P9M": "B$_3_s_r4E$", "$r": "L_", "y__$_$dwrQ": "_key" }, "__$2": { "dpropertyIs": "F", "dnamvalu$co": "_$$OB", "__j$b$$87_": "BwH_B_" } } }, "A_I$": { "$x9": { "cEnu": { "$$pr": "$", "r3$o7p": "Ev_$", "$$9G_$pG$g_": "I_k" }, "_m_$": { "ZZ_o_$": "_$__r_s5__", "F_": "$apply", "$Dva": "D3$" }, "$$__m": { "$": "_z$B$", "_": "__6$1K7", "x": "J__I1" } }, "_1n$": { "E2$j__46_": { "Kha": "cC_T_B8", "$d": "we0O$__$", "$a9J": "$n$ptN5_D1Y" }, "s": { "_v1Dy9e": "tY1", "h3_refX": "_", "$A": "B118U$" }, "$7": { "$7": "z_Q$4_", "cr1s": "u_7zjT3Bvpw", "$e_9NH$__": "E$" } }, "a8$": { "_": { "_toString": "ae", "W__p$2__I__": "_Fzp6$_8X3_", "eU2j6b__Z$": "Dref" }, "$$_$L6Ah_": { "_4": "_$$E8", "b$ncbU$$_8_": "_$$d", "DQD1": "w$r" }, "__oWscBh": { "U$$_73$": "$P", "j": "$UB$7kdcXK5", "SK$p_$": "e1_z2Y__q_V" } } }, "Cg3p7__bp": { "_$$": { "_z6O__VW_u": { "k$$_$q": "$", "$8$ZE8_": "x", "B___": "p__267$" }, "e_call": { "_j_": "$l", "a_N": "Amcallconst", "bk_6X": "_Ce$X$_" }, "v90": { "WY": "___K_d$w3$6", "_$$$2$07nK": "$1", "K$2_66FP_3": "Cargumen" } }, "C_R$a___$_": { "$_0t": { "Ibi": "J", "d_H5": "WtoString", "Zto": "F" }, "acallBfi": { "o$g8$J$$__4": "$$", "P_4$D8": "$r9", "p": "$$88" }, "$_o": { "n__x$_": "a2A", "$$$o": "d9", "tx2F$3d0$hc": "$$w1$d3E_" } }, "$9Q9p5n_": { "i3jeW": { "EPS3_$$b": "_$Q0", "Dr$_": "__", "v40": "_key" }, "UB3$": { "$__": "_$Hw$$3", "h$_$": "$pr", "$name": "$" }, "AdWe": { "__6On4V____": "$W$AT_Bf5$e", "Y_8": "E_0D_", "Vv$": "_Q_a$$$" } } } } }, "_kp_x": { "Eq_3$WBT$": { "$__proto__": { "C_5yT": { "Xm_s3_$a": { "$$vz": "_", "$nz_": "z$4yW$$Pbu", "v": "Z$" }, "_": { "a$": "$$_", "v_1": "D$_0_$0", "S$s": "$_m$" }, "_$I": { "$c": "E$D$", "$6L_": "$uCjK2K32", "d_": "__$7g" } }, "_$": { "$_$_": { "abi": "$_3Dhcaz", "$": "__", "$v7bz$_x0_o": "$__$" }, "$pKbw_": { "B7_8xP__0": "$3S_$$K3h4", "l$4$_$$0$X": "$ng", "Ekey": "_$4zw_0" }, "$L5r$$U$x__": { "X_$X$m": "$$", "$bindeEppl": "drefke", "vcC$$": "e" } }, "q": { "Iwn": { "$__6": "c_1valueO", "sapply": "bxtD30$$_", "El_sU$": "e$U$$z" }, "htefi": { "$9CN": "_", "$$_": "U$jd1$3", "B8$$_qH3": "a__$_" }, "Xb_A$6CH$w9": { "_Y": "_", "eQ_$2apU_u2": "v2WW", "A4$oc": "_$" } } }, "$bind": { "$$2kew_$u": { "$$_88RJYZA$": { "_valueOf": "$$_", "$33$_C_": "$$$_", "cC": "az" }, "un$_$cC5": { "_e": "V$1X7$eD", "$1_e$G5b___": "e_1jpy", "D": "zk_" }, "_$": { "_": "wa$VS9", "Ds71": "anamergu", "$$$8S$d___": "___$zD" } }, "$6$P9__WD": { "$": { "kf$_": "$___k92j", "_f": "O", "w6$31$": "__IE" }, "_$___defin": { "__$$Oxq": "$c", "rkey": "$30xJ9e3", "ELmNVj": "eR" }, "$$$": { "__": "z_e_", "$$": "DHL$UBQ$", "$BB$": "$__$5nCaXr" } }, "Y__sV": { "b": { "$3ca": "$$constru", "_0W$8_r2u": "h__O_xyH_71", "_3qVE_$y": "_$GC0" }, "_key": { "tW_7": "_$$14_", "_": "$mv$", "D0O9$": "$_v$96" }, "_t": { "$$8$__$9$": "$_Q", "Y$$K__U": "_4A", "$LLY": "c__defi" } } }, "WbAl": { "D_k$$_": { "$": { "e$9Syb_": "o9wE_$_N7N", "$$16K_$_$1A": "_0_", "_8kv_vsk8__": "_prot" }, "S2w_4": { "__H_t$qiL_": "B_gJ", "$5pE6": "$ZY", "__": "w_" }, "$98_$8": { "Warguments": "Lp", "j50$_$38_": "_tr", "C$u": "$n" } }, "_$$54__": { "__6": { "rJ___": "__2_o_30___", "Ta": "W_h_H$___", "d": "$4_$$_$An$_" }, "W__43$Ay_2": { "$8$_zQX": "a", "D": "_6$i9m$A_K9", "_$$_d": "$O2" }, "__a$_$1m_z": { "_lA$g__$a": "e_$2S$", "ykey": "oKu$f_748", "$$d38IH$": "_w$_$3$392$" } }, "$___$$": { "___$KP": { "_": "$U__", "a$1_6": "w$6$", "Mc6": "G" }, "_": { "N49": "b4z8o", "$_$P9_": "A", "__Y$_$A7$$$": "$_" }, "WY9": { "C_$k_": "_", "$": "N6w0ICp", "lprop": "$" } } } }, "xna": { "$61": { "I$cp": { "_": { "w_3$": "___e__N", "__": "E_", "$LD$__G1K": "UP$_" }, "C2$_svimJ": { "Sy9cw_A1": "gv_d21$_", "Z$rnR$F$LX": "C$vx6", "_$$": "_inda" }, "ee": { "g$uF": "$L", "S4t": "xz", "__2469T": "TJFak6hI3" } }, "_Z": { "_7_MVyF_8V0": { "$t": "_1_dw7__$a", "vL$q2": "_S$I", "$": "$" }, "_$6$$": { "_$$y_u_": "T7bE$x", "$P4_4_26_": "jyY2_2__r__", "$j$$$": "$2gi$oFW0H" }, "$B": { "$fE_7": "$_E", "$__$$_": "aref", "_o_10Q": "$oca$" } }, "DvalueOf": { "C": { "_$$a$2$": "Da", "__x1": "K_rN", "V__3": "A" }, "$7l_$c2R$": { "$p": "_3_O$", "v_rv": "_", "lRT": "$$2_J8$_$0" }, "e5__A$$cr": { "_w13": "D_", "$": "aI0m$S", "g$2hI6__": "$" } } }, "d": { "_": { "EQ_5B": { "EZ9$20YY3$": "$Eb$iGzmk_$", "XS": "C__1", "$d_W": "Y$3sb$___" }, "$phr2": { "$vKi$rC$N": "e_c", "tns": "_6h88", "$5V9_bR4_4": "D1__JE" }, "V": { "$$82_a_OVam": "___$", "$9$3_e76": "z", "$Lj3E_D$H1$": "x7" } }, "__AOpl_5w8": { "ayK": { "$_": "y0_$_90_u2k", "dF3M$$_1": "A9v$suJ", "HMr6": "_u$_$i0_2R_" }, "$_$6_C": { "XhasOwnProp": "RI$GImjN7", "D4ySN$": "_a_", "$": "asLrC$B" }, "$ak2$5Qo": { "x0w2": "$", "T$f_$": "yum", "___$": "_7JMkPK" } }, "aW4q_u$t$o6": { "_$NHn$": { "$9": "_a", "jqh_$4$$6$": "CwgD_X9", "$7$0_$_q_$6": "$pr" }, "$4leng": { "z_7": "_", "$toString": "A_$_$J_", "yf_i$3C$$_4": "C1i" }, "sdd_": { "$$Jf7b_D$": "wr", "BtoString": "$$re", "_length": "o" } } }, "_co": { "xc": { "H_HvyNLPD": { "$$": "$BL_", "_3$_Y_mc_": "w", "C$": "y" }, "$": { "Vd2L": "awG_U$hasOw", "WZ6v4b$Z$Z": "w", "$": "v$" }, "_caleStrc": { "ex_J": "$dvJ_$X", "_pn_c": "p$8_6Q", "_tT_": "v$ax" } }, "_dO_t$$$7$x": { "_": { "s$": "luty", "_gc_": "_Y_0$", "Parguments": "$$_t12_RDd_" }, "qI_": { "$_e8$_": "$1", "PhasOwnPro": "dZ", "$_W_$$": "e$Z_" }, "$__7$f$3_m": { "B$0_$oT$": "b$$FHf_GY6T", "e6F$": "pha", "_K": "$h138_" } }, "_aZ7__$$j": { "$_": { "_": "F$38", "Iy7E": "$5$D5S", "_$0_T": "bQZY3$$z$" }, "r__3$0": { "Sapply": "A1ij", "XWM$a": "$__", "j$AL$0$___": "__" }, "_t_$d_5ZC": { "VY__h5_$$": "ez6_C4J$", "e": "__", "$h_9$": "xd_u$l_0" } } } }, "B9Y_$_2KI": { "A2$7$6$1": { "_E": { "_8uy$_$_": { "cX$__$_5": "_$0$17D2$$", "B1w": "$$zYi_$", "Gkey": "__QA__c" }, "__H$": { "Dc_$o$_oij3": "_V_$_224", "_$J$22__Y": "D", "$$2x": "_8b4" }, "$__$Y3Xd": { "OnNV$_2": "_8_$zfZb$", "_DX": "$c8l_$", "_": "Avdis" } }, "A": { "_ref": { "$q_$t2J": "xyu$_bRy", "_H$$": "_1KR5ktiG", "$$S1$": "VP_" }, "_$": { "$D__co": "$G$$V", "$Y": "$", "DC_$A": "X$$pSk" }, "__m$$": { "$N_": "aA_c", "$_s_SEA5_d": "$_5X_", "$apply": "b7" } }, "$bind_ryi_5": { "$J_3R$l": { "d3a6$i": "_$", "_1$$": "EBS", "$j_$1J_yD": "$A__6__" }, "$I_$": { "A__3$f$": "$63", "$": "$rkupS", "_e5": "QhasOwnP" }, "o$71D$_$_$_": { "V": "$oc", "E__$G2Ml_X": "_ck", "$call": "a_XA$ZZ$" } } }, "e$_8g$": { "e_": { "b0$m_x": { "$iZt2": "jtoStringre", "X_": "_DB", "$": "yw$$_3$" }, "C_h": { "Z7Eb": "A8$xNo", "_$YMjYU3$C": "X___", "CFDQ5N_Z90": "_k__$_81_$" }, "H2_$9N7": { "$_5": "_beg", "cFI_": "_9WZiYD1", "$0$$_u_$i_$": "$97$bwv" } }, "$T": { "$zRBS5_Qpl": { "yAaX8yXUgf": "_Of87s_", "dkey": "z2h$E_Ah$V", "Fx": "$_5ZuC62a_" }, "e3_A": { "$k": "E2a$e0$$$_", "JE": "$0", "$toString": "yE" }, "$$": { "e$$aZ$2$_": "v_l1$_86", "VhERQ_": "pva", "_Ztb_": "jSde_1_$p$3" } }, "D": { "U__": { "j$_Dz$c$": "AaQ__3____", "dcaller": "W$F__ZFK", "W_dG$G_": "e2_" }, "y": { "n": "zc_pgOY5X9", "$sPrleng": "$_5qf$RL", "$_1$$": "_key" }, "bprototype": { "d$b": "$length", "__82C_CA$vC": "Ec", "X_1l__$": "ee$4" } } }, "$_n$_Nd_J_a": { "i$k": { "Dpr": { "AAD": "$_$3", "j3vr$9C__": "_ref", "d": "_3GNu" }, "_4m": { "$yS$7o": "$H$0_", "D_$9": "_Prop", "W": "$" }, "$023": { "Xl": "_", "_23$O$T$$": "$C", "$Y9$t$3_O30": "_$b" } }, "ao__pUh1$_F": { "rprototype": { "_": "$e__gumen", "_arefcd": "mW1V3A_yX$S", "$3e___g_M": "fh$F" }, "op$_o": { "$c": "Ckey", "$Y_p5X": "d", "A1dmUS_WB3": "_d" }, "__e$8b": { "G_dc$c7133_": "E$2$", "$__$b": "zname", "y": "e" } }, "x8$_OW_P": { "__w": { "_$": "_dX", "_bc": "dc_tD_0o49", "a9": "_Zx3__k" }, "_": { "_": "_mE", "X8": "$_J$", "Bw$": "dpVc_od_6$_" }, "E6": { "_88n": "S_al_is", "JOw": "b$C_8", "js": "av_o$Ws$z_$" } } } } }, "$r$C_v5U": { "YtoStri": { "$1$G__i$": { "$nL_$": { "_": { "_valueOf": "$$$i_Gvsv", "Y": "_JtQ", "$_O5J2": "_3db232_" }, "_$R1": { "__H": "$$y_", "Q6TEeq5_m": "$_h_iO_", "$hzL2$5": "_K3SI$Ns3" }, "macB8Z$$3": { "H": "AqP__$$$m", "_$3rws94_": "$_4", "ZatoS_calls": "$_" } }, "$1h$_": { "c": { "_": "$$l$v6_5", "D1$c_8": "err9_gbM2", "xLZOD$GL92": "AZ$_o__x_T" }, "C$_6__D3y": { "X$2_$AV23_0": "_Pw_$6$_xH", "a": "p_47$fbO$$m", "B$5_154$Y4_": "$7F33fngB$" }, "e$_9": { "w_T$": "e", "X7AU2EU0T": "De1_E_j_", "_$7R__": "eEOq$Hh3_h" } }, "__$": { "G3$": { "$mu$_L$1a": "$", "Z$2_P$Pzg_": "bd5sD8", "A": "$$" }, "_GL__4f_$r": { "W8__w1Q$Pe": "yW$", "__7CN_x_$G": "zC", "$Z": "$8M2$$" }, "_key21ref$b": { "$": "_5_D", "t8": "$$4QB2$H$_", "_ref": "z$__$6" } } }, "$w3$": { "$": { "W$": { "$miGyjyk$": "___h$f6$", "$arg": "e", "thasOw": "k$6DM_" }, "H9$b_": { "$": "A__defin", "$J_cY$$7": "c4", "$1$L": "M" }, "vretteca": { "dDd$a": "C__", "azI6": "A_$yU$", "E$8": "_Ku__f_$IK" } }, "_$6": { "_$8aDE$$B1b": { "t$i$bg_": "$i", "c05__7": "U43P3_", "_toStr": "W" }, "$__": { "_6t6_8Oy$z$": "A1", "Yk": "_9", "X$": "b" }, "s": { "$1kI$$": "$_T841j3", "Bkey": "Zv_X5_", "Gd$_B33$": "$_Q_" } }, "_T_5_$9": { "l99$2": { "_P$": "$__", "__$6_DI": "K04", "__": "E" }, "_2t6$_$C": { "_key": "jref", "wn_": "$Sqm$9", "_f": "$_8__nj$" }, "Adf_": { "M_mj$1": "V3", "U$_e1PQ$": "_W_i", "_": "Zcall" } } }, "d3_": { "$$_": { "$Rgr6y_$_": { "_3x$": "A_4S", "e__d": "b0", "$": "el" }, "$H": { "$_td_K_Y": "_$", "_apply": "_8_1", "__KmW4_": "$pcYN$_" }, "_VW": { "aaj": "tB$B", "_tnvOf$$$": "_U6$2", "Dva": "_toString" } }, "a_2e": { "$0$": { "_9$$_t$Y": "F_hO1$nx", "V1": "CQ14$37$", "_key": "_$u" }, "$$0": { "___lN_E___$": "_1_4J$_oS$", "_": "AM$$n_I6_e", "$j_": "_0J$6_" }, "$ij$m$": { "__RK_": "__G", "Q": "_ref", "$11X": "CmSD1_8___" } }, "_zC$$": { "dd$": { "YDF5p10s": "$$82_4hC$", "dDS": "J_", "__Ojk$_7": "ik" }, "_c": { "Ebarguments": "e4_$0_0B", "c5_": "A_ineSe", "_$c": "c4$2887" }, "a": { "$7$gb8JWK": "$valueOf", "_Jl_": "$oxcB", "__U": "ut" } } } }, "__$": { "B3Pm__": { "D3$b": { "$r": { "D09_59": "Scall", "W": "_$2", "LG": "d$Y" }, "Q$": { "z__k": "nM_3i", "DB$$J8_3Rm$": "Y$2", "egA22S1w8": "B$A$$b9p" }, "$4h_YL8$mN": { "o7": "A_O1$_m_$", "Bprototype": "q$___H$$g$$", "_": "e$_" } }, "$5": { "VY3a_mxx_": { "YC$": "Z", "$d": "V$", "_1$3": "_QBq$r$VF" }, "w1qDK2": { "b1I_": "$", "_x0$8v$ihD1": "$", "$$": "$pro" }, "_$_w": { "d$__MV2$F_$": "_FtoLoca", "_": "$iE", "O$i$$$M": "_i$u_42nF5" } }, "N$": { "kh_3K6_K6T": { "$Eapply$6ok": "$4w4__71q0", "Cxw": "ycall", "_": "_sTK__tE1p" }, "v_": { "_ref": "iq14vs", "_8": "__6$wJ$__P", "$M9l$2$s": "B1" }, "WHl8__S$": { "$_v": "c", "_": "ZSa_YZ85FI_", "Z$z$": "$$v7__$b2$O" } } }, "_stoS_2n": { "y_": { "g__m7": { "Z$Dr__RP": "_key", "$CT": "b$Yh$__", "S": "RE_t_" }, "_caller": { "B$6": "$_", "zr": "dj", "$_$_jDXuR": "zG" }, "_call": { "e": "_6$_o", "$W_": "W7__3$_", "yargum": "__" } }, "$gL": { "$1": { "$_": "$14$c$x$_rv", "Dal": "TA4", "r__defineG": "cU0wq" }, "$": { "w": "c3d", "Bi": "$_$INRM01F", "__re": "wXRh$$Q" }, "$caller": { "a$$0__b68R": "iI__A53_$g7", "_$$BW": "qzaJiX$Ra88", "H": "$iwvhasOwn" } }, "AQ51": { "_861__r6": { "_rot": "$1in", "_57_": "_C0", "bcal": "x$Sf2" }, "_w": { "_sS$Gw_": "Hnam", "kXS4_OOX$": "$_6l__306", "cCR": "_$kE$J313" }, "k6": { "w__": "R4_$_d$", "As06_A_FH4b": "coI", "Dref": "_" } } }, "_02": { "$f": { "wDah$$onstp": { "__Oe5h_$": "r1X$O139", "Aref": "Zkey", "_cK_1x_c$85": "$Tn" }, "e8": { "$": "yQ", "H": "OI0$7$", "X$4$5$0_": "_7B0w0b_1C7" }, "$_v": { "e$r3_t0A": "dt9", "$$K_": "Zz2KL", "$valu": "L" } }, "Iarguments": { "$8_47_1RB$": { "H": "b$_3E", "U0i": "Epro", "__": "D7$a1" }, "K": { "_Cla_aK____": "aQ$$9_$", "Uy1_005g4": "_$qbB3$", "E_": "ga___7O7T_X" }, "tE": { "Km": "vri$__pro", "_aZ": "$se_rCb3_", "_": "$$4_" } }, "Mref": { "darguments": { "_keytoStr": "c", "$_Z4_sbALM$": "utg$_", "e7ljS_xe": "$a_GBl$" }, "Xx_i39$_6": { "$$": "DP_kdm$p", "$g": "Y4p_8yxy$F$", "_": "___" }, "cdp$": { "$Qjx3l0r_21": "X1", "_": "t_G969$6Ip", "$__56$v_1": "_" } } } }, "E_$EN$0$V_a": { "___Zmd": { "$q$_D_vfb$": { "v6q7__": { "dk4$": "_ref", "BE": "$f$7$", "p6_": "P$" }, "$r$_": { "$isPro": "$_c2$a1a9$", "m$f$_R$": "kHl$$x508_$", "$$_": "E_p$i_$$$d" }, "_$N$_D": { "v": "_", "_v_7p": "$0ke", "dd_nW": "yk$" } }, "$": { "xe": { "_A_9__o$$C": "_e", "$8": "$e$$$t$_ha", "zA8G": "$S" }, "S": { "dk2zC1__": "$_qgZ$_", "_ref": "a_", "_rPK__$9": "_$" }, "c3_$$__$": { "$": "Dw2_d", "_ref": "f91ngtbha", "$9$$2NS$5": "$8g_sr2$Np7" } }, "dD9F": { "_length": { "$length": "$e_cbd$8_DD", "$Y": "CR$_fWrSH_x", "rE": "BI$p__j" }, "_Y_$SJ$$": { "da$$_c$": "_Z$9_", "__m_2sl$_$z": "_EW_XUth7_", "_F$$r7__$": "_3" }, "____do_": { "__8$E": "$__", "_ca": "_U__", "F_M_V$_3_$": "$mO$_" } } }, "i_P4$$TJ_": { "_$": { "$": { "Y$": "S$2$", "___lookupGe": "X3$$", "$$_": "DA" }, "_$7$": { "$$$": "$c$1bY$__", "$1fXDref7nj": "$$U", "ej1": "Dname" }, "tSf2_L2r": { "X_": "E", "$": "_Y$_L9_", "J1": "Ce6$$$$x7b" } }, "V_4_": { "n": { "Zgp_$": "Wsn5G5b", "$V": "d", "$$$": "_ap" }, "Og": { "X$I": "ZI__$$$", "Aob_47ihGY_": "L_p", "$AYd": "$K___7$" }, "_": { "_$2XZ": "$8w_6UZ_", "X6": "$_CN", "y9mL_": "a$0$8$HY8" } }, "c0_VN0s_": { "v155_$$C": { "V_H09J_2K": "Vv$$", "Qib": "_$", "$$$": "lb" }, "AE": { "y_": "y1v", "b9K1$__$8$": "_1$0vL$_j_$", "j": "$argume" }, "y": { "_": "__pXY", "CO73Q1": "_", "_6_zAe_": "b_$" } } }, "$re": { "bpR543_": { "$": { "yl9$Smv6_": "e7$$g___", "$Z_Z": "s$TqjFe$x9_", "$sc": "$y_sG" }, "B6$_b": { "_prototype": "_i4a_CKp_O", "J_3C3": "$valueOf", "_rrB_$9__$X": "iwP" }, "$s2$_d$Y": { "i": "h9y", "A__d": "AW$_p12Y83M", "$x7$_Z": "cSWO3__3" } }, "w_B4WS$t_": { "$HimTh$$": { "K_Q_$$g4$_": "_434c_", "$JLUQY5uO": "e", "$msY": "_$Lg$qR" }, "ARZ": { "$5$$w37": "X1", "H": "D_a", "c": "_e25JdIf4$$" }, "U_": { "$key": "scl", "__bivalueOf": "N309a5__$0", "_aR_$JnZ_Ro": "$d$84$$RKF$" } }, "_p_oR3_ci_": { "_": { "aref": "Zp$L8_eV", "$_$Nqp_$6": "$7", "$4dd3b4$J_": "$pertyIs" }, "_$8u": { "z2Wx$__1$": "_callnamepr", "$_$$_cUy_3": "$G", "q$$ke92ND7": "$" }, "_iXLYyuoh_": { "XB$B": "_87p05", "_1u_DEX$": "C__91", "wc": "bH__sg" } } } } } }, "$9q1$$$81E": { "_$1": { "_5J$": { "$": { "_5$5": { "v_": { "$6i_e_1$bx": "m", "$$2ZvnSv2$": "rb_c", "$": "Ae_$_c$mp" }, "$Hle3rstr": { "$W3": "_9", "A8z$_G$$21_": "PB", "Yd9_0LyT__t": "$" }, "_rZ__EfsVl": { "$_": "$$r", "$2B156$5H$_": "_$", "$Qf___": "$74__" } }, "$$$k_E0__u": { "D_X$": { "$$": "$3$3", "_I1H_": "$1ChasOwnP", "vJ": "$6" }, "_prototype": { "rB$$MO": "$keyk", "Gval": "w", "Dp": "$cal" }, "BYBE": { "_peC5E4": "$$__", "QC8$": "zk", "C7_9___": "m$" } }, "___5E_$$": { "D72yD$_7__$": { "$8n": "$sOw", "_1__": "$_", "_sY3_R_nv": "_bm3_k" }, "Q": { "BvalueOf": "z", "n3D_b": "z_", "mZ$3$Uq": "v$A" }, "DpA": { "CA$Ha__V$": "jVOO", "_7_U0": "$bC", "_F_Dx9": "_va" } } }, "a$0": { "$3$zAI2": { "_$": { "StoString": "$$c", "$17$Vj_$E": "W", "wUe$uo$C$__": "a$$" }, "$7g": { "f9C$49": "tKxj$1", "z3_B____": "_2", "_vJ9CU$RkvM": "B" }, "_OwO$cr": { "$8c7": "$ook", "_": "$H$", "Q75Iwm$_$": "w77" } }, "_": { "_2$l3": { "bC_Y_9ye": "_$$_", "d4V$5c2S7": "_3", "C": "Dal_ruct$ot" }, "aw0$": { "o$": "$715$_", "_": "_rot", "_m": "U" }, "V7$$Upt8y": { "$m": "iEZ9v__7R_7", "$__L": "_$c", "h0w_": "_H1" } }, "NB31H": { "$16Y": { "_Op": "X_7y0z", "___c": "wA$to", "_": "akey" }, "_1": { "d": "$R_d__", "Y2$d0_$j_": "w_", "_E_x2W$_s$": "__" }, "FAI": { "DB17": "_h", "AuA__$7": "Apr", "$l$": "eT_3__f$" } } }, "__BwI1__$_": { "$L$8n": { "$c": { "p$1z$$": "$7", "a_$__$": "P", "Vs__": "m" }, "Dkey": { "X": "Ya1jZ1$$8M", "R$3": "b$$$", "etoString": "K_f_5$vl__9" }, "_apply": { "larguments": "cref", "z3_Q___5_6": "w$", "$_$ERM": "$_$" } }, "_oString": { "e_d_": { "Y__3A_": "w$bI7b", "B_$1cbE": "Akey", "$8": "_" }, "_": { "$apply": "y$_", "_a": "_1D", "_8_": "B75_yh9$79" }, "vcal": { "w4c$__": "_$2pM__1sy", "vr_h_$": "_4fgaG_m5k", "__65e$X3Ggi": "Wc$$" } }, "$c": { "_z": { "$C_RB_$6": "b_X", "W8": "$PFA1vY", "_": "q$D8" }, "$1$": { "$": "Y", "kYmeciB": "$valueOf", "B$_": "d_Ng" }, "_$0$_$f": { "$5": "_r", "$arguments": "dlen", "y4_p": "Z" } } } }, "WV_": { "t$$X__": { "u2B3Lv__z": { "$v0caller$": { "$": "_", "EHU9": "x", "_kz$": "__U" }, "_toString": { "AcYO_$87$$$": "$$_E4", "_Q8__S_5i": "db", "$cB3wv4Q$p": "$A28h5$x$f_" }, "$$proto": { "ZI__h8m": "$to", "BA__6$$_$": "$$2w___$e", "o$8_8v03_A": "$call$namel" } }, "__z$$_A_C": { "a7_4$d$_": { "m": "_H__W3", "_6": "w", "m_": "D$F" }, "C$__O": { "w$__": "y_", "__b$_A": "Z$_jlP", "$e$$$$$dU_": "I77" }, "Wc": { "gTtUl2_3M": "$$_g_TN1m", "$__": "CP$8C", "$dl_o_31_1$": "$7BJa5___a_" } }, "z2": { "DL1$": { "__8": "___cE$_c__", "xdw$": "$", "q$": "B_i" }, "_$$g5": { "_A": "dl", "D_7$WZ_": "Wv_C_LZ2_Xq", "bC6": "b9vgHro$" }, "l1": { "$_0": "Zb6", "$__FoO0": "$8$$G$2t6iv", "aEBt": "$" } } }, "EGre": { "Mn$$h": { "_p$2_$$k_$4": { "_$a_": "jzbt$4i__c", "$_fkeBqlen": "_V__m", "c$_": "v$$__$68" }, "Eu_$7Gz$$": { "GRc": "$", "$1__$c": "e_BB", "wy6mI5_": "xEc82r2" }, "eM__6k$_3": { "_": "X___$v_j", "$_YN": "$X_1", "$kN___7_": "_Z_" } }, "$$S$": { "Y_ZF9_$": { "__$Vz____": "_", "XUR8_7": "$7$_", "BL$5": "$f__" }, "OAwn": { "___proto__": "$Xfi", "S": "_In$2$", "_name_to_Bv": "$$_$$v" }, "b7propertyI": { "e_z": "D", "_C_1": "M0nD$$Mi6yj", "_880": "MW8_$_" } }, "$": { "x": { "Mc": "$C", "$fA_": "_y$", "$9K$hasOwnP": "$n61_$$" }, "_E_RZW_0$": { "$Et": "C$22$", "_23$81B": "$$$_$2L_", "__e": "A" }, "tz_C_$7": { "_2v$kQ4": "U_y_f8U9", "__Sg$h$": "$$_", "$t_": "$key" } } }, "$": { "c$$PB_$": { "$$e$G": { "a8_": "EGna", "a8$_e0k$2": "_enCDpro", "$": "Y_" }, "$$W": { "$": "_3BpUW$$_$6", "W6ntC": "D$", "_$9__SN": "KZ" }, "$12Q_5$": { "yhVB0$$_": "$J0", "wref": "_441$_$39", "AErg__prot": "_$I_" } }, "y2x9_DGV": { "C": { "c": "_B$", "$": "__2K_G$_3_Q", "v_": "$$_" }, "_$$O_": { "ls": "_$Q_$G", "__protcbi": "$VQ", "D$W": "$R6$d5V" }, "$8$c_G7W$$_": { "$W7B": "$", "D78": "_p_I", "I__": "$$" } }, "_a": { "P9_8": { "yj_44A_Pl": "b_$$$9tG_7", "$": "$to", "_8e8": "_0_p_Cin" }, "Zn": { "_$1o$$$$": "$$G__Q", "_$mD$48L_": "Cx_", "gR": "C_9" }, "X": { "D": "Vkey", "_0_GE$f_": "_$hy$__25__", "w_6_9_1f": "$ref" } } } }, "Xname": { "_8Q__Ti6": { "_$u$FZ7": { "F1$$h_": { "G_82": "bV31$j410", "O$": "_4$a$6$$_$u", "v": "mvalueOf" }, "wy_": { "g": "RC", "_rf6w__": "L$_4W", "Dapply": "$$MrI36y___" }, "$B": { "Xkey": "XcT", "A2fSRkp_": "eJ$", "$8$7W_9_$$0": "_" } }, "_0": { "_$52Mt__$": { "_w$_$": "F$bCv_8", "_Se": "Kkey", "_8$6_": "$pX0w_z_2C" }, "l_j$": { "q9W$AB_A_4": "mP$xZMr$_4$", "_fqh$$6W$P": "oJI_2_X_", "$m$c_$$F": "T8" }, "_toString": { "D_er": "eV_$o2", "_$_N": "$$06", "_Rha": "__z_B$0$" } }, "_89$1$0$b$o": { "_D$29": { "I0_A": "$3r", "$6_A3Xu": "d", "_$z": "_0" }, "W5d6g708f8": { "xapply": "Y", "blength": "vj", "WD$Z5_$$_d$": "c_" }, "l": { "Aref": "_W8Lnh_vb", "wet": "E___", "_": "$_$$dD0" } } }, "Wi": { "wto_def": { "Zh68Mr": { "Eref": "$$", "$y": "yYZ", "E0a__c$": "D" }, "X8590": { "D$toLoc": "D$", "$_9N_P_": "z", "_Vf": "bbo" }, "_PJV7n3_952": { "$0__$__": "_Ke774$V4$", "$$": "Wc", "CttoString": "$w_eJ_n$T" } }, "$__3_0_30F": { "$O": { "_": "_4$a_$_$", "f___8$Ag": "yBB", "$V$A$3HL": "$L_" }, "$N": { "k0__": "xl$_w8_$_", "klength": "B$", "$rp9_J$": "E18$72__E" }, "_I_": { "nref": "Y$4M$4", "_1i": "zbHl", "$$": "_" } }, "_ANE$": { "$": { "$key": "a80$", "$bind": "$1hcE_TE__N", "Z_$m6": "$$T$G_$$0$q" }, "_m_$0_29_a": { "_wxI$$FED$": "b2z$Ojh_9", "e_0$$_C92_": "$wJ_", "h60": "$_A_3J$" }, "a_eK_7$$8": { "L_1n": "$A_2$O", "d_nN861p3W": "$0", "_": "oW$2" } } }, "$": { "_Et6": { "_": { "_0": "xpr", "mwDHhTi": "$", "X$aAD3WKW58": "ucallerotvB" }, "$neG$Se": { "$s5__2": "E$", "N0$_E5$B6_": "_ui80cb$", "pk$6J$": "$jb7M$_Ni$" }, "tm1__$": { "$callerhasO": "_8_wz", "blu": "q_$1$$_$", "x": "D$6" } }, "_": { "$length": { "_C_BvM$__0": "SFU___Q$", "$_0$$LHX0O": "c$_", "_7": "_2$all" }, "_a_$gArdO": { "B_e": "_bi", "e": "_valueOf", "cf$_": "_length" }, "d9cJ1": { "jk_k": "hGW_mq_p", "a_9e7": "At", "___ta19$": "_" } }, "_l__3": { "$isP": { "$_$": "$apply", "_pro": "$", "v_bind__loo": "_e" }, "$N1_$$_p": { "$V$43$": "$_RS", "XU_L$_$": "$$wT$964BL", "$_": "_pr" }, "__q$E_K3a": { "$_57zd29AX$": "d", "E2$": "y$tgf", "___bzb": "w___" } } } } }, "_$$b9_$7_": { "_6$Gs": { "$": { "BbC": { "w0": { "_$_$Dd_D": "_9$k$p_$H$", "w$Of": "_7$", "p95Z$$3": "__1" }, "r$4$_$6": { "_r": "$fr_e3", "_arguments": "C_39", "$1$F$": "a__" }, "$LA": { "e8J_D": "T$_0$Dfn$", "$g9$_$": "__", "$_LE": "$7n$dT$gP7" } }, "__x7": { "j": { "BO9": "$I$DpnC", "Ex46": "xC74__T", "__1$1_n48gR": "E$W" }, "Aref": { "$$I$4s$8sE": "bcA_z$$_O_1", "M$_$$$Av_42": "_g___Jx", "_": "$Wx$" }, "X8f$Y$u2_": { "_": "cIjK__$_$O", "bO7zV__9": "YRFw__3yzI", "$$_eb$$$": "_7$38$_" } }, "W_R3Hd$$__$": { "V_": { "$xy_$_6": "$", "$$$_cons": "j_5__Sy", "_Egb0_9_W8v": "a_propertyI" }, "$2_": { "w1": "__D", "v__$mjx_j$b": "Rlv", "$_B$R$_3T": "AB$" }, "zB2$ne": { "$m": "$key", "cn4": "_$a_x_", "I$$$": "a$l$$ROQ__" } } }, "x_x6m_sK": { "$jYB_$9s_": { "$$A5$c_I": { "plk36QKG_dl": "w4X8_n_S", "a": "$$__Q7_C_l_", "_": "X$P2H_" }, "_$ert9": { "K0": "x$n", "DU8n_g$T5b": "E2b", "tAx3$AH__$P": "$yS28kYlU5" }, "$$5B_": { "$": "_pzes", "Z$L6M___5$": "d", "$T_u5I$d_q": "W_g$" } }, "$$keyProt": { "x_$m": { "$2h__5_X": "W$_m_oSjr", "E_x_S$$_$": "$", "_1O": "R1" }, "j": { "V_": "__arguments", "m": "R$V", "__": "hn" }, "_3": { "o_X": "A_", "ZB$": "PM_$Z$_$", "dGet": "EN" } }, "$_ucHyH": { "$$$0A": { "W6": "X", "___H": "_", "$F": "zm$" }, "$h_": { "k_Y": "dg_7", "_1_": "_9_", "v5$6_fCZ$$": "$20_6C$_tD" }, "Z__defi": { "YC_$$_7$s_W": "_sa", "_ref": "$Spr", "vcall": "I_p" } } }, "_etgBalue": { "Y9_n": { "C__du__W9D": { "d_fp_8$5Vj": "__b", "$$_$etf_4_": "wtoString", "c__B$T": "QT_0oJ$" }, "mxtB": { "lD$$___e3_i": "__$_ef_l4YE", "yAup__HZ": "$H_i", "$x8bindUkt_": "e_ypplrgu" }, "$$y": { "_ey3ytoSt": "EfDjm", "___$X": "f$i$_Qg", "_$J$D1_741S": "_Cx" } }, "OX__": { "$_q2Qp_": { "$_Im_$J$2NI": "c", "OvyU_Y$Z5": "WM", "$w": "__0wA" }, "U____2B": { "dIO_$oq6wHY": "_$", "EeO": "_C_y61Od", "kIBI_9_fA": "B$__" }, "$": { "_$$$": "z__R", "_": "n", "$3Y$_5gi1$V": "B" } }, "_80": { "d": { "W": "m8", "_4argum": "$c__oJSlV", "B_0_zTy": "t$$_$$u" }, "_": { "c$0": "_R$N30o2", "$Ecq$1Wz_R4": "_$_1$m1a$B", "_0_4$_": "T" }, "$$1_3$_D": { "nna": "_$_d_GHd__", "_0_$0$": "_name", "__$6AXd": "D$4__4_7j" } } } }, "v10_": { "_h__": { "E$$": { "$$um": { "_5O$A_2EY__": "Dcallinrca", "cgf_5_1$": "e8_nK$$au$$", "$_a_5_s": "XM" }, "_c1": { "$Q_Cou": "$_5$F_$", "$_m$4W_$8": "_apply", "_4$": "P_h$x__" }, "_$0": { "Dw$$E_V$$$$": "d__x05_V__", "$": "$sD", "$Y_8RW$": "_" } }, "Sj9U": { "$$": { "$$h": "_$1_1pY", "__g": "$1__", "m__": "O" }, "_$P$$G": { "X_K": "__K__ny4_GN", "tjJ": "$$", "Pj$$H_T": "$$_" }, "$KI__": { "_$__1N_$W": "$_Ke", "_73D__8Y3": "_m_def", "dKv8_": "kaA1QKW$$" } }, "_$7$0M_": { "_$": { "_vAc": "v__proto__", "__hF0B$WF1j": "$b", "zf$$U": "$_" }, "$": { "g$8$_": "Y", "_c$l$em_": "_Av", "C9o": "Qlength" }, "s$": { "_$$d": "c$EJ4_My", "$___Tf": "$$E$", "_95W": "$2s" } } }, "$j": { "c_2": { "N$": { "_$_": "X$X_64$o0", "$_r": "f$4eCALe", "$$z": "_" }, "$H": { "$": "n0", "f": "C", "_5$_": "$" }, "$$": { "ttvNtoLoc": "$3R", "EC9$$K_2$": "n1", "a8_": "$R7C" } }, "$Fce": { "As_": { "_R": "e$_lUl6", "$$$U_4$__f": "_wX_aVN$$4", "_j7": "aAbB_$_" }, "_": { "$35251A$r": "rm_5", "A": "B3name$Pr", "__": "$__proto__" }, "$": { "DVa6zo": "$_02C__$", "ZBaDy_6sVvK": "$or$", "Bf$$W_": "wapplyc" } }, "$B$6o": { "$call": { "_Vi": "gGA$m$h_q", "_te": "_7$$hrXq_M", "____": "d$$" }, "c$": { "$": "cIo9_b", "yhLs_": "_", "_$_$7s$": "$has" }, "$B__I_P$j": { "x66_TM": "_p8x_____7$", "Re0": "$$Tv_TT2J", "_7$xpajX_B$": "$o7m$" } } }, "Dk2b": { "$ref": { "M$": { "YLO$c73$_": "D", "Q$$_Ga9C": "$uWn", "s6z3H2H_3": "x_ir8A0_$nZ" }, "e$L__$v_E": { "_Xp_yg3I": "ttoString", "$$LuUU1D$q": "$", "_ref": "W" }, "$ef": { "A_$2$M3_": "wZ2$", "d8cb": "$_h", "UE_Lf6": "_1" } }, "_9$X_bN$$": { "__": { "_c$$": "Q5s", "_": "$15__TF$u0H", "_n": "$_1I_" }, "_$u_": { "Mty207_": "_$M6__4$F", "eK": "etoStri", "__": "d_pJQ" }, "K5c__0e$b__": { "m$8US6N$": "qto", "__1__BA": "$7$jLhzr1$2", "_t_ze$1_$Rp": "_8T$_fh" } }, "$s_u_8": { "L$3C": { "_YFvu": "$$", "YkeyC0a": "d$ZU_j", "_": "_key" }, "_Nd5$_B_Q": { "cc": "r82", "c$JX_7t28": "Ep", "iI___p_W": "_Zy5E4a" }, "lisP": { "_l1o4GVEP_$": "$B$1LCK_", "h2$E": "__IMdq$KC$", "f0": "__" } } } }, "a_": { "Ie": { "L": { "_$": { "_$": "fcaller", "$_$a$G": "$_", "_rg": "C2" }, "$$S7_4$": { "B_b$_3Vx_8": "W_e88a$B$", "O": "vKT_$$gZ3F", "y2Xx_3_G2": "W$l" }, "_$q": { "B$": "__hasOwnPro", "$D_$$_j$$$$": "Ve", "$jKo$4$I$_": "$_UT7Rl$" } }, "$1a_$_6nari": { "w_H$X1J0_k8": { "$apply$_a_": "A$OT2_DTF_", "$": "_7Ou_$g6w$", "G": "$$e$$$lS82o" }, "y3$R__A_": { "E": "C8_S", "$_$": "jDcalld", "$$$3_5_a$": "olengthx" }, "Bv_$": { "_": "_cC", "$3$": "__9rPyta", "$key": "cc_$T$" } }, "M$$": { "l": { "_urAN": "VJ6Qg5V9", "yM_": "$h_3$Z$1$$", "zref": "$D_1eg_" }, "D$P": { "$aq": "D", "a$64__X_0": "e", "$n$S6P69G": "M7_KgvS" }, "k": { "X": "ga373s_y9", "$aPY": "_R9___e", "y26G2_5d3": "$$__F$$" } } }, "Lo_M$": { "$o$W": { "d$__yY__5": { "A": "aa_", "__$Y_2$": "v", "$H": "$" }, "e__0_2f": { "$": "_ref", "$valueOf": "C__K", "pd2T": "$dl" }, "$t$KeU": { "$_CG__$": "$apply", "__D$L631_": "r", "Yar": "$$_22S_" } }, "cz0argument": { "$6_": { "_ref": "$", "_$_5c_d$_": "_w$3", "u": "$6l6" }, "$": { "$8s6k": "wf_62$B1", "$f": "$M$2__7", "g_": "W$bYAAS_9" }, "E$_$2_8": { "$re": "e$5Uy", "_toString": "_F_E2", "z$k_1P$_": "kQL$_$05Oda" } }, "x0b_$T": { "_6A$$$_z": { "$yv": "P$YT", "$f5nAD$68": "$__d", "Om__$$": "$" }, "D4": { "Zj": "Q$A", "B53": "_h", "d83": "DT$b" }, "__$7C": { "_317r$": "bh", "$": "$b_$$28W$C", "A_57sm_$X": "_$6$" } } }, "j$": { "s$V0$": { "$ons": { "$$$5j$b$": "apr", "$I3P": "Crefca", "eva": "$ZE9p5_" }, "b6i": { "q": "cy_", "D_YILNt2$N_": "c_i", "_O$": "wZvalueOf" }, "$_$7pvb_2": { "$$q$bORC": "__HITD_l", "aapply": "stoString", "_": "_cp" } }, "$": { "d$$S4M": { "a_": "D_C8$_", "B_gu": "_ref", "Dkk$pa": "__6" }, "ID$": { "__2_$S_6R": "V", "aS$_$_3_$$_": "_M_$", "e_07d8$3_": "W" }, "___lL$z7": { "$o": "A", "$_$1_E": "nk$7_F_6oRK", "Ct7$$_": "b" } }, "__WH93R_w7": { "$ref": { "ZTkDY": "__A_", "V3wk_": "xkey$Vd_Y", "D_A4_B8_9$": "$R_" }, "bc": { "$arguments": "Bbind__loo", "bV$": "$$", "_$z_": "_6_18_$_a" }, "_$$XfG_$_": { "$D": "n__$", "$b": "_con", "$a_k": "__a_u9Ka__p" } } } } }, "_dB$v_$SR$d": { "$_": { "B_$": { "_ref": { "Y4_1q$$L_9$": { "bj$t0$m": "__$k$", "Ca8$$E$3ba0": "$$Vxj", "_hasOwnProp": "Y8Y" }, "m_": { "__$_C": "_9Y8__", "$9_$_$_7": "_$$_C_", "$p": "_$uB_5k" }, "B$80U": { "__52XbC_f$$": "btoString", "_7_a0a": "a92PrRf6A", "ep": "$cr$$2$__" } }, "Papply": { "eb_": { "S$$": "WC$Hz$t$0q", "y$_9V": "$9e$W$9", "$W_e$": "W" }, "_W$V": { "_D_C": "__$___6$", "eA$v__SmXry": "$7", "k_Z": "O$$X_nP" }, "DE$$_q_X": { "$D$2DmR$f2": "W1jk__", "$arguments": "$", "_LP_6_": "Jbind" } }, "$_S": { "E": { "vT": "dl$D", "a$_M": "$0__ay", "Ub": "c_r" }, "p41C": { "$6cC8": "$$sY$$__7S", "wx": "$W_WA_2", "v$U": "vB" }, "$K$M": { "W2": "_Uz5$8$n$", "EVa": "$Z__3_r_z", "U": "o0O5" } } }, "$$Y_N_w_": { "_": { "_f$": { "$6__a": "_CXh_", "bz_I$J": "bo", "_prototype": "_ref" }, "d$0": { "_$": "$wP__Q", "Mbind": "W9_O__5J", "o5": "xD$V" }, "$m_": { "Mnx$": "Y$", "$v$1AB4E$D": "Ok", "_d__": "_" } }, "$U$": { "_ef__def": { "wI__prot": "E___$$aO58", "t": "s$XOm4s9", "u_3A3b": "$_d8x$V_" }, "mbind": { "$$": "$L7", "_$$LYO$Pk_": "$__y$N", "__$8u__X": "us_$_$Um" }, "$eH$_": { "JvalueOf": "$$31", "$": "Y__v$H6", "E": "$x" } }, "_$0UX$_": { "y$U": { "_": "W_$j", "BNK$OY_xu0_": "_3p_9$$_TH", "_wlength$na": "_5___c" }, "Mv": { "uqi_5": "Bter__3_ume", "bAkcVE": "_", "_": "_" }, "$e": { "_": "_A", "_l_": "Yapply", "$2": "$ref" } } }, "eprototype": { "erPlueOf_7": { "Bxb8$I$c2DC": { "AW": "$_", "xr$_H8CA$": "Xva", "a": "Z6_150AQ_Tc" }, "_U0b_$_q7n$": { "Cv": "E__9_", "$xAp_HG06": "_2", "v2O$_$C": "_2" }, "$9487$": { "C$_t2": "_key", "j_Mw_B": "ve59$X$$", "d__b_a__D$A": "_a_" } }, "$_Is": { "_$dd$": { "x0$B_w2__r": "v3wx", "_436e$vLz1D": "d", "X_2$": "crtyIsEnum" }, "Z_q9y$$044": { "_e3_3yC_$$": "$eY", "zb": "_Dp$", "gX$T_O9GV_": "l3" }, "I$__$$5_": { "_O524EPN": "_71V", "$__8$Rf$": "V$Qa$uvv", "D9_": "shasOwnProp" } }, "cyY_un4": { "U7_E_f": { "$": "D", "$E": "$IQC____", "s0i1hnD": "_ref" }, "$H$$_4E_a": { "c6$0$$_eSow": "X$", "$998dj__dM": "$ref", "$": "okey" }, "$_": { "Iapply": "C_$_l_$_$5", "U2Y3": "$2Of8$isPro", "_j": "__" } } } }, "P": { "_": { "$$$_v__": { "__U8X__1$": { "$P_": "h", "__e0_Y41_": "_", "$K": "_cons" }, "H": { "$$$8_3s$N_$": "CpropertyIs", "$GN5O_$q_": "W9_y", "_aZv": "TE" }, "_o$Q_$jM___": { "c": "D$_36", "_ca": "E_A1$$__u", "_len": "a" } }, "_7S2_tto": { "$true__lo": { "$y__": "Y$$U46f_z$0", "_$7_$$5b$": "a__", "$key": "__" }, "$H3p__o$$jB": { "_GD": "_z$e_$$T6", "V92": "$", "T_": "_" }, "_8YL2": { "db4__kkXk1q": "E$", "$": "_wW", "aE$": "$n__proto__" } }, "aD__o": { "$co": { "$_8OE": "CtoString", "_d_": "R$", "__$0_$rz$c": "Yc" }, "J_$5": { "$yb_": "_5$c0hUK2", "__$$0_": "_", "ayY": "v_$d0$q2" }, "_5y19BO$_7S": { "x_dx$": "_e2_$CbindW", "h": "bsX", "$": "_$__6_0Vz" } } }, "EKn7r1l4_$_": { "Ky$": { "$key": { "$L_e": "$zke", "B": "Pbmbcv", "Coper": "N_7Lf_4Rf$" }, "ev": { "E$a": "$T2_HT7O", "_E_6U_": "$8___85__", "_F_Y_": "Aref" }, "aBplZal": { "j08": "sC$X_", "a": "k8$$N$V$", "cVP$P0": "_xb4$" } }, "c_g$S_$$7$_": { "_": { "_b7D__L$6": "__5V7VP", "$_$": "_u", "l__def": "d" }, "$___$0JSE_": { "$w": "e__6$y$dmP", "__H_": "$_1$", "w_Wal_Nz7": "ySetter__pr" }, "Ci5$$$3f": { "j_D6$dN0y9": "C$_0Ks7D_9e", "F$_$FA_": "$O1", "tbin": "$02" } }, "_": { "StrinameOnb": { "_O": "Bcplyq$Z$__", "_$": "m_p_$yk", "U$682Y$h6E": "_$G36__" }, "X$l": { "_uF": "M$Zu", "__": "J03_", "B_Zt_U__8d": "W40y_RMOp" }, "_o_1X$": { "Qi23_N$8j_Q": "$g$_E", "$e_": "_j$$_$2$$_", "$toS": "Y71e" } } }, "$P$__": { "$st": { "E____F_858_": { "$_v2e32__pr": "u__k__$W9_h", "$3$EbQ": "zref", "_4Wp_9$$W2": "bNzbF4$b" }, "$p": { "Z__": "$ref", "d$t": "c", "$2_t6_8W": "$n_t_5_T$L_" }, "$Cw$p60n_$": { "$$$El_": "F1t", "_": "$z$$", "dref": "$ar" } }, "CG__3": { "_Tvh": { "Z_P": "$t", "_GE": "C", "$q891": "yname" }, "$": { "_1f59": "$$68c$$0$$1", "$_f$$ww_": "$", "_$o": "s_tr__" }, "w": { "Ig9_DId$": "C$$H$", "$": "d68D_", "_7$$P": "$VtoStri" } }, "xc": { "$GJW9": { "T7E": "aC$XF", "_": "b$A", "gkey": "le_e16$Z_" }, "_A_6rZC": { "_ha": "E_on7u$$___", "$": "$2$$", "$9C$": "cS75_2BE$2" }, "A$0_CH9": { "_l": "_", "Ouhn": "q", "x9": "_P__defineS" } } } }, "xwC_Q": { "$p": { "PqH$": { "_4y0bp_j80_": { "$": "ELc2$$", "Q_6nD_E": "_j$Byi_A$", "_D6O_sU_": "Ub$$t" }, "_": { "vu$147": "$gu", "xn$G_p$__": "RDQp_K", "r$8Z$_$": "y$M4___X1" }, "___$x$EH$$v": { "Q$": "_0_I", "Y0t": "zkey", "a": "$v_" } }, "x": { "e_0$4Ny$03_": { "_0_$$e_c4o2": "$$", "j_": "n", "SSo$": "e_9$" }, "w$O": { "$_7$n0_": "y_o", "_O_": "d", "El$d": "____9I" }, "x$4C_$2X6b": { "D$_C": "H_", "$": "Akwa93c$Bv", "$IsE_4_$$_F": "_apply" } }, "_g$9_": { "_hMzT$$": { "_": "d$6", "eb_8A$Rp$_": "_a_k", "c6Cf_uK_eW_": "$valueOf" }, "$$": { "X": "v0", "$wnPro": "Q23", "_lengthbi": "_$$" }, "Eq$l": { "_caller": "b_o", "_5$_": "__$h_v9m", "$": "cqcKG" } } }, "_$$7$B$": { "_": { "_": { "_A1XEcV$_e": "$ket", "$h_$2nE": "Y1$R_Q$$", "_": "$1_" }, "_t": { "q": "tW1toStri", "$iD_6_WJtp": "$__", "l": "s$T3t$R" }, "c9_y$M$CT9y": { "_2C$_7": "___ap", "Mkey": "BY__", "$T9_p_$at": "$A" } }, "__$": { "n": { "b8B3": "N7wJg_m$", "Ekey": "u_gXn", "$$_$0D4_u_": "X_" }, "Btin___look": { "_Po": "_XTd_9F__o2", "_65$6$$$4Vn": "_38", "$e____y0_": "$d4" }, "$acaller_": { "_": "_a", "$__4": "mu$7_s__D", "__o_$P": "X$_Bjb$_v_" } }, "WC__0R": { "Cref": { "$j$X_9q": "$6$", "$x__3$815": "$p", "_$AAQJ2__$": "pookupGet" }, "d": { "y1": "$___$i$$$", "T3_e$_k_kM": "Wco", "n": "B2F$b_0fm_" }, "$pro_ucon": { "_q$$S2__": "_property", "q8V": "c$l2$", "b_2a": "c5bCq7f4Y" } } }, "Dt": { "$_$4t": { "o3n": { "_cons": "_$_oS$g", "$": "B$8", "D": "A" }, "C12D0": { "$name": "_uall_", "_$_o": "_i$W", "$": "aAprototyp$" }, "z_D$MTw$": { "PEv": "_$5", "c0$$": "Ab_$p", "UnW1bw1W": "_zko$$7_" } }, "$1_": { "$7_q$$_$E": { "EcW_D": "NKh___6a", "A": "$apply", "_3_$D1xd8": "X2" }, "I$I28$_h": { "$": "x", "_9$": "Q_$vpP_", "_4$mU": "Dieleng" }, "YHX$_": { "ZBjx_m90$$S": "dZ$", "_": "g$7__4$E_Cm", "F5_lO_8j": "V_HgT_" } }, "N9_16": { "$$AC": { "gprototype": "Qcall", "$5__loo": "_$", "_i": "X" }, "$_sBwc_$": { "E": "C_uLc_R6", "L_A_": "$D_", "D": "X$usIhC_" }, "Zml0L_": { "Ad6T": "D_", "$": "Bj05_Oo2pu", "__bi": "_" } } } } } }, "VW": { "UCT": { "C330$_": { "$4sr": { "F_": { "d_b1$X": { "$$76": "$__81Y1$__", "e_Ey6HI": "Dccs_$1_E1", "R__T1__0l": "Al06X$" }, "bvM$D$3$": { "K": "_$", "__Go3v": "$9_WC0Y0__", "d_n_": "Dar" }, "B6$n": { "DU_$": "a_u___OB0", "$": "c1__L", "z_defineGe": "$5oFw_c_aX" } }, "Z_C": { "y3": { "__": "n_$6b", "$CN1$C$$Z": "$9_Wd$L_Yva", "$$$fA$9oTTK": "$ref" }, "$p": { "j$w": "_$", "bn_": "$$_$2W_C67$", "$D": "DM$" }, "d$2nG_": { "L": "Dref", "_": "X0o_2_uhjNJ", "_0": "_toString" } }, "u__$Tc61Y": { "eoMrF_t6u6V": { "_$": "AY5", "_3FWy_C$$$Y": "a$5D8", "$$": "$h" }, "$07Zl": { "_Sl": "$_$$X", "_$Yy$c1W": "$h816z_", "Yu": "f_Ul0" }, "q": { "_9sw_HwM_": "_", "a0_1K": "_$L$__$$n", "V$": "I__$b4" } } }, "C_U": { "__S": { "_$_$2_n_$": { "Vref": "_", "_bi": "_$0Q_", "J_o": "$$" }, "Ph_$__ENznK": { "$$0_7": "$", "w7_$3_7$_": "as_N2s$8", "JSM__7$$": "dBa_$th$3" }, "_ref": { "UTi__": "_$p__$$5_", "_L": "rM__$7", "$_6$_a3__K": "edz$DB$_N" } }, "e22hgJ5$gL$": { "Ek__VdT$": { "z$$": "l_F", "_O_6_Eprot": "d", "B7$4$xt": "d6$_$_b_$_" }, "uo": { "$$b2": "A$p5", "_B": "V_K2$$", "_$1h$$y9_": "D_V25Ck__" }, "_": { "___lookupSe": "$", "_$_$$$$$eG": "V_", "A7o": "q_dY100" } }, "_H9__DA": { "A1$": { "E57T0_6": "bphd", "Crg": "_9w", "E": "$" }, "_K_5$_e": { "P__Z2$$c$1": "_Z_$pm$", "_6i$_qy": "Qk", "dW": "_k$Aa$$u_" }, "Y": { "D": "$Ve_7$3BLz", "xA3_OB_B_": "DVAS_z_", "_hE_a$$wC": "zZ_DGuF" } } }, "fu": { "CgVw$": { "e_": { "X$": "E8M", "Y$": "y3", "$$49roH6O": "rK" }, "Twlx$__": { "$1e_qA_Vb": "_", "$__p": "c9", "$3": "_D_" }, "_$_$": { "$": "b", "$mR3t4": "X", "$Oj_BB_5$H$": "_W_s$8_H1" } }, "R8d": { "w": { "_7__VxCk$o": "zV_0MS_c_", "$$L": "_$A", "_": "_$$$$0" }, "B": { "D$z_q95Z4$": "B$LI_$x$_9", "$5$_L$4": "n$Q9$_3____", "B_7$": "n$D$$e$5$" }, "_c": { "eQ": "_28_$_1N$", "C": "_RI$1", "___proto_": "$" } }, "__5Q0i$__": { "_e_": { "vEb": "_7Y47$$", "$": "$_9BM_9", "y$72$82l": "_2" }, "dE__c$_$j0": { "C": "_71_5wS$_$$", "__f6__0l": "bZ8", "$L": "$___3i" }, "_W": { "e": "$", "$": "_3$f__$$", "E_": "mref" } } } }, "_t": { "$8U_Y4$61K": { "_v$5a__nst": { "$_$$aL": { "Y$_2": "$", "mcaller": "veueE", "T": "_arguments" }, "_$W": { "Z": "tB$E", "$$FS83$$$": "X", "$_1Z_B3f$": "_6__4Z1$2" }, "p0_$$__": { "$Bh": "__dX", "_ij$$": "bbind", "_v$bQ0": "w_XB1" } }, "$EX_67": { "e$$": { "U9": "_$5A", "aref": "__$W", "$": "$E$6V_P3i2D" }, "$_": { "c_$6$": "v", "S_l": "ZoV$c_sD_", "dqr_a7": "z$" }, "d": { "P": "_apply", "_mlyr$474_": "V", "vt$oScon": "_rin" } }, "$t_9": { "_call": { "Gcall": "m", "O2p9$$$$": "H", "$$4": "z" }, "T82PN": { "H$_bW": "E7$$v_x_2V3", "$prototype": "B_v$$504_", "I__": "$_1s0_$" }, "$7R81c_$G_R": { "$2_": "Nm7J$bpd_9", "_": "ty$i8MW", "$": "_I" } } }, "_W$3": { "O6_Q6s": { "$1_8": { "_": "oj0w$27", "$_TQe5_z$u": "_ref", "$c": "$$1$3$3D_e" }, "$$__": { "bq7": "_X", "$R$": "Y_", "C__": "e$7$8_76L_9" }, "Q8": { "o8___6_": "$_", "$Xv": "Owz", "$ot": "$t" } }, "BZs$$a_xV": { "$$Bl": { "gJL$e_8_$$_": "_S_k_9z4Q", "a2Xz$B": "Bt", "__D7": "$" }, "$_b1": { "vp$$h_": "aOUx_l4_", "$$B$_TT": "__$$$", "U_": "r" }, "W_jo$$62Ta": { "pY": "$$p", "X$_": "D$", "W_9$$w": "I" } }, "sc$_X_33F": { "J__1": { "cl32E$1": "__", "C$Ui79_": "cAPrOrM", "D": "m" }, "$yp": { "_07": "$", "Alue": "$C$_2", "$din": "G$" }, "$_1EiLG_": { "___proto__": "aS6$wC95", "x3D$_$$SVu": "S", "D31$$_z$": "DJvc_$$CB" } } }, "n_Y": { "$$o_": { "ZY77_$9": { "$50$oz$q$o": "BR8_b_", "_toString": "$r$2__v$L5", "$A6$p9$gx_t": "$$" }, "__AzB$$$": { "$N_": "Sp21", "e": "nE", "$_5": "_ref" }, "x$$3_u": { "_K": "o", "D$": "_", "_": "y" } }, "_7__$$": { "P_d3$$": { "__VRgk": "U_9A6$", "_P7m_7U4_I$": "_$ea", "okey": "Y$j_x$k7_v" }, "_k2C": { "_yNC__def": "v_u$X_N_$_", "avalueOf": "$_$", "Q_5$___ZQ": "$0" }, "I_N3_iY2l$": { "A3_": "H$$r__H$", "_ref": "VK_3T8_4$e", "w$": "_bw" } }, "_": { "f": { "n$b": "Ex", "Jx$$2ua$": "n", "ae__": "x$C" }, "a": { "d_sBS$": "_l", "Pa": "$w_6$6$B_", "C": "B$CBZ_S7s$_" }, "$$": { "f": "zyc_X_DVM", "bt$": "__$u$_", "$_$": "$$5P" } } } }, "_6MS_uj$eU": { "$s$Dh0$$_": { "y_$$": { "W": { "c_": "e", "e": "_G$_$$_", "_efbbindcon": "$0" }, "UY_": { "vconstructo": "gh_Gu30N", "IvalueOf": "Bna", "$$xe": "f9$$$B_Fo" }, "_ref": { "_3i2t_8$": "t", "$": "r$1ZZ$x", "m5_": "_F_4_$_9__" } }, "a__looku": { "_": { "Rhxe__": "Y6$$", "H5": "p_", "Z": "_Y$$___1" }, "$_av": { "Y6w$iIu": "_", "_gUH$b320s": "i_T1C23D8_$", "_va": "$$_P$$$Pa" }, "_5": { "_l": "V", "v$0_Ebd_BX": "v$___A", "_": "_$G70l$9$$" } }, "C": { "$": { "CC$8_0": "$a", "y": "$l_$9w", "Ec_$9l4r": "_" }, "_$": { "$vt0$eE81R_": "_G_d6", "r_KM$3$Yl_": "$5$6_9_23V$", "A3b$1_": "$1" }, "_$$": { "YD_": "pPto", "B": "B_$E3mDr40", "$": "__" } } }, "_oLo": { "A9valueOfca": { "_$6": { "_T_1c": "v__l", "$bqx$N$$_": "$pcal6cons", "M$": "z$" }, "Yf$_ju": { "oA0": "_", "$_$": "$$Z$l$_", "bf": "X_Al" }, "_": { "$w8__": "BW1_$", "L": "$A$3g$$1_$", "$_y$": "$$$$__82" } }, "c$_7": { "a1EC_9e": { "_GeqIT": "d9_AOzQ", "Vkey": "__0DI$", "BK7___427$A": "yE" }, "$3": { "$2_VB_$$$bV": "p$4uyo_lB", "v0_$": "$T__w$FV_", "_2G_0F": "d___defineS" }, "q$F$_pFG": { "__$_$Q_$O_4": "w", "$$_$1$$$6": "$ref", "_U8S75__": "$" } }, "xz36$s_": { "gP": { "$": "vGD2", "$es$d9Ce": "d$_DA__1_w1", "weL_3HW_B": "B$" }, "__C0$$_m$": { "_": "$_34_$k", "$3$": "_e", "_7gr": "_c46__fe_f" }, "$": { "dc05$7Yv$u": "bca_z_", "w__defin": "N", "C": "_bY3" } } }, "o4__$_06$8": { "$__O__qV5_": { "v$bN7": { "_$D72": "g0", "_valueOf": "W_$", "$$mI$$$p": "_" }, "$$YWt$Vc_": { "XI$7_$G_tv_": "i2aAe7$m_", "ev": "_$1D", "darguments": "x_3rX7X" }, "wMT_X7": { "M": "Cto", "P": "$$B$$z_", "_": "_" } }, "AX": { "F__": { "e__": "go___$0", "$0_T_G$G_7": "$9", "$arguments": "m$S$$$$$l" }, "Cal": { "eCLA": "$$", "__D$ObF1_n6": "Scal", "_": "$nQ_W" }, "F_r7o": { "etx_": "ar_E7X8Z", "OjfP___$_": "w", "N0i_Q7Kg": "a_I" } }, "i_f2__33$Z$": { "BZ": { "Z_": "_o$9XC", "cNDU_L$_t": "id", "$b$f_2$": "Fn" }, "Y8": { "_": "$$", "__dL$$68wTN": "Cs", "n$cAs$$__Bl": "XtoString" }, "_": { "fcall": "_", "$x$4_S$_": "_W3t_98$_", "e_pe": "$" } } } } }, "A": { "_t": { "eXDb": { "x": { "C": { "gc": "$", "w0V_Er": "__9h", "_Z4_N7_$H_$": "V" }, "Wy$8$i43c": { "_R": "Ue6$", "_j$4": "_n0_m_5_", "W_": "Ayuc" }, "B_MX": { "j$_": "Gkey", "aarguments": "$", "$$c": "q$_$_4i_" } }, "$s7h_3$": { "_ref": { "_eb_1bOM$$_": "$K7$_23$O", "Y043l8F$rF3": "y7Q", "Q5": "e$" }, "Y0___$O": { "mYA": "v3KL", "PkcO_e": "$$E7$", "B_": "e2$06" }, "Ek2$lengu$i": { "$P$8F_Y": "na$", "$_6YG_": "_", "$_$": "$B_w$_np50_" } }, "cA_": { "e$b": { "$": "E$__$31_", "zZ$z3d_O$$": "$i$_4sjv_C_", "Xarguments": "$3Ul" }, "$dcg": { "$": "_", "$$A6_v_$": "d_Y$__$54$", "XZ": "$d__" }, "C": { "Z2YDV$$_R": "y$_", "__r6_$": "$k", "sM$": "$R73E1$P6w$" } } }, "_6__E64$a": { "kVDU_C_": { "aref": { "$ref": "AtoString", "XH": "ZV_Y_F$a", "_d": "WPo7dSe" }, "T$$_vW": { "AvalueOf": "_C8", "$ref$a$r": "r_fC$", "k": "$" }, "_merAb$_p12": { "$SA_X6V$nV": "_v$xL0IZ", "_b$Z": "D_$g0doj", "cref": "Y_" } }, "t1u_3$$9$7": { "$": { "_cname": "VsQ_$", "H": "e_633aTU$$_", "Y6_v_$$06": "elengt3$3" }, "_z_O_R8$Oz": { "nFgl": "_", "$T1$": "D$H_o6_", "$": "AN5b5" }, "_": { "$_$$Q$_P4D": "$_9", "_eG_$$k": "$$_p_0Q", "CR$_B9cI": "Ce99__$_aRT" } }, "C": { "X9_4_": { "__w": "n", "$$$5$_9$9": "_6L$Y$5", "__JjT0_$_pD": "$O8" }, "AS_6": { "$__Z": "$_8_", "r9l$A5h$K_": "$", "_e": "Z1c1f" }, "_": { "_": "B_46d$", "fYPI": "a5", "wa_2736p_G": "Glength" } } }, "tQ0T5$NN": { "C$3sH$": { "_yk": { "z": "$w__u", "zlookfha_tr": "$a_", "VY": "AvalueOf" }, "_B_no$01": { "y": "h__", "$_bn": "_80g0u", "_5EbjB$J__": "a_ca" }, "_lengthl": { "_": "$", "_EIx$__": "yref", "evN1z9etU": "_cdA" } }, "Men": { "B0$jd": { "A": "t4w6", "z$$92": "_$href", "r_": "v_rDp_n" }, "$dw4_$5Hr": { "Z_": "__", "cJ": "$1_A", "_1ID": "rtoString" }, "_C": { "za": "_d", "$$A_v_3": "Abind", "c4_18$_1Jg": "g" } }, "$w$c": { "CTQ": { "_e__": "W1m$s$__", "_b8": "_", "_name": "p1V" }, "Q9": { "$nam": "__ntI$", "$$_T": "h__9", "_": "_m" }, "$_62Nid8": { "$q$g_": "$8JW", "uN3v": "_length_e8p", "$": "Y_$F_1$m3" } } } }, "bb": { "$51": { "_D": { "_n": { "B_": "Xbind1__", "ctoString": "z", "$_$G$0q4Q": "O_const" }, "z__69Hfq": { "$e": "i9Wv8", "$": "$B1_$5_$yzd", "x$lengthc": "$$$E$13" }, "$5C_LdB": { "vAXE": "E_Wa3$VKd", "$t_": "h0", "$apply": "$" } }, "c__TNz_": { "Kmd": { "$_7DE$_E$aD": "_C_0f$m$$oc", "w_r": "$_", "_dF$": "__" }, "$Wa$$$": { "_d4Nj10E__": "_ErN_$$__", "nm_": "A", "DE": "b_9" }, "_BX": { "_": "p37LWX$a3", "$d$6_E": "$ref", "_k_tt": "SW___$W_A" } }, "y2mwv": { "$$_4mi5": { "d2$": "D", "Barg": "$key", "AL0$$A_": "y$y$" }, "___": { "$6$FIC$t$7": "$8$_KJ", "dd5_ic$81L": "$st", "_a": "$ke" }, "_ma": { "nMD8_FO_$E": "viV", "$$_7Q_DZJ$q": "_apply", "E": "Clength" } } }, "Vcall": { "u_": { "$3$": { "cm_N": "$$5_O2$cb", "X9o$XL_": "$_Z", "_$TZ$$C$J": "$m1$l" }, "_": { "eW9$S1B5W": "N69", "d$0A__proto": "$", "_$tRzar": "c0" }, "$2E": { "vl$9$a0Lw": "$_v$5_", "P": "_toG", "$_7_$_TM784": "w$1_$2n$_$" } }, "_0X__": { "_pB": { "$": "e__d", "V_$7": "$k_b_T3", "$valueOf": "$1nv_" }, "_5E84$$heK$": { "C$$__": "$I3", "_7Rfa4$0": "Z$$$d_0d_8", "W$$RUV__w": "c$L$$UVm0xY" }, "Bc": { "a_": "callq", "$$$vYd": "yV", "_$$$3V61$yr": "x_p" } }, "EvalueOf": { "Y": { "Dz_2": "_$p_QS$", "ae3$l$f": "l", "$$Ig9lL": "vO$D" }, "B": { "w9V9ecC$C1": "____8$$_0c4", "__": "aZ$YhU9wz1_", "$toString$S": "$4r$6$7" }, "_8mn_n__ee": { "_w1": "_$$_m$7__9", "d$_r_": "___", "tva": "_$P" } } }, "B_b6t": { "CB$d_XyC": { "$Ke3e$13_d$": { "$_97": "W$", "Ylength": "_6$", "l9Fj$": "$3oStrionam" }, "cz7": { "_apply": "_length", "f__$": "_ref", "B_r": "_$$3_" }, "_": { "C$_7_$b": "_$$mWv_Xg", "$nx$$jt_c": "Bdp", "c$XI0$88": "av_" } }, "_": { "D$C": { "VT_0$S$_$4": "p_j", "$d8_": "_", "$__A0_3": "_" }, "$$$P": { "b61Od": "_key", "$$y2m": "t$3l1__13", "$$c$b4": "$7U" }, "Y0f7V$": { "$g": "_r4K_", "e73nref_Z$_": "$", "_$$": "__" } }, "cx$_rp$2$": { "__E0gAS9Wj_": { "_9Ul6dm2n": "G9", "$m$8v_$_": "$Tu$_", "C": "E_s00" }, "$iW_wbkq": { "wb_T": "Eref", "$": "bH8z$", "W7B": "$bind" }, "$$Sz": { "$KC_": "O_0x__$1", "$vDY_$B$_": "xp", "wkey": "ZQ0_0$$$" } } } }, "$_$S$$o$$": { "Y2_y52ALk": { "$7_$$": { "_B$2": { "Z$28$Fv_Qt$": "Nd", "D": "k", "$b$3": "_$A" }, "$valueOf": { "$2e": "a2$_YB", "E_pr": "Y$9_KB$", "D2Dn": "$zy_1_" }, "$hasOw": { "W_": "__o$C$1r$", "je5$0_9cI": "xi4eAl$Z", "_4m1": "t" } }, "$_9$v82CZ_": { "e": { "$": "$Kv", "_Rofx": "t", "$$q655O_$d0": "$k" }, "_e": { "fco": "b_R$$1$_oA", "$$y": "Y$0$Ac_", "_8c1d7T$zl": "zdM$QE_" }, "_$xd_3$$": { "$2X$1wZ__": "_callmDCap", "Mref": "_p", "S": "$r$o" } }, "_pro": { "$": { "$$$9E1m": "_0r0A8Mmw", "$2": "_7g", "_A$_": "_" }, "mapp": { "$1a$_Y": "_m_2e4", "_apply": "a70A$K", "X_Mmt": "Y11z" }, "$3O": { "_A0": "_3a", "$l$2$2N": "WR80s$", "U_": "___frO4J_" } } }, "e$$by$": { "i6c": { "e": { "_$Q__lI0$$": "yr", "_j$$$$FX": "larguments", "ZAd_$": "$a" }, "V$__$Q7": { "O$TO7F$Dc$_": "E$G0r6r6", "$Zo_": "E__", "_9AP__BZ__y": "iveZ" }, "$$$2S80": { "Xl": "v_o", "_$l_sIx2_e$": "_56_Jj", "Gconst": "dTnfuA" } }, "T_SP8": { "$7X$_vq$Q$y": { "$8h_6X$$___": "$7_9", "v_7$_43R": "SYC$_D$$_", "x__$$H$7Y__": "$n_b" }, "a9r4u": { "_tt2bind7$t": "$ig5_YQ_", "dyr": "z", "$__5td": "w$" }, "$ro": { "_": "$lt", "ahref_": "u$___w", "_mYE9": "aG" } }, "$DCWz_$": { "zSI_M": { "$bU$YNK$__": "Vm$3_1", "$6I__$": "YA_4_$", "_": "_d$r" }, "$$_b": { "f__D2c$Bv": "a_$", "_c": "$", "lalu": "__52Q6$GbRa" }, "CVupSe": { "D__": "c1N_$352_N", "$": "p9b$b", "_": "j___x8CZ" } } }, "z_aT": { "xxKe_Fw2__": { "a__": { "b6G_N$dj": "Dar", "h4d_sD_h_": "_$$3_Mf5b_", "_bB": "c_4NG$_k3" }, "_9B$__": { "_p": "$Zine", "_Cgd": "D$$$1_", "$t": "_$C7_$I" }, "xx": { "$zVC_R": "__$6_5486_a", "Ile": "w$c1", "_Z4": "w67" } }, "V_sE99_C__": { "_Z7r_b": { "$wL$86$_": "Ck", "wZ9": "_8p", "Zq10h$": "_O$9_I5o_$S" }, "_c$$e": { "___3_1yBaC": "$$N_", "_arguments": "Q3$L_d_64", "gx_": "___proto_" }, "C$_": { "wB$5Ge": "_key", "BT_$$$ea_80": "Akey", "_Ea": "Lproperty" } }, "$$_l": { "$_pp": { "_1_": "W_", "_aK$_": "z6d_", "W": "__D" }, "_i_7$H": { "$NF$G": "Pkey", "_$XD": "_$_", "a": "_$W$$K_" }, "MZM": { "$$Qzshu3$Le": "$9l$$$$_$_B", "_$$wy$V__0_": "__", "d$qy_9S97$": "b" } } } } }, "zD$2$___B6_": { "__j$": { "z8ga": { "VVV": { "$s$": { "$$O_Nz_3": "_p_", "XL_YER6L$E": "$$uE36_$A$", "V$$A$C_v4N": "D6z30471b__" }, "ke_": { "_s": "b__", "_ref": "_h", "$__": "$b" }, "$G46_$_5": { "z5$": "___", "Xc8": "_valueOf", "$": "_ref" } }, "_3Gc8___zR3": { "ZuBto": { "Ckey": "r$", "__e": "$2_$0Sa", "fB": "$_b$" }, "_6": { "aqo$R$$pk6_": "Cl$$D$$", "C_$F_dCqBp_": "a_Ue", "Ystruc$$$": "E1_dQ_2FM_$" }, "Zw3": { "$RCce7y08_3": "$22$", "_F$$T": "_$5_7S$$", "$": "$2$UQ" } }, "_V_$g$": { "b6$Vf": { "i93km": "_g6$_$", "P$20$dwZW": "a", "b_5": "B_$l1mf" }, "$cha": { "Nz3wG": "ZMuj0t$9", "_$_$_": "_O__defin", "Dname": "_9$Nt" }, "j$": { "$$_": "D$V", "_3p": "bb_", "_prototy": "z5_$$8j_" } } }, "efY1$1a": { "$": { "_toStri": { "em__": "c$_j_S0e_51", "_b": "$key", "B$_hconE2na": "_GhS$" }, "c": { "$$_UQ61O": "$$W__$K", "Xref": "H1_", "l$3_g$$Z": "zYr$b" }, "_key": { "$m7": "_", "a$": "_0", "$$op$vb5Z": "H5" } }, "CO$Sbt8fTf_": { "$_P": { "__": "C1refTprope", "d$_": "_a", "_bind": "X$_$9AR$$" }, "_": { "$$hZ$": "_bd_$", "$_SN_$G$$9": "N$V1$$__$8l", "_$9c$_fR": "$" }, "_$": { "DR": "$", "__37h$__": "d_o", "X0": "xkey" } }, "_$7W": { "dal": { "$length": "_$7$0t24$$P", "_1$T_n6_$w": "$5tS$_ELm", "$$$31b4Z": "$" }, "_zqLn$i$_$": { "$B_OD1cB$": "e0$$_5XoDH", "Q1RQT$_P": "cV$4Cv_L$r", "$8$r$U4_": "g5Z" }, "$reopepro": { "__": "$", "c": "a", "_Ua0ax_o": "EisProtot" } } }, "$o": { "$_": { "D_K80_": { "m25_n": "i1_3l3_$", "aMX692D": "_", "eGokupSette": "_" }, "bcall": { "$_Yu_aq$$_1": "dx55", "dT": "t$$3", "DP6": "_F$vF__$_" }, "$_a$": { "$64T_2": "z0_E$$", "___3YC_b3": "c_C", "rR": "bX_4" } }, "a$_cAw": { "_t_cA$": { "z$$z": "f$_qgi6R", "e9$": "_2_0_l_", "G": "eO4i$rgnp" }, "DR_R_$$0_": { "_$": "d0C", "_$__": "_6", "$20": "M_A7" }, "_": { "te_i": "u", "Os5J$5s$": "B12", "C2_l$_____$": "E" } }, "$eS": { "_valueOf": { "A$J$$": "ij_KZLP$6v7", "_ngtha": "_O", "_c": "o_" }, "__$efaQE_$_": { "$8F9_k": "g$RY", "_Sf7Uf_": "$bH", "x$7$ED$__": "_A$8U1C1" }, "B3_n0": { "_bMK$_": "A630$g_", "__51": "_", "B_3_$J": "$KmuOJp$BJ" } } } }, "$x_S8$N": { "_$__C_T2": { "_q": { "y$90$_k$_yZ": { "_": "_", "_2$80_6_P$": "$", "cbind": "p0P_" }, "_": { "$02": "_$", "$": "S$H", "_6TyV": "__$J1y" }, "AJ$e$": { "y1M_On7Y3": "Q__y", "_me": "$wW", "$$": "e" } }, "wum": { "_Voj8$a5": { "AtoString": "$$W", "$hg$8_e": "$$_$0f", "K": "_$" }, "_$": { "$$": "D_5$", "b__4__A9$": "$91_$g_I0", "wval": "e" }, "_2mU_h": { "_sWZ": "D_", "$toString": "$key", "c4$__A_": "$" } }, "aprope": { "yTIazq__": { "$$": "Bf3p_$1MC", "R__3OZ1$": "C5M", "B": "__$__TD7Y$" }, "_$5$": { "$3": "pu", "_Z$_89SO$0": "$Be2_e$_1_$", "$Az$_": "$5$c4_$a4" }, "Q$": { "Dref": "w_scall", "Wv": "_length", "Xb": "__18g$$AU_r" } } }, "$$$h_$": { "PAc$jTwM3": { "PtottoLo": { "Bc": "$propertyIs", "BT8": "Mc_$", "_8L4lm7Y$E$": "$X8_$m__$g" }, "$C$__$8$_": { "aS_$$Y$JZ": "wkey", "Z5V$": "__0E71y", "_p_7$": "Oi$7b1" }, "_b": { "Y2KmB_F": "$__", "_8$_sn$": "zxA$_6sAf", "_3SN$_": "$" } }, "Sl": { "$W_$80MG$Es": { "vX": "$IT___", "$_$": "$apply", "_": "$_" }, "_q$yfSSCF_": { "_81bV": "ebind", "iV_U": "_9c$$S$o", "rV_jK_$DO7$": "Y$0" }, "$h_dmUgn$": { "_6efi": "cgwz", "_$$KG9$_J$S": "c__proto__", "Z_w6xC20": "c9$" } }, "dE$": { "$$_plyearg": { "_8rgumepro": "_8_wA", "_075S8_": "g", "kp": "WF1v" }, "aV": { "_key": "e", "$L$1Vm": "_0_8", "$3_": "$T" }, "ch5$$_": { "$": "v_d", "_ref": "c_", "h_$$__h6_d": "__0" } } }, "CZ81_5": { "V": { "_Y$Xj$3_": { "_7_q": "_0_$Y_K", "$lengthkeym": "__", "Nm_$ff": "V" }, "dO9": { "m_$ep_E": "$$s$1$PEX", "$": "e1i_2M$", "ebj": "$_$i" }, "$W": { "$toString": "$A$", "w": "$$Lo_$67$", "DBe$": "__XcF" } }, "_apply": { "Uref": { "A": "d", "_r$5_i9$af": "_w3", "$pe_rototy": "Q_7_$A$$" }, "$$mN$K_C$$6": { "_$7efS": "_$", "_": "Y9B__t", "_T2__M": "N0$9f_X4" }, "x_p1_$0$": { "$": "_O", "lEb": "$3", "_w8cxA_e": "d$LY5" } }, "cE": { "bFv": { "D8Ip$": "_Yf$_", "aref": "__", "$_dhasO": "$ED" }, "R2_$ZZo_t0l": { "$fBcons": "_f_$aPS$", "$_": "_", "bisPrototyp": "BbAB04C31" }, "dtoString": { "_v": "__", "$6C$": "_$", "_f": "_x_z" } } } }, "d$GI$45$": { "R": { "E$$_": { "y$$$": { "A": "$q$GP", "B": "$UZ$$_", "kfvuUn_a$_0": "__H" }, "_4a$48$": { "Ac": "__hDxw$2cV", "$RO_$$0jT": "gha", "OA$$9yM5": "_z" }, "V$$$": { "_xa": "D2_$_", "$_Tt$": "$_", "EW$$": "Yscp_" } }, "$ya": { "_$$": { "KB": "$Ayeh$$", "h": "$nXkPZ_0Wp", "G1$9$": "aLJzp__$__" }, "$ref": { "$F7$": "_n", "_Tw": "UiS_$V3DPm$", "Carguments": "__" }, "_ey": { "a$aBt$_$": "t", "n": "_EAtCB__Stv", "_M_": "_t_$_by$__" } }, "$e_n$_$812": { "$": { "$apply": "Bva", "$leq4ypeOR": "atoLocale", "$__z0": "_pply__prot" }, "_": { "Dref": "wbind", "aN4": "s_wx13_91bv", "$7": "ynk" }, "Di2nfsF9": { "_v": "vkey", "d": "E_", "$eb": "vQ" } } }, "e8CF01_$G6$": { "_5$u$w": { "$_": { "$1rS_t8$_1": "_", "E_JkxWUo4t$": "$ref", "A_2R": "A92_3UF_82l" }, "_$_$e_$": { "A3_18oWJ_": "Hd_S4___1$$", "d$": "$arguments", "$_": "E$i_42$__" }, "_p": { "_7": "_1", "V": "Ca", "__5s$F$_": "_$$$v4YA$3" } }, "_6_gP_6": { "_ref": { "_": "e0zd1", "KO$": "$le", "su7ref$rKu": "As$" }, "_Uc": { "_": "_N3_", "N$7fv_l": "H_XR1M", "$_": "_I9Obin__" }, "$X_T$m_": { "W$$": "$", "_J9": "$d_$n", "H$bkeyisP": "_P_" } }, "_": { "$YYx": { "etoString": "Vf_N39", "$": "Acal", "o$$Sc_": "XFO$Q$_$_" }, "B$$d2$": { "_8_3v": "rb5n", "$1__Qt": "$4_", "_": "$__8_t_" }, "$": { "_$$_lz7_$": "__YF$d3", "$$": "iHts$_JCb$_", "b$_Y$$cE_": "yQK$V$_9" } } }, "V___z__d": { "$": { "C_8$g": { "L$_0OD$": "$callna", "X": "$va", "J31C_8": "$WiS6N7_9" }, "___W": { "B7__": "Xy9c_B__", "t8": "_iyWA", "aygFd_Id": "g5yqmF" }, "k51vslle": { "$xD": "dB__Qe_", "auK8$": "LH$lc$", "D2": "$1U__D$$S43" } }, "a$": { "Dpr": { "s$$5d": "___$4", "_x_2__$3g$": "zj38w", "Q_": "HcVh" }, "$0_Qp$_DY": { "Mj": "$_2$349", "krV$$eH$96": "__", "ybtz": "ccall$__x__" }, "Znst": { "$3": "$_Q", "_": "_", "v__": "_$O" } }, "_XCR$_j": { "Ce$W$jGl": { "__$": "e", "g$DLj": "_86___$9$1a", "$$mK_X_4": "$bGet$$" }, "YF__l6j$": { "b_No_qvx_$": "$7_$", "cT_e0": "Wc", "$": "d_N$M2e0KW_" }, "eR32_vfV_": { "a___q$$$1": "$I0_", "Dc_$6$_4___": "A__6", "e2$$_A2": "eWc" } } } } } } } }, "c__": { "_9$$xZ$___": { "$l$_5$": { "_0": { "aY29_6_$lu": { "j_2LOL": { "a2mOBy": { "_L_V$f$Yz": { "Y": "cmB_G", "ac1Bkeyopon": "v2S$_IG", "_E_f__nj1fo": "u__" }, "D": { "A__lookupS": "F_0D", "_name": "$$H_0M", "x_f7$": "wr" }, "p9_$": { "_BdnE": "_key", "BS2v$8x_": "p_", "$tkNfWg$9_o": "Y$l1klq" } }, "__J_": { "V98l": { "Zio_0": "$Zgs", "P$6_$i$UF": "E3s19N", "$y": "_$_z$_" }, "_$WD": { "$wQ_n_c___": "_", "$T$vWm3": "_", "_$_MXYW": "__5lV_$$8_" }, "S_": { "$$$_": "$6", "G$_0$Th$bb": "_6v4$Q_", "v1": "_Y$_a1s" } }, "C__": { "hpro": { "aw__": "lL0", "c": "wO2iJ_Gm$", "_P$0$": "$toString" }, "_P$5E": { "y8D__Ca_$E": "C", "Zz": "_", "_": "c4__L$_t0" }, "B2$eGca1X": { "D$2VB": "$argument", "_$": "C", "_FA00v4__": "$_0N$k" } } }, "Qv": { "$e$h_eTCA": { "_4_aumi$$O6": { "$d": "bref", "Y$": "_9__", "__S$": "$A" }, "hnd3": { "MD": "$8B4B", "$9isP": "Em$o_NO$$n", "_$$z$n": "$$6" }, "i3ca": { "$2$_6_": "aA_Bb", "$4": "$YWw", "hX_A": "X_u$_if_" } }, "_3_": { "lcallcal": { "_$PV": "D", "_length": "$b", "Ngl__7": "$Dv" }, "$KO_mk1_$o": { "V": "$toString", "$zb$": "ajL$", "C79h1iif_$m": "f4$1_k5" }, "$valueOf": { "a": "_", "_$9$Z": "a_EcA5z", "$": "DQ" } }, "$": { "_": { "__": "$$2_", "_WV9bO8": "C", "$e5$": "_" }, "tvalueOf": { "B$M8X2_": "e4$_0b$6_$", "V": "$key", "$$u": "_" }, "_$4__$up": { "Dr": "$82g5$b_CTh", "_aVAM": "oA_B_3_$de0", "kp": "BdQh" } } }, "G3Y": { "M9Z$_5": { "G__JvX_": { "p_m": "X", "Ag_$_$_eC3Z": "___", "$3J$DJ9": "W$rtD__$_o$" }, "nf_xyd_3I$": { "$JcO$": "$$F_", "m1$5p3_": "$_", "___EwV3K$H$": "_apply$o" }, "_Zd": { "v_i8_9_B3_$": "y1", "B$B2$5aj$": "__rg", "s": "dp0h__" } }, "d$$__": { "$I3__$": { "_8D": "_$__q$6O96", "_2_": "H$QFO$93LE", "_5$7_MpEg": "Em" }, "B$": { "$": "FvalueOf", "z": "Z", "e_kl$_r47l": "a_7_qok3" }, "_": { "cVzc_M6_": "_key", "dlength": "Woh1_Z7__2", "_o_vJ_$d": "$" } }, "w": { "_t": { "_v": "C", "b8_D_N": "$7$_ad", "$2$Y5_4k": "_ref" }, "$": { "M_$5G_Rqg7W": "j___proto", "__U$98D_Xc": "$mbMiP$", "_D_0411__": "__" }, "_4$lI7_8_6": { "_$W_1": "dv_", "L$q": "eA", "yW6a_B8_": "E_$" } } } }, "U5$VM2$O": { "_$": { "_a": { "_F": { "_7__FI0": "$15Q$59", "$_$05": "$$t$$X", "N_": "$6$0O_$U_" }, "$Ac_": { "$2_": "b", "$": "$apply", "Cf8$1": "pref$329c" }, "ZQ$": { "_": "QddD_Z", "_h": "_neGea", "$7": "Ulength" } }, "H_x_appl": { "$$xe$V": { "_$_zSwg_": "V46$Nd$", "$S_C___$__": "_$sOwnP", "WA": "LD_$z$_03$" }, "_jIVe___": { "_S_c$8L": "yvalueOf", "_$5Jq$C$_P": "$sCtv$6EXL", "$tZ95": "zWX$k" }, "$$cI$_": { "L5eQr$s$$": "$", "i4_9RSj_M": "VCC6abb_K", "$_D_8C_7$W": "__U$___" } }, "T": { "_y": { "t5_": "_D", "CD$dT17P$_": "V$_N$0$$__6", "B_9$db04": "$04g_" }, "b$j$poV": { "$prototype": "_1Fc", "W__l_": "B", "$L5": "c1ot" }, "____Bz_$_$4": { "$_$d_$d$": "_$$w2h_Ii", "K1$v3_0nw": "F$_", "g_0E_ij$m0_": "$apply" } } }, "Z": { "$5": { "wapply": { "_apply": "QE", "v$tribi4_bi": "$", "_jDkF$_N___": "Fototypn" }, "_cCD$gZ1H$": { "Z_32$$26_$N": "_$_6", "c8G3": "_MDrI", "$e5gr67$55_": "_" }, "bq": { "Z__a": "Sref", "_c": "E7$0$$$", "_b": "_" } }, "$_J": { "IJ_3_ua": { "A": "a$$Pn_$", "_W": "t$$", "I4": "b__lookupGe" }, "_$FD": { "VT2_$$Z_E": "OEx1$$$$", "_P$$2d": "$_m19X_40_", "$key": "_3$2K" }, "$__N": { "_": "_iW__", "J$L": "_", "kM": "$" } }, "Yca": { "E": { "$V8z": "_d$9$$M7_l_", "x_1": "Zprototype", "a9_$4u": "$" }, "a$N": { "c2ZV": "$y2N$$", "U$_": "c$__eY_FG", "a8h_jlc$A": "$tr" }, "w2": { "D__$$5": "y__look", "$key": "$_v$i", "_x6": "$le" } } }, "x$__v": { "cG_gG_$9$": { "_": { "$_Yv$$": "I$5", "HIapplyer__": "Z_D5", "_key": "_" }, "Bkey": { "E$": "V8R4_$Q$Ur", "W8G_$XK64k": "cf", "E_Cl": "_L" }, "_3$": { "Dsv2KNN": "UvalueOf", "a3v_": "_8$b_dPB", "TJ": "_caller" } }, "_toString": { "hBena": { "$": "_$$$_F$", "z6A$": "_J2VAB$$E", "$E_": "_key" }, "_U$T$h8": { "c9AzY$Av_": "$z90Hmn4n$", "RZq$1064_": "rG_h22_C__F", "$2TI_51_8$_": "_j$4LRu" }, "__5l__": { "_": "_DS1u7w_s", "$_0$Fe$U": "Dp9", "_$22": "_" } }, "Ne": { "_$": { "cHqC": "Akey", "d$": "$_$$A", "_6A_$DmA6": "$" }, "ts$Z__P$3K": { "_y3e$$gn": "A", "eA$_$Mf$": "yCkA$44_b$", "_": "$J3C2011qC$" }, "_7": { "bAUc_$$": "X_uF_", "_$$": "u_", "X4Ff0cn": "v" } } } }, "A": { "$0Ks$$": { "D$b$": { "is_8": { "_51$go$$$4_": "Wp", "N13_": "ukey", "_neSe": "$s$vd_f8_0" }, "z_": { "$v": "_G$_", "cyz": "_pR_H_pH2$$", "_v": "$" }, "$j$$1": { "_e1__$8": "R$2d$$va", "Z_$9zg$o": "$$r__h2M__", "$": "LVy$lH$P_" } }, "l0_s8$UMc": { "$$0": { "Wz__": "xp3_f_$1_", "$t": "$$_$$a2Y", "rZ": "O" }, "_6$1MV": { "_9o": "E", "_3_dz$_": "_key", "J": "CT$N_" }, "$zZb": { "aWoLi": "A9u", "__": "$", "$$Z": "$to" } }, "We": { "_H": { "EXvvAl$_": "$$_", "COb": "R_0bm$8pG", "Wo": "a" }, "$_8O6": { "T": "Lto", "cnp$$$$$": "yw", "_$A": "__5_$54" }, "D": { "_$$__S": "$TGnub", "N$S$N_": "Y0$U", "Y$$MD_$5_N_": "C$_" } } }, "h$r5$g": { "$_4_dL": { "$$vv$$_": { "$key": "t$Ceq$$$b2_", "_86$_x9": "d$", "xJ_yYL_gd_B": "v_Vy_$s$_4" }, "mWD$": { "E$$_": "v64$ls", "Wh$J_": "VS0S_G81$", "W_7X$$_$92P": "_s" }, "b": { "Nref": "_42D_Gg$_Ve", "D_6_7_2_F": "$___c_t", "z$": "r" } }, "_": { "__gA_": { "_$A2": "av_C$$b_E", "l_Y": "$$e$6_2$bI", "$": "e_051$_" }, "_8$": { "$_u4$H": "_Sme", "A3Z": "cJ", "_": "$i7" }, "_9pA": { "v$$2$$": "A", "Sa_69": "$__", "_i": "$$" } }, "$ao__16": { "Z": { "_U": "j", "_": "$2P$__", "bZP$l": "eb$kGlo_" }, "i$$": { "V": "$2Vi$3$$j_", "yI_G__$": "yapply", "$T": "_Vkbt__" }, "_7_T": { "$": "NW$$9_X33MR", "Afto": "$$", "__28$7": "W9" } } }, "$0jfc5_": { "$_": { "__a": { "$___n$iWW": "C$$045O$_4", "$": "B", "_s$IU8$a": "$2bBw$" }, "_v_$7y$2$": { "_$$1$yZco": "$t_w9_44k1i", "Y_$": "_j_$_is__3", "$a": "z" }, "C": { "gt": "$$89", "b": "$", "$pro": "_key" } }, "E8r_T$": { "i": { "Y$B1$P8_b": "U$a3", "Uref": "XwM", "vtoString": "$$V3I" }, "E_wZDZ_": { "j": "$1", "e6L$H__1": "bconstru", "w$$": "$$$9s$$H_" }, "C5$7u": { "$0": "R9_iQU", "b31$fEqFV$": "il", "k": "$__98cx" } }, "D": { "$": { "W_C$": "S__", "x": "$0_6", "$o": "c__" }, "bvalueOf": { "Ei_TYR_8_Wh": "Tr", "$9": "EZa__$_n___", "_": "hr$SN" }, "c9": { "r4": "T$prot_$", "v": "I___key_de", "_Q_0$_": "$5$roperti_" } } } } }, "_$_x$_": { "_$": { "f_$$$": { "zname9k__lo": { "D": { "_xy5$3Hr$3_": "Y", "b_Dly_ar": "Z", "Cp$$7__6": "$_" }, "xgfx$_U6_$": { "$": "bcd$$", "$$Y": "$$I_", "_1ngthKn": "$$$$$_RqTyH" }, "$": { "X_f3": "ecall", "_isPr": "KR$$9$0F", "Wx7": "$5h7_$" } }, "_b3$": { "Cp2KN$f$_G0": { "a_": "$by_41$0", "gv8$": "A_$_l1_M2", "$": "u$" }, "$tlhdlN": { "D": "D_D3", "C9__S8_6": "I_2sw_2RM_0", "EM$Bt7LG65": "c$X" }, "W$F_H": { "$x$$s_360": "$$", "_c": "u$FfD6$", "Z0$": "Z$$d3$3$v$" } }, "_7$z4j": { "__": { "i$": "ry9B", "b": "t", "$D": "xnam" }, "D35IF3$": { "YA_": "c", "_": "__$h", "Ajt8o_$D$R": "_6$TY55_W" }, "Y3": { "_S$$hV_e5": "CK$gsx_E0_", "$_q_tw$6_$_": "$_F_60", "Q": "_i$___Vz" } } }, "ai": { "_1$D": { "$toString": { "Q": "$34", "bbind": "$4", "_": "$$_$M6__$_U" }, "A": { "$C_$": "c$__d", "$j": "$FK$lO", "ZM2v": "qP$$$" }, "$cal": { "cz$$_": "$_$_r", "_$Np__$x7O": "o0__proto", "_QHb$26M_Ma": "_3_" } }, "$_": { "Cb": { "A": "$O_FA", "X": "_m__", "$$_U_Ry_T_": "$lengthef" }, "_": { "_OE9$_$pse$": "U$9Pk_N", "$_0X_l": "$$U$_4", "$valueOf": "$_$ohaXqG" }, "_l": { "k_r6F$8f$__": "x", "_8": "bx$__X", "_key": "$" } }, "tA$J$_6b8": { "EM$X_$A$": { "$v$$": "$Bh", "$O0": "x7_Z$_3$i$", "$2": "s7a_y" }, "vZY_": { "Cb$_8_": "as$_$$_Q", "_$_TW_2": "e_Iy_$_", "E_$_$N$_": "$P_Hv" }, "kAhxHE$9$": { "__G": "_e_3hA$$aMl", "$Q__looku": "_Settkeyct", "f": "zc_717E1B_" } } }, "$__": { "M9": { "__$2OrI3": { "_": "W$5", "P__$g": "_", "_l": "acaller" }, "WV_$1_km3": { "Xp": "eef_N_$", "SW$": "E$a", "$": "$5" }, "uc": { "$b$": "$", "c_B____R1I": "$__3B$_C_Qy", "_9_": "SB$" } }, "j": { "_": { "c$$7": "C337", "yin": "_M9_y_$wJ", "__$4": "l__" }, "$cz$e_$_$": { "$Ts_B": "Vapp__t", "__21b": "D$", "D": "_T_x_" }, "$39_": { "LnI": "$$_$$_2_l", "$c_T__": "B5u$bI$8", "_": "$8" } }, "BgA$_3$1": { "z$6z": { "Tg9$Xu": "_", "cCG$": "du$9OV7$_O_", "_uk": "$" }, "_4C_7": { "__O1$B$2": "$BC4G_v", "_2": "$1YEAY", "__": "C" }, "$aa": { "o8v__H$f$$": "M", "$5_e0": "_6_", "$_n_D_8$": "aDx__7" } } } }, "$ot": { "i_": { "Vbindarg": { "Z9b_$Ri": { "___d": "bE", "_W$v$m_$w$": "o_L__Z11c", "Oapply": "M" }, "g$$_$$$$_1_": { "n": "aK9_5_c3", "$z$_$5YGth$": "a_w_$56", "$2og": "_4" }, "$c$3": { "_": "ny", "a2$K_7": "a$_", "$el": "__h6" } }, "ug8Jh$$ro": { "N_": { "_": "Nr_0_$Uo2", "yD_0b30c$4": "Bkey", "__35_": "_w$d" }, "Bprototype": { "__JCVtuh$": "$_", "_$a_0$d": "g", "F9$_6iY": "ycall" }, "_": { "_ZT": "_$Z4$2__Io", "_$$": "z$B__N$_n", "D0a$A_x": "_$__8$$8_" } }, "U_r_$7U7_2": { "_i4_7_d7": { "k_": "_PT9_BO$8$", "_gV8": "d$4XCv2x_Y", "eajA$V_9": "a" }, "q$$Tq1___7": { "$301": "_Po_jQ_l_", "D": "_ll1caller", "Xp5$5_": "e_$construc" }, "$": { "$18o8jg": "$Nc", "b$_$": "t_bX_$f$", "___$": "xL3a_" } } }, "nfe1$": { "Bkey": { "$": { "E5I": "$ca", "ekey": "___", "$c": "parguments" }, "Bx": { "$_": "t__proto__", "e4e3p0": "BvalueOfSto", "E$7_Q$$$": "x_$$R$D" }, "FX_e_": { "w": "_YC_$yB", "Z_a4FBGn9$$": "_prototype", "X": "$$__$_1i$" } }, "q_$$7$3J_": { "_": { "_Zx_w_S_dd": "_U39_$7_1", "YtoString": "w1", "wtoLocaleS": "__2_1M$KL_" }, "BYX$": { "_pO8xdF": "$", "$vpp": "_d4_$", "Yb": "_9$_22C_G__" }, "$5ef3$$": { "_1V": "Lx$", "V_": "$09__defin", "$": "$$" } }, "V": { "$$_0$$$__k_": { "WvalueOf": "_94Ml$$$lt", "Eh_hi6L_$$": "_MP7d__$$DM", "YDa": "E__6De$6f_w" }, "G4": { "_bD$e$dA_": "_q$7$O_$", "_y": "_2_352", "$HZ$": "_3av" }, "Gcprotot": { "bU": "bo_U$__5s", "Z__K_B1__": "_4Y_", "$k$$z": "_1$2JgTh$9N" } } }, "c": { "$applytyIsE": { "_n1x$$": { "_2$C": "$", "f03V$953": "Y", "E__4_St__": "_W" }, "$7d_": { "c7l$": "l$d", "_$0": "e$3_$", "A$__7l$9$4_": "c__414uJd" }, "xcall": { "b_d$_d04K": "Ai", "_$ZG_c$x7V": "__$$52", "__$": "x7p$6p" } }, "$y0pI": { "cotte": { "$ref": "B$bN_", "$$x40B": "T", "Xd": "$_0Q_$$$" }, "e___hw9v$$": { "PhRI__": "$__pT_", "$": "_", "_5_Jhu": "_$$h$Gg8P_" }, "Y$6Y": { "cPu9_4$": "WmE", "l$K$": "dp", "DO": "$$3" } }, "W7": { "bapply": { "_$ow": "_toStringSt", "_0x__$YA$": "_wdB", "X": "p" }, "$QB_T$1$$": { "_caller": "wr$VT", "Nv": "z", "o4u_T": "c1__w$7b" }, "V_": { "__bv8$L$$_": "g_", "_n$$7_2$": "x_xW", "FBc": "c$d_$" } } } }, "vn": { "$$xH__Y": { "U$$G5_": { "X_": { "LM$_b5__YD_": "$H_", "$25C_2Z6Q_$": "A__", "$": "$_28D$$1H5" }, "x__proto__": { "dA$": "$key", "e": "zk$w", "clvS37": "o$b" }, "PlAh$wHs93": { "$4n_5UO": "elength", "_23__J__O$": "$1$callpllo", "$length": "_A$i_ab$__" } }, "_V__X1": { "cbR$I": { "_$i_to2D$I$": "r6bZK$_9_4", "E$": "C2_7_8", "_L$j6X$$P": "_bind" }, "$Y$V": { "v7eE$U$_": "W1K", "AQna": "E", "E3Ch6_$8S_": "aeXyly8p" }, "aeq8e6": { "T_G": "Dkey", "veSety$__": "qQ$J", "A": "e_" } }, "D": { "N$g$Ln_o8": { "U_W_": "$", "$toString": "H", "_l": "I_$N$_M6_u3" }, "tcall": { "$": "x5", "yC__c8Z2": "$jL95b", "_E$l_": "_$3_w2$z" }, "$j$3": { "_tri": "$$7_A_", "Vvv$j_": "d$$4V2499_t", "tY$8d3F_": "_" } } }, "zExvl": { "A": { "_362": { "$$0": "_", "$vd": "aS", "Q_k$$A": "B8" }, "YA$b_lyzd_p": { "a$_$": "$9", "Mr6k_$$3$_Z": "$1v__$_0", "Q": "_I24$Yf_" }, "QxlookupGe": { "_$97": "c$", "_apply": "__ng_Cug", "BJ011$Q": "vkey" } }, "z9": { "$": { "$RB$_dCE69$": "_c_$9_1$$", "Y9p$_$T_a7": "_", "S$$ZY$G_": "_9I_8i_6_$" }, "$_3_$e$e": { "I$9__i3": "ul_2", "Bv_45": "X$0", "e90": "__" }, "$V__": { "_": "cref", "V6": "$toString", "C": "Ce32H_w__ko" } }, "_$__": { "W": { "$": "$8uP95A9", "__": "_0$_$lE1___", "Ib7$54$8u$u": "$_$9V__TvD" }, "WR_$$$b$$$D": { "__Xa": "Apro", "dK9_yrc1_$": "E__k", "$x0": "$key" }, "B": { "_FUm$__": "z$_95$_5GoT", "$$": "$", "$1VzbxzDK$": "x_$1$_$y" } } }, "$_": { "_": { "$": { "$TY$6_dt": "_eQ___0$", "Xc": "b", "$yl": "tar" }, "_c$$3z6$uKV": { "a9": "_QIn$f", "_": "$NAiw$t", "B_": "_Pz0$__Ok" }, "_N$uc_iCHV": { "$a$2Q8": "tleng", "_K6pD2v": "D$$K", "OH09A9$$D$6": "AB3z73gE_6" } }, "_$L2": { "ikey": { "b": "___", "e_E4K$_": "_$B", "$3_$": "hD$" }, "Y": { "_$$dO6Ga": "_toString", "bVl_HA": "c6hOC6SO", "$i": "Ubind" }, "D": { "Mvle": "J9K", "X___de": "_kS", "$$_$": "c2$_" } }, "_$8$": { "ET$$$$$_": { "L$87_DQ$___": "Y$_w7_F173", "c0_MF": "c_0", "xbla": "_" }, "Y__Z": { "OrU3": "a_n_7S$Psc", "eUR$b$S$d": "e_0V", "$9$b": "C" }, "jototype": { "_$r_$": "v7$q__", "g_2": "ekey", "__$_aNwDoa_": "$Pd" } } } } }, "_$5oTcX__m": { "___$4V_": { "Z": { "_QDb": { "$Z_": { "R4FMo$$l$": "$QertyIsE", "_$2$": "$__e", "x": "_" }, "_1A$__defi": { "wkey": "Cname", "z": "_Da_", "C_Id0Kz___0": "_i$" }, "d": { "$_a6yQ0U": "R_", "w_Dl$27_$2": "j", "dUL_$RU7q6": "$call" } }, "_dw_": { "$": { "g": "$sx3q0z$Z5F", "_Jv1n_0": "f_QAkJ", "$": "x$s5_7_" }, "Km__defi": { "Vq996$": "_d", "__X": "pj9bc_c", "vu_": "M$$" }, "DuDH5cJ5_I": { "_Yj_bH7kGu": "_y1w5$nq118", "xaD$O_2": "$7Cj$$OL$", "$c": "_d_3_$q27" } }, "bpro": { "_wM$X_3$J06": { "_5$E7v": "_jn4X_$", "A_$u__09B$": "V_2_$$_5_$0", "Wapc": "ZyUh$j" }, "$": { "yapply": "h", "$": "$o", "$_58": "oi$$ec" }, "$rF6jQ6": { "w$yisPro": "E", "_gw8$132d_H": "y$mUa", "$": "_J_6eqHW7n" } } }, "d6": { "_$$$v$": { "$": { "_a": "$$6", "$3$2741$_$": "yz", "$_": "$7Y5" }, "_t": { "$$__": "__E$h_t2", "_7D9$1$t_07": "$1jg8_$Lbp", "e$A$": "$$$k_JjwS2" }, "Bkey": { "vgu": "_t", "$$4XO_Jy__$": "$7", "$0C": "b" } }, "e_": { "A_": { "$D8Z$$1$_iV": "$7H$_", "$": "Z$$", "_1$7$_3s$5P": "__k" }, "$I": { "_tm0_L": "$5$6F$a___", "$K06$JR": "w$$_1__g$b0", "j_": "$valueOf" }, "$_": { "EgY_F48": "Dy", "w8KOmj$_$": "y___", "d9": "H__proto__o" } }, "XOY_z": { "yD$": { "$ar": "$", "$_h_cmq_2wi": "q_p", "u$SY": "a$oyP_" }, "WZ5B_54OTgy": { "P2_7H$$5": "_g", "_B": "_", "A$8C": "e80Aa" }, "$": { "w$w": "E$", "$__Dq$$": "_$0HR", "$_$": "_" } } }, "Y_0U$$Ch$": { "dapply": { "DOB__Cf__$2": { "k$b": "RW_0q$_", "_1s5$1$_O": "U", "_zHvBIwq$": "c_C" }, "g1t$n$iK_9": { "$C_S": "c_$", "f$I": "_3V$", "q$$$I08z$E": "$valueOf" }, "i8": { "CwcallbeGet": "y", "__z2V_aq": "$_AD$xz__", "W$": "y94Di___X__" } }, "ku": { "$ototyp": { "$__DD534": "CSt0_$F8_9$", "mIPg__$12": "uO", "_a": "_$4u$R_3$" }, "cS7": { "icall$6leng": "_", "$_c2_lu8Q5$": "_key", "A2$I7$$": "tb3c" }, "$$": { "DW7_": "qR7", "cWK___": "d$", "_cp": "$$" } }, "n9_m": { "__3JXw": { "_N0": "$4c", "GZ_$j_$Uo_": "$_Fyr_", "c$_G$$A2": "B$Y6$E0$" }, "_": { "ykey": "$M$U$", "M": "$$_5$__W4", "W$__t": "$" }, "_L$$s": { "Nto": "_e", "JI$$Q": "$$", "_": "UGX_3$5_D$S" } } } }, "Woq5": { "$i": { "zJ_z_": { "oef": { "$z1$$$1_": "_$u", "W_$_": "y$", "_": "$$b1S" }, "_0e_81_": { "dkey": "oq2fic$$39", "$k": "_06_", "$_": "N" }, "S": { "fY$": "_k$_C3_j7", "x_e6": "sdP3_$$3C68", "w0_V9": "$q" } }, "$J___yo$g": { "wG": { "$_p_85$LA": "yS", "_29": "__$VT$b6", "DB$$f$$J": "$le" }, "Mi": { "T": "$$$5_10", "$ur$$Z_$3": "w", "_": "$EP" }, "Xapply": { "_G_": "a", "$M32_iJ2yW": "$ref", "F$p_": "$_4ky_d" } }, "$toString": { "F_y7x": { "bI$07Qn": "__", "o_$8_$": "D_X2lB$3", "_": "U$pP6v" }, "WII": { "$9Za": "e", "B9_39": "$9S$10D72_", "A_7$$2_": "dbYO$_1$0_x" }, "$enD_$C__": { "Ct": "bref", "_L_m_": "$B", "tref": "D_R" } } }, "$z$$1Fu_$": { "_YCE": { "$9m8__": { "ws$E7": "$__de", "s_X": "__c4U_3C$m", "$KSy$P_7$5": "$toString" }, "I$4$S_aN6f$": { "$Pr": "_9", "yc7_ASu_k0F": "W_", "$in": "$_YgT$" }, "X": { "L$$t": "$$_ty", "X": "Z", "_aR9A": "_" } }, "a": { "H2$$$9d__2$": { "DGT$": "$6C", "tapply": "_$c$", "_": "I_d" }, "_i": { "$_w": "Xc", "_50SW9x": "_$6Lk", "$HfH$uz": "c6_39559" }, "$": { "_7nameonef": "$BmuDgt3$", "E4I_5$IV": "__refpr", "XrE$3_3d_$0": "$y_z" } }, "bdc": { "UM7$n": { "qc67xwtiBoC": "D_L_1$", "_z_$": "z76_$4m2$", "EZcmb$$d": "$$$90uYO" }, "vVc": { "f_": "_$i$9", "d": "ekeyapp", "oMv$$y71mNk": "_ldcZ" }, "c_": { "$$j": "de73_tc__", "$$5_6$$_": "c_U$", "$b": "eY$" } } }, "$Vp": { "DK___$TC": { "_$_N_": { "$ref": "$$eB", "$_": "$toString", "_7t_VU_0E2_": "gdDp" }, "e$_Z": { "d": "$calle", "$": "__EAA2p", "xd__Y_": "_" }, "$_$_": { "B": "z__bd_00", "$_8Tm_$QG4_": "$wS0", "_": "W_ci" } }, "bbind": { "BCF": { "$$_$a2ilJn": "_", "H_fZx$e_": "_XebW", "$is": "$pr" }, "_4_366h$_": { "bgEO8_QoU$": "x", "D9_v_O_a4_": "B_$53$", "b": "bd_$_" }, "__or_eY3B_N": { "hC999G": "m__qKg$6$", "D3_$DLgf$$": "_5E$_09_$f", "Ye_$$Ad_$93": "_$36C" } }, "_$Z": { "_en": { "____2$4$$mu": "q_uI_$6D", "$$H5$": "a$__G$_", "E_$N": "vJVK_$$JV" }, "QU_": { "$___X": "$", "$length": "du", "_$": "E__prot3xto" }, "_949$Bh$$": { "y_": "_L_OlR4", "h_0N$$$6": "c__j", "_oo": "E0" } } } }, "$_": { "x$_AIM$": { "_o4P": { "___": { "_mQ__N$": "$_axQr$Eh", "E$88o_T$_68": "$$S$x$$_$", "Xnz": "XotkeyD_" }, "$bi": { "a_": "_8", "_BZ$0": "$$$$8wcTx_3", "a$$3_d__$": "Eref" }, "_": { "dWM": "$_R_$Jxr", "__$_$uj": "$__look", "_": "ecall" } }, "$key": { "cHEc$$_$_": { "_W9$$L$": "Klength", "D_6_M___": "wapply", "dname": "$" }, "_9_5$5cSA": { "y": "_0_", "$81wH$": "_", "$6$5$$_3_": "$tt" }, "Fe_$_q_$$$": { "Q2l": "zdx1", "_M__W": "____zD", "__": "_$" } }, "DS$lOt": { "d6_pq5_5": { "$mzI": "b_iV", "v": "$", "t": "$$Y$V$_" }, "$$": { "$$5$": "Dv", "v__proto__": "da6_", "T$51": "b_91$$_c" }, "B74$": { "$9eWey$pGe": "$w$n$_$_", "$apply": "clength", "J12d": "C" } } }, "nd$904W": { "Vb__": { "_$_9j_c$_5": { "y1dh": "_u_D_", "R__pr": "$", "$__": "p2$02d$Wc8i" }, "$A$$_w_m$$": { "_6_e__$$": "$$J1", "_kI5": "$_$KG2zav_$", "x": "_" }, "U2mWe$EbB": { "_E": "$$d__908J_", "t$": "$w1$", "$$df_$p": "$6$_" } }, "$x$_20$$x_": { "e": { "$fR__B8": "WYkV3V__im_", "i$N": "R31f$2G", "_valueOf": "$i_KEB" }, "_g$595rK$1": { "$": "A$_p", "_": "b$___d", "W$co": "_B$rm$" }, "B": { "Eb4oa_T_$B": "z6B_2$__$", "ZN$": "Ruk5", "X7p": "lref" } }, "_hasOwnProp": { "Bcons": { "$$va": "$$__8$3J1$r", "w_2": "w0_$", "Y2$eY____": "$__pro" }, "___": { "B8": "$$Y___", "C_$Mn_x_": "_co", "g__L$_": "$$1$vs$6u$8" }, "x8ty": { "_A$8hV_gF": "_rKB$$", "a_o$": "_F$$_$s7$4k", "Yprototype": "u$U" } } }, "TR": { "$_e": { "$": { "_": "$length$efi", "$2_D4_g03$G": "$l", "$$9IVl7X": "o$__$$17w0" }, "r_": { "W": "Wl", "B1": "$7", "$_e6vi_X": "BX" }, "Q78_HP_H": { "QTkeb$9__": "h8_d", "$ref": "___Q$f_$_x$", "_": "$46_" } }, "$_89l$$P$": { "_": { "$$i": "$_y_$Lr$", "_valueOf": "v$6", "$5aEc2": "B_Sq_" }, "_5_0P$_": { "$k_$0$a": "_", "y": "k88", "F$_q4_": "$8X" }, "Xi": { "e8C$$7_o8y": "__$Z", "_H__$20": "ViTg$$$", "Vb_d___1": "ecall" } }, "___": { "_key": { "_": "rh$_", "$_0": "x_", "Z$_$bin": "Ena" }, "$g": { "eD_kgx$": "$V_", "$": "$", "_a1$": "b8$" }, "$f6477$$$kU": { "_$WI": "_va", "_to": "$Q$s$$$", "$3$y$Px$$a": "n60" } } } } } }, "__y$": { "_$oV__XT$4_": { "$wargume": { "_5X_T_": { "Yb": { "a00": { "_to": "d5FJ__", "d$": "$_b_", "$z2o": "stdD" }, "Dc": { "_c": "_V", "$Getteo": "x", "EQWcal": "b9Vy8_r" }, "XuS8e$SK": { "P91": "b9$$9fEzvd", "_4$6": "Ckey", "V": "A_" } }, "$$BZ": { "$8g": { "Zkey": "bg7Q", "$n": "$H_VV$An_K0", "d5W": "Ty" }, "w_G": { "$_y_$$_": "$___", "_key": "$", "$7_1$_": "A__" }, "_8": { "a5__32$eW_$": "$xxe$ayVVg", "z$ak2M_$4$6": "b_$M$$POIw0", "$E": "LE$J_" } }, "Cq896q_$6": { "_": { "a$9$$eW": "yW__proto_", "i_eFehw8C_": "t356", "L$": "U_l01_uD0" }, "eSQ__": { "__k": "$$___", "_0_1Y_64xN": "__1sb$_$f_", "$": "__Dx9$$" }, "$8Y": { "$0HXl": "Ui", "$YdW": "ZfjyE$$7$", "$2kd$$": "y_0VJ_A__$$" } } }, "S_00": { "_$__$$m$P7$": { "____": { "$6e0": "z3", "v": "Zlength", "eG$": "bKbyu$_" }, "y_$$Zy": { "_": "_$B", "V4lC89y": "d", "C9b$YZ___9P": "Xrg" }, "E$_": { "__": "b_i", "_xB": "$D$", "Bth$r": "EL_$" } }, "$e$$hj2$": { "n3$w": { "$2h6h": "A_T", "_key": "Abind_8ca", "_": "D$_ytoLocal" }, "A_b3a40": { "_$_X": "lname", "C$n0_GH$": "x$5CVe647", "Q2W$": "$$_4$$" }, "A_$": { "e82d_": "x_", "_$_": "$PP", "$$jM$_": "_0__defineG" } }, "KRb$": { "Tpm": { "X_$": "__$m6On$_$k", "vaa": "$", "_T": "E6" }, "dI___R_MM8": { "_ref": "___p", "y5": "D$m$$2", "_vsD_vjC__": "AU9$H_EI" }, "$54$": { "B": "H1$valueOf", "_$_$b": "E1Wy0", "lx0": "_Y__define" } } }, "Y": { "__$K6_GBN_": { "by_": { "x_yltP": "J", "$$_2y_o_v__": "W$$P$iB", "Y_7": "v$_$_WoBA__" }, "a$_5__P7_92": { "_A2N_1_4": "$$_", "Uc2": "j__lookupSe", "$3$A1o": "a$_yee" }, "_j": { "$$p_$_B": "_Do7n1", "$bi": "_me__define", "E$$7": "E$a" } }, "yNh_K_t_j_": { "$ref": { "$5$7": "eprototype", "B": "$1D$0d", "$X$7PY05c$$": "$P$mgL" }, "AsO_$98V0Gd": { "O_$Kw3$D70": "$0_", "_wsG_$$$__": "mG_2E_9_$$", "m_x1e": "Ekey" }, "$": { "fa_yW1": "j1_$", "b6": "et", "G_x_": "H" } }, "_$Z1": { "__$3uA0": { "$t": "x6se_$H_S3R", "Je0_0c$1": "$va", "v__proto__": "$sa" }, "Et": { "_G___w_$$_": "$Z$C_v_", "X$hzD": "QbZ", "DP__": "B_" }, "$key__look": { "b742cXDzG_L": "a_0_$_v", "Dsi1QM11$": "$L1P1DN$", "q$": "bref" } } } }, "$": { "$_": { "_D_i_48$e$": { "X__Di8": { "$": "$4__J$_Q", "u": "jLW_", "_n_$": "v_m$$t" }, "_I": { "$80hp$6qc$T": "Ccaller", "v": "_", "$v": "__$c6_" }, "N9Ze_l$$": { "K_M": "r", "c$$3_Y": "v$$P$_", "X9ed2d$": "Xb" } }, "$$C$haS_$_": { "rnLKn_5_": { "_B_u0$$": "_7l2", "t__": "Tre$b1w8A$", "cV$_E9y": "$_HT" }, "__": { "$__H": "c0$8r$WO", "$b": "w97c_$_", "_9__7L7h2Un": "__" }, "g21Xi__de": { "$$Mn3": "$A_4", "V9_z": "__a2", "Ile__lookup": "$_c5k$" } }, "V_S": { "_6ri$_507": { "$E": "_apply", "$": "v", "d$fK$": "$$$EE$O$y" }, "_key": { "_k_$R8_L": "QR02gUr_A", "$LSO_8CD": "$", "v7$$_": "atoString" }, "V2$f$_$": { "o": "_2S", "j": "A30h_$AV69", "_$Y_X6_oae": "B$E_HG_" } } }, "j": { "Wu$_$$apj_7": { "$1x": { "$name": "_9", "_$I6Ww$$LY": "N1i_", "VY": "$$x_r" }, "cP$P$7_4E_": { "Dca": "__", "a_ca": "b$", "b0": "$toString" }, "e$88": { "Lr": "_i_3", "vp": "V_p", "_$hzX4": "_7$$" } }, "$": { "B$T_e__$": { "p_$____": "_3", "$$mR_ft_KR_": "$e$", "p8b_$$z": "$Qoku" }, "_sW$a20z$": { "b": "$keye2nC", "y$o": "XiXN$q3x9A", "___Ts3$KTl": "$93_k24M$" }, "_F_G": { "_length": "$__", "$": "RtoS", "_E_k$uk": "_54_l3$b" } }, "EJb": { "$i$": { "i_w$": "_$LVaz__m7", "vUi$3$v$_Ir": "$1$6$b9", "o$ap": "$$" }, "_2JD": { "_$_J3": "C66", "U_J4$_5_$_": "$e", "x5vb49$em_R": "$_" }, "Y_$0$6N_f_": { "$E$b$YH$": "Fe$$", "$Aa$8t": "___proto__", "$D_1": "$" } } }, "_6$kj$DO4": { "z_94_$q17e": { "a$_mnL$__": { "$9875Qa$G0": "_$9W53$$0", "xO55O__1q_": "_1a", "_$val": "p0$" }, "$pe": { "C_": "_1toS", "c2$": "_r$$6$ef", "$w81": "Ylength" }, "q": { "Xr_$": "$t_", "$HE": "D", "B__": "$9" } }, "MHa": { "_$VzTQmD": { "C$qN$Vk": "_wb253T5", "_1$$_8wZ": "c", "D": "zae" }, "_9k": { "$Od9w$r_$69": "$K5$$_p0I", "$": "_yto", "y": "__$d__x$7i" }, "$$_sr$9$l$$": { "$B_u$Ep_Vs": "D$", "Rarguments": "_$", "$": "_a6Wy_Y2" } }, "K$7t": { "__$___$$_": { "$": "Q$", "US9$Ni$": "$", "y_k2H": "$ref" }, "_6$": { "___": "_", "b__define": "rE_", "u5e$": "Wa9_E" }, "$s$tUo": { "vp": "$A", "c4v$$_L": "_B", "ar": "R$X_" } } } }, "$E4g": { "$_$N_D5_$": { "_$A_UB6ax$": { "_": { "a53J$$_": "$A80", "Z$o$7_t5": "$2", "Tz_U3t": "Z" }, "c_W$_U$J6": { "Sd5J": "v$ac1", "$nameva": "__RVaD_7_", "_$__$": "_" }, "Y$": { "$e_": "c_lueO", "_a___lookup": "$o7_", "x__defineSe": "$" } }, "Yprototype": { "n$x_$$W$Lf3": { "bre": "gvOX2x2", "S$1_$": "UD0_P", "$Qn$7i_Y": "$" }, "b_A$Yj": { "_$$q8Zu": "_$_3Cn$Cv_w", "_7_x3D1$": "Sal__$Mo_$", "$bind": "____at" }, "_valueOf": { "jarguments": "$Ct", "$$19$SQI": "c", "w3$$$M": "mIB" } }, "_amelengt": { "cU_n$0Idyc": { "_D": "_N$_", "_K10__": "$_$201", "$_W6": "$" }, "$$_": { "Xref": "$__$_Y", "_$A": "$5__8_", "_Cy": "A" }, "B_Y2": { "$e$_0w_$$": "_hvj", "c": "y2$$_A3_xI", "Di5": "qoto_" } } }, "q92Oo76_": { "a1_Q": { "$valueOf": { "_p": "b_llcon", "C$p$$_Va_0": "_JS$pX_N42", "V1": "rb" }, "__pFD": { "C$0": "_D1", "_Q4Oj__36$_": "$$_$$", "$Eh": "P" }, "_He1_T9$D$1": { "n": "u$L0_7vF5", "C_": "__", "$xD_2c__A_Y": "_$_o" } }, "$$5": { "S": { "X$": "C$Y4F__$Y", "w$$e": "wOfT_q$5c", "Gapply": "e__8" }, "$is": { "c11_p": "AB", "CtW5": "zR", "$_227$yH": "Y_$O" }, "a_E$7$2": { "FY4M$I": "_J_T$_A", "d$$93EPHA": "$A", "VF_": "$" } }, "l$": { "D_m": { "A": "o__MsWJ$", "_j_$": "tI_$b_$", "h$R": "_8$$rtoLoca" }, "_op": { "__": "_q3$$", "alW__TfwX7": "blength", "__868$$_": "__i$" }, "g": { "_B2": "d_hV6__9$$", "BP5$F$F$K": "cqI$__$_", "$zglueOfe": "_" } } }, "$__$": { "_88y": { "$l": { "Kcon": "T02_$", "vna": "_toString", "Cr$_$FG_": "W" }, "AFffV": { "__o1$3d_": "_76", "$": "C__5u3_$6", "xzfXp_Y": "_8$K_1_wx6_" }, "fe": { "$2": "$0N_4____6", "WY": "s1_$", "Dname": "HD$0c" } }, "A54x__4v0_Z": { "_prototype": { "cSUXpic_42": "M$", "f_0$": "CD", "_g_1r_$$$": "ddg_10a__" }, "Ag1r$26_A$6": { "___7L": "__8Q$$0rc$_", "Y": "_", "d5DrPn2_": "DNeR_$H_$$$" }, "$Kz": { "_AJ1p___f_": "_A94$", "C": "v8", "__$bs$sJP": "_" } }, "_$0$$2$__q_": { "z": { "bn8e$$$I2v": "$_JbsJ", "$z$7_mr_$_": "y9Ep1", "K_15Od$k$jB": "_JZPmzI" }, "je_": { "C": "$name", "_8$K3__$": "$C", "_7$": "Okey" }, "h": { "_U5a": "A$K$Zj__", "zna": "_key", "w_HA$$_4$8": "$__g2n_" } } } } }, "WAq__$_$$": { "_neSRc": { "V_31__$__H": { "$_": { "_$b0$_": { "$$P": "___$$6d$_D", "F_c$": "$0F_", "DD": "Vconstr" }, "zrV": { "$_6$": "Z__a_a5_7$d", "_": "$rte$zp$__d", "W_a7": "$" }, "___r$F4$tlH": { "_83E5hCyY$": "c", "E9J0C$": "$", "$1": "$$3v1" } }, "$g$$$_9": { "c": { "__I_AV6_1": "X_", "VJg7": "_length", "__22$_r126$": "__" }, "$$_pVH__tdm": { "_c$Yt$": "VW$$_", "$kCM": "_$8", "$$_09": "$__proto__" }, "K": { "__": "ayX", "$_5_": "yDc_", "X": "A$_eQ_$7_" } }, "K": { "$a": { "___F_U$H$": "$_$_", "$b_$q1C$2": "_", "$Rxx": "X$9$18$y2" }, "H": { "$$": "spY_7", "oLX_i_oOh$": "l2_", "n$S4$4T5TC": "ti0po8" }, "$kx$": { "b_9mcs$": "Bq$C2", "$yfineGett9": "E", "fto": "Z6$St_K__" } } }, "$Cb$": { "W_": { "ZR74cHs5": { "_$_": "m", "$_AK_": "_$4", "ID3": "_$_$e__n7$$" }, "$pplhaEA": { "P$$$$J5X$_": "bX_pw__eR3I", "$5ref7": "$r_", "$": "n__$Bm_" }, "c2_QW4Q$M$": { "C__": "__2", "vYjP": "$Z___", "$r7_$_$$1e6": "_wZOO___$0" } }, "_$$mS$": { "e_4o_41pY$": { "s3$$na3_zw": "dh4Dg_MPR_", "_1__Ad$1": "fkey", "$__do$G$": "A" }, "$valueOf": { "$caller": "$R$", "dr": "d_", "y1": "O_" }, "h": { "mf": "l_Wx$3L__aC", "_": "bk", "A4M": "$$" } }, "L6": { "_": { "CE_A": "$_UC", "$5$Sv$": "W$", "_": "_3w0k_" }, "e": { "e7_$wLbR$": "$A_Pr8hB$5", "$": "A_YQ83", "$$O$c0_$_": "P$_fe" }, "wc$z__l__": { "B_$f$$5": "_val", "XfGO$h": "bh$S_", "__": "cM$_" } } }, "_W_AV7": { "$_SIJV1": { "$": { "q_$": "_", "e$": "_HS", "$2__b$T$A_6": "_yle1plname" }, "Z$cO0$y$": { "ltoString": "$length", "_isPrototyp": "_", "cBI0_bCHC1$": "t_CU3h064" }, "$2HM_": { "_bl": "_e", "$": "_$O", "_Y_$$ljm": "$" } }, "D49_": { "AwnPrdeZr": { "_ref": "Y$$", "$_8dv__": "_$3", "Elength": "$_4451He_" }, "e$60_IxdcG_": { "AJ": "_$", "$$6iz$w$$": "$1", "ZF6ySD5_M_2": "$_3e" }, "$8cA_$a71b": { "bA$3$": "$$p", "v3$_9$F_": "_", "$10": "$1c$y$" } }, "$_l$_": { "$w1": { "$Q1": "_hkc", "vu5$": "$_9_sO$$", "$CbuCo$$": "$key" }, "bd_XY009": { "iH4u$fs___": "$jwtoLoca", "Bcaller": "W8$9_BHXJT", "$": "CMq6" }, "wCMfx": { "Q": "$Qi", "e2_": "X", "_4_I": "C4_$" } } } }, "d__": { "BDwg": { "_s$": { "$C": { "rvalueOf2M_": "D", "_$_$2": "_9_$_j", "gF": "$_$_Gd3z$R" }, "$1$_$q_c_8$": { "P": "at_PV_", "$": "$key", "A1$9": "HA$PGZ_3$pE" }, "$_CPcIE$": { "A$K$4$p": "_l$S_6r_9$", "z": "Ag_b", "_2": "$0_r_6$$" } }, "$oLo": { "a": { "_$$$b_4_T": "_r_59C_", "__j5_Hu$$_S": "_yz_t", "ohasOw": "$$$$$$A2" }, "$___$$_$$Gj": { "__pD5s$_pr_": "I1$", "i$41_$$$": "_$$_xX_", "CBad23o_": "$q9$" }, "$": { "asD_$$$$P": "_c$$g__6", "$__": "Qv$", "B5W$": "_Axr$$j$" } }, "_$Kk": { "C": { "cFxk$m": "pa", "$1K$8$": "$", "$Yu$": "a" }, "c_5": { "_bind": "$Ey", "a$9_1_$": "$6", "$7xE9": "e8$" }, "Eref": { "wr": "$j", "_KX_h": "SFa_i5$0", "_": "C$t4$" } } }, "EATEp_5": { "zf6_$foo$7": { "C6V3": { "C": "D_NuC", "_a_c_d0$": "$C$", "_$jF": "$" }, "$_wl0": { "$l7Cmu$": "z7c8", "$3e": "n", "$": "m$_4J1_1o" }, "$": { "Bname": "$u$__", "_V_$gXO": "d1", "_": "$w$" } }, "$6$gES4": { "$_hw$": { "_$2_N": "_8", "D__p": "A$t", "__B": "$eb" }, "$aatea_$_$B": { "Z": "e", "p$$_K$1b_b": "_toL", "A$a$": "__$h$8Dl$" }, "zp": { "lE0c": "rxxg5_dOe_", "Z_SKiI$": "wBT", "_98$8_$": "C" } }, "AH7a$6n": { "_0": { "$d$A": "f$__", "_arguments": "$u86", "$lengthiisP": "m_Cc" }, "T_": { "_2G$H$$k$$x": "_$_0", "$ref": "_bind", "Cnd": "Qf_" }, "d$S6wtRIF": { "c": "_O", "_": "_5", "K_$E$VT": "X6" } } }, "vGM": { "ZFrc6M_$$gM": { "Vu1s__": { "z_$6d8_0": "_8$", "__$T__$$_2I": "b$$$_BY_$7", "$1": "zNXs6m$$$m_" }, "___S6": { "_8_B__de": "X$Fv$3_$Xx3", "$": "$$_$9I5_Jp", "z$v": "A$B$7_" }, "T_": { "D": "y$E", "d__d": "$__lookupSe", "_callj_cal": "$k_aa$6_" } }, "$": { "$": { "$7IxJ_4hNi6": "T4k", "$_$": "hA_", "$valueOf": "hz" }, "$_R$J$WXU": { "$ref": "Z_", "m_": "mFd", "_98d$9R27ny": "D$t" }, "G$D863_1": { "_3$442": "__k", "$": "_7__l", "$_S$t": "_F$$0E$GMCA" } }, "CCBo3v": { "v_$$F": { "$_$1": "kh", "_$$$0x": "$h$_5$b", "$f8": "$ref" }, "_Z_W": { "___": "$ef$_16_dD", "O$": "$", "Z_46df": "_qH$4n" }, "V": { "xD$Ho5": "_m_4", "$": "$ref", "__": "$$jQt1__7y" } } } }, "I$QBm4R8B": { "$prototype": { "M2Hz__": { "_obo": { "Wviapa_": "_$zE", "$SV$$t": "e_$a2$", "xcaller": "_l$CI_M" }, "EuJ__": { "c$vj_$$E$": "C", "d$_L_db": "$$w__o0$", "Avv5": "Be7" }, "ctoString": { "$a": "_$m9", "$_g__$_36JX": "B_$", "$ref": "_ref" } }, "_V$$$IXC_Q$": { "x": { "X_constr": "wggWisPr", "___CM": "_", "$": "$E$_GBy" }, "xKb": { "c_t8jh2": "atoString", "__3_80_": "$bind", "BX_Z$7$": "Tkey" }, "$A5_$9$h__": { "$___": "__tQ7aM9_", "B$e": "Ay9s", "$key": "XFi$K$" } }, "_2$OzuC4FQ$": { "Rprototype": { "FW__": "fn_m_vR$1_$", "$Ec": "_2", "$GnEhiF5h5": "VSP" }, "_": { "$B_": "Ck", "$wv": "Q", "CQ9$V_$3$": "D" }, "$$c": { "Zkey": "_$E_$___", "$__": "b$_$1WX6Z", "a_c": "d68" } } }, "$cCEae1_c_": { "KVR$M$KM": { "_y": { "$": "_pT", "Du0$0n": "$$d", "__0F": "be$" }, "_GG2K$": { "$H$_j1$$": "ie_", "x__$New_I3": "_uU8VlR", "e_": "Yw" }, "y__look": { "z": "e$1_F$$_id3", "_E": "fw__", "$1uD_0J9v": "cwG_" } }, "e_d": { "ed": { "$gK_P$A8_$": "dref", "Dm_j__7d": "$key", "B": "jf" }, "$16": { "U4$": "n_r", "t_eK3$y18aM": "$a", "$caller": "$$_c_1_" }, "$": { "w$$V6m$mtO": "C", "_": "e71", "B529_$7": "f$_5" } }, "g$8_e$S$9a": { "$": { "$$erQzNXf_": "w1Y5btR", "u": "E$3XLDn$Hz", "$Pw$___H_": "A271p1" }, "_": { "$_7_3FRc94Y": "o6D_$", "_9a_P": "B_R7g1", "_wCnVG_mp6": "_St" }, "iMdC_oper": { "$to": "bD$", "d": "_Ek", "c_ct": "o___" } } }, "_pr": { "z$$": { "_": { "$c": "Y9$o4$y", "X_q_1a_": "oh_$V", "__9MD9654w1": "wna" }, "y": { "_H": "d$2$8$H", "_$_pN9_j7": "_r", "D": "__$3$$_is$8" }, "p$$XS": { "v": "dL_8M73", "X": "$key", "Cir_": "v3$TyF8$" } }, "B": { "em__$__n": { "a": "__9QhE$E_", "a2$aET$hYl": "nkey", "__Z4$$m$$": "_he_E" }, "_$D43os$": { "$ELlT__$": "_GFZQs$6", "DVUeUs_9$": "_", "x___136_6": "BX2_" }, "k_V": { "__$i$N_EWbW": "aElp", "kSP_j3sK$_": "_b3", "E$": "bcall" } }, "_BB": { "C73_DTX_Az": { "z1": "x", "$key": "u", "$$_Thb19e__": "_l_" }, "e$8lq4_$37": { "Eref": "E8x1363$J", "$__$$": "B$a", "edCY_$bz_": "c24_7" }, "c___": { "C_4$6B$C_": "c3_", "S1": "XZ_$Kl1", "V_$9ew$$d_A": "er" } } } } }, "E_yw_g_42": { "vis": { "_le": { "Xa9qR0_5$$$": { "_0": { "_": "_$z_$_h", "j$": "_$f", "c": "_" }, "dhZ8": { "D_a": "YJ$$$_", "e_": "L$UCZ_8", "y01": "C$" }, "h$": { "va": "$", "cEB": "P8$_rh$7d", "Ble": "$" } }, "_key": { "_$D_yW$a_": { "f$71V$$": "$$1D", "$_$_67$tc$": "Adef", "wc2": "m5hasOwn" }, "_zB_i_l7": { "$Qn_O_Z": "$od4_e", "$__$32L0$r": "__R_$$3$_", "EBM6": "j" }, "$0uh": { "$m_0y$$": "__$71$", "JEL$a_X8_": "$", "___p": "_$$C4_sj" } }, "_eOfap": { "$ref": { "a0": "$6_5$_$", "$": "d$3$5_GT$_$", "$Xroto_0oS": "__" }, "S$$c$YI3": { "c_$_x": "$28", "_0__$": "_9y", "X": "A1E" }, "dkey": { "_": "D9__lconstr", "D": "C$_9_K07", "jW$C5v": "Yb_3$3$L_" } } }, "h": { "$__": { "Q_iQ": { "Kn$d": "dns", "$_qK1r": "aC2T8", "$arguments": "_$_" }, "Y2Yprototyp": { "$8_05": "WOwnPrvprot", "_2$c_5$VW1": "CC1", "_": "jX3cY8B" }, "C": { "bcall": "$_1$r", "drC": "$3h312_$pE", "$o$": "f0AgW05dD2$" } }, "$ek_X$Q": { "Al_zDL$0CI$": { "$$Y": "$", "e_": "w__l", "$a": "_40$_c" }, "__yby$DU_": { "e$zZ$": "_$97_5_5", "$$Q$d_5F$": "YHHHA0_2", "_": "R0_x444$D" }, "_": { "hS$$o0$__l": "$wD", "_": "_$v3", "$H$ThvyQ": "N" } }, "_$I$iZ$": { "_apply": { "$_": "B$zA", "$s_70$_2$": "$3$$5A1I_", "$u": "P31fS" }, "_ref": { "v9ru_$$$E": "B2_B_proton", "P": "E", "$O": "X4$___$4_Z" }, "E": { "X": "$$8$7vLC", "__$": "$A$V_", "pio3kXu_": "$_k" } } }, "_$C$1$8BO": { "_$$u_1$rd": { "$6$WewO$": { "E21$S$828P5": "z", "_": "dkey", "$M3": "$a$$6a$Y1_" }, "baj_____051": { "$R$$_48W_": "$_2$1$_P", "_phB": "$5270", "E": "$9$1Q3D" }, "Vi": { "YS$": "$$0$us_", "$B__DY$75_": "_e$wh_1U_t", "$b_$o0T_8N": "_QG$r_v0__$" } }, "t_$u7B": { "_5B$R": { "G9854j": "$0_e__", "$Q$P5e$J$__": "$$t", "eo0": "YJz$1K_L$l" }, "__8ld1$cY$": { "kt$z_V8a$F$": "__3_B", "C": "GG$_3$__", "dVh": "Du$XC3$9$$" }, "c3v__look3r": { "BfdB": "dhasO", "ch9$axS___$": "YtoString", "b$wke": "Karguments" } }, "hD$_6GM": { "y": { "v9YwAD_Mx": "_6", "$Fgo$$$m_": "_$9", "_O$3IK": "b6$Lb" }, "$": { "WQ8": "X_g8IZab", "E8c$$$a": "q6Wp", "DJ_o$$x$$_3": "B" }, "$Z$$$_1": { "Wl": "a$qE4", "d$B_": "_$_1_", "$Dj$6$$X7o": "EWWPy1" } } } }, "W$$": { "p_": { "Q__prot": { "E": { "s02": "_$$$", "_$4_$_": "$EI_2", "N4$L_r": "c" }, "E$_$F$$Y_o": { "$$f$": "D2", "_D_y": "aro", "___0": "d$$6G$rWr0_" }, "$$_Z9L": { "L0x$_8l$0": "_$_6", "$$K$P$a": "$$nK", "___6_OpGxt": "_e" } }, "$key": { "$_qh3m": { "_valueOf": "q", "$$__k": "$cb", "c_m$mG_": "_" }, "s": { "y": "$1f_", "$cX$03M$A": "$5d58M", "Y_0$__$$k7F": "V$" }, "apo1BiC1$m": { "_p5$$Co_$1o": "_$3f", "Shk4mqG": "_$$0G1xl", "$P_x845__a_": "__l_mC8_7d" } }, "$N2A$a$": { "_": { "$$_j9": "w", "_$_Wxx": "nx$", "wle": "_$_" }, "b2": { "$b$9": "Elu", "Z_$1__XS$_": "c_loo", "_$f__hasOwn": "$4$P4P86_7_" }, "$V_VU": { "u3$__UM$1": "_dp", "D_$$Z": "$toString", "w__$": "$i" } } }, "_8$_3__mh_1": { "$$__f__d$P": { "e": { "AA$": "x_0$91b", "c": "_gFS_Q__", "$83Iwb$B_9": "_sF" }, "_to": { "dX": "z$B", "_xc_$_$V_": "_602", "$4": "$7$KZ_h" }, "b": { "_": "J", "W$V$7TM6$": "___$", "JA1": "__r$W$b2$$" } }, "u$PA": { "_": { "_toString": "_xa", "$7": "d7", "_2F$$": "$__" }, "$": { "$_8Z7": "$", "SB_tQ$": "_Xh", "A_4_$": "wZ1" }, "Qoppropek": { "$u": "$_$2S$$", "WB_": "cx$d", "Y$_$_A_b": "dVb$_6$_" } }, "$key": { "KG": { "cum": "$E", "Aco": "__", "$$zref": "_K$E__0" }, "$$8$_p$mTa$": { "_$__M_$jN": "B_fx4_r_1", "$caller": "$a_eC", "$": "Zkey" }, "U11$": { "_eC": "$", "_$BC$rq7__p": "I", "xis": "$_7TKb$H_4" } } }, "_G": { "XN8AG_": { "w": { "vdDb_": "Ak$$$Bg_8i_", "$n6": "_N", "G6o6_$": "fB_" }, "Pp": { "oW55t$$$w_3": "o__", "$_$ri_Y": "_00d6", "$Wb$A": "j" }, "n_p": { "__1r_$j8": "c", "$u": "z0R$$VP$$v$", "_": "IE3" } }, "Ii$$$s": { "VBZ": { "_K$": "xGRV", "y3$": "_l_F$_n", "d$": "$7_p" }, "$toString": { "t_$0ryS0": "O4", "_ONmoA": "y9", "E$$0d": "Dref" }, "_A1V2xX_1_": { "$keyC7lueOf": "$YN_Q", "A": "d30ry_", "_tX": "_0$_$0i3q8J" } }, "Y_Bkr": { "uum": { "W1$mXB_z": "k_", "$_r$": "Y98_3cTBx_1", "_apply": "_xref" }, "_jo": { "__Z": "___d$$ew6$", "d_": "aCa", "j": "HK3A$715NF" }, "$S$": { "k7_def__d": "r__02k__$$c", "Ebind": "_$B", "vEsC0ZPr": "DhasOwnProp" } } } }, "z": { "A1_$$": { "v3B6": { "y10$e$_$_A": { "_Q$_L3d9": "C", "r$m9K$$Dn": "$_$", "$N$4t": "$key" }, "$_": { "$$_$$k_A": "_y1j2xCy_6x", "_P__m": "$_", "ename": "$valueOf" }, "_$_$N$L": { "_$A": "$Lfe1_mGo$", "UJ$B51a": "a$_3$UF", "E$$4_": "E$" } }, "W$Iw$_": { "$key": { "$": "g6_$", "B_": "cR_", "$K$$_": "_e$" }, "BJ$_$Dei_": { "_ref": "_d$6", "m$": "__f", "XrmU__Pwx": "yWdn" }, "$e8$X__": { "_": "_KAts$", "AlOo7$s$": "$EG$MWv_d$1", "_$_$z": "$_0$$3i" } }, "L_jf$y$s": { "__9": { "d1$r": "$v9w9i__y", "_7_": "$", "Ebl_": "a" }, "Z_A": { "b": "_$", "$": "N8Ig", "o": "$to" }, "_5": { "$c5wg$_i1a": "$_5_k_6$M", "dapply": "_r", "lh7__D": "___$" } } }, "$": { "_0C_$_$$se": { "y$Jf_$$_": { "d$$_Ol$_Wt": "b__D", "Wo315$UXD3$": "M$", "_cBAhasOw": "__E" }, "Y$Y3": { "Y$69i": "$Th$$_", "_0_V$$15": "_c", "$X__": "B_5_2w" }, "$__NV69rsC": { "eK3a": "W__l", "d$19U_O3__": "Sref", "$$Nn5": "$bO9" } }, "y3v": { "__$": { "$_$$_$O": "__AN", "c": "E$48$$zTmL_", "b$f61k8": "_D$0$$B_0co" }, "$_V_": { "j_$_Q": "c_y4w_2hX$3", "A$l_r$": "__2__21MS", "c7X__": "_length" }, "$3_61$": { "C$_": "$_7$$$6", "d": "a__", "X5l": "h1$$2D___V1" } }, "ra_": { "$caller": { "e$__lookup": "_j8$p0$", "_key": "C_$pa$s8$$", "Sm8$_9$_rW": "Xvnc" }, "_iTAj1": { "A_D$4$": "DWS5E$D_$", "A$k8": "q_", "Ocaller": "_ujar$_w$" }, "k$": { "Z": "d0$eOS_AGx", "ig$$_5$": "w__loo", "my": "_A$$$1_T_d" } } }, "_68$$": { "rW8$": { "_toStr": { "C": "$length", "cvalueOf": "$", "X2": "AGc1_" }, "$$": { "__has": "$A", "_E4": "dzYH", "_": "l_L6E9$0" }, "Y_e$c$s": { "_V_": "e", "D": "$_____$t", "$_c": "_c__l" } }, "M_": { "_": { "$": "c_", "W_": "af$", "_$F$$$v_M": "Zuz$X" }, "$ref": { "$": "d_c", "Y$pwV28m5s": "$4$", "WnamePsEnu": "_piA" }, "pm$": { "Q__": "$", "_yR_d$3T": "_", "_3$B$rM": "cz_$" } }, "$valueOf": { "w": { "$a": "z_1cVC$011H", "D$g81_$": "$2MxW1sp", "$_": "bsPr" }, "E3$o": { "D0": "a", "J$y": "$nw3", "$0_6P": "___proto__" }, "_": { "$": "W_K", "RD$": "_x0", "__efY$": "a$9_a$3ev$$" } } } } } }, "cref": { "yy_$$_6$65": { "$D___7B1": { "__$y8": { "VO2$Gjgug__": { "_v": { "_4gS2": "_j__M$6", "d_Y$K_$$$$s": "zd", "$_$": "$_" }, "C_$_Q_o2$M": { "tg0": "A", "_L4$": "l$", "VWmg_V$_": "a4GKqN_$4j" }, "Z__": { "_L$$0D_a": "$a2_X", "$BbVq": "D2", "_$$_$$$$j": "X__" } }, "yn": { "u$Qf": { "$": "MWL_", "x$4": "W6a", "b$_": "$X_9qL" }, "m$9$argu__l": { "dt": "_toS_defin", "$l30S": "_da", "x$2B9$ot$": "$" }, "h1": { "l": "G___7", "_y1ksM": "eaW", "ef_j": "M" } }, "_C$V": { "$$": { "B": "_$9", "X": "e78DE3_", "_": "yZz" }, "_E": { "a___": "xd$8_", "$7_KH$l8_": "q4Nwp", "ca": "Zva" }, "$C_Uy$_5XN": { "$eO0ine": "Fb2$", "E$": "$X$$1", "D52m": "y1" } } }, "rYN3": { "Bcall__lo": { "_g": { "_nd": "_", "e8": "_$_QS_", "W7ux": "_Dv$99_75T$" }, "e_$": { "__n_5U$$g": "_j_TV$l", "$$": "$$", "X9$$": "C" }, "A8$8F": { "B": "d3", "_t": "a9f__$_U", "_": "_eall1uct" } }, "$E2": { "D0$_3": { "$": "$3$eR_UBlr3", "___wy__i_KU": "$pr", "_apply": "_P_" }, "p": { "KtKUv": "$n_$i$__9S", "$_ca": "$c5$", "v": "$N_r$$4$" }, "$toString": { "CvalueOf": "$n6_$", "$4ZB4Dl": "$", "$j_W$E": "N7OeIz9" } }, "c$$S$": { "_": { "ecaller": "OvSsD1_$3", "_key": "b3$", "cc": "$_c3" }, "$y": { "$": "$a_", "_$": "R4iNe7", "W0lQ2O$__2": "_lookupSett" }, "Vy_X$$__": { "_": "p_$a", "y$$sv9$": "$U", "d$o": "EQ4_" } } }, "b$Y$9": { "$nAl072g": { "_h__y_$P": { "c": "$__", "A86$__": "_va", "RX$6": "C" }, "j$_2Sg8": { "_key": "_8", "$fxI134$E0": "X1_", "N__lookupS": "_" }, "_2P_q6": { "P2_$6_1C": "_0", "nF$$Y8b": "_y6KS", "_": "E" } }, "Hk_$k": { "m": { "Eref": "ej_siP9Z", "XW0": "$n", "$b$WcDeO": "$2nq_" }, "w_": { "wW": "$h", "E$c5": "_D0_fH", "m$d$": "cpDH$6_Kkk_" }, "_Y_": { "AS9$1A_J9V": "_Oj0$yr_4$", "p8_": "_X_I512", "_binbi": "$i__" } }, "_$8_r_F2_": { "_BYP_7K": { "e_0$_$": "$1$tFcK", "__": "ol6up", "_": "X$730" }, "xengkeyhb$L": { "$": "C$$$BP7", "_guG": "$G", "EQ4b": "$$5__A" }, "$p": { "__$O4$$": "c3nzxc", "_arguments": "BY$c1M", "$$__$": "_$_3KT1_" } } } }, "z_0": { "Ct": { "r5c$0B_F7U": { "_Ae$": { "t": "_", "__$2to": "aa", "$na": "Q_FA_$" }, "$con": { "$": "$cO_", "__": "Ztpq_$", "yFN$Rp_r_$p": "$b1v8$6$" }, "__": { "Vz_A": "$kel", "z9Z": "VXi$D$", "_y_": "BtoString" } }, "$47_7_$$M": { "_": { "_i$xie": "$", "j_l$": "_I", "$$w3": "g$" }, "V$4": { "$D9S": "hn$_p4_8_", "Fa$zZ___u": "v", "v_1$Pro": "N" }, "$rTph0r$9N": { "___d": "__7$$$t_", "$4$Yci": "_", "c_7": "A10BI48$4" } }, "As_": { "B__": { "_VD": "$5", "C": "O31$", "__A3": "__" }, "_$_$": { "$$$d": "___$", "_5ef": "$$R5V_$45", "_": "$i5W_$3_4$8" }, "____looku": { "w7F18$88": "$$3vn", "CR": "A6Q$xJ$", "$4AZ": "A_C_8$iv_3" } } }, "C3": { "D_": { "J7rette": { "$$$US$m4": "M$", "$K": "$e", "cawd": "_8U10AJ$2" }, "_": { "V_$": "$yM$_", "_": "$_arg", "$0": "F$j_M$" }, "___": { "vAu": "U$jY9$5", "$E_": "DN_W__8D", "$s15q$$__4g": "$__" } }, "$0$7": { "A__b_6_X_y$": { "VA_": "e$0", "$60f": "$Z_X_$", "$$Am": "_$" }, "$5": { "$e": "_", "F6$": "_Bc", "w": "gne" }, "$key": { "e0$_ao4t8_D": "_", "xQ": "$xH$e_$aapl", "_$": "$yr2$Q_$l" } }, "_$2zg$_J_$v": { "zca2al6": { "$UqxA$": "$_g_4a", "d": "_v", "$_Na5_": "D_3__3r$_yE" }, "_": { "_BA_6_9": "a2G2w1DF", "$k0$Z__3": "j_e$", "D_x3": "$$" }, "$u1_K$": { "_6qdD": "qNG$$ZWz_", "_C5j$_c": "$f4", "C_$54E": "$7keycal$" } } }, "J_b7": { "Bi_$_Y7$_$": { "dbi": { "$length": "Cb", "n__bWw": "$$$$", "_": "_O" }, "xkey": { "I": "$_", "vp_A$0": "___l$5_m_", "_": "AvalueOf" }, "E": { "Vd": "O$Mws___", "$0": "$_p_$$pz0_H", "$_4_N": "Obind" } }, "$Aa2_8g_gd1": { "XvalueOf": { "_": "$rj$", "p0": "_apply", "Y5": "WB" }, "$7": { "pR": "EK_7$0I", "A$": "MQg$", "_": "__3_7VXq" }, "CtoString": { "$$LF4$7": "VupSe", "$0O$": "_$4MIgr_u$", "$": "cvl" } }, "yK$__$g_59": { "$bi": { "cA": "$4dmM28B$$", "v2e22PPK_2A": "_$$7", "$$h$42oV75": "___$3$G4$" }, "Xg_": { "_f$_$_9": "$$", "z": "_T_Y", "_6A_": "c_$GsJ$_" }, "Ylength": { "$Z_": "Vkey", "IW_$B0cra7": "_c$S$", "lqjRa": "xx_0_" } } } }, "Ab$1": { "wFE5": { "_p$GyH0": { "y38": { "_ot": "yK__p", "aprototype": "_I1qXE", "Oar": "k$_4$om_cU" }, "_capply$cal": { "___z42": "$_", "_I": "E__9$_w_", "_$InnN": "e2_ibP$9" }, "_$": { "s": "$mPM___8", "b__d": "$P", "$key": "$" } }, "_zBA__": { "fkey": { "UAe80mz1": "_ref", "$$V_Y_hCx": "esN_9h581jj", "$$_$$7p8": "Cx_D" }, "V_": { "v": "_$", "$WOh_$S$T": "_C2_5$k_gT", "$ref": "AT6_o" }, "ve": { "$_": "_$3", "dHLyl5$_": "C$__0n", "_": "$" } }, "_lTw_mLLlm": { "bb5B$": { "A": "$_1$2", "_key": "_", "Y3_pFB$9_": "Kd_WCR" }, "$_$9": { "$4B": "Bapply", "$r__AjVV9_V": "$2P$", "_4$$A": "_$V" }, "__1u8_$f": { "C": "br", "$_JViFYf_$": "_V", "_$R4_56_": "$$$j$$" } } }, "yI525_E_O_": { "w67O6": { "Sref": { "C": "_8$gy_", "d_38": "$41B_P3m_", "ootypeOf_t": "IcS" }, "zt2$$$j$E$t": { "dt": "$k", "c": "__", "Lh9": "_sLn" }, "$": { "$__Y0____DC": "_Rl$4$", "$_Z64G6D": "_", "WY_$BC": "D_$c" } }, "_$": { "K_x$1_$y": { "__53_": "__d$s_$0", "h$": "$S", "b$2Z": "v_zk_4b$" }, "$key": { "l$Vh7d0_": "$b", "$HM$5Skv": "y$cons", "Ev4D3$SN$": "_V" }, "_w___56": { "$": "CtoString", "$U$3i_E": "CA", "_aumen": "_" } }, "z7f_$9": { "_b_T1": { "$2": "DZi", "$__Z9H": "$$_", "_V$8$": "C8SUEY_2" }, "adsO": { "I_a2$vL": "Qe_$c4$56$", "z$": "$$N$wjB__s", "$y": "Y2amvZ_$0$" }, "_5": { "$al": "$Bbn3y$J", "_ref": "_$$", "$8": "_7_GjM7" } } }, "_": { "_$$4$$": { "___mm__1": { "$__": "$$L0$uZ$", "P": "____looku", "_$_$$z__": "CtoString" }, "E_8H_nmNa_7": { "$bP__bV5_": "D3$", "$": "$Ul$C93", "_": "$c6" }, "l3EBC7_qu4Q": { "zr1_VqEM___": "$$EI", "_lV7$$W$": "yt_", "$$K_": "Z7j60_" } }, "$$_$_U4$$5": { "$d6$F$2V$": { "$$__3$_d": "X3", "$U2___mA$B5": "$_A5Hlf$", "$K": "$_$_h0jM" }, "DY$$d$u": { "$47": "e7$t$$_$6aa", "D_5E": "$3_", "$g_$Z2_0_8": "E_Ad$_$e$AV" }, "_X3": { "$65$_6b1M$": "BQk11Q2", "__": "_$", "$07c8": "TF7" } }, "x$wapplypal": { "$_D5C62_": { "je$__t_1": "X$0", "$$rKV$$$f_": "$Z", "$": "xca" }, "$_pr": { "$Q$L0": "$", "_w": "PR_1SAnN5$3", "e$_$$$": "eV" }, "$_2": { "$_": "zL$", "r5$$am6qG": "h_$W$_", "$$D": "Qo" } } } } }, "b$": { "Z$_yr5$": { "$": { "$B_": { "RAa_MX": { "___a": "$$aA_3W$0", "_Str": "$", "__$W4DgM": "$_" }, "_$9w": { "$ec1$k0": "$1", "$_": "_T_fYWzq", "l$C_": "x_7ecE_9$9x" }, "$ref_$$cal_": { "$2$_": "C2", "___$1_i": "acc8ZH3$B", "WQ$": "___F0OYz5Ic" } }, "$k": { "____$6": { "SJp8$$$$$$": "$9", "Ls$y_": "$Eref", "_C": "_j$x1893" }, "gFj8$": { "frT$$__S3": "_Sf", "m___K1": "q$VnI", "RxW55b3$X$6": "_S$L" }, "J": { "_E_$": "bV_", "$ref": "_G_k$3P_mGQ", "C$rtoStr": "D0__K_29" } }, "$$5$_5": { "e35b3$E": { "_0V9_4$8$_": "_length", "O63_": "$$3", "dAraa__": "xA$__" }, "$K695$_$": { "$n$0__Y_V": "$caller", "eZ$K9a$Mj": "u6cA", "a": "_$_N_$8_" }, "_xJRM": { "dR8c1lu$b": "_ime___defi", "$$_$4": "_totypructo", "$Z_u$": "_Nj_K" } } }, "A1_n$": { "_A$hC": { "$830_": { "YXCsb6": "$_7$", "_8_": "D__", "dp_$lb": "Hx" }, "$Xk": { "w": "$_yC", "_3w": "g_", "_i": "B_$_byXZ80" }, "$": { "_lV$$z": "a_c", "$$$": "_pp", "$l": "$al" } }, "zB_cL": { "$__o$9fA7$6": { "$$G$3$": "__58", "$9Z3_9$$": "_bi", "w_9": "_$" }, "B5BFr": { "_": "_toStri", "$_": "$_z_", "t83$": "$" }, "$": { "l$ZF": "mconstru", "E$V79": "D1", "_R$$": "_$GbFZ" } }, "$_": { "aD2_": { "$": "$HGrxR_11h", "I6a_x1a29": "$_", "$2$_$I": "A8_s$_$_" }, "EP$9_": { "$ref": "zV$e", "$_": "b_", "_va": "l$_1o" }, "_V_$": { "wVh_Tfac$": "Bd$", "$u": "E_0d", "V_2T$871": "b" } } }, "b2$_$_t5V": { "D_": { "yL_9": { "m_": "brTDgeAv$$o", "$H7W_D": "C7c", "Dq1": "_88" }, "x_$$": { "V": "S4h$T_3", "e4k": "$X", "w29Alen": "Z" }, "_": { "$__R$1T7": "_N", "l$_R": "d03$$$I6V", "b_I6J": "$7D_" } }, "_a$$v": { "_ref": { "$IdJi$$p$": "A_0_99$Af", "$BXbin": "yt_ov$_$_lq", "GVj2jM1": "yapply" }, "d_ZL_": { "_$__$5ye": "Z", "w9valueOfZv": "EA", "Q": "__N$r81g" }, "_": { "$O_": "m$2$$", "eM_$_jL0": "Aa3r$$_94r_", "_VaNC": "E$M$V03_9$_" } }, "Wha": { "L$": { "e$k$8Z": "bB", "_": "aN_", "$C__mqdp": "$Vll" }, "kNP__cp9": { "D_$3": "$xoBxzjx$_", "l$K": "GTd2", "W": "U0Dx" }, "_v": { "CZ2_$f": "_valueOf", "D3_": "__", "_lc3_$9u": "k" } } } }, "$toString": { "$": { "_Zf2$b_": { "__t$9$53__": { "a$W": "B__proto__", "c_a83": "F", "D": "w2" }, "__r$$kn$49": { "D__v": "$caller", "KS_h$PzeEi": "p2", "K18$u": "Q__proto__" }, "__b_n": { "E5$4": "$_7d3$13", "_valueOf": "a", "kU$_q": "df_2" } }, "$": { "Z": { "_v": "a3fSE_X74_", "D__$Eu": "aapply", "d": "Wm$" }, "$c$ZD_00__": { "_": "ya", "Wc": "gm", "$j_": "_ll" }, "Wkey": { "_$E": "__0", "_U_": "_pr", "Pa9$d_w": "Dap" } }, "YtoString": { "_Le_Ly$": { "D7$$Z_0e$": "b_s3F$S$$_$", "_402__y9": "_aqw8", "$__": "$WR_" }, "UbD2": { "B_4$o__Y": "_", "_": "$$$", "q_SD7$_$": "z" }, "_Q_$$57zQ_": { "E": "K$_", "iy$$_": "D$", "Qcaller": "b_7" } } }, "z_3$8B_J": { "d$$4$Y_": { "al$fiz$": { "$": "Vr", "$04$$T": "_Ha_", "_$kg_ZZ": "$_H$$8i_L8$" }, "B$$_c6QDD": { "x__proto__": "$9$_", "$key": "_6_", "$8$_cWy017s": "eW" }, "$": { "cW9a": "__", "I$$rGH$y$": "A6___S7", "Bu_96_": "iCB_M3" } }, "_X": { "A3$e__$W$M_": { "_$38_iL": "$Xb", "V": "C$", "HSk": "EW$kJw_ha" }, "_$C": { "___": "y", "$$_f_YP_": "$$r4__8", "$d34$$$$Qe$": "__$" }, "$": { "x$17C_2$": "_e_", "$$_wt": "__$9Xz$$g", "$$FPuE7t6": "t__1$$W" } }, "lW_c": { "_": { "_gE2W": "$", "$": "$p$$513$", "W_$P62": "$_7" }, "x": { "_$_$cP7_$4": "Z_apply__de", "_G": "IY1", "l": "IV" }, "__$_$O": { "B0v": "C", "_K7b": "$apply", "_": "$" } } }, "_4$_": { "$keva": { "$": { "$R$_": "_$3", "v": "AZ", "$d": "e$$_$Jw$2r" }, "_$$ze1ed$$0": { "__": "Ykey", "b_U$l$": "T", "$__proto__": "T7" }, "jN$": { "EG$$Xv_": "$D", "$h": "$key", "$3_$5JI$5": "$$" } }, "$YogZz_j7he": { "_0Qt": { "Im": "$O$$YD", "g8Ca": "__x_r9z", "__5_": "Afbin" }, "_prot": { "_$E3$VI": "akey", "g7$C": "_$BimN", "$_C8$": "$al" }, "_E_amy": { "bdT71": "$z_kG_", "$H$": "_", "$D4_I__7": "_$18$j_Ir$" } }, "xref": { "sT$0_": { "D$_l$_": "c__$_", "$BW_2_DZ2": "_p__", "_x_q_aSjk9": "_prototype" }, "$$": { "_7_$g0$_b$B": "cV1e", "$ca": "_a", "m__R1__": "Q" }, "_INUCk": { "V12q": "$$", "wapply": "E", "v$J$$": "AU6_S4Kb$P_" } } } }, "_ref": { "_": { "$k$$$1$": { "f_jx89": { "_$": "$_S_Fz", "VA5U5Jm$$_": "$7d$isPr", "oc$_$$90Dr_": "$_a" }, "_$": { "_4_d": "$P", "x$1o_x": "_9$0yF3$$", "X_$qwF$Av": "er" }, "Z6$_$L$_8_A": { "h1": "_4$h", "Wc": "c3J1_L", "_cg69_$nF4": "_$$03_Z_u" } }, "vx1_q": { "mv": { "yy98__c_d33": "Zpr", "$_I_": "$_wq6$om", "C$5_k_K$": "d" }, "$0_t": { "A$r": "_$", "NC_9$O": "Y$", "d$x$_paW": "Bt_$A" }, "_": { "$T": "_$1$", "e4_a$$Dccv_": "_9__1vq_so", "o2$U": "db5lY_z4" } }, "VvalueOf": { "C$": { "_": "bRox___", "_$Ur4f": "D$7og1$", "Pref": "X_" }, "x_0z___$k_": { "__": "s0pz$", "_a": "c$_10$", "BTha": "$1_Zjv_8Q2" }, "g_$a$9$kN": { "A$3": "___", "_Tla$6t": "$_", "_Bq": "$3$$__G60" } } }, "d2$thal": { "$": { "CVA14__0": { "_7$": "qk$C_", "vr$6$IRCI": "_d", "$$82con": "Yro" }, "_": { "$_$8u": "n2$Z6b$", "_Ke86sM_": "t$$p_$$pX2_", "v_Q_E$7": "Fi$0_$" }, "$l": { "_n5Mb9V_Y": "D$_", "c$": "$ref", "$mR$F__": "wW__u_h$$" } }, "QM_": { "ASeproper": { "E_": "__m_", "_$$4_VS$$": "$construc", "ZZ000CB0": "A_6_$9$UB4" }, "T9$w_E2Q_": { "aT_e": "XvalueOf", "NoHm58$o$$": "$u$", "$1_T$D": "w$n" }, "VGdwc10X_": { "bD$od$2_gq$": "_b", "$_KRB3Q5_$": "_$", "Dz5YT$_fZE": "$_Sb6$8" } }, "_7": { "__$": { "W8J": "xwh", "__F_ZPM$": "a$_", "_DBw": "_4_" }, "d": { "xprototype": "$w__iAps", "$__": "$_C8P_", "_pGnametoS": "_" }, "w6_Xz_O$___": { "$5": "$dls70_8N0", "ww__e_I__": "$l", "_95u4_K": "YA1IITSYxN" } } }, "__$": { "$__define": { "W2bE": { "$_n_5tK0p": "___", "Pale": "wG_Q1$_$sA", "$": "$_$i$__O6q" }, "c_": { "$$F$$lq_$$9": "X", "W_arg": "aVOl_G__$$e", "h___R_$Q": "_" }, "Wna": { "$tDuZ4$$kE$": "B_g1Wj1Gi_", "F_$Y_w_$_0L": "_d", "Rd$": "_zlookupG88" } }, "$len": { "_apply": { "$$11_": "$7_G$p", "c$$w_$$_d_": "_appl", "$8$h5th": "t21O2" }, "Dref": { "_": "__", "_7Z_89": "Vref", "i_3$u": "R" }, "_": { "hdname$_": "A__Yk_C", "B_tZB_9A": "$", "v_": "d" } }, "$length": { "_TMeWrU$_": { "_5p_VY_Y": "Fbind", "_": "b$$hq_C$$", "E": "$la$R" }, "wiD": { "aT": "M63u_n$", "__A": "_5_$B3_$319", "_C$_4": "__7" }, "FC4OL1f_I$$": { "A$Fv_a30G__": "W__6_zs_$", "D7ZK3$Qb7t0": "$g6$z0yi_2", "$Fs_$": "$" } } } } }, "w": { "w": { "$x": { "_b$p1$8y": { "C": { "A5_$__6": "_H", "_Q58n1S": "y0", "$$hg$1U": "cw_" }, "aVe3": { "$_H6_": "D0_7g$_$$0t", "x_P$8W": "VyzEO", "_ke": "_dg$_3$U__$" }, "_$5_$_d": { "_J4dw$wicZ": "xQP", "z5$NY56z9_": "$0", "E_$": "dv5$" } }, "O8": { "$$": { "$8$v_I": "Y$protot", "hkey": "C__proto__$", "c0OS9IL$H0": "_9pr" }, "$$3": { "CJ3_v": "_8", "z_0$t4": "_", "e$E__Qg": "_$9d__l" }, "vd_$": { "_83a": "$_p7$$uoKUU", "w__K$6$$R": "l7kE_K_Pu_", "$8_": "Ain" } }, "_$9_": { "_": { "_$6G": "u9___$A", "$E9CWeg$b_": "B3_Ja", "Ci3_jG$j__": "z_Bz" }, "y": { "$": "_$", "carguments": "_ref", "B_19": "$_$_fQm$" }, "v__x": { "s$4Ui$cq$$$": "bF1c", "$_b_$X$_$_": "_Dl", "b": "$O$_" } } }, "cju__o": { "pcall": { "$O38$43_W__": { "_Wg$17b": "w1", "$_co": "B$", "___": "r$" }, "$___t4": { "$___3b__p": "Fref", "_1key_": "B$Ytr_$H", "aL734p__43": "_$__C$_$0" }, "y$": { "A__d": "XtoString", "rQ$t_wnS": "$$tL$", "D": "a1$X" } }, "_2$": { "vXw0LH": { "_key": "D", "okey": "_4K__k__", "T2$71$BVJqv": "__" }, "aGG$": { "Aapply": "V_$Qlyw_$5_", "_": "x9$_q3__h0", "_yc$$$T_": "c$X" }, "_dEl4H$": { "_": "_", "TV": "$__oqd$y0$C", "b$09_0uZ": "$e$D" } }, "v$G_": { "W5$n$6_": { "$SX75_P1": "$KU$i", "$jx_yqDd4$": "w_V$_8F4_", "YL_$": "$$B9$_k_Z$" }, "by8eC8Z5_": { "_toString": "An", "y$t9pro": "_a", "$pB": "__0$" }, "_$66k_0_MRT": { "$$$$": "Dz$$toLoc", "_m3_5$HO": "b837", "E4X0": "_i" } } }, "__G5": { "D": { "a$": { "_A__": "b_", "g$a0": "Qo75_", "o$": "B" }, "Bi_": { "w4_0": "$$56w3_i$", "$_": "YeN9", "d": "_x__84$" }, "Ae": { "A": "_9H$__R$$g", "vk__z$6h$$_": "c__p", "$3_": "Wsgt_O$_" } }, "J_pv9": { "__$$_4_a_": { "$$$$$$9rx": "_Dut1", "E$2832": "d$42_6$$k$", "BY": "G" }, "W$J8_G_8q": { "ccaller": "m_Ll$3o_4", "d_proto__": "$", "WM$$D": "Z$callco" }, "bapply": { "Ee$toS": "_a", "v": "WY$$$$4$0Or", "Xref": "q0x" } }, "Pcallerna": { "$$Bn___W": { "$v$": "Re", "_t": "$", "Zm": "$_$_D__" }, "_R_g0p6$_6_": { "ykP$$": "A$Q___3mw", "J_d$_82s": "u$co", "$$av": "e$L$$r01x" }, "o3E": { "_0_W": "B0H8_9__$V$", "cs937": "Be", "DK2B_s$_Gy": "$120X_$J___" } } } }, "$toString": { "Aa": { "zz5": { "_p9_$2_v": { "$": "f$$", "m": "a", "_Z": "A_" }, "$C1B_$6__": { "_5": "_valueOf", "__l": "_", "X1wI27$_rA_": "d__m$YuctI" }, "_Ib$7m____O": { "_ha": "BvalueOf", "i14$5$Zu_$$": "$$g", "B_": "_jC$Xl$5_" } }, "$I0_$j": { "f$dA": { "$$9e": "potypeOf", "a0c__L14": "$$$8i_", "Bmd_": "e$1" }, "Xapply": { "$l_$85x$_0": "$key", "acall": "_y$$", "_cX": "$3__$$03U$$" }, "_YA": { "ug$9": "w", "$_": "f8T", "$dRu$3": "$W_$B" } }, "_toString": { "$VYK$$T": { "$$n$8e": "DWE0", "Bpro": "A_", "A$$D_6Fn_": "g_$2" }, "$eA": { "$": "ce", "C": "Q", "$V2c0$": "oOm_$v_" }, "_apply": { "_8": "hug_", "_$_qr5": "llength", "_callin": "R" } } }, "_bg$": { "V_A$Ajr2_I": { "__319S": { "y9_": "rco", "_XQ": "V_Qh__", "$$": "_" }, "$E__r": { "_2": "EJpWu__66o$", "$K$$": "_fi", "$": "$n$b__l_" }, "$9": { "Hcaller": "ca", "_r": "_2$Z$", "_g$": "tb_wY5z3e" } }, "b8__9A_": { "GnE_": { "$_AG1y2$kVF": "_6pj", "Qkey": "c", "po_$41Y4_": "X" }, "a": { "$0$": "$ycZ", "Xapp": "_", "y$n_z$_4$$": "nCk" }, "c_E": { "iqt": "cdefi", "xXN$0T": "__w_ey_toL", "$8V": "Bca" } }, "__": { "_$R$I": { "$2C": "B$f_R_$6$$3", "xeZ1zmQ$__": "_z59C8iI", "Su": "zD9_CY$" }, "$$4": { "$5": "_3_", "_$vuD": "AU", "$$y0": "Jl_" }, "__$": { "ac": "__ph_$__EFO", "$$$F__7$D$": "R$H$f21_", "G_l_": "P0Yb00w$" } } }, "Lu_L$": { "vr$": { "a8_$": { "$0": "Uk", "Elulengthfp": "__$V", "$3_": "_$4MoY5" }, "$PP$9SB__E": { "XC": "$f", "W$_zisPle": "E3J__$", "nZ_$9$": "ChF_" }, "d_d$g": { "_b": "$_cV$A$$W", "$YsI5G7WYm0": "_$3", "Bs25$R3": "K6__f$" } }, "_BR": { "d$NID$c_": { "$": "H_$7_", "_$_5$": "Y$w", "b": "DX4$_$U___" }, "yF": { "$$1c$$": "$$_Y", "$$6argumen": "_", "$_nDt$_o_": "B3$" }, "$Z$CQ1_Uz": { "$9": "__A_", "d_$_tkmS": "_89", "Wz6$$xcu_sx": "$Uc2BX$$Dz" } }, "$aT": { "$G3$HF0_$": { "W2_9d": "$", "G8G": "_$l_A__l", "$GZ": "xhs73bh_$$_" }, "$": { "fr": "Iref", "Q_6": "$OMZG9FL_", "_6_U": "$$I2" }, "$4K$0XM_$$_": { "D$0_$V$8_V": "e49", "$$___l$": "W$$1$u", "_": "L_" } } } }, "P90": { "_$$$__$": { "$_P$": { "c_namconst": { "A": "g$ytr", "oS_$__fz_$": "b8ke", "j$K_b": "_ar" }, "Gi2$_$4Q": { "$$_yF$_": "bMD", "a": "_", "c_": "dgHI_" }, "F_$z$m$rq": { "$LYOPG9Wk_": "_", "N$$xRwXC9": "j4X_93O_9$$", "x": "_$Z3bXx_g" } }, "_Ae": { "Bq$": { "W1": "xd$N", "_": "dvalueOf", "_a": "iI$u" }, "$Y$kS7": { "C1$": "$bi", "_name": "y5W_r$r1_", "Cb": "_89V6P" }, "B_": { "cuguWMtf$$": "_p", "O3$_": "_2Ac", "_0": "Eg" } }, "_$__6__q": { "_T_": { "$P": "$yb", "__kf3a2d_": "__v3i", "_Y9_Nc9": "cMGKf" }, "$t__": { "$4x$5$T__": "e$llera", "LA": "C$", "_u5i9Ce$key": "ztoString" }, "$2t$7d": { "$$_X8WQ$": "O$", "e1$Zk04cA$": "_Dc460_B", "T$__v$g_7$": "$" } } }, "$apply": { "P1M": { "ebc": { "Hs$__$$$4$": "de_$__", "_pmLBZ$$V_9": "AtoLocaleS", "$ref": "_A0w$34g$$c" }, "_$DE$U9_kO": { "$_$a": "_", "c": "y_5", "I_B$": "$$$ke" }, "_eMv11": { "__": "_", "_isProt": "T$$", "$arguments": "_$453w$yy_" } }, "$_d$7": { "X": { "$7S8": "_R$_v$G", "d1_1$_$4K_": "$_O_9", "g8_qEfV_1k": "_Kll_namcon" }, "_sOw": { "_$": "C", "o_": "o", "G$": "Cm" }, "E": { "$_": "Dng", "$$A2N2$$$Bx": "We__LWqd", "_BD____98O": "Y$__$_E_4" } }, "p9b": { "_xc": { "_": "zI__O097Q", "_rT$$1PlLOy": "A$", "$key": "a$$" }, "$9": { "b$4pI7nk_F": "$3f_ke2$8", "F_$": "$_$_r4", "w_d$l$$5": "_$q_e$$_XAy" }, "_t$T$FI3": { "i$_w$j": "$$B", "e$$_AlH": "$Ph", "D_": "N$" } } }, "e": { "_$1": { "_wc1r": { "l9": "$C$8_$", "s$__$5": "aIGI$dx", "$": "v" }, "_": { "_ee": "CY8J$", "_$Z": "Cmu$k2zM8_", "z7_Y0_$2L2": "$3$" }, "$_1Y_E$": { "$N4AS_$$": "_apply", "V1_R_": "$", "B$": "v$_v_$$7u" } }, "$o$$N": { "IwEKC2j_3": { "I$propertyI": "_$_1", "$": "_key", "V_5Xb8_$_$0": "$ef" }, "_caller": { "$d91$__X": "a$_7$_7$3", "_apply": "$M", "d$$_Cmy_V_M": "_b$5_Cf" }, "V__$": { "_SRP$4": "$9uh$_5$L6P", "$A": "$", "z6$$40__": "_" } }, "_7": { "Go16u$$$Z": { "IN_1_E": "y$_j_$_", "_g___Q7h4": "_ww$", "bpertyIsEnu": "A" }, "$ce": { "Y_5_1RCo_": "_$", "_": "$$_B$4FbU$1", "G$": "_y$WSbr" }, "_95V$5_$": { "TjK218$$": "w", "_c": "Kv1R3$V$", "hPG8z": "L$key_nd" } } } } } } }, "Y_0": { "g2_csV": { "Z": { "Y$Qh$Yg$8": { "_$y_": { "z_Z__": { "$j_m$mJr__Q": { "_$_0OC$_f6": "_qAto2_y", "_": "E$PN$n$L", "Xcall": "o_propertyI" }, "_9_06_2Q$": { "EZ$$_$_B$": "C2d_$3", "$na": "_0", "E": "$" }, "_": { "$": "dBO1$_$_", "xkey": "_ap", "w": "w509s$" } }, "c0": { "_P__": { "__DZIl": "_call$", "V67_": "e_R$VY$$_a", "Dkey": "b1v" }, "d": { "_": "O$KW8__$", "lA": "_call", "$$to": "y$$_$H$4XjC" }, "x7G": { "$$__aq5I$nh": "$_MY_k", "$7_7": "Z3_o", "Y__K4L_F": "Y_d_" } }, "kapply": { "z_": { "_W$hF1tA$2": "S2__", "$cpr": "$", "q_73cQ$$_$": "$0" }, "_C7$s28": { "O_$996yv5mF": "_h$q", "_c0": "$_$", "$40_": "A_0L" }, "_9t_o_hU$n$": { "oy": "$$d8", "I_": "$aokupSette", "g__defineGe": "g$$__N$$$" } } }, "___define": { "C$10W$l": { "e$9$$S14Q_": { "Y": "$valueOf", "_70u_": "$QyVz0b8_", "_U": "rI_$8_$G" }, "Yapply__def": { "d": "_a_", "$": "_fJ", "_$y3FUn": "$" }, "_St": { "_$XJQ": "a7r", "CtoString": "f4jO_j_", "B5Xd7ay": "C776" } }, "wocale": { "BvalueOf": { "_$1": "$toString", "w__0z39_PS": "qN$U", "$$": "$$j_UzKI" }, "$_": { "_p": "zsV", "a$G$_t2gr": "z$U8$CS", "e_oy56_$$": "b$" }, "rs": { "jYar": "_C_6_$$", "$FQ_0_$10": "NvalueOf", "y": "_ca0$_8" } }, "e$F0L_9DLiS": { "_ref": { "$D8$e_F$A": "yp$7$", "Jy$E1$r_": "e$1ku5$On_", "$T_$q$": "_0$_c$j" }, "Z": { "_wV$JwR_z": "fQc$$_", "$uTY": "aw$pcB00$", "zlen": "$ref" }, "$_": { "$O_$uh$4vXi": "_$e$j41", "XS_e$suR$$": "BbE", "z_": "$Al" } } }, "e6": { "q__looku": { "__3$Zg$_d": { "Y0b_w": "$ref", "_ckeyhasO": "$0COdP9$MN", "KE": "_$" }, "bx8$s": { "XG_5vA8aE__": "$299$3o3_a", "A": "Vlength", "$S": "$kupGe" }, "Jcaller": { "WPe4h": "_$ke", "$F__": "ed_", "d5k_$_1$H": "N" } }, "$B_l0_": { "__9": { "_looku": "RAP$X$___", "Sx": "__", "T": "aX$D___" }, "e3bV0": { "$9z_5$JD_$_": "__A___C$QW", "b_1x": "_key", "$o": "$$_7$" }, "_": { "D_E_": "xL9", "a": "_ref", "$9_S": "BtoString" } }, "mw": { "_QFK1V_9": { "cr$gaQ_t": "AUi", "$$Q__7B0B$u": "$3o", "d": "_ind" }, "ba_b": { "_D9_": "LQs$$0F7rW", "D_Y": "V", "u_K$L_E96": "$zq9_" }, "$_0": { "M": "$_prargu", "aa": "h09", "B__$keyalu$": "eZL$hJ" } } } }, "Ycaller__$8": { "FDQ_": { "R$$": { "cgtv": { "Cg494": "$d_$91i", "a4toStr": "A$u", "$xC8": "xref" }, "xDpR": { "$__L25lmJ6": "$_$n_$", "og": "kk", "$G_$": "_$" }, "$ap2appl": { "$eproper": "xw", "fapply": "$$", "nDR3H": "uy$1C1$F$3j" } }, "_M": { "_NwI$": { "j_h2": "D", "X207R": "$ref", "$0$5": "_ref" }, "Z": { "$2": "$$a$f1$_", "z3__lookupS": "_$a2_22_$$", "xzd$0": "$6$_C5$$$9_" }, "_": { "_L": "$to", "e$b_ap": "ap", "Af__B$$_$": "cD19$$9x" } }, "$4Yd": { "__L$_8DtG_": { "$": "R_", "_t": "b_", "__y$U$$_3": "s" }, "_$to": { "c_7rJ": "V", "$_5H": "EE", "Q": "c_" }, "XmCo$Y$4$$": { "$_83": "$9pLG$_rY_", "aD2_": "b", "$U_t2mqU$Bw": "b$__defi" } } }, "i": { "x88r3_$Z_53": { "$XP_": { "_6__s": "Yf$68pr$", "bam": "_$$_g", "c7": "_df$$SmW8Cb" }, "_": { "_$QH__$sgs$": "b__C", "a_yIsEnum": "___", "C_7$_$2$_": "X88$$o0_73" }, "bF$2n7J__": { "$1C": "$HAO_Z__WP$", "__$3ma": "$", "$3_U4_13$Q": "$cyIsEnumer" } }, "__5": { "_$3$lB9V": { "_isProto": "_toString", "CK$H": "y$", "Y$WN": "uD" }, "Irookup": { "QwGx$0mV": "oe", "_prototype": "$2ax$4", "fh": "_e4_Rr_7MZ_" }, "_r5v": { "$": "$2b_$_5978N", "_": "Y", "J": "_" } }, "c_$1": { "X_d_": { "b$dVN3$N$$": "a$r__looku", "Kref": "__", "____0__": "y7r_" }, "G$value": { "g": "ckey", "k$_ol2B$": "$D", "y_": "_ref" }, "_52_6K": { "$key": "eI8jc$$$", "Pa": "W3_x6", "_or6NNu": "C$B$C$DS" } } }, "j": { "$_$_T66$": { "F8g": { "$": "z_", "_vcc": "$q_WB__68K$", "_Z$$": "B" }, "_530_OI": { "k": "$_m_qU$5Qg", "nyjy$V": "$H$$r9", "v_17": "lT" }, "$2C": { "$$_if$$": "_", "_$__IN_R$": "d5$i$_", "wv$$": "_I_4" } }, "D_y$Fk6_j_q": { "y_33848_$": { "$hasOwnPr": "$$__M7_$$6", "aK__8": "$Gq0$QDR", "E9i": "Zz$$$O$NT01" }, "L4cyux_$": { "aY": "_$toLocale", "Ja": "$", "$$_O_": "a$i$$_f_g" }, "W_R85F$_$$": { "Z": "$__FK__w", "Y0": "Cd", "Y_p5Z_Pru1": "_x$$6MCQ0$a" } }, "$d$a": { "zref": { "w8": "x3", "S": "_i75$fR$$", "_wvalueOf7b": "Z" }, "_ghLD___M": { "W$$$4__2_u2": "_k__1V_5g_y", "_": "___", "be": "_r" }, "_0ie": { "E": "x", "_$": "__$_Q_7$H$", "$": "ec2mAX8" } } } }, "ct": { "XrC": { "U$$cz_f0K": { "_A$1W$2": { "_r__Z$Zsi1_": "_", "A": "Bvw$", "dz$_": "_key" }, "Y_": { "WoD3": "r_lo", "c": "DG_$", "cYI": "_v1_1$_" }, "H$PG": { "$": "X7$EdWYBa_$", "$_6Pt$": "eH$BuD$5F", "_key": "V$bczz6__" } }, "D$DxPj": { "d_": { "_260": "A$p", "$_X_": "ag", "$_5q": "D" }, "x__weU$___": { "jm36_7C$_8$": "vD", "_": "Lpro", "t____$": "Pcaller" }, "d$": { "$l": "Ykey", "QZ_1_rv_": "$g", "$": "w0$$_$DDe_" } }, "v$": { "y8M0$Nz$hb$": { "B1Yt0": "a_J$__", "_$86z$": "w$b_$_P8_", "$w$n4t$$": "Vdi" }, "_0afe": { "w_8_G": "$9_avm", "C$C3": "Y$", "$m$m": "$XSt" }, "__$3$x4$J_$": { "V5gaS_4t_h": "_2QF2gCq", "BD_1": "___", "gref___p": "$" } } }, "q_": { "$_AvA": { "GX4T_$$": { "_93v": "n", "akh$$": "Z_$D", "mpro": "YtW_R4$$C" }, "_valueOf": { "i$$S$": "Z_F$__Q_rF", "$toString": "J0$9__$g8", "B7": "$Yc" }, "B_": { "_NBt0B$4M": "Vb$9$V9$b_t", "$DZ": "A_C", "_Ew17_I_Y$_": "JZ7_59" } }, "$call": { "_7$": { "Idj_V$v__2L": "mca", "$4_$C": "$cal", "X8": "aAny" }, "w": { "$z__Q": "Eu_K2", "$E": "DvB", "w$0__u_": "Okey" }, "$EtoLocaleS": { "_ENCcallerR": "A5US", "dE$ERv_j_VU": "_$$2", "k_": "_M_ci_" } }, "DR2NM__OC": { "___Y": { "eE_0$Y$aw": "$$qC_$_y$6", "eZ__": "_$$$uz4$", "e": "_prototype" }, "$9$6": { "sref": "cB_$$__3$A", "A6": "$2", "X_$$3__q$$": "e" }, "A_e_": { "_$_$5$$_$": "$5NY", "Xw$_n": "i$is", "$0419$": "F_G" } } }, "b3c": { "$3": { "i2M_R": { "$$_R": "e_", "$$": "$o$_WE1_", "_x": "$Q" }, "$": { "_70_X5xn": "__hw$_N_w$n", "z92_$Dv_": "wref", "$key": "$$$bLu9_" }, "$w70$3J": { "L7": "Ma$$", "Xt": "_R_$8", "yj_$$_u": "_8ftA" } }, "__U": { "E": { "Ni0_": "DP$vbp$__12", "xBe$_6b92_": "_", "$_V4yX": "yW$ZnEq6Y2" }, "yMW": { "Bkey": "$Q", "$3": "Lx$", "$b$__": "mkey" }, "$$_VZtZ0_": { "_e": "Z_K216_3XO", "__": "$$_x_2d", "$w": "Ba" } }, "$w": { "$": { "$z": "Zb$", "p_4$wv2$2jT": "zCYM_", "_av$$D_3_": "Y_8P" }, "V": { "$9c$t": "mKqS64Q_N_", "__": "$", "a2p3AM$$w": "c63_" }, "ana": { "_v$F_$I_EM": "_0_", "_": "dB", "yo$Ph$_f$_": "_4$" } } } } }, "yn_BYA$A1": { "$_1v2_4": { "e": { "$G__Ef$": { "$__1": { "$": "$5P_$i__", "$$": "V2$_", "o3Q": "k__5" }, "___1$$$4_DM": { "_3_": "_3$", "$": "v__define", "ag1_e8f$": "__$$Iks0" }, "_TtB": { "A$$__": "_9iqo", "$i_F4SfW__p": "R", "Zcall": "$$$" } }, "$jj$$_KUO_": { "$V": { "_u": "GbN", "$nC3A18O": "e18r0q6", "Wkey": "o_" }, "rC8": { "_p_Dk_6$": "_Zxa9$toS", "x": "aapply", "f": "$1080vhR0" }, "_0cons": { "_x4_": "_", "Doty": "a8_m$48hhW_", "_1_5tK8M": "_" } }, "b3": { "$$": { "_3__B": "__", "_4S__3l": "__AIdW5", "__Y$$$D2": "vam" }, "W$8Q_0$4x_2": { "x80$": "u_te", "$": "bIX$u$Akh_", "v$07_": "$c$$7" }, "Ezc$__9Ex1": { "$e_00t_G$t": "If$q$B$_$", "_$": "$hasOwn", "$key": "$___$43tq" } } }, "_$": { "_$": { "TB": { "Q0V": "y1$", "x_cOTDQ": "_", "s$_DZ8N$F6$": "s4$7" }, "bO_0_$x4": { "d_w": "cname", "$__$": "$apply", "r$__W$$": "_1$$0$4b$$" }, "_T_C$m$y": { "$t": "e", "cu_$9$$": "__09__d", "Y$0$": "_" } }, "$": { "_$E$j_0$_$3": { "azYB": "$$", "$6$X__0_Zi7": "X$$calCcv$B", "_w__W$f1d": "$key8" }, "Tu$3": { "E": "_D$3e$t_", "B5__bWlG1$": "P$41n_N", "$$_e": "z$2_$09$74$" }, "V_slo": { "t": "Z_", "Q3B": "m", "e58u03_Jj": "_ref" } }, "a$$__$__52": { "eNa": { "__$": "$U_$$1$", "_": "s7___8nmz_", "$$I$3E$_5": "CI52J$4" }, "_GW$357a": { "Xslzm__C": "wd$O", "$121_o5aPvw": "_$k1F_", "_8L$_$$_m_": "$wD_6z$$d1" }, "__": { "__v_6F$5Ki": "u61_X3_5mu_", "e01_2$": "m_pqV6n_$", "CxI3A7": "mf" } } }, "g__": { "_ref": { "_bi": { "$_p__lookup": "$_$7vcQ", "a_X": "V1J7Ud", "$b": "$8_" }, "_prototype": { "dy$4$713Cje": "_$", "_925": "__$$$8_Ik", "V1Gf$": "_" }, "n$": { "x_": "$has", "_2K": "YIw", "p$$": "$B$" } }, "$q$_9Pr$_": { "__a": { "v_$$tM$": "b0", "$_6$_": "$fNlCh", "xhsZW_nsoz$": "W" }, "Bapply": { "_$___$$": "$20pro", "$$_1$_c$": "_a1", "$__": "v___$Q$_" }, "__bi": { "cTWMBg$D": "_$", "$__": "b", "FjO$N___": "$$a$" } }, "V9i04_$$0_": { "F_": { "_": "$NB", "$__$D$n": "Tkey", "$": "Aei" }, "E": { "y_toStrin": "V_5_f3_NGf0", "_$9mzaIE": "_$", "$1Z7TQ$9K_$": "$IsS$_1o__" }, "Rs": { "eT": "dvalueOfa", "$Z_z_": "d7V", "$_Amc": "Oy$" } } } }, "_6$8_A$tY4_": { "$toStri": { "qZ$": { "B$_U3_B_": { "$638": "_", "B$B_S_$E_": "y$v0$$$", "$2S$": "$$6nP7F_$_" }, "Ye__define": { "HV$Dc$70": "_X$wl4xt4", "rOnAux_k": "zW__", "y_c_$$_z$": "_N$" }, "_V8XHW$": { "_$": "E_4", "Z": "D1$Lk___D7", "ZoBHZj_A$": "_d$$" } }, "J$7": { "_key": { "P$3_$WHeX": "c3_1_$$l0", "$Cs$n": "il92u_8_5", "$5r_dD": "O$M" }, "$ebindument": { "b6_": "Bd", "Y_$_x_$5$": "C$", "vex": "cprototype" }, "vpXd_$$m": { "$4$$01O7w_": "_O_$ex_$4", "TCE": "_uI", "w_529MCA$XZ": "C7" } }, "_$": { "$": { "Capply": "cH", "Dref": "_bio", "a": "z_" }, "a_3p$_": { "$Ut$Eukip$": "$_$", "_": "p_", "f": "Vy$c$" }, "$_8u$p_X2p": { "Cd8": "L_prot", "JEDsLeFLOB6": "_", "_s12xY$": "d1215" } } }, "v_": { "EBE": { "$$le": { "_V": "x__iB", "_Vd": "__99", "_": "$" }, "_P$$v___cL3": { "Dzd8": "_t", "__$": "$$$9G2$0K", "_toString": "_a" }, "Y": { "y3$0$85I": "____K4", "__cVd_0": "cVGQ1__0h_", "E$d$0_$$O$": "L" } }, "X$$r$_B6AV": { "a": { "Q": "w9xG$", "$r": "$0", "$h$i6_E": "gB$e" }, "x": { "d_$v$u$$Va": "W_", "_": "Ax", "$$b_C2_I$": "$$3" }, "vB": { "$__loo": "r0jR04t5My_", "$t_$Q40$1c_": "__$0Y6_6Ok", "_$H61D$Iv": "_3ij" } }, "A": { "yK0": { "$": "Bapply", "_constr": "$$8_3_189", "zref": "F_z8Dzb" }, "z": { "$ZY6e8x$9_u": "C$", "__$$$1J": "$_q___", "Y_2$VHC": "$" }, "zCC62K": { "_3_d$s_": "BwZ", "$5W$__U9$7": "_UJ_a", "_5O3_ql$$k5": "xcaller" } } }, "_o$$1_": { "T_C_Wq8$": { "bMEt": { "U_$$H$m1$__": "__f_$zB$V6R", "$V": "o2a$", "p2$L": "v_" }, "D$_": { "C_9P_62": "__", "_$c6_KwU_8y": "If_$_$_", "VBpq__": "_valueOf" }, "cy_": { "_X2$9Lx_": "Be", "$8rE0_U3": "__KQC1a$p5", "_z2": "$D$" } }, "r": { "$0$8Db$Ue": { "Pd$": "Wz", "_EQOyB1": "q", "_vZ$$_h": "a" }, "_82__P4762_": { "esOwn": "M8_0$_3", "GdX": "_", "hY$1_": "TnW4_4" }, "vre_w_": { "__r": "$20cw7o", "mC": "Jcall", "d8$_B": "v$_" } }, "e$": { "_": { "dkey": "O60adO_W$", "_X_aI0H": "_nI_4Xqmg", "$": "y" }, "x": { "__y": "$rototy", "e_": "bM_", "_6_6$$_Y": "$D" }, "U_hL$$": { "C$5_$637": "v7_D", "_ref": "__1A_v$e", "$": "$" } } } }, "c_7$d_$94": { "_e": { "kapply": { "_": { "___gaBY": "$isProt", "Yz_1": "_$M1W_p", "$__0": "$y_" }, "$4__v_H_": { "$2e0$": "si$Z546CIF6", "$ref": "kx", "__$__$r$": "___$3$$$_$e" }, "XwP_B$B3_": { "Y$_J8": "r", "b": "x_", "y": "_F$9$_Yt_83" } }, "$0$$0__A": { "_P7h2": { "E$9$BB$2W": "D$$h4107ka", "_$_$$38_": "o$rGV2$e", "_": "$Qs__18$" }, "_pr": { "R_lE8$aSc$": "Q29w", "$L_yH1_1": "N", "a_w": "Lpr" }, "C$0j_$4u_u": { "_Z9dK_": "Q", "B8P": "dS_4S_7", "Aref": "B24_y$130" } }, "l$h6D_8$q$$": { "$": { "$_WK_$k_6_p": "_jkz$45b", "$3$": "z3I9", "z_": "W5_ga$B_" }, "eq$": { "$valueOf": "$", "$2Y_o_vNPD1": "$k", "AS$D": "$_m$2N$$" }, "w_5": { "a$$6E2": "AIg6__$et", "cx": "$isProtot", "GP0Jt$": "$__eA__" } } }, "dd1CbG38": { "_6$iB6": { "_b": { "Aac5e97a": "__Stn___", "__$$": "c59g", "$": "_" }, "e$7$cVtD_": { "_key": "r", "ptr": "u$_J$z", "B_1": "_" }, "W7ettea$Crt": { "vQ8B": "$va", "Be_6$$bED$": "_", "Pvgh": "A$$__" } }, "$D2nbe1ot": { "B_": { "_": "d", "vca": "JO_2$", "akey": "V$Rb" }, "$$$": { "m___4$": "_ZA_B3qK", "__": "DpG$_", "Zcaller": "$4_$$$_$e" }, "$$S": { "$e$_": "Q0l", "jtoString": "GW$e_iRJ_1D", "Z$3$w6": "E_A" } }, "v__6$": { "_c28_": { "$_5_": "_$REAB_", "W$_calltsOw": "k$d", "$R": "_t" }, "__w512": { "__3": "_namekey$", "__E$": "T_$_iv", "y_7": "$_$k8Q9" }, "UmT_": { "$": "_6adapply_", "w$hd": "V_$$6", "$_N_$$PD$": "hj6eqDO9Y" } } }, "$8$8g_$fj": { "$$_0": { "_": { "d8": "$$_$Qp$_", "b": "Acaller", "$2U_Wj$2": "CebR$P__" }, "_$n$_TPc": { "_efBueO": "_j_cYeXd2y", "dref": "rdey", "t$$i$VA": "$ref" }, "C24KB": { "$__x": "V$", "_n_lll_u_e": "k$$S$", "$": "D" } }, "$Vz": { "$w87li_1": { "I4": "B", "DB9ePro_": "D$4v1_Vp$", "_5C_": "$pr" }, "$Y$": { "UCnS3FH": "$2", "$tcl_dw_$BW": "_K2$113r_$_", "d_$V3_$F_": "_" }, "btoString": { "bA0toLocal": "W", "r_23ci0_": "$", "_Jv": "dZj$Iy" } }, "_2$$cK_p2$v": { "_C": { "$va": "BAr", "V": "$", "$5_KF": "S$pA2" }, "_y": { "$2t": "C2M6_DU___", "CHn$y$$v_O5": "_", "_z47": "b" }, "CIF$__J_m": { "$uW7$Ae": "z__looku", "Cy__$P___2": "dcall", "W$_$__S_qm": "_E" } } } } }, "D": { "D": { "_": { "Vo9____": { "xapply": { "$5702$SDik_": "M6$$$1", "$a": "EJ2_8__$D", "$1": "_$_aZ" }, "e$_k2M3": { "F338Jo$h": "x$v", "_rt_q$": "KB", "_": "$YS5eeE" }, "Z": { "$$3Y1e_APsy": "aX74$P_J_", "$_9Z_$Y_": "Wt$520", "$$r1_2fe0": "M_51_g" } }, "$b63e": { "$$$D1_1L_d3": { "k5f_S$0$YE3": "$oEY", "$$$_": "B_63", "_YzSpH_6X": "Bref" }, "Y3_t1_$4hw": { "lJ$0_$_": "I_", "e$C": "iapp", "u": "V" }, "$rF_4$$__$n": { "$": "L$__$z", "F6_": "__Z$_$$$$0", "_Y5_": "_Y_3V$$B" } }, "_a_e": { "_caleSt$_": { "$toString": "_cB1", "_B": "$S87", "XG$": "_tr" }, "$a$X__3": { "_G__O$": "__2F8_7g_", "_80": "SSr$PQ$$ox", "$C": "_yZy5$$_cE" }, "Sf": { "___E__$_0": "$k2_F8F$_", "cPw1vV$Z0": "$I$LqZ$", "$8Y$$$$E8i": "v" } } }, "$1G": { "__": { "Tb$D": { "gcBN": "__", "__28$$_$alJ": "__42$i_m2", "bO_U3a_Z": "C7k" }, "$key": { "$W": "$", "$9g4B$": "$c_", "$_0F": "Bp$__IRD_" }, "b_$_N2$": { "w6$": "NNZ_9$s_$$", "$ndproperty": "X39", "w4$7$0_LtO": "$__" } }, "$b4B$0$": { "we36t": { "__z": "q", "D1_T0$_": "wy$", "X26C": "LY7_$6U$__0" }, "$6": { "Dc_": "$1", "Y": "$_G$$", "CY9$$m": "_$$2A_1_U" }, "K": { "H6KW_$F": "EvalueOf", "_b_35": "$w$$__6", "R": "y6G" } }, "$": { "_": { "f": "$s", "_": "Dh2", "_8_P": "k62" }, "$": { "pG2o$": "s", "v_": "_oStrin", "b": "b_vw88" }, "Akey": { "_B": "s__", "R$": "Aref", "By$$2_$": "$M__look" } } }, "Ei23m": { "_B$__": { "$$f_1EfO3": { "A2Q_s$3BIH": "_", "$": "b3prope", "$p": "$i_cD" }, "O$82VarK$D$": { "d": "__f83$K_$iC", "_": "BG$$42t$$$", "n": "$call" }, "_$ci$_74A": { "$9": "RnAvJeKMS$_", "C": "_u5d", "clength": "cref" } }, "$__$QR": { "$calliapply": { "D": "L2__$4p$$M", "X": "J", "D_X_": "_7I$_N98Z$" }, "_bLo": { "Z$Y$": "$d", "_9g2$4": "I573_", "$3": "Dc1_$1$b9" }, "Wp": { "AC_5t": "$name", "$n_a364": "Y$", "dkey": "x_arguments" } }, "_qz$": { "wl_IX": { "V3sKDFtdz": "F8", "d$E$hzL$_": "_abind_v", "q5$$BVB$": "R$$" }, "_oo": { "$__": "$_A$C5", "v": "$$k_", "$rK": "$_1Zh75O" }, "$3W9__XA$8": { "r$3_2_7_y_": "Q$$vxc$E$_4", "dEmW$_Ko": "Jn", "$R9d_Sf_z": "C" } } } }, "$mNI5KdqC__": { "b": { "_apply": { "CZo$$m_f2M$": { "P_$i": "$$t89ya", "$": "X", "b1$": "_prototype" }, "_$gt$": { "$0": "p$_X", "__d__$_vU": "_S$CH$Z3$", "$": "dk2" }, "_Q8": { "z__": "A$d", "_b": "$9T_Jf1s", "Cre": "Dg84w$" } }, "_05$_": { "$": { "__": "Hpply", "_$jm$z_c01P": "o6", "BQ_$$j$$P": "r" }, "$ref": { "$": "e__proto__", "_iVy": "$", "$b": "Ume" }, "d_7c6gz$$": { "bhasO": "_$1", "b": "__u$vXuPW_o", "$G_$": "$" } }, "U_8v_": { "yk$": { "P_0seng_d": "$_$hwu_A_Ne", "e6s3": "_E$_x$_l", "$OIR5C4z$": "$l2_9$0" }, "h__4r$ad": { "QB_ter_E2g": "TS", "_4$D": "ee_0A0_90", "e_t": "Y" }, "_": { "_O_1$e8": "_toString", "_2x_9_$vH": "Vref", "_valueOf": "n" } } }, "$ULea$PnMzE": { "_5$_c3e$$$q": { "_Q_u": { "_P__$$aoV__": "_", "C36": "_6Z", "c8$_$": "u" }, "$vve$__d": { "e53DZ1_$": "L3_g_$e6_w", "_Dkeyap": "$OZ06_$_9_8", "c_V____$$_": "_8$" }, "$_": { "a$437_$n": "$I_03vr", "A": "_s$_L_M", "$r": "$93$_Y_Jdp" } }, "_a0CA$KA_2": { "_6Z_": { "T38IE": "_Dha", "$8e9": "$bbG", "u$$": "b_" }, "Uref": { "_O": "$___", "W_7$0$_$": "__", "$uxSm$": "$" }, "_has": { "r__vlX": "CtoString", "g": "$ke", "J4vs": "_$d" } }, "_6$$R3X5v": { "_m": { "$Wbindzezwo": "$", "$982_$$": "$$_$_15", "E_": "L$7$_D$" }, "_": { "__": "e_", "$$5": "_$$$$B0v1Z", "$9": "_$kE$_$$7_$" }, "$__": { "B4": "_e", "j$_$": "$_$Y$8", "A$_2n73v": "__" } } }, "_KoQomy99$$": { "$w41$m$": { "HG$": { "$": "_k5___$4", "A75fb_K2": "V_6$", "CvalueOf": "Z" }, "$": { "O$$$_H": "__I", "$bo__": "$le", "u86$e$4_a": "Z_A_t__$00" }, "Z$_$$": { "_Yom__n": "c6a_", "L$Q": "_o5H", "q": "$PWe" } }, "nne": { "Wy7_3$0Y$ff": { "v": "_$_17_$", "$": "$__", "zmg$h__": "_1_L0DZ$E8a" }, "wet": { "S3$": "A2__$6u2", "aoW_$$": "_9mY__eK2", "VT": "$$aZ$$" }, "I": { "_": "x4h", "$Xr": "$caller", "_$nl$_1_Dp": "v" } }, "k": { "X_CmHkeyb": { "fnxB_Ch": "LU$_$0$", "$$h1_f_": "_apply", "_48X$_$_hns": "d$b" }, "zM_MQ__m$5O": { "A$": "CY$V", "_XCVCC_8": "J$8v$_0Eb", "h_fw8da$$_": "$le" }, "b8": { "d": "C__$$G__", "my$$X$$n": "$l_r$u", "_V_": "$Z8HV__xt" } } } }, "$_9__": { "hwe": { "e": { "$3Lw_$": { "_$$b_Y": "Tcw_", "$key": "$$$20v1", "n2SPCR6$$0": "_" }, "$dca": { "Sapply": "wF$$l__3", "e_m_": "_wEz$sC_e_", "Cz$": "$3e$6" }, "L_q$": { "_3_$": "J$_P2", "WX": "__$K37_9C", "$0mv$": "h" } }, "_c$9a8aW$6": { "Wapply": { "_$4": "y_", "cpr": "_82gfe__", "$5zw$_86": "ze$4_jE2$" }, "L$$GU$Vhh": { "R$ZYE": "_S2R0o$", "$h": "Z$q_O_", "_argu": "a" }, "$A_dx1$N": { "_$E": "$S4e$i___$3", "$__proto__": "xJ_421_$c", "_I$3$u$l1": "_propert" } }, "_P$g": { "$_7_h$bFrJc": { "H$": "$", "ea$_rtv": "_", "$$2": "_pro" }, "w_": { "_": "djl8$x_$$", "Dr": "_At3Cx_z1$$", "s__m8Vb$G": "bB$G_" }, "ename": { "_7$$$_": "$ref", "$8$S0_": "A$$D", "$$": "W" } } }, "__hzM$$d": { "_": { "Bna": { "TxWX3K$": "$Iy_", "X$": "phtbON", "$$E": "_Z_" }, "$i$": { "$$2": "B", "_92E": "_", "JGsu_dF_": "v_$q" }, "$2x___$__": { "$$$$3o": "ar", "mr_": "evalueOf", "$9Z0j4c": "$b" } }, "_$lRa$$B97": { "$9_$$eKM": { "Jtt": "DSD", "BL681nfjw": "_$", "P0_1": "$re" }, "E8_0": { "_$55$$XC": "vb_$", "mtoString": "_$$la_Lp", "_61_": "$x_M$$_Y" }, "_ca": { "b": "_apply", "_c": "_", "E_": "r$wi63i$_" } }, "$key": { "s$9": { "AtoString": "_", "$": "G7$1$", "_w__defin": "_ke" }, "E": { "d$2Hhax6_2": "$WXY$$$$$", "zw": "_Si", "af_": "$" }, "_xu___": { "Z_76e": "YSne_2g", "__": "$c", "W13PMA$F__": "C$sv3_$$8_$" } } }, "X_P53": { "xw": { "d5va_": { "_nSen": "$$wsC3_$WN7", "d9$$_FC_05": "Jy_$8c_1Z6", "p8$____x_y4": "e90b$_" }, "zL": { "$wL": "Q7$4pV$J", "v$n9$_0": "$8", "_2_": "$_h$" }, "rJ1_8F95": { "B__$__cJ_": "_GB362_", "T0068c$4": "_1", "a$o": "e" } }, "$X1": { "Y": { "a": "_", "_$6$a": "$$le", "CtoString": "$N_9C$$_s$" }, "_F$O$": { "V_H$2$$7": "b_T_z", "$ref": "a$$$D$xV_2b", "a6V_9T7N$39": "Fap" }, "$": { "$to": "WS8dK1$sK$A", "c": "e", "A_j_$0s__T": "u_$_w3$NvS" } }, "c6l_K_": { "$": { "c": "A52", "$_QC3$": "__zm__F", "Yz$JGym$HD$": "$_4$_" }, "_P$": { "_$_$13$__x_": "y$$O", "AfL$4": "ckey", "W$_": "$_9" }, "$isP": { "_$6$q__Ia": "$z$$$q_x$$6", "i_j": "$eSette", "e$$": "$6kfvDQb$" } } } } } }, "_": { "$Ux$": { "Z_r4c_$dF": { "g": { "$6caller_$k": { "_aa": { "s$hY3_$$u": "_7OriA$6$", "$Q6_1_6oF_": "m_A$$MtZgFD", "$_$Pe_": "A$___" }, "_u": { "__r": "_", "_$_$2_": "_F$", "$7V1W8B9z": "_S__X7_2$$" }, "$": { "E$": "_6CiQ_P$j", "v__proto__": "_V_cw$_", "rkey": "$4$xs2SxlQ" } }, "$$$g_83N$": { "$": { "D$b4OEDQc": "hap", "X_y_b": "$$$t_W", "_p$Z5$6EL": "$ref" }, "BK_i": { "Y94s57": "Q_TM0$4", "_$__": "Lkey", "Yg": "B$2$$_Er$$2" }, "G": { "_WY94$": "_$D3", "$e$": "x_b$$A8$82_", "euG$tC": "$0W3" } }, "$l": { "NtoString": { "_b_": "ckey", "c": "___$", "_3_T": "ap" }, "h$v_ktHTal$": { "_a_xB9M67$": "$$7__$", "$toString": "_$", "yYZ_um": "_key" }, "z2$$$$u1": { "_X": "Yh", "$$_$__1": "$mD", "$U_9": "B_d" } } }, "Aa_b": { "cu$v$Cd7": { "$$2$": { "$_$_3v_": "$ref", "le_": "_$Qk$", "a_Gv$8_": "$n_p" }, "$$ookproper": { "$lS2": "MXT$0_8RZ", "$6u_": "y_AD$10b", "qB": "Eref" }, "xa6U_$$": { "D$FA$_mee__": "_5appl", "B$0": "vS_$q8l__e", "$2_": "R_w" } }, "ZvalueOf": { "_": { "$__": "G$__9f", "$_5": "a__$$27a7", "a": "w6" }, "CM_U5E$_oE": { "$D_y_a$": "n$7__lo", "_$": "_$U", "$OC": "_$_9$$9" }, "_to": { "yWXTtoLoca": "$6S2", "Xcg": "Eapply", "$7_T$KEV$34": "_89ER$Bo$" } }, "$2612_$c4": { "_": { "$": "_Z", "c$_1$T_": "_ZX$_$", "U": "_$___$_4$A" }, "m": { "e": "X_8x", "_$_": "a2$jj2", "$8": "c3" }, "Z_H_$KGm": { "$t": "Yc", "hvalueOf": "C$R_", "cStCto": "_IsEnappl" } } }, "wfp4": { "pk6$39$G$P": { "D$N": { "___4Z_": "c7374", "_$": "wPmu$", "__": "_KQa1yo0_cq" }, "e$": { "o_$q4$1Mt": "_b_x", "_": "xxa$I__", "Sa_": "_QA_Bb$" }, "N_": { "xCx$X___O": "R_$w", "$8D_47P": "$50w$refa", "GfF77": "_F_" } }, "$0r": { "$_$9ObU$$0": { "btoL": "_J8_$ZJ$_8d", "__X$": "$arguments", "$RMP$1$g_H$": "_$8$Z" }, "d_": { "$$$_": "$_$r", "$eB$0E8a": "$C$$", "C$$36bdBBs_": "EX" }, "ed$": { "$nw": "__6", "d9E": "Bb", "t$_2_$1$O": "_CX_pY7p$q" } }, "e9y1_rU64": { "_$$F$_": { "y": "__a_$__$", "$_$$": "$oT$__$K", "_$9f": "_Ob" }, "$$$$sGnS6G": { "XlengthV7_p": "T", "x_$$4c": "yF_$_$m___$", "_C": "bR8" }, "$__$2": { "_0_$$__F": "$", "S_8I": "a9$$_G", "CAW$x_": "C" } } } }, "xe3mbinV3": { "xye": { "_DGY": { "___JUp8_": { "bdy1t7": "__$rdI4", "BzL_2$S": "vcall", "_0E$73_e_1": "m_9$$" }, "a$$_$7": { "_b_$Ep$": "d3_", "Z$J$": "r_M2", "_Str$$": "$0_" }, "$_$M$_P": { "a3__": "$", "X_$": "n", "$prototype": "_ref" } }, "$$03lp": { "Ato": { "$$b": "_L$BFh$", "u": "E__", "_onstructo": "$ref" }, "Cxc8$$kAT": { "e$e$": "q$", "$prototype": "O__b$2", "_$$$": "x__AVw_" }, "c$": { "$_$__$": "b_$$4o", "_ref": "$", "O$I_0TH": "lb_8c$" } }, "En3$37": { "$length": { "BtoString": "$a", "$": "$", "Wkey": "$c$X__7_0_" }, "_D$$v_": { "xw4$": "L60L$5_W", "$kTxUbZ3": "E$5A$X$7$5", "$nA6o2V_9L": "_K192x2" }, "_dh_": { "$j1F_": "p_B_$a_$j37", "_$M_H_eT": "_Z85", "XcD_z5": "_q2E_$obt8" } } }, "$$_iP$": { "A$$_bU$w": { "_Y0_IJ": { "c_$": "DU56_g31_6", "vAd7S$$$": "$Aul", "$valued": "J$$" }, "l$Bh": { "R__H$rUr": "Yv__de", "___7rj__$k": "$ap", "$key": "$e89_6" }, "V__iHIxw": { "b$_V$sXG13x": "dB$C", "_": "_1m", "C_": "_$4_94$LA$" } }, "_Vi": { "X_$vJ5__LF": { "K_": "$Z_i$_$331", "$3a6": "E_$Ll7$qJ_", "e": "Z$6" }, "$d": { "_8__R": "_w$", "qTl": "$E", "$n$$": "Bk8$$WCQ$5_" }, "b": { "ae0$uy7Cv8": "$k", "V7$s$klf": "$$$7q$78$d", "$8__x2$": "$v" } }, "uQ$$_4hq$$Z": { "_3_": { "X7_3g": "_", "cq_o2__M4U$": "$_", "$": "_valueOf" }, "$apply": { "_7$": "_8Y10$$", "Y_T4_Z1_c$p": "y$4_", "_Na_": "_6" }, "Ara_2s": { "aj$$_ED_V_": "B7Wo", "Vname": "$1", "__B_id4K_1": "$_Ir___y$" } } }, "b": { "_0_": { "$na3": { "x$": "$", "_x_6U2$": "a$$", "DE$": "Wc" }, "Bdgv": { "$3K_$_1z$$": "_", "RAJ_0_D_3Aa": "D$to", "L5": "_jz$gB" }, "$6$$7_": { "$515VZXSn6$": "_p706$", "_3$50$H_5": "$$$8r__", "$k": "y$" } }, "C$5_O_U": { "$$47_": { "_": "Dke", "etO_7M_z2wi": "C48$EM$$", "$h": "D$$3bDv2_2_" }, "e": { "$_MlO_": "_4", "y_$1_$": "$2", "__x_V2Mh": "_" }, "__D_8_": { "_": "E", "o": "CA_XsYD", "b$": "$C5i" } }, "$_$_i_$66V9": { "vg_$_E": { "c6": "l_$3", "_2_1$$M": "$toString", "$N_2": "$cB" }, "$1___9N$_Py": { "$_0aF4": "EV0N$", "aBll": "_V5", "WaP98_9gHd": "$z9C_x1h" }, "C___RL$2": { "_D$x77007_2": "g__$_xg", "_toString": "C$Z9n$x$", "g": "$a0b" } } } }, "$": { "E8$": { "y6E": { "_p": { "v": "_$m$d6$6_", "$2$": "K$hasOwnPro", "_": "$W1" }, "Q__6": { "_D__": "bY7_$6", "$a4_$_1_01": "__a", "QBX6C": "a" }, "fxU6P$$_": { "DyBH_7_$": "_$", "$MP$$$FT": "W", "ja_cL9fI": "G$PStrkpro" } }, "$AY_": { "$$_": { "Cval": "$_", "_s79": "_8G__E2", "Qt_BW": "W" }, "hkey": { "_": "_B_", "$J_XyY$g": "I_c", "$_D$": "bg$" }, "P3": { "y$": "XqdR4a$F_", "$$50$q": "U_rHfb$U", "$_$LEK$aV4_": "_$$J$" } }, "ye_$_X_1r1": { "_$Bk": { "L_T": "Mref", "$98E": "b0_Wl", "$$": "Y5B_" }, "$": { "L$4a3dL$_c": "e", "_HU5$Tq_0Y": "$_6d_ed7", "$c": "__Qt$mUY24" }, "uw$$": { "$0": "B8tAO6Tr", "_ref": "_", "V": "x" } } }, "__BiC": { "a$": { "g_yn$": { "AvEVEX_$6_1": "$$_b$", "$apply$Y": "$_Zs_y$66", "$b6": "$m" }, "_o_m8$k$": { "_O": "L34mz__Y$__", "$": "E_", "$m": "C" }, "Yn$": { "_$has": "E8H", "_$_bV1Q_$Lf": "$", "_pro": "D57Sk3" } }, "_c$hO": { "xC": { "Cbi": "__BAM$$$AH9", "_": "v5x$_c40", "$T": "F0l$_$" }, "_Wn3": { "a5k__EyU": "$_H", "_$0g_E_$": "eY_$C022", "Z66kc": "$kPwy" }, "D$$_$AO55_e": { "C7": "B2", "$$$K__": "Cca", "_$6": "$_1$e__E62C" } }, "Y_": { "ER": { "_6a$$h6t9": "$_$_c", "wt_L$$Z_$m": "gq_S$V", "_p": "_$" }, "C": { "$Z_": "$$$$a$cEBW", "__mOv$xq8": "ary$5__$", "x6w7heV": "H" }, "$um": { "c_$__$$d6$": "$5$N_1V$$_", "d": "$Mkd$_40", "tJ_$mXCby": "___n" } } }, "Se": { "$8A": { "R": { "_": "$$$Rz", "G_ttera": "$length", "_$78$_D": "W42W$8BbB" }, "a_G2$$_": { "k$_R$": "$sVXHUM0$9", "$__J_": "vMC", "_8_": "x" }, "Ywb": { "M_ette$key": "_40RbD", "T$$s$": "_Ri_$", "$_tp13_$P": "Ye_$" } }, "$Eprope": { "_M2_": { "c_p2E": "_t_b", "a_14V": "v$9H_B", "cA_J1xJ": "_hZ_9_" }, "V_toStrin": { "_2fxU$": "_caller", "D1": "b_w$", "zV$3JGPYP$": "___def" }, "Ant": { "b$L": "ac", "_meapp_allV": "$", "Xkey": "_4_$" } }, "$i$": { "$toString": { "_apply": "Cye_", "A$cb": "g", "A__": "eL" }, "$_Y$": { "$": "b$$yc$_$$", "W$": "_", "_": "cS$" }, "Z$1_L_6_L_": { "cc_$X_$__H_": "_$$_5t_", "c5$": "bab_b", "RJ_u1P45F$$": "_5YtoisPro" } } } } }, "e6": { "C": { "_gY$U9$G$7": { "BhG3$N$_$1": { "_g$": { "__": "$_$$N_FZa_$", "s4cd": "B_83Etf6", "oQ4$l3": "_$88__" }, "Darguments0": { "DpEB$": "PK3$$_", "_1$b": "_r__$8$_BdI", "E$C5_prpplR": "C" }, "$_iH__w": { "g": "$8b$G_eNQ_", "$__IZ": "xo$2$", "_$3fUZJ_$j$": "$5$" } }, "$": { "$8L": { "D$$1k_x$C$": "_e$", "$7applm": "K", "c$90$tH1_": "_" }, "YDa$$8$nEx": { "P_$_b_U9": "B8$4$$u_2g", "Ul_y2e9_0i": "yA9B827", "$ref": "__Jr" }, "_W": { "$key": "barguments", "dw__defin": "gb0t", "_B_1": "_$m7_W$$_" } }, "y_": { "_": { "E": "K4$n$u9", "l2k_5_1_": "$bt__$e6__", "_6__": "E$_" }, "irty": { "v": "$$S$XCy12_", "C_Q": "T_2$", "capply": "Ea" }, "$6_Str": { "pa": "$_XbSp9k", "XX7$__1_LkJ": "k", "_Tq$E035_8D": "_$J" } } }, "$D$_Nb$FO_": { "_lPFGlb$_a5": { "$194O": { "_": "k6_6__X_F", "$x_r_w9V": "_8", "_X$mY$K$_T$": "D" }, "L3calref": { "$_Q": "oF$_", "kref": "_5", "Zc$h": "W" }, "_": { "vhc1_h11_WB": "OCB_$$d_i$", "_13prot": "B98__$j", "$$0$$$L": "Dv$lI$$a" } }, "__d_V_1": { "d8ff$Wf": { "MV_$12__3O": "_z_k", "___$0Z$": "_", "k_3$$8cYv_": "$$D$sy$_J" }, "$9Ig4$8mzn": { "w": "$xam", "E6": "_apply", "V": "B4A$Ud_" }, "$i": { "$_w3yt": "_3QFoYE$", "_S_$7_": "_", "_02_$0$1": "_" } }, "z$$d": { "_": { "$X$71_W$y_": "$$", "l": "capply", "_cC": "B$GQ7$QdCv" }, "$d$h8$$Ry": { "kRhWo_26_": "_key", "$b__": "y7", "_C": "$2_n_O$T_" }, "z$$3": { "O3D": "$U8_As0s2q", "$": "_7vV_3", "__J": "_aindpp" } } }, "_": { "_": { "$$1$": { "_$$A": "adB", "_ref": "CO", "$apply": "$5" }, "EcT": { "b_q3": "wpnIV_U", "__$": "$0LM$CZ__", "$hasOwnPr": "__9__QF_q" }, "$0$": { "cM3_H_": "$u_", "Linecallerm": "_", "X$WD$__M_3": "$$$_n9" } }, "$pr": { "$allk__l": { "s_": "L", "Em": "$2D", "I_": "V__proto__" }, "n1BD__D8_": { "c_$1_7$$": "TBFcdLj$t", "U_": "z$", "_$JJ": "__" }, "ea": { "$b_": "_ref", "$H$eMi": "grefGetXp", "X__": "U$b7" } }, "_$__$6___": { "xY5_": { "__$i": "$_", "$toString": "_a", "_": "Eref" }, "z$U3": { "k": "__$", "cF": "oW71SI_$C31", "XgAl$_": "$" }, "Z8": { "_a": "$", "_": "_", "_$_$": "$0_1__e_$$2" } } } }, "V$$_$Z_5$": { "e1c_$611": { "R$b4_NwL$_$": { "$Y8$": { "_V$cy_g$6": "_bind", "$O2": "_A1y__g_J", "V$w": "$v63_Mk_t73" }, "a6$p": { "$$ql$": "__B_", "Y": "XtoString", "z$9": "C$_" }, "$$cw4D$$": { "C_ZH$_u$": "_ar", "b487_": "V__lookupGe", "g": "_63" } }, "$2Qo_E2$y": { "$Vu0d__b": { "D$8": "D18$$$", "B7": "U", "_S_": "y" }, "w_": { "$toString": "D1", "_ref": "E4C_", "Z1th9brefAe": "_$$D_" }, "_W$5z$$": { "$z": "$to", "_f$__": "D$u$MW", "__$": "U__j_" } }, "eP_E$Zr$6$": { "v3_8": { "v": "N6_$$", "A__C$": "acaller", "$_$_": "_aT_" }, "C": { "$40_": "$", "E1OeN": "$iN$X___", "_$Ck$_$H_l$": "S$S$6$A" }, "hgum": { "E$": "v__l", "r5": "B$$$cPv__", "$O$3o_$zZ66": "_e_" } } }, "UvalueOf": { "_$_y": { "_$8argume": { "fe$p": "q_", "_ref": "_q1", "C_$$$": "_d$DaC_1l" }, "W_0": { "b_": "$x$5___", "_oK": "V2p", "$__6n5VC3": "_" }, "__X4$_I_": { "$_def_": "A1", "j$$refA": "$x2$HQ", "V__3Uxr": "_0_w" } }, "xJL$$S4je$_": { "u3FFic$": { "$d": "__G", "$8bind_q": "$Rh$Imd$$K7", "C0": "bKFE" }, "_W": { "$r9e": "_", "$_d_$": "$N76", "j$y__": "_ye" }, "__i": { "Q2": "_t", "ycDV": "$_D6___j$_I", "_Ja_3_S": "X__$$0L8$5A" } }, "_H_": { "F": { "x_$Vo3gnx": "e_cqE_F", "_m$$99": "$", "d": "$_$_YdE$$wv" }, "Q_44$3$n": { "V$$_": "__1L6", "CY_433$_": "_p$fVur", "$_57r_SuF_h": "$ref" }, "r__": { "k": "$_", "_$s_Md$yt": "qC___K_9k", "b8$y4Q__96J": "cSvWLiTie8W" } } }, "$9___G": { "$_$M4t_$LJ": { "H_1xOgu": { "$EKS": "QD", "EI": "$O2__ykQ9$", "k$_A$2J3": "zkey" }, "_": { "$o": "d", "we$_0_p9q": "_D2c", "_key": "$5ye_fKUl" }, "$ref$reftrk": { "r": "$_$$$_", "Y_345$": "z_cz_ilS56", "Ebn$_d6$3": "B" } }, "a$1$W3$r$_": { "o__$k$A2$": { "$": "_apply", "y0": "$", "a$kq__$": "$QW8Z9" }, "ecaller": { "__": "AXle", "C_": "_9UD", "$": "mt3_i2_9t_" }, "fke": { "V__$AttkM4": "$_6Lq_", "$$9f": "_C$Mbindha", "A$K$_5$2H3_": "$_" } }, "_wd": { "_m$": { "EnrgumenEW_": "wQFw__$2C9T", "$C_2$_$5": "Dpro", "aA": "_r" }, "_le": { "W$": "Na", "O9thg_": "$P___hT_6", "_length": "$l" }, "AS_$": { "$y": "A", "$b$_": "_H$27577", "C": "_b17" } } } }, "$5": { "m_A_nU_9": { "sj_8ir0_q_": { "$1_0": { "n": "$nd$b", "Qs1$ref_$na": "S$$2$1W_$", "B": "a" }, "$$rC_z_": { "G$": "U$1$", "$E_$1LXVXxV": "Y", "E": "$_cV$" }, "_pl": { "_$Oc": "A2qtg_$VqmJ", "EV": "z", "F_X": "$" } }, "$t": { "d": { "Bd67": "kF$TX", "d": "$$$x_3kI67_", "Eql$$$_40": "$7" }, "a19": { "Z$$": "f9B$", "$$K": "AB_def", "X2ob": "WbK" }, "n_L$$_0$": { "d": "Xo", "Bref": "dWZI$N3", "s9b": "$h_$e" } }, "$_$_$Mxo1": { "W": { "_$9": "zS__f_", "_nV_twH$n$k": "$f__$", "$$a": "$2$$2j_$d3" }, "$_1__": { "o$4tGJ0$T": "C4Mh_5$", "$VsJ": "_eP$", "LX": "e0" }, "$8": { "V_Eix_e$A$$": "E3D6ae6", "y_c$_4C$": "__a", "$E$Q__7o2__": "_d__Y" } } }, "_valueOf": { "S_4": { "$": { "_9ij4rM$": "B$VoS$h6QU8", "_V": "_bind", "_$7": "$o$_4d" }, "E": { "__d": "yz3_M_$5$", "D": "_", "M1": "_qT$" }, "a9PIbY_": { "$NAq2dIp$m$": "a7$", "$922P": "_callercall", "_9Ko5G$_4$": "M" } }, "_ref$nameCH": { "_F9J_6_u__": { "J": "x2$", "b0B__tTi$": "_ref", "_": "a$4_E_g_" }, "C$b": { "frzc3c_": "$$$_$n1x$", "$_a6$Egi_il": "$nProperty", "_": "t$4" }, "wie$r_A$": { "a_4_N_$D_9_": "vXRA", "$____": "_$_W$F_8__", "Eca": "$toString" } }, "$Z_$$": { "_reN9name": { "t0_FT_": "C", "_D": "H__", "_vQ": "_$_" }, "r$$9W_$$B": { "$j$2070_DW": "_$D", "_ref": "a_", "$_M": "Yallecon" }, "DP8oE_0_$60": { "W$3C$3$": "$00_$", "_V__t$7_T": "nVEloxBC5", "EU$$r_": "_vR$Fn" } } }, "$Ds_$5$9p_4": { "_all": { "hc$$": { "$": "$", "d__$I4_m": "d_HMK$", "_B_$g$": "_length" }, "_$$": { "_": "$", "a": "$b_", "$5$4$": "_h$m$y_0$26" }, "_valueOf_ca": { "_$J$m8_$": "aq9g1_EG", "_$$4$yQy_$": "B", "c": "_z" } }, "$3": { "a$$_k_7": { "y1$___43$$_": "$w", "_9_0": "_NfUE$ZMr_G", "$": "_0$y" }, "A": { "_": "WX0_wD$B9$1", "AeVb": "B$WY$_$__", "$": "$callxbpro" }, "Cq$jdz": { "bapply": "dN$$_r2_3", "C": "D__$45BN_2", "aFkeyngVarg": "y1$_c$" } }, "_nwk_2y": { "$$O58mk": { "n99__Y18$": "V__$namepr", "$fB7r": "$$$_6$_P$U", "EF": "db3" }, "W_1X65_$9": { "_$g_5$_": "_P__$$riFY", "$$$on4": "e$_", "Z_$_CX$": "ygSe" }, "$key": { "_nQ": "$je$_x$YEbD", "_pr": "_$U$4d$_$", "bE$$6X": "dcall" } } } } }, "Ak": { "__a$__Q_Iu": { "X": { "V_$$__l$7": { "$7R$_baa2$1": { "c": "Cg", "$_$3h$b": "__", "_": "$6E_B$B__" }, "_$HJ1$1$1": { "__B$20Jc_": "oe", "v73VA87i_$": "vkey", "$$c": "EZ__" }, "DI": { "H$1x87": "_", "$5_q$7Q$": "_43$f_9__z", "RNu$_O_VE_": "$T" } }, "c": { "$dH": { "fc": "$ref", "e": "c", "_": "Xt1M_k$A_1" }, "_0K$$$_$": { "Bw$": "Q_", "_$oZ0_p_$$": "d3$w", "_c_i7$2$": "_Ywp" }, "_$QsxP": { "$o32_OV": "X$QT", "x$_Np6pU_6_": "W__d", "$call": "c$$$$07h_" } }, "a$_": { "ylaT_": { "v__8_": "b", "$": "b", "$key": "_$_l" }, "_$5dh": { "w_rgc1": "_eyd_8T3", "Z_": "J_a3_$_8h3_", "$$$eh$$Se0": "A57O" }, "_4": { "a18s_$J$$": "E$_vE_$", "_BY": "$", "_$_gc": "$" } } }, "cx1$fVL": { "_f$_$yoF$": { "_$_$$53_d": { "eS_2nBet": "_4", "Y4v_28r_$TR": "ME4____8$", "$key": "$j1_" }, "$N": { "ZvxyJ__p": "$r$_W2h", "$7TYcJ": "_p", "$4__$D2$dh": "$0_$e$_$$" }, "$_prototype": { "$_AiO$0": "$", "$length": "y$$$", "$": "_4_6c8x1Q_" } }, "_X_82l7E_55": { "hn6": { "$R$8M$$$v": "Pp$", "D__": "__WJ2_", "$key": "_" }, "__E": { "K$64C2f": "$GjO_$C", "c$N": "eA", "x8b": "$W$_$2$0w_$" }, "_R$_Dz9oFy": { "O_$Xc": "$", "y5$M_eW44": "_7mR_2", "$_wC_": "Ir$Y$4" } }, "H3_": { "EbX$8": { "o__": "$p5_", "D": "$ref", "H9": "$N0" }, "ko_7a_0": { "$": "NIkC__H", "_": "v_2$", "$toStringna": "_b" }, "e_RAmNwL": { "_0$x$C$_$_": "Cgum", "Ae5_n_Y$_": "_key", "e4C_": "$" } } }, "Vo": { "Vum": { "d_z_$CwFu_": { "b___$T8Y": "N95a$l$$c", "v": "c_tt", "___f_x$_q0Y": "X_f$q_7$U_" }, "$": { "_x_Au$$__5": "$c9F$$_X$Y_", "J": "_K$", "SvHv$8$1D": "__" }, "_W_r": { "Y__Ea_": "_", "_key": "Y", "_7callcon": "_$J$" } }, "$E$V9_y": { "x_": { "_47$": "j6j26$", "_61": "$$Ee", "Z_01": "$" }, "y": { "O_": "__c", "$": "$_3_", "$9$b3": "_$$$X" }, "S__$B": { "wL": "E", "_": "_apply", "c": "u$$h_$_C$$d" } }, "$to": { "_z_$va": { "jn8A$5_610C": "uname", "$$n$": "m", "d___M$$$Am": "_" }, "$6wT6z$4$5j": { "$hY$g": "jBapplyy", "__s": "_12_$", "$54$_T4Xc7": "$l61$$" }, "A": { "aExA_6_$": "$D$_11", "$U_$_GH7$": "B__", "W7_6": "__b$b7w$$" } } } }, "gT$$": { "_$Z": { "eo9e4$_$$_": { "__$$$$7C_": { "E$$": "A52", "X1QA$$5_G3E": "_$h", "F_2B_r": "l7" }, "$h$": { "cr00_W__7E": "Up", "D8av$": "qA6eaf", "_to": "$e$" }, "y": { "pS": "xY_B$", "x_": "W6_2$", "JYFSM_$_": "V7" } }, "g$$pW$$$": { "__D$$": { "b$$lSHgIq2": "d_ca", "X_3$": "_4Y_12JKU", "$L$lUzhn4_": "$a" }, "_0q": { "__": "C_SbiYbL", "_Gz": "BN$rxB", "__3": "c" }, "$ke": { "_$K$zSA$$2": "B", "Eapp": "v_$$ad", "_": "Aar" } }, "O2": { "C2_sjs$$": { "_keengthdE_": "a915S$2", "Kref": "gS0_5$_", "_iBt$7": "pbBdXl" }, "_tW1V": { "NXnameBrop": "zha", "N47$m": "_$I$_6$", "_m$$4Z": "__" }, "CFt$O$$": { "$j__": "Om$4__p1bin", "a": "__q$q__wr$$", "$v6$5ThvL": "_ca" } } }, "$M": { "$argumentsr": { "_b": { "Gc__$D": "cC$1", "$$e3_1_$$__": "e76$$__2", "t_DO$$_36": "$_U" }, "$_$3": { "$64$s$yN": "_p_cA", "_$3_": "Y$_c", "coLoclen": "DtoString" }, "gLro": { "RO6a": "_E_wq4$", "_$62Df": "N_0", "$T9": "$_" } }, "_$": { "__$$c_": { "$5a$": "Xle", "n": "d$$", "A": "vf75q3n" }, "D$": { "$": "_$8$", "_O$Ef": "_", "__a": "$__proto__" }, "VT__$7w_j": { "$": "GcXz", "_g_Rb1W2$_$": "aY", "$D_Cfd$4Ed_": "_Z1ha" } }, "__$dB2": { "d1$_$$Z": { "$": "$$J2", "$b": "_Z__", "d$": "_$" }, "_F5F0$": { "TvalueOf1$0": "BRN_", "Gn_7$_$$_x1": "$0_HWy", "I": "$dtruct" }, "ENeAK$9__$_": { "_Ab3": "_Eq$E_2KpC_", "p$": "C_", "Me": "c$p6B$09T" } } }, "$v_6": { "Xcaller": { "$$8_f5Vr": { "K$_t__UVhlH": "W", "$": "__$", "$apply": "$" }, "_G_$$l": { "$_": "_", "cyH$DB5": "C_", "rkey": "$1" }, "H$": { "_1_$yh_ycR0": "wq_", "E": "_I_", "_0": "Capply" } }, "cref": { "_2_IT$": { "y_Se": "nWh", "japply": "ch8h$9$c", "Bb": "_d" }, "_$$ll$2": { "_3_": "u9", "E4": "v", "$$e_fkbb": "Bc" }, "ch___lo": { "_toString": "_OY1r", "$$x1ddkX": "E$$H3", "Skey": "_r" } }, "eKo_": { "_name1_G2bi": { "__7vT$3T": "Bb", "E$B_0M1": "$4b1", "Ek": "vap" }, "_": { "u$$0_": "a7_$_p", "$i__Ha_$$$a": "_z_T$", "xeb$1V6": "DtoString" }, "W0$9$s0Hg": { "dtr": "$3jb", "$kEc$$_PE": "_6xM$b", "$____": "B" } } } }, "C$GC6$W_x4$": { "$A$c$___5_": { "u_7": { "zf$$B__0": { "g_$": "A2E$su", "jZ$$Gco0_A": "$t_4$$62$_", "Yx_$a0I": "_kup" }, "L$N$_F4": { "v": "n", "EA": "Acw", "$_Zl$_": "h7$LI" }, "_$": { "cvalueOf": "$$6_i", "DHG": "ukey", "_8": "Q__3$$" } }, "_W$S_$0$Bi": { "_U": { "___defineSe": "$U9_$_$U", "$b4": "c9$3l00", "hD$z_6_": "z_7sf_m" }, "Q$_d_D8": { "W$vr3J": "y$", "d3_u5_lG": "$D1_28", "s": "iU0" }, "QVyryg": { "n2$2ZV$3": "$1$", "bg$__1_$": "e4f_$$EeW", "$A2": "RJLP4$9p" } }, "c0XIDz_": { "C_Z": { "yA__$$7B": "YgsRe_i$0K", "a7": "A1__$__", "_2Wx$": "$ZdO" }, "sf": { "e5559$t": "L_f$Z$$1", "u3Yj_$h__": "a", "ci": "_J__x_" }, "ecaller0__": { "j": "tc", "L4_j$7o$ok": "_9yIsE_7all", "$key": "i9Hf8cS_" } } }, "$": { "w": { "$a_n$On": { "_I5": "$D", "dcJ0_k$_": "$", "C$": "$bind" }, "e3734$g_$$b": { "Y_1call": "A$_$1", "XJ$_3_": "$U", "$2$_$K$o": "do1" }, "Alength": { "_2n": "e_$_", "$1$tW98": "_2_6A__2", "_a": "d56c" } }, "$$5": { "_$": { "C0_": "_p0_$$$y6", "w5": "_E_P$J", "v_va": "a$lMJ_$_l" }, "$f": { "A8": "y$b23E$0", "$fLYXW___$": "$S$9X$$f", "o_$X": "I__e3___c$" }, "AX_$$_23_x": { "R__$1": "_wyL_5$L$B_", "eYc_Ab": "$_", "_$R": "Ud_" } }, "_LJW$5_6$J5": { "_$B__eD": { "Yw": "__ZVz", "__": "DU_AkAm_", "BR_": "usj$$_f4_" }, "$length": { "Z": "$m6$$$$_$", "Ez_uT99$$": "xBj", "$pe": "$ca__pro" }, "$rz___A_pa_": { "C6D$_ykz_$": "w$", "Z": "Do", "NV": "_5" } } }, "$$D$Wv3D$": { "$_j__E_": { "_4q_ccK61": { "B": "ci", "$$zU3f$r": "_$6$7c2$v", "e": "__6$$H" }, "dbind": { "$_$h$m$B": "$$69$9j$jA", "$": "$toString", "_toString": "Wk" }, "L": { "C$1": "q$", "$V_$": "i", "$____oA": "$Ajx$1_" } }, "E_$yY_YC": { "Vref": { "$MfO": "_S", "eo$_Q7_": "$1e_$", "_2_$_": "$B_$o$$" }, "z$7dfY$": { "_2": "g7", "$": "$D", "c": "y_cA_$$Dj" }, "$tdS": { "$$Y3": "Cto", "$U_jgm$_E$": "__a", "$5l__Y_W": "$c" } }, "Br": { "zH_uP_b$6l": { "q1_$": "Xref", "$su___de": "c", "$_Cb": "_8v$d$___$" }, "qwm": { "$": "$_", "$_1p$WPlBn": "X8$___jGc", "$__KG4$_$": "Q00" }, "yKK$Vy": { "$$U__Y_1$": "$_IU", "dt": "y$2J$$", "_$0": "aWbKHP" } } } } } }, "W$3$22$0": { "__dbogm$Gc": { "Y$vf": { "J__basOw": { "$$q_oF": { "$2E": { "pmiK___": "z__Jam", "w$J8_$jbz": "yScons", "_F$$h$$_": "d_$_iz" }, "$": { "Il4_A__": "z____p8", "j__": "A23$b$_", "_5__": "d" }, "___5l_": { "_$$_$": "_32j", "W$": "A", "$p": "W$_2$N7dv_" } }, "_8": { "$$": { "_i$3ZVa": "_SYr", "$": "u_m_lJ1", "_$y6ee$L91_": "_valueOf" }, "Y4_": { "_0x2$5": "A$", "B$__Tf$$": "$E5", "Vlength": "$vk1l04_$" }, "b_RCYQj2h$m": { "$$_8$G": "vi$", "_8": "ccS$_8k", "$_d__$I$_": "__EP" } }, "_x_NDaO_": { "_$syLW3$_5": { "zo_R_i_$Ki$": "$__4", "_$_": "B$$_a$$AX", "dconstruc_": "QOg1" }, "C$$_$8$_K34": { "$cQ_": "$1___d", "$An$$$bdbW$": "R_c$xR", "_$": "sD$5_$_X2$c" }, "A3z_j$M__": { "cref": "Ei", "Zx": "Rt4dd", "$3C_v__": "M_pu__60981" } } }, "_isP": { "$toString": { "zvalueOf": { "_$": "_B", "_ap": "nB2y3$$Y_", "_3$by0PEPg": "_9E9_6_S9$" }, "_i5E3S": { "d": "U$$77K4ef$", "_0XH_b_a$$O": "Rtv", "_FE$__8$_Ck": "$o1_79" }, "UT": { "C$T": "_i", "XF_$Do5_": "d_5A95", "$sws$": "HB" } }, "_9": { "N": { "_J_$_1": "Y2$$", "_$2n": "w", "Zref": "$_345$__" }, "oll": { "Y": "_$i", "A$$s_aA_t": "aI$SZ", "$k$": "$B01$" }, "xT": { "_": "Cl", "O5D$": "f_$A", "bo_$r8__": "g_29" } }, "mapply": { "napply": { "A9_f$_$aYw": "a", "fU__$6_": "R$E0", "E": "_B" }, "$ra": { "_kb$": "af_$", "rlueO__look": "_c$$N", "$B$__": "$key" }, "T_5_0xZ7": { "e_toLocal": "$8Ly_jK__", "_": "___A$2$5", "A$$ref": "c$" } } }, "xkey": { "c4$Xp$S": { "Xp": { "$5v_8$B": "Z543g", "j7$$DRp_$__": "_$XhasOwnP", "$A$": "AX0CtoLoc" }, "R0n____w$$": { "_$": "_5VxIt", "$": "_tpe", "eapply": "_nPro" }, "_$": { "_$_6": "c__E", "$erp": "$p$g$7$H$_Q", "_h6_": "I5_" } }, "A__D": { "w$0": { "$9_$___P$": "_$$S$_a_$$7", "e": "A_", "Ez$d$_$": "z2Mmnl" }, "cyYGca$__4$": { "___$J$$": "O$$y", "_3": "__Q", "A": "$32Ud$$01" }, "ya$_": { "c0$T": "WE", "s$Y20j": "d", "$48Vh$_W4": "c_Ik" } }, "CZ": { "Bad$8$_0__d": { "x49$7s_$": "$_F1F", "ce": "b$k_D$O$u$_", "_a_v$3": "W3r$" }, "_v_$83$Y": { "$_": "_length", "$j9_BY2$_X$": "E16$8", "GSv$d": "$Lc_2XO_p_E" }, "bvalueOf": { "r_j": "ZQc_$Y", "_": "g$$19", "$X$": "$toString" } } } }, "$n": { "D": { "$ZJE_$": { "d$$_UP": { "BS": "cC92S", "hT4Sz": "$_Z", "_": "gXCG" }, "w": { "$0d0": "$__0_", "_u_o": "_7fv_", "__2DMCZ$$": "_4_d_" }, "Q$$0__$_j0e": { "d__": "B_X", "J$7T": "Z$$x", "_ha": "o7_$___$" } }, "d$Tk": { "xA$Z": { "$30VwIV$9_$": "B", "$$7": "b$a_", "vhy_sPY": "$_" }, "e2_4$2HM$5": { "k9": "a", "X_": "Xv_", "Ias": "A_$_" }, "$bil$$z2": { "_2_Z": "V", "D": "$k_8", "i": "bJfg_U4_" } }, "A": { "$4$_": { "$nNY$v": "dg$", "$$": "b2_G_", "$_N5r": "TfEC$8_9$" }, "eisP": { "$LSJ$q_a_$6": "$64", "X": "_43pE_", "e": "Al_" }, "$__lookupGe": { "bc": "$$9_", "b$_p$5g": "_7v", "_5mC54__H_B": "$__6$F_4" } } }, "D5": { "E$is": { "e72": { "$": "dpS", "__L5k4$$Uz": "$", "_I$$$5$$d": "_LZ2$_71uC0" }, "$Acons": { "_s7_4Z3_D": "$eE_$$DEFVX", "JAvE": "EL$60", "x": "r_$Yk$P2__" }, "_bind2_1": { "H_H": "Y", "Ieng": "$$3$$$aPA$K", "w$__": "_Y" } }, "$X_": { "$nu": { "_$$7VIL20": "$I___iT$0", "$_": "e8nY", "t_$_kY8_": "LXe" }, "$pS": { "CaP_0": "_cC$kelooyI", "$key": "$_r", "Z_$": "$ER$2$_" }, "_c": { "DvalueOf": "W0", "$___wtY9": "$toString", "W$cuC": "w_" } }, "Ch__$_2_6Z_": { "r": { "$A$p$v_3": "$PJUdW$7$Z", "_$f0": "z", "w_A$": "kT3" }, "R$z1_G6_lX": { "$$v$$$_u2a": "AAv51Z$", "s$": "_$", "aZ$": "$$_D" }, "Dn$": { "W$w2": "$izPm$$F_", "$93_V$N_": "$TT_k$z", "$E$E": "$gU$$$J" } } }, "e$4d": { "_$_q_$ZC": { "k": { "_B67d___": "aYBd137$g$", "$24$D$Ae": "_", "z": "_x0G33" }, "a$dv": { "C8_": "fh_", "Y_3_1$J_l$a": "_LZa", "$d": "m$" }, "_Ica": { "N_": "MV25qo$D$", "$G$G": "_$$Rhw", "_2H_U9v": "_V" } }, "$l4$$": { "$5uZ4wY": { "v": "_C", "cFH_$_0": "$nZ_v", "v_$Ty": "S" }, "K9": { "dcaller": "$X4", "_": "U_R6_6", "y5mv": "_vyg$$Q$0v_" }, "$$": { "C": "W", "$aI$$": "Wto", "Ta61Gr__9V": "Wcall" } }, "C$": { "t_$": { "_V$$Q$ddj6$": "$_$YY_$", "Ga0": "_3pc", "$__argument": "_a" }, "a8Acvx_$": { "___look": "dLocaleSt", "mY5K_$K$_$": "$len", "V_Fd3W_3k$F": "_c" }, "_FZR_": { "j$__Fz$13": "kP$k_$", "_v": "_tringisPr", "B_P$$3_1": "$0B7J_22_" } } } }, "_Zhmen2r": { "$_T_dev": { "_T_": { "qI2_AL": { "Dref": "$d", "Bkp_zJ_s$R": "$", "I7_Rt1_$$_7": "r" }, "E": { "$o": "I4gUoMlV_Z7", "$NI7_eZAz8": "Ba_$Or$CB9", "_$$$156$WT_": "Cc" }, "$$_Q_p$c": { "e": "Iyp_1_$_", "_": "B", "b$Z02$z": "$8" } }, "$": { "$6o": { "_valueOf": "_", "_caller": "hxP$RW_9$u1", "__M4arg": "$$" }, "X": { "$Xb_370": "YX$_Q_$p", "A___71a5d9e": "m_V_tR_", "$L66_$hhaS": "$le" }, "_EB3_VN": { "D_v9_$u__N_": "$E_7zO83", "v$$67W___$": "xC_", "_CvD": "$length" } }, "_W": { "_": { "ee": "J_$3", "EhnU$5T9u$": "$$$e_", "dD": "b__defi" }, "s__": { "$9aul$r2": "$I7", "$H$x_3Kd2": "Y", "$Zo7D_$T": "_aY_c$R_$" }, "$_7Q": { "__": "AEa$a2_2", "$GP5$F_35$$": "$$$$$W_$", "Fapp": "B_$_G_D$" } } }, "D$$M": { "B$84V0": { "$$": { "b$c": "_9_ml$$", "_68z2_IY$": "$xO", "e_uZk$F": "v_qe8s" }, "x_t_$$z": { "cz3wp_5C$": "$ref", "c8O$F$8e": "__$_", "_0_8_T$z": "_" }, "$": { "$bq$pplengt": "$$tTo_$", "$": "Q_r3_B__$", "W_2C$": "a6F_7z3" } }, "dM$c9oMnRL_": { "eref": { "n_8$": "$AD$Q_1$_", "_$Y8Z$": "$e_$5L", "$D": "_dco" }, "_8$$E": { "N$a": "$M4D5Z$1di", "e$49a_G$_I_": "_", "_3$$m_$N5d": "B6" }, "a1bXL$3eVK": { "wzpF_": "_$3_r_$", "o$U1$": "_key", "WH2m$MRL7": "$$$$" } }, "Dc_2cx$fBb": { "$t3C_$$__": { "g_": "avalueOf", "pw$g7": "$DqD$t6DT$$", "$o$": "$7XG3X_" }, "_": { "__Q_": "PqA0", "_a07e_": "C__$0W2y0bV", "D": "ec_2c" }, "AE$_": { "r": "zvalueOf", "E__": "b8w_$k2_", "jll__defi": "Xnsengtis" } } }, "_": { "af": { "Ly$9$": { "_eVfw_E3": "$ref", "$m_0_wCU": "$$0", "nte": "d" }, "V9$$aq5v": { "b__h$_oo": "A$$", "E": "$B", "_i7$0": "HtoString" }, "$ref": { "yna": "Yw$", "_$e0$V_0": "$__PWW_$", "T": "z$" } }, "$$m": { "D$$": { "wE": "$p_3d9", "$$": "V61ad_62dX_", "$h__$Z3$2_A": "$h" }, "_c": { "$": "_0", "N_$2": "_Cb$717", "A_$": "D8D$d$_P_bE" }, "$_$_9Y$$": { "_4$H$0": "ckK$$Waz2p$", "G": "$R$$U70o", "n$P8$e_": "$_R_M" } }, "Jl$__$": { "Ekey": { "hK": "$", "j6fX": "__V_Kh_L_z", "A6fo": "$5" }, "B_7": { "b": "x8cfHm$g5__", "Ab": "_QE_C_$A", "xQ$V$$k$d$3": "$" }, "j$_5d_7$": { "Sl": "x_U$5__", "_5Xu6_BgQ": "vOf", "_B": "i$D" } } } } }, "$6$$": { "$__de": { "a": { "$$_w1cv$$D": { "$Q$_$Ql": { "e": "$i", "$length": "$_$Cl1o", "$__977_1F": "c_blt_YfqW" }, "v7_Zu_2": { "U$h": "$lengthty", "$": "dngt", "de3cI": "vwn" }, "$": { "_HB0F$_f$aj": "$toString", "rap": "Ys", "__D1": "B_$H_1$y0_W" } }, "_B_7s": { "bY410": { "_": "w7$y", "a_0_RFnh_": "$is", "U4QT4_r": "ZC0C" }, "_calle": { "_U$$": "R__proto__", "zil": "$_", "Wcall_u": "Jz8_" }, "Frq$v5$$_": { "U$6$5$1_": "$_", "$": "$31ey$allar", "_na": "wV_" } }, "__": { "v$M_$$$2_": { "QR_yp": "c__", "NM": "__", "dO_s": "m" }, "v$$3l": { "ake": "$F_4PvI_d3", "c__$8__$": "UD", "w": "Vj_$6" }, "_J3_rQ06": { "$__": "ABi$ASPD2X", "_w_$$": "__", "W": "Pb" } } }, "$s3s_jM": { "y522f$M": { "_z$_": { "y$$al5arg": "Dd", "$u8999": "c33_j1_c$", "V_R__9": "G$$$" }, "W": { "___": "H$z$$g", "d$dxNYc$": "A", "Ikey": "$_" }, "$f": { "_$$6W__Y": "cv2", "_cD_$_$": "_A69_d$R_yW", "$x1_95_d$": "HqY4__$_i" } }, "_w_ref": { "$3N$w_B$": { "_O6t_6hj": "_7_47", "A$": "Cj$_3iTXRy0", "iH": "_bind" }, "e$": { "_z_ir$Tt_uX": "C44$1", "VL__$zCgjn9": "$Zk$_8_5fgz", "_VyZ$m$1Ff": "$____xl" }, "V2": { "_c82_eng": "Cx_", "__": "E$oba$r_", "_ref": "LapplysPr" } }, "k1ot_": { "_": { "a28": "N4_xiV_$_", "_3Nk": "$", "_0": "$N" }, "$r$3": { "C8C8F_": "_$_", "Y_zy$i$_5c": "_1R0_B$$V", "$ref": "e" }, "vtoString": { "$b7valueO": "Y_V967R", "$_59Lfm": "N", "bWy$fP8$0_T": "dde" } } }, "B$0": { "_LN98": { "WF": { "_": "___X", "_T$u": "$0$c", "K$$": "JX" }, "q$_$": { "_4_H3": "Z", "_t": "bE", "_$c___3p": "_zfYC$u$9s" }, "I_": { "xk2$vdC$8": "_1$", "_L_29k": "HcT", "__QGG46$6": "$$kMCF$0" } }, "w": { "$8_ENb$$2Is": { "aop": "_GS$$_6", "W4": "$7_6ISN$9", "$_$": "Slength" }, "_": { "B": "D", "h_7A_$69_24": "C_", "$": "c$UK5_E" }, "$prototype": { "$key": "c1k", "$H$_AD4": "_$QeV$Y", "k": "_fp$_$75" } }, "_$T_4": { "_Rm7": { "O_1_$1C3x_V": "$$eh", "_5_a_": "$$$iS$_F", "B3XZ": "xcall" }, "G": { "Z": "sx$C$_R7_", "__$": "$0st", "$__de": "$$" }, "Tlength": { "GZW_7$_": "$Q$2_j$Q", "N$$$": "_Hs$0", "g": "$" } } } }, "$valueOf__": { "_qw$0jca_": { "BO": { "dv$": { "_k": "Ohg", "B_": "$", "_propert": "Vo$_B" }, "P__proto__": { "d$_5": "z$8$", "F$58": "$C", "$7": "t1k_IW2_YEI" }, "$valueOf": { "_ap": "Ez_", "___": "$1p_1", "Dcaller": "_" } }, "_b$1u_$N_$": { "E21$$3Ae_": { "y_$$53$$": "X$___Q", "C_s": "bpro", "$$I_097_$": "__D3" }, "ON_": { "$_I": "_valueO", "_": "Am_", "___G": "_n$$198s$5k" }, "Ej8Yg496_z": { "_": "_efXapply", "$apply": "C$Bw", "D_0gumentse": "_$9ring$w3n" } }, "$B1": { "_Q6PI3": { "Yl2lEake": "yD_$bbXWf$_", "X_$AF_1_D": "tf_xL_", "$1": "xStr" }, "Tref": { "$$Ml2$": "z$", "W_": "n7", "Llyp": "_is" }, "$12$34": { "_": "$$C", "BC2": "D$$5_8$B", "$caller": "BZ" } } }, "qe": { "F": { "_7_r$__3": { "$": "$_$", "_toString": "G", "_I$6V0_5": "Y" }, "$V$$9n_$": { "P8G2Z6FT$_": "DA", "Z6_3$": "$8$", "s_2": "QzE9j9Zf9" }, "aref": { "__p_z": "Zc7", "c_0$$G5r": "____", "Ct_L": "cz4tKq_" } }, "_": { "_": { "$J_$__S_$": "$e", "$3_": "$72l_M$$$$", "___": "$F" }, "Yb_": { "Blength": "$$_et", "_qE33f$3": "__U267__$", "_ZM": "$0$975" }, "__": { "_ox$77": "__q$_2$$r", "E": "$1t", "_$$H$_$": "_4argum" } }, "d": { "S": { "B_4": "$$w", "W__a9_mA3vC": "$P$Ff$9$T", "a$$J$": "W_Ub" }, "_$aZm$": { "WPLn": "$0_zZ_8", "D_$": "$", "w_": "q2v" }, "$y_8": { "Dp": "eQ8_", "X": "$", "mi": "SJqKJn1_kG3" } } }, "$$__11j": { "o$7$_B": { "_8": { "gkey": "$$$6_BH5J3B", "D": "_$7O$hf__hf", "f$7$OGt": "ykey" }, "d_z$609": { "__g4X$M": "v", "_$to": "b5149", "CQ_": "i$" }, "C$$$_w": { "b": "_5", "An": "_$g$x7j", "X$p": "I8" } }, "$nam": { "gwR_Lb": { "_$$a_b": "b12reW__", "$apply": "ob", "D$5": "V__" }, "_B$": { "f9Q_P2$_7V$": "_Gpr", "_U$": "i$1$$fN$", "Z": "_3__" }, "_$2b$_p": { "gVuuG": "V", "a": "b", "_$ja_": "_$1j_" } }, "_8$$$_$V": { "Y$m$$5": { "$c$js_3YU": "$0i_kJ0O", "Smn": "W$0_0", "yFV6$W$_S7R": "C$Wz$_J$_" }, "v_": { "EB": "$to", "$AEDonstruc": "PQ_", "$aleStrinte": "$" }, "Xref": { "O8Nry_U$": "_Wa", "_t": "$t", "bsE": "_2_bN" } } } }, "CZm_$": { "x": { "_": { "yB6ykY": { "Bl9": "F9g", "$Src": "fm$", "A__$8t$z": "V$nF$_S" }, "_y2$M_SM_$": { "B_g96__": "D", "Okey": "_", "_6ORK": "DJe_v$$J" }, "$_8vhC_7": { "_": "D2", "___w_qQ": "$M$4_", "_7O$Q": "_8Ej_$Gm_ot" } }, "Z$$_Q_": { "$t": { "_": "yvr", "$Y_2_": "B4", "_N": "_$8$P_" }, "$$Y_": { "_Ve": "_$WC$XV1", "$": "$uc", "__B_BE": "wG$e_f0" }, "_8lD_xj$U$": { "C0__NP3$": "_3_Jn", "T_": "v_", "$$": "_x_yv3" } }, "_1C": { "z2a": { "$argumentsG": "_$V", "HY": "$co", "$$x7O_": "_0$_" }, "_$$t": { "C": "_t24_9$0C", "V$_$rQj_Z$": "yM23A2", "C_h8": "$FU$B_I$" }, "$r___DC$8_0": { "_E": "___", "_2C4$S": "_$cl__2$_1", "$8$h$_KpN5S": "_" } } }, "$": { "_": { "V": { "Ex_b": "bjd4_R7", "W": "zb", "A": "$l" }, "$1Bh": { "a": "$", "Ow1_1K1": "_32x", "W_49a$": "_r" }, "A$s": { "c$_Fac__F": "b$nBiH$_", "x_cO$7E8D$_": "lA__N", "Vkey": "$re" } }, "_h$0W_s": { "Hc": { "a4": "nm1", "_ref": "$call", "B4v_": "d_4_J_$$$0" }, "x0$d0_$5": { "eVg1$TZ_T": "B$bA$$$$$1h", "E9Y7RF59Rl": "_e_", "_Y88": "$length" }, "r$z_q9tvX": { "__B": "xU2H0$8g", "A02k$_": "$ToO$$lV$$b", "_$$$_H_AT_": "e_" } }, "$$T$ve5C6$": { "B_l_": { "$ca": "Am", "Zvapply": "bNe2w$$M60", "$2V$": "p" }, "G_A$7oT_$$": { "_B": "$yvWwEE", "$": "Tref", "E$": "__38_K" }, "_$Pq_Q$BMo": { "uLLd_3A9ZdX": "Z", "Fs_3": "Z$a7x$", "S": "__9i$2_" } } }, "_": { "$y$": { "$2$": { "iJ1$2$b$2O": "$valueOf", "B$x$_b$vE_$": "_0E8", "_mb61": "E7_$luU" }, "_2_0Bj0E": { "Df_5Jw1$BpB": "_6cons", "$$4iw$pto74": "b8$k", "$_DOzL$R_6": "C$z_$y_$1$_" }, "$t": { "VK_62_$$": "Tak_Ca", "Bi8$j$6z": "Ct$$", "k__993LGZ$": "_zybb1$v_Sn" } }, "__jmK_": { "x": { "d": "bm9", "$t_": "_f", "yaj": "x$_2IE_x$_Z" }, "_": { "_$$FnK": "$5_B4", "b": "$5$D", "$3$N__": "W_" }, "__": { "_toStr": "$$", "u6H$6Z": "DAa__$6___", "_zC": "Y_0__6_D1$" } }, "eref": { "_6_s": { "b$5O03$_Y": "_cU6h_", "_Z": "$p", "$": "Z7$__def" }, "_": { "e$8_6$$U8": "u4_", "__p_$$": "O", "o": "_F_$" }, "Y": { "$n$": "Z__d", "c_$_mB": "D", "_4": "$X$$$Q9Z" } } } } }, "$": { "$5_$": { "$$W8$l_$": { "_$": { "$": { "$": "$t$", "Bot": "_LJ", "$v": "v1$8qer" }, "D$1Nf_ga": { "C__E": "_u0_3", "V": "Q_SO_0$$_6", "$0$DB_$8j_": "_3$_$0" }, "a_ax": { "$$7": "$Pl7KHD$v", "_": "zprototype", "p": "$" } }, "$": { "x_6oIP": { "k": "_pe$lnamb", "$bi": "$2_$4", "B_X": "Co" }, "z33_": { "__$$U_0KA": "$6", "K$": "v6M$_8Gt$", "_$9TW": "a_$$" }, "$2": { "zF": "_a", "_I36S": "_$J9A$C$y", "_$$": "C_j_U$SyaX_" } }, "$__GLe": { "__": { "_2": "Z5", "_54$": "bwuo", "fref": "d" }, "o": { "Ze2": "_Dcy_$8C309", "_kup": "__", "_": "W$" }, "mgqa_": { "_": "U", "gprototype": "$nZfj3", "e__": "$__" } } }, "$_$2$WAu": { "N__": { "_0_4_$": { "w$": "_", "I0$__b": "Ng$", "$_8$_2o7": "$aD_$" }, "$bdcall_": { "b": "S__", "$$": "$3", "$4": "V_$" }, "a": { "k71_30v": "hY$_R$", "$a3": "$K_8$om5_$$", "e$7": "X_G0$K$B" } }, "k_x_A": { "Aj_II_2$w": { "xA$efAallrg": "$$c5__ixD5V", "b_": "dotypehasOw", "O__proto__": "Daconstruct" }, "$0": { "d1$F$5X$x": "_czwh_MRQ", "_3c": "b$Wy$ff_$$", "EIX6$o": "$BHb$" }, "$3aik5BItJ": { "C": "$sOw", "H$8gIALEF": "_", "ZU": "_$92q_P$" } }, "_Y": { "q$8_": { "$$_$M$$_d": "$8$$0_$Wx", "Hcall": "_", "$l": "pr6" }, "Lapply": { "$_0$95$J": "XC$3A", "__": "_8", "E": "a5v_1_0$9D" }, "k$$$S$": { "$$V": "___proto__", "d$$$SJK_H": "j39eSt7$F_", "BP8_an_": "_Q_TLAil" } } }, "a_": { "_$82ha2I_": { "CS": { "$$Ya$ca$": "_eq_pu_", "d": "D$z$82$", "w": "VJH75$__$M" }, "_Bstruc": { "xXoV": "E9na", "As90D8ATB7": "B$r", "__nP_5atxq": "Xu$P_aAhw$" }, "c_$k_$j": { "vYekE8$7": "Eapply", "K$0F_": "Z", "z$5$": "_$_" } }, "_": { "_n_": { "O": "$valueOf", "_FdG$$": "eons", "Bba__vP$_2$": "g4_l" }, "_Hh_$pZ$A$": { "$r_y$refN_": "w_$_0_v_$", "E_$$0VO_1": "_H$0$", "Blg$": "__" }, "__C$_Haf4": { "vpro": "_28", "$R92_r$8L": "dp", "$__": "$$" } }, "f3q$5r": { "_uY$31_1": { "$as_": "$", "VC1gAd": "Z", "v$": "J$" }, "_g4$$_": { "kF7": "E_$", "wL4_3Mg2": "$", "e$a$A": "Z8" }, "cp": { "x": "$R_8N", "$B__": "W5_$_Y5_8", "BGb7$": "N3b" } } } }, "$FxZNt41_Z$": { "_$x$Hg_$m_2": { "C_U1$JG_c$_": { "_$0": { "$": "Rz", "Vv_kj": "$c_alis", "_1$U": "$" }, "$vTA$_$P$$7": { "o$HJ_$$$": "bT8_a_D$_", "$$__": "$D_uF0F", "___$Kj": "y$$Z$7Yd$_" }, "y_d$8$$": { "Zbind": "Cnz$C", "Rlength": "w8s", "Z": "$$_f" } }, "L$8_$_85F9$": { "_30": { "$P$_uZ2f_": "_z$_w_x", "S_": "$", "Y_N__q$": "aY" }, "$$9__$": { "_va": "B", "__": "_$_B", "d_l_$8H_6i_": "$b" }, "__proto_": { "Fc": "vref", "a$": "A", "Ok$9_X$BKL_": "__" } }, "$ca": { "$": { "$$_X": "$$$iyz", "y7": "$__vz8B$", "_0_$": "Cf1" }, "Ab": { "_d4NJ_$z_yH": "T____$n03", "$": "$ref", "o0": "M_7_XdOlD" }, "RUO$6_$_d": { "_d3_3_8": "$_l", "$": "w$i9$92hz", "$_": "$" } } }, "$": { "$": { "cj$$b_Z$$_B": { "$": "_Lp", "c": "Z$_4_n", "a_": "xA$1N$wL$Y" }, "_Qs__n": { "_": "A_", "w3t60J$b_": "_name", "_cdg": "$9" }, "A$_$_$C69f_": { "x": "D", "Aw": "$n", "eEa": "F" } }, "C_": { "a6abin": { "Ykey": "V", "$_o_$01$": "J9", "$e": "blength" }, "$__4__z8K": { "_": "D$", "$d": "$$", "v_t": "$__p" }, "R_kV$$$fC7": { "_2$R$4l_Xj": "AqQ_$Ovu", "_apply": "A$", "y$hYEU___9_": "$_" } }, "$_": { "$apply": { "A_t$_": "_Q_RDV", "Wv": "$", "$_dV": "$$$_$" }, "z": { "I": "$O", "$0M_$": "lF", "_apply": "ZX$v8v" }, "$8": { "Z$": "$__l", "Y$length$oc": "_", "c$": "e_m3" } } }, "c9_$Q_": { "$$1nJR$_Y_": { "_ame": { "$3$": "J_M$$", "A6$a": "__69P", "xLB_$6Er3_y": "W_u$_" }, "$$_Z$e": { "z": "A_", "_Fx2D7_H": "$$R$$iO_", "$$7E": "XM6w$" }, "_yg_vEf_vE": { "$E": "uP7siBz", "Ts$Qgw_3c": "qdw_p", "tc": "_C_S_ZpSett" } }, "E": { "$w$$": { "W": "EL$f__$", "_": "$x2B", "$Bie_$_": "__3" }, "_": { "xxaV$Av9$N": "e$2ZsY", "_binhasOwnP": "vE_0nN$$", "$$$": "$name" }, "x$58": { "_M_5$": "c", "a$": "Xyj$3$4_", "em$4$w$v": "$ro__lookup" } }, "$__define1": { "v6L_$C2$$": { "_$C3zt__Kmc": "Vwpr", "Y$$Q$3$_": "$I", "a$$$$7": "r$" }, "_V": { "_": "$1", "b": "E$I", "wbind": "_h" }, "h__Q": { "Cx": "$n$2$$ho_s", "_$0C": "P$$0", "_prototypev": "D__ih00$x_0" } } } }, "$t": { "$$e$h_$gvy_": { "a$ee6_$": { "Ad2": { "$a_": "e_", "$c53NI4_": "J", "x$PtZ$": "$W_55L1$AB9" }, "_$$PR__B5": { "_6t": "D$_S_$$", "_23y78_$_k_": "UW$x", "VQ8": "x" }, "_9$8EX$2$8Q": { "$refco": "$__Y", "_$1n$9_": "B51$zMsFA$", "c$$": "$call" } }, "_": { "kq": { "ek": "_IF_", "K____$p1": "$H_9", "__$_a$$": "$l$_4$69" }, "x": { "x$4Z_x$5s": "$zS_0o", "v$": "Onamrto_c", "$k": "_6$1" }, "d_1M__$9l": { "A__P__$": "_1Ed", "_$B$": "u$cN_", "_B$$O__o": "$" } }, "S_$": { "$_y7_9": { "$ES": "E$0$to", "$$v$_": "_ref", "$0j0I0X": "Bd" }, "$zV_$__Ix6": { "_": "_$", "_n$": "X6$__$2A$", "dyS4$$$": "__" }, "_$_": { "ypropertyIs": "_$_H_1S", "by": "$p", "i6_b2id$": "jRu$74" } } }, "_b$q_Q": { "$$v1": { "$2$": { "__I": "_$e3Q", "r7d$$3$$5_$": "wB", "bFR7_$6$": "Z_R_gAC$l50" }, "_0$_41N_y_7": { "_$nm8e_": "_78$", "OW8$0Xu_x": "_u5_p_", "Lz_9$_Xy$8W": "e_" }, "QT2$_": { "jname": "_7", "J$u5": "_a___8Ol", "_sl_$1$8": "nke" } }, "SI9$F$V_$": { "$": { "D$6a_s$P3": "$", "__zDVU$K_$": "$e_7_$$_8D$", "$$iL2": "G$c$k" }, "__2": { "$u": "F$x6_$$2r", "_$0l": "_valueOf", "iO": "_I2" }, "_": { "Wum": "$$hi5_4", "u__cS$b9q_8": "_$gh_6h$7", "_L$xe02$": "$bX$_" } }, "$8$uZBY": { "_7$": { "cUu": "p3c$", "_cYWus_$": "$$$eJ_$", "etrBbinrefm": "dK_fb" }, "__lt": { "cDA__ubb_": "_KJ8", "PX": "_$3B_$i5", "__$i26o$2g_": "oJ_S$67" }, "A$6$L": { "a_gvhm9n": "KtoString", "donst": "jkey", "EEb": "T$9$" } } }, "g_x": { "_Zh$": { "_key": { "HB$N4_$": "$_xQ_$v7_2", "d_u1t09e$": "eL__Z", "$_4$": "L" }, "_Qv__B048": { "$0_Uo_9argu": "a$86", "DyB": "_znsCB", "$2_$C8$_1": "cD1d2$$V8D" }, "$z": { "_u$U$4": "z", "d___$rLjW4": "$__proto__", "E7J$B3$": "$9laZ__pL" } }, "__$ano1$": { "_": { "H_$y": "$$$I", "Jle": "_$$O$s", "VA": "Qm" }, "$6$": { "Z$_": "M_5cs5$1", "D$442": "bk9dr_IJ3$_", "y8Cprototyp": "B__kxi$$mW" }, "$0_9": { "B8hb": "$", "$5": "_1_3k$$", "K83nZ_07$X": "_" } }, "_$q_O": { "O_$G": { "_$_$$C$$_e": "___$TVK_Y_d", "z$_": "_1$d7_", "Z": "d_V" }, "_M_": { "c$$E3WQ5_9": "_$4Il__f9s", "$174$6w": "_72_K02$", "ba": "Ck" }, "q$R3": { "$$$e": "_", "d_b_": "$", "_$7od": "j_" } } } } } } }, "Iapply": { "_2": { "b$6$G_z_k_": { "x": { "c8l$G3L__d": { "$$eaW_1$_": { "$$e_B__$_w$": { "y$98Bc_": "l", "_$h$_Ooj93": "_", "_$$V4QT_s$": "$_H_WTQ$_O1" }, "$prototype": { "__c_1": "bcaller", "C6$_": "$$", "$$_wE": "_8$Z_$__7" }, "_M4_DU$$DX": { "D$nam6": "akey", "$key": "L2__dEb$R", "Y": "_d$sP__3_" } }, "$tq5_Tcw_Fv": { "_valueOf": { "Wref": "$$8reVisP", "W_145X6_D$": "$6c$", "Br$12$5r": "$5nFI$w3" }, "db_": { "$M": "_$", "d": "xD", "$name": "beS__" }, "Dkey": { "M2Ei": "$$E$$3_$4", "ye": "$w_v4$ax", "$7_6$_K_T": "$s" } }, "$": { "$6sF": { "_j$": "M", "_$": "__d1OR8", "B$s$": "v$y" }, "b": { "$": "$e", "utoString": "dname", "_$": "y$K8" }, "_6$h$h6I2": { "_dVR": "_apply", "XtoString": "W5$_", "g": "V_m$i_3" } } }, "KW_": { "_$7_P": { "__0": { "xt": "zaJr__W$", "$_5_": "___", "D": "s" }, "_$A": { "E$": "$_n1fin$oto", "bcz": "$t_QPb_Qs", "Zu_g_Y5": "$X$$g_7_J7" }, "CB$$9w": { "$Lf$c__": "bapply", "$q8": "X", "yA_1E_7S9": "$BI" } }, "W": { "$$WnIr5o": { "b_$": "__B_FM", "mtd": "JT_uvuW__", "$1e": "c$" }, "_": { "_2$i": "$0$$_2_", "_pp": "_c0_", "Ccaller": "_in7pe8llX" }, "ekey": { "$Q__$M_": "n_r__$_a2Yb", "$ref": "_$8s7_5__2$", "_": "z39A$_f3" } }, "YO2H$$": { "$9MHFO$q__$": { "C7G_E": "$_", "D_": "w", "_$": "$$ca" }, "d$$": { "Yca": "y9H_$", "d": "$f_$$$N2i", "$_4": "_$s_2_$$_" }, "g2$": { "XV$$pk$$2$_": "$Lallfine", "X": "ZH2$", "_D": "$apply" } } }, "_$v$S_TZ$_i": { "$ak": { "xe2": { "a___B_$": "_0f__", "$D39D_$$D": "_6$", "_t": "e_" }, "aref": { "_is_": "$$$_fO_2", "YLeE_$": "Wh__7D32", "ZvalueOf": "c_r___1n_" }, "$": { "$": "a_V$7$G9", "_V_$": "DMrO$$_jkg_", "ckey": "P_ML7$$X" } }, "sWLl$": { "__a2w": { "V_4Z7$A$": "a$__", "$6a_$_$_bJ": "$wI__nl_$", "Mcall": "I" }, "_valueOf": { "$a": "$3$_0lpQ$", "O_24yh5s2": "_", "n07$": "$$7nj_Y" }, "t": { "$$": "B_F_eS$", "Y67E$$_Q_": "$ppr", "jV1HA": "_" } }, "TcA_": { "$__": { "W_7$$$": "c3o", "___wKNj___M": "_pr", "$hl": "$_3$" }, "vX69_8": { "m1lP8$": "_", "$n$$9": "$$w$$dn", "B_w_": "vw_$" }, "vV$": { "__v$$a$$JR": "_h8C_0$9_", "n7vx": "x0C$_k$h0", "G3ar": "B" } } } }, "$_0": { "_toString": { "dEargu": { "xF_Eo": { "RAw": "h$L", "$$28_$$S_3_": "$D$fK_1J", "Ea$$F": "P7o_B$kcq" }, "$C": { "$val": "$FXr", "_$M$u0v": "$", "W": "_toString" }, "_v5$$": { "__": "$", "_t": "yy9$f", "ZnX": "_toString" } }, "ba$$X___Sah": { "__gZ$": { "__c": "E", "$021fo": "y$wjw", "DotL": "deqc$k3" }, "$ref": { "A_p1L$x": "f16v$$", "_": "$$$$W6GQ$", "E__": "_F5_$$0Xul" }, "_oto": { "$$$hmK": "y_Hml", "$$f$t_": "_$__$", "EYs": "VX7408" } }, "__Om$_335_": { "Y_k": { "BD_": "V_06__", "A2$$1U": "Fo8t_m", "B$$": "CN9x5$45_s" }, "_": { "V60": "Tprototype", "$6_2$4": "$re", "pX6": "_7$b2__8I" }, "_R$W2_7O_A3": { "_2__lookup": "WE", "$$_$R78$_D": "$5b2", "L_2M_": "LJ$gD$E" } } }, "y": { "Z__$Ch$5": { "e48d$_15__3": { "$0e": "$", "$M$_d_$__V$": "dC_w", "Iucprop": "_s" }, "EB8_1$$e$5$": { "$t$Tc$Hy_$": "_$$r_$49__w", "_warHJ": "$$$", "W_B$7W": "__PJx8h_" }, "_vpl_q$1": { "_length": "_$9_2__9_2", "l$CT__h4b_X": "$H__E4", "$_bo_R": "Acalll" } }, "emr8n0_6hR": { "$i": { "m7_": "$ref", "B": "$", "e1mQ$Z5d": "nG5c" }, "S": { "_applytot": "XX", "RBGl_$b3": "A", "D_$": "y$2A__$" }, "i_$6d$": { "e_$$rnG$": "am", "_F$_4$3W_$": "_78", "_e7W5$$$d": "qVX" } }, "e__m_": { "_F": { "Z0": "Y2apply_", "$": "_call", "B$t_T$T_x": "wt$" }, "A56_ka9$": { "$8": "b_vZ", "_$E$_$": "RqgWA_", "$$7$3": "FU$_jcN_W" }, "ak": { "_o$$yQ$8": "w_5__$z_b", "tcaller": "$nY3_", "aV__5_": "X_" } } }, "_": { "$K": { "GFC_2": { "$qHB_k$$$$$": "$O___$$7_$", "B$M_": "d$_6P$E6", "_$d": "$E0aaapply" }, "_call": { "A8": "$", "$wCKH$SP$3_": "$f_", "i2": "k_" }, "$Lb": { "L_$$": "$G_T$6$", "eXk0C$7$j$": "bv7", "ei_o_$M_Z$": "_84A_B_$g" } }, "$$$Y_z9_$": { "$": { "$ut": "mvalueOf", "L__$vE_ht6": "D2$$$c$_z4$", "C_Lo": "d" }, "g__": { "K$_P3_u_$": "Kzrerefkey_", "C$_s5G": "BFCB", "b$1$8U": "WN0" }, "B6": { "A_": "$1OWj", "$oe5": "$6l8M", "C": "F" } }, "_$d$": { "_": { "$g": "G_6_4", "dQ_": "_06g$_R", "Lnm$9r_": "b" }, "y$$x9k$$9": { "$$": "_", "___$18_$": "$length", "___defin": "_vke" }, "X": { "x": "Ek_$__yr5", "$": "__0_", "o": "_DZf" } } } }, "e7$T": { "_cMT$Jq3": { "$__k_P3441": { "$r4_av_$HD": { "_": "$2889$_T_5", "a5uK2_$": "I$E", "W": "c$" }, "D_6_S_T$$": { "$$Iy$": "b8", "B__proto__": "E$_3U", "C42L_$k": "X$_sr3n" }, "$": { "V$4$_vs_d$z": "wprototype", "$_$$m42_jA4": "epU6z5Y", "Ero": "aF$3_9Xa__" } }, "$": { "$k0": { "bN": "yref", "W1fj": "$_Qx", "WvRqO__$V": "E" }, "a$4u$u$": { "V$Z_xMm": "XG", "$V_1l3": "_14__$", "_": "Y_$H" }, "Y9N$W": { "a": "$_$4_8V", "$_6k_V$Wu": "$", "Xa": "__v_$" } }, "$E69": { "$": { "$O7$97y_L$": "D$", "_3$a8c0$": "$4_A47G", "$$": "$9_edWc" }, "$_A_oj": { "_f98_": "$", "Y74$_5": "_KY$8", "$o": "K_d9" }, "$toString": { "$p_v2_8": "lmiW", "_$CAAY": "MDo", "D_0$$u$Kw$": "G_m1$" } } }, "a1$": { "a_$b$P": { "_N$g": { "$4k_7s": "$NL95$_u2S", "k_d_x$aJ$": "$T__R5$_$na", "B_$_": "_584$6o$$_" }, "_pro": { "x$k__KGj_9k": "W27_x_X", "o$_c": "KZ_BqoL_32", "_arguments": "$" }, "O": { "Xq": "_bS", "b": "P_B", "$": "a$z" } }, "_": { "_": { "Z__9_Rzd$_": "_Jd", "$2_JT_gx": "$xrefo_jal", "r$px60$": "Dx$SQ$_" }, "$_8q$$_7k_": { "$$": "WYtI", "$ec$": "$lJ", "A318": "_f$" }, "U": { "QV": "c3_", "hr$$y3_og": "$h$$_M$", "$key": "W3lD9" } }, "Hbind$Ccz_t": { "V": { "Bu": "$$_87l1_", "z2q$Y8_$_": "bref", "vst": "_ref" }, "_d$Pb5T8": { "$_q5$C$W3": "_$5_", "el_": "w__lo", "D_d_R6v$a": "D$_8b3WI$" }, "$d_3_$$k4": { "$prototype": "Ame", "O_3__K6d__": "$9", "_bind$": "D$dJu0$$4bZ" } } }, "$4LD38": { "s$H$_RS$q": { "p60U8": { "$": "Dde", "d$0$$": "A", "$$d2": "Vref" }, "$key": { "_av": "_D$Z", "aref": "Vdef", "T23": "$C$__k" }, "_": { "Dkey_ca": "__", "v_$_kP_": "s_2J_1", "P7a$qLl_G": "F$r_j$" } }, "$_$b_22b": { "$xte": { "__uv": "$_", "_715s$": "$apply", "X": "$key" }, "$$_$": { "s$7S4$ebK$6": "_d_$_EAFj", "_": "vD_", "T$": "yisProto" }, "_AW": { "_$I$Z_": "BpsO", "prargum": "V_9_010_", "_B": "$_1__M_31" } }, "$": { "B": { "_2": "c1", "_E": "D", "$_7xz_$LDq": "_a$" }, "$zk_Q": { "H": "Ns$z$R$2e$", "$$9_wWS": "C$Q$$$", "WwEt$": "Wlength" }, "$QpC95_": { "$aco": "_wjA", "_r$": "_l$_$B_AA", "O": "$_S_47_ug1" } } } } }, "_e": { "$85$_egj72$": { "__89Nq4": { "Vb_9A$E5": { "_": { "dM_$FVj$Ay1": "$", "_f2GYlx$_Gr": "_X_", "$bi": "_Ee" }, "zA": { "_8CC5__": "bO5_ON__", "Y$": "xd_48_w", "_$B": "$" }, "$y6V": { "_8Sa": "Z$", "w": "$e", "Mke": "$5$8WuG3g" } }, "W_l": { "q6": { "$4": "$$NAGt_GMO$", "x$": "_3", "$$3O": "_$" }, "b49_d9B": { "D_2$$$5_7": "Gca", "_$_$$43vrZ": "O_j", "dname": "Uto" }, "cI0E6X": { "Y0Q0_97": "v__Hkey_$$", "$$": "$", "$ziC$_Av": "CPCCFb$2P" } }, "$": { "_": { "$l3QvO1_": "$_8_$aXEwKQ", "_Tf_$_": "_famekupGet", "$2$_4_qW$u": "Ck1" }, "_4i_": { "wX1_8v$5": "i$$$y$c$", "w": "_B_P_", "$DE$_8": "_5k3" }, "$p$S_0": { "_9__8": "__$_O_$$F_", "_aP_": "_c$7a", "$0": "$4VK__$" } } }, "H2I": { "$W9": { "E": { "___": "xd_Rc$i", "c_D_$vb": "$_$", "$a": "D$" }, "a$M__i": { "$_M_h_": "_", "w_$D": "_w7yY$RKl$n", "zM_": "d20" }, "v": { "__EY$k_$_": "$7$$vC", "e": "sr$_cJ", "_": "_$4$1Q$6nM" } }, "$$lc$$z": { "v$c": { "n_$A": "_$CG", "E$48$__3$80": "$con", "Z": "e$D" }, "_4h1__$j": { "_3b_6$": "wle", "a_j48S": "k82D6x", "N$_s": "o$H1" }, "$_K$J3M$": { "A": "W_", "$_$_G": "$k_n95", "$V$I": "l$uk_$$$" } }, "xIZC3G": { "y_a3_p": { "eS_$V_8": "z$5", "iwa": "$jiiXrgum_", "jC": "Na8$_" }, "t$3U": { "$_EtIU$3_bP": "z$$0_$cs6w", "B$_9Yx_t1Yb": "W$$$Wf$_F_N", "eA6361A$sdb": "aw" }, "EG$$$": { "$8Ucall_ha": "nB$$B", "$": "_Gx", "__c": "_M" } } }, "_$b8zU$__": { "vU$3w_$": { "$LK4": { "_n": "cuv", "$B_DzDD_": "$_$", "Bk_8$6t": "__" }, "F9$t6": { "Y$": "$$_2Dz$9$$6", "_dy7_$": "ccallpl0", "V": "_" }, "G_$4": { "$": "CV", "v$$1": "___$$XK75_X", "Ae": "_$c$_" } }, "_": { "vX13": { "k$H_$_": "P$c", "X1R": "$ref", "___proto__": "Ekey" }, "F1_": { "___$X_$": "_2Yq", "Clength": "$key", "$__9_4_": "aha5W__" }, "z7_$": { "cmN9t": "y5__", "aarg": "$6M_e9$e_Y", "_B_$$": "$LS" } }, "_60_K2n3Z": { "_": { "E3$7W$0$6C": "$$", "__$$3F$": "ed", "$_": "db5$" }, "Akey": { "$_$3w": "Z", "W": "E6$8__$5", "_0a": "_$23Ww_a" }, "WqaYY1v1$ud": { "$ea": "nJ_w1f", "_9be$8L": "$t", "$": "_d3$$" } } } }, "_1__proto__": { "T": { "X": { "A_$": { "_6$": "$4$$", "__a$$3": "_", "_$$": "e__" }, "$t0w_7": { "S": "$_3_", "_refn$__lo": "e_h", "JwoR_": "$r$rAg9N_5" }, "_7P_4a5": { "_mea": "$", "Blength": "p3", "Aapply": "r$kr$" } }, "$ref": { "k_": { "W$Ju$_A5": "dp__9w", "$$": "_", "$_$$1": "$9__i_7q_" }, "__aU": { "_S$L$U$4": "y7b_", "___": "b_s0", "$BF__4A78wt": "EVoa3$" }, "F$_3$wQbr_": { "d$": "t_6M5$N__B", "dS": "_$_", "Y": "$70$D$_3" } }, "g_": { "b_$_": { "$$dZ": "_XMP", "B": "Q$2_iv_x_p$", "cd0$_$e96$": "e6i9$$a4" }, "$O3t": { "__": "_6", "$g3$X$g_C7_": "_C$D_60", "$": "$$H1iL1_7B" }, "X$VLn9x": { "$JuLs8$_$": "e$_B$1$", "_$$$": "x", "_$_$_29v3": "$$Q1" } } }, "_6": { "$3dX": { "B2$": { "Ka$Ib_z": "Z", "_Kq3e$x_1": "_$", "_": "V" }, "C4$_H4_e": { "$$tRCi": "P", "W_Z3$": "_U_1e__5$$", "h88": "Wa1_" }, "_w__d": { "$9a": "d$e", "_key": "$03y3", "CcBk0_960": "b$rq" } }, "___$_": { "BlI_74$F7D": { "xlength": "_jZ_$X87_$3", "c_$Qmm1IN6": "_$_c_wpcV", "a71$jR1$": "$8_0bJ3" }, "_": { "$GB6_111": "_", "K_": "__l8__", "dB9_X$$9m": "_qs_5" }, "_e5_w8nQ_$_": { "TH9$": "__bhk_7b", "X$k_a": "_5$29a$Hb", "$c": "_" } }, "Ei": { "c8ibw_": { "vJP_55": "$bind$", "YH6bind__lo": "d__d", "$$_6v5_$": "aq$$" }, "$$GN0x": { "p__": "d", "w$MP": "_", "j": "_" }, "FE$$_wW2": { "$_$$": "epEYG1_m", "Za": "Dcaller", "$8": "gH" } } }, "E6Ccc": { "$_d$$w$_$": { "UtoString": { "D37b_": "$9$t_$3$6", "a$d$": "xhasOw", "k$__4l$": "$length" }, "eT$": { "_valueOf": "xx$Kk", "_call": "$e", "_r$_Z": "L$$_$7$_" }, "r4_e$_x$": { "_CBd": "C1LcH78", "ca": "$$y_$Gj_", "_": "Ez_2B9f" } }, "$6W_sI$3$": { "w9": { "x": "GY", "$__2V7": "$C883_$4", "$$8$5180": "_key" }, "_RF_r_v_qBb": { "E4F8$X$$9_": "x__0iD08", "b4_2o$_iF": "$d", "Q": "w" }, "_cal": { "$Cw": "X3W$c0_$$20", "$zo0n$_s7": "e_a_", "_arguments_": "_" } }, "$__defi": { "k_X$K_2Zb$": { "da1__$z9$_h": "b", "V3_$": "bN9I4$2__$e", "d43": "dname" }, "$$C": { "$key": "$$$$$55V0", "$32$M9N0": "YY2", "$9_rPB": "_" }, "$ref": { "__$__D_7e5": "$QH$h", "_7o": "X2$$toSt", "$_x": "e" } } } }, "$8_SdtC_$M": { "$u9": { "rj": { "_r": { "$_$$9OP": "nleng", "_": "_", "CLl2Ai": "_$_" }, "d813E_P": { "JZwQ6": "aname", "$_len": "XO$", "Botypedz": "jQ_$6$$6O19" }, "_$_E": { "$6_": "_ro", "m_$": "B_Yh", "_": "zq9__" } }, "D5X": { "n$_c": { "ZCC_": "_AEov_w5", "Y$2h$": "_R8$H_", "o$$$$_w_e$": "N" }, "b__p": { "$b9_Fk1m_": "_$1$jLF1$", "H_M": "_f__$QvP", "Aq7$pz$z": "x" }, "k": { "__$8___0": "$2$", "$lue": "$$19_$", "$1z$e": "$qSN$_DT" } }, "z7Va86U35b": { "S": { "b_f_D__s8$": "$$_2z", "$_5EQ$dM2r": "_$_", "w_W03__v": "$z8" }, "d6PnCL86FTK": { "B_9_": "L$$$__", "UtoString": "____B", "$": "Bkey" }, "W_$__$$": { "_5C_1$_$$": "___", "htoString": "_", "$$p0$$xo": "A0_WBlYZA" } } }, "zA2c": { "E$t": { "_B_define": { "$_E": "L$$gIk1_r", "$bin3__look": "$caller", "d_$$$HZP": "A_" }, "_N9_h": { "$Ek_pN5_2H": "$$$y$_K2", "V": "GN", "$$BC": "$prot" }, "_88_": { "c_": "x2__$$r$139", "_": "_X", "qe_$T1qJ$": "$$" } }, "$$_$A": { "_6DvU$1": { "_B": "x", "_AD1": "Xhf_45__q", "mVo__0E1$2": "_b" }, "Ui": { "f_": "$_Uvm$V$$", "$$": "_Bi", "d": "_$H$n38" }, "$__proto__": { "$_n$_0HB": "$t6", "V$J8di$": "_eEto", "_ro": "Ato" } }, "$": { "__1gume": { "_E$$$F": "$$_Z$", "_K__": "anl_$G", "$B$2": "_X$p" }, "$8_": { "__call9B1w": "___$QI_", "_EI": "$2$tj_W", "Y": "C89p" }, "VDp$$": { "_B_7PK_$_Pp": "Zrv", "B": "c", "e": "e" } } }, "_": { "B0": { "__$___7_$$": { "wb_q_D$0am": "ZGD$", "AL_": "$z__1FI$y", "s": "r" }, "G__": { "_pro": "$2", "Bt": "Br", "C_C81L": "E__$T_6$0$$" }, "FOED$n9Dhv": { "ZEt4": "h3d", "$": "_Xl2$83$_", "$$6D$_7": "$b" } }, "_ID_K$$": { "_": { "z6s": "$E", "_to": "$l_2$$Q7$1", "B": "$_" }, "_$o5bh": { "__0to": "$cp", "CT__Zz": "$_$h_h", "_ref$8mekto": "___u_" }, "Q_c_52$": { "Bi__$q_1CL": "_", "_$7_": "$sOw", "__ok": "$c8___$" } }, "X_": { "_3": { "$eN_Xw": "r8to", "_k": "zu", "Z__3ka": "$" }, "Q_x$j_2K20": { "$DY": "_8$N", "$$$6G_c__6$": "_", "YI_6_$": "__$9$" }, "K": { "m2$": "X_$3x_$_Pn", "a0$V": "_s", "_K": "$$5_$H_1$3" } } } } }, "$J8$_68q$zX": { "$ar": { "$H": { "LV_l_19$$": { "$$$": { "$B7": "$$", "x_V348": "Y_$UYn8Q2O", "Akey": "z_C6" }, "U_4$$1": { "B58o3_3Q_": "Cv_", "$v": "$$nyu_", "_": "$ZG2$y9" }, "$JF9v": { "$He_3m": "__0$M5f$$_", "Dcall": "ya_", "gz3n": "DgCbz$_7Y$_" } }, "_9t_0p3C": { "_": { "OR_60$20mX": "$$", "d11": "D$$L$$2a$7D", "Cca": "$0" }, "Ot_9_x_1$9p": { "_ref": "_$22", "$": "CyS_$$", "eaB1_": "$_iC3" }, "__N3TmA9_$": { "vbinWe": "_F_3", "$j9_hasOwnP": "aUa", "dC_$$$$_$": "$" } }, "AEg": { "___3u7$bj": { "__$": "$_9", "iiYK$$_$": "e$z_$_", "$PmM": "A" }, "mx9": { "_toString": "$", "b": "$_Jdy$VG6i", "a": "S" }, "_Kw4": { "_h$": "_7__$", "$_": "C", "_$1": "R" } } }, "$_Z_R_": { "q_v3_$hv$": { "d_lB708$_s": { "$r": "d$_a4m", "otoString": "yu", "EsJR$_": "$Uk" }, "L_": { "_3_lfineGel": "$7o5794$", "B": "x$I_$_$_v", "Xc$a$Xv3Y$W": "_$77" }, "T99Ipu$$__": { "P$": "__", "$$4_$F__x": "__", "Z$_$_6g_": "be$" } }, "_isProto": { "_8": { "u5__$$j$L_": "$61826I_", "mPgWK$__c": "$ref", "C$O_Xf$f9_": "g5" }, "_st": { "_$58fw$__": "c_k_", "_7bd_$$$_WX": "_a", "$$$1$$$$N19": "_" }, "p__a": { "$rV__y$": "BBQ", "Fnd": "$6", "ad8": "AK8_$K_" } }, "napp": { "lQROx$eVBxF": { "$": "b", "w": "z_$4", "_F8": "___" }, "Vv$__uw$$i": { "_tgs_qj_X": "$", "Aapply": "u__", "Atk": "$$I" }, "G6$kD": { "c": "KoM_", "$ax_$$Dvga": "_$_", "my7": "$D_ref7" } } }, "ZUte": { "___proto__": { "$key": { "_1_i$": "_3Y$$$c$4_", "e": "$4aY9_$d9T_", "cz0": "r$2vU__9" }, "_NXprototy": { "y_": "au_$$J3_W", "c": "Z", "v2ar": "a" }, "Z0V__R": { "d_a52$1_7_$": "DL$W", "Y7_$": "$EPA_1", "$": "c$8$" } }, "Ipr": { "_key": { "$A_": "RBMC6_Y$$_2", "Y$__6_": "Gc$$1AE$$d", "H": "e" }, "_d7$b__CE": { "B": "$_R4$9_J$9_", "AvoH58": "wX_$YX", "_": "$_4$$cE8$3$" }, "X": { "_ake": "_0", "XasZ_$": "b_9ll", "v": "X_$xgj$$" } }, "er": { "xX_prot4Ete": { "a_$_N$$ZtOb": "w$", "E": "Vy", "_X6__K_k": "___icu72_" }, "b$_R_$2h": { "kV_5$__kZ": "J", "$": "l2sP", "_6_$$I__XF": "P" }, "$x_8WDd": { "U7": "Wl$5_Y$P", "Wp6J___xK": "G$F7", "_A$4y$_N": "$valueOf" } } } }, "$Ee$": { "qE_4Z_$": { "u$9Yca": { "De": { "Yccal": "_toString", "X613_Dx__$5": "z0hE3U", "$": "$bKv$_" }, "T": { "$7EC9f": "RK9", "$3___MP": "y$4", "eX$H1__$$4_": "c1_33A" }, "Yv": { "$$Z$$": "cH$$$u$$", "$r": "$C0", "$_0__M_": "QwC_0zOuYe" } }, "Da": { "be": { "y$": "_trin8", "mXnamea": "_", "Ef_$R_$X": "B$25_Vf" }, "yref": { "Z$_$4ChP3": "_z9T_wBT", "$$6c_Wk": "M", "$": "$" }, "$_D2": { "___53U": "$l", "C$___1zM": "_4", "$": "_e20" } }, "W": { "$$9YZn$adB": { "Ke1$_b3": "a_c", "d_DSX_$W": "_bL4$$", "b_R": "$on" }, "_Q$47$$$OMc": { "E$_": "jZ$RwC$0", "d": "c", "B$": "$c$3$_" }, "x": { "_toString": "p_", "xoXH$o": "_9w0_xcv", "_": "ekey$" } } }, "$": { "_B": { "_e7": { "$B$_2O1SB_": "$", "__$_$_B41_": "nkey", "$_Yentfin": "_7" }, "$87_$__wnP": { "vbind": "_K", "svalueOf": "_2_4", "$3c": "_6" }, "$me": { "WAU$C_$8C9$": "__", "$Y89": "n0caller", "Pb": "__yiG_W_$" } }, "ChtoStri": { "fref": { "l_AvpT": "$cal", "$W_vnb$9": "zI$$I", "$9$Z": "$6$2$_G" }, "$bF3x": { "$_": "_z$$G$Z_T_4", "BtoLocaleSt": "$$O$88$c", "QZ": "DeyB_S$$_" }, "Ett": { "w8": "_$", "___": "__p", "c_$M9_LY": "_1b$D4_l4v$" } }, "CM": { "r0E_$ivN": { "_": "$$z1e$____", "b6": "_", "a6$I": "$$" }, "e_6G$$T": { "___p": "$H$Y_HE", "d_$": "L7d", "b_37$": "$APPS$_8" }, "nr": { "y_31R_1$_": "_$$_2X$b$", "_2__d": "_6_0_F", "m7_x": "_call" } } }, "Vs$$_2b_4wF": { "$$8b59OAY$": { "$$$": { "$apply": "y$_FFu_$ih_", "Bv_$$___$h0": "iWqj33", "$cal": "a2n_$_Ywcc_" }, "YS$8_1z34": { "b_": "_$52", "$toLo": "$RW$0$$K", "_": "_$1SD2x7_" }, "z$bind7__d": { "$_P$d": "K$alDkeXefp", "H": "_$m$$$0nn", "c___": "_ref" } }, "g_fH48$$kcl": { "WY1_A__": { "$okupGetter": "t$_X_09fu$", "a$qc$$V_": "Ytq", "o_D56p$ef6_": "$" }, "Dk8$8": { "_0BAD__32_": "yCaar", "s": "Lkey", "d$_v_$D": "_uRUp" }, "$eref$$VC1_": { "ei$5$6R_e$": "ce9", "Vref": "Y$U$", "C__": "$3$9e$___" } }, "$M$$__$C": { "_5fu": { "$22a": "yR$pCR", "Gz_A_N__0": "$bi", "_6_": "BdO" }, "__Ru$": { "__g__$_XD$$": "_1_M85B$", "_": "_Re", "bbr$": "O$i$C4a_w" }, "X": { "BHi23S9Bea5": "$$$_$R___h", "ppr": "$", "e_j": "$0_5L0uJ" } } } }, "M$$": { "_apply": { "_6__$__D": { "$$1_5t": { "__0T46A": "D5", "Q$$8Og3Xat": "bref", "A_co": "d$_D$_" }, "$_c": { "O9tr": "aTjatP", "uT_X___n$$": "c__defin", "$DTal": "$Q6$__24$_Y" }, "_qqe7Y$_$": { "_3": "W_ku", "e": "_NSi0aol", "__": "$$f$5" } }, "$$$g_4": { "cF$__": { "b$$wNtu2_8": "_0_0_$$i0$Y", "_$BgPiq$$": "_$", "___$___$": "OBrA9" }, "$hx$$$__": { "_": "$$E", "_33ee$$5XH$": "iECqDK$_", "cG34_": "i" }, "e3a1LG73": { "ZookupGette": "b_WzS2Hh", "W_nameIar": "i__x", "GtoString": "U32" } }, "U": { "_$0y$$S_": { "i$_$J": "Pp", "x4$$": "_prototyp", "_": "$F" }, "_key": { "vDDlengt": "_4ysL7ch_j", "R$$_bindrin": "Zprototypi1", "fx3": "$" }, "$zAdF_ACvY": { "_": "_toString", "$_": "$zu4$Z0H$H", "_5R14JJ0n_": "Cg" } } }, "ao": { "uj2rJ9": { "_$Y70_Cy": { "$6x$_3ya": "$r", "cpr": "d_r0_Y7", "d_$__0$_I1c": "A_$Z_$$6_m6" }, "qA9_$": { "_7bE": "$50$$", "Ee__": "V$", "_WGZlB": "_apply" }, "$___13_4_$": { "_$_": "$_$$5", "e9C_qo9_f6": "$Z", "El7_": "_toString" } }, "_$X$UK_": { "b_V_a": { "SDl9___v7z": "x", "i": "S_$zC$_2", "a$$": "$" }, "C__fj4$Dc": { "M$___X$_C": "_$Yh_d_r2X_", "$YJ_Z_": "Ped__$", "B": "vgt" }, "$T_$__0_": { "$1G4_": "jjE_$a", "H_": "Ztter", "_$D_": "z$A" } }, "I53P__E": { "_r_C": { "Iiz": "_4q$5Y$", "v": "VV_6_n7$_5v", "atoString": "YtoString" }, "$$Q_": { "_call": "j$_98_5", "_D_T": "_k1_0", "m": "_Q$_WI_" }, "e$g_X$H": { "_": "$key", "Ve": "wrnB_1cH", "_7NHph3riK6": "__US58$sm_" } } }, "$3": { "wu$$$6$": { "n3e": { "Dzc7$__Q_c_": "t1", "CTd": "s_u", "b_WhKXYL": "e$6_bo8_" }, "v_": { "$8KB_I$_": "Z3", "Wto_": "_1gq8_P___F", "ve2uC_a": "dEc" }, "X__": { "S": "$", "$": "Zlength", "_j$ecal": "_" } }, "$a269_l$$$R": { "$4$$NnI3A_$": { "I$JP$$9V_D_": "BeHB$jBI_", "_key": "_$aT8_$_1", "V$": "HMv__WIUo_3" }, "j$5": { "$": "r$_I$3_9", "_w5f$L1C$6": "Q", "C": "$valueOf" }, "oons": { "_U7": "Y___Zj83_3", "_J": "$__$", "f_b_$$$$$u": "b9s_" } }, "$key": { "Al4$$Ro": { "d__P_$2": "Ew8_S$73_", "$": "ana$e", "$Q": "$y_N" }, "Yname": { "rconstr": "$1h$q", "_F": "_RX___E", "$b1$2$_": "_E1_z38BV4" }, "eZ_": { "X_75$_": "y", "_0i9F_8T": "$valueOf", "wi$$s": "$80$$43__" } } } } } }, "$hasOwn": { "A": { "_cPC": { "_02j_s": { "Ae": { "A_3$fioN0": { "_": "yW", "T_t0_": "f1$I8OhB_Y$", "$HY_Emo$CN": "pVx$n$5" }, "yJ6J__o$_6": { "F23e71f497": "GE1$i_$", "MV_9d$v93$_": "_b8__61", "A$n": "dO_$62I4$_" }, "$value": { "aref": "$E1H_3_O$", "Ei": "_$__1", "L$_": "D1$_" } }, "_$to": { "___proto__": { "__": "E_O", "$$M": "$y$", "$$w__9_6Z": "$_v_9_K8g_E" }, "ZC_": { "$_": "A$7_u09$$u_", "cf$": "_ub", "A2_5$$N_": "_ref" }, "W$p$_$tS": { "Y$u5c_": "_2u", "_y$$1$EX$a": "ay", "E_d": "A8W9dQNf__$" } }, "_$_": { "PNu$$N1": { "b8__bgMt": "_", "_30QS5s59OH": "Nz_", "X$m$$O_$u": "$p" }, "_": { "$rv$_w": "_0K$5", "E$91J8$": "_0V_X", "Lo_NS": "_" }, "$M85N_$$PD": { "_6_": "$F", "_dP1Ihc$GA$": "$dU$_s9l_Eg", "X": "_a$$" } } }, "N3_$hJ": { "_pl": { "$__": { "h_7M$_P_": "_key", "A": "biC", "$": "y__V" }, "$": { "cf2X": "$_71M", "h": "_q", "c": "K_g" }, "H0Rp1$U$$Q": { "bza": "$w", "c": "_c2$$$P7_MU", "uke": "Es_6_H1_" } }, "Lref": { "_0__8$5$_1": { "_$d1vpA": "Xgr", "EvalueOf": "A_$o_2$", "c$RJ6": "_$z$$7X" }, "_": { "_$ru0H": "$", "_A_": "__rb5j_", "vp": "dname" }, "Bb_0f0DM$_": { "__": "__W_DT$g", "$": "drocalonst", "___l": "q$eb8AA7a_" } }, "$$lIQx5u$": { "$Vo_m": { "_s_$$K0i_": "v9D", "zy_Ed$": "_to", "_9_70y$C6p_": "Y" }, "aisPro": { "v$constr": "c", "___": "I$", "c3P2applyeA": "$" }, "$f": { "Acaller": "FQ_", "_Y_2Qd27_b": "_Xo", "$Z": "bd__69_$$$" } } }, "_CY": { "W5b": { "$$$": { "m$$": "uv$0", "cM$$v": "Ze", "$32Y": "b_" }, "$$P_I_2x8": { "E8$_0$$$6q": "$___x63_w$Z", "__": "B", "$$W$": "rref" }, "_NPi$_g$_2": { "$y$$7f_$$": "$ref", "K": "_$_v_O$", "$RM5_0g_29": "_O" } }, "B$D__g2t$p": { "Ca": { "w_____E1": "_1", "$__defineGe": "$uu$6_7$", "___": "$w4Q$u_" }, "$5S": { "d6Tc8oy_0$n": "$$", "_4$": "b3ef", "wkey": "$_Ql9Z$" }, "_i8_vn_$r": { "K6": "J9_0q4cy", "V": "E96", "$$H9$Cc_$X": "_" } }, "l": { "_$yQyj3Y4": { "e": "e0Y1", "d$1$_": "_a_3_", "$I_C_$__$": "$th_fa$na" }, "Q": { "__0__l_u$Nh": "$E", "b": "lo", "_key": "$" }, "x$7": { "$p": "$$_$", "_4Bitn8W17": "Txl", "Y3$b": "r" } } } }, "$Y__lookupG": { "a__l": { "A_a": { "$f": { "hWenototyp": "wEBto", "Hbr": "_jEJ$N_", "m_$$$$7x": "$d_v_" }, "$3": { "$": "$_D", "Ovhg": "$$_", "t6a": "$D" }, "$$$0$r_X_": { "__4Ths8": "f$$$$5", "_r6$__$_5i": "$_0", "___$UT2i_V": "JpS" } }, "A": { "$37h27$X": { "z3": "$JagY8$D_$", "$": "_F", "b": "____h_$B" }, "Uref": { "$$f_": "$C$ri", "_K_$": "_", "A": "$h" }, "x": { "_IQq$z": "$", "_$B3": "_", "c_": "iy$" } }, "$Z6_X_2d": { "_8gtb61Q": { "c$": "$$_$I", "D6": "$4c$B54_4x", "$o_S_$_": "$__QJOon_A" }, "w8___B": { "_Jf_N$D5": "$g7$wS", "j": "k2y$uI_PtY", "$EU_$A9_$": "ZsV$q_l$oc_" }, "Eb954I$$$": { "$A9_3C": "e0x", "$AV4": "k$9", "$": "CMtWd_" } } }, "$dM": { "WC_xV": { "$ind": { "_G$jp_I": "__vtD$1$", "$7": "__", "_$$7O": "$VaYb_V" }, "$X$9": { "_0$$$nI": "c_72d1z$_y$", "g_pro": "$d$hg", "Q7lo": "$$dw" }, "b_$2$z$_dJ_": { "_E3_ag": "n7D", "__b": "xki$", "M$_": "_$$" } }, "$D": { "_": { "nC": "Y", "_me": "D$", "W_S": "z_u1z6_1$2" }, "Ve": { "$_": "_5_$y", "I$d9$i$7": "$30", "$bi": "__" }, "$": { "a_": "An$4", "b_": "___", "_": "_Gs$45_" } }, "b": { "Ps_": { "wY$_": "K_MQy8$", "Bg": "A", "w_C$1_": "__" }, "An47__311$": { "V_5$xi_": "_h", "z$P$_$": "uv7_$I$kPp", "_": "d_3_$" }, "___proto__": { "Y$": "A_", "d1$E": "s_na", "$x$_B9$L_$": "V_$U" } } }, "_ref": { "x067$": { "z$2_j": { "dK$$mh9_S_O": "__z_$h", "$$": "m_i4X$", "__o": "_$_9" }, "C$p8f_": { "$Y9$": "i7in", "I": "$key", "C": "_as" }, "dv": { "Y8Qg$B8y": "_$7_", "$UiF$": "e0Wv", "_rS": "Q" } }, "_FcaK9_9Tj": { "$2a": { "Wrap": "s___", "$b6_a$$$s$4": "$", "_8g": "_E$$" }, "_I_S9": { "_pl": "gM_", "av": "$key", "_9b6": "Eameca" }, "_C6D": { "W4a": "RUhQ", "d$_$SS_11": "ia", "$apply": "$3_y71" } }, "zj_o4D$": { "aal12hasOw": { "d": "_4_", "__$": "$1Dk", "_IeC": "___Q" }, "$t": { "$$md$": "g$", "_F_$$TE": "ykeycon", "x$": "bgyl85" }, "eC3": { "aq_E_3$_Ce": "V", "$3e": "$Pr", "o_6qe2_$$": "aFW5U" } } } }, "__4__4$r_d5": { "R": { "e$": { "l$O$08E_8ro": { "$_$_": "_d$Z_cons", "_$$U6$hKQ9": "DC3", "_ha": "_key8_r" }, "p6keap_l": { "_$$$22$_2": "_Y$$$v1K", "WWc": "__argumen", "___$": "h7j_H_IxmT" }, "_": { "B$d$H$u$waE": "$1_", "$iM$D_P": "_3RrtCp", "__x": "lcaller" } }, "_g": { "$g$$": { "W1llehasO": "WE$vE_2$$7$", "__g$_": "$m_P4v_rc3_", "V__R3$": "_" }, "S$mZ111": { "_w4_$_0g": "$c", "slength": "$EtJjfq", "$p9_$k_": "_8$" }, "$kn": { "$WpC_ze_3l6": "Y4__wf$_", "$7C": "_ko$_8D", "$": "hCcXa$$" } }, "$__3D2zC": { "Spr": { "V4g_iO$5_0": "$i", "_s": "_i7", "Qref": "Rh_x8d$Q" }, "F12$N_0__": { "_": "B", "Skey": "_2$1cW$", "__$0$_": "$D" }, "$": { "$tg$U$_f": "_7bR", "V_8PJ6": "$LokeyEbind", "$_$": "e$9_A$" } } }, "A$hQ_Zi": { "YLlNP$": { "_": { "$_W_0_": "l$__1_X9", "Lu_$$": "__", "v": "_$" }, "DbNkSU": { "jIX$$_": "D$_Q", "$_": "$21$DP_", "G": "$_$b2$EX$$_" }, "E0$_1_0": { "T": "BTs_aw$9$7$", "V5j": "$mGV6Vn_V$", "c$5e85Mj4$_": "$__L" } }, "yasOwnPrY9S": { "c___": { "T$_$dl_$2_": "Q_efineGett", "_name": "bcaller", "$3_o$g_A8$_": "___5Q_46$" }, "$_m9_Y0$_": { "w$": "$RC_WU", "V5$240_": "$z_", "C_BP": "$c1" }, "$ref": { "Z___": "xBe", "$et": "a$2__AHCD$$", "vW_B3__eW": "m$OSK801P_$" } }, "Z": { "c$___": { "d__5X": "dcefi$_", "Y__BO$$7$i_": "IU0b7___9X$", "g$X_NW": "dn" }, "$$_1$9_": { "_7___$541": "$B$_", "v_$$": "_$sqC_$ZB_", "B__": "$13iC$Neg" }, "$I$": { "_S": "x_$$YeNf_$$", "A2": "$$$", "$Cd4$_2O___": "_2W$N3AZp$8" } } }, "_6$1$_$$_": { "b$lK0$G6": { "Qlength_dar": { "t": "D9c_1$", "$": "ar$4$$_", "c_N_$$64": "_v_v_$" }, "_Bo": { "f_$$K$_c$2_": "BypI", "_6__": "_$0", "_$g": "$Q4_" }, "m9applyGarg": { "X": "Z$$", "t_": "xEameKap", "HZXx2y$F__": "OT$_" } }, "_$1z4uuU$57": { "$$V910": { "$__U__Y": "__N__p", "aa$O5_32$_": "$p", "_C0": "$s$w_$$7$_P" }, "$": { "$_z": "G$_", "O5$$j236$$U": "Y$$$S_", "$": "_$" }, "_O$ai": { "biNl$_Z": "$xl_UB_$", "KFlQ3$": "$$9_", "ES3": "Xz72_D$__" } }, "_$_g": { "__l_$qa_$$$": { "r$_$": "cbjA", "Y_c": "Ehhzss$ZM", "Aarg": "_$_w0z_1v" }, "$1e2": { "Jer": "$$", "Cq$$ic_x": "$6_$", "z_$_Id0GX": "Di2RO" }, "p$FVtring": { "y$$": "_8T_$", "_o$$_S7N$$": "$", "Zbind": "__" } } } } }, "$$5$Z$": { "$valueOf": { "Nref": { "$66Ncyk": { "$toString": { "$_5": "Bi$$_yY", "b_$$": "xe_$af_$$R", "$VMx$ER$1on": "_E$$zk87" }, "bon": { "E7v$": "Dnam", "abGmj$$_3": "It1Y__", "uXCl67046": "HbmrU$$$0_" }, "e28K": { "ZB__DK__I": "S$B$", "D_oT2C$v$__": "O$", "$6_FZ_$4$h_": "RD" } }, "$__$look": { "___iy$ha": { "b__": "$$_6$yg__s_", "x_uhnV$_l6": "sz_", "__k2X": "z" }, "$1": { "_4Zk": "IE", "c$sH8g6B": "_yce6_", "_$": "_" }, "$ref": { "A2$$$u$__": "_y7", "a$e": "$_$cZ8_p", "wref": "lLBK$i8D_" } }, "Qkey": { "cB_c4MkYG": { "_$9_8_": "JU", "x4g_91_$$_": "d", "$$w8": "$$i9K$9_i$" }, "Cca": { "$$Yd_2": "$grw3_", "d$E8$G$": "Fjo_E$087$", "$__lookupSe": "$7" }, "ay_": { "x2$_e$$b": "wtoString", "__Ss7_Z$$9": "$$L_7$__Q$B", "D2_PGI8": "_1Ub6$$Qv" } } }, "_7$t_$7": { "_$g$_$": { "l$K0$1Tw": { "Cmeh": "_C", "$$": "dO$$u5s", "scV_5Q_P": "Gp2" }, "$$57$M6_": { "d$U_$_K": "_name9oLo", "$key": "V8M", "D1_Ag": "$f7" }, "Z": { "$$_$6c$": "_$", "$$TOc_": "e5$eOOM4U$$", "W0": "$o" } }, "_": { "$E2v$4f6_$_": { "_ook": "C__iPJ9", "W___$x$$": "$S$1", "__n6_": "y_$$_" }, "p1_M_j$": { "ggn$_41_P": "S$_$2", "$M__3": "r0$", "xB$$1M$_$H_": "$oHr__" }, "b": { "Xr": "B$M$x", "z_$$_IG_1": "zB", "$ref": "$$rXR" } }, "_h9hU_$_": { "eyYprot": { "eC8b$B$_59_": "$oSkeyAprop", "Larguments": "___prot", "$_$R": "$" }, "Ve": { "$92YX_$": "Cprototyp", "$$": "$__9$_A", "$e": "_7" }, "YDoo": { "A": "_b$", "paB": "__", "B$$$$5": "$C_" } } }, "_$Pe_Ke_M": { "f__": { "EFdy_": { "tref": "_hasO", "_": "gKf1_wR$_", "Wj$3_Okb3_": "zl__" }, "bg": { "_7$3z_Z02$": "$o2D0$94", "d4__4$__7_": "_", "$c_o$_": "_W_UT$t__" }, "Cq3_AVz3": { "N_": "j", "_": "K_SY$_2z1$7", "Kz_": "c__Rt$0$5Y" } }, "$5w2i_X$ORT": { "$": { "__A$Z$vD_YC": "Dlength", "_$": "H", "$_z": "Qa$" }, "_ca": { "x6_z$_": "$", "l_4RM": "v6i$", "A___": "P" }, "$1": { "$N$_nOD$_$C": "_$", "$t": "CL6D_Z", "_re": "$1" } }, "K": { "_": { "r6": "bW5$8u_w$", "_t": "VL$", "_bD": "BY9_$450K_" }, "$1$eE_": { "$_$_5z9_XT": "bbind", "$vqc_$Ci$$N": "FT", "$": "_" }, "cXb": { "__$": "x", "Cho9$K_491": "$_1", "_wxref$": "v" } } } }, "$_1_6o": { "$$$": { "_toS": { "SA$b": { "B_$_$_$b$a_": "$", "_M": "E", "_1n": "mZj" }, "O1": { "xwOT5W": "$G_c", "y58_C_Xzc$_": "$KzhD_", "eQ_A$m8O$_": "DA$" }, "z": { "al": "_$M__l1$$Z", "MvalueOf": "_$__o77H330", "Wsf": "A8T__D_9" } }, "$H_E_": { "ByE_": { "E_": "x1$$$", "d3T7$$E$$8K": "v$$_7$u_0$$", "$GW$S": "CxA" }, "$_EOa": { "$_bc1": "$", "_": "B", "y_97B_cG_Y_": "$$YB__9v_" }, "___loo": { "_6TnHO_": "E1", "$WB": "_engt__roto", "B_S6han$3L_": "Zkey" } }, "xprototype": { "_R$v$8$TUu": { "V": "P$W", "__39": "K$4_$7", "BQ": "$WN" }, "A$1_": { "Set": "B_3BF7D", "_3x": "$2_", "_V$44R$0": "a_a_LF9$_" }, "$_$N608": { "$fi": "$b___7CJv9S", "$_rB$": "qN_5e_$_Yo", "l$2$$__$$_p": "b" } } }, "_S": { "AwS$$9O_6": { "Jy_4wu": { "$$": "_5", "$_ZYCa_E$": "$T_iWZ$$__z", "$_KJd_": "_$$2M_$__O" }, "_": { "_Q4q80_": "$73a$$__r", "_K_I_9": "z9m7", "$apply": "$ZM$_$$" }, "$Ver": { "Q4URbIw$cp_": "n_1C_f8_g_", "v8t__5__pP5": "$_$d_", "$": "_X_$" } }, "$M$FH_cfo": { "_r": { "$S8eP_$b_": "$0callh", "Q_f4N6D_1_": "bqHQ_", "_a": "W__looku" }, "_": { "V3X": "$68_8$8_", "d": "E_", "x": "$0$E" }, "c": { "$__": "$$Sk1", "Y$063_": "_m_", "e3T2cTCg_i": "qr3_8_" } }, "$J": { "za$$_69v_V": { "aapply": "a$", "$h$": "v25$i_s", "C_e": "_PXg" }, "$$": { "_T$_AW____B": "__5R7$_8", "Dc7gb_": "q", "_g5b": "n$_l1oa1kE" }, "zapply": { "Aa23": "j$$", "v$Q9$qJ_": "C8_", "A4_$": "yC5$$u87$L" } } }, "XG$y3_z$": { "$": { "MCe$$A$04": { "AC": "_o$b_2$n2", "_1a": "Z$$_is", "$": "$valueOf" }, "bbi": { "e$": "y1z$5$8_g__", "_L___I$": "$ee2cal", "_": "d" }, "$_R_$2": { "$_$_e": "_", "R_$64__k": "i", "__L$_a$g$_": "_$7__1f_" } }, "_8": { "$ct": { "_T4_0x": "_7$_QR_$l", "$LV6L": "n_fm1f$aYb$", "L6K$L": "Epl" }, "_apply": { "X$vHv48p": "Dk$", "_$4": "_6_7W_$_E_", "_QD_": "$pMCS_$" }, "c9$": { "_t$_$7b$": "BCV_1_bb", "Y56$_": "_le", "T": "_prototype" } }, "$1h$I_Z$_": { "$EAc$F_c_i": { "B__": "Wkey", "$$C": "_5f_1$", "pref": "$_bxA_9c" }, "b$_2_298_B": { "$_Z$$E1I": "c$", "_": "$j", "baE6_": "_b$_" }, "d__S_9": { "Bo_": "_0$$Yd_", "D$": "xEr__defi", "j$l": "Ei__8$Y1" } } } }, "U__1$_": { "Y": { "e6J05$l1": { "$__defi": { "$3": "F$rref_", "$E5$$__": "$toString", "_j9j": "_A$Trc84n_$" }, "$___021_$": { "$46": "Z_$", "$SB4_G": "xg_yI$n_", "_V1": "yPaxf1" }, "Y$7$z$z6w": { "C$AC53O": "A_T$", "__43_": "$", "Ckey": "e" } }, "Y6": { "wd": { "_": "_", "P$a": "$1_", "_Dna": "hprototype" }, "_l": { "T$C_$": "$_8wA850", "$XhDE": "CF9_$", "$$_$$7$6": "A$$A$" }, "fw0__$D$__4": { "$Ye9_XlUc": "_e0Kd_n$5_", "G_1": "$", "Bk": "__H6QhI" } }, "_$$": { "d$": { "C": "____n$0", "$": "WindbindCpl", "_$0NF$": "$" }, "$": { "A": "B9H", "vr_$aM_DV_": "_w_x4o", "e__proto__": "D_5$" }, "__": { "w$$2": "_", "_e": "z8f", "Tkey": "y9cal$opert" } } }, "$6j_$_K5z": { "$7$$_4$Nh": { "$o": { "vJ9_____": "$_6F6x_5$", "y": "$5k__pjh", "$$b7": "$kg4$Q96$" }, "$7Da": { "_isP": "_valueOf", "Wmk$Y": "b_", "n__B": "$" }, "$": { "___": "d", "_95$9w$V": "c", "$W6xG5$": "e0o" } }, "$uwd$_l$": { "$": { "__SL": "yva", "_DV__": "_8$", "_J_0$yq": "_L5" }, "_$_$Y": { "_call_": "_Kl5_I$_5n", "_nam": "D_X", "$$": "_$jO_7_7T" }, "$U5v0_p": { "xb": "cbind_", "$s0_27L02": "$VS_B", "$7D$B": "d$15" } }, "B$2_B_XF": { "$cVcy": { "C1_1": "$q1", "d$S4": "K5_$", "ecAv7f3$z_A": "x_0v8AZO2" }, "e3$": { "b$": "$__dC", "ZjG$c_m__": "T_", "D24M_": "$h$5_7$MH$y" }, "VzQ": { "_d_": "fev$S0_$_X", "_": "exx", "_AS$_95KB0": "__1" } } }, "cvc": { "_": { "X2umer": { "$u": "_", "B61$r$9_Ao": "__", "A": "_3_$h_" }, "oo_": { "lv__$4L$G$": "$zb", "_Lrucbin$r6": "_i6_aXS_", "BS6NaM$51_2": "p4S" }, "_": { "$$$pro": "$_", "X$4$0M$$$": "$8r$", "ej": "dname" } }, "$": { "$$3h": { "Q_wOi$$N": "A$Vo__90", "$lSc": "ejT1_U$y_i", "b$1": "_" }, "DJY$9_": { "$_$_z": "$v$", "b0wb2$_1$": "A8", "$1w3dv4": "Z$A_" }, "$k": { "$_$": "$ro", "_8_D": "_", "k": "$$_Y$cf" } }, "Knamref": { "vK$1$5": { "_4E$_": "VYha", "_m_o": "_$H71Uig", "b$0w$$wE": "_Fk_oLNl_" }, "$": { "$d_$03": "A1vb1_", "$c_$": "$5$n$_", "$d": "ji$" }, "V3E": { "_fin": "_", "C4": "$", "L": "C03_$iV_3x" } } } } }, "$e$_": { "_r": { "ANsh": { "uA__f_eA_": { "i_": { "_w_5n_0": "$9", "X": "zKZ", "$$8A$Us$S": "$roto" }, "$": { "dsE": "$dF_0B9", "$re$": "d3qlhc", "SaQ": "_2" }, "Dref": { "_Au_": "___$$", "Yf$1": "$X3", "_toString": "lisPr" } }, "_$": { "Bo": { "n45_$_$T_6F": "$w_5z_", "e6$gD_aqvY": "pU_$$F_c$k", "W": "AK_$P" }, "_$U$a12$_$": { "$t": "$5jTV_YBz", "$_X124I7": "$$U$", "$ref": "au___y_" }, "_BF$$8": { "_": "a_4$_$N", "_tak$G": "$_", "db3$_7": "_$_r" } }, "_e_G_7zwp": { "_": { "_P__$$$h": "$Y4_XD75vY", "$ref": "y83s_", "_cZ": "$3" }, "V$": { "A_9$L": "$qVlerl", "_r_M2o_H_o": "T6$", "Ct": "Dlle" }, "$": { "_7w_1$2$G": "_L", "_I": "_", "vle": "$apply" } } }, "$3japplydia": { "$dB_AGxM$_": { "_VZva": { "E$____x7y": "_", "_$_": "a", "$$_$1r": "jvalueOf9$" }, "M_7Q": { "B$a$1_": "_", "arropert": "___NB13y", "lre": "__epTc8" }, "_B$9$u___t": { "$y": "__$I$_$", "IBF": "_", "x": "_n_6R_xR47" } }, "_cto": { "V": { "Y8s": "_x_cwG0t$", "_3z$C$_": "F7o_Kt072", "$h9$46mK$_": "O_$1" }, "c0$z3__defi": { "a$lU$9N": "_C1", "bbx_$Y$": "e$35En4", "Y7UuJ": "_$$6aY" }, "x_iX_md": { "p$Ku6": "_$$", "$9PB$Fq9": "x$", "__": "$1$$" } }, "F_$WG$Z$_p": { "kapply": { "wx6__$i2": "$e", "$yU": "$constructo", "B1": "g33" }, "C7vCm": { "VtoString": "_$y", "Z5$$_$": "$P$_", "y7k$bch2$": "bI__X5_" }, "hh": { "aX$$P3$T4_a": "$$____7A75$", "_$_5": "A", "_key": "Nd$_" } } }, "N6mkl_i$j": { "a_6_": { "E_$a7": { "c9$37": "__W", "v": "YXB", "_": "mGmuM27_w$" }, "_propertyI": { "a$X": "CF8l62_y6Et", "x4_zqu": "p$2T_$$$B_$", "$W$_hp_$": "Jl0L0F" }, "__oStrale": { "c$_32$$27": "_$l_", "_": "V_$_A_4BR_", "$2$$": "e$I" } }, "_M5$e": { "y_y_gP_p2$": { "yO_T1$": "E9X", "$6$$0": "j$", "_$m": "b0" }, "_": { "d_$": "___d", "_9dE": "z$tr", "$m$2": "G$1_$D5" }, "W$p_dlk2OBl": { "b3": "j_", "Zf__46I": "$B9Y___$", "Ej1D__3": "b" } }, "Nm0_8$$u": { "_$1_": { "BY__$": "F_r_87", "W8U_SZp_$": "_K", "_": "w_" }, "E_": { "T0e$": "WK6$U0379$_", "dV$jl__$$__": "Tref", "_3X_$to_$": "$_$zwX_$" }, "Xr$VPUu2_ul": { "_e_W$": "btoString", "P_L3gr9G": "b$$$prope", "$": "E8$9MCa_" } } } }, "idn": { "eA": { "vKHS$YP$_": { "$D_z": { "__M$": "$eX_vq", "$__lm$$": "$$l", "_bT": "B6_Z" }, "B_n$__": { "iD_iVKVKnq": "G5v9j_56_$", "_ar": "v7m", "aAV_": "W8$0" }, "Y": { "$_dg_b$$_1": "Z", "o4_$W$Y": "$_", "_b_U$": "___proto__" } }, "_yargum": { "_3dd_MS": { "ED": "$", "n_g": "R", "rarguments": "_$" }, "W14_MM": { "D97$$V_$__": "_5$2$$s65c", "$K2$x_$w$5": "d_G", "$j9DLx_XdJ": "D_B$p" }, "$8$SD0_": { "_7": "RR___Y4D", "B9D": "$ref", "v_": "Ey$i__" } }, "_$_9Q$_8": { "DAc_": { "$8": "E$x", "y": "_9length$Y_", "_3y": "_x_$5" }, "b_": { "GB_3_$": "_C_4$__$", "_": "n8w", "KG$I58Vf_": "$$$" }, "VR$mn5$": { "d$$2E_8sT": "$Ju9$ED_", "_bXe": "d2m", "b": "jEa" } } }, "_FvKK": { "dE": { "_a": { "_9p_": "$_eV", "_70tF$4E_$": "_$$59je$x", "TXr": "__$_v8" }, "Z": { "H": "$", "Dapply": "f__proto__", "_": "$0$1_VLG_nL" }, "_2uKlMF$": { "_2": "g", "l_e8ke": "R_2", "W": "G" } }, "$pOY$": { "X__l": { "_Y": "Sc", "cu3$V3_90": "$$$rG$uc1", "$": "V" }, "urr0$w6": { "G_H8W_y": "zG$", "_eZhL_$$1Mp": "Ei_J8_", "$c": "Dap8applr" }, "A5C_o8": { "_8_": "$5AA$", "dinEllbind": "Zlength", "_K$$R": "dwrhT" } }, "_32$Dvale": { "$": { "_valueOf": "_e", "a$_": "D3j2_0$L", "$": "phy$" }, "_c": { "S": "_Cv$", "W$$u$U": "$", "$_$": "$1_2u_G" }, "_V": { "_": "d_b", "d": "x7$Zw7", "$$$bA$7_$7": "_nP$N$04W$" } } }, "aS$$V_9": { "__$9r$Gqk": { "fjn4r$Z_$_O": { "eZ62key": "$$ao", "a$NC__": "hzp$", "A": "$LI__$_" }, "_7qe": { "$valueOf": "tdWe6", "$U": "__$", "IsEnisProt": "ZL__6O8_Ao" }, "G6T_93k": { "V": "BtekcX0", "$_e": "__", "$P_$_$": "$3_U" } }, "_$": { "B$_": { "o$c": "v_4tU1", "E61": "D$O$", "$9_$$_": "_$ifRz8f5$" }, "_nac": { "$": "Yjf$9eH", "$is": "yY$$$5w$E_4", "$_y8f33$0": "i7rh6s_$u" }, "$": { "p3CFi0$_$": "A_", "$ar": "s$$kgh6o", "eap": "_x8$guDP$1_" } }, "__5$C": { "DH$__": { "$9": "C_0", "_caller": "KAV_", "m": "WtJ" }, "_M": { "_6": "v$V_", "AcallW$oSe8": "$bBB", "cr_": "b" }, "z": { "n93$$6$": "$h$_", "p46H$": "m_$_$IIac", "$": "__n7_3" } } } }, "UypeO__look": { "$01$": { "$aY_": { "$A0": { "U_$Ly4pM": "$", "G": "$t_43", "$5fK9n_1G": "Cref" }, "FvalueOf": { "__52b_S": "NtoString", "__Wb8_Jiwe0": "pQE", "__7h": "_S" }, "_": { "$93I$r$": "__NVg57___", "x": "_", "C$__": "$D_r" } }, "sNp57$K__3_": { "$": { "$toString": "_oW_$W_VN$", "q_fAD0V4a": "_len", "$": "a62D__" }, "$3_xC": { "b38$5": "$$$69o_$", "_$NRW1": "_$1$_0$g$t_", "Vy6D": "C_o$o$$$_" }, "eT": { "AU": "$$A$B$", "__8ywIP_Wf": "___A$", "fBw$OR_l_0": "$_" } }, "_I$": { "k6": { "$$z": "se$", "_$$$": "papply", "sn_h9_": "_16fJvE9g" }, "cref": { "__": "VlueOfkcto", "AJY$hW$2$$": "A_vB$", "c740": "P$e0" }, "R$": { "$V$$AC3": "xr$Q$$k$", "_A_toString": "$", "____": "_7r$$$" } } }, "_v$$U$$$I": { "_apply": { "wDc": { "_COR$": "BvalueOf", "b__EV": "Ekey", "eG5QR_f_9_": "y" }, "d_XeEZ": { "a4$$8yVr": "__W_", "_K$$$q": "_", "_$ld$_3_": "e$O_" }, "G": { "_$x_780k__": "$_$_", "dtoString": "_w_", "V": "x_" } }, "$key": { "$_YsOgK7v": { "_C$$$h06HU": "__9", "$$$_": "c", "$O": "UQ_e1r$$$5" }, "$_11c": { "_$md$P": "Da_6pn6eW", "zVzl": "$dE", "$m_": "$" }, "__$e": { "$9$$5a": "_$Z90", "M$$$W___": "rJ", "CtoString": "x$bdv" } }, "IY$_": { "Fkey": { "f$_keyst": "P0", "_k": "$w_", "Xn_": "dC" }, "C104e__": { "Yar": "lWrefV2w_a", "$__3$": "_Z0S_D2", "Q": "_$7z_$_" }, "$": { "K2": "Q_$x$", "o3$h0": "Avalue", "$_": "ca" } } }, "$Kwu$": { "dd_C4f$": { "b7$$3_544$": { "Cj8_R": "ekey", "w_D": "P_3", "$___": "e" }, "_X_6": { "C$$$": "d__$cV$9E_", "kf_": "c___$", "_": "A_$$" }, "Z$_$_$FC": { "K": "zref", "rg_": "$", "P_": "_" } }, "Cname": { "r_YQC_2": { "ZIS": "K$$J", "_": "Qkey", "$___e4a_8_4": "C$_YW$$C$" }, "__$Y_6z$1e": { "__cproper": "$_h_$UbW5", "XP__6_0": "V$zux2$_8s", "$_$eSky": "a1__$2" }, "B": { "Ez_$$E2v": "yj", "z__": "$$l$", "$__1": "$4D$I" } }, "$": { "$": { "e$S_y____Q": "_ale", "YtoLocale": "z5V9", "Y0dV": "$$_5" }, "r$": { "_apply": "B$refa", "t": "bx", "RiE2_": "vw$$Qq" }, "_k$$ne_h_": { "$D$0H$Y2_T": "__", "q_p": "Bv9", "$$": "E$kupSetter" } } } } } }, "$": { "_isP": { "_w$__7": { "ZG5$_u_$p": { "_": { "q$": { "Yref": "___C__9_V", "$$YJ_": "_1c$21v", "bJ": "_idR0$02wE" }, "xd": { "_JcVP$$": "mO2$_$l_", "XX": "$$_nmHg_", "v8": "_8scU$f$U$" }, "V7_": { "Vek": "i_i_a5E_", "_": "N4Y_", "x$$8132$K": "$$bd" } }, "W_w6_p__N_$": { "WcakeyDekey": { "$1$": "$_", "X$": "$G_F$$aPB70", "_z__8_$b": "ItoString" }, "TC_$j$B": { "e__proto__": "_", "b___": "Ao", "yIv$": "vk3$E_W" }, "$": { "_5EYh43$Dt$": "g", "TpDp_D$z": "Vnl$T", "AE1": "_$p" } }, "$54_$_$db__": { "_Zi": { "TktoStringB": "_caller", "b2": "P$_Z$P$_62", "_1": "cJ" }, "_constru": { "Br_$$B$t_K": "$$", "_valueOf": "eG1X$$_O__", "cy": "_91lX10$D" }, "_": { "bb": "Z_$uF", "$": "_", "_c": "__v" } } }, "e0_LF_aN$_": { "D_I": { "$7$3ckv0": { "_xL_": "zref", "_q_$__c_V_": "_E$5", "cto": "$b$7" }, "N_ip$CGO$4V": { "_$": "heng0", "$": "a7_6$Z$703", "A$_": "u2S5LP_MBF" }, "$": { "A": "j$m4_0$B$", "_5": "_", "Cre": "a_" } }, "X_sg": { "ViH6S$_H$": { "$u_$_p5$$b8": "_K", "$i$$l_8Gu$": "w98_Ku", "__E4": "$7N_Z0$_" }, "BN_iq": { "_": "__bin", "Zref": "$__", "$A_$q$DW": "v" }, "_": { "d": "_3", "_WC$3": "T_", "e": "__l_G" } }, "CtoString": { "$0t": { "U$": "_P$", "dW_": "F58Guw_6a", "C$acW2$$$": "R__" }, "y_": { "$": "$k_bB$_$_", "___d": "cCL", "V$m__$q0$GC": "za_WJo_A$$" }, "$7pr": { "_G": "Ko5ULd_", "$caller": "F___Cxl_u_", "$leng": "_$dgE__730$" } } }, "U$_": { "x": { "Zref": { "_w$": "Jxbi", "$8$tf$$k": "wP", "e$name": "$2_" }, "_4_4sL": { "B": "$_rD", "SB30_1$$x": "JxFE", "__PtF$_vR": "___$" }, "$_507w3E_": { "C_defi7": "de$p_$", "Fx1": "xr", "ZlM": "_ll$W3$$_F" } }, "$v1__8": { "__": { "$KdQU9$Fr_$": "$q$MD", "$_3k1WVNO": "WXy", "I": "$_$" }, "_0": { "$$iJeX": "E$__$Wddl1_", "C_": "_$a", "__A_7_rWO": "w$_Bh_" }, "xkey": { "_JGL": "W2", "$0B": "V0c", "$__proto__": "_6hasOwnP" } }, "K_h_03": { "Y": { "Jv9W_421": "__$_", "_d2": "B_Ey$_d", "_w$2eR4a_": "_" }, "E$": { "Nnam": "X4o", "$5_": "E_C$E$", "$Cbindpert": "_gj$_" }, "_$": { "$_4W$X": "jZzH_pC", "_": "M", "$": "$Clue" } } } }, "Vt": { "aingc": { "_W_Wp5_b0Z": { "d82$": { "B$N_2M": "$X_", "_2x$3qXFx$$": "$", "$": "Ep" }, "$": { "l_": "$_lenv", "cl": "_k$j$v$b", "N0Q_": "e$C" }, "_BCKt$$2": { "c$$": "_nam", "$$": "_", "db9": "$" } }, "$Z_$$_8_a8": { "_m3$P$$_jO$": { "_prototype": "_Kc", "w": "$_$6AYt3$", "_2$_JL_bH9": "S41C_" }, "b4": { "__hyB8": "_$1$o", "E_e": "$$Y", "w_": "_y_$_b$" }, "B": { "ba": "$_3$", "$W_": "$$_3LM3v", "f_": "E$Geo9" } }, "cref": { "_0_9$_p0$_": { "a06": "Uzb3_US_", "$$": "ezAbZ0", "_mo$_m7_": "_v5DH$" }, "Cb": { "$bind": "_$7lhl", "Zhr_$2_": "_$", "e$_4": "V" }, "$vdZe_4": { "Q_9$$": "_qO$b_sjb$", "h": "b", "$NDN1$wD_": "b_r" } } }, "_JX__B$U$": { "_H": { "$ref": { "$": "_bZB", "$b$__YQ26": "$x", "wf_": "_o_si" }, "DkX$al_hwh": { "A$a": "HP_p_W", "Cy1_$": "$$f", "Vcaller": "Kt" }, "$": { "xtoString": "$_4$a", "$key": "_5t", "eHO7b$M$": "O" } }, "k": { "_$_wHmP": { "d0_x2_$z": "Ep$a", "$__2I": "T_loolengna", "$U_Ywe7b1": "h_M" }, "$$C": { "e$prop": "eypmepertyI", "oS$Z_GV": "$XzaB67$$_", "_key": "$P7$t_r_4_" }, "D_1$$5": { "vN4W": "$D_khMcx5O$", "EtR_9$1$": "M", "$caller": "b" } }, "$_$$$_fs3C": { "etoString": { "$$6": "_", "_Ve": "f__9", "$_$7_3$_": "C" }, "$key": { "z": "K$$etter__0", "j$$501": "$", "_1__defineS": "V$_$$CY$_" }, "_ref": { "_2": "$_", "$b682_$": "$", "Bca": "_ikQMg$" } } }, "$q$H7_n$hI": { "$_$__C": { "X_ooprope": { "Z$mX$KD$": "sY0", "$__proto__l": "AtoString", "_$$": "_p$" }, "z0$$i$d_9w": { "ckey": "xT_$o$", "A9": "$y$$05Zk_", "X_": "Y" }, "$_": { "$d0_": "$a$$_", "$0_$U0": "v$s", "A_$": "$nam" } }, "_35ybBd": { "z_c": { "_2y": "__", "$": "_apply", "_Zw": "BaCke" }, "Yb": { "dI$4": "v$S$l4Vs6", "_Wu_": "B$_PpQ", "$ref": "_eq__lookup" }, "$": { "_95_": "$Z$C3m$_E_", "e38y_$_": "_", "_c_X$S_7": "_BO3G_505" } }, "IA": { "$_3": { "b7$$Om$": "$arguments", "BL$cD0_H": "B", "$6": "__L_P$" }, "$6$": { "$p0W": "_apply", "D4ba": "$_9a", "baJ": "$1_W" }, "s_$jac": { "jcaller": "$Nx2$$$$_", "M6__9": "c_$uHLU7h", "$k": "$5" } } } }, "_na": { "n_$m": { "d$h": { "Z$u$Eq$U": { "lew": "A", "_$$_b$$_G2k": "_r", "y$3l548$z7Y": "_Q0" }, "XBV_P__$lD_": { "$$23_3$": "sH_", "_Ep0__": "m", "_": "_taC152" }, "$": { "v_": "$argumen", "$0$_d$$c_A": "NZ_bLR$q$", "eref": "Cm2r_aRn6" } }, "D3_s": { "c$f6": { "$EBZ": "__$Za$u", "ORD": "$oref_erruc", "wd8": "j0efd" }, "I9__$$Zax_$": { "Xref": "Ee", "a_": "p4Yy_6Bo5_U", "$ref": "V" }, "M$_d$__h": { "$Dj_c_X$LD": "b", "rAj_": "$ke", "$hg4Hk_YA$Y": "_BP_W_H_y" } }, "_0rE7": { "x$": { "Z": "_Y76", "CW": "__o", "j1$q": "h_Em__o8_" }, "$$5$cMB": { "B": "B9b_0AisPro", "_6X73y$Q86$": "$_uct_", "$": "YJP88_ztVt1" }, "__d$_3y_": { "__": "capply", "$$$_": "B$", "G4UF$00g": "UX__2WE" } } }, "Wc": { "btoString": { "$hg70$Y$_$": { "_call": "$W87", "_v": "$EC$e_0", "lu_$v": "_$" }, "Ln_k2": { "ipr": "C$$v1__E$eh", "Bkey": "w$$Kj27_1", "bz_ul_$": "$_$$RvX7_3_" }, "n6$__K5W": { "Opro": "_$4__02$", "$034_": "wQ", "_": "$G$t8q" } }, "Gltter__$ha": { "Y4_0c$$m2W$": { "gt$$": "$05bSOh", "_Lv": "wYE_S", "E1$_7x": "L_" }, "$70$_7": { "a": "$Q28l$x", "_$06_5": "$l$DKzC__", "$$$y$_2j$": "$" }, "$_$AM8$iB_3": { "W_4Vz$h7_$F": "E30$", "Iks9_M_I4ch": "$8_$", "__c": "_$" } }, "$k_V": { "wV_c": { "$": "$7K$", "T": "_lnE", "cr": "_" }, "DtoString": { "$w": "dA$$_Bb2$x_", "ER$$_$JU_1": "A$", "lV$": "yD9$" }, "b__aha96$_K": { "V_1$__": "_kdE$_", "$$fW": "B_v6w9$9$oQ", "_apply": "$$u" } } }, "C2V": { "_d$3E_": { "zbl": { "$Y_": "V1t", "I$DM$$7$_T$": "$s$zQ9Q___", "b$": "$_$7Upboe" }, "L4r1pYac6": { "_ByW": "_h9_aD98Y$_", "C0_5": "U$", "$m": "b0_b_1_$" }, "a": { "$_E$v1_Y": "$_", "$ca": "eFb_8_E_4$s", "ccons": "Bl_$L_nZ_" } }, "$$32": { "C": { "$SU$_e_": "$TY1AFN3_", "a_d$_DRw$": "S", "Wva": "_VH$6" }, "$": { "_len": "BRK0E$M", "_$": "LV", "D_7El1L_fop": "c_7w" }, "$toString": { "$H199__$w": "_$_W$$1", "V6$mu$_$": "f3", "e8__5": "O4_" } }, "__$v": { "f_r$SS_N_70": { "B67$$L9$0": "E_3", "A_A": "ca", "b03": "J4$Xg5$__8r" }, "_": { "bB$bin6$xna": "_len", "$_L$p1_$": "Wgn$4_", "wre": "__$$D" }, "K$83VX_67": { "_": "$_$5_b$", "C$BB": "$lJ$G", "$": "H__k_" } } } } }, "$0$": { "_2L$____6": { "_": { "hhasOwn": { "d": { "_": "$PrlcH$I56", "_$_": "Xpro", "$$8y": "cE3" }, "$_$3": { "jtxe21_Ze": "a", "y": "ep$$", "$cCa$_": "H4" }, "$": { "B": "$x$LWW___$$", "_A__JZ$9L4q": "$P2_Q7j_", "Acaller": "$$___X" } }, "A4_ga5_h5__": { "Ej_": { "Ei_971S_3": "B$$$MB$Z__", "$$dujy": "$3", "yu_DO3r": "_" }, "W8Ik$___43G": { "D$k": "$", "___": "_O", "__$C_$$0_": "JMpeXvg6" }, "b_$W": { "Yd3n$$Mxt_8": "$x", "ZD": "S$$833", "Yiy$Wi2": "$" } }, "$8_I_": { "_ref": { "dp6": "$0z$Ns", "a1eYSZ84B_": "$Vf", "b1": "Z$gIY" }, "a$": { "$E6w$0yy$$_": "zIsA95_", "H_ByB_E3B$$": "l8", "_$B1": "q" }, "n4xve$x": { "$BkZ6": "_", "$": "_L7$7_", "$4": "VZ_Vz$A$y$$" } } }, "j_": { "$": { "_a_": { "Au5_l$I$_": "z_CMc_B$9_$", "$$___x___": "G_H_80S", "C_V$": "_4_" }, "_$": { "$__defineSe": "_T$_", "$_": "_Xe1v_$F$", "Dkey": "__y" }, "e": { "$_VA_V_": "_Gecallerna", "Y2t_$": "$JT$_dB$", "$": "b$$$e" } }, "__J_n": { "$$": { "_toString": "D_$$_", "Cu4nwv": "v_dI", "$3__": "$" }, "$$7_9o__": { "_Q9$a215": "QD_ring_r", "Q1c99Lo_M__": "$", "__cZ": "y$$D__eW4_" }, "x$": { "$": "bisP", "_3UA0CB$": "B9", "W": "derte" } }, "v$4$Ja5_6sm": { "yN_6V$p": { "$": "$4_", "B72": "$3Ph___M", "y6V__C5v9": "K_x$$" }, "$1": { "$0_G$Q_5d": "_K", "l": "_re$0z__d", "$_F$Cd$_M_": "_JH" }, "_b_wA4L$_K2": { "_ar": "_p", "$__defi": "$$_iCaj", "W$_9G": "eY5" } } }, "$KHR6_t$": { "g8y29": { "_": { "$_T_$Wz$": "__Xcb", "$_o8$n_$": "e9", "fQs_Ov4z_Q$": "$7il" }, "Pd$x_6$ca": { "bn3_3U": "cA717_LFIG", "Vl___": "M$3", "b0FeYuUkL$j": "$" }, "tX3G7_$$3": { "$_w": "W", "vI5_": "W$", "JE0_a$$__d_": "cah" } }, "$DmiE": { "$_6$q_2": { "$OH_": "C__IB_$_Xh$", "_1U8": "_$yc_d$_C", "A_A": "T$QV0" }, "B_c": { "$__$s": "$$_n", "A": "$Wc5dallULz", "V_4v97$EX$_": "zE_$$nGZv5c" }, "_$3l": { "$$$ZQ": "$$", "B_": "mTg_", "l$": "d" } }, "b$9bnf$p": { "_H$$2_$0eh": { "$$": "$M4$_u", "Y6_Xw__i8$": "$__be__", "Wcallergt": "_4$$8Z1_" }, "D$___3Pt$l": { "gO$a": "$RO_k8", "ZGm0": "_", "_$Kt": "C$9$n$" }, "_$7G$a_$_": { "ecE__$": "d_kEl$f_DE_", "B_18_63$0$": "_call", "zq_$AW$": "d5_0__$_" } } } }, "$e__Ybx$1": { "$E9$$_": { "_Jcn": { "Capply": { "u0___": "_$$698$", "$MBk1gvzn_": "N4w$", "__": "W" }, "$__T6v$PMA": { "__": "w_OV", "$_": "_", "M": "_7___ddZ" }, "$": { "B": "$$7G2X$7", "$W$rY9$j$": "_j4EO__jU", "$0_3_1p8$": "c_qDSP" } }, "$_": { "_": { "X_f11_0": "_vw", "_m56zL": "$c", "m": "e" }, "ar_8": { "$6$_w": "db4", "c": "BE_Dl", "_$": "b$$_d1_7o_" }, "cW_$l$1D90": { "DFhA$": "CW", "$_": "__Dy", "aO$$9$_X$_": "_C$_fFw_m_$" } }, "$$H": { "zN2_g_V_": { "JO$$_C": "db3", "AE_V$$_7e7": "_Ek_Dy51z__", "_5$$Nm_W": "g" }, "$": { "$__$": "B$O1T_b_oq", "r$m$N_2x1": "xy3H_", "$c": "__$a1z" }, "Q9q_64$_$_0": { "$Mz": "e$7n", "D$": "ea8OZ__$yAc", "$th8X": "Q7$L0_D$" } } }, "$_": { "asp_K6_": { "$FV_050_o_": { "_caller": "K$7J32M$w_", "LS_v$T7_6": "$apply", "$u$": "$to_A_" }, "e_$_Nb": { "VK": "_zj_", "i$H$_": "xfB34c$", "$": "C" }, "$t$r84_y80q": { "$4Tj$n$": "C0s_Ij_D", "z$$": "$04", "_c__": "_$$$pGett" } }, "_g": { "_4aer_": { "$4$": "Z_$Q", "w8_": "w", "Do": "_5ba_$bAZ_$" }, "$apply": { "$4x": "Py48wz$4", "_cB": "$", "$$$so": "_W" }, "do": { "$": "_X8", "_u_ZK_$5$": "_t", "Q__$sJ6Uc6$": "$__" } }, "D$$Mj": { "U": { "$key": "AT9_", "AtoString": "yfj$$YJ_", "aBic$_sk1_": "_1$Zd" }, "_t$w_$": { "__w_": "$name", "_A____7": "deX_$m", "_": "_" }, "_9": { "_pro": "O$balO__", "_2JCP": "$_0$", "wref": "IvD$$1A_" } } }, "b_M": { "Tjc_$$e$_Z": { "$C_": { "y$app": "utoString", "q__f": "xvalueOf", "_8H": "$N$zn" }, "$6a$": { "_axHo$_985": "$_", "_toString": "_1_9__4", "_z_9$$$": "vI_9W$_K" }, "j": { "cR_": "k_d", "zarguments": "e", "w33_": "e0nVc" } }, "v$J013_": { "k_1$$52": { "$r_": "Cbind", "A$F_U": "E$", "$$bR": "__E__cX" }, "jeS": { "$_Yq": "Y", "Ckey": "$me", "yE_1E$7C": "JO__$" }, "$": { "_3__q": "$$$", "Cs": "z$$cq8$$H", "Lb": "$" } }, "$0": { "KD$9Ebfj": { "_m3_": "Ql4C$$", "_LC1K": "E0$$6$$_4", "$210": "EfpO" }, "$ref": { "o": "$apply", "xV63": "VNsSX$_Uk1_", "AX5naB": "_OL4q_N17U" }, "E8Aproper": { "Z": "_9_DJ5_d0I", "__SB_X$$$": "c", "x": "D7kA" } } } }, "__yc$x": { "V0$_efZ0$Q_": { "cbind": { "V$": { "$proto": "Z__x$5__A_", "W_Y$$7a83Ej": "_", "Byyf78": "_$Cn" }, "OupG__loo": { "_$": "_I$", "BZr": "jE7$1$xU1_K", "_$$d_E": "__" }, "Z__Aa_15S": { "A$Ouc$_$": "$AGj_u", "$": "$_nDN9_", "$Qoc": "Z19RUOff" } }, "$$39N2": { "$key": { "_$K82$$5oJ0": "d6_$", "wkey": "$__$$A", "$6": "_$L$_O$$4" }, "Yy8__$": { "__$7_u_2p": "tca", "_BI$": "Ew", "$B$2_A_yV$c": "$m70Q1P_" }, "_": { "_constructo": "xcallbinde_", "___": "$_", "$$$$M__Zw": "$in" } }, "$arguments": { "Q": { "_9tIHH": "C$", "b___cU0_$_Y": "$c", "$B_": "$" }, "E___": { "X3": "P7", "K5$_": "f8_6s$", "acall": "g__$_$$_7$" }, "SZmQ3o_K": { "_$_7c_d_$__": "d_$", "S$OF80": "bfJ", "W_$alname": "Z" } } }, "_F_$_$$h0$": { "W_$": { "d$h1W$p6$NU": { "a$7j": "l$xG", "_ba": "_b$c", "v": "$SZ$7AJqh" }, "$5__ev_4F": { "J_DF_": "D8E$$i_", "_": "$hasOwnProp", "$__": "$" }, "$": { "lN$ac$3$$": "$_", "e$$$M6": "Tto", "$1X$": "evalueOf" } }, "RK$5WJ$c7": { "x": { "$XrQ_z0_": "_", "V": "$p", "b4$G7Q$$12": "wL_8" }, "E": { "$all1valu": "$$_14$_1_v$", "JS": "uKB$1$c", "__": "L3wnPr8__p" }, "$l5UH$_": { "I_ah4$": "t3E_", "Wa5_wgA_zic": "bco", "_ol_": "ItoString" } }, "_Zjv$": { "B$y__J": { "_jY4$$X4_4": "$8__LUp", "_9$D": "M", "__gM7N$W4_": "_l$r_2iB" }, "B_n$": { "a": "$", "k$y2_1$": "v_", "_5$y_a_": "c6$m_5EVy$" }, "_$_1_R1$$$_": { "$Ng_": "_$l", "_d4": "_", "$a": "_" } } }, "eyvDJxm": { "Ew_": { "Q92_$o": { "$__2_Y": "X_Q_$1__59", "w2M_1": "$", "AvalueOf": "AYa$__" }, "c": { "_5DE_vU": "x", "_h__$$": "Z", "d6bind$ttoL": "Jcallr" }, "$8$_": { "$t$pd_3bM": "c", "c2GE": "$b", "h": "z$_1qv7O0h9" } }, "$K7K$5___": { "$p": { "_ref": "vref", "tXn$": "C7", "dc6": "oref" }, "_oStr": { "$": "K", "_F0T8_E": "e", "_fI_JQm$KK7": "E7_" }, "_": { "$": "bl_lookupSd", "XR28proper": "_bind", "a": "L1_" } }, "$WL": { "Xt": { "_": "kE_n", "q": "ai2x____9_", "_2_VW_p5$K": "A3$_j" }, "d__$I9": { "_Z_$_Rdq3N": "$Q_v", "_R_": "Af3E", "_": "e" }, "$v$5": { "$pTV": "Gkey", "a$$_Q$b$K_": "_$y", "b7Y$$ks__3$": "_" } } } } }, "$E": { "___": { "$J82$$": { "$c$d": { "_$0$qB_C": { "x$6_7fd2": "$__", "$$321Zv": "X4X_q__ub_", "d": "C_" }, "_6$1ket": { "_A_7N6ftpC_": "F", "__": "$Bppbin", "S0$x_24": "$__p" }, "_toS": { "$gh_87$0$": "u$vyo$_X11v", "e_$_dWQ12": "C81$Fw$3z", "b_9k": "A$" } }, "$": { "$": { "_Rbe$d": "Y__", "c_0A$$": "v", "_Pap": "A6$2cA_" }, "Wkey": { "B_$700$$": "_0toLoc", "z$Hv": "_", "vYX$$": "$K$" }, "_B8": { "v$4": "CyN6r", "A___$F1": "aU5Yv_6", "$6$C4c1X6m": "V8" } }, "__3_$$$": { "$HiU$$$_$": { "B_": "Xo5Q$", "V_$5": "_j", "$_apply_Num": "d_6_" }, "$__lGO_": { "W_w1$3": "_$bJ", "Vbb6Sa$b": "B", "$dA6": "$1$l_ljI4" }, "C9s$$a_M$_$": { "_4QZ_$__": "$", "fprototype": "$W_$Y9Wp$", "$aK$564k5b$": "Q81_15NN" } } }, "$_M_": { "__Q": { "$cLh4L40": { "$U": "$key", "$___": "d$$J_$y_$_i", "_3S43$_C_A_": "$___jKr_" }, "_bB_": { "_toString": "eref", "lkey": "__$Jru$_c", "__4_2m_k": "v2S" }, "_sz_$Oi_9x4": { "yEam": "e", "A$P6_PTT": "R_5$", "$7_": "$Jd" } }, "XC": { "Aref": { "v__4_3_$": "___lookupSe", "$$_J$I_": "__9eHC", "xapply": "_c0d____" }, "Jc": { "D5v_": "X_$$Z$EX$_e", "$ZRve_$_$": "__Q1ml$_$", "x$_": "a_$70" }, "$W$$gxlZo": { "_c": "sf__WTx", "$$AP": "$_6_$cE", "AE9$_0yl": "QM" } }, "_": { "B_rope$": { "BvalueOf": "$ekey_proto", "xE": "__", "N_yPoo9Kz$": "BwP" }, "at": { "C": "cU93$", "__": "v6r", "$B$6_": "_cay4$" }, "W9N_Wh3$": { "X_u9": "$_W1$$$", "dl": "$$6_", "$$q_": "$" } } }, "Z": { "sM2$_U_7gA": { "Lkey": { "$a": "Ear", "j2": "bref", "$U$_r": "_" }, "K$": { "V2dj": "r", "$l": "__U_5$$$", "$": "$_B$97Y_Lj" }, "Dro": { "u": "YP_y$", "$$k": "Aref", "n": "_p1pvz" } }, "Cref": { "$F_ij$9wcKy": { "_toS": "$apply", "C$5v0$$$_": "$6z_", "$Q9$7M3__48": "S$t" }, "W": { "_sY94H$$e": "vk", "W__lookupG": "$targuments", "$__": "$t_8b" }, "AUl5_": { "_": "W00d", "xPrl2_7bind": "$apply", "_2_NdlQg": "$key" } }, "_$$": { "$5n": { "$f3E1_5z": "q$n", "dtN6_d_$Pf7": "$o$2_B$", "deEB": "$valueOf" }, "$31n_97kTK": { "$0Tj": "bref", "x": "__w", "_$2": "__AX$$$_q$3" }, "_": { "Z": "__$W$C", "_$": "_r", "$Tidk__": "$" } } } }, "$appltarg": { "y$QB_30": { "$_5$_J": { "$D_5E$9b": { "_yo": "_U_$_m12", "$$4$wf_": "_", "$50_$iKQ": "__" }, "_a": { "AiDPg": "GC", "_27i$M": "u", "b_": "$$e_6A" }, "$$Pt": { "_oto__look": "$__T", "_caller": "DBG_E$_5$_", "$_r$s_Z": "$Xz4" } }, "D_BUqBZC_": { "_": { "_nLs0$4": "P", "$": "_o_q", "lisP": "$" }, "M": { "_toString": "bkey", "_6nz2O_Wd": "__jYEt9c6", "_A7": "$_h113" }, "Akey": { "$$c$$1y$": "eB_", "$$$$D_U$$$": "$_5G_", "_fi": "$eeycall" } }, "tV": { "i_H$4hRc6R": { "K6$5X": "$L$", "$$e_$_$T": "_5__9oB", "_A__": "BE8_w_$" }, "$07$_$A": { "$O3$": "MSU_wu_q", "A___": "X_mo_v_$", "$$2": "$" }, "C": { "b$": "_", "_3_y_": "$1$dEU6$_y", "$Fll": "_7Srt9d_w" } } }, "__$$": { "$0": { "$": { "___$N": "$ref", "w__t": "__wB", "_": "_k" }, "Ea": { "jyL_wb_m_U$": "$25$$H41_", "d7eO": "akey", "x": "N$" }, "_$": { "___defineSe": "yzad_k$", "_dr_V$": "_", "W$j_m7$$$3": "_Rh8_$_$" } }, "$$$_": { "Z_z$_fiLP_$": { "FbZ9": "Obi", "tprototype": "g", "i2$c_a": "_DcallntOzb" }, "$wiW4J$1$": { "$$3s1$$4": "y_", "Wt$": "_$2$", "$gt": "$" }, "$$$": { "W81Y$vA7p": "_", "_0": "bcallerOwnP", "$MV$$_": "y__looku" } }, "$_$v2$bi$h$": { "V0_7yJe": { "_": "soc", "_pbq$$_a": "$property", "ak__JX": "PtoSt" }, "E___1_": { "$9$": "___", "_v9": "_length", "CuB$$7T$$$V": "b$an" }, "_CA_": { "$$37o5_$": "_", "__313p60$Fg": "__", "Md_Dz_$AUJ": "e2A6" } } }, "yz7G6$$3": { "$key": { "$": { "dY": "Ad", "$ref9oto": "$c", "$7__": "_$3_I" }, "kB3U_$": { "$_0M1_eW$": "_$o45O0", "$X_Ga__": "$6jlqZ8__", "ddef": "e54" }, "Q4n_V__j_s": { "$3y__$9_0v3": "a", "W227Rs": "V85_n$$$O_0", "$OY$b$_": "Wa" } }, "___twb1": { "rcon": { "_RcBK$xS": "$_3O$", "zfj": "wp", "$Y6$$_G": "upl" }, "_s_yA": { "$valueOf": "$$G9", "a$n": "_", "Dd36s03s5$": "$" }, "V$$ref": { "$_0_$9": "R8", "_": "evalueOf", "at": "$$J$H_$U$Xu" } }, "Z4$XG6n_9": { "$_$_": { "_2": "b$5", "Yor6": "d", "x1W4r": "$Az" }, "_3": { "x$X$_9c_AZe": "a$_9m_5$W_$", "eS": "AbD", "_OR___534": "z0KG$" }, "$__l": { "c_6": "$W", "Wref": "_dha", "eca": "_key" } } } }, "$": { "A$X_a2": { "$": { "____B5_H5z": { "$_1_D": "__2$___L", "beS": "$_$r", "U$cD8_9h_E$": "_9$_" }, "z1$evalueO": { "_g": "Y_", "a": "KJv", "_prototype": "_$" }, "_$23": { "_m6$$": "E", "_$_W": "l_H_$", "_BH": "$_U_" } }, "_B_2$4E$$_": { "wbind": { "__prke": "$e_Dv_w__s", "$$E": "T2xc9__Z1A", "$_A": "k41__$66$" }, "$": { "hPro": "_$_W", "Aq__5m": "_kGc0dlV", "d": "_apply" }, "D": { "d_c": "en", "x": "__p", "YP4$$ai$_6": "$Wvc" } }, "b61Mxg___": { "$P8$94H2$$Y": { "$$ref": "xUK2$_3$$6$", "D$": "rw$", "Ekey": "___" }, "n$F$": { "AlB7YLz$vU$": "_T8_", "c": "x", "_": "El" }, "N_$b_Gcal": { "zTb97": "lkey", "__ak": "W", "$9p": "__" } } }, "$_$": { "$key": { "a$3": { "c$9hcCozb$": "Lkq$K$NT_V_", "zcal": "_", "E__proto___": "_$$9$D" }, "$_7X": { "W$__en": "$key", "$Cgjb5m$": "$", "$$w_": "c_i$7lX$" }, "_u_": { "$q3_0X8$$_S": "_", "$__wUaFC__": "btoString", "_": "$$S_$_m1" } }, "BF": { "$": { "_$_Uy733": "d", "$3u2$l_": "_r", "$": "$y$_" }, "t20z$92$_": { "W": "E2VG_", "$$B": "u$$_4Q", "$0_$_8L": "yb" }, "c_": { "A$": "Kll", "C_83": "$", "$h": "$Yb" } }, "$$": { "o1SD_86": { "__U1hB$": "e_1pa_$0", "$$x_$_z0": "$_$b_9", "$Bl_lookupG": "d0tM$7J0j" }, "$20TZ": { "Xha": "$b", "V_l$$$_x5$Z": "$$pck$_sB", "d": "q$isPrototy" }, "_SSUsBV": { "__3": "$__1c_DR7", "nI_": "R$$__$C_$", "$g$$": "YR" } } }, "_": { "$X": { "fT_Eor_$$_3": { "_": "_s_v9", "W77xE": "KasOwnPrope", "_g": "_$F___" }, "uPrope": { "B2": "_td", "$F_$Z": "f4co", "G$3e_X_": "B1" }, "O$": { "pG": "$921$3$D$", "_$$3$_$$_g": "_", "$up$": "$prototype" } }, "$8$t": { "_$I6_7_Tv$$": { "_0_j_1": "W$A", "_01_P": "_$5YV8$_", "$length_f__": "W$d9$$$" }, "b": { "$2$Y_D$": "$$", "xYC": "wH__4__$4", "__O16": "$8$C" }, "$$DM_": { "$B_x3": "c$", "__U": "Ft3$13_", "c94L": "La$" } }, "a_": { "w": { "_$W_": "dtKGd$a5$2", "z": "tB$$eB$N_93", "_5$wWMo$I": "gcall" }, "$3_KNT": { "_p": "b$b$D_u", "xyEHXz1_": "E4z$itF$Y", "$__": "$ire" }, "$$2_J62_": { "W_": "NBS", "V": "$__", "P": "VXE" } } } } } } } } }i18next-i18next-db698b1/test/typescript/test.namespace.many-keys.ts000066400000000000000000000217371527173754700253500ustar00rootroot00000000000000export type TestNamespaceManyKeys = { ahTLUS: 'RRqKtS'; smcGI8: 'zaXLjV'; z55F29: 'G92MeM'; SjPGTX: 'dA2VMd'; '5t0lvf': 'GryAaK'; VE4Q3t: 'plpFxw'; o2FjIO: 'eb7NCR'; HU8KyP: 'rKYIRl'; lUeEqX: 'v36U2c'; maEyKj: 'IJcQ8C'; zKQ3Iw: 'sOtMjv'; ShXpud: 'IvmW9C'; qAq13y: 'O1uEIe'; mB5uTl: 'IQNnpF'; ZbSAEz: 'kLVbHq'; YBmPQM: 'Xmwmay'; IQpuEE: 'uQfFvS'; fkrFlE: 'LJJKpK'; Nv2jN6: 'C49aXS'; mCDoYQ: 'BmQYJR'; kivB1Z: 'ojucAI'; GuBL4f: 'i1Eh08'; f5TPCJ: '9z2UTi'; HwMQuu: 'MuTfH2'; Zbn6Od: 'oHB18s'; '5Mn18U': 'G1QBbg'; '7ureKh': 'd0os0S'; QeXnrW: 'hnzY0S'; '738OZN': 'ZQVEXE'; JvrTIS: 'xijxL7'; Buw7Ri: 'jUsrGh'; btMhvS: 'vuEbAd'; Jbl7Uc: 'yqloRg'; '1sFptg': 'mvrDl8'; WxY6qZ: 'VlJIsq'; '1RCqRl': '6nLcpd'; lYo23d: 'N6ZEbe'; scshDM: '6PbTtG'; evN2b2: 'rV0Kgi'; WM6ILI: 'ypFZ6a'; UQJaHb: 'nltzZz'; geH6WC: '2ScJAT'; '2HLXlV': 'dDcb9Z'; vYptkA: 'OZYGtP'; a7e8yP: '8wzW2Y'; wt3pJv: '04T2zG'; EQPy68: 'ryj7nY'; '6Xscqd': 'iij47b'; wSPIHQ: 'ZDoGfY'; PT00oe: 'zM4eEN'; TCwo9z: 'WVsomH'; Chmh3Y: 'EHiSux'; HySIHT: 'fUXzy0'; Ijr4xk: 'kQ4FhG'; yrkRD2: 'REVskv'; ET8toW: '1B7dcN'; miMO8Q: 'k6AgwJ'; BDWhvR: 'iTsyJj'; NYJH13: 'WnaWse'; e8fLPM: 'JOp5Hf'; DBXSF9: 'ni33nm'; jCwxeP: 'azWTbf'; jza2J2: '26Bxme'; IZXZL7: 'ptNW9w'; DnlsM2: 'IuYx2L'; MN1wAf: 'tXm2Cz'; '3CBmUp': 'MPnKwY'; WMbtyw: 'uMHh3R'; AvmRBP: '9BS7FW'; AJhLrW: 'GlEVPh'; LcfQcA: 'ZQJZ7l'; aLN2yZ: '0IPjJV'; sP30PF: '9LobFy'; YfkIi6: 'C4Bhru'; gNttK9: 'XUOCV1'; xOaSef: 'Ih1yIc'; TJ6whv: 'wIlcZU'; QEhSEB: 'C7wkhZ'; AqCG4m: 'NiGUPm'; '6WC3Ku': 'JtPRSe'; PLg8Ok: '44yWcK'; qhLAAM: 'fZSQSd'; CPVpuZ: '35Nwsh'; chNmDp: 'T9gTmp'; OD9alT: '8LstWd'; '4gOUU0': 'JXmd4i'; DQsx9s: 'R1h1B4'; '9jy6cX': 'SivKFp'; '2acHIo': 'OrQCVN'; JBbXAb: '7eljgt'; U4ke5N: 'nHEOjq'; '6GBNPU': 'awRn5w'; nYJpgV: 'fbi3cF'; Xwtnn2: 'g2QJnn'; '8hAYlo': 'ZJiMmC'; AWidA5: 'qRRltA'; dXY8Y6: 'wRXWy7'; uofotL: 'r3yaKM'; I3HEzD: 'ncMMJl'; FXRFHt: 'xz6vxe'; O8vq3p: 'pHghvz'; '8J6LxC': '1wJaXw'; wwA4JB: 'Cq4efO'; CnVCuU: 'kFUVO6'; YrPxH2: '8sBu1b'; '72L4im': 'ysJMD0'; mXMqyr: 'wA8teJ'; FTW9Ao: 'b1Ou0l'; QEvOta: 'b3aOe7'; CjEBUA: '4rlEQV'; '8Dl9iR': 'Cx6t9E'; YfAiJJ: 'a0LZhc'; F9vNMk: '95KBRV'; IieVyw: 'YGXBaN'; AyOeUz: '6gPlx1'; KW9qIj: 'ZioA73'; c9ChRo: 'SIV3S1'; KmVszF: '6wfGaA'; '9q09oL': 'Jq0VoU'; HQqzxv: 'LoeYlq'; '3jm97U': 'C9tjfL'; IHgU9W: 'QH6PVv'; ZycX9k: '9O8neL'; GKhJgI: '3aumSN'; BZrfIM: 'ZQoPsv'; Bdycwc: 'fmTooK'; Bhb3nk: '8rlPRU'; '3Uy9Dw': 'YshS4V'; qvhrvb: 'FZY1xW'; zuZrli: 'eKtrNS'; WAYDYJ: 'zOW9b5'; HYbrQK: '5PjpYS'; l63uEL: 'D0J0TI'; RuAYG5: '2gEQmJ'; '63xkLq': 'kDPN71'; tpyCDP: 'PlGgKN'; Nksfkd: 'c9hbRR'; dtKcVD: 'qz8DAe'; xjw1xr: 'qcUqkX'; fQIHRY: 'qZMfnT'; JLfOwE: 'UZ18Uk'; '7ePgD2': 'n4Rggn'; JCjfBU: 'gvUqNY'; BvGDHo: 'lVNNYw'; EBikw4: 'xr79sL'; '4rXBNY': 'Odns9h'; k1L7OH: '1qe81E'; eDdnfk: 'nX6sll'; JmFgX5: 'CIf6QJ'; dSp4wa: 'woJXsg'; '3oBl9R': 'xD1VXy'; '1AL3NS': 'z6W4LM'; cdMx36: 'xo6cSc'; zMA1Nx: 'QW39HO'; '6RqFde': 'pnCF9s'; NmoS3C: 'TAYln7'; rTrE7Y: 'OqLQ55'; Y6z5lg: 'Icyp3N'; '0SHVVZ': 'y4QWGR'; kgL2Il: 'O4RzJn'; FvFUTY: 'IFSir1'; LxLHz3: 'alvyrq'; KxgQ4B: '7qgqyQ'; '4sDgEf': 'HINO8j'; m6WhNN: 'LF4kvC'; JFslA6: 'gCPEec'; KpqfiX: 'iwVH3V'; XJLlJX: '5w4jtY'; f1fua1: 'lQGvx5'; whtM6s: 'CEgI30'; FBAR2X: 'mYHnJ0'; PyJ9cN: 'SCRz5z'; drnDj0: 'UIbH7l'; '41DGob': 'Uo81Vj'; nTmhnQ: 'vEjdIw'; VD98DV: 'j7gaHg'; p0Thdc: 'FyIZJh'; ZnsQlx: 'skMJIH'; byO23S: '4IIr6L'; tT9ALm: '22353y'; lOGg0B: 'KB2BaM'; tEytMb: 'qkxzCM'; zTMVrr: 'AKJAFQ'; JcXHq0: 'uPvvAp'; p4u5Pj: 'jEz0Pu'; CyqFEW: 'IcS6Xp'; kSd8eb: '0YeYOK'; ksKXKm: '9GflwT'; QHa57K: 'ijtO1T'; bn2qSE: 'k7IxOL'; '3jPLUC': 'rgW7DR'; cgZ8Tt: 'qpO4Ey'; TtBXsw: '7nKfhg'; gxJQax: 'huqMKv'; '3QkIna': '3wjJdi'; v1zw5z: 'qRFuqC'; FNjZQh: 'ayOp30'; kAgpDy: 'hSP2lM'; '1XrS7v': 'vpjjfH'; '43NvuF': 'Q07llt'; KWsrXX: 'lN3LLy'; NHg0aT: 'UOUhkM'; LfKvjl: 'MCtKed'; ktVL1L: 'BajvHJ'; pWW7Tk: 'Wfhm0C'; CNAsW5: 'RP0Uhn'; X8fOQ9: 'hNc2ow'; hIPqY5: 'plylrM'; krjW0g: 'nETqX3'; '0IfXxW': 'aUIuQa'; ay3kRG: 'Nktk0L'; AVP45G: '4gJQp1'; WVd8XB: 'n5WCKs'; S7NkXD: 'E3FrXt'; Vs2fY1: 'rOmYTD'; VetvU0: 'L6zU5E'; ThIhc6: 'GTGcqt'; '48IbRj': 'KG4iwI'; QJUfeJ: 'uA25Bp'; V4sZ4r: 'LrXueV'; w3R0Cb: 'BghX0c'; DN4Apq: 'fpDqOP'; '3T9vEm': 'Ubf2uc'; pzzkdY: '7eCXp2'; xuFJD1: 'Zj4ruK'; qTIpii: 'g6T2rY'; HAD33b: '96zkc1'; '74h8im': '9h4gb7'; WTFyGJ: 'AaVXeJ'; O9ener: 'KYeYB5'; GU4AyH: 'SFh0ru'; lqBlkE: 'FrHaVg'; IiSe5k: 'frcEfk'; '9AFYWX': 'Lp8R3W'; jenIUJ: 'OIy9hy'; O8hRFo: 'GvJ561'; '6pfeWh': 'FSf6o9'; '8nGKJb': '9ozDtT'; Dwbt7p: 'flrBmV'; ktn8qU: 'jI7dNe'; hkT62E: 'DTfwCt'; zGYm5Z: 'BPYrct'; '4XYM1S': 'j8433o'; '1h2CJA': 'z5iBfc'; fFn6pD: '44z20e'; nPi1Db: 'eJcAH0'; dpDQsE: 'c3EuT2'; lxnmsV: 'ByLa7i'; '2SvxDV': 'hK9tXU'; nGG276: 'EYJf1W'; rdc07G: 'm2MGjG'; UHAiWp: 'RVqRPO'; IFg2ge: 'sduVWb'; YLQxvv: 'NKiCUV'; kXIhDE: 'aJTwud'; t9NQuc: 'UOrJtM'; Ph7vPl: 'DVTRz3'; j6kvXp: 'dN96mf'; z8bANi: '56M2iG'; zxe1o5: 'PlT1lT'; wuMPPZ: 'wApjgE'; z6rhDS: 'HzFWKD'; F9SoSD: '1btcG6'; VUgnDj: 'xuUyZn'; oHIvzR: 'ngGEGZ'; DUrFas: 'PF01Er'; YMTKAg: 'Ebl1dj'; ijswcY: '1DpnwS'; gGb0ga: 'UiaVdm'; qF2OvY: 'qSZ8ra'; oVNwsH: 'rDzE4Z'; cH1Y9T: 'Wi3X09'; '6pVSvs': 'DK0hi2'; gdvcPJ: 'Bg2Tz1'; ju1p1N: 'eWHieu'; nKPmR8: 'fIH9qZ'; '9GICPq': 'ZJgTJq'; LLkyaJ: '2joTWO'; mUaY0f: 'mRb6iB'; Y6kIPV: '0NyVYj'; W9P1fO: '1iPvzw'; mFwJeh: 'jsYfLm'; '7v2i5Y': 'wF5jIC'; S6KWXR: 'Sy3gId'; R6Gx2X: '7ZtufJ'; kdzsjY: '3xGUrl'; '7RnwWS': 'BfU2aK'; Va1OvE: 'UVCZY7'; hIjqtV: 'NlBF5X'; '7C11bU': 'lIgCDy'; qVV68k: '8z0npX'; KM0OQo: '30x1Ye'; mqIunB: '3Xboas'; N2TtRr: 'Bivn0x'; naOuN6: 'jCQ1FF'; hGF5Wj: 'eqdVmj'; CQTGfB: 'rMGAn7'; MQ9rSU: 'kq8Hbg'; B4dq4J: '7lqDaa'; e3UCqK: '43F4uF'; '5dKTbE': 'XVpB5T'; QgKYuS: 'voONCI'; W4zIOc: 'gLV2d4'; '8g724n': 'KBKkUr'; CLi6Ck: 'mUzxjC'; QMCkjl: 'vHzA4b'; VvDFIJ: '677xk7'; '7NIJLW': 'nE0ymR'; YDsVsj: 'X3dd90'; G0Igws: 'nGOFYh'; Z3cORu: 'HOUPNT'; P1TEgD: '2RB9o5'; STnBw3: 'L19MWC'; Lb6K7L: 'rE1zPs'; nfTXRL: 'osEkL4'; pW15tZ: 'QzF72T'; LCsiOz: 'iRwHRx'; lzHIFN: '87zYLP'; '4Xpkak': 'RPTtK9'; hd1Rkg: 'pgJwdI'; wiuXn4: 'kz0SoH'; '5P0xUZ': 'ZyYMzR'; DLlt6s: '2OlCVc'; mTRhbA: 'POocqu'; arhnkl: 'JjjPic'; pF5l0o: 'Oe48qK'; IzZ8Sx: 'Mc5jfI'; '1m3x53': 'Mt2ZNK'; ex016c: '21g7kH'; NsRBw3: 'drr4qd'; czentf: 'iLgzzT'; NxB792: 'cBdmTq'; EXbm7E: 'nCErqD'; b7Nal2: 'w51yRo'; XsBD5p: 'Queyk7'; B69HdP: 'wSEmly'; Ngl6f9: 'qGUDTz'; '4vq7Wf': 'OZJyZC'; jwkfBK: 'NyphT1'; wwpJuS: 'j7ceQC'; '0dOYah': 'nLr2Wl'; u3OIqQ: '8OQKQq'; FczqXO: 'B76R7b'; Y77x3g: 'i03RY5'; hHfLyX: 'T9XcG8'; hoZgqR: 'Rhyucb'; ehTbaz: 'HSYgho'; zYCQ5v: 'h8bILZ'; zAgTnS: 'KOQcNf'; mJEEOt: 'JdZkwO'; jd23rW: 'sDksv7'; FwyYZT: '5JZUKE'; vhYXp6: '6ytkLx'; CEkWml: 'KdZ7RY'; UN0KZ3: 'mA3cGd'; qm0oLR: 'vs3MTv'; rY2lQT: '3ADpJq'; h5dKEe: 'JqrcsY'; acvm7R: 'QjUuGf'; XZCPrM: 'M155Ed'; '5xCPVK': '71IyFL'; ZnNwW3: 'eOtxbq'; jBBuw6: 'v6eDi2'; DcAKVP: 'flLH85'; VqRs71: 'HDdc5G'; '8Bewxq': 'Wv7iao'; wDW8cO: 'LZEgC0'; e4n4GO: 'OqWZLQ'; JW3w2L: 'TOytJX'; VAzRGy: 'e9f5MI'; HRNAAF: 'XN8Mer'; EnrBK2: 'kP3HZX'; F3IEgn: 'WRiKTX'; kAfXez: 'SCxb7J'; '4GFfMZ': 'uLcmfz'; czXy65: 'HZe0lV'; B5Qlqt: 'EVD6hN'; W9Iivv: 'Cafb5V'; Q6jWgp: '8oLFBO'; n368qZ: 'UWSNFz'; yEI7w4: '5NTmY1'; IStWp8: 'raV9qI'; hpqXl9: 'mggvcS'; DrYgua: 'Ty4KAi'; by4I7X: 'aQvbGx'; dbOQNn: 'vqw738'; '1hDaYO': 'wRrHRh'; GhBl1Q: '5ip7Ft'; aiGoC1: 'etrK9n'; S7Ol35: 'eMIkYI'; '7EyPHn': 'LKatQs'; EJUow3: 'yWOjEj'; gArJuV: 'BwRO51'; GvL1yc: 'trmt3J'; ogfuu9: 'wWTz3u'; hEO6ci: 'Bsi4Uo'; B2Lubk: 'Y188iR'; JXMIMY: 'tFcUpy'; '9RzDvt': 'lGX8OY'; QIzJ2m: 'TDSGO5'; WtpG9u: '0poCGY'; wtPKrz: 'pQlewi'; fpPYN4: '9NoSes'; LpvhLc: 'EcWgZy'; '5lhpfb': 'S1BIlh'; RKZ0Nm: 'e3za2B'; A8J2Zt: 'daKy8x'; CSFSIS: '1nl7eZ'; ivGcU7: 'TDBOlu'; GmRFij: 'T086Qa'; F6L3to: 'KNzwSj'; YxAPrk: '3m9Brw'; UnYYMI: 'p7f2rC'; e3fSP3: 'piGBzf'; '9QwcJI': '9YrZuz'; mikA9x: 'Z5gTWd'; '7Swzxc': 'idkox4'; '5rlsm0': 'wCdLV1'; swl0nk: 'ssvjGs'; wJLej2: 'Qp5vFY'; PhwG3l: 'wYwI00'; XQtpSN: '9jALAx'; TpZhah: 'Dt5PmQ'; '3cA6dI': 'AM1rb2'; NHrOUy: 'Q2wc0C'; eysOoh: 'c1yCbp'; uNn3iF: 'X0PJq4'; FB8DVn: 'KxZiqD'; mJRh6z: '54Act7'; MJaXdf: 'DymypY'; E5ReV4: 'TOBd8S'; tPMV1i: 'Kp0fzY'; '4WjH7H': 'LULAif'; '20dtfl': 'eY1i0G'; uy4xNx: 'AsBJkC'; Ep7HyL: 'qcAnpe'; m5xbqz: 'zNJUFa'; UZu8xp: 'j2KdQu'; hPDYW8: 'mjEiDb'; ppLQAr: 'XXovgI'; JyIM98: '2cbNYm'; ZC5AGJ: 'MIIpBH'; XYNNsA: 'iDjEQm'; SSlRKp: 'LqIiXF'; MTEcvL: 'FKkjFY'; q3T8ie: 'PtEcw4'; OwpXXj: 'QugDGN'; gKFjmB: 'Lvv5pe'; oVunE7: '9yU5Wu'; '2xyU6O': 'xja3Zx'; }; i18next-i18next-db698b1/test/typescript/test.namespace.samples.ts000066400000000000000000000035461527173754700250750ustar00rootroot00000000000000export type TestNamespaceCustom = { foo: 'foo'; bar: 'bar'; baz: { bing: 'boop'; }; qux: 'some {{val, number}}'; inter: 'some {{val}}'; interUnescaped: 'some unescaped {{- val}}'; interUnescapedNoSpace: 'some unescaped {{-val}}'; interUnescapedFormatted: 'some unescaped {- val, number}}'; nullKey: null; 'empty string with {{val}}': ''; }; export type TestNamespaceCustomAlternate = { baz: 'baz'; foobar: { barfoo: 'barfoo'; deep: { deeper: { deeeeeper: 'foobar'; }; }; }; }; export type TestNamespaceFallback = { fallbackKey: 'fallback'; }; export type TestNamespaceOrdinal = { place_ordinal_one: '1st place'; place_ordinal_two: '2nd place'; place_ordinal_few: '3rd place'; place_ordinal_other: '{{count}}th place'; }; export type TestNamespaceContext = { dessert_cake: 'a nice cake'; dessert_muffin_one: 'a nice muffin'; dessert_muffin_other: '{{count}} nice muffins'; beverage: 'a classic beverage'; beverage_beer: 'fresh beer'; beverage_water: 'cold water'; }; export type TestNamespaceContextAlternate = { game: 'A fun game'; game_chess: 'Chess'; game_monopoly: 'Monopoly'; }; export type TestNamespacePlurals = { foo_zero: 'foo'; foo_one: 'foo'; foo_two: 'foo'; foo_many: 'foo'; foo_other: 'foo'; }; export type TestNamespaceNonPlurals = { test: 'Test'; test_2: 'Test 2'; // 'test_form.title': 'title'; test_form: { title: 'title'; }; }; export type TestNamespaceInterpolators = { just_a_string: string; simple: 'This is {{olim}}'; simple_with_format: 'This is {{olim, format}}'; simple_multiple_keys: 'This has {{more}} than {{one}}'; keypath: 'Give me one day {{out.there}}'; keypath_with_format: 'Give me one day {{out.there, format}}'; keypath_multiple: '{{some.thing}} asd {{some.else}}'; keypath_deep: '{{living.in.the}} in the sun'; }; i18next-i18next-db698b1/tsconfig.json000066400000000000000000000012051527173754700174600ustar00rootroot00000000000000{ "compilerOptions": { "module": "ES6", "target": "ES2017", "lib": ["ES2020", "DOM"], "jsx": "react", "moduleResolution": "Bundler", "forceConsistentCasingInFileNames": true, "strict": true, "noEmit": true, "baseUrl": ".", "ignoreDeprecations": "6.0", "paths": { "i18next": ["./index.d.mts"] }, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "skipDefaultLibCheck": true, /** * setting this to `false` to throw an error when d.ts file have invalid code * @see https://github.com/i18next/i18next/issues/2168 */ "skipLibCheck": false } } i18next-i18next-db698b1/tsconfig.lint.json000066400000000000000000000003371527173754700204320ustar00rootroot00000000000000{ "extends": "./tsconfig.json", "compilerOptions": { "allowJs": true }, "include": [ "./typescript", "./test", "./index.*", "eslint.config.mjs", "vitest.*.mts", "rollup.config.mjs" ] } i18next-i18next-db698b1/typescript/000077500000000000000000000000001527173754700171615ustar00rootroot00000000000000i18next-i18next-db698b1/typescript/helpers.d.ts000066400000000000000000000037661527173754700214310ustar00rootroot00000000000000// Types export type $Dictionary = { [key: string]: T }; export type $SpecialObject = object | Array; // Types Operators /** All the way down. */ export interface $Turtles { [x: string]: $Turtles; } export type $MergeBy = Omit & K; export type $OmitArrayKeys = Arr extends readonly any[] ? Omit : Arr; export type $PreservedValue = [Value] extends [never] ? Fallback : Value; export type $NormalizeIntoArray = T extends readonly unknown[] ? T : [T]; /** * @typeParam T * @example * ``` * $UnionToIntersection<{foo: {bar: string} | {asd: boolean}}> = {foo: {bar: string} & {asd: boolean}} * ``` * * @see https://stackoverflow.com/questions/50374908/transform-union-type-to-intersection-type */ type $UnionToIntersection = (T extends unknown ? (k: T) => void : never) extends ( k: infer I, ) => void ? I : never; /** * @typeParam TPath union of strings * @typeParam TValue value of the record * @example * ``` * $StringKeyPathToRecord<'foo.bar' | 'asd'> = {foo: {bar: string} | {asd: boolean}} * ``` */ type $StringKeyPathToRecordUnion< TPath extends string, TValue, > = TPath extends `${infer TKey}.${infer Rest}` ? { [Key in TKey]: $StringKeyPathToRecord } : { [Key in TPath]: TValue }; /** * Used to intersect output of {@link $StringKeyPathToRecordUnion} * * @typeParam TPath union of strings * @typeParam TValue value of the record * @example * ``` * $StringKeyPathToRecord<'foo.bar' | 'asd'> = {foo: {bar: string} & {asd: boolean}} * ``` */ export type $StringKeyPathToRecord = $UnionToIntersection< $StringKeyPathToRecordUnion >; /** * We could use NoInfer typescript build-in utility, * however this project still supports ts < 5.4. * * @see https://github.com/millsp/ts-toolbelt/blob/master/sources/Function/NoInfer.ts */ export type $NoInfer = [A][A extends any ? 0 : never]; i18next-i18next-db698b1/typescript/options.d.ts000066400000000000000000000730011527173754700214470ustar00rootroot00000000000000import type { $MergeBy, $PreservedValue, $Dictionary } from './helpers.js'; /** * This interface can be augmented by users to add types to `i18next` default TypeOptions. * * Usage: * ```ts * // i18next.d.ts * import 'i18next'; * declare module 'i18next' { * interface CustomTypeOptions { * defaultNS: 'custom'; * returnNull: false; * returnObjects: false; * nsSeparator: ':'; * keySeparator: '.'; * allowObjectInHTMLChildren: false; * resources: { * custom: { * foo: 'foo'; * }; * }; * } * } * ``` */ export interface CustomTypeOptions {} /** * Per-package namespace types for monorepos. Augment this in each package's * `i18next.d.ts` instead of `CustomTypeOptions.resources` when several packages * need their own namespaces — otherwise TypeScript reports TS2717 on merge. * * Works alongside the legacy `CustomTypeOptions.resources` field; both end up * in `TypeOptions['resources']`. * * Scalar type options like `defaultNS`, `returnNull`, `enableSelector`, etc., * still belong on `CustomTypeOptions` — this interface is for namespace * resource types only. * * @see https://github.com/i18next/i18next/issues/2409 * * @example * ```ts * // packages/ui/i18next.d.ts * declare module 'i18next' { * interface ResourceNamespaceMap { * '@repo/ui': typeof uiTranslations; * } * } * ``` */ export interface ResourceNamespaceMap {} /** * This interface can be augmented by users to add types to `i18next` default PluginOptions. */ export interface CustomPluginOptions {} type _LegacyResources = CustomTypeOptions extends { resources: infer R } ? R : object; // Per-property merge of two object types. Unlike `L & R`, which TypeScript // collapses to `never` whenever ANY property has incompatible literals (so a // single same-key/different-literal conflict wipes out the whole namespace), // this iterates keys and intersects them individually — the conflicting key // becomes `never`, the rest survive. type _PerPropMerge = { [K in keyof L | keyof R]: K extends keyof L ? K extends keyof R ? L[K] & R[K] : L[K] : K extends keyof R ? R[K] : never; }; // Drop properties whose value resolved to `never`. Without this, the // conflict key would leak into `keyof Resources[ns]`, then poison // `KeysBuilder` recursion (it tries to walk a `never` value) and break // `t()` overload resolution for the entire namespace. // NOTE: must use the `Pick` form. A `[K in keyof T as ...]` // remap does NOT eagerly evaluate `T[K]` for intersection types, so conflict // keys would survive the filter. type _NonNeverKeys = { [K in keyof T]: [T[K]] extends [never] ? never : K; }[keyof T]; type _DropConflictKeys = Pick>; // When the same namespace exists on both sides, deep-merge per property and // strip same-key/different-literal conflicts. Otherwise pick from whichever // side has it. type _MergeNamespaces = { [K in keyof L | keyof R]: K extends keyof L ? K extends keyof R ? _DropConflictKeys<_PerPropMerge> : L[K] : K extends keyof R ? R[K] : never; }; // NOTE: empty legacy + empty registry must stay `object` so unconfigured projects // still get `$IsResourcesDefined === false`. type _MergedResources = [keyof _LegacyResources] extends [never] ? [keyof ResourceNamespaceMap] extends [never] ? object : ResourceNamespaceMap : [keyof ResourceNamespaceMap] extends [never] ? _LegacyResources : _MergeNamespaces<_LegacyResources, ResourceNamespaceMap>; export type TypeOptions = $MergeBy< $MergeBy< { /** @see {InitOptions.returnNull} */ returnNull: false; /** @see {InitOptions.returnEmptyString} */ returnEmptyString: true; /** @see {InitOptions.returnObjects} */ returnObjects: false; /** @see {InitOptions.keySeparator} */ keySeparator: '.'; /** @see {InitOptions.nsSeparator} */ nsSeparator: ':'; /** @see {InitOptions.pluralSeparator} */ pluralSeparator: '_'; /** @see {InitOptions.contextSeparator} */ contextSeparator: '_'; /** @see {InitOptions.defaultNS} */ defaultNS: 'translation'; /** @see {InitOptions.fallbackNS} */ fallbackNS: false; /** * @see {InitOptions.compatibilityJSON} * @deprecated has no effect, removed in v27. Remove it from `CustomTypeOptions`. */ compatibilityJSON: 'v4'; /** @see {InitOptions.resources} */ resources: object; /** * Flag that allows HTML elements to receive objects. This is only useful for React applications * where you pass objects to HTML elements so they can be replaced to their respective interpolation * values (mostly with Trans component) */ allowObjectInHTMLChildren: false; /** * Flag that enables strict key checking even if a `defaultValue` has been provided. * This ensures all calls of `t` function don't accidentally use implicitly missing keys. */ strictKeyChecks: false; /** * Flag that makes the `t()` options required for a string with interpolation * variables, so that `{{name}}` cannot be left out of a call. Applies to the * string-key API (with `strictKeyChecks`, also to `t(key, defaultValue)`) and * to the selector API. Messages under `parseInterpolation: 'icu'` or `'mf2'` * require their arguments regardless of this flag. */ strictInterpolationChecks: false; /** * Prefix for interpolation */ interpolationPrefix: '{{'; /** * Suffix for interpolation */ interpolationSuffix: '}}'; /** * Separates the variable from its format, as in `{{price, currency}}` (since v26.7.0) * @see {InterpolationOptions.formatSeparator} */ interpolationFormatSeparator: ','; /** @see {InterpolationOptions.unescapePrefix} */ unescapePrefix: '-'; /** @see {InterpolationOptions.unescapeSuffix} */ unescapeSuffix: ''; /** * Whether to extract interpolation variables from translation strings at * the type level. When `true` (default), the type system parses each * resource value for `{{variable}}` patterns and types the `t()` options * accordingly. * * Set to `false` when your translation strings use a different * interpolation syntax that the i18next type extractor cannot understand * — e.g. ICU MessageFormat plurals like `{count, plural, one {{count} row} * other {{count} rows}}` would otherwise produce phantom variable names * because the default extractor naively matches the outermost `{{` … * `}}`. This flag is type-only; runtime interpolation is governed by * `InterpolationOptions` and is unaffected. * * Set to `'icu'` with `i18next-icu` to type `t()` options from the ICU * MessageFormat arguments instead: `{name}` takes `string | number`, * `{n, number}`, `plural` and `selectordinal` take `number`, `{d, date}` * and `{t, time}` take `Date`, `select` takes its case keys or any string * (for `other`), and arguments nested in cases are required too. * `interpolationFormatTypeMap` overrides a type by its format name (e.g. * `date: Date | number`). Options become required for a message with * arguments. * * Set to `'mf2'` with `i18next-mf2` to type `t()` options from the * MessageFormat 2 variables: `{$name}` takes `string | number`, a * variable annotated with `:number`, `:integer`, `:currency`, `:percent` * or `:unit` (directly or through `.input`/`.local`) takes `number`, * `:datetime`, `:date` and `:time` take `Date`, `:string` takes `string`, * option and markup variables (`minimumFractionDigits=$digits`, * `{#link href=$url}`) take `string | number`, and `.local` variables are * not arguments. `interpolationFormatTypeMap` overrides a type by its * function name. * * @default true */ parseInterpolation: true; /** * Use a proxy-based selector to select a translation. * * Enables features like go-to definition, and better DX/faster autocompletion * for TypeScript developers. * * If you're working with an especially large set of translations and aren't * using context, you set `enableSelector` to `"optimize"` and i18next won't do * any type-level processing of your translations at all. * * With `enableSelector` set to `"optimize"`, i18next is capable of supporting * arbitrarily large/deep translation sets without causing any IDE slowdown * whatsoever. * * Set `enableSelector` to `"strict"` to require an explicit namespace as the * first selector path segment in every call. The selector proxy stops * exposing the primary namespace's keys flat on `$` — even * `useTranslation('only')` must use `$.only.foo`, never `$.foo`. At runtime, * a leading segment matching the scope's namespace list (primary included) * is always rewritten as a namespace prefix, fully decoupling selector * shape from resolution scope. Use this when you want a single mental model * for selector paths regardless of how many namespaces a hook was created * with, and to remove the silent miss that flat-primary paths can otherwise * cause in multi-ns hooks (see [#2429](https://github.com/i18next/i18next/issues/2429)). * * `"strict"` mode is incompatible with the `"optimize"` shortcut. If you * have keys whose names match sibling namespaces (the * [#2405](https://github.com/i18next/i18next/issues/2405) pattern), do not * enable strict mode — the leading-segment rewrite would route those keys * into the wrong namespace. * * @default false */ enableSelector: false; /** * Maps interpolation format specifiers to their expected value types. * * By default, i18next infers types from built-in formatter names: * - `number`, `currency` → `number` * - `datetime` → `Date` * - `relativetime` → `number` * - `list` → `readonly string[]` * - No format specifier → `string | number` (since i18next stringifies values at runtime) * * Use this option to add mappings for custom formatters or to override * the built-in defaults. * * @default {} (empty — built-in defaults apply) * * @example * ```ts * interface CustomTypeOptions { * interpolationFormatTypeMap: { * // custom formatter * uppercase: string; * // override built-in * currency: string; * }; * } * ``` */ interpolationFormatTypeMap: {}; /** * The variables `interpolation.defaultVariables` fills in at runtime (since v26.7.0). They * become optional in the `t()` options, also with `strictInterpolationChecks`. * * @default {} * * @example * ```ts * interface CustomTypeOptions { * defaultVariables: { appName: string }; * } * ``` */ defaultVariables: {}; }, CustomTypeOptions >, // HACK: apply merged resources *after* CustomTypeOptions so registry contributions // survive when CustomTypeOptions.resources is also defined. Without this // second step, the inner $MergeBy would replace the default `resources: object` // with CustomTypeOptions['resources'] alone, dropping the registry namespaces. { resources: _MergedResources } >; export type PluginOptions = $MergeBy< { /** * Options for language detection - check documentation of plugin * @default undefined */ detection?: object; /** * Options for backend - check documentation of plugin * @default undefined */ backend?: T; /** * Options for cache layer - check documentation of plugin * @default undefined */ cache?: object; /** * Options for i18n message format - check documentation of plugin * @default undefined */ i18nFormat?: object; }, CustomPluginOptions >; export type FormatFunction = ( value: any, format?: string, lng?: string, options?: InterpolationOptions & $Dictionary, ) => string; export interface InterpolationOptions { /** * Used to separate format from interpolation value * @default ',' */ formatSeparator?: string; /** * Escape function * @default str => str */ escape?(str: string): string; /** * Always format interpolated values. * @default false */ alwaysFormat?: boolean; /** * Escape passed in values to avoid xss injection * @default true */ escapeValue?: boolean; /** * If true, then value passed into escape function is not casted to string, use with custom escape function that does its own type check * @default false */ useRawValueToEscape?: boolean; /** * Prefix for interpolation * @default '{{' */ prefix?: string; /** * Suffix for interpolation * @default '}}' */ suffix?: string; /** * Escaped prefix for interpolation (regexSafe) * @default undefined * @deprecated inserted into the RegExp unescaped, removed in v27. Pass the literal delimiter as `prefix`. */ prefixEscaped?: string; /** * Escaped suffix for interpolation (regexSafe) * @default undefined * @deprecated inserted into the RegExp unescaped, removed in v27. Pass the literal delimiter as `suffix`. */ suffixEscaped?: string; /** * Suffix to unescaped mode * @default undefined */ unescapeSuffix?: string; /** * Prefix to unescaped mode * @default '-' */ unescapePrefix?: string; /** * Prefix for nesting * @default '$t(' */ nestingPrefix?: string; /** * Suffix for nesting * @default ')' */ nestingSuffix?: string; /** * Escaped prefix for nesting (regexSafe) * @default undefined * @deprecated inserted into the RegExp unescaped, removed in v27. Pass the literal delimiter as `nestingPrefix`. */ nestingPrefixEscaped?: string; /** * Escaped suffix for nesting (regexSafe) * @default undefined * @deprecated inserted into the RegExp unescaped, removed in v27. Pass the literal delimiter as `nestingSuffix`. */ nestingSuffixEscaped?: string; /** * Separates options from key * @default ',' */ nestingOptionsSeparator?: string; /** * Global variables to use in interpolation replacements * @default undefined */ defaultVariables?: { [index: string]: any }; /** * After how many interpolation runs to break out before throwing a stack overflow * @default 1000 */ maxReplaces?: number; /** * If true, it will skip to interpolate the variables * @default true */ skipOnVariables?: boolean; } export interface FallbackLngObjList { [language: string]: readonly string[]; } export type FallbackLng = | string | readonly string[] | FallbackLngObjList | ((code: string) => string | readonly string[] | FallbackLngObjList); export interface ReactOptions { /** * Set it to fallback to let passed namespaces to translated hoc act as fallbacks * @default 'default' */ nsMode?: 'default' | 'fallback'; /** * Set it to the default parent element created by the Trans component. * @default 'div' */ defaultTransParent?: string; /** * Set which events trigger a re-render, can be set to false or string of events * @default 'languageChanged' */ bindI18n?: string | false; /** * Set which events on store trigger a re-render, can be set to false or string of events * @default '' */ bindI18nStore?: string | false; /** * Set fallback value for Trans components without children * @default undefined */ transEmptyNodeValue?: string; /** * Set it to false if you do not want to use Suspense * @default true */ useSuspense?: boolean; /** * Function to generate an i18nKey from the defaultValue (or Trans children) * when no key is provided. * By default, the defaultValue (Trans text) itself is used as the key. * If you want to require keys for all translations, supply a function * that always throws an error. * @default undefined */ hashTransKey?(defaultValue: TOptionsBase['defaultValue']): TOptionsBase['defaultValue']; /** * Convert eg.
found in translations to a react component of type br * @default true */ transSupportBasicHtmlNodes?: boolean; /** * Which nodes not to convert in defaultValue generation in the Trans component. * @default ['br', 'strong', 'i', 'p'] */ transKeepBasicHtmlNodesFor?: readonly string[]; /** * Wrap text nodes in a user-specified element. * @default '' */ transWrapTextNodes?: string; /** * Default props to apply to all Trans components. * Component-level props will override these defaults. */ transDefaultProps?: { tOptions?: TOptions; values?: object; shouldUnescape?: boolean; components?: readonly unknown[] | { readonly [tagName: string]: unknown }; // Use `unknown` (or `any`) to be permissive without importing React. }; /** * Optional keyPrefix that will be automatically applied to returned t function in useTranslation for example. * Accepts a string or a selector function (e.g. `$ => $.deeply.nested`). * @default undefined */ keyPrefix?: string | (($: any) => any); /** * Unescape function * by default it unescapes some basic html entities */ unescape?(str: string): string; } export type ResourceKey = | string | { [key: string]: any; }; export interface ResourceLanguage { [namespace: string]: ResourceKey; } export interface Resource { [language: string]: ResourceLanguage; } export interface InitOptions extends PluginOptions { /** * Logs info level to console output. Helps finding issues with loading not working. * @default false */ debug?: boolean; /** * Resources to initialize with (if not using loading or not appending using addResourceBundle) * @default undefined */ resources?: Resource; /** * Allow initializing with bundled resources while using a backend to load non bundled ones. * @default false */ partialBundledLanguages?: boolean; /** * Language to use (overrides language detection) * @default undefined */ lng?: string; /** * Language to use if translations in user language are not available. * @default 'dev' */ fallbackLng?: false | FallbackLng; /** * Array of allowed languages * @default false */ supportedLngs?: false | readonly string[]; /** * If true will pass eg. en-US if finding en in supportedLngs * @default false */ nonExplicitSupportedLngs?: boolean; /** * Language codes to lookup, given set language is 'en-US': * 'all' --> ['en-US', 'en', 'dev'], * 'currentOnly' --> 'en-US', * 'languageOnly' --> 'en' * @default 'all' */ load?: 'all' | 'currentOnly' | 'languageOnly'; /** * Array of languages to preload. Important on server-side to assert translations are loaded before rendering views. * @default false */ preload?: false | readonly string[]; /** * Language will be lowercased eg. en-US --> en-us * @default false */ lowerCaseLng?: boolean; /** * Language will be lowercased EN --> en while leaving full locales like en-US * * From v27 codes without a region are canonicalized by default, as codes with one already are * (`'EN'` → `'en'`, `'iw'` → `'he'`), and this option is deprecated. * @default false */ cleanCode?: boolean; /** * String or array of namespaces to load * @default 'translation' */ ns?: string | readonly string[]; /** * Default namespace used if not passed to translation function * @default 'translation' */ defaultNS?: string | false | readonly string[]; /** * String or array of namespaces to lookup key if not found in given namespace. * @default false */ fallbackNS?: false | string | readonly string[]; /** * Calls the backend's `create()` for keys that are not found, so new keys * reach your translation files or service while you develop (keep it off * in production). `i18next-http-backend` posts them to its `addPath`; * `i18next-locize-backend` (https://www.locize.com/i18next?from=i18next_types__savemissing) * sends them to Locize, the translation management service by the i18next * maintainers, where they can be translated automatically. * @default false */ saveMissing?: boolean; /** * Calls save missing key function on backend if key not found also for plural forms. * @default false */ saveMissingPlurals?: boolean; /** * Experimental: enable to update default values using the saveMissing * (Works only if defaultValue different from translated value. * Only useful on initial development or when keeping code as source of truth not changing values outside of code. * Only supported if backend supports it already) * @default false */ updateMissing?: boolean; /** * @default 'fallback' */ saveMissingTo?: 'current' | 'all' | 'fallback'; /** * Used to not fallback to the key as default value, when using saveMissing functionality. * i.e. when using with i18next-http-backend this will result in having a key with an empty string value. * @default false */ missingKeyNoValueFallbackToKey?: boolean; /** * Used for custom missing key handling (needs saveMissing set to true!) * @default false */ missingKeyHandler?: | false | (( lngs: readonly string[], ns: string, key: string, fallbackValue: string, updateMissing: boolean, options: any, ) => void); /** * Receives a key that was not found in `t()` and returns a value, that will be returned by `t()` * @default noop */ parseMissingKeyHandler?(key: string, defaultValue?: string, options?: any): any; /** * Appends namespace to missing key * @default false */ appendNamespaceToMissingKey?: boolean; /** * Gets called in case a interpolation value is undefined. This method will not be called if the value is empty string or null * @default noop */ missingInterpolationHandler?: (text: string, value: any, options: InitOptions) => any; /** * String or array of postProcessors to apply per default * @default false */ postProcess?: false | string | readonly string[]; /** * passthrough the resolved object including 'usedNS', 'usedLang' etc into options object of postprocessors as 'i18nResolved' property * @default false */ postProcessPassResolved?: boolean; /** * Allows null values as valid translation * @default false */ returnNull?: boolean; /** * Allows empty string as valid translation * @default true */ returnEmptyString?: boolean; /** * Allows objects as valid translation result * @default false */ returnObjects?: boolean; /** * Returns an object that includes information about the used language, namespace, key and value * @default false */ returnDetails?: boolean; /** * Gets called if object was passed in as key but returnObjects was set to false. * What it returns is what `t()` returns. * @default noop */ returnedObjectHandler?(key: string, value: string, options: any): unknown; /** * Char, eg. '\n' that arrays will be joined by * @default false */ joinArrays?: false | string; /** * Sets defaultValue * @default args => ({ defaultValue: args[1] }) */ overloadTranslationOptionHandler?(args: string[]): TOptions; /** * @see https://www.i18next.com/translation-function/interpolation */ interpolation?: InterpolationOptions; /** * Options for react - check documentation of plugin * @default undefined */ react?: ReactOptions; /** * Triggers resource loading in init function inside a setTimeout (default async behaviour). * Set it to false if your backend loads resources sync - that way calling i18next.t after * init is possible without relaying on the init callback. * @default true */ initAsync?: boolean; /** * Char to separate keys * @default '.' */ keySeparator?: false | string; /** * Char to split namespace from key * @default ':' */ nsSeparator?: false | string; /** * Selector-API mode. Mirrors `CustomTypeOptions['enableSelector']`. * * - `false` (default): selector API disabled. * - `true` / `'optimize'`: selector resolution enabled. * - `'strict'`: require an explicit namespace as the first selector * path segment in every call. The resolver always rewrites a leading * namespace-matching segment as a namespace prefix. * * @default false */ enableSelector?: false | true | 'optimize' | 'strict'; /** * Char to split plural from key * @default '_' */ pluralSeparator?: string; /** * Char to split context from key * @default '_' */ contextSeparator?: string; /** * Prefixes the namespace to the returned key when using `cimode` * @default false */ appendNamespaceToCIMode?: boolean; /** * Compatibility JSON version * @warning only `v4` is available and supported by typescript * @default 'v4' * @deprecated has no effect since v24 (only the v4 JSON format is supported), removed in v27. Remove the option. */ compatibilityJSON?: 'v4'; /** * Options for https://github.com/locize/locize-lastused * @default undefined */ locizeLastUsed?: { /** * The id of your locize project */ projectId: string; /** * An api key if you want to send missing keys */ apiKey?: string; /** * The reference language of your project * @default 'en' */ referenceLng?: string; /** * Version * @default 'latest' */ version?: string; /** * Debounce interval to send data in milliseconds * @default 90000 */ debounceSubmit?: number; /** * Hostnames that are allowed to send last used data. * Please keep those to your local system, staging, test servers (not production) * @default ['localhost'] */ allowedHosts?: readonly string[]; }; /** * Automatically lookup for a flat key if a nested key is not found an vice-versa * @default true */ ignoreJSONStructure?: boolean; /** * Limit parallelism of calls to backend * This is needed to prevent trying to open thousands of * sockets or file descriptors, which can cause failures * and actually make the entire process take longer. * @default 10 */ maxParallelReads?: number; /** * The maximum number of retries to perform. * Note that retries are only performed when a request has no response * and throws an error. * The default value is used if value is set below 0. * @default 5 */ maxRetries?: number; /** * Set how long to wait, in milliseconds, between retries of failed requests. * This number is compounded by a factor of 2 for subsequent retry. * The default value is used if value is set below 1ms. * @default 350 */ retryTimeout?: number; /** * Initializes the internal formatter for the in-built formats as cached version. * Can be set to false for this type of issues: https://github.com/i18next/i18next/issues/2227 * @default true */ cacheInBuiltFormats?: boolean; } export interface TOptionsBase { /** * Default value to return if a translation was not found */ defaultValue?: unknown; /** * Count value used for plurals */ count?: number; /** * Ordinal flag for ordinal plurals */ ordinal?: boolean; /** * Used for contexts (eg. male\female) */ context?: unknown; /** * Object with vars for interpolation - or put them directly in options */ replace?: any; /** * Override language to use */ lng?: string; /** * Override languages to use */ lngs?: readonly string[]; /** * Override language to lookup key if not found see fallbacks for details */ fallbackLng?: false | FallbackLng; /** * Override namespaces (string or array) */ ns?: Namespace; /** * Override char to separate keys */ keySeparator?: false | string; /** * Override char to split namespace from key */ nsSeparator?: false | string; /** * Accessing an object not a translation string (can be set globally too) */ returnObjects?: boolean; /** * Returns an object that includes information about the used language, namespace, key and value */ returnDetails?: boolean; /** * Char, eg. '\n' that arrays will be joined by (can be set globally too) */ joinArrays?: string; /** * String or array of postProcessors to apply see interval plurals as a sample */ postProcess?: string | readonly string[]; /** * Override interpolation options */ interpolation?: InterpolationOptions; /** * Skip interpolation and nesting for this call (since v26.7.0 in the types) */ skipInterpolation?: boolean; /** * Optional keyPrefix that will be applied to the key before resolving. * Accepts a string or a selector function (e.g. `$ => $.deeply.nested`). * Only supported on the TFunction returned by getFixedT(). */ keyPrefix?: string | (($: any) => any); } export type TOptions = TOptionsBase & TInterpolationMap; export type FlatNamespace = $PreservedValue; export type Namespace = T | readonly T[]; export type DefaultNamespace = TypeOptions['defaultNS']; i18next-i18next-db698b1/typescript/t.d.ts000066400000000000000000001442571527173754700202330ustar00rootroot00000000000000import type { $OmitArrayKeys, $PreservedValue, $Dictionary, $SpecialObject, $StringKeyPathToRecord, $NoInfer, $Turtles, } from './helpers.js'; import type { TypeOptions, Namespace, FlatNamespace, DefaultNamespace, TOptions, TOptionsBase, } from './options.js'; /** @todo consider to replace {} with Record */ // Type Options type _ReturnObjects = TypeOptions['returnObjects']; type _ReturnEmptyString = TypeOptions['returnEmptyString']; type _ReturnNull = TypeOptions['returnNull']; type _KeySeparator = TypeOptions['keySeparator']; // `nsSeparator: false`: no `ns:key` keys (a `false` here made `nsfalsekey` keys and split keys containing "false") type _NsSeparator = Exclude; type _PluralSeparator = TypeOptions['pluralSeparator']; type _ContextSeparator = TypeOptions['contextSeparator']; type _FallbackNamespace = TypeOptions['fallbackNS']; type _Resources = TypeOptions['resources']; type _CompatibilityJSON = TypeOptions['compatibilityJSON']; type _InterpolationPrefix = TypeOptions['interpolationPrefix']; type _InterpolationSuffix = TypeOptions['interpolationSuffix']; type _InterpolationFormatSeparator = TypeOptions['interpolationFormatSeparator']; type _DefaultVariables = TypeOptions['defaultVariables']; type _UnescapePrefix = TypeOptions['unescapePrefix']; type _UnescapeSuffix = TypeOptions['unescapeSuffix']; type _StrictKeyChecks = TypeOptions['strictKeyChecks']; type _StrictInterpolationChecks = TypeOptions['strictInterpolationChecks']; type _EnableSelector = TypeOptions['enableSelector']; type _ParseInterpolation = TypeOptions['parseInterpolation']; type _InterpolationFormatTypeMap = TypeOptions['interpolationFormatTypeMap']; type $IsResourcesDefined = [keyof _Resources] extends [never] ? false : true; type $ValueIfResourcesDefined = $IsResourcesDefined extends true ? Value : Fallback; type $FirstNamespace = Ns extends readonly any[] ? Ns[0] : Ns; type Resources = $ValueIfResourcesDefined<_Resources, $Dictionary>; type PluralSuffix = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other'; type WithOrWithoutPlural = _CompatibilityJSON extends 'v4' ? Key extends `${infer KeyWithoutOrdinalPlural}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}` ? KeyWithoutOrdinalPlural | Key : Key extends `${infer KeyWithoutPlural}${_PluralSeparator}${PluralSuffix}` ? KeyWithoutPlural | Key : Key : Key; type JoinKeys = `${K1 & string}${_KeySeparator}${K2 & string}`; type AppendNamespace = `${Ns & string}${_NsSeparator}${Keys & string}`; type TrimSpaces = T extends `${infer Char}${infer Rest}` ? Char extends ' ' ? TrimSpaces : TrimSpaces : T extends '' ? Acc : never; interface Branded { $TFunctionBrand: $IsResourcesDefined extends true ? `${Ns extends readonly any[] ? Ns[0] : Ns}` : never; } /** * `keyof Res`, built once per resource object. TypeScript does not cache * `keyof` of an object type, so `keyof Res` inside a conditional that runs per * key (or per `t()` call) rebuilt the union of all keys every time: quadratic * in the namespace size. Conditional type instantiations are cached. */ type _KeysOf = [Res] extends [unknown] ? keyof Res : never; /** * `Res[Key & keyof Res]`: a literal key is looked up directly instead of being * intersected with every key; a wide key (`string`, `${string}_suffix` from a * string context) still matches all keys it covers. */ type _ValueOf = Key extends _KeysOf ? Res[Key] : _IsLiteral extends true ? never : Res[Key & _KeysOf]; /** **************************************************** * Build all keys and key prefixes based on Resources * ***************************************************** */ // Do NOT add a `[Res] extends [never]` guard here: it defers these into // conditional types, so `KeyPrefix` no longer resolves to a literal union // and `keyPrefix` inference widens to the whole namespace, polluting `t()` // return types with sibling keys (#2434 regression). Guard `never` in the merge. type KeysBuilderWithReturnObjects = Key extends _KeysOf ? Res[Key] extends $Dictionary | readonly unknown[] ? | JoinKeys>> | JoinKeys> : never : never; type KeysBuilderWithoutReturnObjects> = Key extends _KeysOf ? Res[Key] extends $Dictionary | readonly unknown[] ? JoinKeys> : Key : never; type KeysBuilder = $IsResourcesDefined extends true ? WithReturnObjects extends true ? keyof Res | KeysBuilderWithReturnObjects : KeysBuilderWithoutReturnObjects : string; type KeysWithReturnObjects = { [Ns in FlatNamespace]: WithOrWithoutPlural>; }; type KeysWithoutReturnObjects = { [Ns in FlatNamespace]: WithOrWithoutPlural>; }; type ResourceKeys = WithReturnObjects extends true ? KeysWithReturnObjects : KeysWithoutReturnObjects; /** ********************************************************************** * Parse t function keys based on the namespace, options and key prefix * *********************************************************************** */ export type KeysByTOptions = TOpt['returnObjects'] extends true ? ResourceKeys : ResourceKeys; export type NsByTOptions = TOpt['ns'] extends Namespace ? TOpt['ns'] : Ns; type ParseKeysByKeyPrefix = KPrefix extends string ? Keys extends `${KPrefix}${_KeySeparator}${infer Key}` ? Key : never : Keys; type ParseKeysByNamespaces = Ns extends readonly (infer UnionNsps)[] ? UnionNsps extends keyof Keys ? AppendNamespace : never : never; type ParseKeysByFallbackNs = _FallbackNamespace extends false ? never : _FallbackNamespace extends (infer UnionFallbackNs extends string)[] ? Keys[UnionFallbackNs] : Keys[_FallbackNamespace & string]; export type FilterKeysByContext = Context extends string ? Keys extends | `${infer Prefix}${_ContextSeparator}${Context}${_PluralSeparator}${PluralSuffix}` | `${infer Prefix}${_ContextSeparator}${Context}` ? Prefix : never : Keys; export type ParseKeys< Ns extends Namespace = DefaultNamespace, TOpt extends TOptions = {}, KPrefix = undefined, Keys extends $Dictionary = KeysByTOptions, ActualNS extends Namespace = NsByTOptions, Context extends TOpt['context'] = TOpt['context'], > = $IsResourcesDefined extends true ? FilterKeysByContext< | ParseKeysByKeyPrefix], KPrefix> | ParseKeysByNamespaces | ParseKeysByFallbackNs, Context > : string; /** ******************************************************* * Parse t function return type and interpolation values * ******************************************************** */ type ParseActualValue = Ret extends `${_UnescapePrefix}${infer ActualValue}${_UnescapeSuffix}` ? TrimSpaces : Ret; /** Parses interpolation entries as `[variableName, formatSpecifier | never]` tuples. */ type ParseInterpolationEntries = [_ParseInterpolation] extends [false | 'icu' | 'mf2'] ? never : Ret extends `${string}${_InterpolationPrefix}${infer Value}${_InterpolationSuffix}${infer Rest}` ? | (Value extends `${infer ActualValue}${_InterpolationFormatSeparator}${infer Format}` ? [ParseActualValue, TrimSpaces] : [ParseActualValue, never]) | ParseInterpolationEntries : never; /** Extracts just the variable names (kept for backward compat with ParseInterpolationValues usage). */ type ParseInterpolationValues = ParseInterpolationEntries[0]; /** Built-in i18next formatter name → value type mapping. */ type _BuiltInFormatTypeMap = { number: number; currency: number; datetime: Date; relativetime: number; list: readonly string[]; }; /** Strips inline formatting options, e.g. `currency(EUR)` → `currency`. */ type _StripFormatOptions = F extends `${infer Name}(${string})` ? Name : F; /** Resolves the type for a single interpolation entry based on name and format. */ type _ResolveEntryType = [Format] extends [never] ? Name extends 'count' ? number : string | number : Format extends keyof _InterpolationFormatTypeMap ? _InterpolationFormatTypeMap[Format] : _StripFormatOptions extends keyof _InterpolationFormatTypeMap ? _InterpolationFormatTypeMap[_StripFormatOptions & keyof _InterpolationFormatTypeMap] : Format extends keyof _BuiltInFormatTypeMap ? _BuiltInFormatTypeMap[Format] : _StripFormatOptions extends keyof _BuiltInFormatTypeMap ? _BuiltInFormatTypeMap[_StripFormatOptions & keyof _BuiltInFormatTypeMap] : string; /** Local union-to-intersection (not exported from helpers). */ type _UnionToIntersection = (T extends unknown ? (k: T) => void : never) extends ( k: infer I, ) => void ? I : never; /** Builds a per-entry typed record from parsed interpolation entries and intersects them. */ type _InterpolationMapFromEntries = _UnionToIntersection< E extends [infer Name extends string, infer Format] ? $StringKeyPathToRecord> : never >; /** ********************************************************************* * ICU MessageFormat arguments (`parseInterpolation: 'icu'`) * *********************************************************************** */ type _IcuWhitespace = ' ' | '\n' | '\t' | '\r'; type _IcuTrim = S extends `${_IcuWhitespace}${infer R}` ? _IcuTrim : S extends `${infer R}${_IcuWhitespace}` ? _IcuTrim : S; /** * Drops ICU apostrophe quoting as intl-messageformat (i18next-icu) reads it: * `''` is a literal apostrophe, `'{...}'` (also `'}'`, `'<'`, `'>'`, `'#'`) is * literal text up to the next single apostrophe. * Simplification: `'#` quotes everywhere here, at runtime only inside plurals. */ type _IcuStripQuotes = S extends `${infer L}'${infer R}` ? R extends `'${infer R2}` ? _IcuStripQuotes : R extends `${'{' | '}' | '<' | '>' | '#'}${string}` ? _IcuStripQuotes<_IcuSkipQuoted, `${Acc}${L}`> : _IcuStripQuotes : `${Acc}${S & string}`; type _IcuSkipQuoted = S extends `${string}'${infer R}` ? R extends `'${infer R2}` ? _IcuSkipQuoted : R : ''; /** Reads up to the `}` closing an already opened `{`; returns `[content, rest]`. */ type _IcuBlock< S, Acc extends string = '', Depth extends 0[] = [], > = S extends `${infer L}}${infer R}` ? L extends `${infer L2}{${infer R2}` ? _IcuBlock<`${R2}}${R}`, `${Acc}${L2}{`, [...Depth, 0]> : Depth extends [0, ...infer D extends 0[]] ? _IcuBlock : [`${Acc}${L}`, R] : never; /** `[name, type]` entries of every argument in a message, nested cases included. */ type _IcuEntries = S extends `${string}{${infer R}` ? _IcuBlock extends [infer Arg, infer Rest] ? _IcuEntries> : Acc : Acc; /** Walks plural/select cases: `[selector keys, entries of all case messages]`. */ type _IcuCases = S extends `${infer L}{${infer R}` ? _IcuBlock extends [infer Msg, infer Rest] ? _IcuCases, Acc | _IcuEntries> : [Keys, Acc] : [Keys, Acc]; type _IcuArg
= A extends `${infer Name},${infer Type},${infer Cases}` ? _IcuTrim extends 'plural' | 'selectordinal' ? [_IcuTrim, _IcuFormatType<_IcuTrim>] | _IcuCases[1] : _IcuTrim extends 'select' ? _IcuCases extends [infer Keys, infer E] ? [_IcuTrim, 'other' extends Keys ? Exclude | (string & {}) : Keys] | E : never : [_IcuTrim, _IcuFormatType<_IcuTrim>] // `{n, number, ::currency/EUR}` : A extends `${infer Name},${infer Type}` ? [_IcuTrim, _IcuFormatType<_IcuTrim>] : [_IcuTrim, _IcuFormatType]; /** `interpolationFormatTypeMap` wins, then ICU's built-in argument types. */ type _IcuFormatType = [F] extends [never] ? string | number : F extends keyof _InterpolationFormatTypeMap ? _InterpolationFormatTypeMap[F] : F extends 'number' | 'plural' | 'selectordinal' ? number : F extends 'date' | 'time' ? Date : string | number; /** * Merges `[name, type]` entries into one record: a name used twice gets both * types, a dotted MF2 name (`$user.name`) becomes a nested object. */ type _ArgsFromEntries = _UnionToIntersection< E extends [infer Name extends string, infer Type] ? Name extends `${string}.${string}` ? $StringKeyPathToRecord : { [K in Name]: Type } : never > extends infer M ? [E] extends [never] ? never : { [K in keyof M]: M[K] } : never; type _IcuArgsMap = Ret extends string ? string extends Ret ? never : _ArgsFromEntries<_IcuEntries<_IcuStripQuotes>> : never; /** ********************************************************************* * MessageFormat 2 variables (`parseInterpolation: 'mf2'`) * *********************************************************************** */ /** Drops `\`-escapes (`\{`, `\}`, `\|`, `\\`), so they are neither braces nor quotes. */ type _Mf2StripEscapes = S extends `${infer L}\\${string}${infer R}` ? _Mf2StripEscapes : `${Acc}${S & string}`; /** Reads an expression up to its `}`, skipping `|quoted literals|`; returns `[body, rest]`. */ type _Mf2Expression = S extends `${infer B}}${infer Rest}` ? B extends `${infer Before}|${infer Lit}` ? `${Lit}}${Rest}` extends `${string}|${infer After}` ? _Mf2Expression : never : [`${Acc}${B}`, Rest] : never; /** `[name, type]` entries of every variable in a message's expressions; `{{` opens a quoted pattern. */ type _Mf2Entries = S extends `${string}{${infer R}` ? R extends `{${infer Pattern}` ? _Mf2Entries : _Mf2Expression extends [infer Body, infer Rest] ? _Mf2Entries>> : Acc : Acc; type _Mf2Space = S extends `${infer L}${C}${infer R}` ? _Mf2Space<`${L} ${R}`, C> : S; type _Mf2Spaces = _IcuTrim<_Mf2Space<_Mf2Space<_Mf2Space, '\t'>, '\r'>>; type _Mf2Name = S extends `${infer N} ${string}` ? _Mf2Name : S extends `${infer N}/${string}` ? N : S; /** `{$x :fn opt=$y}`: `$x` typed by its function, option and markup variables `string | number`. */ type _Mf2ExprEntries = Body extends `$${infer R}` ? R extends `${infer Name} ${infer Tail}` ? | [Name, _Mf2FunctionType<_IcuTrim extends `:${infer F}` ? _Mf2Name : never>] | _Mf2Vars : [_Mf2Name, _Mf2FunctionType] : _Mf2Vars; /** Every `$name` in a string, typed `string | number`. */ type _Mf2Vars = S extends `${string}$${infer R}` ? _Mf2Vars, string | number]> : Acc; /** `interpolationFormatTypeMap` wins, then messageformat's built-in functions. */ type _Mf2FunctionType = [F] extends [never] ? string | number : F extends keyof _InterpolationFormatTypeMap ? _InterpolationFormatTypeMap[F] : F extends 'number' | 'integer' | 'currency' | 'percent' | 'offset' | 'unit' | 'math' ? number : F extends 'datetime' | 'date' | 'time' ? Date : F extends 'string' ? string : string | number; /** Names declared by `.local $name = ...` (local, not passed in). */ type _Mf2Locals = S extends `${string}.local${infer R}` ? _Mf2Locals extends `$${infer N}=${string}` ? _IcuTrim : never)> : Acc; /** `.match $a $b`: selectors, normally also declared by `.input` or `.local`. */ type _Mf2Selectors = S extends `${string}.match${infer R}` ? _Mf2Vars<_Mf2Spaces> : never; type _Mf2ArgsMap = Ret extends string ? string extends Ret ? never : _Mf2StripEscapes extends infer S ? _ArgsFromEntries< Exclude< _Mf2Entries | _Mf2Selectors, [_IcuTrim extends `.${string}` ? _Mf2Locals : never, unknown] > > : never : never; /** The variables declared in `defaultVariables` are optional: they are filled in at runtime. */ type _WithDefaultVariables = [keyof _DefaultVariables] extends [never] ? Map : Omit & Partial>; export type InterpolationMap = _WithDefaultVariables< [_ParseInterpolation] extends ['icu'] ? $PreservedValue<_IcuArgsMap, Record> : [_ParseInterpolation] extends ['mf2'] ? $PreservedValue<_Mf2ArgsMap, Record> : $PreservedValue< _InterpolationMapFromEntries>, Record > >; type ParseTReturnPlural< Res, Key, KeyWithPlural = `${Key & string}${_PluralSeparator}${PluralSuffix}`, > = _ValueOf; type ParseTReturnPluralOrdinal< Res, Key, KeyWithOrdinalPlural = `${Key & string}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}`, > = _ValueOf; type ParseTReturnWithFallback = Val extends '' ? _ReturnEmptyString extends true ? '' : Key : Val extends null ? _ReturnNull extends true ? null : Key : Val; type ParseTReturn = ParseTReturnWithFallback< Key, Key extends `${infer K1}${_KeySeparator}${infer RestKey}` ? ParseTReturn, TOpt> : // Process plurals only if count is provided inside options TOpt['count'] extends number ? TOpt['ordinal'] extends boolean ? ParseTReturnPluralOrdinal : ParseTReturnPlural : // otherwise access plain key without adding plural and ordinal suffixes Res extends readonly unknown[] ? Key extends `${infer NKey extends number}` ? Res[NKey] : never : _ValueOf >; type TReturnOptionalNull = _ReturnNull extends true ? null : never; type TReturnOptionalObjects = _ReturnObjects extends true ? $SpecialObject | string : TOpt['returnObjects'] extends true ? $SpecialObject : string; type DefaultTReturn = TReturnOptionalObjects | TReturnOptionalNull; export type KeyWithContext = TOpt['context'] extends string ? `${Key & string}${_ContextSeparator}${TOpt['context']}` : Key; export type ContextOfKey< Key extends string, Ns extends Namespace = DefaultNamespace, TOpt extends TOptions = {}, KPrefix = undefined, Keys extends $Dictionary = KeysByTOptions, ActualNS extends Namespace = NsByTOptions, ActualKeys = | ParseKeysByKeyPrefix], KPrefix> | ParseKeysByNamespaces | ParseKeysByFallbackNs, > = $IsResourcesDefined extends true ? Key extends ActualKeys ? string : ActualKeys extends | `${Key}${_ContextSeparator}${infer Context}${_PluralSeparator}${PluralSuffix}` | `${Key}${_ContextSeparator}${infer Context}` ? Context : never : string; // helper that maps the configured fallbackNS value to the matching resources slice type FallbackResourcesOf = FallbackNS extends readonly (infer FN)[] ? R[FN & keyof R] : [FallbackNS] extends [false] ? never : R[Extract & keyof R]; /* reuse the parse helpers as top-level aliases (no nested type declarations) */ type _PrimaryParse< ActualKey, PrimaryNS extends keyof Resources, TOpt extends TOptions, > = ParseTReturn; type _FallbackParse = [ FallbackResourcesOf, ] extends [never] ? never : ParseTReturn, TOpt>; export type TFunctionReturn< Ns extends Namespace, Key, TOpt extends TOptions, ActualNS extends Namespace = NsByTOptions, ActualKey = KeyWithContext, > = $IsResourcesDefined extends true ? ActualKey extends `${infer Nsp}${_NsSeparator}${infer RestKey}` ? ParseTReturn : $FirstNamespace extends infer PrimaryNS ? [PrimaryNS] extends [keyof Resources] ? [_PrimaryParse] extends [never] ? [_FallbackParse] extends [never] ? DefaultTReturn : _FallbackParse : _PrimaryParse : never : never : DefaultTReturn; export type TFunctionDetailedResult = { /** * The plain used key */ usedKey: string; /** * The translation result. */ res: T; /** * The key with context / plural */ exactUsedKey: string; /** * The used language for this translation. */ usedLng: string; /** * The used namespace for this translation. */ usedNS: string; /** * The parameters used for interpolation. */ usedParams: InterpolationMap & { count?: TOpt['count'] }; }; type TFunctionProcessReturnValue = Ret extends string | $SpecialObject | null ? Ret : [DefaultValue] extends [never] ? Ret : DefaultValue; type TFunctionReturnOptionalDetails = TOpt['returnDetails'] extends true ? TFunctionDetailedResult : Ret; type AppendKeyPrefix = KPrefix extends string ? `${KPrefix}${_KeySeparator}${Key & string}` : Key; /** * Resolves the effective key prefix by preferring a per-call `keyPrefix` from * options over the interface-level `KPrefix` (set via getFixedT's 3rd argument). */ type EffectiveKPrefix = TOpt extends { keyPrefix: infer OptKP extends string } ? OptKP : KPrefix; /** `parseInterpolation: 'icu'` or `'mf2'`: messages are typed by their arguments. */ type _ParsesMessageFormat = [_ParseInterpolation] extends ['icu'] | ['mf2'] ? true : false; /** * Whether `t()` options are required for a message with variables: always under * ICU / MF2 (on a missing one, i18next-icu renders the raw message and * i18next-mf2 a `{$name}` fallback), and with `strictInterpolationChecks: true` * for `{{variables}}` (i18next renders the raw placeholder). */ type _RequiresMessageOptions = _ParsesMessageFormat extends true ? true : [_ParseInterpolation] extends [true] ? _StrictInterpolationChecks extends true ? true : false : false; /** * `t()` options are optional, except for a message with variables when * `_RequiresMessageOptions` is true. The conditional resolves eagerly; a generic * one here would break inference. */ type _KeyAndOptions = _RequiresMessageOptions extends true ? [key: Key | Key[], options: Opts] | [key: (Key | Key[]) & _IfOptionalOptions] : [key: Key | Key[], options?: Opts]; /** * `t(key, defaultValue)` under `strictKeyChecks`: the variables are required only * with `strictInterpolationChecks`, else `unknown` (the call stays as before). */ type _IfOptionalDefaultOptions = _StrictInterpolationChecks extends true ? _IfOptionalOptions : unknown; /** `unknown` when options may be left out, else a type naming the missing arguments. */ type _IfOptionalOptions = _RequiresMessageOptions extends true ? {} extends InterpolationMap ? unknown : { 'pass these arguments as t() options': InterpolationMap } : unknown; /** Options parameter of a selector overload: required for a message with arguments. */ type _SelectorOptionsArg = unknown extends _IfOptionalOptions ? [options?: Opts] : [options: Opts]; /** Union of the values an array of selectors resolves to (plural brands kept). */ type _SelectorsReturn = Fns[number] extends ( ...args: any[] ) => infer R ? R : never; /** Whether any member of the union is a plural group (`false` for `any`). */ type _HasPlural = 0 extends 1 & R ? false : [Extract>] extends [never] ? false : true; /** `{ count: number }` when any member of the union is a plural group. */ type _CountIfPlural = _HasPlural extends true ? { count: number } : {}; /** Options of a selector-array overload: required for variables or a plural member. */ type _SelectorArrayOptionsArg = _HasPlural extends true ? [options: Opts & { count: number } & InterpolationMap>] : _SelectorOptionsArg, Opts & InterpolationMap>>; /** ************************ * T function declaration * ************************* */ interface TFunctionStrict< Ns extends Namespace = DefaultNamespace, KPrefix = undefined, > extends Branded { < const Key extends ParseKeys> | TemplateStringsArray, const TOpt extends TOptions, Ret extends TFunctionReturn>, TOpt>, >( key: Key | Key[], options: TOpt & InterpolationMap & { context?: Key extends string ? unknown extends TOpt['context'] ? TOpt['context'] : ContextOfKey> : never; }, ): TFunctionReturnOptionalDetails, never>, TOpt>; < const Key extends ParseKeys> | TemplateStringsArray, const TOpt extends TOptions, Ret extends TFunctionReturn>, TOpt>, >( key: (Key | Key[]) & _IfOptionalOptions<$NoInfer>, ): TFunctionReturnOptionalDetails, never>, TOpt>; < const Key extends ParseKeys> | TemplateStringsArray, const TOpt extends TOptions, Ret extends TFunctionReturn>, TOpt>, >( key: Key | Key[], defaultValue: string, options: TOpt & InterpolationMap & { context?: Key extends string ? unknown extends TOpt['context'] ? TOpt['context'] : ContextOfKey> : never; }, ): TFunctionReturnOptionalDetails, never>, TOpt>; < const Key extends ParseKeys> | TemplateStringsArray, const TOpt extends TOptions, Ret extends TFunctionReturn>, TOpt>, >( key: (Key | Key[]) & _IfOptionalDefaultOptions<$NoInfer>, defaultValue: string, ): TFunctionReturnOptionalDetails, never>, TOpt>; } interface TFunctionNonStrict< Ns extends Namespace = DefaultNamespace, KPrefix = undefined, > extends Branded { < const Key extends ParseKeys> | TemplateStringsArray, const TOpt extends TOptions, Ret extends TFunctionReturn>, TOpt>, const ActualOptions extends Omit & InterpolationMap & { context?: Key extends string ? unknown extends TOpt['context'] ? TOpt['context'] : ContextOfKey> : never; } = TOpt & InterpolationMap & { context?: Key extends string ? unknown extends TOpt['context'] ? TOpt['context'] : ContextOfKey> : never; }, DefaultValue extends string = never, >( // `[key, defaultValue, options?]` is written as two tuples: on a failed call, // TypeScript elaborates the error against the last of the equally matching // members, and TypeScript 7 sorts a 3-element tuple last, so a wrong options // object was reported as "not assignable to type 'string'" instead of the // missing or mistyped argument. ...args: | [key: string | string[], options: TOpt & $Dictionary & { defaultValue: DefaultValue }] | [key: string | string[], defaultValue: DefaultValue] | [key: string | string[], defaultValue: DefaultValue, options: TOpt & $Dictionary] | _KeyAndOptions, ActualOptions> ): TFunctionReturnOptionalDetails, DefaultValue>, TOpt>; } type TFunctionSignature< Ns extends Namespace = DefaultNamespace, KPrefix = undefined, > = _EnableSelector extends true | 'optimize' | 'strict' ? TFunctionSelector> : _StrictKeyChecks extends true ? TFunctionStrict : TFunctionNonStrict; export interface TFunction< Ns extends Namespace = DefaultNamespace, KPrefix = undefined, > extends TFunctionSignature {} export type KeyPrefix = ResourceKeys[$FirstNamespace] | undefined; /** * The keys of `ParseKeys` that `t()` takes without options: their string has no * variables, and a plural key is left out when its forms take `count`. For a wrapper that passes a * key on to `t()`, which then compiles with `strictInterpolationChecks` (since v26.7.0): * * @example * ```ts * import type { ParseKeysWithoutVariables } from 'i18next'; * * const label = (key: ParseKeysWithoutVariables<'common'>) => t(key); * ``` */ export type ParseKeysWithoutVariables< Ns extends Namespace = DefaultNamespace, KPrefix = undefined, > = _KeysWithoutVariables, Ns, KPrefix>; // resolved with `count`, so a plural key is checked against its plural forms type _KeysWithoutVariables = Key extends string ? {} extends InterpolationMap< TFunctionReturn, { count: number }> > ? Key : never : never; /** * Strict variant: every namespace (primary included) is exposed under its own * key on `$`. The flattened-primary form (`Resources[Ns[0]] &`) is dropped, so * `$.foo` no longer typechecks when `foo` is a key in the primary namespace — * callers must write `$.primary.foo`. Applied uniformly to single- and * multi-ns hooks under `enableSelector: 'strict'`. */ type _NsResourceStrict = Ns extends readonly any[] ? PickNamespaces : PickNamespaces; /** The raw (unfiltered) resource object for a given namespace. */ export type NsResource = [_EnableSelector] extends ['strict'] ? _NsResourceStrict : Ns extends readonly [keyof Resources, any, ...any] ? Resources[Ns[0]] & PickNamespaces : Resources[$FirstNamespace]; /** A selector function that can be used as `keyPrefix` to scope `t()` to a sub-tree of the resource. */ export type KeyPrefixSelector = (src: NsResource) => object; /** * The type of a selector function accepted by `t()` for a given namespace and optional key prefix. * Use this instead of `Parameters>[0]` for a stable, readable type. * * @example * ```ts * import type { SelectorParam } from 'i18next'; * * interface CmpProps { * i18nKey: SelectorParam<'myNamespace'>; * } * ``` */ export type SelectorParam = ( src: Select, undefined>, ) => string; /// ////////////// /// /// ↆ selector ↆ /// /// ////////////// /// declare const $PluralBrand: unique symbol; /** Marks a value as coming from a plural-form key, requiring `count` in the selector options. */ type PluralValue = T & { readonly [$PluralBrand]: typeof $PluralBrand }; declare const $SelectorKeyBrand: unique symbol; /** * A branded string produced by {@link keyFromSelector}. * Can be passed directly to `t()` when the selector API is enabled. */ export type SelectorKey = string & { readonly [$SelectorKeyBrand]: typeof $SelectorKeyBrand }; /** * Type-safe signature for {@link keyFromSelector}. * Constrains the selector callback against the default namespace's resources * (same source that `t()` uses for selectors without explicit `ns`). * When resources are not defined, accepts any selector. */ export type KeyFromSelectorFn = < Ns extends Namespace = DefaultNamespace, KPrefix extends KeyPrefix = undefined, >( selector: (src: Select, undefined>) => any, opts?: { ns?: Ns; keyPrefix?: KPrefix }, ) => SelectorKey; /** Recursively strips the {@link PluralValue} brand from a type (handles nested objects for `returnObjects`). */ type DeepUnwrapPlural = T extends PluralValue ? U : T extends readonly any[] ? { [I in keyof T]: DeepUnwrapPlural } : T extends object ? { [K in keyof T]: DeepUnwrapPlural } : T; type NsArg = Ns[number] | readonly Ns[number][]; interface TFunctionSelector extends Branded { // ── Pre-computed key(s) from keyFromSelector ──────────────────────────────── // Accepts a branded `SelectorKey` (or array of them) produced by `keyFromSelector`. // Return-type precision is traded for the flexibility of decoupled key creation. // Placed first so that the more general selector overloads (below) are last — // TypeScript's `Parameters<>` utility resolves against the last call signature. = SelectorOptions>( key: SelectorKey | SelectorKey[], ...args: [options?: Opts & $Dictionary] ): DefaultTReturn; // ── Array of selectors with explicit `ns` ─────────────────────────────────── < Target extends ConstrainTarget, const NewNs extends NsArg & Namespace, const Opts extends SelectorOptions, NewSrc extends GetSource, >( selectors: readonly SelectorFn, Opts>[], options: Opts & InterpolationMap & { ns: NewNs } & _CountIfPlural, ): SelectorReturn; // ── Single selector with explicit `ns` ────────────────────────────────────── < Target extends ConstrainTarget, const NewNs extends NsArg & Namespace, const Opts extends SelectorOptions, NewSrc extends GetSource, >( selector: SelectorFn, Opts>, options: Opts & InterpolationMap> & { ns: NewNs; } & (Target extends PluralValue ? { count: number } : {}), ): SelectorReturn; // ── Array of selectors with defaultValue — preserves literal type of DV ───── // Same TypeScript limitation as the single-selector defaultValue overload below: // `const Opts` loses the `defaultValue` literal when inferred through the // conditional rest tuple of the general array overload. A plural member // requires `count`, as in the single-selector overload. < const Fns extends readonly ((src: Select) => string | object)[], const DV extends string, const Opts extends SelectorOptions = SelectorOptions, >( selectors: Fns, options: Opts & { defaultValue: DV } & _CountIfPlural<_SelectorsReturn> & InterpolationMap>>, ): SelectorReturn<_SelectorsReturn, Opts, DV>; // ── Array of selectors with default `ns` ───────────────────────────────────── // Captures the selector tuple as `const Fns` so TypeScript preserves each // element's exact return type. The union of return types is then extracted // via a distributive `infer`, which correctly handles mixed PluralValue and // plain-string callbacks that would otherwise cause TypeScript to "lock in" the // type from the first element. < const Fns extends readonly ((src: Select) => string | object)[], const Opts extends SelectorOptions = SelectorOptions, >( selectors: Fns, ...args: _SelectorArrayOptionsArg<_SelectorsReturn, Opts> ): SelectorReturn<_SelectorsReturn, Opts>; // ── Single selector with context + returnObjects ──────────────────────────── // More specific than the general context overload below. Captures `Context` as // a const generic and uses `const Fn` + `ReturnType` so FilterKeys sees the // concrete context and the callback's object/array shape is preserved (#2398). // Without this, `ConstrainTarget` / `ApplyTarget` collapse to `unknown` when // `returnObjects: true`. < const Context extends string, const Fn extends (src: Select) => any, const Opts extends SelectorOptions & { context: Context; returnObjects: true; } = SelectorOptions & { context: Context; returnObjects: true }, >( selector: Fn, options: Opts & InterpolationMap>>, ): SelectorReturn, Opts>; // ── Single selector with context — bypasses count enforcement ──────────────── // When `context` is present in options, `Target` is derived from the // context-filtered source (third mapped type of FilterKeys), which does NOT // apply the PluralValue brand. A separate overload avoids the circular // inference that would otherwise occur when `Opts['context']` sits inside the // conditional rest tuple of the overload below. < Target extends ConstrainTarget, const NewNs extends NsArg = Ns[number], const Opts extends SelectorOptions & { context: string } = SelectorOptions & { context: string; }, >( selector: SelectorFn, Opts>, options: Opts & InterpolationMap, ): SelectorReturn; // ── Single selector with defaultValue — preserves literal type of DV ──────── // `const Opts` loses literal precision for `defaultValue` when inferred // through a conditional rest tuple (TypeScript limitation). This dedicated // overload captures `DV` from a regular (non-conditional) parameter position, // preserving its literal type. Count enforcement for plural keys is achieved // via a conditional intersection on the options parameter. < const Fn extends (src: Select) => ConstrainTarget, const DV extends string, const Opts extends SelectorOptions = SelectorOptions, >( selector: Fn, options: Opts & { defaultValue: DV } & (ReturnType extends PluralValue ? { count: number } : {}) & InterpolationMap>>, ): SelectorReturn, Opts, DV>; // ── Single selector without context — enforces count for plural keys ────────── // Uses `const Fn` to capture the selector's exact return type independently of // `Opts`, breaking the circular dependency between `Target` inference and the // conditional rest tuple. `ReturnType` drives both the plural check and // the return type; `Opts` is inferred later from the resolved rest args. < const Fn extends (src: Select) => ConstrainTarget, const Opts extends SelectorOptions = SelectorOptions, >( selector: Fn, ...args: ReturnType extends PluralValue ? [options: Opts & { count: number } & InterpolationMap>>] : _SelectorOptionsArg, Opts & InterpolationMap>> ): SelectorReturn, Opts>; } interface SelectorOptions extends Omit, $Dictionary { ns?: Ns; } type SelectorReturn< Target, Opts extends { defaultValue?: unknown; returnObjects?: boolean }, DV = Opts['defaultValue'], > = $IsResourcesDefined extends true ? TFunctionReturnOptionalDetails, DV>, Opts> : DefaultTReturn; /** Public for react-i18next's `Trans` types (since v26.7.0). */ export interface SelectorFn> { (translations: Select): Target; } type ApplyKeyPrefix< T extends [any], KPrefix, > = KPrefix extends `${infer Head}${_KeySeparator}${infer Tail}` ? ApplyKeyPrefix<[T[0][Head]], Tail> : T[0][KPrefix & string]; /** Public for react-i18next's `Trans` types (since v26.7.0). */ export type ApplyTarget< Target, Opts extends { returnObjects?: unknown }, > = Opts['returnObjects'] extends true ? unknown : Target; /** Public for react-i18next's `Trans` types (since v26.7.0). */ export type ConstrainTarget> = _ReturnObjects extends true ? unknown : Opts['returnObjects'] extends true ? unknown : $IsResourcesDefined extends false ? unknown : string; type ProcessReturnValue = $Turtles extends Target ? string : [DefaultValue] extends [never] ? Target : unknown extends DefaultValue ? Target : Target | DefaultValue; type PickNamespaces = { [P in K as P extends keyof T ? P : never]: T[P & keyof T]; }; /** Extracts the sub-tree returned by a selector function used as keyPrefix. */ type SelectorReturnSource = KPrefix extends (...args: any[]) => infer R ? R extends object ? R : Fallback : Fallback; /** Public for react-i18next's `Trans` types (since v26.7.0). */ export type GetSource> = KPrefix extends ( ...args: any[] ) => any ? SelectorReturnSource : KPrefix extends keyof Res ? Res[KPrefix] : undefined extends KPrefix ? Res : ApplyKeyPrefix<[Res], KPrefix>; type Select = $IsResourcesDefined extends false ? $Turtles : [_EnableSelector] extends ['optimize'] ? T : FilterKeys; /** * Context-variant keys that are actually present (not JSON-union phantoms typed * as optional `undefined`, e.g. `transKey1_withContext?: undefined`). */ type _DefinedContextKeys = { [P in keyof T as P extends Pattern ? ([T[P]] extends [undefined] ? never : P) : never]: true; }; /** * Keys of T whose value is not `undefined` (JSON-union phantoms are typed as * optional `undefined`), built once per object. */ type _DefinedKeys = [T] extends [unknown] ? keyof { [P in keyof T as [T[P]] extends [undefined] ? never : P]: true } : never; /** * For every defined key, the prefixes K before each context separator, as * `[all, bases]`: `all` has every K with a defined key `${K}${_ContextSeparator}...`, * `bases` only those where the rest is not just a plural suffix. Jumps from one * separator occurrence to the next (so the recursion depth is the number of * separators, not the key length, which can be a whole sentence) and resumes one * character after the match, so overlapping occurrences (`a___b` with `__`) count. */ type _ContextPrefixesOf< P, Head extends string = '', All = never, Bases = never, > = P extends `${infer B}${_ContextSeparator}${string}` ? P extends `${B}${infer FromSep}` ? FromSep extends `${infer C}${infer Rest}` ? _ContextPrefixesOf< Rest, `${Head}${B}${C}`, All | `${Head}${B}`, FromSep extends | `${_PluralSeparator}${PluralSuffix}` | `${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}` ? Bases : Bases | `${Head}${B}` > : [All, Bases] : [All, Bases] : [All, Bases]; /** * The context prefixes of an object, built once per object (conditional type * instantiations are cached): scanning all keys for every key was quadratic * in the object size, TS2589 at about 1,000 keys with context variants. */ type _ContextPrefixes = [T] extends [unknown] ? _ContextPrefixesOf<_DefinedKeys & string> : never; type _AllContextPrefixes = [T] extends [unknown] ? _ContextPrefixes[0] : never; type _ContextBases = [T] extends [unknown] ? _ContextPrefixes[1] : never; /** Whether a string type is a single literal (not `string` or a `${string}` pattern). */ type _IsLiteral = {} extends Record ? false : true; /** * Whether T has a defined key matching Pattern: literal keys are looked up, a * pattern with a wide member scans the keys. */ type _HasDefinedKey = [ false extends (Pattern extends unknown ? _IsLiteral : never) ? keyof _DefinedContextKeys : Extract>, ] extends [never] ? false : true; type _HasContextVariant = string extends Context ? _IsLiteral extends true ? K extends _AllContextPrefixes ? true : false : _HasDefinedKey : _HasDefinedKey< T, | `${K}${_ContextSeparator}${Context & string}` | `${K}${_ContextSeparator}${Context & string}${_PluralSeparator}${PluralSuffix}` >; /** Checks whether key K has **any** context variant in T (excluding pure plural suffixes). */ type _IsContextualKey = _IsLiteral extends true ? K extends _ContextBases ? true : false : [ Exclude< keyof _DefinedContextKeys, | `${K}${_PluralSeparator}${PluralSuffix}` | `${K}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}` >, ] extends [never] ? false : true; /** * Distributes {@link FilterKeysObject} over unions so heterogeneous JSON array * element types (each object literal in the array) are filtered independently, * then re-unified. Without distribution, `keyof (A | B)` is only the common keys * and context variants that exist on a single element are invisible, which * produced partial element unions for `returnObjects` + `context` (#2398). */ type FilterKeys = [T] extends [readonly any[]] ? { [I in keyof T]: FilterKeys } : T extends any ? FilterKeysObject : never; type FilterKeysObject = { // Mapped type 1: object-valued keys (recurse) + plain leaf keys (non-plural, non-context) [ K in keyof T as [keyof T[K]] extends [never] ? never // nothing to select (empty object, null, undefined, optional or unknown) : T[K] extends object ? K : [Context] extends [string] ? K extends | `${string}${_ContextSeparator}${Context}` | `${string}${_ContextSeparator}${Context}${_PluralSeparator}${PluralSuffix}` ? never // context keys handled by mapped type 3 : K extends `${string}${_PluralSeparator}${PluralSuffix}` ? never // plural keys handled by mapped type 2 : K extends string ? _HasContextVariant extends true ? never // context variant exists, drop base key (type 3 handles it) : _IsContextualKey extends true ? never // key has context variants but not for this context : K // no context variants at all, keep base key : K : K extends `${string}${_PluralSeparator}${PluralSuffix}` ? never : K ]: T[K] extends object ? FilterKeys : T[K]; } & { // Mapped type 2: plural collapsing (active regardless of context) [ K in keyof T as T[K] extends object ? never : [Context] extends [string] ? K extends | `${string}${_ContextSeparator}${Context}` | `${string}${_ContextSeparator}${Context}${_PluralSeparator}${PluralSuffix}` ? never // context keys handled by mapped type 3 : K extends | `${infer Prefix}${_PluralSeparator}${PluralSuffix}` | `${infer Prefix}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}` ? Prefix : never : K extends | `${infer Prefix}${_PluralSeparator}${PluralSuffix}` | `${infer Prefix}${_PluralSeparator}ordinal${_PluralSeparator}${PluralSuffix}` ? Prefix : never ]: T[K] extends object ? FilterKeys : PluralValue; } & { // Mapped type 3: context key collapsing (skip JSON-union phantoms typed as `undefined`) [ K in keyof T as T[K] extends object ? never : [keyof T[K]] extends [never] ? never : [Context] extends [string] ? K extends | `${infer Prefix}${_ContextSeparator}${Context}` | `${infer Prefix}${_ContextSeparator}${Context}${_PluralSeparator}${PluralSuffix}` ? Prefix : never : never ]: T[K] extends object ? FilterKeys : T[K]; }; i18next-i18next-db698b1/vitest.config.mts000066400000000000000000000011401527173754700202560ustar00rootroot00000000000000import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { projects: [ { test: { name: 'runtime', dir: './test/runtime', }, }, { test: { name: 'compatibility', dir: './test/compatibility', }, }, ], coverage: { reporter: ['text', 'html', 'json', 'lcov'], include: ['**/src/*.js'], exclude: [ '**/src/index.js', '**/src/shallowEqual.js', '**/node_modules/**', '**/test/**', '**/example/**', ], }, }, }); i18next-i18next-db698b1/vitest.workspace.local.mts000066400000000000000000000004171527173754700221060ustar00rootroot00000000000000import { defineConfig } from 'vitest/config'; /** * See CONTRIBUTING.md for more information */ export default defineConfig({ test: { projects: [ { test: { name: 'local', dir: './test/local', }, }, ], }, }); i18next-i18next-db698b1/vitest.workspace.typescript.mts000066400000000000000000000045511527173754700232250ustar00rootroot00000000000000import { readdirSync } from 'node:fs'; import { resolve } from 'node:path'; import { defineConfig } from 'vitest/config'; import type { UserProjectConfigExport } from 'vitest/config'; export default defineConfig({ test: { projects: /** * If you need to test multiple typescript configurations (like misc) simply create a file named tsconfig.{customName}.json * and this script will automatically create a new workspace named with the dirName followed by `customName` */ readdirSync('./test/typescript', { withFileTypes: true }) .filter((dir) => dir.isDirectory()) .reduce((workspaces, dir) => { const dirPath = `test/typescript/${dir.name}` as const; const tsConfigFiles = readdirSync(dirPath).filter( // Do not include temporary vitest tsconfig files (it) => it.startsWith('tsconfig.') && it.endsWith('.json') && !it.includes('vitest-temp'), ); tsConfigFiles.forEach((tsConfigFileName) => { const workspaceName = tsConfigFileName === 'tsconfig.json' ? dir.name : `${dir.name}-${tsConfigFileName.split('.')[1]}`; const workspaceConfig: UserProjectConfigExport = { test: { dir: `./${dirPath}`, name: workspaceName, alias: { /** * From `vitest` >= 2 imports are resolved even if we are running only typecheck tests. * This will result in: * ```text * Error: Failed to resolve entry for package "i18next". The package may have incorrect main/module/exports specified in its package.json. * ``` * To avoid a useless build process before running these tests an empty alias to `i18n` is added. */ i18next: resolve(import.meta.dirname, 'test/typescript/_stub.js'), }, typecheck: { enabled: true, only: true, include: ['**/*.test.ts'], tsconfig: `./${dirPath}/${tsConfigFileName}`, }, }, }; workspaces.push(workspaceConfig); }); return workspaces; }, []), }, });